owned this note
owned this note
Published
Linked with GitHub
**TurtleBot3(ROS2)-Dashing 中文線上手冊**
===
- 20231205 中譯發布,不會即時修正,內容如有差異不同,請以[**英文線上手冊**](https://emanual.robotis.com/docs/en/platform/turtlebot3/quick-start/) 的 Dashing 內容為主
O : 可支援
∆ : 需要確認
X : 不支援
| 特色 | Kinetic | Melodic | Noetic | Dashing | Foxy | Galactic | Humble |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 遙控 | O | O | O | O | O | O | O |
| SLAM | O | O | O | O | O | O | O |
| 導航 | O | O | O | O | O | O | O |
| 模擬 | O | O | O | O | O | O | O |
| 機器手臂 | O | O | O | O | O | ∆ | O |
| Home Service Challenge | O | O | O | X | X | X | X |
| 自動駕駛挑戰賽 | O | X | O | X | X | X | X |
| 機器學習 | O | O | X | O | X | X | X |
| 範例 | Kinetic | Melodic | Noetic | Dashing | Foxy | Galactic | Humble |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Interactive Markers | O | X | X | X | X | X | X |
| Obstacle Detection | O | X | X | O | X | X | X |
| Position Control | O | X | X | O | X | X | X |
| Point Operation | O | X | X | O | X | X | X |
| Patrol | O | X | X | O | X | X | X |
| Follower | O | X | X | X | X | X | X |
| Panorama | O | X | X | X | X | X | X |
| Auto Parking | O | X | X | O | X | X | X |
| Auto Parking(Vision) | O | X | X | X | X | X | X |
| Multi TurtleBot3 | O | X | X | X | X | X | X |
# **3. TB3 快速入門指南**
---
{%youtube 8w3xhG1GPdo %}
## 3.1 Remote PC(桌電/筆電) 設定
:::warning
警告: 以下介紹的內容是用來設定 Remote PC (也就是你的桌電或筆電),以便來遠端控制 TurtleBot3 用。千萬不要使用在 TurtleBot3 的 SBC 單板電腦上。
:::
:::info
備註: 操作的內容已在Ubuntu 18.04 及 ROS2 Dashing Diademata 版本上測試過。
:::
### 3.1.1. 在 Remote PC 下載及安裝 Ubuntu
首先要在 Remote PC(你的桌電或是筆電)上安裝 Ubuntu(一種 Linux 作業系統). 請先下載 Ubuntu 18.04 LTS Desktop 版及參考安裝步驟進行安裝.
- [Ubuntu 18.04 LTS Desktop image 64-bit 下載點](http://releases.ubuntu.com/18.04/)
- [Ubuntu 安裝步驟](https://ubuntu.com/tutorials/install-ubuntu-desktop#1-overview)
### 3.1.2. 在 Remote PC 安裝 ROS2
Ctrl+Alt+T 開啟 terminal 視窗,輸入以下指令
- 請先參考這個 [**script 檔**](https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros2_dashing.sh)
```
$ sudo apt-get update
$ sudo apt-get upgrade
$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros2_dashing.sh
$ chmod 755 ./install_ros2_dashing.sh
$ bash ./install_ros2_dashing.sh
```
- 如果安裝失敗,請參考[**官方 ROS2 Dashing 安裝指南**](https://index.ros.org/doc/ros2/Installation/Dashing/Linux-Install-Debians/)
### 3.1.3. 安裝相關 ROS2 Packages
1. 在 remote PC 上 Ctrl+Alt+T 開啟 terminal 視窗
2. 安裝 Colcon
```
$ sudo apt install python3-colcon-common-extensions
```
3. 安裝 Gazebo9
```
$ curl -sSL http://get.gazebosim.org | sh
```
4. 如果之前安裝了 Gazebo11 請移除它
```
$ sudo apt remove gazebo11 libgazebo11-dev
$ sudo apt install gazebo9 libgazebo9-dev
$ sudo apt install ros-dashing-gazebo-ros-pkgs
```
5. 安裝 Cartographer
```
$ sudo apt install ros-dashing-cartographer
$ sudo apt install ros-dashing-cartographer-ros
```
6. 安裝 Navigation2
```
$ sudo apt install ros-dashing-navigation2
$ sudo apt install ros-dashing-nav2-bringup
```
7. 安裝 vcstool
```
$ sudo apt install python3-vcstool
```
### 3.1.4. 安裝 TurtleBot3 Packages
TurtleBot3 可透過 Debian Packages 來安裝
```
$ source /opt/ros/dashing/setup.bash
$ sudo apt install ros-dashing-dynamixel-sdk
$ sudo apt install ros-dashing-turtlebot3-msgs
$ sudo apt install ros-dashing-turtlebot3
```
- 如果需要用原始碼來 build TurtleBot3 Packages,可參照下列指令,如有同名的套件請先移除。
```
$ sudo apt remove ros-dashing-turtlebot3-msgs
$ sudo apt remove ros-dashing-turtlebot3
$ mkdir -p ~/turtlebot3_ws/src
$ cd ~/turtlebot3_ws/src/
$ git clone -b dashing-devel https://github.com/ROBOTIS-GIT/DynamixelSDK.git
$ git clone -b dashing-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone -b dashing-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
$ colcon build --symlink-install
$ source ~/.bashrc
```
### 3.1.5. 環境設定
1. 在 PC 上設定 ROS 環境
```
$ echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
$ echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc
$ source ~/.bashrc
```
如果你是用 Debian packages 的 apt install 指令來安裝 TurtleBot3,則可以忽略以下的 warning 訊息
```
bash: /home/{$YOUR_ACCOUNT}/turtlebot3_ws/install/setup.bash: No such file or directory
```
## 3.2. SBC 單板電腦設定
:::info
- 此節 SBC 設定是用於樹莓派 3B+ 及 4,是官方的 TB3 SBC
- 安裝時需要供電及時間較久,不適合使用電池,建議使用TB3 內附的 SMPS 電源線接市電來供電。
- 需另備 HDMI 螢幕、鍵盤、滑鼠以完成設定
- 如要使用 webOS Robotics Platform,請參考 [**webOS Robotics Platform**](https://github.com/ros/meta-ros/wiki/OpenEmbedded-Build-Instructions) 指南。Packages 會在高效能的PC上,使用 OpenEmbedded cross-compiled 後生成 image 映像檔。
:::
### 3.2.1. 準備 microSD 卡及讀卡機
如果 PC 沒有 microSD 槽,請改用 microSD 讀卡機來燒錄映像檔。
![](https://i.imgur.com/k9QUeo1.png)
### 3.2.2. 下載 SBC OS image
ROS2 Dashing 需要 Ubuntu 18.04,請依不同硬體來下載
- 下載 [Raspberry Pi 4 ubuntu-18.04.4-preinstalled-server-arm64+raspi4.img.xz OS image](http://old-releases.ubuntu.com/releases/18.04.4/)
- 下載 [Raspberry Pi 3B+ ubuntu-18.04.3-preinstalled-server-arm64+raspi3.img.xz OS image](http://old-releases.ubuntu.com/releases/18.04.3/)
### 3.2.3. 解壓縮 image
將下載的 .img 檔解壓縮存到本地硬碟
### 3.2.4. 燒錄 image
可使用不同的映像檔燒錄工具,如 Raspberry Pi Imager 或 Linux Disks utility
#### 3.2.4.1. 使用 Raspberry Pi Imager
- 從樹莓派官網下載 [**Raspberry Pi Imager**](https://www.raspberrypi.org/software/)
- 可參考 [Raspberry Pi Imager 詳細文件](https://www.raspberrypi.org/blog/raspberry-pi-imager-imaging-utility/)
![](https://emanual.robotis.com/assets/images/platform/turtlebot3/setup/rpi_imager.gif)
步驟
1. 按 CHOOSE OS
2. 按 Use Custom 選擇儲存於硬碟的 .img 映像檔
3. 按 CHOOSE STORAGE 選擇 microSD
4. 按 WRITE 開始燒錄映像檔
#### 3.2.4.2. 使用 Disks Utility
Disks utility 工具程式已經內含在 Ubuntu Desktop 版內,搜尋 Disks 就可找到開啟此程式。
![](https://emanual.robotis.com/assets/images/platform/turtlebot3/setup/disks.gif)
步驟
1. 在左邊控制面板選擇 microSD
2. 選擇 Restore Disk Image 選項
3. 開啟存在硬碟內的 .img 映像檔
4. 按 Start Restoring... > Restore 鍵
### 3.2.5. Raspberry Pi 開機
1. 連接 HDMI 螢幕到樹莓派的 HDMI port
2. 連接鍵盤跟滑鼠到樹莓派的 USB port
3. 插入 microSD 卡
4. 連接電源(透過USB or OpenCR)讓樹莓派開機
5. 第一次登入 ID: ubuntu,密碼: ubuntu
登入後,系統會要求更改密碼
:::danger
HDMI 螢幕必須在開機前就接上樹莓派,要不然樹莓派的 HDMI port 會 disable 停用
:::
### 3.2.6. 設定樹莓派
1. 打開自動更新檔
```
$ sudo nano /etc/apt/apt.conf.d/20auto-upgrades
```
2. 編輯 disable 停用自動更新設定
```
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
```
Ctrl+S 儲存,Ctrl+X 結束編輯
3. 輸入指令設定 WiFi 網路
```
$ sudo nano /etc/netplan/50-cloud-init.yaml
```
4. 檔案開啟後,將下列內容添加到檔案的最後。然後將 WIFI_SSID 及 WIFI_PASSWORD 內容替換為你的 Wifi ID 及密碼,之後 Ctrl + S 儲存檔案,Ctrl + X 結束
![](https://i.imgur.com/v2qInWZ.png)
5. 套用全部設定後重開機
```
$ sudo netplan apply
$ reboot
```
6. 設定 systemd 避免無網路時會開機延遲,需要以下指令來 mask systemd 程序。
```
$ systemctl mask systemd-networkd-wait-online.service
```
7. Disable 停用 Suspend 及 Hilbernation
```
$ sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
```
8. 安裝及起動 SSH
```
$ sudo apt install ssh
$ sudo systemctl enable --now ssh
$ reboot
```
9. 樹莓派重開機後,如果要在 Remote PC 上使用 SSH 連上樹莓派工作,則在 Remote PC 的 terminal 輸入以下指令,預設密碼是 ubuntu
```
$ ssh ubuntu@{IP Address of Raspberry PI}
```
### 3.2.7. 增加 Swap Space
1. 下列指令增加 2GB swap space
```
$ sudo swapoff /swapfile
$ sudo fallocate -l 2G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo nano /etc/fstab
```
當輸入 swapoff /swapfile 指令出現下列錯誤訊息,可以忽略
```
swapoff: /swapfile: swapoff failed: No such file or directory
```
2. 開啟 fstab 檔,將以下內容附加在檔案最後
```
/swapfile swap swap defaults 0 0
```
3. 檢查 2GB swap space 是否設置正確
```
$ sudo free -h
total used free shared buff/cache available
Mem: 912M 97M 263M 4.4M 550M 795M
Swap: 2.0G 0B 2.0G
```
:::info
請參考 Ubuntu Blog 來了解更詳細資訊
- [Improving Security with Ubuntu](https://ubuntu.com/blog/steps-to-maximise-robotics-security-with-ubuntu)
- [Improving User Experience of TurtleBot3 Waffle Pi](https://ubuntu.com/blog/building-a-better-turtlebot3)
- [How to set up TurtleBot3 Waffle Pi in minutes with Snaps](https://ubuntu.com/blog/how-to-set-up-turtlebot3-in-minutes-with-snaps)
:::
### 3.2.8. 安裝 ROS2 Dashing Diademata
:::info
參考: [**官方 ROS2 Dashing Diademata 安裝指南**](https://index.ros.org/doc/ros2/Installation/Dashing/Linux-Install-Debians/)
:::
1. 在 SBC 開啟 terminal
2. setup locale
```
$ sudo apt update && sudo apt install locales
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8
```
3. setup sources
```
$ sudo apt update && sudo apt install curl gnupg2 lsb-release
$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
```
4. 安裝 ROS2 packages
```
$ sudo apt update
$ sudo apt install ros-dashing-ros-base
```
5. 安裝及 build ROS Packages
```
$ sudo apt install python3-argcomplete python3-colcon-common-extensions libboost-system-dev build-essential
$ sudo apt install ros-dashing-hls-lfcd-lds-driver
$ sudo apt install ros-dashing-turtlebot3-msgs
$ sudo apt install ros-dashing-dynamixel-sdk
$ mkdir -p ~/turtlebot3_ws/src && cd ~/turtlebot3_ws/src
$ git clone -b dashing-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
$ cd ~/turtlebot3_ws/src/turtlebot3
$ rm -r turtlebot3_cartographer turtlebot3_navigation2
$ cd ~/turtlebot3_ws/
$ echo 'source /opt/ros/dashing/setup.bash' >> ~/.bashrc
$ source ~/.bashrc
$ colcon build --symlink-install --parallel-workers 1
$ echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
$ source ~/.bashrc
```
6. 設定 OpenCR 板的 USB port
```
$ sudo cp `ros2 pkg prefix turtlebot3_bringup`/share/turtlebot3_bringup/script/99-turtlebot3-cdc.rules /etc/udev/rules.d/
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger
```
7. 設定 ROS Domain ID in ROS2 DDS communication
- 在相同網域時,ROS_Domain_ID 的設定在 Remote PC 及 TurtleBot3 端需要相同。參照以下指令來指定 ROS_Domain_ID 給 TB3 上的 SBC
- 預設 TurtleBot3 ID 是 30
- 建議將 Remote PC 跟 TurtleBot3 的 ROS_Domain_ID 都設為 30
```
$ echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc
$ source ~/.bashrc
```
:::warning
警示: 請勿在相同網域內使用重複的 ROS_Domain_ID,這會造成傳輸資訊的衝突。
:::
### 3.2.9. 新光達 LDS-02 的設定
| LDS-01 | LDS-02 |
|:------------------------------------:|:------------------------------------:|
| ![](https://i.imgur.com/HwtZjjx.png) | ![](https://i.imgur.com/BuuZp7A.png) |
2022 年版 TurtleBot3 標配的光達已經改為 LDS-02。請使用下列指令在 SBC(樹莓派) 上來設定 LDS-02 光達。
1. 安裝 LDS-02 driver 及更新 TB3 package
```
$ sudo apt update
$ sudo apt install libudev-dev
$ cd ~/turtlebot3_ws/src
$ git clone -b dashing-devel https://github.com/ROBOTIS-GIT/ld08_driver.git
$ cd ~/turtlebot3_ws && colcon build --symlink-install
```
2. Export LDS_MODEL to bashrc 檔。LDS model 可以是 LDS-01 或 LDS-02。
```
$ echo 'export LDS_MODEL=LDS-01' >> ~/.bashrc
$ source ~/.bashrc
```
## 3.3. OpenCR 控制板設定
1. 使用 microUSB 連接線連接樹莓派及 OpenCR
2. 樹莓派安裝所需套件來上傳 OpenCR 韌體
```
$ sudo dpkg --add-architecture armhf
$ sudo apt-get update
$ sudo apt-get install libc6:armhf
```
3. 依照 TB3 的款式,設定 OpenCR_MODEL 參數為 burger 或 waffle
```
$ export OPENCR_PORT=/dev/ttyACM0
$ export OPENCR_MODEL=burger
$ rm -rf ./opencr_update.tar.bz2
```
4. 下載韌體解壓縮
```
$ wget https://github.com/ROBOTIS-GIT/OpenCR-Binaries/raw/master/turtlebot3/ROS2/latest/opencr_update.tar.bz2
$ tar -xjf ./opencr_update.tar.bz2
```
5. 上傳韌體到 OpenCR
```
$ cd ~/opencr_update
$ ./update.sh $OPENCR_PORT $OPENCR_MODEL.opencr
```
6. Burger 如果成功上傳韌體,會出現下列資訊
![](https://i.imgur.com/wL37GsT.png)
7. 如果上傳失敗,可以嘗試在 recovery mode 下重新上傳韌體。OpenCR 的 recovery mode 啟動順序如下。在 recovery mode 時,OpenCR 的 STATUS led 燈會定時的閃爍。
- 按住 PUSH SW2 鍵
- 按一下 Reset 鍵然後鬆開
- 再鬆開 PUSH SW2 鍵
![](https://i.imgur.com/ZilkkEU.png)
**補充資料: 使用 Arduino IDE 來上傳韌體步驟**
:::info
OpenCR board manager 並不支援 ARM based SBC 的 Arduino IDE,如樹莓派 或 NVidia Jetson。
請在 PC 上用 Arduino IDE 來上傳韌體。
:::
1. 如 PC 的 OS 是 Linux,下列指令設定 OpenCR 的 USB port。如果其他 OS(OSX or Windows),可跳過此步驟。
```
$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/99-opencr-cdc.rules
$ sudo cp ./99-opencr-cdc.rules /etc/udev/rules.d/
$ sudo udevadm control --reload-rules
$ sudo udevadm trigger
$ sudo apt install libncurses5-dev:i386
```
2. 安裝 Arduino IDE
- [下載最新的 Arduino IDE](https://www.arduino.cc/en/software)
3. 安裝好後,執行 Arduino IDE
4. 按 Ctrl + , 來打開 Preferences menu
5. 在 Additional Boards Manager URLs 輸入下列位址
```
https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.json
```
![](https://i.imgur.com/zcRVecI.png)
6. 打開 TurtleBot3 韌體。因你的平台選擇對應的韌體。
- Burger : File > Examples > Turtlebot3 ROS2 > turtlebot3_burger
- Waffle/Waffle Pi : File > Examples > Turtlebot3 ROS2 > turtlebot3_waffle
7. 連接 OpenCR 板到 PC 上,從 Tools > Board 選單選擇 OpenCR > OpenCR Board
8. 從 Tools > Port 選單中選擇連接 OpenCR 的 USB port
9. upload 圖示或 Ctrl+U 來上傳韌體
![](https://i.imgur.com/S3zNgU6.png)
![](https://i.imgur.com/fxp7cNS.png)
10. 如果上傳失敗,可以嘗試在 recovery mode 下重新上傳韌體。OpenCR 的 recovery mode 啟動順序如下。在 recovery mode 時,OpenCR 的 STATUS led 燈會定時的閃爍。
- 按住 PUSH SW2 鍵
- 按一下 Reset 鍵然後鬆開
- 再鬆開 PUSH SW2 鍵
![](https://i.imgur.com/ZilkkEU.png)
### 3.3.1. OpenCR 測試
:::info
Note: 如果測試後,輪子並沒有照設定的移動,請參照 FAQ 14.3. “Setup DYNAMIXELs for TurtleBot3” 重新設定智能馬達。
:::
你可以使用 PUSH SW1 及 PUSH SW2 按鍵,來檢查 TB3 是否正確組裝。這個流程是測試左右兩個 Dynamixel 智能馬達及 OpenCR 控制板。
![](https://i.imgur.com/staqXpo.jpg)
1. 在組裝好 TB3 後,將電池連上 OpenCR,打開電源開關,應會看到 OpenCR 板上的 Power LED 燈亮起
2. 將 TB3 放在地板上。為安全起見,建議安全半徑為 1m。
3. 按住 PUSH SW1 鍵幾秒鐘,會讓 TB3 往前直行 30cm。
4. 按住 PUSH SW2 鍵幾秒鐘,會讓 TB3 原地旋轉 180 度。
## 3.4. 硬體組裝
![](https://i.imgur.com/CEvRMfd.png)
### 3.4.1. 組裝手冊
TB3 出貨時是盒裝,零配件是未組裝狀態。請下載相對應的 PDF 來組裝
- [**TB3 Burger 漢堡款組裝手冊下載**](http://www.robotis.com/service/download.php?no=748)
- [**TB3 Waffle 鬆餅款組裝手冊下載**](http://www.robotis.com/service/download.php?no=749)
- [**TB3 Waffle Pi 鬆餅 Pi 款組裝手冊下載**](http://www.robotis.com/service/download.php?no=750)
### 3.4.2. TB3 組裝影片
如果難以由 PDF 手冊進行組裝,請參考以下 Youtube 組裝影片。(PS: 採智科技可以提供 TB3 組裝服務,請你在訂購時先跟我們的業務確認。)
- TB3 Burger 組裝影片 1
{%youtube rvm-m2ogrLA %}
- TB3 Burger 組裝影片 2
{%youtube 5D9S_tcenL4 %}
- TB3 Waffle 組裝影片
{%youtube 1nTMyr4ybi0 %}
## 3.5. Bringup 開始啟用
### 3.5.1. 啟動 TB3
1. 在 PC 上 Ctrl + Alt + T 開新 terminal,連上樹莓派的 IP address。使用預設的密碼 ubuntu
```
$ ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}
```
2. 啟動基礎套件開始 TB3 應用。替換${TB3_MODEL}參數為使用的款式- burger,waffle,或 waffle_pi
```
$ export TURTLEBOT3_MODEL=${TB3_MODEL}
$ ros2 launch turtlebot3_bringup robot.launch.py
```
3. 如果使用的 TB3 是 burger,視窗會出現訊息
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_bringup robot.launch.py
[INFO] [launch]: All log files can be found below /home/ubuntu/.ros/log/2019-08-19-01-24-19-009803-ubuntu-15310
[INFO] [launch]: Default logging verbosity is set to INFO
urdf_file_name : turtlebot3_burger.urdf
[INFO] [robot_state_publisher-1]: process started with pid [15320]
[INFO] [hlds_laser_publisher-2]: process started with pid [15321]
[INFO] [turtlebot3_ros-3]: process started with pid [15322]
[robot_state_publisher-1] Initialize urdf model from file: /home/ubuntu/turtlebot_ws/install/turtlebot3_description/share/turtlebot3_description/urdf/turtlebot3_burger.urdf
[robot_state_publisher-1] Parsing robot urdf xml string.
[robot_state_publisher-1] Link base_link had 5 children
[robot_state_publisher-1] Link caster_back_link had 0 children
[robot_state_publisher-1] Link imu_link had 0 children
[robot_state_publisher-1] Link base_scan had 0 children
[robot_state_publisher-1] Link wheel_left_link had 0 children
[robot_state_publisher-1] Link wheel_right_link had 0 children
[robot_state_publisher-1] got segment base_footprint
[robot_state_publisher-1] got segment base_link
[robot_state_publisher-1] got segment base_scan
[robot_state_publisher-1] got segment caster_back_link
[robot_state_publisher-1] got segment imu_link
[robot_state_publisher-1] got segment wheel_left_link
[robot_state_publisher-1] got segment wheel_right_link
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Init TurtleBot3 Node Main
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Init DynamixelSDKWrapper
[turtlebot3_ros-3] [INFO] [DynamixelSDKWrapper]: Succeeded to open the port(/dev/ttyACM0)!
[turtlebot3_ros-3] [INFO] [DynamixelSDKWrapper]: Succeeded to change the baudrate!
[robot_state_publisher-1] Adding fixed segment from base_footprint to base_link
[robot_state_publisher-1] Adding fixed segment from base_link to caster_back_link
[robot_state_publisher-1] Adding fixed segment from base_link to imu_link
[robot_state_publisher-1] Adding fixed segment from base_link to base_scan
[robot_state_publisher-1] Adding moving segment from base_link to wheel_left_link
[robot_state_publisher-1] Adding moving segment from base_link to wheel_right_link
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Start Calibration of Gyro
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Calibration End
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Add Motors
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Add Wheels
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Add Sensors
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Succeeded to create battery state publisher
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Succeeded to create imu publisher
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Succeeded to create sensor state publisher
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Succeeded to create joint state publisher
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Add Devices
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Succeeded to create motor power server
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Succeeded to create reset server
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Succeeded to create sound server
[turtlebot3_ros-3] [INFO] [turtlebot3_node]: Run!
[turtlebot3_ros-3] [INFO] [diff_drive_controller]: Init Odometry
[turtlebot3_ros-3] [INFO] [diff_drive_controller]: Run!
```
4. 可用指令列出 Topics 及 services
- **Topic list**
```
$ ros2 topic list
/battery_state
/cmd_vel
/imu
/joint_states
/magnetic_field
/odom
/parameter_events
/robot_description
/rosout
/scan
/sensor_state
/tf
/tf_static
```
- **Service list**
```
$ ros2 service list
/diff_drive_controller/describe_parameters
/diff_drive_controller/get_parameter_types
/diff_drive_controller/get_parameters
/diff_drive_controller/list_parameters
/diff_drive_controller/set_parameters
/diff_drive_controller/set_parameters_atomically
/hlds_laser_publisher/describe_parameters
/hlds_laser_publisher/get_parameter_types
/hlds_laser_publisher/get_parameters
/hlds_laser_publisher/list_parameters
/hlds_laser_publisher/set_parameters
/hlds_laser_publisher/set_parameters_atomically
/launch_ros/describe_parameters
/launch_ros/get_parameter_types
/launch_ros/get_parameters
/launch_ros/list_parameters
/launch_ros/set_parameters
/launch_ros/set_parameters_atomically
/motor_power
/reset
/sound
/turtlebot3_node/describe_parameters
/turtlebot3_node/get_parameter_types
/turtlebot3_node/get_parameters
/turtlebot3_node/list_parameters
/turtlebot3_node/set_parameters
/turtlebot3_node/set_parameters_atomically
```
### 3.5.2. 在 RViz 載入 TurtleBot3
1. 需先啟動 TB3
2. 開新的 terminal 啟動 RViz
```
$ ros2 launch turtlebot3_bringup rviz2.launch.py
```
![](https://i.imgur.com/WY9Q3lb.png)
## 3.6. 基本操作
### 3.6.1. Teleoperation 遙控
:::warning
**警示**:在執行遙控前,請先從 SBC 啟動 TB3,且在桌上測試 TB3 時須注意以防掉落桌面。
:::
TurtleBot3 可用不同的設備來遙控。只要先確認 SBC 及 ROS 版本都先裝好了所需的 ROS packages。
{%youtube Z4s18hlazb4 %}
:::info
**備註**: 手冊中的影片內容可能隨時更新,恕不另行通知。
:::
#### 3.6.1.1. 鍵盤
1. 在 PC 上新開 terminal
2. 執行 teleoperation node。如 TURTLEBOT3_MODEL 參數未指定,請替換 ${TB3_MODEL} 為 burger 或 waffle 或 waffle_pi
```
$ export TURTLEBOT3_MODEL=${TB3_MODEL}
$ ros2 run turtlebot3_teleop teleop_keyboard
```
3. 如果所需節點都開啟成功,terminal 會顯示操作訊息
```
Control Your Turtlebot3
Moving around
w
a s d
x
w/x : increase/decrease linear velocity (Burger : ~ 0.22, Waffle and Waffle Pi : ~ 0.26)
a/d : increase/decrease angular velocity (Burger : ~ 2.84, Waffle and Waffle Pi : ~ 1.82)
space key, s : force stop
CTRL-C to quit
```
#### 3.6.1.2. RC-100 遙控器
ROBOTIS RC-100B 遙控器已經預設在 TB3 OpenCR 控制板的韌體內。此遙控器須配合 BT-410 藍芽模組一起使用。TB3 Waffle Pi 款已經內含 RC-100B 遙控器及 BT-410 藍芽模組。當使用 RC-100 時,不需要執行任何節點,因為 turtlebot_core node 節點已在韌體內產生了 /cmd_vel topic 直接連接到 OpenCR 控制板。
![](https://i.imgur.com/kr1quhv.png)
1. 連接 BT-410 到 OpenCR 的任一 [UART1 port](https://emanual.robotis.com/docs/en/platform/turtlebot3/appendix_opencr1_0/)
2. 使用 RC-100 遙控 TB3
- Up / Down: 直線加速或減速
- Left / Right: 角速度加速或減速
#### 3.6.1.3. PS3 搖桿
1. 將 PS3 搖桿, 透過藍芽或是 USB 線連到 remote PC(桌電或筆電)
2. 使用 pip 安裝 ds4drv packages
```
$ sudo pip install ds4drv
```
3. 啟動 joystick node
```
$ sudo ds4drv
$ ros2 run joy joy_node
```
4. 開新 terminal 啟動 teleoperation node
```
$ ros2 run teleop_twist_joy teleop_node
```
#### 3.6.1.4. XBOX 360 搖桿
1. 將 XBOX 360 搖桿, 透過無線連接器或是 USB 線連到 remote PC
2. 在 remote PC 開新 terminal
3. 啟動 joystick node
```
$ ros2 run joy joy_node
```
4. 開新 terminal 啟動 teleoperation node
```
$ ros2 run teleop_twist_joy teleop_node
```
### 3.6.2. Topic Monitor
:::info
要檢視TB3的 topics,可使用 ROS 提供的 [**rqt**](http://wiki.ros.org/rqt),它是 ROS GUI 開發的 Qt-based 框架。它是一個工具可以顯示 TB3 所有 topics 包含 topic name,type,bandwidth,Hz,value 等資訊
:::
1. 從 PC 下指令開啟 rqt。如果 topic monitor 視窗沒有出現,可以選擇 plugin -> Topics -> Topic Monitor.
```
$ rqt
```
![](https://i.imgur.com/ubGmUwy.png)
2. 當 topic monitor 載入,topic values 是沒有監控的。點擊每個 topic 前的 checkbox 方塊框打 V 來開始監控。
![](https://i.imgur.com/4ORGQGj.png)
3. 點擊 checkbox 前的 ▶ 三角箭號圖示,來看詳細的 topic 資訊
![](https://i.imgur.com/Xh91I9E.png)
- /battery_state 顯示電池狀態的有關資訊,如當下的電壓,尚有電池容量。
![](https://i.imgur.com/RVkQcfi.png)
- /odom 顯示 TB3 的測距訊息。Topic 有 encoder 數據的方向及位置資料。
![](https://i.imgur.com/dBCLyNh.png)
- /sensor_state 顯示 encoder 數值、電池、扭力等訊息
![](https://i.imgur.com/kx6KfNs.png)
- /scan 顯示所有 LDS 光達的數據訊息,如 angle_max and min, range_max and min, indicates, ranges 等
![](https://i.imgur.com/YCXp4Wy.png)
# **4. SLAM 地圖定位**
---
:::info
Note:
- 請在 Remote PC 上執行 SLAM
- 在執行任何操作前,請務必先啟動 TB3
:::
**SLAM**(Simultaneous Localization and Mapping)即時定位與地圖構建, 是一種通過估算在任一空間中的當前位置, 來繪製地圖的技術. SLAM 已是前代的 TurtleBot2 機器人就廣為所知的特色功能. 以下的影片展示 TurtleBot3, 如何以小巧且實惠的平台來精確的繪製地圖.
{%youtube pJNSxDodhDk %}
## 4.1. 執行 SLAM Node
1. 以下步驟先啟動 TB3,如已經啟動了可以跳過此步驟
- Ctrl + Alt + T 在 Remote PC 開新 terminal,連接樹莓派的 IP address,預設密碼是 ubuntu
```
$ ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}
$ export TURTLEBOT3_MODEL=${TB3_MODEL}
$ ros2 launch turtlebot3_bringup robot.launch.py
```
2. 在 Remote PC 開新 terminal,執行 SLAM node。Cartographer 是預設的 SLAM 方法。
```
$ export TURTLEBOT3_MODEL=${TB3_MODEL}
$ ros2 launch turtlebot3_cartographer cartographer.launch.py
```
![](https://i.imgur.com/6FLFX1A.png)
:::info
Tips: **如何儲存 TURTLEBOT3_MODEL 參數?**
如果 TURTLEBOT3_MODEL 參數已經預先定義在 .bashrc 檔內,則 $ export TURTLEBOT3_MODEL=${TB3_MODEL} 指令可以省略。當新的 terminal 開啟時,.bashrc 檔會自動載入
- 定義 TurtleBot3 Burger 為預設 model 範例
```
$ echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc
$ source ~/.bashrc
```
- 定義 TurtleBot3 Waffle Pi 為預設 model 範例
```
$ echo 'export TURTLEBOT3_MODEL=waffle_pi' >> ~/.bashrc
$ source ~/.bashrc
```
:::
## 4.2. 執行 Teleoperation Node
一旦 SLAM node 成功執行,TB3 就會使用 teleoperation 開始對未知區域繪製地圖。此時避免機器人做出劇烈的運動很重要,比如直線速度變化太快或旋轉太快。使用機器人製作地圖時,機器人應該要掃描需量測環境的每個角落。它需要一些經驗來建立一個乾淨的地圖,所以我們需要多次練習 SLAM 以學習建圖技巧。
1. 在 Remote PC 開新 terminal 執行 teleoperation node。TURTLEBOT3_MODEL 參數需對應好 - burger,waffle,waffle_pi
```
$ 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. 開始探索及繪製地圖
![](https://i.imgur.com/U5daA9T.png)
## 4.3. 微調指南
ROS2 的 SLAM 預設使用 Cartographer,透過 Lua 檔設定地圖選項。
以下列出的選項是在 turtlebot3_cartographer/config/turtlebot3_lds_2d.lua 檔內的設定,更詳細的資訊可參考 [官方 Cartographer ROS official documentation](https://google-cartographer-ros.readthedocs.io/en/latest/algo_walkthrough.html)。
### 4.3.1. MAP_BUILDER.use_trajectory_builder_2d
此選項設定 SLAM 的種類
### 4.3.2. TRAJECTORY_BUILDER_2D.min_range
此選項設定光達的最小可用距離
### 4.3.3. TRAJECTORY_BUILDER_2D.max_range
此選項設定光達的最大可用距離
### 4.3.4. TRAJECTORY_BUILDER_2D.missing_data_ray_length
在 2D 情形,Cartographer 會以此項取代超過最大距離的數據來建圖
### 4.3.5. TRAJECTORY_BUILDER_2D.use_imu_data
如使用 2D SLAM,距離資訊可以被即時處理,而不須額外的數據源。此時你可以選擇是否要 Cartographer 使用 IMU 來的數據。
### 4.3.6. TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching
Local SLAM: RealTimeCorrelativeScanMatcher 可以根據感測器的可靠性進行切換
### 4.3.7. TRAJECTORY_BUILDER_2D.motion_filter.max_angle_radians
Local SLAM: 為了避免在每個子圖上插入過多的掃描數據,如果運動時不超過某個角度,則丟棄一次掃描。
### 4.3.8. POSE_GRAPH.optimize_every_n_nodes
Global SLAM(全域 SLAM): 將 POSE_GRAPH.optimize_every_n_nodes 設置為 0 ,是停用 global SLAM 並專注於 local SLAM 行為的便捷方法。
### 4.3.9. POSE_GRAPH.constraint_builder.min_score
Global SLAM(全域 SLAM): 掃描匹配分數的臨界值,低於該臨界值不考慮匹配。低分數表示掃描和地圖看起來不相似。
### 4.3.10. POSE_GRAPH.constraint_builder.global_localization_min_score
Global SLAM(全域 SLAM): 低於此臨界值,則全域定位不可信任。
:::info
**備註**: Constraints 可以在 RViz 中可視化,用來調整 global SLAM 非常方便。還可以切換為 POSE_GRAPH.constraint_builder.log_matches 來取得由 constraints builder 所輸出直方圖格式的定期報告。
:::
## 4.4. 儲存地圖
地圖會根據機器人移動時的 odometry 測距數據,tf 資訊,及感測器掃描的資訊來建圖。當 TB3 移動時,地圖數據會呈現在 RViz 視窗。在建好所需區域的完整地圖後,將地圖資料儲存在硬碟以備後續使用。
1. 啟用在 nav2_map_server package 中的 map_saver node 來產生地圖檔。地圖檔會儲存在 map_saver node 所在的資料夾。除非另外命名,map 是預設的地圖檔名,會產生 map.pgm 及 map.yaml 兩個檔。
```
$ ros2 run nav2_map_server map_saver -f ~/map
```
: -f 選項是用來指定資料夾位置以及要儲存的檔名。以上的指令是指 map.pgm 及 map.yaml 檔,會被儲存在 home 資料夾 ~/ (/home/${username}).
## 4.5. 地圖
地圖是 ROS 社群中常用的二維 **Occupancy Grid Map(OGM)** 地圖。儲存的地圖大略如下圖所示,**白色**是機器人可以移動的空白區域,**黑色**是機器人不能移動的佔用區域,**灰色**則是未知區域。地圖可在 Navigation 導航中使用。
![](https://i.imgur.com/NKeh7u8.png)
下圖顯示了使用 TurtleBot3 創建大型地圖的結果。花了大約一個小時才製作出一幅移動距離約為 350 公尺的地圖。
![](https://i.imgur.com/RfsuCzp.png)
# **5. Navigation 導航**
---
:::warning
**警示**:此節 TB3 會移動及旋轉,請將機器人放置在安全的地面
:::
:::info
**備註**:
- 請在 Remote PC 執行 Navigation。
- 在執行任何操作前,請先 Bringup 啟動 TB3。
- 導航需要使用 SLAM 產生的地圖。請確認有地圖數據。
:::
**Navigation 導航**是將機器人從一個位置移動到給定環境中的指定目的地。為此,地圖必需要包含給定環境中的家具,物體和牆壁的幾何信息。如前面的 SLAM 章節所述,地圖是由感測器得到的距離訊息,和機器人本身的方位訊息來創建。
導航讓機器人能夠通過使用圖資、機器人編碼器、IMU 感測器、和距離感測器等,從當前的方位,移動到地圖上指定的目標方位。執行此任務的過程如下節所述。
## 5.1. 執行 Navigation Nodes
1. 以下步驟需先啟動 TB3,如已經啟動了可以跳過此步驟
- Ctrl + Alt + T 在 Remote PC 開新 terminal,連接樹莓派的 IP address,預設密碼是 ubuntu
```
$ ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}
$ export TURTLEBOT3_MODEL=${TB3_MODEL}
$ ros2 launch turtlebot3_bringup robot.launch.py
```
2. 在 Remote PC 開新 terminal,執行 Navigation node。ROS2 使用 Navigation2 方法。也要注意對應的 TURTLEBOT3_MODEL 參數。
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_navigation2 navigation2.launch.py map:=$HOME/map.yaml
```
:::info
Tips: **如何儲存 TURTLEBOT3_MODEL 參數?**
如果 TURTLEBOT3_MODEL 參數已經預先定義在 .bashrc 檔內,則 $ export TURTLEBOT3_MODEL=${TB3_MODEL} 指令可以省略。當新的 terminal 開啟時,.bashrc 檔會自動載入
- 定義 TurtleBot3 Burger 為預設 model 範例
```
$ echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc
$ source ~/.bashrc
```
- 定義 TurtleBot3 Waffle Pi 為預設 model 範例
```
$ echo 'export TURTLEBOT3_MODEL=waffle_pi' >> ~/.bashrc
$ source ~/.bashrc
```
:::
## 5.2. 估計 Initial Pose 初始方位
**Initial Pose Estimation**必須在跑 Navigation 之前就執行,因為這個程序會初始化 AMCL 參數,這在進行 Navigation 時很重要。
TurtleBot3 必須正確定位在地圖上,LDS 感測器數據與顯示的地圖要完全重疊。
1. 點擊 RViz2 選單的 2D Pose Estimate 鍵
2. 在地圖上點擊真正機器人的所在位置,拉出大的綠色箭號指向機器人正面的方向。
3. 重複步驟 1 跟 2,直到 LDS 感測器的數據跟儲存地圖正確的重疊。
![](https://i.imgur.com/FT0c7LM.png)
4. 啟動 keyboard teleoperation node 來準確定位在地圖上的機器人位置
```
$ ros2 run turtlebot3_teleop teleop_keyboard
```
5. 來回移動機器人一點以收集周圍環境信息,並縮小 TurtleBot3 在地圖上的估計位置,地圖上是以微小的綠色箭頭顯示。
![](https://i.imgur.com/X3Dq64y.png)
![](https://i.imgur.com/H9R3zpy.png)
6. 在 teleop node terminal 上按 Ctrl + C 來結束 keyboard teleoperation node,這可以防止在導航期間從多個節點發布不同的 cmd_vel 值。
## 5.3. Set Navigation Goal 設定導航目標
1. 在 RViz2 選單點擊 Navigation2 Goal 鍵
2. 在地圖上點擊來設定機器人的目的地,並拉動綠色箭號,當作機器人抵達目的地後要面對的方向
- 綠色箭號是指定機器人目的地的一個標記
- 箭頭的根部是機器人目的地的 x 和 y 座標位置,箭頭指向的方位是機器人的 theta (θ) 角方向。
- 當 x, y, θ 都決定後,TB3 就會開始往目的地移動。
![](https://i.imgur.com/21dzMya.png)
{%youtube VtyqUuuZAFA %}
:::info
有關 **Navigation2**的詳細資訊
- 機器人會依據 global path planner 產生到達 Navigation2 Goal 目的地的路徑,並依路徑移動。如果路徑上碰到障礙物,Navigation2 會使用 local path planner 來避開障礙物。
- 如果不能產生到達 Navigation2 Goal 目的地的路徑時,則會造成 Navigation2 Goal 設定失敗。如果在機器人到達目的地前,要停止機器人移動,可以將 TB3 當前位置設為 Navigation2 Goal 即可。
- [官方 ROS2 Navigation2 Wiki](https://navigation.ros.org/)
:::
## 5.4. 微調指南
Navigation2 stack 有許多參數可用來調整不同機器人的效能。雖然跟 ROS1 Navigation 相似,但可參考以下來了解更詳細資訊
- [Configuration Guide of Navigation2](https://navigation.ros.org/configuration/index.html)
- [ROS Navigation Tuning Guide by Kaiyu Zheng](http://kaiyuzheng.me/documents/navguide.pdf)
### 5.4.1. Costmap 參數
#### 5.4.1.1. inflation_layer.inflation_radius
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 檔內
- 此參數會讓障礙物長出一個膨脹區域(inflation area),所規劃的路徑不會穿過膨脹區域。將其值設置為比機器人半徑大是比較保險的。要了解更多訊息,請參閱[costmap_2d wiki 網頁](http://wiki.ros.org/costmap_2d#Inflation)。
![](https://i.imgur.com/R7BPyR0.png)
#### 5.4.1.2. inflation_layer.cost_scaling_factor
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 檔內
- 這是個反比因子,此因子會乘以 costmap value。如這個參數值增加,costmap 值就會降低。
![](https://i.imgur.com/CpHcjRA.png)
最好的路徑是讓機器人穿過障礙物之間的中心。 將此因子設置得較小以遠離障礙物。
### 5.4.2. dwb_controller
#### 5.4.2.1. max_vel_x
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 此因子被設定為平移速度的最大值。
#### 5.4.2.2. min_vel_x
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 此因子被設定為平移速度的最小值。如設為負值,則機器人往後移動
#### 5.4.2.3. max_vel_y
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 此因子被設定為最大 y 速度,單位 m/s。
#### 5.4.2.4. min_vel_y
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 此因子被設定為最小 y 速度,單位 m/s。
#### 5.4.2.5. max_vel_theta
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 最大旋轉速度的實際值。機器人不能比此值更快。
#### 5.4.2.6. min_vel_theta
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 最小旋轉速度的實際值。機器人不能比此值更慢。
#### 5.4.2.7. max_speed_xy
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人最大平移速度的絕對值,單位為 m/s
#### 5.4.2.8. min_speed_xy
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人最小平移速度的絕對值,單位為 m/s
#### 5.4.2.9. acc_lim_x
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人 x 方向加速度的限制,單位為 m/s^2
#### 5.4.2.10. acc_lim_y
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人 y 方向加速度的限制,單位為 m/s^2
#### 5.4.2.11. acc_lim_theta
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人旋轉加速度的限制,單位為 rad/s^2
#### 5.4.2.12. decel_lim_x
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人 x 方向減速的限制,單位為 m/s^2
#### 5.4.2.13. decel_lim_y
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人 y 方向減速的限制,單位為 m/s^2
#### 5.4.2.14. decel_lim_theta
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人 theta 方向減速的限制,單位為 rad/s^2
#### 5.4.2.15. xy_goal_tolerance
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人到達目標方位時所允許的 x,y 距離。
#### 5.4.2.16. yaw_goal_tolerance
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 機器人到達目標方位時所允許的 yaw 偏航角度。
#### 5.4.2.17. transform_tolerance
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 所允許 tf 訊息的延遲
#### 5.4.2.18 sim_time
- 定義在 turtlebot3_navigation2/param/${TB3_MODEL}.yaml 內
- 此因子是以秒為單位設定前向模擬(forward simulation)。值設太低,機器人會沒有足夠時間來通過狹窄地區。值設太高則限制了動態轉動。你可以在下圖中看到所模擬出路徑黃線長度的偏差。
![](https://i.imgur.com/TqbKBEi.png)
# **6. Simulation 模擬**
---
:::info
Note:
- 請在 Remote PC 跑 Simulation
- 第一次跑 Simulation 時會花比較長的時間來設定環境
:::
:::success
TurtleBot3 支持模擬開發環境,可以在模擬中使用虛擬機器人進行編程開發。有兩種開發環境可以做到這一點,一種是使用**帶有 3D 可視化工具 RViz 的假節點 fake node**;另一種是使用 **3D 機器人模擬器 Gazebo**。
- **假節點 fake node**適合用來測試機器人模型和移動,但它不支援感測器。
- 如果需要執行 SLAM 或 Navigation,**Gazebo**會是一個可行的解決方案,因為它支持 IMU、LDS 和攝影機等感測器。
在本教程中,將主要介紹在 ROS 開發人員中使用最廣泛的 Gazebo 模擬器。
- [**Gazebo 教學**](http://gazebosim.org/tutorials)
:::
## 6.1. Gazebo Simulation
{%youtube UzOoJ6a_mOg %}
:::info
**備註**: 手冊中的影片內容可能隨時更新,恕不另行通知。
:::
Gazebo Simulation 使用 ROS Gazebo package,因此必須事先安裝支援 ROS2 Dashing 的 Gazebo 版本。
### 6.1.1. 安裝 Simulation Package
**TurtleBot3 Simulation Package** 需要 turtlebot3 及 turtlebot3_msgs packages 為先決條件。沒有這兩個 packages,無法啟動 Simulation。
如果還沒有安裝所需 packages,可參照 Remote PC 設定章節來安裝。
```
$ cd ~/turtlebot3_ws/src/
$ git clone -b dashing-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/turtlebot3_ws && colcon build --symlink-install
```
**GAZEBO_MODEL_PATH** 參數必須附加在 .bashrc 檔內。請輸入以下指令來完成。
```
$ echo 'export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/turtlebot3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models' >> ~/.bashrc
$ source ~/.bashrc
```
### 6.1.2. 啟動 Simulation World 世界地圖
TB3 有三種模擬的世界地圖可選擇。啟動 Gazebo 後可以任選其一。
:::info
啟動一個新的世界地圖前,需確認完全關閉前一個地圖
:::
1. Empty World 空白世界地圖
![](https://i.imgur.com/iAaFFfd.png)
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo empty_world.launch.py
```
2. TurtleBot3 World 世界地圖
![](https://i.imgur.com/LNTEQ0d.png)
```
$ export TURTLEBOT3_MODEL=waffle
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
```
3. TurtleBot3 House 房間地圖
![](https://i.imgur.com/bK9B8a9.png)
```
$ export TURTLEBOT3_MODEL=waffle_pi
$ ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
```
:::info
**備註**: 如果首次執行 TurtleBot3 House,則下載地圖文件需要幾分鐘或更長時間,具體取決於網路速度
:::
### 6.1.3. 操作 TB3
要使用鍵盤來控制 TB3,需在新的 terminal 啟動 teleoperation node
```
$ ros2 run turtlebot3_teleop teleop_keyboard
```
:::success
**如何執行自動避障**
要先準備一個簡單的 collision avoidance node 來讓機器人與障礙物保持一定距離,並轉向避免碰撞
要在 TurtleBot3 World 世界地圖內自動駕駛 TB3,請依照以下說明操作
1. Ctrl + C 結束 turtlebot3_teleop_key node,關閉 teleop node
2. 在 terminal 輸入指令
```
$ ros2 run turtlebot3_gazebo turtlebot3_drive
```
:::
:::success
**如何可視化 Simulation data(RViz2)?**
當 simulation 進行時,RViz2 可以看到已公布的 topics。在新的 terminal 啟動 RViz2
```
$ ros2 launch turtlebot3_bringup rviz2.launch.py
```
![](https://i.imgur.com/MYLjIjb.png)
:::
## 6.2. SLAM 模擬
我們可以在 Gazebo 模擬器中來用虛擬機器人來進行虛擬 SLAM,而無須使用實體的機器人來實作。在 Gazebo 中,你可以選擇上面提到的各種地圖環境和機器人模型來進行模擬,SLAM 模擬跟用 TB3 實作 SLAM 會很相似。
下列操作會需要之前章節為先決條件,請回看 Simulation 章節內容。
### 6.2.1. 開啟 Simulation World 世界地圖
Gazebo 有三個地圖可開啟,但因要 SLAM 來建地圖,建議使用 **TurtleBot3 World** 或 **TurtleBot3 House** 地圖。
使用下列指令來開啟地圖,此範例載入 TurtleBot3 World 世界地圖。也需注意 TURTLEBOT3_MODEL 所對應的參數 burger, waffle, waffle_pi
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
```
:::success
**如何載入 TurtleBot3 House 地圖**
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
```
:::
### 6.2.2. 執行 SLAM Node
在 Remote PC 開新 terminal(Ctrl + Alt + T) 並跑 SLAM node。預設是使用 Cartographer SLAM 方法。
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
```
### 6.2.3. 執行 Teleoperation Node
在 Remote PC 開新 terminal(Ctrl + Alt + T) 並跑 teleoperation node。
```
$ 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
```
### 6.2.4. 儲存地圖
當地圖成功產生後,在 Remote PC 開新 terminal(Ctrl + Alt + T) 並儲存地圖
![](https://i.imgur.com/JZK7zZ5.png)
```
$ ros2 run nav2_map_server map_saver -f ~/map
```
![](https://i.imgur.com/Q5ozbRR.png)
所儲存的 map.pgm 檔
## 6.3. Navigation Simulation 模擬導航
就如在 Gazebo 模擬器跑虛擬 SLAM,你也可以進行虛擬導航 Navigation,而無須使用實體的機器人來實作。當然在跑虛擬 Navigation2 前,必須準備好合適的地圖環境。虛擬導航跟實作會很相似。
### 6.3.1. 開啟模擬的世界地圖
:::info
Ctrl + C 來結束之前章節開啟的全部應用
:::
在之前 SLAM 章節使用 TurtleBot3 World 地圖。相同的 Gazebo 環境也用在模擬 Navigation。一樣要注意所使用的 TURTLEBOT3_MODEL 參數- burger, waffle, waffle_pi。
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
```
:::success
**如何載入 TurtleBot3 House 地圖**
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py
```
:::
### 6.3.2. 執行 Navigation Node
在 Remote PC 開新 terminal(Ctrl + Alt + T) 並跑 Navigation2 node。
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map.yaml
```
### 6.3.3. 估計 Initial Pose 初始方位
**Initial Pose Estimation** 必須在跑 Navigation 之前就執行,因為這個程序會初始化 AMCL 參數,這在進行 Navigation 時很重要。
TurtleBot3 必須正確定位在地圖上,LDS 感測器數據與顯示的地圖要完全重疊。
1. 點擊 RViz2 選單的 2D Pose Estimate 鍵
2. 在地圖上點擊真正機器人的所在位置,拉出大的綠色箭號指向機器人正面的方向。
3. 重複步驟 1 跟 2,直到 LDS 感測器的數據跟儲存地圖正確的重疊。
![](https://i.imgur.com/FT0c7LM.png)
4. 啟動 keyboard teleoperation node 來準確定位在地圖上的機器人位置
```
$ ros2 run turtlebot3_teleop teleop_keyboard
```
5. 來回移動機器人一點以收集周圍環境信息,並縮小 TurtleBot3 在地圖上的估計位置,地圖上是以微小的綠色箭頭顯示。
![](https://i.imgur.com/X3Dq64y.png)
![](https://i.imgur.com/H9R3zpy.png)
6. 在 teleop node terminal 上按 Ctrl + C 來結束 keyboard teleoperation node,這可以防止在導航期間從多個節點發布不同的 cmd_vel 值。
### 6.3.4. Set Navigation Goal 設定導航目標
1. 在 RViz2 選單點擊 Navigation2 Goal 鍵
2. 在地圖上點擊來設定機器人的目的地,並拉動綠色箭號,當作機器人抵達目的地後要面對的方向
- 綠色箭號是指定機器人目的地的一個標記
- 箭頭的根部是機器人目的地的 x 和 y 座標位置,箭頭指向的方位是機器人的 theta (θ) 角方向。
- 當 x, y, θ 都決定後,TB3 就會開始往目的地移動。
![](https://i.imgur.com/21dzMya.png)
{%youtube VtyqUuuZAFA %}
:::info
有關 **Navigation2** 的詳細資訊
- 機器人會依據 global path planner 產生到達 Navigation2 Goal 目的地的路徑,並依路徑移動。如果路徑上碰到障礙物,Navigation2 會使用 local path planner 來避開障礙物。
- 如果不能產生到達 Navigation2 Goal 目的地的路徑時,則會造成 Navigation2 Goal 設定失敗。如果在機器人到達目的地前,要停止機器人移動,可以將 TB3 當前位置設為 Navigation2 Goal 即可。
- [官方 ROS2 Navigation2 Wiki](https://navigation.ros.org/)
:::
## 6.4. Fake Node Simulation
{%youtube iHXZSLBJHMg %}
:::info
**備註**: 手冊中的影片內容可能隨時更新,恕不另行通知。
:::
turtlebot3_fake 是一個非常簡單的模擬節點,可以在沒有實際機器人的情況下來模擬 TB3 機器人運行。要啟動虛擬 TB3,請執行 turtlebot3_fake_node 中的 turtlebot3_fake_node.launch.py 檔。依照下列說明,使用 Fake Node 將 TB3 帶入虛擬世界地圖。
1. 執行 turtlebot3_fake_node.launch.py 檔。須注意對應的 TURTLEBOT3_MODEL 參數- burger, waffle, waffle_pi
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 launch turtlebot3_fake_node turtlebot3_fake_node.launch.py
```
2. 使用 Teleoperation 控制虛擬 TB3
```
$ export TURTLEBOT3_MODEL=burger
$ ros2 run turtlebot3_teleop teleop_keyboard
```
## 6.5. 單獨的 Gazebo Simulation
:::info
此功能只支援 Kinetic 版,Dashing 沒有
:::
# **7. Manipulation 機器手臂**
---
:::info
**備註**:
- 操作的內容已在 Ubuntu 18.04 及 ROS Dashing Diademata 版本上測試過。
- 如要了解更多 OpenManipulator-X 機器手臂資訊,請參考 [OpenManipulator-X 線上手冊(英)](https://emanual.robotis.com/docs/en/platform/openmanipulator/)
:::
:::info
**備註**: 此手冊中的內容可能隨時更新,有些影片也會跟 emanual 上的不同,恕不另行通知。
:::
:::success
**提示**:Ubuntu 的 Terminal (終端機)可以在螢幕左上方的 Search 圖示找到. 快捷鍵可以使用 Ctrl-Alt-T.
:::
## 7.1. TurtleBot3 跟 OpenManipulator-X 機器手臂
![](https://i.imgur.com/zVrFxkE.png)
ROBOTIS 的 OpenManipulator-X 小型機器手臂,是支援 ROS 的機器手臂之一。其優點是使用 Dynamixel 智能馬達跟 3D 列印出來的零配件,可製造出成本低的機器手臂。
OpenManipulator-X 小型機器手臂的優點,是可與 TB3 Waffle 跟 TB3 Waffle Pi 款相容。通過這種相容性,可以彌補手臂自由度的不足,並可通過 TB3 已加載的 SLAM 和 Navigation 導航的功能,讓 TB3 變成更具完整性的服務機器人。TB3 及 OpenManipulator-X 的結合可以作為 mobile manipulator 移動式機器手臂使用,執行下列影片中的操作。
{%youtube Qhvk5cnX2hM %}
{%youtube P82pZsqpBg0 %}
{%youtube DLOq8yNcCoE %}
:::info
**備註**: 手冊中的影片內容可能隨時更新,恕不另行通知。
:::
## 7.2. 手臂軟體設定
:::info
**備註**:在安裝 open_manipulator_with_tb3 套件之前,請確認先前已經在你的 RemotePC(桌電或筆電)和 TB3 SBC(Raspberry Pi) 設定時,都已先安裝好 turtlebot3 和 open_manipulator 套件。
:::
- 安裝 TB3 OpenManipulator 相關套件步驟
**[TurtleBot3]**
1. 在 TB3 上開新 terminal
2. 下列指令安裝相關套件
```
$ cd ~/turtlebot3_ws/src/
$ git clone -b ros2 https://github.com/ROBOTIS-GIT/open_manipulator_with_tb3.git
$ cd ~/turtlebot3_ws && colcon build --symlink-install
```
**[Remote PC]**
1. 在 Remote PC 開新的 terminal
2. 下列指令安裝相關套件
```
$ cd ~/robotis_ws/src/
$ git clone -b ros2 https://github.com/ROBOTIS-GIT/open_manipulator_with_tb3.git
$ cd ~/robotis_ws && colcon build --symlink-install
```
- 如果 colcon build 指令成功沒有錯誤,就到下一步
3. 在 RViz 中載入 TB3 Waffle 或 TB3 Waffle Pi 加裝 OpenManipulator 的檔案
- 在 Remote PC 開新的 terminal
- 執行 RViz
```
$ ros2 launch turtlebot3_manipulation_description turtlebot3_manipulation_rviz.launch.py
```
![](https://i.imgur.com/dAvSRaq.png)
## 7.3. 手臂硬體組裝
- [CAD 檔](http://www.robotis.com/service/download.php?no=767) for (TurtleBot3 Waffle Pi + OpenMANIPULATOR)
![](https://i.imgur.com/uuJYUEI.png)
- 首先拆下 LDS 光達並將其移到 TurtleBot3 的前半部(紅圈代表螺絲的位置)。
- 接著在 TurtleBot3 上固定 OpenManipulator-X 手臂(黃色圓圈表示螺絲的位置)。
![](https://i.imgur.com/Lmu2YDc.png)
![](https://i.imgur.com/Uan7SJU.png)
TurtleBot3 Waffle Pi + OpenMANIPULATOR-X 組合示意圖
## 7.4. OpenCR 設定
:::info
此功能適用 Foxy 版
:::
## 7.5. 啟動
:::info
在使用本節的指令前,請先閱讀 Bringup 章節
:::
**[TurtleBot3]**
1. 在 TB3 上開新 terminal
2. 下列指令執行 turtlebot3_manipulation_controller
```
$ ros2 launch turtlebot3_manipulation_controller turtlebot3_manipulation_controller.launch.py
```
## 7.6. Simulation
:::info
此功能只適用 Kinetic 版
:::
## 7.7. Operate the Actual OpenManipulator
:::info
此功能只適用 Kinetic 版
:::
## 7.8. SLAM
:::info
在使用本節的指令前,請先閱讀 SLAM地圖定位 章節
:::
### 7.8.1. 執行 SLAM Nodes
**[Remote PC]**
1. 在 Remote PC 開新的 terminal
2. 以下指令開啟 slam node
```
$ ros2 launch turtlebot3_cartographer cartographer.launch.py
```
### 7.8.2. 執行 Teleoperation Nodes
**[Remote PC]**
1. 在 Remote PC 開新的 terminal
2. 以下指令開啟 teleop node
```
$ ros2 run turtlebot3_manipulation_teleop turtlebot3_manipulation_teleop_keyboard
```
3. 使用虛擬控制器來操作 TB3 上的 OpenManipulator-X 手臂。只要輸入 keys,就可不用按 Enter。
```
---------------------------
Control TurtleBot3 + OpenManipulatorX
---------------------------
8 : increase linear velocity
2 : decrease linear velocity
4 : increase angular velocity
6 : decrease angular velocity
5 : base stop
w : increase x axis in task space
s : decrease x axis in task space
a : increase y axis in task space
d : decrease y axis in task space
z : increase z axis in task space
x : decrease z axis in task space
y : increase joint 1 angle
h : decrease joint 1 angle
u : increase joint 2 angle
j : decrease joint 2 angle
i : increase joint 3 angle
k : decrease joint 3 angle
o : increase joint 4 angle
l : decrease joint 4 angle
g : gripper open
f : gripper close
0 : init pose
1 : home pose
q to quit
---------------------------
Present Linear Velocity: 0.000, Angular Velocity: 0.000
Present Joint Angle J1: 0.000 J2: 0.000 J3: 0.000 J4: 0.000
Present Kinematics Position X: 0.000 Y: 0.000 Z: 0.000
---------------------------
```
### 7.8.3. 儲存地圖
**[Remote PC]**
1. 在 Remote PC 開新的 terminal
2. 以下指令開啟 map_saver node
```
$ ros2 run nav2_map_server map_saver -f ~/map
```
![](https://i.imgur.com/11B4KzY.png)
## 7.9. Navigation
:::info
在使用本節的指令前,請先閱讀章節 Navigation 導航
:::
**[Remote PC]**
1. 在 Remote PC 開新的 terminal
2. 以下指令開啟 navigation
```
$ ros2 launch turtlebot3_navigation2 navigation2.launch.py map:=$HOME/map.yaml
```
![](https://i.imgur.com/zEthPMy.png)
## 7.10. TurtleBot3 Home Service 挑戰賽
:::info
此功能只適用 Kinetic 及 Noetic 版
:::
# **8. Autonomous Driving 自動駕駛**
---
![](https://i.imgur.com/3CpDKxK.jpg)
:::info
TB3 AutoRace 只支援 ROS1 Kinetic 及 Noetic 版
:::
# **9. Machine Learning 機器學習**
---
Machine Learning 機器學習,通過經驗來學習, 是一種數據分析技術,可教導電腦識別人類和動物的自然特徵 。有三種類型的機器學習演算法:
- supervised learning(監督學習)
- unsupervised learning(無監督學習)
- reinforcement learning(強化學習)
此應用程式是使用 DQN(Deep Q-Learning)的強化學習演算法。Reinforcement learning(強化學習)關注於 software agents 軟體代理應該如何在環境中採取行動,以便能最大化累積獎勵的概念。
{%youtube WADmP0wzLxs %}
:::info
**備註**: 手冊中的影片內容可能隨時更新,恕不另行通知。
:::
這影片展示了在 Gazebo 模擬器中 TurtleBot3 使用 reinforcement learning(強化學習)。這種強化學習演算法,是在 LDS 光達上套用了 DQN(Deep Q-Learning)演算法。
我們準備了以下強化學習的教程。
## 9.1. 機器學習軟體設定
在 PC 上安裝 Tensorflow 及 Keras (需 Ubuntu 18.04 及 ROS2 Dashing)
### 9.1.1. 安裝 ROS 相關 packages
1. 在 PC 開新的 terminal
2. 安裝 Python 3.6 版的 ROS 相關 packages
```
$ pip3 install -U rosinstall msgpack empy defusedxml netifaces
```
### 9.1.2. Tensorflow 安裝
1. 在 PC 開新的 terminal
2. 安裝 Tensorflow
```
$ pip3 install -U tensorflow
```
- 此範例安裝 python3.6(CPU only)。如要安裝不同 python 版本及 GPU,可參考 [Tensorflow 安裝頁](https://www.tensorflow.org/install/)。
```
$ pip3 install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.8.0-cp27-none-linux_x86_64.whl
```
### 9.1.3. Keras 安裝
Keras 是一個高級神經網絡 API,用 Python 編寫,能夠在 TensorFlow 上運行
1. 在 PC 開新的 terminal
2. 安裝 Keras
```
$ pip3 install keras==2.1.5
```
### 9.1.4. Machine Learning packages 安裝
:::warning
務必要先安裝好 turtlebot3,turtlebot3_msgs 及 turtlebot3_simulations 三個套件後,才能安裝 machine learning 套件
:::
1. 在 PC 開新的 terminal
2. 安裝 turtlebot3_machine_learning packages
```
$ cd ~/robotis_ws/src/
$ git clone -b ros2 https://github.com/ROBOTIS-GIT/turtlebot3_machine_learning.git
$ cd ~/robotis_ws && colcon build --symlink-install
```
## 9.2. 設定參數
DQN Agent 的目標是讓 TurtleBot3 能避開障礙物到達目的地。當 TurtleBot3 越接近目的地時,它會獲得一個正的獎勵(positive reward),當它離目的地越來越遠時,它會獲得負的獎勵(negative reward)。當 TurtleBot3 碰撞到障礙物或經過一段時間後,這段事件(episode)就會結束了。在這一事件期間,當 TurtleBot3 在達到目的地時,會獲得大的正獎勵,而當 TurtleBot3 碰到障礙物時,會獲得大的負獎勵。
{%youtube 807_cByUBSI %}
:::info
**備註**: 手冊中的影片內容可能隨時更新,恕不另行通知。
:::
### 9.2.1. 設定 state 狀態
State 狀態是對周圍環境的觀察,並描述當前的情況。在這裡,state_size 值是 26 並且有 24 個 LDS 光達數據(到目的地的距離,和到目的地的角度)。
TB3 的 LDS 光達預設值是 360。你可以在 turtlebot3/turtlebot3_description/urdf/turtlebot3_burger.gazebo.xacro 來修改樣本值。
```
<xacro:arg name="laser_visual" default="false"/> # Visualization of LDS. If you want to see LDS, set to `true`
```
```
<scan>
<horizontal>
<samples>360</samples> # The number of sample. Modify it to 24
<resolution>1</resolution>
<min_angle>0.0</min_angle>
<max_angle>6.28319</max_angle>
</horizontal>
</scan>
```
![](https://i.imgur.com/LQDev4R.png)
sample = 360
![](https://i.imgur.com/wWhbFI2.png)
sample = 24
### 9.2.2. 設定 action 動作
Action 動作是 agent 在每個 state 狀態可以做的事情。在這裡,turtlebot3 的直線速度設為 0.15 m/s。而角速度(angular velocity)則由 action 決定。
| Action | Angular velocity(rad/s) |
|:------:|:-----------------------:|
| 0 | -1.5 |
| 1 | -0.75 |
| 2 | 0 |
| 3 | 0.75 |
| 4 | 1.5 |
### 9.2.3. 設定 reward 獎勵
當 turtlebot3 在一個 state 狀態採取某個 action 動作時,它會收到一個 reward 獎勵。 reward 獎勵設計對學習非常重要。獎勵可以是正值或負值。當 turtlebot3 到達目的地時,它會得到很大的正獎勵(positive reward)。但當 turtlebot3 與障礙物碰撞時,它則會得到很大的負獎勵(negative reward)。如果你想套用你自己的獎勵設計,請在 /turtlebot3_machine_learning/turtlebot3_dqn/src/turtlebot3_dqn/environment_stage_#.py 檔修改 setReward 函數
### 9.2.4. 設定 hyper parameters 超參數
本教程是使用 DQN 方法來學習的。DQN 是一種強化學習方法,經由逼近 action-value function 動作值函數(Q值)來選擇深度類神經網絡。Agent 會遵照在 /turtlebot3_machine_learning/turtlebot3_dqn /nodes/turtlebot3_dqn_stage# 中的 hyper parameters 超參數設置。
| Hyper parameter | 預設 | 說明 |
|:---------------:|:-------:|:-----------------------------------------------------------------------------:|
| episode_step | 6000 | The time step of one episode. |
| target_update | 2000 | Update rate of target network. |
| discount_factor | 0.99 | Represents how much future events lose their value according to how far away. |
| learning_rate | 0.00025 | Learning speed. 如果該值太大,學習效果不好,如果太小,學習時間就會很長。 |
| epsilon | 1.0 | The probability of choosing a random action. |
| epsilon_decay | 0.99 | Reduction rate of epsilon. When one episode ends, the epsilon reduce. |
| epsilon_min | 0.05 | The minimum of epsilon. |
| batch_size | 64 | Size of a group of training samples. |
| train_start | 64 | Start training if the replay memory size is greater than 64. |
| memory | 1000000 | The size of replay memory. |
## 9.3. 執行機器學習套件
{%youtube 5uIZU8PCHT8 %}
:::info
**備註**: 手冊中的影片內容可能隨時更新,恕不另行通知。
:::
### 9.3.1. Stage 1 (無障礙物)
Stage 1 是一個 4x4 無障礙物的地圖
![](https://i.imgur.com/NBX9VDU.png)
1. 在 PC 開新的 terminal
2. 在 Gazebo 載入 stage 1 地圖
```
$ ros2 launch turtlebot3_gazebo turtlebot3_dqn_stage1.launch.py
$ ros2 run turtlebot3_dqn dqn_gazebo 1
$ ros2 run turtlebot3_dqn dqn_environment
$ ros2 run turtlebot3_dqn dqn_agent 1
```
- 如果要測試你的訓練模型,以下指令
```
$ ros2 run turtlebot3_dqn dqn_test 1
```
### 9.3.2. Stage 2 (靜止障礙物)
Stage 2 是一個 4x4 地圖,具有 4 個固定的圓柱體障礙物。
![](https://i.imgur.com/msXYCsm.png)
1. 在 PC 開新的 terminal
2. 在 Gazebo 載入 stage 2 地圖
```
$ ros2 launch turtlebot3_gazebo turtlebot3_dqn_stage2.launch.py
$ ros2 run turtlebot3_dqn dqn_gazebo 2
$ ros2 run turtlebot3_dqn dqn_environment
$ ros2 run turtlebot3_dqn dqn_agent 2
```
- 如果要測試你的訓練模型,以下指令
```
$ ros2 run turtlebot3_dqn dqn_test 2
```
### 9.3.3. Stage 3 (移動障礙物)
Stage 3 是一個 4x4 地圖,具有 4 個在移動的圓柱體障礙物。
![](https://i.imgur.com/D364Zqk.png)
1. 在 PC 開新的 terminal
2. 在 Gazebo 載入 stage 3 地圖
```
$ ros2 launch turtlebot3_gazebo turtlebot3_dqn_stage3.launch.py
$ ros2 run turtlebot3_dqn dqn_gazebo 3
$ ros2 run turtlebot3_dqn dqn_environment
$ ros2 run turtlebot3_dqn dqn_agent 3
```
- 如果要測試你的訓練模型,以下指令
```
$ ros2 run turtlebot3_dqn dqn_test 3
```
### 9.3.4. Stage 4 (障礙物組合)
Stage 4 是一個 5x5 地圖,具有牆壁及 2 個在移動的圓柱體障礙物。
![](https://i.imgur.com/egFFQJf.png)
1. 在 PC 開新的 terminal
2. 在 Gazebo 載入 stage 4 地圖
```
$ ros2 launch turtlebot3_gazebo turtlebot3_dqn_stage4.launch.py
$ ros2 run turtlebot3_dqn dqn_gazebo 4
$ ros2 run turtlebot3_dqn dqn_environment
$ ros2 run turtlebot3_dqn dqn_agent 4
```
- 如果要測試你的訓練模型,以下指令
```
$ ros2 run turtlebot3_dqn dqn_test 4
```
# **10. 實作 TB3 的不同應用程式**
---
:::info
**備註**:
- 操作的內容已在 Ubuntu 18.04 及 ROS Dashing Diademata 版本上測試過。
- 請注意,操作內容主要是在 [Remote PC 端]上執行
- 請將 TB3 放置在水平的地方,且注意不要從桌面掉落
- 在執行本節指令前,請先執行章節 Bringup 的指示
:::
## 10.1. Move using Interactive Markers
:::info
此功能只支援 ROS1 Kinetic 版
:::
## 10.2. Obstacle Detection 障礙偵測
TB3 從 obstacle detection node 接收特定的 topic: /cmd_vel_raw 後就會移動。當 LDS 數據偵測到障礙物後,會停止移動
**[Remote PC]**
1. 在 PC 開新的 terminal
2. 跑 teleoperation keyboard
```
$ ros2 run turtlebot3_teleop teleop_keyboard /cmd_vel:=/cmd_vel_raw
```
3. 啟動障礙偵測
```
$ ros2 launch turtlebot3_example turtlebot3_obstacle_detection
```
## 10.3. Position Control 位置控制
TB3 可使用此套件做位置控制
**[Remote PC]**
1. 在 PC 開新的 terminal
2. 啟動 pointop 檔
```
$ ros2 run turtlebot3_example turtlebot3_position_control
```
3. 分別輸入(x, y, theta) 值後按 enter,TB3 會從現在方位移動到 (x, y, theta) 方位。
```
TurtleBot3 Position Control
------------------------------------------------------
From the current pose,
x: goal position x (unit: m)
y: goal position y (unit: m)
theta: goal orientation (range: -180 ~ 180, unit: deg)
------------------------------------------------------
Input x: 1 (input a value and press enter)
Input y: 1 (input a value and press enter)
Input theta: 10 (input a value and press enter)
```
## 10.4. Point Operation
TurtleBot3 可以透過從 obstacle detection node 障礙物偵測節點接收特定 topic:/cmd_vel_raw 來移動。使用 LDS 數據來檢測障礙物,機器人就可以停止移動。
[Remote PC]
1. 在 PC 開新的 terminal
2. 啟動 teleoperation keyboard
```
$ ros2 run turtlebot3_teleop teleop_keyboard /cmd_vel:=/cmd_vel_raw
```
3. 執行 obstacle detection
```
$ ros2 launch turtlebot3_example turtlebot3_obstacle_detection
```
## 10.5. Patrol 巡邏
此範例使用 action topic。action client 將 patrol data(radius) 轉換傳給 action server,然後 action server 將其轉換為 cmd_vel 傳給 TB3
**[Remote PC]**
1. 在 PC 開新的 terminal
2. 啟動 patrol server 檔
```
$ ros2 run turtlebot3_example turtlebot3_patrol_server
```
3. 啟動 patrol client 檔
```
$ ros2 run turtlebot3_example turtlebot3_patrol_client
```
4. 輸入數值後按 enter。TB3 會畫出以輸入數值為半徑的圓。
```
TurtleBot3 Circle Patrol
------------------------------------------------------
radius: circle radius (unit: m)
------------------------------------------------------
Input radius: 1 (input a value and press enter)
```
## 10.6. TB3 Follower Demo 跟隨者
:::info
此功能只支援 ROS1 Kinetic 版
:::
## 10.7. TB3 Panorama Demo 全景照相
:::info
此功能只支援 ROS1 Kinetic 版
:::
## 10.8. Automatic Parking 自動停車
:::warning
要操作此範例,必須先安裝 turtlebot3_applications package
- 到 robotis workspace 目錄下的 (/home/(user_name)/robotis_ws/src),clone turtlebot3_applications。然後執行 clone build 來建立新的 package
1. 在 Remote PC 開新的 terminal
2. 執行指令
```
$ cd ~/robotis_ws/src
$ git clone -b ros2 https://github.com/ROBOTIS-GIT/turtlebot3_applications.git
$ cd ~/robotis_ws && colcon build --symlink-install
```
:::
:::info
**備註**:
- turtlebot3_automatic_parking 展示使用 360 度 LDS 光達及 reflective tape 反光帶。LaserScan topic 有來自 LDS 光達的強度和距離數據。TurtleBot3 使用它來定位反光帶。
- turtlebot3_automatic_parking 展示需要 Numpy 套件
:::
**[Remote PC]**:
1. 在 Remote PC 開新的 terminal
2. 以下列指令安裝 Numpy 套件, 如已安裝過則可以跳過
```
$ sudo apt-get install python-pip3
$ sudo pip3 install -U numpy
$ sudo pip3 install --upgrade pip
```
**[TB3]**
1. 在 SBC 開新的 terminal
2. 啟動基本套件來開始 TB3 應用展示
```
$ ros2 launch turtlebot3_bringup robot.launch.py
```
**[Remote PC]**:
1. 在 Remote PC 開新的 terminal
2. 執行 automatic parking 自動停車擋
```
$ export TURTLEBOT3_MODEL=${TB3_MODEL}
$ ros2 launch turtlebot3_automatic_parking turtlebot3_automatic_parking.launch.py
```
:::success
**提示**: 在執行指令前,你必須先指定使用的 TurtleBot3 模型。指令內的 ${TB3_MODEL} 所對應的 TB3 模型名稱,有 burger,waffle,waffle_pi 三種。如果你要永久設定 exporting setting,請參考 [Export TURTLEBOT3_MODEL 頁面](http://emanual.robotis.com/docs/en/platform/turtlebot3/export_turtlebot3_model)。
:::
:::
{%youtube IRtdxoPo8Y8 %}
:::info
**備註**: 手冊中的影片內容可能隨時更新,恕不另行通知。
:::
## 10.9. Automatic Parking Vision 自動停車(使用camera)
:::info
此功能只支援 ROS1 Kinetic 版
:::
## 10.10. 載入多個 TB3
:::info
此功能只支援 ROS1 Kinetic 版
:::
# **11. Locomotion 各種 TB3 改裝運動造型**
---
在影片中,觀看 TurtleBot3 如何組裝,然後新增幾個附加零件後再次組裝。TurtleBot3 組件中最大的零件是層板(waffle plate),可以組裝成各種尺寸和形狀,這要歸功於,其可供不同螺絲和螺帽使用的多種孔洞設計。
{%youtube o9d7NVC0A1Y %}
:::info
**備註**: 手冊中的影片內容可能隨時更新,恕不另行通知。
:::
通過這種開放性的組件,可以改裝出多種各具特點的 TurtleBot3 不同造型機器人。你可以自創一個前所未見的全新機器人。自行創建基於開源硬體的多變化機器人,並嘗試新的 locomotion 改裝造型。
**TurtleBot3 Friends 改裝造型列表(locomotion list)**
- TurtleBot3 Friends: Car 小車
- TurtleBot3 Friends: OpenManipulator 機器手臂
- TurtleBot3 Friends: Segway 賽格威二輪平衡
- TurtleBot3 Friends: Conveyor 輸送車
- TurtleBot3 Friends: Monster 怪獸四驅車
- TurtleBot3 Friends: Tank 履帶車
- TurtleBot3 Friends: Omni 全向輪
- TurtleBot3 Friends: Mecanum 萬象輪
- TurtleBot3 Friends: Bike 三輪車
- TurtleBot3 Friends: Road Train 聯結車
- TurtleBot3 Friends: Real TurtleBot 真烏龜
- TurtleBot3 Friends: Carrier 多層運送車
**零件改裝列表** ([BOM 表 excel 下載](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit#gid=368658157))
![](https://i.imgur.com/S5c2Fcz.png)
{%youtube gI0T4-aqTpI %}
:::info
注意:
- 在 BOM 表內列出由第三方代理所銷售的產品,可能會有變更或停售的情形,而不會事先通知。如有此情形,可參考零件的 3D 模型,找到相容的產品。
:::
- 從 OpenCR 控制板的 Arduino IDE 選單列的 File -> Examples -> turtlebot3 -> turtlebot3_friends,就可看到各種 TB3 改裝機器人的原始碼。
![](https://i.imgur.com/v1n1bEQ.png)
## 11.1. TurtleBot3 Friends: Car 小車
:::info
此改裝車的 3D 模型目前停止銷售
:::
- 類型: RC Car
- 特色: 製作可用於 Formula E 電動方程式賽車的車子(齒輪比 1:2, 差速齒輪)
- 組件: 兩個 Dynamixel X430 智能馬達(一個用於方向盤,一個用於驅動),一個 OpenCR 控制板,一個 RC-100 遙控器附 BT-410 藍芽模組,TB3 機殼組及電池,OLLO 的 6mm 塑膠框架
- 硬體: 此範例內有些 3D 組件被禁止販售
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_car
- 影片
{%youtube IkPexspUgKk %}
{%youtube 1V33iEu4ylw %}
## 11.2. TurtleBot3 Friends: OpenManipulator 機器手臂
![](https://i.imgur.com/6pshgKI.png)
- 類型: 機器手臂 Manipulator 4 DOF + 1 Gripper
- 特色: 可跟 TurtleBot3 Waffle Pi 鬆餅 Pi 相容,並有線性夾爪可撿取及放置物體
- 組件: 5 個 Dynamixel X430 智能馬達 (4 個做關節,1 個做夾爪), 1個 OpenCR 控制板, 3D 列印的機殼
- BOM: 請參考 [OpenManipulator Parts 零件](https://docs.google.com/spreadsheets/d/1h46Vw3amU0FZl3JSRS42BNoAaKeJoDlHAJGMKVe05ts/edit#gid=490107710)網頁
- 硬體: TB3 Waffle Pi + OpenManipulator ([Onshape](https://cad.onshape.com/documents/1535c2d7f05d4986e5ab539c/w/72b49bd8c74a47b010391012/e/454b64d637f42073514486f4), [Thingverse](https://www.thingiverse.com/thing:3081010))
- 硬體: OpenManipulator 機器手臂 ([Onshape](http://www.robotis.com/service/download.php?no=690), T[hingverse](https://www.thingiverse.com/thing:3069574))
- [軟體](https://github.com/ROBOTIS-GIT/open_manipulator_with_tb3): OpenCR Example 準備中
- [OpenManipulator Wiki](http://emanual.robotis.com/docs/en/platform/openmanipulator/) 網頁
- 影片
{%youtube Qhvk5cnX2hM %}
{%youtube qbht0ssv8M0 %}
{%youtube P82pZsqpBg0 %}
{%youtube DLOq8yNcCoE %}
## 11.3. TurtleBot3 Friends: Segway 賽格威二輪平衡
![](https://i.imgur.com/awypubW.png)
:::info
**備註**:
- 2 個 X430 智能馬達需要設為 PWM 模式
- Filters library 必須下載並包進 Arduino IDE 內。 [Github 連結](https://github.com/JonHub/Filters)
:::
- 類型: Segway robot (2 輪平衡機器人)
- 特色: 應用 PID 控制器來讓 2 個 Dynamixel 智能馬達保持平衡
- 組件: 2 個 Dynamixel X430 智能馬達(全部做平衡用),1個 OpenCR 控制板,TB3 機殼及電池,3D 之列印機殼
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit?pli=1#gid=368658157)
- 硬體 ([Onshape](http://www.robotis.com/service/download.php?no=680),[Thingverse](https://www.thingiverse.com/thing:3069806))
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_segway
- 影片
{%youtube VAY-0xBOE2g %}
## 11.4. TurtleBot3 Friends: Conveyor 輸送車
![](https://i.imgur.com/NTYi2RL.png)
- 類型: 4 輪輸送車
- 特色: 通過克服燃料消耗的機制,4 接頭和 4 輪將是運輸界的未來技術。
- 組件: 8 個 Dynamixel X430 智能馬達(4 個轉向用,4 個驅動用),一個 OpenCR 控制板,一個 RC-100 遙控器附 BT-410 藍芽模組,TB3 機殼組及電池,3D 列印機殼。
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit?pli=1#gid=0)
- 硬體 ([Onshape](http://www.robotis.com/service/download.php?no=681),[Thingverse](https://www.thingiverse.com/thing:3069758))
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_conveyor
- 影片
{%youtube uv2faO7GhXc %}
## 11.5. TurtleBot3 Friends: Monster 怪獸四驅車
![](https://i.imgur.com/yLdnCi8.png)
- 類型: 4 輪驅動車
- 特色: 4 個大輪子可在崎嶇的地形中保持強悍,甚至穿越高度差很大的地形。
- 組件: 4 個 Dynamixel X430 智能馬達(全部都供驅動用),一個 OpenCR 控制板,一個 RC-100 遙控器附 BT-410 藍芽模組,TB3 機殼組及電池,3D 列印機殼。
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit?pli=1#gid=46862313)
- 硬體 ([Onshape](http://www.robotis.com/service/download.php?no=682),[Thingverse](https://www.thingiverse.com/thing:3069796))
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_monster
- 影片
{%youtube UqdwGLH1-cA %}
## 11.6. TurtleBot3 Friends: Tank 履帶車
![](https://i.imgur.com/uc2u8VS.png)
- 類型: Caterpillar 履帶車
- 特色: 由鏈輪連接而組合成的履帶車,在崎嶇的地形中變得很堅固。
- 組件: 2 個 Dynamixel X430 智能馬達(全都驅動用),一個 OpenCR 控制板,一個 RC-100 遙控器附 BT-410 藍芽模組,TB3 機殼組及電池,履帶包,3D 列印機殼。
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit?pli=1#gid=146214313)
- 硬體 ([Onshape](http://www.robotis.com/service/download.php?no=683),[Thingverse](https://www.thingiverse.com/thing:3069755))
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_tank
- 影片
{%youtube vndnwpVEpVE %}
## 11.7. TurtleBot3 Friends: Omni 全向輪
![](https://i.imgur.com/MGu7HkR.png)
- 類型: Omni wheel 全向輪
- 特色: 全向輪在車輪圓周有額外的滾輪,可以橫向驅動。
- 組件: 3 個 Dynamixel X430 智能馬達(全都驅動用),一個 OpenCR 控制板,一個 RC-100 遙控器附 BT-410 藍芽模組,TB3 機殼組及電池,3D 列印機殼。
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit?pli=1#gid=381353368)
- 硬體 ([Onshape](http://www.robotis.com/service/download.php?no=684),[Thingverse](https://www.thingiverse.com/thing:3069809))
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_omni
- 影片
{%youtube r8wRACM_ZbE %}
## 11.8. TurtleBot3 Friends: Mecanum 萬向輪
![](https://i.imgur.com/24wkG2h.png)
- 類型: Mecanum wheel 萬向輪(or 麥克納姆輪)
- 特色: 萬向輪在車輪圓周有額外的滾輪,可以橫向驅動(通常是 4 個萬向輪)
- 組件: 4 個 Dynamixel X430 智能馬達(全部都驅動用),一個 OpenCR 控制板,一個 RC-100 遙控器附 BT-410 藍芽模組,TB3 機殼組及電池,3D 列印機殼。
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit#gid=953634249)
- 硬體 ([Onshape](http://www.robotis.com/service/download.php?no=685),[Thingverse](https://www.thingiverse.com/thing:3069811))
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_mechanum
- 影片: 參考上節 TB3 改裝 7: Omni 全向輪影片
## 11.9. TurtleBot3 Friends: Bike 三輪摩托車
![](https://i.imgur.com/QPxly4g.png)
- 類型: 3-DOF Motorcycle 三輪摩托車
- 特色: 可愛的三輪 bikey,在 “Car” 電影中以 “Car” 的兄弟出現。
- 組件: 3 個 Dynamixel X430 智能馬達(1個方向盤用,2 個驅動用),一個 OpenCR 控制板,一個 RC-100 遙控器附 BT-410 藍芽模組,TB3 機殼組及電池,3D 列印機殼。
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit?pli=1#gid=107279947)
- 硬體 ([OnShape](http://www.robotis.com/service/download.php?no=686),[Thingverse](https://www.thingiverse.com/thing:3069817))
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_bike
- 影片: 請參考上方 TB3 改裝 1: Car 小車及 TB3 改裝 5: Monster 怪獸四驅車的影片
## 11.10. TurtleBot3 Friends: Road Train 聯結車
![](https://i.imgur.com/II6iWgz.png)
- 類型: Road train 聯結車
- 特色: 聯結車可以連接多個拖板車,它可以提供多樣的服務!
- 組件: 2 個 Dynamixel X430 智能馬達(2 個都驅動用),一個 OpenCR 控制板,一個 RC-100 遙控器附 BT-410 藍芽模組,TB3 機殼組及電池,3D 列印機殼。
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit#gid=1473715654)
- 硬體 ([OnShape](http://www.robotis.com/service/download.php?no=687),[Thingverse](https://www.thingiverse.com/thing:3069804))
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_road_train
- 影片
{%youtube uhkq1w4YoEE %}
## 11.11. TurtleBot3 Friends: Real TurtleBot 真烏龜
![](https://i.imgur.com/gHXG4xm.png)
- 類型: 8 自由度四足機器人 (真烏龜造型)
- 特色: 真烏龜造型機器人會受到大部份烏龜愛護粉絲的歡迎!.
- 組件: 10 個 Dynamixel X430 智能馬達(4 個腿關節用,4 個肩關節用,2 個頭部用),一個 OpenCR 控制板,一個 RC-100 遙控器附 BT-410 藍芽模組,TB3 機殼組及電池,3D 列印機殼。
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit#gid=1862775028)
- 硬體 ([OnShape](http://www.robotis.com/service/download.php?no=688),[Thingverse](https://www.thingiverse.com/thing:3069748))
- 軟體: Examples → turtlebot3 → turtlebot3_friends → turtlebot3_realturtlebot
- 影片
{%youtube KNWkAe0ob9g %}
{%youtube vort-z9HDlU %}
## 11.12. TurtleBot3 Friends: Carrier 多層運送車
![](https://i.imgur.com/Nbcy9zk.png)
- 類型: 2 輪移動機器人平台可作為服務型機器人用
- 特色: 2 輪式移動平台將為您提供任何想要的服務。
- 組件: A TurtleBot3 Waffle Pi, 第 4 層用到 6 個 supports, 第 5 層也需 6 個 supports, 每一層由多片層板組合, 客制的 3D 列印大車輪及滾珠輪
- [BOM 表](https://docs.google.com/spreadsheets/d/1vbIFMRJMbyOd2D6BtwV1Ow_yBc9xRHktqZhTTmwI_l4/edit#gid=71921372)
- 硬體 ([OnShape](http://www.robotis.com/service/download.php?no=689),[Thingverse](https://www.thingiverse.com/thing:3069815))
- 軟體: Examples → turtlebot3 → turtlebot3_waffle → turtlebot3_waffle
- 影片
{%youtube 5NYdgnzxykc %}
{%youtube u7qb8xiSiNg %}
# **12. Learn 學習資源課程**
---
## 12.1. AWS RoboMaker 使用 TurtleBot3
{%youtube U1ukEpzKCYY %}
跟 Foxy 相同內容,請參考 Foxy 內容
### 12.1.1. AWS RoboMaker 範例使用 TB3
跟 Foxy 相同內容,請參考 Foxy 內容
### 12.1.2. AWS RoboMaker 強化學習範例使用 TB3
跟 Foxy 相同內容,請參考 Foxy 內容
## 12.2 透過 Matlab 蒐集數據
跟 Foxy 相同內容,請參考 Foxy 內容
## 12.3. The Construct 線上教學網站
跟 Foxy 相同內容,請參考 Foxy 內容
### 12.3.1. MASTER WITH ROS: TurtleBot3 (英文課程)
跟 Foxy 相同內容,請參考 Foxy 內容
![](https://i.imgur.com/v2yVW6F.png)
### 12.3.2. 使用 RDS v2.0 在 5 分鐘內進行 TurtleBot3 模擬
{%youtube 8wg2i297MXU %}
### 12.3.3. TurtleBot3 光達掃描的訂閱
{%youtube 2i_iRhzIPfo %}
## 12.4. TurtleBot3 Blockly
跟 Foxy 相同內容,請參考 Foxy 內容
![](https://emanual.robotis.com/assets/images/platform/turtlebot3/learn/turtlebot3_blockly_dabit_industries.gif)
## 12.5. TurtleBot3 Simulation on ROS Indigo
跟 Foxy 相同內容,請參考 Foxy 內容
## 12.6. Youtube 影片課程
跟 Foxy 相同內容,請參考 Foxy 內容
- Youtube 課程 01 影片(英文)
{%youtube 1tqYrWqrbC8 %}
- Youtube 課程 10 影片(韓文)
{%youtube rV-POzbzoHc %}
- [ROS 課程播放列表(英文)](https://www.youtube.com/playlist?list=PLRG6WP3c31_U7TFGduEIJWVtkOw6AJjFf)
- [ROS 課程播放列表(韓文)](https://www.youtube.com/playlist?list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw)
## 12.7. 實體書
![](https://i.imgur.com/Sxatm9Q.jpg)
此書的讀者群:這本書是為了希望基於 ROS(機器人操作系統)來學習機器人編程的大學生和研究生,以及從事機器人開發專案或軟體編程的專業研究人員和工程師而寫的。 我們試圖提供我們在使用 TurtleBot3 和 OpenManipulator 時所學到的詳細信息。我們希望本書能夠成為 ROS 初學者的完整手冊,更多人將為不斷發展的開放式機器人社區做出貢獻。
從本書你可以學習到:從基本概念到實作的機器人應用編程!
- ROS Kinetic Kame : Basic concept, instructions and tools
- How to use sensor and actuator packages on ROS
- Embedded board for ROS : OpenCR1.0
- SLAM & Navigation with TurtleBot3
- How to program a delivery robot using ROS Java
- OpenManipulator simulation using MoveIt! and Gazebo
**下載 "ROS 機器人編程" 簡中版** (使用 TurtleBot3 為 ROS 1 實作平台)
- [**ROS 機器人編程- 簡中 PDF**](https://www.dropbox.com/s/5cqhl5f17e2p1b5/ROS_Robot_Programming_CN.pdf?dl=0)
- [**ROS Robot Programming- 英文 PDF**](https://www.dropbox.com/s/x1bj7u878p2hgtq/ROS_Robot_Programming_EN.pdf?dl=0)
![](https://i.imgur.com/R8L7KfX.png)
| **簡中版章節列表** | | |
|:--------------------- |:----------------------- | --------------- |
| 1. 機器人軟件平台 | 6. ROS 工具 | 11. SLAM 和導航 |
| 2. 機器人操作系統 ROS | 7. ROS 編程基礎 | 12. 服務機器人 |
| 3. 搭建 ROS 開發環境 | 8. 機器人、傳感器和電機 | 13. 機械手臂 |
| 4. ROS 的重要概念 | 9. 嵌入式系統 | |
| 5. ROS 命令 | 10. 移動機器人 | |
## 12.7. TurtleBot3 影片分享
### 12.7.1. Open Source Team 的 TB3 影片
從 ROBOTIS Open Source Team 分享的 [**TB3 影片集錦列表**](https://www.youtube.com/playlist?list=PLRG6WP3c31_XI3wlvHlx2Mp8BYqgqDURU):
1. How to setup Jetson Nano for TurtleBot3 (ROS Melodic)
2. TurtleBot3 ROS1 Noetic Quick Start Guide for Noetic
3. TurtleBot3 ROS2 Quick Start for Foxy
4. TurtleBot3 & OpenMANIPULATOR-X Robotics Curriculum
5. TurtleBot3 59 ROS2 Dashing Diademata Navigation2
6. TurtleBot3 58 ROS2 Dashing Diademata Cartographer
7. TurtleBot3 56 ROS2 Cartographer
8. TurtleBot3 57 ROS2 Navigation2
9. TurtleBot3 55 ROS2 Tutorials
10. TurtleBot3 54 Additional Sensors with TurtleBot3
11. TurtleBot3 53 AutoRace on RDS
12. TurtleBot3 52 RDS Task Mission Tutorial
13. TurtleBot3 51 Machine Learning tutorial 3
14. TurtleBot3 50 Machine Learning tutorial 2
15. TurtleBot3 49 Machine Learning tutorial 1
16. TurtleBot3 48 Autorace with Gazebo
17. TurtleBot3 47 Reinforcement Learning
18. TurtleBot3 46 Pick and Place Tutorial by TurtleBot3 with OpenManipulator
19. TurtleBot3 45 TurtleBot3 with OpenManipulator
20. TurtleBot3 44 Automatic Parking Vision
21. TurtleBot3 40 TurtleBot3 AutoRace Tutorial 3: Parking
22. TurtleBot3 41 TurtleBot3 AutoRace Tutorial 4: Node Optimization
23. TurtleBot3 42 TurtleBot3 AutoRace Tutorial 5: Level Crossing
24. TurtleBot3 43 TurtleBot3 AutoRace Tutorial 6: Tunnel
25. TurtleBot3 39 TurtleBot3 AutoRace Tutorial 2: Lane Tracking
26. TurtleBot3 38 TurtleBot3 AutoRace Tutorial 1: Traffic Light
27. TurtleBot3 37 Gazebo Simulation Tutorial
28. TurtleBot3 36 Waffle Pi Camera
29. TurtleBot3 35 How to use LDS
30. TurtleBot3 34 Basic Operation
31. TurtleBot3 33 Automatic Parking
32. TurtleBot3 32 Auto Race RBiz Challenge 2017
33. TurtleBot3 31 Burger Assembly
34. TurtleBot3 01 Assembling and Example
35. TurtleBot3 02 SLAM
36. TurtleBot3 04 Gmapping and Cartographer
37. TurtleBot3 05 Manipulator X6 RViz
38. TurtleBot3 03 Navigation
39. TurtleBot3 06 Payload
40. TurtleBot3 07 Friends - Conveyor
41. TurtleBot3 08 Teleoperation Example
42. TurtleBot3 09 SLAM using Gmapping and Cartographer
43. TurtleBot3 10 Friends - Real TurtleBot
44. TurtleBot3 11 Friends - Real TurtleBot meets R2D2
45. TurtleBot3 12 Friends - Omni & Mecanum
46. TurtleBot3 13 Friends - Car
47. TurtleBot3 14 Friends - Tank
48. TurtleBot3 15 Assembling the TurtleBot3 Basic
49. TurtleBot3 16 Assembling the TurtleBot3 Premium
50. TurtleBot3 17 Friends - Segway
51. TurtleBot3 18 Friends - Monster
52. TurtleBot3 19 Friends - Road Train
53. TurtleBot3 20 Friends - OpenManipulator
54. TurtleBot3 21 Friends - Auto
55. TurtleBot3 22 Hardware
56. TurtleBot3 23 Fake Node
57. TurtleBot3 24 Intel® RealSense™ Example
58. TurtleBot3 25 Gazebo Simulator Example
59. TurtleBot3 26 Laser Distance Sensor (LDS) Example
60. TurtleBot3 27 SLAM Example
61. TurtleBot3 28 Navigation Example
62. TurtleBot3 29 Friends Example
63. TurtleBot3 30 Follow Demo
### 12.7.2. ROBOTIS Channel 的 TB3 影片
從 ROBOTIS Channel 分享的 [**TB3 影片集錦**](https://www.youtube.com/playlist?list=PLvaBFX_ny57Tetu8x5AEe8kNIRCzfpHX9):
* [Turtlebot 3 Navigation]
{%youtube lOZmFC79S6A %}
* [Turtlebot 3 SLAM]
{%youtube hX6pFcfr29c %}
* [Turtlebot 3 assembly and examples]
{%youtube r3oNIWex8a0 %}
* [TurtleBot3 AutoRace @RobotWorld 2017 R-BIZ Challenge]
{%youtube DWDBAHHQi_k %}
* [TurtleBot3 AutoRace TestDrive 2017 (RBIZ @ RobotWorld)]
{%youtube 9Wnu8If1eS4 %}
* [TurtleBot3 Delivery Service Demo @ICRA2017 (2)]
{%youtube u7qb8xiSiNg %}
* [TurtleBot3 Delivery Service Demo @ICRA2017 (1)]
{%youtube 5NYdgnzxykc %}
* [TurtleBot3 Following Demo @ICRA2017]
{%youtube cM_nAfgvtzE %}
* [TurtleBot3 @ICRA]
{%youtube dhOWsLT20dg %}
* [TurtleBot3 - Behind Scenes]
{%youtube jFvEGKkdOqM %}
* [TurtleBot3 - Official Product Video]
{%youtube 9OC3J53RUsk %}
### 12.7.3. TB3 的一些有趣專案項目介紹
#### 12.7.3.1 TB3 協作專案
跟 Foxy 相同內容,請參考 Foxy 內容
- TurtleBot3 各地區授權代理商
![](https://i.imgur.com/QlGLPLX.png)
- [各地區代理商的網頁連結](https://www.turtlebot.com/partners)
- **[**採智科技**](https://idminer.com.tw)為台灣 TurtleBot3 官方唯一授權代理商**
#### 12.7.3.2. 一些有趣的 TB3 個人專案
**[TurtleBot3 Autorace Simulation Circuit]**
- by Fabio Falezza
- 2018-06-27 Youtube 影片
{%youtube FR27W19rrYA %}
**[Multi-robot exploration]**
- by Eric Schneider
- 2018-06-26 Youtube 影片
{%youtube rE2Ea8R8fP0 %}
**[turtlebot3 ros move base gazebo dwa planner]**
- by Hyunok Lee
- [Source Code](https://github.com/hyunoklee/gazebo_industrial)
- 2018-06-23 Youtube 影片
{%youtube 0pigUC3L-VQ %}
**[Tutoriel TurtleBot3/ROS/Docker/Darknet pour mac]**
- by Christophe Saint-Jean
- 2018-06-21 Youtube 影片
{%youtube s1No22-vz28 %}
**[TurtleBot3 Automatic Obstacle Avoidance]**
- by 余嘉浩
- 2018-06-14 Youtube 影片
{%youtube 0L2c4xOAhFg %}
**[Robotclub TB3 (Episode 4): Track and push color balls to goals with avoiding obstacles]**
- by ROS in Robotclub Malaysia
- 2018-06-11 Youtube 影片
{%youtube 78IMph18GX0 %}
**[TurtleBot3 SLAM (Gmapping) & Navigation (AMCL)]**
- by oeyyey
- 2018-06-08 Youtube 影片
{%youtube HWs49FMT6Uk %}
**[Robotclub TB3 (Episode 3): Track and push color balls to goals]**
- by ROS in Robotclub Malaysia
- 2018-05-31 Youtube 影片
{%youtube zinnrD_oSaU %}
**[Robotclub TB3 (Episode 2): Track and push ball to goal]**
- by ROS in Robotclub Malaysia
- 2018-05-17 Youtube 影片
{%youtube nCL6YlAlYm4 %}
**[Robotclub TB3 (Episode 1) : Ball Tracking]**
- by ROS in Robotclub Malaysia
- 2018-05-07 Youtube 影片
{%youtube RgOvX3rUsI4 %}
**[TurtleBot3 Maze Solving at FIRA Malaysia 2018]**
- by Arif Rahman
- 2018-05-01 Youtube 影片
{%youtube 5XERzM6ZfJg %}
**[TurtleBot3 Maze Explorer]**
- by Arif Rahman
- 2018-04-27 Youtube 影片
{%youtube 72SDxhgmnBg %}
**[PLS(Polarized Light Sensing) for Robotics]**
- by Polariant
- 2018-04-26 Youtube 影片
{%youtube 7hVTHFeXbpQ %}
**[TurtleBot3 ROS Intelligent Robot]**
- by Juan Jorge Garcia
- 2018-04-20 Youtube 影片
{%youtube 3w2kP3w7UkA %}
**[BallBot Project based on TurtleBot3]**
- by Simulation, Systemoptimierung und Robotik
- 2018-04-19 Youtube 影片
{%youtube Eg_-n14h76Q %}
**[GdR TurtleBot Challenge 2018 - Final Match - “Monka” vs. “Ninja Turtle”]**
- by Simulation, Systemoptimierung und Robotik
- 2018-04-17 Youtube 影片
{%youtube OdLsbAMy7m0 %}
**[TurtleBot3 Maze Solving]**
- by Arif Rahman
- 2018-04-15 Youtube 影片
{%youtube AamHifhvNMs %}
**[TurtleBot3 with OpenTLD and IBVS Controller]**
- by 李俊明
- 2018-04-11 Youtube 影片
{%youtube QYSQT_AerXM %}
**[Autonomous Radiation Mapping - Carma Project]**
- by Benjamin Bird
- 2018-02-22 Youtube 影片
{%youtube KLq-p-TiVsY %}
**[Controlling TurtleBot 3 from Windows using NEP]**
- by Luis Enrique Coronado
- 2018-02-06 Youtube 影片
{%youtube r3jviQvMP7Q %}
**[Demo video of KAIST ‘Introduction to Robotics’ in 2017 Fall]**
- by KAIST
- 2018-01-10 Youtube 影片
{%youtube ZsoKUnk4P9k %}
**[TurtleBot3 Voice Teleop Testing]**
- by Arif Rahman
- 2017-11-30 Youtube 影片
{%youtube 2RVykNKscCE %}
**[TurtleBot3 Follows DashGo]**
- by Jiang Shan
- 2017-11-16 Youtube 影片
{%youtube inyqfimq1xs %}
**[TurtleBot3 Hector SLAM on Gazebo]**
- by Ebad Syed
- 2017-10-13 Youtube 影片
{%youtube 5MWUUti6--Y %}
**[Q-Learning to Obstacle Avoidance using TurtleBot3]**
by 許修瑋
- 2017-10-05 Youtube 影片
{%youtube p_qAsR0pEuQ %}
# **13. 更多產品資訊**
---
## 13.1. 附錄 - TB3 主要零件補充說明
### 13.1.1. Dynamixel 智能馬達
![](https://i.imgur.com/AAqMJr5.png)
跟 Foxy 相同內容,請參考 Foxy 內容
#### 13.1.1.1. Overview
{%youtube gZWoyCvU-U8 %}
跟 Foxy 相同內容,請參考 Foxy 內容
#### 13.1.1.2. 規格
跟 Foxy 相同內容,請參考 Foxy 內容
#### 13.1.1.3. Dynamixel SDK 開發軟體
![](https://i.imgur.com/jiDe7vH.png)
跟 Foxy 相同內容,請參考 Foxy 內容
### 13.1.2. OpenCR 1.0 控制板
![](https://i.imgur.com/Q7f9nxb.jpg)
跟 Foxy 相同內容,請參考 Foxy 內容
#### 13.1.2.1. Overview
跟 Foxy 相同內容,請參考 Foxy 內容
{%youtube -_kBfIS6wJs %}
#### 13.1.2.2. 規格
跟 Foxy 相同內容,請參考 Foxy 內容
#### 13.1.2.3. 使用指南
跟 Foxy 相同內容,請參考 Foxy 內容
#### 13.1.2.4. 開源軟體
跟 Foxy 相同內容,請參考 Foxy 內容
#### 13.1.2.5. 開源硬體
跟 Foxy 相同內容,請參考 Foxy 內容
#### 13.1.2.6. 線上手冊
跟 Foxy 相同內容,請參考 Foxy 內容
### 13.1.3. LDS-01 光達
跟 Foxy 相同內容,請參考 Foxy 內容
### 13.1.4. LDS-02 光達
自 2022 起,LDS-01 光達已停產,以 LDS-02 取代
#### 13.1.4.1. Overview
![](https://i.imgur.com/ty3hxao.png)
- LDS-02 光達可 2D 360度掃描,蒐集機器人周遭數據,給 SLAM 及 Navigation 使用
- LDS-02 可直接給 TB3 Burger 及 Waffle Pi 使用
- LDS-02 只具有 Tx UART 介面
- 可使用 USB2LDS 轉接器連接到 PC 或 SBC 上
#### 13.1.4.2. 規格
:::info
規格如有差異,以 ROBOTIS 原廠數據為主
:::
**一般規格**
| 品項 | 規格 |
| -------- | -------- |
| Operating supply voltage | 5V DC ± 10% |
| PWM Frequency | 10 ~ 30 KHz (Square wave, High : 3.3V, Low : 0V) |
| PWM Duty Cycle | 0 ~ 100% |
| LASWER Wave Length | Low powered Infrared Laser (λ=793 nm) |
| LASER safety | Class I, 21 CFR 1040.10 and 1040.11 |
| Current consumption | 240 mA (Start up current 400 mA) |
| Detection distance | 160 ~ 8,000 mm |
| Interface | 3.3V USART (115200 bps, 8 data bits, no parity, 1 stop bit), Tx Only |
| Ambient Light Resistance | 25,000 lux |
| Life Time | 1,000 hrs |
| Sampling Rate | 2.3kHz (Fixed) |
| Operating Temperature | -10 ~ 40 °C |
| Storage Temperature | -30 ~ 70 °C |
| Dimensions | 70(W) X 90(D) X 42(H)mm |
| Mass | 131 g |
**量測效能規格**
| 品項 | 規格 |
| -------- | -------- |
| Distance Range | 160 ~ 8,000mm |
| Distance Accuracy (160 ~ 300 mm) | ±10mm |
| Distance Accuracy(300 ~ 6,000 mm) | ±3.0% |
| Distance Precision(6,000 ~ 8,000 mm) | ±5.0% |
| 1 Scan Frequency | 5Hz or above |
| Angular Range | 360 ° |
| 2 Angular Resolution | 1 ° |
:::info
**備註**:
1 Scan Frequency may vary by each product.
2 Due to the fixed sampling rate, the Angular Resolution may vary by the Scan Frequency.
:::
#### 13.1.4.3. Data Packet 數據封包
LDS-02採用單向通訊方式,一旦穩定工作就開始發送測量數據,無需下任何指令。
| Packet | 說明 | Example |
| -------- | -------- | -------- |
| Header | 0x54 | 0x54 |
| Length | 0x2C | 0x2C |
| Speed (2Byte) | Speed_L, Speed_H | 0x68, 0x08 |
| Start Angle (2Byte) | Angle_L, Angle_H | 0xAB, 0x7E |
| Data (36Byte) | Data | Data |
| End Angle (2Byte) | Angle_L, Angle_H | 0xBE, 0x82 |
| Timestamp (2Byte) | Time_L, Time_H | 0x3A, 0x1A |
| CRC | CRC | 0x50 |
- Packet Example
- Speed : 0x0868 (2152 °/s)
- Start Angle : 0x7EAB (32427 / 100 = 324.27 °)
- End Angle : 0x82BE (33470 / 100 = 334.70 °)
- Timestamp : 0x1A3A (6714 ms)
**Data (36Byte)** 是由 distance(2Byte) 及 confidence(1Byte) 共 12 個測量點所組成。如下
| 項目 | 說明 | Example |
| -------- | -------- | -------- |
| Point1 Distance (2Byte) | Distance_L, Distance_H | 0xE0, 0x00 |
| Point1 Confidence | Confidence | 0xE4 |
| Point2 Distance (2Byte) | Distance_L, Distance_H | 0xDC, 0x00 |
| Point2 Confidence | Confidence | 0xE2 |
| .. | .. | .. |
| Point12 Distance (2Byte) | Distance_L, Distance_H | 0xB0, 0x00 |
| Point12 Confidence | Confidence | 0xEA |
- Data Example
- Point1 Distance : 0x00E0 (224 mm)
- Point1 Confidence : 0xE4 (228)
- Point2 Distance : 0x00DC (220 mm)
- Point2 Confidence : 0xE2 (226)
- Point12 Distance : 0x00B0 (176 mm)
- Point12 Confidence : 0xEA (234)
### 13.1.5. RealSense R200 攝影機
已停產,省略
### 13.1.6. 樹莓派 camera
跟 Foxy 相同內容,請參考 Foxy 內容
## 13.2. 相容之第三方設備
跟 Foxy 相同內容,請參考 Foxy 內容
## 13.3. 添加感測器
跟 Foxy 相同內容,請參考 Foxy 內容
## 13.4. 開源資源下載及授權
跟 Foxy 相同內容,請參考 Foxy 內容
# **14. 常見問題 FAQ**
---
**常見問題**:
1. 如何在 Raspberry Pi 樹莓派啟動 SSH Server
2. 如何在 TB3 及 Remote PC 間同步時間
3. 設定 TB3 上的 Dynamixel 智能馬達
4. 當電池連接在 TB3 時,可以充電嗎?
5. 如何下載 TB3 的 3D 列印 STL 檔案
6. Intel Joule 深度攝影機 USB-C Port 在 Win 10 不能辨識
7. Intel Joule 深度攝影機在開機/安裝時凍結
8. 如何更新軟體
9. 如何更新韌體
## 14.1. 如何在 Raspberry Pi 樹莓派啟動 SSH Server
與 Foxy 內容相同,請看 Foxy 頁面
## 14.2. 如何在 TB3 及 Remote PC 間同步時間
與 Foxy 內容相同,請看 Foxy 頁面
## 14.3. 設定 TB3 上的 Dynamixel 智能馬達
與 Foxy 內容相同,請看 Foxy 頁面
## 14.4. 當電池連接在 TB3 時,可以充電嗎?
與 Foxy 內容相同,請看 Foxy 頁面
## 14.5. 如何下載 TB3 的 3D 列印 STL 檔案
與 Foxy 內容相同,請看 Foxy 頁面
## 14.6. Intel Joule 深度攝影機 USB-C Port 在 Win 10 不能辨識
與 Foxy 內容相同,請看 Foxy 頁面
## 14.7. Intel Joule 深度攝影機在開機/安裝時凍結
與 Foxy 內容相同,請看 Foxy 頁面
## 14.8. 如何更新 TB3 軟體
與 Foxy 內容相同,請看 Foxy 頁面
## 14.9. 如何更新 TB3 韌體
與 Foxy 內容相同,請看 Foxy 頁面
# **15. 聯絡採智科技**
---
![](https://i.imgur.com/jZ7APk4.png)
![](https://i.imgur.com/mJ5jCT8.png)
採智科技是 [**TurtleBot3 台灣唯一官方授權代理商**](https://www.turtlebot.com/partners/),如有產品需求,使用,技術或維修上的問題,請聯絡我們。
**採智科技股份有限公司**
台北市11076信義區松德路12號10F
Tel: +886-2-2345-7799
Fax: +886-2-2345-0867
mail: info(at)idminer.com.tw
採智科技網站: http://www.idminer.com.tw/
** **下載 "ROS 機器人編程" 簡中版** (使用 TurtleBot3 為 ROS 1 實作平台)
- [**ROS 機器人編程- 簡中 PDF**](https://www.dropbox.com/s/5cqhl5f17e2p1b5/ROS_Robot_Programming_CN.pdf?dl=0)
- [**ROS Robot Programming- 英文 PDF**](https://www.dropbox.com/s/x1bj7u878p2hgtq/ROS_Robot_Programming_EN.pdf?dl=0)
![](https://i.imgur.com/R8L7KfX.png)
| **簡中版章節列表** | | |
|:--------------------- |:----------------------- | --------------- |
| 1. 機器人軟件平台 | 6. ROS 工具 | 11. SLAM 和導航 |
| 2. 機器人操作系統 ROS | 7. ROS 編程基礎 | 12. 服務機器人 |
| 3. 搭建 ROS 開發環境 | 8. 機器人、傳感器和電機 | 13. 機械手臂 |
| 4. ROS 的重要概念 | 9. 嵌入式系統 | |
| 5. ROS 命令 | 10. 移動機器人 | |
###### tags: `TurtleBot3(ROS2)`