使用C++编写节点实现话题的订阅

目录

1.重新创建一个软件包

2.创建订阅者及订阅话题

3.编译节点

4.运行

5.调整和优化

①显示消息接收的频率

②再接收yao_node的消息

③查看通讯网络图

④话题是谁的话题?

6.小结

小tip:又一个常用工具rqt_graph


1.重新创建一个软件包

进入src目录 输入 cd catkin_ws/src/——创建软件包 输入catkin_create_pkg 包名 依赖项列表
切换到vscode——点击左侧src中的acr_pkg——点击src——右键 创建节点ma_node
然后就可以在右侧写ma_node的代码啦!

2.创建订阅者及订阅话题

第一步 :先include两个头文件


第二步 :main主函数(会用自动补全)(删const)


第三步 :初始化节点

ros::init(argc,argv,"节点名称");


第四步 召唤大管家

ros::NodeHandle nh;


第五步 让大管家帮我们订阅一个话题(和发布类似)
先生成一个Subscriber对象(多了一个回调函数)(回调函数在订阅者接受到消息后会被程序自动调用执行)

ros::Subscriber sub = nh.subscribe("订阅的话题名称",缓存长度,回调函数);


在main函数前定义回调函数

里面的msg.data.c_str()是将string类型转换为字符数组类型,因为printf的参数类型是字符数组类型


⚠️:记得加输出\n,不然消息会连成一行

接着写循环


⚠️:里面要记得写ros::spinOnce()函数,让节点可以接受到消息包

3.编译节点

进入CMake文件——找到Build章节——找到add_executable这一行 复制——粘贴到文件末尾——找到target_link这一行 复制三行——粘贴到文件末尾——去掉注释(可先全选中它们,按下crtl /)——把节点名都修改为ma_node——编译

4.运行


启动ros核心——rosrun chao节点(发布者节点)——rosrun ma节点(订阅者节点)

5.调整和优化


①显示消息接收的频率

crtl c ma节点——将ma_node cpp中的printf改为ROS_INFO,删掉换行符——编译——重新run    ma节点——oh no都是?
⚠️:因为ROS_INFO的编码方式会受程序的Locale环境设置影响,一般的程序会默认C的Locale设置,会让一些输出函数只支持英文字符的显示,需要将Locale设置为中文环境


设置步骤:
vscode——在main中调用

setlocale(LC_ALL,"");

——编译——重新启动节点

②再接收yao_node的消息


再定义一个Subscriber对象(名称,群名,回调函数要改变)——在main前定义回调函数——该用ROS_WARN来显示消息内容(消息显示黄色,与前面的白色消息区别)——保存——编译——运行yao_node——运行ma_node

③查看通讯网络图


再次分屏——执行rqt_graph——会弹出通讯关系图


④话题是谁的话题?


话题并不只属于发布者和订阅者,而是由ROS系统创建管理的,只要节点向大管家提出话题发布和订阅需求,话题就会自动被创建


6.小结

小tip:又一个常用工具rqt_graph


图形化显示当前系统活跃的节点以及节点间的话题通讯关系

只要在终端输入

rqt_graph

  • 50
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值