參考資料:
1. 對於 Navigation Stack 的基本了解
2. ROS Navigation Tuning Guide
3. navigationTutorialsRobotSetup
4. ros的navigation之———move_base(導航框架)
5. ROS探索總結(十三)——導航與定位框架
6. ROS Navigation stack 簡介
• Stack Setup
Navigation Stack 是一整組可以讓機器人或自動化載具可以在空間中穩定移動的相關程式。
具體來說,這意味著機器人必須使用tf發布坐標系信息,從要與Navigation Stack一起使用的所有傳感器接收[sensor_msgs / LaserScan或sensor_msgs / PointCloud message],並使用[tf和 nav_msgs / Odometry message],同時也接收速度命令以發送到基地。
他人節點見解:參考1、4
大致步驟:
1. 創包 catkin_create_pkg my_robot_name_2dnav move_base my_tf_configuration_dep my_odom_configuration_dep my_sensor_configuration_dep
2. 創Launch檔、寫node、設param 給你的機器人(先前學的)
3. Costmap Configuration (local_costmap) & (global_costmap) //下面講
4. Base Local Planner Configuration //下下面講
5. 創Launch檔用於Navigation Stack
6. 配置AMCL
7. 試跑
終端1: roslaunch my_robot_configuration.launch
終端2: roslaunch move_base.launch
• Navigation演算法架構講解
Costmap: Navigation Stack使用兩個Costmap(成本圖)來存儲有關世界上障礙物的信息。一個成本圖用於global(全局)規劃,這意味著在整個環境中創建長期計劃;另一個成本圖用於local(局部)規劃和避障。
local_costmap: 創建文件local_costmap_params.yaml打開編輯器,然後粘貼以下文本:
local_costmap:
global_frame: odom
robot_base_frame: base_link
update_frequency: 5.0
publish_frequency: 2.0
static_map: false
rolling_window: true
width: 6.0
height: 6.0
resolution: 0.05
global_costmap: 創建文件global_costmap_params.yaml打開編輯器,然後粘貼以下文本:
global_costmap:
global_frame: /map
robot_base_frame: base_link
update_frequency: 5.0
static_map: true
#詳細查詢 參考3
參考6 大致步驟:
• DWA(Dynamic Window Approach)解說
在nav stack裡,預設使用的演算法是S.Thrun提出的DWA演算法
這個演算法主要的概念:
機器人先隨機產生很多個速度選項(即不同的v & ω),然後模擬讓機器人跟隨這些速度走一小段時間,再對每一個速度選項造成的位置評分,評分的依據包括跟goal的距離、跟障礙物的距離等等,然後選出分數最高的速度選項當做此時的local plan,並且會真正變成command被送到/cmd_vel讓機器人實際移動,等到了下一個位置後,再重新隨機產生多個速度選項,直到完成global plan。
#以下節錄自 -參考2 --第 3.1 章 DWA Local Planner
3.1.1 algorithm演算法
ROS Wiki提供了該算法實現的摘要:
換言之:
第一步是在動態窗口內的速度空間中採樣速度對(vx,vy,ω)。
第二步基本上是消除不允許的速度(即消除不良軌跡)。
第三步是使用目標函數評估速度對,該目標函數輸出軌跡分數。
第四步和第五步很容易理解:採用當前最佳速度選項並重新計算。
3.1.2 Forward Simulation正向仿真
How to tune sim time如何調整模擬時間
Velocity samples速度樣本
Simulation granularity仿真粒度
3.1.3 Trajactory Scoring軌跡計分
在ROS的實現中,目標函數的成本計算如下:
成本=路徑距離偏差*(距離軌跡終點的距離(m))+goal距離偏差*(從軌跡終點到局部目標的距離(m))+occdist標度∗(沿著軌蹟的最大障礙物成本(0-254))
3.1.4 Other Parameters其他參數
Goal distance tolerance目標距離公差
Oscilation reset振盪復位
• Gmapping + move_base實作
在ROS中,進行導航需要使用到的三個包是:
(1) move_base:根據參照的消息進行路徑規劃,使移動機器人到達指定的位置;
(2) gmapping:根據激光數據(或者深度數據模擬的激光數據)建立地圖;
(3) amcl:根據已經有的地圖進行定位。
參考鏈接:
http://www.ros.org/wiki/navigation/Tutorials/RobotSetup
http://www.ros.org/wiki/navigation/Tutorials