ros2的话题通信的实现(C++版本)
·
一.话题通信使用场景
在ros中话题通信是基于发布订阅模式的,就是一个节点发布消息,另一个节点可以订阅该发布的消息,一般用于那种数据不断更新的数据传输场景,例如:摄像头驱动节点发布图像数据到 /camera/rgb/image_raw话题,而一个视觉处理节点可以订阅这个话题来识别物体等等。
二.话题通信的实现
1.创建功能包
cd ~/ros2_ws/src
//先到你的工作空间src目录下
ros2 pkg create --build-type ament_cmake cpp_pubsub rclcpp std_msgs
//直接在创建cpp_pubsub功能包时添加rclcpp和std_msgs等依赖
2.话题发布的发布方实现
进入你的cpp_pubsub的src目录里,并创建publish_meber.cpp以及sublish_meber.cpp分别用来订阅以及发布
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp" //添加你以前写的所用的依赖项
class Publisher:public rclcpp::Node
{
public:
...略
}
......................
这个根据用途自己写吧还是,记得写main函数
3.编辑配置文件
在C++功能包中,配置文件主要是package.xml和CMakeLists.txt
在<package.xml>中
添加依赖项,在<depend>标签下添加源文件所需的依赖
<depend>rclcpp</depend>
<depend>std_msgs</depend>
在<CMakeLists.txt>中
首先添加搜索库,在find_package下面添加搜索源文件所用的库
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
然后还要添加我们生成的可执行文件的源文件链接以及依赖关系:
# 将源文件命名为talker可执行文件
add_executable(talker src/你的发布代码文件名)
ament_target_dependencies(talker rclcpp std_msgs)
# 将源文件命名为listener可执行文件
add_executable(listener src/你的订阅代码文件名)
ament_target_dependencies(listener rclcpp std_msgs)
最后,增加可执行文件生成的路径
install(TARGETS
talker
listener
DESTINATION lib/${PROJECT_NAME})
4.编译和运行
打开一个终端并进入工作空间目录
cd ~/ros2_ws
编译指定的功能包
colcon build --packages-select cpp_pubsub
打开新终端,就可以分别运行你的订阅和发布节点
ros2 run cpp_pubsub listener
ros2 run cpp_pubsub talker
到这里,一个全流程的通信包就构建完了。祝各位学习顺利,生活愉快
注:笔者可能有的地方写的是错的,欢迎各位大佬指正,一起学习互相进步
更多推荐



所有评论(0)