第一步:创建src目录
$ mkdir ros2-demo
$ cd ros2-demo/
$ mkdir src
$ cd src/
第二步:创建功能包
cd src$
ros2 pkg create --build-type ament_cmake ros2_demo --dependencies rclcpp std_msgs
ros2 pkg create --build-type ament_python learning_pkg_python # Python
ros2命令中:
pkg:表示功能包相关的功能;
create:表示创建功能包;
build-type:表示新创建的功能包是C++还是Python的,如果使用C++或者C,那这里就跟ament_cmake,如果使用Python,就跟ament_python
package_name:新建功能包的名字。比如在终端中分别创建C++和Python版本的功能包:
第三步:确定功能包
c++/c功能包
首先看下C++类型的功能包,其中必然存在两个文件:package.xml和CMakerLists.txt。
package.xml文件的主要内容如下,包含功能包的版权描述,和各种依赖的声明。
CMakeLists.txt文件是编译规则,C++代码需要编译才能运行,所以必须要在该文件中设置如何编译,使用CMake语法。
2.python功能包
C++功能包需要将源码编译成可执行文件,但是Python语言是解析型的,不需要编译,所以会有一些不同,但也会有这两个文件:package.xml和setup.py。
package.xml文件的主要内容和C++版本功能包一样,包含功能包的版权描述,和各种依赖的声明。
setup.py文件里边也包含一些版权信息,除此之外,还有“entry_points”配置的程序入口。
第四步:创建节点文件
cd ~/ros2-demo/src/ros2_demo
sudo gedit sub_node.cpp
sub_node.cpp代码具体如下:
#include <chrono>
#include "rclcpp/rclcpp.hpp"
using namespace std::chrono_literals;
/* This example creates a subclass of Node and uses a fancy C++11 lambda
* function to shorten the timer syntax, at the expense of making the
* code somewhat more difficult to understand at first glance if you are
* unaccustomed to C++11 lambda expressions. */
class MinimalTimer : public rclcpp::Node
{
public:
MinimalTimer()
: Node("minimal_timer")
{
auto timer_callback = [this]() -> void { RCLCPP_INFO(this->get_logger(), "Hello, world!") };
timer_ = create_wall_timer(500ms, timer_callback);
}
private:
rclcpp::TimerBase::SharedPtr timer_;
};
int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<MinimalTimer>());
rclcpp::shutdown();
return 0;
}
第五步:修改CMakeLists.txt和package.xml
修改CMakeLists.txt;
cd ~/ros2-demo/src/ros2_demo
sudo gedit CMakeLists.txt
在 find_package(ament_cmake REQUIRED)下面添加
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
添加可执行文件的名字为ros2_demo
add_executable(ros2_demo src/sub_node.cpp)
ament_target_dependencies(ros2_demo rclcpp std_msgs)
添加 install(TARGETS…) 把可执行文件安装到install去
install(TARGETS
ros2_demo
DESTINATION lib/${PROJECT_NAME})
第六步:编译和运行
编译节点
cd ~/ros2-demo
colcon build --packages-select ros2_demo
source install/setup.bash
运行节点
ros2 run ros2_demo sub_node