View Categories

TurtleBot3(ROS2)-Jazzy-Chap6-Simulation-模擬

C6. Simulation 模擬 #

補充資料:了解更多有關 TurtleBot3 Simulation。 #

TurtleBot3 支持模擬開發環境,可以在模擬中使用虛擬機器人進行編程開發。有兩種開發環境可以做到這一點,一種是使用帶有 3D 可視化工具 RViz 的假節點 fake node;另一種是使用 3D 機器人模擬器 Gazebo

  • 假節點 fake node 模擬,適合用來測試機器人模型和移動,但它不支援感測器。
  • 如果需要執行 SLAM 或 Navigation,Gazebo 模擬器會是一個可行的解決方案,因為它支持 IMU、LDS 和攝影機等感測器。

在本教程中,將主要介紹在 ROS 開發人員中使用最廣泛的 Gazebo 模擬器。

  • Gazebo 教學 (https://gazebosim.org/docs/harmonic/tutorials/)

C6.1. Gazebo Simulation #

Gazebo 模擬是使用  ros-gz 套件,ROS2 Jazzy 的 Gazebo 版本需要事前安裝,以便執行本章的指令。

C6.1.1. 安裝 Simulation Package #

TurtleBot3 Simulation Package 需要 turtlebot3 及 turtlebot3_msgs packages 為先決條件。沒有安裝這兩個 packages,則無法啟動 Simulation。

如果還沒有安裝所需 packages,可參照 Chap3.1. PC 設定章節來安裝。

[Remote PC]

				
					$ cd ~/turtlebot3_ws/src/
$ git clone -b jazzy https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/turtlebot3_ws && colcon build --symlink-install
				
			

C6.1.2. 啟動 Simulation World 世界地圖 #

TB3 有三種模擬的世界地圖可選擇。啟動 Gazebo 時可以任選其一。

1. Empty World 空白世界地圖

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo empty_world.launch.py
				
			
turtlebot3 empty world sim

2. TurtleBot3 World TB3 世界地圖

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=waffle
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
				
			
turtlebot3 world sim

3. TurtleBot3 House 房屋地圖

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=waffle_pi
$ ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
				
			
turtlebot3 house sim

C6.1.3. 操作 TB3 #

為了使用鍵盤來控制 TB3,需在新的 terminal 啟動 teleoperation node。

[Remote PC]

				
					$ ros2 run turtlebot3_teleop teleop_keyboard
				
			

補充資料:了解更多有關 如何可視化 Simulation data(RViz2) #

當 simulation 進行時,在 RViz2 中能夠可視化已公布的 topics。你可在新的 terminal 啟動 RViz2。

[Remote PC]

				
					$ ros2 launch turtlebot3_bringup rviz2.launch.py
				
			
turtlebot3 gazebo rviz

C6.2. SLAM 模擬 #

Gazebo 模擬器具有 SLAM 功能,你可在虛擬世界地圖中,選擇或建立不同的環境及機器人模型,而無須使用實體的機器人來實作。除了要準備模擬環境,而不需啟動實體機器人外,SLAM 模擬,跟使用實體 TB3 來實作 SLAM 是非常相似的。

下列操作會需要之前章節為先決條件,請回看之前的 Simulation 章節內容。

C6.2.1. 開啟 Simulation World 世界地圖 #

Gazebo 有三個世界地圖可開啟,但因要用 SLAM 來建圖,建議使用 TurtleBot3 World 或 TurtleBot3 House 地圖。

使用下列指令來載入 Gazebo 模擬器。本章會使用 TurtleBot3 World 世界地圖。也請注意 TURTLEBOT3_MODEL 參數,要指定所對應的 TB3 模型 (burger, waffle, waffle_pi)

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
				
			

補充資料:了解更多有關 如何載入 TurtleBot3 House 房屋地圖 #

TURTLEBOT3_MODEL 參數,要指定所對應的 TB3 模型 (burger, waffle, waffle_pi)。

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
				
			

C6.2.2. 執行 SLAM Node #

在 Remote PC 開新 terminal(Ctrl + Alt + T) 並跑 SLAM node。預設是使用 Cartographer SLAM 方法。也請注意 TURTLEBOT3_MODEL 參數,要指定所對應的 TB3 模型 (burger, waffle, waffle_pi)

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
				
			

C6.2.3. 執行 Teleoperation Node #

在 Remote PC 開新 terminal(Ctrl + Alt + T) 並跑 teleoperation node。也請注意 TURTLEBOT3_MODEL 參數,要指定所對應的 TB3 模型 (burger, waffle, waffle_pi)

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=burger
$ ros2 run turtlebot3_teleop teleop_keyboard

 Control Your TurtleBot3!
 ---------------------------
 Moving around:
        w
   a    s    d
        x

 w/x : increase/decrease linear velocity
 a/d : increase/decrease angular velocity
 space key, s : force stop

 CTRL-C to quit
				
			

C6.2.4. 儲存地圖 #

當地圖成功產生後,在 Remote PC 開新 terminal(Ctrl + Alt + T) 並儲存地圖。

virtual slam sim

[Remote PC]

				
					$ ros2 run nav2_map_server map_saver_cli -f ~/map
				
			
map
所儲存的 map.pgm 檔

C6.3. Navigation Simulation 模擬導航 #

就如在 Gazebo 模擬器跑虛擬 SLAM,你也可以進行虛擬導航 virtual Navigation,而無須使用實體的機器人來實作。當然在跑 virtual Navigation 前,必須準備好完整合適的地圖環境。虛擬導航跟實作真實導航會很相似。

C6.3.1. 開啟模擬的世界地圖 #

在之前 SLAM 章節,使用 TurtleBot3 World 世界地圖來建地圖。相同的 Gazebo 環境也被使用在模擬 Navigation。

也請注意 TURTLEBOT3_MODEL 參數,要指定所對應的 TB3 模型 (burger, waffle, waffle_pi)

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
				
			

補充資料:了解更多有關 如何載入 TurtleBot3 House 房屋地圖 #

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
				
			

C6.3.2. 執行 Navigation Node #

在 Remote PC 開新 terminal(Ctrl + Alt + T) 並跑 Navigation2 node。

[Remote PC]

				
					$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map.yaml
				
			

C6.3.3. 估計 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. 在 teleop node 視窗,按 Ctrl + C 來結束 keyboard teleoperation node,這可以防止在導航期間,從多個節點發布不同的 cmd_vel 值。

C6.3.4. 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

C6.4. Fake Node Simulation 假節點的模擬 #

C6.5. 單獨的 Gazebo 模擬 #