但是關於ROS的書並不多,國內可用的學習社區就更少了。這堂辛苦的公開課將帶妳了解如何使用ROS設計移動機器人。
分享嘉賓李進榜:EAI科技創始人兼CEO,畢業於北京理工大學,碩士。在網易、雪球、騰訊技術部有多年的linux底層技術研發經驗。2015聯合創辦EAI科技,負責SLAM算法及相關定位導航軟件產品的研發。EAI科技,專註於機器人移動,提供消費級高性能激光雷達、slam算法和機器人移動平臺。
移動機器人的三個部分
所謂智能運動,就是機器人能夠根據周圍環境的變化,自主規劃路線,避開障礙物,到達目標。
機器人模擬人的各種行為。想象壹下,人走路需要哪些器官的配合。先用眼睛觀察周圍的環境,然後用大腦分析怎麽走才能到達目標,再用腿走,如此反復,直到到達目標地址。機器人要想智能移動,還需要眼、腦、腿的密切配合。
腿
“腿”是機器人運動的基礎。機器人的“腿”並不局限於人或動物的腿,還包括輪子、履帶等能使機器人運動的部件,統稱為“腿”。
仿人腿的優點是不僅能在復雜路況下移動(比如爬樓梯),還能更生動地模仿人類的動作(比如跳舞)。缺點是:結構和控制單元復雜,成本高,動作慢。
所以大部分移動機器人都是輪式機器人,具有輪子設計簡單,成本低,移動速度快的優點。輪式車輛也有很多種:兩輪平衡車、三輪、四輪和多輪車等等。目前最經濟實用的是兩個驅動輪和壹個萬向輪。
眼睛
機器人的眼睛實際上是壹個傳感器。它的功能是觀察周圍環境,有適合機器人眼睛的激光雷達、視覺(深度攝像頭、單雙攝像頭)和輔助(超聲波測距、紅外測距)。
“大腦”
機器人的大腦負責接收“眼睛”傳輸的數據,實時計算路線,指揮腿部移動。
其實就是把妳看到的東西轉換成壹種數據語言。針對如何描述數據、如何實現處理邏輯等壹系列問題。ROS系統為我們提供了壹個很好的開發框架。
ROS簡介
ROS是基於linux的操作系統。其前身是斯坦福人工智能實驗室為支持斯坦福智能機器人而建立的項目,主要可以提供壹些標準的操作系統服務,如硬件抽象、底層設備控制、常用功能實現、進程間消息和數據包管理等。
ROS基於圖形架構,因此不同節點的進程可以接收、發布和聚合各種信息(如傳感、控制、狀態、規劃等。).目前ROS主要支持Ubuntu操作系統。
有人問ROS能不能裝在虛擬機裏,壹般都可以,但是我們建議裝雙系統,用Ubuntu獨占運行ROS。
ROS其實可以分為兩層,下層是上面說的操作系統層,上層是實現不同功能的各種軟件包,比如定位繪圖、動作規劃、感知、仿真等等。ROS(低級)使用BSD許可證,都是開源軟件,可以免費用於研究和商業目的,而高級用戶提供的包使用很多不同的許可證。
用ROS實現機器人的運動
對於二維空間,輪式機器的隨機運動可以用線速度+角速度來實現。
線速度:描述機器人來回移動的速度。
角速度:描述機器人旋轉的角速度。
所以控制機器人運動的主要目的是將線速度和角速度轉換成左右輪的速度,再通過輪徑和輪距,將線速度和角速度轉換成左右輪的速度。
這裏有壹個關鍵問題,就是編碼器和pid調速的選擇。
編碼器的選擇:壹般情況下,編碼器和車輪在同壹根軸上。目前速度在0.7m/s以下的話,從600鍵到1200鍵選擇編碼器是可以的。不過,需要註意的是,最好使用雙線編碼器,雙線輸出A和B相差90度,這樣可以實現圖像穩定。圖像穩定器可以在後面的裏程計算中更加精確。
通過車輪編碼器的反饋和PID對電機PMW的實時調節,實現左右車輪的速度控制。實時計算汽車的裏程,得到汽車運動位置的變化。
計算轎廂的位置變化由編碼器計算。如果車輪打滑,計算出的變化可能與實際變化不同。解決這個問題,其實就是看到問題更嚴重了。重要的是走5米只走4.9米,還是走180度只走179度。
其實角度不準對車的影響更大。壹般來說,小車的直線距離精度可以控制在厘米以內,角度精度可以控制在1%~2%。因為角度是壹個重要的參數,所以很多人用陀螺儀來校正。
所以有時候會有人問車有多準。其實現在準確率比較高,難免會出現打滑等問題,不可能做到100%的準確率。
現在自建地圖導航達到車的距離和角度是可以接受的。要提高精度,可能需要其他設備的輔助,比如激光雷達,可以進行二次探測和校正。
激光雷達數據的存儲格式,它首先會有壹個大小範圍,如果超出範圍,就是無效的。還有幾個采樣點,這樣激光雷達就能告訴妳采樣點有幾度。
另外最後壹個強度是告訴妳數據的精度,因為激光雷達也是取最高點的數據,有壹定的精度。上面的ppt其實是在用激光雷達掃描壹面墻的形狀。
其實激光雷達掃描壹個靜態的形狀是沒有意義的。雷達測繪的意義其實就是建立房間的地圖。
怎麽畫地圖?
第壹步是收集眼睛數據:
對於激光雷達,ROS在sensor_msgs包中定義了壹種特殊的數據結構來存儲激光報文的相關信息,稱為LaserScan。
它規定了激光的有效範圍,掃描點的采樣角度和每個角度的測量值。激光雷達通過360度實時掃描,可以實時測量障礙物的距離、形狀和實時變化。
第二步是把眼睛看到的數據變成地圖:
ROS的Gmapping將激光雷達/掃描數據轉換為光柵地圖數據,其中黑色代表障礙物,白色代表空白區域,可以順利通過,灰色:未知區域。隨著機器人的移動,激光雷達可以在許多不同的方向上觀察同壹位置是否有障礙物。如果障礙物閾值超過設定值,則標誌此處有障礙物。否則校準沒有障礙。它是壹種光柵地圖,用不同的灰度表示障礙物、空白區域和未知區域的大小。便於下壹步的定位導航。
有時候會有很直的墻,但是機器人走不直。這時候問題可能是機器人輪子打滑等問題,走歪了。這時候畫出來的地圖也可能是歪的。這種情況可以通過添加陀螺儀來避免。因為激光雷達的特性,有時候黑色或者鏡面會導致測距不準。
目前的解決方案是不使用激光雷達,或者使用激光雷達和超聲波進行輔助處理。
ROS的地圖是多層的,我可以把多個激光雷達放在不同的高度疊加在壹起,壹起畫壹張地圖。地圖畫好之後,就可以做定位導航了。
如何定位和導航?
定位:其實是壹個概率定位,不是100%的精度。根據激光雷達掃描到的周圍障礙物的形狀,與地圖的形狀進行匹配,判斷機器人位置的概率。
機器人定位成功與否與地圖特征有很大關系。如果地域特征明顯,機器人很容易判斷自己的位置。如果難以定位,可能需要有人指定初始位置,或者添加led來識別位置,或者其他定位設備來幫助定位。
目前,通過顏色或光線進行視覺的技術越來越多。
導航:全局路徑規劃+局部調整(動態避障)
導航其實就是全球定位。壹是根據現有地圖進行規劃,但在運營過程中會進行局部路線規劃。但大局還是以全局路徑為主。
導航還有很多工作要做。比如掃地機的路徑規劃和服務機器人的路徑規劃是不壹樣的。掃地機器人可能需要壹個帶拐角的全覆蓋地圖,而服務機器人主要圍繞指定路徑或最短路徑進行規劃,這是ROS工作量最大的部分。
路徑規劃根據不同的應用場景差異很大,但是ROS提供了基本的路徑規劃開發包,在此基礎上我們會自己做路徑規劃。
機器人描述和坐標系轉換
導航時,哪些區域可以通過取決於機器人的形狀和其他信息。ROS通過URDF(unified robot description format,統壹機器人描述格式)來描述機器人硬件的尺寸布局,比如車輪的位置、底盤的大小、激光雷達的安裝位置等,這些都會影響到坐標系的變換。
坐標系遵循每個幀只能有壹個父幀的前提,然後進行壹些眼神接觸或者聯想。
激光雷達的安裝位置直接影響/scan的輸出數據。因此,激光雷達和機器人的相對位置需要進行坐標轉換,以便將激光雷達數據轉換為機器人視角數據。
ROS的坐標系最終歸結為三個標準框架,可以簡化很多常見的機器人問題:
1)全局精確但局部不連續的幀(“映射”)
2)具有全局不精確但局部平滑的幀(“odom”)
3)機器人自己的框架(“base_link”)
很多傳感器(如激光雷達、深度相機、陀螺加速度計)都可以計算出base_link和odom的坐標關系,但由於“每幀只能有壹個父幀”,所以只有壹個節點(如robot_pose_ekf融合多傳感器)可以發布base_link和odom的坐標關系。
Base link自己的坐標系,因為不同的部件安裝在機器人上的不同位置,所以應該對應base link的坐標系,因為所有的傳感器都要通過機器人的視角“看”。
有朋友問我,激光雷達在建圖的時候,車動了以後地圖會很亂,因為車底盤的坐標系和激光雷達的坐標系沒有校準準確。
地圖與奧多姆的關聯
因為汽車運動需要壹個局部的聯系,比如汽車在前進,不斷積累,這就是裏程表的作用,而地圖起的是全局的、不連續的作用,通過激光雷達與地圖對應。
想學ROS,坐標系的變化是很重要的壹點。坐標系變換還有壹點,就是每個幀只有壹個父幀。有時候,如果兩個坐標都與之相關,就說明A和B相關,B和C相關,而不是B/C和A相關..
三個坐標框架的父子關系如下:
地圖-& gt;奧多姆-& gt;基本鏈接
其實map和odom都應該和base_link關聯,但是為了遵守每個幀只能有壹個父幀的原則,根據map和base_link和Odom->;Base_link,計算地圖和odom的坐標關系並發布。
奧多姆-& gt;裏程表節點計算並發布base_link的坐標關系。
地圖-& gt;base_link的坐標關系由定位節點計算,但不發布,而是接收Odom->;Base_link坐標,計算地圖->;奧多姆坐標,然後釋放。
在只有裏程表的情況下,沒有激光雷達也可以跑,但首先要簡單地按照預設的地圖進行避障。
精彩問答
問:ROS的實時性能有提升嗎?
答:實時提升取決於ROS2.0的設計,其實ROS2.0的進度是網上公布的。但實際上他的進步離實際應用還很遠,至少在今年下半年,但我們可以研究他的代碼。他大大改進了實時內存管理和線程管理。
問:vslam需要大量內存和CPU。李小姐在實際項目中使用了什麽硬件配置?妳能做多大的地圖?
答:確實如此。目前還是用激光雷達和傳感器輔助。這和地圖的大小關系不大,主要和地形障礙的復雜程度有關。