Apollo进阶课程㉟丨Apollo ROS原理—4
原文鏈接:進階課程?丨Apollo ROS原理—4?
ROS是一個強大而靈活的機器人編程框架,從軟件構架的角度說,它是一種基于消息傳遞通信的分布式多進程框架。
ROS本身是基于消息機制的,可以根據功能把軟件拆分成為各個模塊,每個模塊只是負責讀取和分發消息,模塊間通過消息關聯。
上周阿波君為大家詳細介紹了「進階課程?Apollo ROS原理—3」。
此課程主要講解四個比較基礎的方面:第一是TF坐標系轉換,它在自動駕駛中用的非常廣泛;第二是RQT用戶接口;第三是機器人模型;第四是仿真描述。
本周阿波君將繼續與大家分享Apollo ROS原理—4的相關課程。下面,我們一起進入進階課程第35期。
目前ROS僅適用于Apollo 3.0之前的版本,最新代碼及功能還請參照Apollo 3.5及5.0版本。
目錄
1. ROS Services
2. ROS Actions
3. ROS Time
4. ROS Bags
5. 調試工具
本節主要介紹幾個在實際開發調試過程中使用比較廣泛的一些概念。
1. ROS Services
ROS提供了三種節點之間通信的方式:
- 第一種是大家最常用的基于消息的訂閱發布模型;
- 第二種就是ROS Service;
- 第三種Param,它借鑒了Service的思想;
Service在自動駕駛系統里面使用的比較廣泛,與基于消息發布訂閱模型類似, Service有一個service name,同時Service底層是一個SRV描述文件,它和MSG描述文件比較類似,不同是SRV描述文件定義了兩種消息:請求信息的消息格式和響應格式。請求是Client向Server發出請求的消息定義格式,與Response邏輯類似。
對應Service,Rosservice提供了一系列命令行工具,例如常用的像List、Call等一些基本的功能響應。
這是一個SRV文件,可以看到所有的Service對應的SRV文件描述都有一個Request和Response方式。當然這兩個都可以置為空,置空就沒有意義了。此外,也可以寫一些具體的類型,比如我向你發送一個什么樣的消息請求,你在接受我的對應消息請求之后會返回一個什么樣的響應的數據格式指令。
上面結合一個實際的例子,給出Service具體的使用方法。Service啟動的時候,需要提前啟動Roscore,即節點管理器。第二步啟動Service的一個例子程序,之后通過List和Type命令可以看到在啟動某一個節點后,這個節點里面注冊了某個Service的一個實際展示。
與前面提到的Rostopic對應,ROS也提供了命令行方式調用一個Service,當然命令行方式調用Service也是把它當成了一個節點的方式進行Service、Client鏈路的建立和響應。
這個是結合實際的C++例子,描述Service的具體使用方法,可以看到Service和普通的Publisher、Subscriber比較類似,尤其是和Subscriber比較類似。但不同的是它有一個Service方法,定義了節點提供的服務類型。以及當Client向它發出請求時,節點會做出什么樣的行為同時把這個結果再發送給Client。第二個不同點是在注冊Service時,把Service的Name,和Service所提供的函數注冊即可。與注冊Server的節點對應,Client的節點也比較簡單,只需要進行兩步就可以完成一個Service的使用,第一步是聲明Client對象,第二步是直接去調用Service,傳入對應的Request就可以拿到對應的Response結果。
2. ROS Actions
ROS還提供了另外一種通訊方式,這種不常見通訊方式就是Actions,相比Service,它多了一個取消的功能和帶有反饋機制。對于Service,發起一個Service請求需要等到返回一個正確的Response結果才會退出。Actions在發送一個Service請求之后,它可以發送取消的命令,取消這個Service請求,可用于一些較長時間的Service場景。當然目前這種場景在Apollo自動駕駛系統里面比較少。ROS Actions
在.action文件里定義了action,跟srv其實類似,只不過是在.action文件里面,定義了更多的類型。
3. ROS Time
ROS系統供了一套time機制,這個time的時間源來自于PC機的系統時間。Rostime基于此提供了一個重要的功能點:仿真時間。用ROS系統進行自動駕駛開發的時候,仿真模擬是一個不可缺少的環節。如剛才提到的Rviz、Gazebo都是為開發者進行離線仿真和模擬的強大調試工具,在使用這些調試工具的時候,實驗數據可能是很早之前錄制的,也有可能是在其他地方錄制的。這種之前的數據在仿真環境下進行模擬時,如何回放當時的場景,或者是如何把當時的時間轉化到現在的時間?Rostime就供了虛擬時鐘功能,保證在回放一些歷史實驗數據,或者其他地方實驗數據時,讓整個仿真系統認為現在的場景就是所需要的那個系統時間和系統場景。
4. ROS Bags
ROS Bags有兩個比較重要的功能,第一個是把實際車上調試的數據或者是把自動駕駛進行道路測試的原始傳感器數據按一定格式錄制到某個bag文件里。實驗室或者開發環境可以根據bag文件不斷的回放,去復現當時的網絡場景。例如,有一個場景,車在某一個特定的地方做了一個錯誤的決策,我們想改一版算法去驗證這個場景有沒有被覆蓋,這時可以拿那個Rosbag回放,驗證新版算法的輸出是不是符合預期。另外Rosbag數據對算法進行模型訓練和調優也是非常有必要的。
5. 調試工具
最后了解一下調試工具,如下圖所示,ROS提供了一些簡單的功能,比如說ROS WTF這種功能,可以讓用戶很簡單地查看當前系統是環境變量設置的問題,還是其他的一些核心庫鏈接的位置問題,還是其他的問題導致的一些運行失敗,通過WTF都可以很快的定位,同時,ROS也提供了一些其他的Debug診斷功能供開發者在實際開發過程當中去使用。
總結
以上是生活随笔為你收集整理的Apollo进阶课程㉟丨Apollo ROS原理—4的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lsassa.exe是什么进程 有什么用
- 下一篇: 计算机英语第六单元,计算机专业英语第六版