導航與定位是機器人研究中的重要部分。
一般機器人在陌生的環境下需要使用雷射感應器(或者深度感應器轉換成雷射資料),先進行地圖建模,然後在根據建立的地圖進行導航、定位。在ROS中也有很多完善的包可以直接使用。
在ROS中,進行導航需要使用到的三個包是:
(1) move_base:根據參照的訊息進行路徑規劃,使移動機器人到達指定的位置;
(2) gmapping:根據雷射資料(或者深度資料類比的雷射資料)建立地圖;
(3) amcl:根據已經有的地圖進行定位。
參考連結:http://www.ros.org/wiki/navigation/Tutorials/RobotSetup
http://www.ros.org/wiki/navigation/Tutorials
整體導航包的格局如所示:
其中白色框內的是ROS已經為我們準備好的必須使用的組件,灰色框內的是ROS中可選的組件,藍色的是使用者需要提供的機器人平台上的組件。
1、sensor transforms
其中涉及到使用tf進行感應器座標的轉換,因為我們使用的機器人的控制中心不一定是在感應器上,所以要把感應器的資料轉換成在控制中心上的座標資訊。如所示,感應器擷取的資料是在base_laser的座標系統中的,但是我們控制的時候是以base_link為中心,所以要根據兩者的位置關心進行座標的變換。
變換的過程不需要我們自己處理,只需要將base_laser和base_link兩者之間的位置關係告訴tf,就可以自動轉換了。具體的實現可以參見:http://blog.csdn.net/hcx25909/article/details/9255001。
2、sensor sources
這裡是機器人導航感應器資料輸入,一般只有兩種:
(1) 雷射感應器資料
(2) 點雲資料
具體實現見:http://www.ros.org/wiki/navigation/Tutorials/RobotSetup/Sensors
3、odometry source
機器人的導航需要輸入裡程計的資料(tf,nav_msgs/Odometry_message),具體實現見:
http://www.ros.org/wiki/navigation/Tutorials/RobotSetup/Odom
4、base controller
在導航過程中,該部分負責將之前得出來的資料轉封裝成具體的線速度和轉向角度資訊(Twist),並且發布給硬體平台。
5、map_server
在導航過程中,地圖並不是必須的,此時相當於是在一個無限大的空地上進行導航,並沒有任何障礙物。但是考慮到實際情況,在我們使用導航的過程中還是要一個地圖的。
具體實現見:http://www.ros.org/wiki/slam_gmapping/Tutorials/MappingFromLoggedData
在ROS的導航中,costmap_2d這個包主要負責根據感應器的資訊建立和更新二維或三維的地圖。ROS的地圖(costmap)採用網格(grid)的形式,每個網格的值從0~255,分為三種狀態:佔用(有障礙物)、無用(閒置)、未知。具體狀態和值的對應關係如下:
共分為五個部分:(下面的紅色框圖是機器人的輪廓,旁邊的黑框是的映射位置)
(1) Lethal(致命的):機器人的中心與該網格的中心重合,此時機器人必然與障礙物衝突。
(2) Inscribed(內切):網格的外切圓與機器人的輪廓內切,此時機器人也必然與障礙物衝突。
(3) Possibly circumscribed(外切):網格的外切圓與機器人的輪廓外切,此時機器人相當於靠在障礙物附近,所以不一定衝突。
(4) Freespace(自由空間):沒有障礙物的空間。
(5) Unknown(未知):未知的空間。
具體可見:http://www.ros.org/wiki/costmap_2d
----------------------------------------------------------------
歡迎大家轉載我的文章。
轉載請註明:轉自古-月
http://blog.csdn.net/hcx25909
歡迎繼續關注我的部落格