C5. Navigation 導航 #
Navigation 導航可以在一個給定的環境中,將機器人從一個位置移動到指定目的地。為此,地圖必需要包含給定環境中的家具,物體和牆壁的幾何信息。如前面的 SLAM 章節所述,地圖則是由感測器得到的距離訊息,和機器人本身的方位訊息來創建。
Navigation 導航功能讓機器人能夠通過使用圖資、機器人編碼器、IMU 感測器、和距離感測器等,從當前的方位,移動到地圖上指定的目標方位。執行此任務的過程如下節所述。
C5.1. 執行 Navigation node #
1. 從 Remote PC 執行 roscore。如已執行可跳過此步驟。
[Remote PC]
$ roscore
2. 在 TB3 SBC 執行(Bringup)基本套件來開始 TB3 應用。如已執行 Bringup,可跳過此步驟
- 在 Remote PC 開新的 terminal (Ctrl + Alt + T),連上 SBC 的 IP address。預設密碼是 turtlebot。
- 指定 TURTLEBOT3_MODEL 的參數,需設定為 burger, waffle, 或 waffle_pi。
[Remote PC]
$ ssh pi@{IP_ADDRESS_OF_RASPBERRY_PI}
$ export TURTLEBOT3_MODEL=${TB3_MODEL}
$ roslaunch turtlebot3_bringup turtlebot3_robot.launch
3. 啟動 Navigation 節點。
[Remote PC]
$ roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml
補充資料:如何預先定義好 TURTLEBOT3_MODEL 參數。 #
如果 TURTLEBOT3_MODEL 參數,已經預先定義在你系統的 .bashrc 檔內,則 export TURTLEBOT3_MODEL=${TB3_MODEL} 指令可以省略。當新的 terminal 開啟時,.bashrc 檔會自動載入。
- 在 .bashrc 檔內,定義 TurtleBot3 Burger 為預設 model 範例
$ echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc
$ source ~/.bashrc
- 在 .bashrc 檔內,定義 TurtlBot3 waffle_pi 為預設 model 範例
$ echo 'export TURTLEBOT3_MODEL=waffle_pi' >> ~/.bashrc
$ source ~/.bashrc
C5.2. 估計 Initial Pose 初始方位 #
Initial Pose Estimation 必須在跑 Navigation 之前就執行,因為這個程序會初始化 AMCL 參數,這參數對成功的 Navigation 很重要。TurtleBot3 必須正確定位在地圖上,LDS 感測器數據,要與顯示的地圖正確地重疊。
1. 點擊 RViz 選單的 2D Pose Estimate 鍵

2. 在地圖上點擊真正機器人的所在位置,然後拉出大的綠色箭號,並指向機器人正面的方向。
3. 重複步驟 1 跟 2,直到 LDS 感測器的數據,跟儲存的地圖正確的重疊。

4. 啟動 keyboard teleoperation node 遙控節點,以便準確定位在地圖上的機器人位置
[Remote PC]
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
5. 來回一點一點移動機器人,以收集周圍環境資訊,和縮小 TurtleBot3 在地圖上的估計位置(地圖上是以小的綠色箭頭來顯示 TB3)。


6. 按 Ctrl + C 來結束 keyboard teleoperation node,這可以防止在導航期間,從多個節點發布不同的 cmd_vel 值。
C5.3. Set Navigation Goal 設定導航目標 #
1. 在 RViz 選單點擊 2D Nav Goal 鍵

2. 在地圖上點擊來設定機器人的目的地,並拉出綠色箭號,作為機器人抵達目的地後要面對的方向
- 綠色箭號是一個 marker 標記,是指定機器人的目的地
- 箭頭的根部是機器人目的地的 x 和 y 座標位置,箭頭指向的方位,則決定機器人的 theta (θ) 角度。
- 當 x, y, θ 都決定後,TB3 就會開始往目的地移動。

補充資料:有關 Navigation 的詳細資訊。 #
- 機器人會依據 global path planner 產生到達 Navigation Goal 目的地的路徑,並依路徑移動。如果路徑上碰到障礙物,Navigation 會使用 local path planner 來避開障礙物。
- 如果不能產生到達 Navigation Goal 目的地的路徑時,則會造成 Navigation Goal 設定失敗。如果在機器人到達目的地前,要停止機器人移動,可以將 TB3 當前位置設為 Navigation Goal 即可。
- 官方 ROS Navigation Wiki
C5.4. Tuning 微調指南 #
對不同的機器人,Navigation 程序內有許多參數可用來改變其效能。
你可以在 ROS Navigation Wiki 網頁,Basic Navigation Tuning Guide,ROS Navigation Tuning Guide by Kaiyu Zheng 了解全部的參數,或參考 ROS Robot Programming 書(簡中pdf)的 Chapter 11 章。
本微調指南提供一些提示,供你配置重要參數。如果你想改變效能則會取決於你的環境,這些提示可能會幫助你並節省你的時間。
C5.4.1. inflation_radius #
- 定義於 turtlebot3_navigation/param/costmap_common_param_${TB3_MODEL}.yaml
- 這個參數可把障礙物,放大為一個膨脹區域。而在規劃路徑時,機器人不會穿過此膨脹區域。將此值設置為比機器人半徑大,比較保險。要了解更多訊息,請參閱costmap_2d wiki 網頁。

C5.4.2. cost_scaling_factor #
- 定義於 turtlebot3_navigation/param/costmap_common_param_${TB3_MODEL}.yaml
- 此因子是一個反比的參數,會用來乘以 cost 值。所以如這個參數增加,所產生的 cost 值就會降低。

C5.4.3. max_vel_x #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 此因子被設定為平移(直線)速度的最大值。
C5.4.4. min_vel_x #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 此因子被設定為平移(直線)速度的最小值。如果設為負值,機器人可以向後移動。
C5.4.5. max_trans_vel #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 最大平移(直線)速度的允許值。機器人不能快於此值。
C5.4.6. min_trans_vel #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 最小平移(直線)速度的允許值。機器人不能慢於此值。
C5.4.7. max_rot_vel #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 最大旋轉速度的允許值。機器人旋轉不能快於此值。
C5.4.8. min_rot_vel #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 最小旋轉速度的允許值。機器人旋轉不能慢於此值。
C5.4.9. acc_lim_x #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 平移(直線)加速度的限制值。
C5.4.10. acc_lim_theta #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 旋轉加速度的限制值。
C5.4.11. xy_goal_tolerance #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 當機器人到達目標方位時,所允許的 x,y 距離誤差。
C5.4.12. yaw_goal_tolerance #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 當機器人達到其目標方位時,所允許的 yaw 偏航角度誤差。
C5.4.13. sim_time #
- 定義於 turtlebot3_navigation/param/dwa_local_planner_params_${TB3_MODEL}.yaml
- 此因子是以秒為單位,設定前向模擬時間(forward simulation)。值設太低,機器人會不容易通過狹窄地區。值設太高則會限制動態轉向。你可以在下圖中看到,黃色線長度所代表模擬路徑的差異。
