ROS

ROS Navigation stack 簡介

Navigation stack是使用ROS的一個重要工具,所以很有必要來介紹一下這個東西是怎麼運作的。

有部分的材料是來自於David Lu製作的投影片,他是Nav stack的開發者,頗強XD

http://roscon.ros.org/2014/wp-content/uploads/2014/07/ROSCON2014_DLu.pdf

首先要介紹一下這個stack的使用情境,可以從下面這張圖中簡單地看出:

nav

在一般的使用情況下,我們假設已經用gmapping package建好了環境中的2D地圖,那在啟動navigation時,就可以將建好的地圖(通常是.pgm檔)當成static map餵給Global planner。啟動Navigation所必須用到的程序可以參考我之前寫的launch檔

當我們已經啟動navigation,接下來就需要給機器人一個goal(這可以透過Rviz來給定)、或是送一個message到move_base_simple/goal這個topic。當送出goal之後,Global planner會先產生一條不會碰到static map(或者說Global map)中障礙物的軌跡,也就是Global Path。但是,若只有這個Global path,機器人就只能在靜態環境中進行navigation,因為只要場景跟static map有不一樣,Global path就可能會撞到障礙物。

要解決這個問題,在這邊的做法就是以Global path當作大致的行進路線,然後在額外加上一個local planner來進行動態的避障。這個local planner就必須時時注意有沒有新的障礙物出現,這也是為什麼local planner需要有sensor data當作input。

在nav stack裡,預設使用的演算法是S.Thrun提出的DWA (Dynamic Window Approach)演算法,這個演算法主要的概念是說,機器人先隨機產生很多個速度選項(即不同的v & ω),然後模擬讓機器人跟隨這些速度走一小段時間,再對每一個速度選項造成的位置評分,評分的依據包括跟goal的距離、跟障礙物的距離等等,然後選出分數最高的速度選項當做此時的local plan,並且會真正變成command被送到/cmd_vel讓機器人實際移動。等到了下一個位置後,再重新隨機產生多個速度選項,直到完成global plan。

如果你有興趣更深入地了解ROS navigation,可以直接去看看stack網頁,或聽聽下面的演講。

One thought on “ROS Navigation stack 簡介

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s