## What is micro-ros ? - 基於 Micro XRCE-DDS Client 構建的 package,**使 ROS 2 可以與資源受限的嵌入式平台上通訊** - 微控制器可以透過串口、藍牙、乙太網路、Wi-Fi 等多種協定將數據傳遞給Agent,Agent 再轉換成 ROS2 的 Topic 等資訊,以此完成通訊 ![micro-ros structure](https://hackmd.io/_uploads/SkhbF1FxJx.png =500x) - 透過 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 後安裝 ![image](https://hackmd.io/_uploads/Sk56sYyf1l.png) 大約等候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` 卻都沒有顯示的問題,後來我是都移除就好了。