View Categories

TurtleBot3(ROS1)-Noetic-Chap5-Navigation-導航

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 鍵

2d pose button

2. 在地圖上點擊真正機器人的所在位置,然後拉出大的綠色箭號,並指向機器人正面的方向。

3. 重複步驟 1 跟 2,直到 LDS 感測器的數據,跟儲存的地圖正確的重疊。

tb3 navigation2 rviz 01

4. 啟動 keyboard teleoperation node 遙控節點,以便準確定位在地圖上的機器人位置

[Remote PC]

				
					$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
				
			

5. 來回一點一點移動機器人,以收集周圍環境資訊,和縮小 TurtleBot3 在地圖上的估計位置(地圖上是以小的綠色箭頭來顯示 TB3)。

tb3 amcl particle 01
tb3 amcl particle 02

6. 按 Ctrl + C 來結束 keyboard teleoperation node,這可以防止在導航期間,從多個節點發布不同的 cmd_vel 值。

C5.3. Set Navigation Goal 設定導航目標 #

1. 在 RViz 選單點擊 2D Nav Goal 鍵

2d nav goal button

2. 在地圖上點擊來設定機器人的目的地,並拉出綠色箭號,作為機器人抵達目的地後要面對的方向

  • 綠色箭號是一個 marker 標記,是指定機器人的目的地
  • 箭頭的根部是機器人目的地的 x 和 y 座標位置,箭頭指向的方位,則決定機器人的 theta (θ) 角度。
  • 當 x, y, θ 都決定後,TB3 就會開始往目的地移動。
2d nav goal

補充資料:有關 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 GuideROS 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 網頁
tuning inflation radius

C5.4.2. cost_scaling_factor #

  • 定義於 turtlebot3_navigation/param/costmap_common_param_${TB3_MODEL}.yaml
  • 此因子是一個反比的參數,會用來乘以 cost 值。所以如這個參數增加,所產生的 cost 值就會降低。
tuning cost scaling factor
最好的路徑是讓機器人穿過障礙物之間的中心處。可將此因子設置的比較小,以遠離障礙物。

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)。值設太低,機器人會不容易通過狹窄地區。值設太高則會限制動態轉向。你可以在下圖中看到,黃色線長度所代表模擬路徑的差異。
tuning sim time