ROS與navigation教程—概述

navigation是ROS的二維導航功能包,簡單來說,就是根據輸入的里程計等傳感器的信息流和機器人的全局位置,通過導航算法,計算得出安全可靠的機器人速度控制指令。

代碼庫:https://github.com/ros-planning/navigation

代碼裏文件較多,進行梳理後如下圖

  • map_server:地圖服務器,主要功能是保存地圖和導入地圖。
  • costmap_2d:可以生產代價地圖,以及提供各種相關的函數。
  • robot_pose_ekf:擴展卡爾曼濾波器,輸入是里程計、IMU、VO中的任意兩個或者三個,輸出是一個融合之後的pose。
  • localization:這裏是兩個定位用的package。fake_localization一般是仿真用的,amcl纔是實際定位用的package。
  • nav_core:這裏面只有三個文件,對應的是全局路徑規劃、局部路徑規劃、recovery_action的通用接口定義,具體功能實現則是在各個對應的規劃器package裏。
  • move_base:這裏實現的是整個導航的流程。什麼時候調用全局路徑規劃、什麼時候調用局部路徑規劃、什麼時候調用recovery_action都是這個package管的。就是下圖中間方框裏做的事情,可以說是整個navigation stack的核心。
     


 

總體框架圖中可以看到,

一、move_base

move_base提供了ROS導航的配置、運行、交互接口,它主要包括兩個部分:

(1) 全局路徑規劃(global planner):根據給定的目標位置進行總體路徑的規劃.

在ROS的導航中,首先會通過全局路徑規劃,計算出機器人到目標位置的全局路線。這一功能是navfn這個包實現的。

navfn通過Dijkstra最優路徑的算法,計算costmap上的最小花費路徑,作爲機器人的全局路線。將來在算法上應該還會加入A*算法。

(2) 本地實時規劃(local planner):根據附近的障礙物進行躲避路線規劃。

本地的實時規劃是利用base_local_planner包實現的。該包使用Trajectory Rollout 和Dynamic Window approaches算法計算機器人每個週期內應該行駛的速度和角度(dx,dy,dtheta velocities)。

base_local_planner這個包通過地圖數據,通過算法搜索到達目標的多條路經,利用一些評價標準(是否會撞擊障礙物,所需要的時間等等)選取最優的路徑,並且計算所需要的實時速度和角度。

二、map_server

 map_server提供map_server ROS節點,它提供地圖數據作爲一個ROS服務器。

也提供map_saver命令行功能,能動態生成保存到文件中的地圖。 包中通過工具操作的地圖是以成堆的文件存儲的。YAML文件描述地圖的元數據,並命名image文件。Image文件編碼佔用數據。

Image 以對應單元的顏色描述世界中每個單元的佔用狀態。白色單元格表示自由,黑色單元格表示佔用,兩種顏色之間的單元表示未知。接受彩色圖像,但顏色值平均爲灰度值。

三、costmap_2d

costmap_2d包提供了一種2D代價地圖的實現方案,該方案從實際環境中獲取傳感器數據,構建數據的2D或3D佔用柵格(取決於是否使用基於體素的實現),以及基於佔用柵格和用戶定義膨脹半徑的2D代價地圖的膨脹代價。

該包也支持基於map_server初始化代價地圖,基於滾動窗口的代價地圖,以及基於參數化訂閱和配置傳感器主題。

costmap_2d包提供了一種可配置框架來維護機器人在佔用柵格應該如何導航的信息。代價地圖使用傳感器數據和來自靜態地圖的信息,通過costmap_2d :: Costmap2DROS對象來存儲和更新實際環境中的障礙物信息。

初始化costmap_2d :: Costmap2DROS對象的方法主要有兩種。

  • 第一種是使用用戶生成的靜態地圖進行初始化(有關構建地圖的文檔,請參閱map_server包)。在這種情況下,代價地圖被初始化來匹配與靜態地圖提供的寬度,高度和障礙物信息。這種方式通常與定位系統(如AMCL)結合使用,允許機器人在地圖座標系註冊障礙物,並且當基座在環境中移動時可以根據傳感器數據更新其代價地圖。
  • 第二種是給出一個寬度和高度,並將rolling_window參數設置爲true。當機器人在移動時,rolling_window參數將機器人保持在代價地圖的中心。然而當機器人在給定區域移動得太遠時,障礙物信息將會被從地圖中丟棄。這種方式的配置最常用於里程計座標系中,機器人只關注局部區域內的障礙物

四、robot_pose_ekf

Robot Pose EKF 包用於評估機器人的3D位姿,基於來自不同來源的位姿測量信息。

它使用帶有6D(3D position and 3D orientation)模型信息的擴展卡爾曼濾波器來整合來自輪式里程計,IMU傳感器和視覺里程計的數據信息。

基本思路就是用鬆耦合方式融合不同傳感器信息實現位姿估計。

五、acml

amcl是一種機器人在2D中移動的概率定位系統。 它實現了自適應(或KLD採樣)蒙特卡羅定位方法,該方法使用粒子濾波器來針對已知地圖跟蹤機器人的位姿。

 

參考資料:

https://blog.csdn.net/tansir94/article/details/83720740

http://wiki.ros.org/navigation

https://blog.csdn.net/bazinga_IIIIII/article/details/79369451

https://blog.csdn.net/jinking01/article/details/79455962

https://www.ncnynl.com/archives/201708/1911.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章