- C4. SLAM 建圖定位
- C4.1. 執行 SLAM node
- C4.2. 執行遙控 Teleoperation Node
- C4.3. Tuning 微調指南
- C4.3.1. MAP_BUILDER.use_trajectory_builder_2d
- C4.3.2. TRAJECTORY_BUILDER_2D.min_range
- C4.3.3. TRAJECTORY_BUILDER_2D.max_range
- C4.3.4. TRAJECTORY_BUILDER_2D.missing_data_ray_length
- C4.3.5. TRAJECTORY_BUILDER_2D.use_imu_data
- C4.3.6. TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching
- C4.3.7. TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians
- C4.3.8. POSE_GRAPH.optimize_every_n_nodes
- C4.3.9. POSE_GRAPH.constraint_builder.min_score
- C4.3.10. POSE_GRAPH.constraint_builder.global_localization_min_score
- C4.4. 儲存地圖
- C4.5. 地圖
C4. SLAM 建圖定位 #
SLAM(Simultaneous Localization and Mapping) 即時定位與地圖構建, 是一種繪製地圖的技術,可在任一空間中估算當前的位置. 以下的影片展示 TurtleBot3, 如何使用 SLAM 技術,來精確的繪製地圖.
影片說明: (內容可能隨時更新,恕不另行通知)
- 機器人: TurtleBot3 Burger
- 感測器: LiDAR 光達(Laser Distance Sensor)
- ROS 套件: Gmapping / Cartographer
- 地點: ROBOTIS 實驗室及總部 15 樓走廊
- 時間長: 55 分
- 距離: 共計 351 公尺
影片說明: (內容可能隨時更新,恕不另行通知)
- 機器人: TurtleBot3 Burger and Waffle
- 感測器: LiDAR 光達(Laser Distance Sensor, LDS-01)
- ROS 套件: Gmapping
- 地點: ROBOTIS 總部教室
- 時間長: 約 4 分
- 距離: 共計 15 公尺
C4.1. 執行 SLAM node #
1. 在 TB3 SBC 執行(Bringup)基本套件來開始 TB3 應用。如已執行 Bringup,可跳過此步驟
- 在 Remote PC 開新的 terminal (Ctrl + Alt + T),連上 SBC 的 IP address。預設密碼是 ubuntu。
[Remote PC]
$ ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}
- 指定 TURTLEBOT3_MODEL 的參數,需設定為 burger, waffle, 或 waffle_pi。
[TurtleBot3 SBC]
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_bringup robot.launch.py
2. 在 Remote PC 開新的 terminal, 啟動 SLAM 節點。Cartographer 是預設的 SLAM 方法。另外指定 TURTLEBOT3_MODEL 的參數,需設定為 burger, waffle, 或 waffle_pi。
[Remote PC]
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_cartographer cartographer.launch.py

補充資料:如何預先定義好 TURTLEBOT3_MODEL 參數。 #
如果 TURTLEBOT3_MODEL 參數,已經預先定義在你系統的 .bashrc 檔內,則 export TURTLEBOT3_MODEL=${TB3_MODEL} 指令可以省略。當新的 terminal 開啟時,.bashrc 檔會自動載入。
- 在 .bashrc 檔內,定義 TurtleBot3 Burger 為預設 model 範例
[Remote PC]
$ echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc
$ source ~/.bashrc
- 在 .bashrc 檔內,定義 TurtlBot3 waffle_pi 為預設 model 範例
[Remote PC]
$ echo 'export TURTLEBOT3_MODEL=waffle_pi' >> ~/.bashrc
$ source ~/.bashrc
C4.2. 執行遙控 Teleoperation Node #
一旦 SLAM node 成功執行,TB3 就可使用遙控 teleoperation,開始對未知區域繪製地圖。此時重要的是,應避免機器人做出劇烈的移動,比如直線速度變化太快,或旋轉太快。使用機器人繪製地圖時,機器人最好能掃描,地圖環境內的每個角落。它需要一些經驗來建立一個乾淨的地圖,所以我們需要多次練習 SLAM,以學習建圖技巧。
1. 在 Remote PC 開新 terminal 執行 teleoperation node。TURTLEBOT3_MODEL 參數需對應好 – 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
2. 開始探索及繪製地圖

C4.3. Tuning 微調指南 #
在 ROS2 中的 SLAM 方法,是使用 Cartographer ROS,它透過 Lua 檔案提供設定選項。
以下選項,定義在 turtlebot3_cartographer/config/turtlebot3_lds_2d.lua 檔案中。有關每個選項的更多詳細信息,請參閱 Cartographer ROS 官方文件。
C4.3.1. MAP_BUILDER.use_trajectory_builder_2d #
此選項設定 SLAM 的種類
C4.3.2. TRAJECTORY_BUILDER_2D.min_range #
此選項設定 LDS 光達的最小可用範圍。
C4.3.3. TRAJECTORY_BUILDER_2D.max_range #
此選項設定 LDS 光達的最大可用範圍。
C4.3.4. TRAJECTORY_BUILDER_2D.missing_data_ray_length #
在 2D SLAM 中,Cartographer 用 TRAJECTORY_BUILDER_2D.missing_data_ray_length 取代超過 max_range 最大可用範圍。
C4.3.5. TRAJECTORY_BUILDER_2D.use_imu_data #
如果你使用 2D SLAM,就可以即時處理範圍資料,而無需額外的資訊來源。因此你可以選擇,是否希望 Cartographer 使用 IMU 慣性測量單元的資料。
C4.3.6. TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching #
local SLAM (局部 SLAM):可以根據感測器的可靠性,切換 RealTimeCorrelativeScanMatcher。
C4.3.7. TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians #
local SLAM(局部 SLAM):為了避免在每個子圖上,插入太多掃描數據,如果運動不超過某個角度,則會丟棄掃描。
C4.3.8. POSE_GRAPH.optimize_every_n_nodes #
Global SLAM(全域 SLAM):將 POSE_GRAPH.optimize_every_n_nodes 設為 0,是一個方便的方法,可以停用全域 SLAM 並專注於局部 SLAM 的行為。
C4.3.9. POSE_GRAPH.constraint_builder.min_score #
Global SLAM(全域 SLAM):掃描匹配分數的閾值,低於此閾值則不考慮匹配。低分數表示,掃描結果和地圖看起來不相似。
C4.3.10. POSE_GRAPH.constraint_builder.global_localization_min_score #
Global SLAM(全域 SLAM):低於此閾值的全域定位,將不受信任。
C4.4. 儲存地圖 #
[Remote PC]
$ ros2 run nav2_map_server map_saver_cli -f ~/map
-f 選項,是用來指定資料夾位置,以及要儲存的檔名。以上的指令,是指 map.pgm 及 map.yaml 檔,會被儲存在 home 資料夾 ~/ 內(e.g., /home/${username}).
C4.5. 地圖 #
地圖是 ROS 社群中常用的二維 Occupancy Grid Map(OGM) 地圖。儲存的地圖大略如下圖所示,白色是機器人可以移動的空白區域,黑色是機器人不能移動的佔用區域,灰色則是未知區域。地圖可在 Chap.5 Navigation 導航中使用。

下圖顯示了使用 TurtleBot3 創建大型地圖的結果。花了大約一個小時才製作出一幅移動距離約為 350 公尺的地圖。
