iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
0
AI & Data

ROS新手挑戰AI&Data組系列 第 14

[ROS#13]Navigation

  • 分享至 

  • xImage
  •  

參考資料:
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 是一整組可以讓機器人或自動化載具可以在空間中穩定移動的相關程式。
https://ithelp.ithome.com.tw/upload/images/20190928/20120406O1QdN2eZ7s.png
具體來說,這意味著機器人必須使用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演算法架構講解
https://ithelp.ithome.com.tw/upload/images/20190928/20120406vcFMrbhe4f.png
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 大致步驟:

  1. 已經用gmapping package建好了環境中的2D地圖
  2. 啟動navigation時,就可以將建好的地圖(通常是.pgm檔)當成static map餵給Global planner
  3. 接下來就需要給機器人一個goal(這可以透過Rviz來給定)、或是送一個message到move_base_simple/goal這個topic
  4. 送出goal之後,Global planner會先產生一條不會碰到static map(或者說Global map)中障礙物的軌跡,也就是Global Path。(但若只有這個Global path,機器人就只能在靜態環境中進行navigation,因為只要場景跟static map有不一樣,Global path就可能會撞到障礙物。)
  5. 外加上一個local planner來進行動態的避障(注意有沒有新的障礙物出現,這也是為什麼local planner需要有sensor data當作input)

• 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提供了該算法實現的摘要:

  1. 在機器人的控制空間(dx,dy,dtheta)中離散採樣
  2. 對於每個採樣速度,請從機器人的當前狀態進行正向仿真,以預測如果在某個(較短)時間段內應用採樣速度會發生什麼情況。
  3. 使用包含以下特徵的度量標準來評估(得分)前向仿真所得的每條軌跡:接近障礙物,接近目標,接近全局路徑和速度。 丟棄非法軌跡(與障礙物碰撞的軌跡)。
  4. 選擇得分最高的軌跡,並將相關的速度發送到移動基地。
  5. 沖洗並重複。

換言之:
第一步是在動態窗口內的速度空間中採樣速度對(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


上一篇
[ROS#12]TF 座標轉換
下一篇
[ROS#14]ROSbridge&URDF
系列文
ROS新手挑戰AI&Data組30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言