接: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:回放包的內容