ROS机器人程序设计(原书第2版)2.4.9 创建节点
2.4.9 创建节点
在本节中,我们要学习如何创建两个节点:一个发布数据,另一个接收这些数据。这是两个节点之间最基本的通信方式,也就是操作数据并使用这些数据来做些工作。
使用以下命令返回chapter2_tutorials/src/文件夹:
创建两个文件并分别命名为example1_a.cpp和example1_b.cpp。example1_a.cpp文件将会发送带有节点名称的数据,example1_b.cpp文件会把这些数据显示在命令行窗口中。将下面的代码复制到example1_a.cpp文件或者从库中下载它:
就以上代码做进一步解释。
要包含的头文件是ros/ros.h、std_msgs/String.h和sstream。其中,ros/ros.h包含了使用ROS节点所有必要的文件,而std_msgs/String.h包含了我们要使用的消息类型:
启动该节点并设置其名称,请记住该名称必须是唯一的:
下面是设置节点进程的句柄:
将节点设置成发布者,并将所发布主题和类型的名称告知节点管理器。第一个参数是缓冲区的大小,名为message。如果主题发布数据速度较快,那么将缓冲区设置为1000个消息,如下所示:
在本例中,设置发送数据的频率为10Hz:
当收到Ctrl + C的按键消息或ROS停止当前节点运行时,ros::ok()行会执行停止节点运行的命令:
在这里,我们创建一个消息变量,变量的类型必须符合发送数据的要求:
这样,消息被发布:
如果有一个订阅者出现,ROS就会更新并读取所有主题:
按照10Hz的频率将程序挂起。
现在我们创建另一个节点。将下面的代码复制到example1_b.cpp文件或者从库中下载它:
这里是一些对上面代码的解释。
首先要包含头文件和主题所使用的消息类型:
每次该节点收到一条消息时都将调用此函数,我们就可以使用或处理数据。在本示例中,我们将收到的数据在命令行窗口中输出:
创建一个订阅者,并从主题获取以message为名称的消息数据。设置缓冲区为1000个消息,处理消息的回调函数为messageCallback:
ros::spin()行是节点开始读取主题和在消息到达时,回调函数messageCallback被调用的循环。当用户按下Ctrl + C,节点会退出消息循环,于是循环结束。
相关文章
- 数据孤岛是业务效率的无声杀手
- 2023展望:新的一年将给大数据分析领域带来什么?
- 阿里云ADB基于Hudi构建Lakehouse的实践
- 大数据在医疗保健领域的使用案例
- 微软增加说明:KB5021751 更新扫描已经 / 即将过时 Office 过程中不会触碰用户隐私
- 2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选
- 场景化、重实操,分享一个实时数仓实践案例
- Arctic的湖仓一体践行之路
- 分布式计算MapReduce究竟是怎么一回事?
- 淘系数据模型治理优秀实践
- 大数据分析对医疗保健的影响
- 当我们说大数据Hadoop,究竟在说什么?
- 2022年及以后大数据的五个发展趋势
- 网易严选离线数仓治理实践
- 2023 年数据治理趋势
- 一份“靠谱”的年度经营计划,你学会了吗?
- 漫谈对大数据的思考
- 测试一下,读懂数据的能力,你有吗?
- 用艺术的眼光探索数据之美
- 聊聊数据分析成果如何落地