《 无人驾驶原理与实践》一2.2ROS的核心概念
2.2ROS的核心概念
需要理解的ROS核心概念包括[4]:
▲ Master(主节点)
▲ Node(节点)
▲ Topic(话题)
▲ Message(消息)
1 Master(主节点)
ROS Master用于管理各节点间的通信,它通过RPC[7](Remote Procedure Call,远程过程调用)提供了节点的登记列表和对其他计算资源信息的查找。如果没有Master,其他节点通信时将无法找到与之交互的节点交换消息或调用服务。但有了Master,在某些方面又增加了系统的风险,如节点都通过Master来管理和调用服务,一旦Master崩溃,其他所有节点都会受到影响。因此,在ROS2版本中提出了一种新的消息通信架构——DDS[8](Data Distribution Service ),它用于解决此类问题,以及实现实时传输。启动Master的命令如下:
roscore
2 Node(节点)
节点又被称为“软件模块”,是一些独立编译、执行运算任务的进程。通常情况下,ROS利用规模可增长的方式使代码模块化:一个系统就是由很多节点组成的。我们使用“节点”使得基于ROS的系统在运行的时候更加形象化:当许多节点同时运行时,可以很方便地将点对点通信绘制成一个图表,在这个图表中,进程就是图中的节点,而点对点的连接关系就是其中的连接线。使用如下指令运行节点:
rosrun package_name node_name
查看激活节点列表:
rosnode list
列出节点信息:
rosnode info node_name
“杀死”指定运行节点:
rosnode kill node_name
在节点崩溃又不运行的情况下,使用此命令清除节点注册信息,可以清理节点运行环境:
rosnode cleanup
列出运行在指定计算机上的节点信息,或者列出机名:
rosnode machine machine-name
3 Topic(话题)
在ROS中,消息以发布/订阅的方式进行传递。一个节点可以在一个给定的主题中发布消息,另一个节点针对某个主题关注与订阅特定类型的数据,可能同时有多个节点发布或者订阅同一个主题的消息。总体上,发布者和订阅者不必了解彼此的存在。想象一下我们在论坛里发帖子,帖子的主题就是一个Topic,发帖人发帖后,每个参与讨论的人就是一个Node,所有的言论都发布在这个Topic之下。有的人发表一些言论,这就是Node发布一些Message到Topic上;有的人回复某些言论,写下自己的见解,对方就可以收到回复通知,对于对方来说,这就是消息通知订阅。发布和订阅是完全独立的对象操作。查看激活话题:
rostopic list-v
显示一个Topic的实时内容:
rostopic echo /topic_name
把bagfile里的Topic数据输出到指定csv格式的文件中,并使用Excel绘图功能,将其轨迹、路线等画出来,提高数据可视化程度,特别适合于路径、GPS轨迹等:
rostopic echo -b bagfilebag -p /topic_name > datacsv
如图21所示就是通过Topic输出的csv文件,使用Excel这样简单的工具即可完成复杂的轨迹复现功能,非常实用。
显示话题相关信息:
rostopic info /topic_name
显示Topic发布频率,在查看传感器数据发布频率是否符合期望时很有用:
rostopic hz /topic_name
发布数据到指定的Topic上,在调试数据时很有用:
rostopic pub /topic type args
4 Message(消息)
消息是用来定义话题类型的数据结构,它支持整型、浮点型、布尔型、字符串等一系列数据结构,格式为*msg文件。
查看话题所承载的消息类型:
rostopic type /topic_name
也可用此命令继续深入查看Message信息:
rosmsg info message_type
列出所有Message:
rosmsg list
显示Message内的字段定义:
rosmsg show message_name
- 点赞
- 收藏
- 关注作者
评论(0)