1.订阅发布模式
一个节点发布数据到某个话题上,另外一个节点就可以通过订阅话题拿到数据。
除了上述这种一个节点发布,一个节点接受的形式外,ROS2话题通信其实还可以是1对n,n对1,n对n的。
2.消息接口
为了方便发送者和接收者进行数据的交换,ROS2帮我们在数据传递时做好了消息的序列化和反序列化(有关消息序列化相关内容请参考本章基础篇),而且ROS2的消息序列化与反序列化通信是可以做到跨编程语言、跨平台和跨设备之间的。
ROS2如何做到跨编程语言、跨平台和跨设备之间的数据收发呢?这就得益于通过定义消息接口文件了。
因为跨平台和设备实现较为复杂,小鱼这里简单说一下如何实现跨语言的。当我们定义好消息接口后,ROS2会根据消息接口内容生成不同语言的接口类,在不同编程语言中调用相同的类即可实现无感的消息序列化和反序列化。
通过对消息接口介绍,相信你肯定能猜到这样一条规则:同一个话题,所有的发布者和接收者必须使用相同消息接口。
3.ROS2话题工具
3.1GUI工具
3.1.1RQT工具(rqt_graph)
ROS2作为一个强大的工具,在运行过程中,我们是可以通过命令来看到节点和节点之间的数据关系的。
依次打开三个终端,分别输入下面三个命令。
ros2 run demo_nodes_py listener
ros2 run demo_nodes_cpp talker
rqt_graph
这是一个很重要的工具
3.2CLI工具
ros2 topic -h
ros2 topic list 返回系统中当前活动的所有主题的列表
ros2 topic list -t 增加消息类型
ros2 topic echo 打印实时话题内容
ros2 topic info /chatter 查看主题信息
ros2 interface show std_msgs/msg/String 查看消息类型
ros2 topic pub /chatter std_msgs/msg/String 'data: "123"' 手动发布命令
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)