《动手学ROS2》3.6.3OOP方式编写一个节点

本系列教程作者:小鱼
公众号:鱼香ROS
QQ交流群:139707339
教学视频地址:小鱼的B站
完整文档地址:鱼香ROS官网
版权声明:如非允许禁止转载与商业用途。
公众号

3.5.3 OOP方式编写一个节点

1. 编写代码

继续跟着小鱼一起输入代码,输入的时候可以边输边理解。


#include "rclcpp/rclcpp.hpp"

/*
    创建一个类节点,名字叫做SingleDogNode,继承自Node.
*/
class SingleDogNode : public rclcpp::Node
{
    
    

public:
    // 构造函数,有一个参数为节点名称
    SingleDogNode(std::string name) : Node(name)
    {
    
    
        // 打印一句自我介绍
        RCLCPP_INFO(this->get_logger(), "大家好,我是单身狗%s.",name.c_str());
    }

private:
   
};

int main(int argc, char **argv)
{
    
    
    rclcpp::init(argc, argv);
    /*产生一个Wang2的节点*/
    auto node = std::make_shared<SingleDogNode>("wang2");
    /* 运行节点,并检测退出信号*/
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

上面的代码声明了一个叫做SingleDogNode的类,并在类的初始化函数中,输出了一句话。主函数中首先初始化rclcpp,然后新建了一个SingleDogNode节点的对象,接着使用rclcpp让这个节点暴露在外面,并检测退出信号(Ctrl+C),检测到退出信号后,就会执行rcl.shutdown()关闭节点。

添加到CmakeLists

在wang2.cpp中输入上面的内容后,还需要修改一下CmakeLists.txt。

在CmakeLists.txt最后一行加入下面两行代码。

add_executable(wang2_node src/wang2.cpp)
ament_target_dependencies(wang2_node rclcpp)

添加这两行代码的目的是让编译器编译wang2.cpp这个文件,不然不会主动编译。接着在上面两行代码下面添加下面的代码。

install(TARGETS
  wang2_node
  DESTINATION lib/${PROJECT_NAME}
)

这个是C++比Python要麻烦的地方,需要手动将编译好的文件安装到install/village_wang/lib/village_wang

2.编译运行节点

打开vscode终端,进入town_ws

编译节点

colcon build

source环境

source install/setup.bash

运行节点

ros2 run village_wang wang2_node

不出意外,你可以看到王二的自我介绍。

image-20210727204912006

3.测试

当节点运行起来后,可以再尝试使用ros2 node list指令来查看现有的节点。这个时候你应该能看到:

image-20210727205020561

至此,相信你已经掌握了如何编写一个C++版本的ros2节点,下一章中,作家李四将会开始编写艳娘传奇,我们到时候可以帮单身狗王二编写代码,订阅艳娘传奇。

作者介绍:

我是小鱼,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚
初中学习编程,高中开始接触机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金)
目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小智,一起交流技术,学习机器人

Guess you like

Origin blog.csdn.net/qq_27865227/article/details/121206109