View Categories

TurtleBot3(ROS2)-Jazzy-Chap5-Navigation-導航

C5. Navigation 導航 #

Navigation 導航可以在一個給定的環境中,將機器人從一個位置移動到指定目的地。為此,地圖必需要包含給定環境中的家具,物體和牆壁的幾何信息。如前面的 SLAM 章節所述,地圖則是由感測器得到的距離訊息,和機器人本身的方位訊息來創建。

Navigation 導航功能讓機器人能夠通過使用圖資、機器人編碼器、IMU 感測器、和距離感測器等,從當前的方位,移動到地圖上指定的目標方位。執行此任務的過程如下節所述。

C5.1. 執行 Navigation node #

1. 在 TB3 SBC 執行(Bringup)基本套件來開始 TB3 應用。如已執行 Bringup,可跳過此步驟

  • 在 Remote PC 開新的 terminal (Ctrl + Alt + T),連上 SBC 的 IP address。預設密碼是 ubuntu
  • 指定 TURTLEBOT3_MODEL 的參數,需設定為 burger, waffle, 或 waffle_pi。

[Remote PC]

				
					$ ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}
$ export TURTLEBOT3_MODEL=${TB3_MODEL}
$ ros2 launch turtlebot3_bringup robot.launch.py
				
			

2. 在 Remote PC 開新的 terminal (Ctrl + Alt + T),啟動 Navigation 節點。ROS2 使用 Navigation2

  • 指定 TURTLEBOT3_MODEL 的參數,需設定為 burger, waffle, 或 waffle_pi。

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_navigation2 navigation2.launch.py map:=$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. 點擊 RViz2 選單的 2D Pose Estimate 鍵

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

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

tb3 navigation2 rviz 01

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

[Remote PC]

				
					$ ros2 run turtlebot3_teleop teleop_keyboard
				
			

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. 在 RViz2 選單點擊 Navigation2 Goal 鍵

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

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

補充資料:更多有關 Navigation2 的資訊。 #

  • 機器人會依據 global path planner 產生到達 Navigation2 Goal 目的地的路徑,並依路徑移動。如果路徑上碰到障礙物,Navigation2 會使用 local path planner 來避開障礙物。
  • 如果不能產生到達 Navigation2 Goal 目的地的路徑時,則會造成 Navigation2 Goal 設定失敗。如果在機器人到達目的地前,要停止機器人移動,可以將 TB3 當前位置設為 Navigation2 Goal 即可。
  • 官方 ROS2 Navigation2 Wiki

C5.4. Tuning 微調指南 #

對不同的機器人,Navigation2 程序內有許多參數可用來改變其效能。儘管跟 ROS1 Navigation 相似,你可以參考 Configuration Guide of Navigation2 或 ROS Navigation Tuning Guide by Kaiyu Zheng 了解全部的參數。

本微調指南提供一些提示,供你配置重要參數。如果你想改變效能則會取決於你的環境,這些提示可能會幫助你並節省你的時間。

C5.4.1. Costmap Parameters #

C5.4.1.1. inflation_layer.inflation_radius #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 此參數定義了被偵測到障礙物的周圍,無法進入的膨脹區域。規劃所產生的路徑,將不會穿過該膨脹區域。將此值設為略大於機器人半徑是比較好的。欲了解更多信息,請參閱 costmap_2d wiki
tuning inflation radius

C5.4.1.2. inflation_layer.cost_scaling_factor #

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

C5.4.2. dwb_controller #

C5.4.2.1. max_vel_x #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 此因子被設定為平移(直線)速度的最大值。

C5.4.2.2. min_vel_x #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 此因子被設定為平移(直線)速度的最小值。如果設為負值,機器人可以向後移動。

C5.4.2.3. max_vel_y #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 此因子被設定為 y 速度的最大值,以 m/s 為單位。

C5.4.2.4. min_vel_y #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 此因子被設定為 y 速度的最小值,以 m/s 為單位。

C5.4.2.5. max_vel_theta #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 設定最大旋轉速度的值。機器人的旋轉速度,不能比此值更快。

C5.4.2.6. min_speed_theta #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 設定最小旋轉速度的值。機器人的旋轉速度,不能比此值更慢。

C5.4.2.7. max_speed_xy #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 機器人最大平移(直線)速度的絕對值,以 m/s 為單位。

C5.4.2.8. min_speed_xy #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 機器人最小平移(直線)速度的絕對值,以 m/s 為單位。

C5.4.2.9. acc_lim_x #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 機器人 x 加速度的限制值,以 m/s^2 為單位。

C5.4.2.10. acc_lim_y #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 機器人 y 加速度的限制值,以 m/s^2 為單位。

C5.4.2.11. acc_lim_theta #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 機器人旋轉加速度的限制值,以 radian/s^2 為單位。

C5.4.2.12. decel_lim_x #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 機器人在 x 方向的減速限制,單位為 m/s^2。

C5.4.2.13. decel_lim_y #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 機器人在 y 方向的減速限制,單位為 m/s^2。

C5.4.2.14. decel_lim_theta #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 機器人在 theta 方向的減速限制,單位為 rad/s^2。

C5.4.2.15. xy_goal_tolerance #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 當機器人到達目標方位時,所允許的 x,y 距離誤差。

C5.4.2.16. yaw_goal_tolerance #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 當機器人達到其目標方位時,所允許的 yaw 偏航角度誤差。

C5.4.2.17. transform_tolerance #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • tf 訊息的允許延遲值。

C5.4.2.18. sim_time #

  • 定義於 turtlebot3_navigation2/param/${TB3_MODEL}.yaml
  • 此因子是以秒為單位,設定前向模擬時間(forward simulation)。值設太低,機器人會不容易通過狹窄地區。值設太高則會限制動態轉向。你可以在下圖中看到,黃色線長度所代表模擬路徑的差異。
tuning sim time