在Turtlebot2機器人平臺進行SLAM演算法實驗的技術筆記【一】
一、關於演算法移植方面
a.因實際專案需求,我需要把在turtlebot2實驗平臺上面的建圖、定位、路徑規劃、自主導航演算法移植到對應專案的另一個移動底座上,並且上位機也需要更換成另一臺筆記本或者工控機
b.首先,我們需要把我們原先筆記本上的整個工作區拷貝到新的上位機上面,由於我們的演算法用了很多其他的依賴庫,所以在對新上位機的工作區編譯之前,需要先下載安裝好我們需要的依賴檔案。如果在後面執行程式的時候還出現了類似的情況,我們再單獨去下載相應的引入檔案。
c.安裝好依賴檔案之後,就要對新上位機上面拷貝過去的程式包重新編譯,不然原來編譯好的檔案會在新的上位機上面出現路徑錯誤。在編譯過程中,由於某個程式包丟擲了異常,或者是系統環境不一致,又或者是某個程式包出現了問題中斷了編譯,可能會導致出問題之後的程式包都編譯失敗,以至於之後再執行我們的演算法程式的時候會出現各類問題,解決辦法是在出現問題的時候找出出現問題的節點所在程式包,對其單獨編譯。
d.其次,因移動底座更改,不再是turtlebot2的kuboki底座,所以我們原先的turtlebot2驅動檔案也就自然需要替換成新底座的驅動程式(也可稱為基控制程式或者底座資料管理程式,是上位機建立的一個程式節點,主要通過話題的釋出和訂閱利用訊息來對底座的進行運動控制和對一些資訊的採集,比如move_base把運動指令釋出到/cmd_vel,然後底座驅動程式訂閱這個話題,得到其中的訊息命令,就能順利移動了;再比如把底座傳來的相應訊息,如編碼器得到的位移和IMU得到的航向角資訊,經過一些處理之後傳到底座驅動程式,整理成一定的訊息格式,再以/odom話題的形式釋出出去,供上位機的其他程式節點使用)。
e.替換成新底座的驅動程式之後還不能直接使用,需要比對程式當中配置檔案的USB介面資訊,觀察底座連線的新上位機的哪個介面,ttyUSB0還是ttyUSB1又或是其他,總之需要與實際插入的USB口保持一致,如果不一致,需要修改驅動程式當中的引數配置檔案。當然,我們還可以利用其他方法,把這個USB口設定別名,然後再驅動程式當中直接填寫別名即可。雷達驅動程式的配置檔案類似。
f.由於每個驅動程式提供的一些資訊輸出不一樣,比如有的直接是按/odom的訊息格式提供運動學資訊,這樣也是符合我們gmapping和amlc演算法的需求,所以可以直接使用,不會出什麼問題,但是有些底座卻不一定是輸出/odom的訊息,比如釋出了另一個話題,這個話題可以是把IMU的資料和里程計(odom)中的資料利用卡爾曼濾波糅合在了一起,再以新話題的形式釋出出來,這樣的話,我們gmapping和amcl演算法就不能直接使用驅動輸出的資訊了,需要做出修改。第一,可以不訂閱新話題,還是讓驅動程式釋出里程計/odom的話題,然後訂閱/odom使用。第二,更改我們的演算法,把我們訂閱接收的話題改成驅動釋出的新話題,並且訊息格式保持一致即可。
g.在使用新的底座和底座驅動之後,會發現很多我們演算法程式去驅動底座運動的時候無法成功,比如我們turtlebot的鍵盤控制,又或是在自主導航move_base發的運動訊息,都無法起作用,原因是我們可能在驅動中訂閱的運動話題的名稱或者對映與我們演算法程式當中運動控制釋出的話題名稱或對映不一致,比如我演算法程式當中明明發布的是/raw_cmd_vel,但是驅動程式當中訂閱的卻直接是/cmd_vel,不一致,無法聯通。解決辦法就是把名稱或者對映改成一致的資訊。
二、未來專案規劃
1、研究兩種底座驅動程式的區別和寫法含義。
2、在已有演算法當中加入重定位功能和自主探索地圖功能。
3、在路徑規劃演算法當中的避障方面加入機器人回退一些距離以遠離障礙物的功能。
4、打造主控程式,包括兩個層次,一個層次是以資料流為根據的控制層,比如機器人得到一些指令之後相應的去完成哪些功能,但是在此之前,機器人上面所有的驅動程式和演算法程式節點都需要全部開啟。一個層次是以業務邏輯為根據的功能層,打造視覺化操作介面,根據介面互動來給機器人下達指令和開啟功能節點。