機器人操作系統入門(四)ROS通信架構


參考資料:

https://www.icourse163.org/course/ISCAS-1002580008?tid=1003713012  //中國大學MOOC

https://www.bilibili.com/video/av23401751  //B站

《ROS操作系統入門講義》PDF下載

鏈接:https://pan.baidu.com/s/1OCja2WLDRnjYXMrpnZ3-sQ 
提取碼:mziy

第四章 ROS通信架構(二)

一、Service 服務  //適用於臨時的、非周期性的數據

(1)同步通信:Node A發布請求后會在原地等待reply(阻塞狀態),直到Node B處理完了請求並且完成了reply,Node A才會繼續執行

(2)topic VS service

注:service是不能重名的,一個service只能由一個server提供

(3)常用命令  //注意與 rossrv 的區別

二、 srv  //和msg文件類型,srv文件是用來描述服務service的通信數據格式

1. 示例 msgs_demo/srv/DetectHuman.srv  //查詢當前深度攝像頭中的人體姿態和關節數

(1)srv文件以 --- 隔開請求和應答,上方為請求,下方為應答;本例中請求為請求為是否開始檢測,應答為一個數組,數組的每個元素為某個人的姿態(HumanPose)

(2)srv可以嵌套msg,但不能嵌套srv;本例中HumanPose為嵌套的msg

三、參數服務器   //參數服務器是節點存儲參數的地方,用於配置全局共享參數

1. “特殊”的通信方式:使用互聯網傳輸,在節點管理器中運行

2. 參數服務器維護一個數據字典,字典內存儲各個參數和配置,更加靜態

3. 維護方式

(1)命令行維護:使用 rosparam 命令

注:load和dump的文件需要遵守YAML格式,即“名稱 + :+ 值”  //可以理解為鍵值對的字典

(2)launch文件內讀寫:<param>標簽和<rosparam>標簽

  • <param name="publish_frequency" value="100.0"/>  //直接給出值value
  • <param name="robot_description" command="\$(find xacro)/xacro.py $(find robot_sim_demo)/urdf/robot_xacro"/>  //值由腳本運行結果給定
  • <rosparam file="$(find robot_sim_demo)/config/xbot2_control.yaml" command="load"/>  //先指定YAML文件,再施加command,等價於 rosparam load file_name

(3)node源碼:利用API對參數服務器進行操作

 見后文 "機器人操作系統入門(六)"

 

4. 參數類型:ROS參數服務器為參數值使用XMLRPC數據類型,其中包括:strings, integers, floats, booleans, lists, dictionaries, iso8601 dates, and base64-encoded data

四、Action  //適合長時間的通信過程,且需要知道狀態和結果的場景,可以隨時查看過程進度(反饋),也可以終止請求

1. 通信接口

注:客戶端會向服務器發送目標指令和取消動作指令,而服務器則可以給客戶端發送實時的狀態信息、結果信息和反饋信息

2. Action規范文件.action格式

注:由 --- 分隔開動作的三部分內容,從上到下分別為 目標、結果、反饋

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM