ROS2学习--POP方法编写C++节点 debug过程

一、编写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

成功:

 

 

posted @ 2024-04-26 12:43  俞莲舟  阅读(140)  评论(0)    收藏  举报