节点需要存在于功能包当中,功能包需要存在于工作空间当中。
所以我们要想创建节点,就要先创建一个工作空间,再创建功能包。
第一步:创建工作空间
mkdir -p chapt2_ws/src/
第二步:创建example_cpp功能包,使用ament-cmake作为编译类型,并为其添加rclcpp依赖。
cd chapt2_ws/src
ros2 pkg create example_cpp --build-type ament_cmake --dependencies rclcpp
- pkg create 是创建包的意思
- --build-type 用来指定该包的编译类型,一共有三个可选项
ament_python
、ament_cmake
、cmake
- --dependencies 指的是这个功能包的依赖,这里给了一个ros2的C++客户端接口
rclcpp
打开终端,进入chapt2_ws/src
运行上面的指令,创建完成后的目录结构如下:
. └── src └── example_cpp ├── CMakeLists.txt ├── include │ └── example_cpp ├── package.xml └── src 5 directories, 2 files
接着我们在example_cpp/src
下创建一个node_01.cpp
节点,创建完成后的目录结构如下:
可以选择用touch命令,也可以直接在vscode里创建。
开始编写代码:
cpp
#include "rclcpp/rclcpp.hpp"
int main(int argc, char **argv)
{
/* 初始化rclcpp */
rclcpp::init(argc, argv);
/*产生一个node_01的节点*/
auto node = std::make_shared<rclcpp::Node>("node_01");
// 打印一句自我介绍
RCLCPP_INFO(node->get_logger(), "node_01节点已经启动.");
/* 运行节点,并检测退出信号 Ctrl+C*/
rclcpp::spin(node);
/* 停止运行 */
rclcpp::shutdown();
return 0;
}
修改CmakeLists
在CmakeLists.txt加入下面两行代码。目的是让编译器编译node_01这个文件
cpp
add_executable(node_01 src/node_01.cpp)
ament_target_dependencies(node_01 rclcpp)
接着在上面两行代码下面添加下面的代码。
cpp
install(TARGETS
node_01
DESTINATION lib/${PROJECT_NAME}
)
编译运行节点
在 chapt2_ws下依次输入下面的命令
colcon build
source install/setup.bash
ros2 run example_cpp node_01
在另一终端输入
ros2 node list
可以看到显示出来的节点