接:ROS的几个重要概念:节点、消息、主题、服务
上文主要介绍了ROS的几个重要概念:节点(node)、消息(message)、主题(topic)、服务(service)。
- 节点(node):独立的计算执行进程;
- 消息(message):信息数据,节点通过消息完成沟通;
- 主题(topic):每个消息都必须发布到相应的主题,通过主题实现ROS计算图网络中的路由转发;
- 服务(service):一种同时使用请求和响应的同步消息交换机制;
这篇主要介绍一些ROS的常用命令行工具。
1、节点
功能包中创建的每个可执行程序在启动加载到系统进程中后,该进程就是一个ROS节点。
ROS提供的处理节点的工具,用于节点信息、状态、可用性等的查询操作:
- rosnode list:列出当前活动节点
- rosnode info <node_name>:输出指定节点的信息
- rosnode kill <node_name>:结束指定节点
- rosnode ping <node_name>:测试节点的网络连通性
- rosnode cleanup:将无法访问的节点的信息清除
- rosnode machine <host_name>:列出指定计算机上运行的节点
另外,节点管理器(master)用于节点的名称注册和查找等,也负责设置节点间的通信。
如果整个ROS系统中没有节点管理器,就不会有节点、消息、服务之间的通信。
节点管理器相关的命令行工具,就是roscre。
- roscore:启动节点管理器,加载ROS节点管理器和其他ROS核心组件。
2、消息
节点通过消息完成彼此的沟通,消息是一个节点发动给其他节点的信息数据。
ROS提供的获取消息的命令工具:
- rosmsg list:列出所有消息
- rosmsg show <message_type>:显示指定的消息
- rosmsg users <message_type>:搜索使用该消息的代码文件
- rosmsg md5 <message_type>:显示消息的MD5求和结果
- rosmsg package <package_name>:列出功能包的所有消息
3、主题
同一个主题可以有多个订阅者也可以有多个发布者,且发布者和订阅者定义的消息类型必须与主题的消息类型相匹配。
通过主题进行消息路由,不需要节点之间直接连接,意味着发布节点和订阅节点之间不需要知道彼此是否存在,保证了发布节点与订阅节点之间的解耦。
ROS提供的操作主题的命令工具:
- rostopic list:列出当前活动主题
- rostopic info <topic_name>:输出主题的信息
- rostopic echo <topic_name>:显示主题中的消息数据
- rostopic hz <topic_name>:显示主题的发布频率
- rostopic bw <topic_name>:显示主题所使用的带宽
- rostopic type <topic_name>:输出主题发布的消息类型
- rostopic find <message_type>:按照消息类型查找主题
4、参数服务器
参数服务器(parameter server)能够使数据通过关键词存储在一个系统的核心位置。通过使用参数,就能够在节点运行时动态配置节点或改变节点的工作任务。
参数服务器是可通过网络访问的共享的多变量字典,节点使用此服务器来存储和检索运行时的参数。
ROS中关于参数服务器的命令行工具:
- rosparam list:列出参数服务器中的所有参数;
- rosparam get <param_name>:获取参数值
- rosparam set <param_name> <value>:设定参数值
- rosparam delete <param_name>:从参数服务器删除参数
- rosparam load <file>:将文件中的参数加载到参数服务器
- rosparam dump <file>:将参数服务器中的参数保存到文件
5、消息记录包
消息记录包(bag)是一种用于保存和回放ROS消息数据的文件格式。
消息记录包是一种用于存储数据的重要机制,它可以帮助记录一些难以收集的传感器数据,然后通过反复回放数据进行算法的性能开发和测试。
ROS创建的消息记录包文件以*.bag为扩展名,可以播放、停止、后退操作该文件,便于算法调试。
ROS提供的消息记录包相关的命令行工具:
- rosbag info <bag_file>:显示数据包的信息
- rosbag record <topic_name>:记录指定的topic
- rosbag record -a:记录所有的topic
- rosbag play --clock *.bag:回放包的内容