## What is micro-ros ?
- 基於 Micro XRCE-DDS Client 構建的 package,**使 ROS 2 可以與資源受限的嵌入式平台上通訊**
- 微控制器可以透過串口、藍牙、乙太網路、Wi-Fi 等多種協定將數據傳遞給Agent,Agent 再轉換成 ROS2 的 Topic 等資訊,以此完成通訊

- 透過 RCLC-API 呼叫 MicroROS,程式碼風格和在上位機中使用 Python C++ 呼叫 MicroROS 有所不同
## 下位機:micro_ros_arduino
在嵌入式平台安裝 Micro-ROS 需要經過一系列的建立、設定、建造和刷新過程。將 Micro-ROS 整合到 Arduino IDE 中可以達成這些步驟。
#### 設定流程,以 ESP32 為例:
1. `File` → `Preferences` 進入 Preferences ,在其中的 Additional boards manager URLs 加入 ESP32、OpenCR 的編譯資源連結:
```
https://dl.espressif.com/dl/package_esp32_index.json
https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.json
```
2. `Tools` → `Board:...` → `Boards Manager`中輸入 esp32 後安裝

大約等候15~20分鐘安裝完成後,再一次`Tool` → `board:...` → `boeard manager` → 選擇`ESP32 Dev Module`
4. `Tools` → `Port:...` 中選擇對應的 COM 端口
5. `Sketch` → `Include Library` → ` Add .ZIP Library...` 加入由 [Micro-ROS Arduino](https://github.com/micro-ROS/micro_ros_arduino/releases) 下載下來的 library zip 檔,詳細參考 [micro_ros_arduino Github](https://github.com/micro-ROS/micro_ros_arduino)
6. 可以從 `File` → `Examples` 加入 Micro-ROS Arduino 的範例程式並燒錄到 ESP32 進行測試
#### ERROR: serial not found
ESP32 的編譯需要 python serial 的支援
```
python3 -m pip install pyserial
```
## 上位機:micro-ros-agent
負責在上位機接收 micro ros 的發送資訊
#### install
```
source /opt/ros/foxy/setup.bash
cd ~/ros2_ws/src
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro-ROS-Agent
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_msgs
sudo apt update && rosdep update
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro foxy-devel
sudo apt-get install python3-pip
colcon build
source install/local_setup.bash
```
#### 檢查 package 安裝
```
source install/setup.bash
ros2 run micro_ros_agent micro_ros_agent udp4 --port 8888
```
#### 發布 node 以連接下位機
```
source install/setup.bash
ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyACM0
```
#### 確定 USB 連接埠
```
#!/bin/bash
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
(
syspath="${sysdevpath%/dev}"
devname="$(udevadm info -q name -p $syspath)"
[[ "$devname" == "bus/"* ]] && exit
eval "$(udevadm info -q property --export -p $syspath)"
[[ -z "$ID_SERIAL" ]] && exit
echo "/dev/$devname - $ID_SERIAL"
)
done
```
#### ERROR: 13. Please re-run with superuser privileges
1. 用 `whoami` 找到使用者名字
2. `sudo usermod -a -G dialout $USER` 把當前的使用者名字加到串口使用者群組,最後電腦重新開機
#### 節點已建立卻顯示不出來
當有設定 ROS_DOMAIN_ID 的時候會發生終端機都有提示節點已建立、發布了,但是在 `ros2 topic list` 卻都沒有顯示的問題,後來我是都移除就好了。