一、编写C++节点并测试
1.创建功能包
C++功能包使用ament-camke作为编译基础,依赖为rclcpp。打开终端,进入town_ws/src
运行下面的指令,目录结构如下
ros2 pkg create village_wang --build-type ament_cmake --dependencies rclcpp
2.创建节点
village_wang/src
下创建一个wang2.cpp
文件,创建完成后的目录结构如下:
(这里犯了一个错,我将wang2.cpp
放到了village_wang
文件夹下,导致后面会出错)
3.编写代码
#include "rclcpp/rclcpp.hpp"
int main(int argc, char **argv)
{
rclcpp::init(argc, argv);
/*产生一个Wang2的节点*/
auto node = std::make_shared<rclcpp::Node>("wang2");
// 打印一句自我介绍
RCLCPP_INFO(node->get_logger(), "大家好,我是单身狗wang2.");
/* 运行节点,并检测退出信号*/
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
主函数中首先初始化rclcpp,然后新建了一个Node节点的对象,命名为wang2
,接着使用rclcpp让这个节点暴露在外面,并检测退出信号(Ctrl+C),检测到退出信号后,就会执行rcl.shutdown()
关闭节点。
这里#include "rclcpp/rclcpp.hpp"
也会报错,如下
解决流程:
1、ctrl+shift+p
按下打开ctrl+shift+p,选择vscode的编辑配置选项:
2、修改编辑设置(注意网上有些解决方法是humble版本)
添加到CmakeLists
在wang2.cpp中输入上面的内容后,还需要修改一下CmakeLists.txt。
在CmakeLists.txt最后一行加入下面两行代码。
add_executable(wang2_node src/wang2.cpp)
ament_target_dependencies(wang2_node rclcpp)
(造成上面的问题后,会报错Cannot find source file: src/wang2.cpp
,将代码所在位置顺利改成功后如下图)
add_executable(wang2_node ~/colcon_test/town_ws/src/village_wang/village_wang/wang2.cpp)
ament_target_dependencies(wang2_node rclcpp)
(仍然会报错catkin_make出现 “Cannot find source file:”
这种情况可能是第一次执行catkin_make发现源文件中有错误,在修改了源文件内容的同时,也修改了源文件的名字,导致再次执行catkin_make的时候,就找不到上次的那个文件了,所以解决方法时将原来的文件的内容复制到一个新文件中,然后在CMakeList中添加这个文件,再次编译。)
(成功)
添加这两行代码的目的是让编译器编译wang2.cpp这个文件,不然不会主动编译。接着在上面两行代码下面添加下面的代码。
install(TARGETS
wang2_node
DESTINATION lib/${PROJECT_NAME}
)
这个是C++比Python要麻烦的地方,需要手动将编译好的文件安装到install/village_wang/lib/village_wang
下
4.编译运行节点
打开vscode终端,进入town_ws
编译节点:
colcon build
source环境:
source install/setup.bash
运行节点:
ros2 run village_wang wang2_node
成功:
标签:node,wang,--,rclcpp,C++,wang2,POP,village,节点 From: https://www.cnblogs.com/lei-bao/p/18159796