接:ROS的幾個(gè)重要概念:節(jié)點(diǎn)、消息、主題、服務(wù)
上文主要介紹了ROS的幾個(gè)重要概念:節(jié)點(diǎn)(node)、消息(message)、主題(topic)、服務(wù)(service)。
- 節(jié)點(diǎn)(node):獨(dú)立的計(jì)算執(zhí)行進(jìn)程;
- 消息(message):信息數(shù)據(jù),節(jié)點(diǎn)通過消息完成溝通;
- 主題(topic):每個(gè)消息都必須發(fā)布到相應(yīng)的主題,通過主題實(shí)現(xiàn)ROS計(jì)算圖網(wǎng)絡(luò)中的路由轉(zhuǎn)發(fā);
- 服務(wù)(service):一種同時(shí)使用請(qǐng)求和響應(yīng)的同步消息交換機(jī)制;
這篇主要介紹一些ROS的常用命令行工具。
1、節(jié)點(diǎn)
功能包中創(chuàng)建的每個(gè)可執(zhí)行程序在啟動(dòng)加載到系統(tǒng)進(jìn)程中后,該進(jìn)程就是一個(gè)ROS節(jié)點(diǎn)。
ROS提供的處理節(jié)點(diǎn)的工具,用于節(jié)點(diǎn)信息、狀態(tài)、可用性等的查詢操作:
- rosnode list:列出當(dāng)前活動(dòng)節(jié)點(diǎn)
- rosnode info <node_name>:輸出指定節(jié)點(diǎn)的信息
- rosnode kill <node_name>:結(jié)束指定節(jié)點(diǎn)
- rosnode ping <node_name>:測(cè)試節(jié)點(diǎn)的網(wǎng)絡(luò)連通性
- rosnode cleanup:將無法訪問的節(jié)點(diǎn)的信息清除
- rosnode machine <host_name>:列出指定計(jì)算機(jī)上運(yùn)行的節(jié)點(diǎn)
另外,節(jié)點(diǎn)管理器(master)用于節(jié)點(diǎn)的名稱注冊(cè)和查找等,也負(fù)責(zé)設(shè)置節(jié)點(diǎn)間的通信。
如果整個(gè)ROS系統(tǒng)中沒有節(jié)點(diǎn)管理器,就不會(huì)有節(jié)點(diǎn)、消息、服務(wù)之間的通信。
節(jié)點(diǎn)管理器相關(guān)的命令行工具,就是roscre。
- roscore:啟動(dòng)節(jié)點(diǎn)管理器,加載ROS節(jié)點(diǎn)管理器和其他ROS核心組件。

2、消息
節(jié)點(diǎn)通過消息完成彼此的溝通,消息是一個(gè)節(jié)點(diǎn)發(fā)動(dòng)給其他節(jié)點(diǎn)的信息數(shù)據(jù)。
ROS提供的獲取消息的命令工具:
- rosmsg list:列出所有消息
- rosmsg show <message_type>:顯示指定的消息
- rosmsg users <message_type>:搜索使用該消息的代碼文件
- rosmsg md5 <message_type>:顯示消息的MD5求和結(jié)果
- rosmsg package <package_name>:列出功能包的所有消息
3、主題
同一個(gè)主題可以有多個(gè)訂閱者也可以有多個(gè)發(fā)布者,且發(fā)布者和訂閱者定義的消息類型必須與主題的消息類型相匹配。
通過主題進(jìn)行消息路由,不需要節(jié)點(diǎn)之間直接連接,意味著發(fā)布節(jié)點(diǎn)和訂閱節(jié)點(diǎn)之間不需要知道彼此是否存在,保證了發(fā)布節(jié)點(diǎn)與訂閱節(jié)點(diǎn)之間的解耦。
ROS提供的操作主題的命令工具:
- rostopic list:列出當(dāng)前活動(dòng)主題
- rostopic info <topic_name>:輸出主題的信息
- rostopic echo <topic_name>:顯示主題中的消息數(shù)據(jù)
- rostopic hz <topic_name>:顯示主題的發(fā)布頻率
- rostopic bw <topic_name>:顯示主題所使用的帶寬
- rostopic type <topic_name>:輸出主題發(fā)布的消息類型
- rostopic find <message_type>:按照消息類型查找主題

4、參數(shù)服務(wù)器
參數(shù)服務(wù)器(parameter server)能夠使數(shù)據(jù)通過關(guān)鍵詞存儲(chǔ)在一個(gè)系統(tǒng)的核心位置。通過使用參數(shù),就能夠在節(jié)點(diǎn)運(yùn)行時(shí)動(dòng)態(tài)配置節(jié)點(diǎn)或改變節(jié)點(diǎn)的工作任務(wù)。
參數(shù)服務(wù)器是可通過網(wǎng)絡(luò)訪問的共享的多變量字典,節(jié)點(diǎn)使用此服務(wù)器來存儲(chǔ)和檢索運(yùn)行時(shí)的參數(shù)。
ROS中關(guān)于參數(shù)服務(wù)器的命令行工具:
- rosparam list:列出參數(shù)服務(wù)器中的所有參數(shù);
- rosparam get <param_name>:獲取參數(shù)值
- rosparam set <param_name> <value>:設(shè)定參數(shù)值
- rosparam delete <param_name>:從參數(shù)服務(wù)器刪除參數(shù)
- rosparam load <file>:將文件中的參數(shù)加載到參數(shù)服務(wù)器
- rosparam dump <file>:將參數(shù)服務(wù)器中的參數(shù)保存到文件
5、消息記錄包
消息記錄包(bag)是一種用于保存和回放ROS消息數(shù)據(jù)的文件格式。
消息記錄包是一種用于存儲(chǔ)數(shù)據(jù)的重要機(jī)制,它可以幫助記錄一些難以收集的傳感器數(shù)據(jù),然后通過反復(fù)回放數(shù)據(jù)進(jìn)行算法的性能開發(fā)和測(cè)試。
ROS創(chuàng)建的消息記錄包文件以*.bag為擴(kuò)展名,可以播放、停止、后退操作該文件,便于算法調(diào)試。
ROS提供的消息記錄包相關(guān)的命令行工具:
- rosbag info <bag_file>:顯示數(shù)據(jù)包的信息
- rosbag record <topic_name>:記錄指定的topic
- rosbag record -a:記錄所有的topic
- rosbag play --clock *.bag:回放包的內(nèi)容