welcom ! Handel home

2025年4月16日 星期三

micro-ROS 搭配 ESP32

使用 micro-ROS 搭配 ESP32 建立 FreeRTOS firmware 時,流程會與 STM32 類似,

但會使用 ESP-IDF 或 Arduino 作為平台基礎。

以下是完整操作流程與測試方法:


✅ 一、準備工作

1️⃣ 安裝 ROS 2(建議版本:Humble)

bash
sudo apt update sudo apt install -y ros-humble-desktop

2️⃣ 安裝 ESP-IDF 開發環境(適用 micro-ROS ESP32)

bash
sudo apt install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util mkdir -p ~/esp cd ~/esp git clone --recursive https://github.com/espressif/esp-idf.git cd esp-idf ./install.sh

設定環境變數:

bash
. $HOME/esp/esp-idf/export.sh

✅ 二、建立 micro-ROS firmware workspace

bash
mkdir -p ~/microros_esp32_ws/src cd ~/microros_esp32_ws/src git clone -b humble https://github.com/micro-ROS/micro_ros_espidf_component.git

✅ 三、初始化 firmware project for ESP32

bash
cd ~/microros_esp32_ws ros2 run micro_ros_setup create_firmware_ws.sh freertos esp32

這會產生 firmware/ 資料夾,裡面含有:

objectivec
firmware/ ├── components/ ├── freertos_apps/ │ └── apps/ │ └── app.c ← micro-ROS 程式寫在這裡 ├── build/ ├── CMakeLists.txt └── ...

✅ 四、撰寫 app.c 範例程式(micro-ROS 節點)

c
#include <rcl/rcl.h> #include <rclc/rclc.h> #include <std_msgs/msg/int32.h> void appMain(void *argument) { rcl_allocator_t allocator = rcl_get_default_allocator(); rclc_support_t support; rcl_node_t node; rcl_publisher_t publisher; std_msgs__msg__Int32 msg; msg.data = 0; rclc_support_init(&support, 0, NULL, &allocator); rcl_node_init_default(&node, "esp32_node", "", &support); rcl_publisher_init_default(&publisher, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32), "esp32_int"); while (1) { rcl_publish(&publisher, &msg, NULL); msg.data++; vTaskDelay(1000 / portTICK_PERIOD_MS); } }

✅ 五、建構韌體

bash
ros2 run micro_ros_setup build_firmware.sh

✅ 六、燒錄韌體至 ESP32

插入 ESP32,然後:

bash
ros2 run micro_ros_setup flash_firmware.sh

預設會找 /dev/ttyUSB0,你也可以自定:

bash
export PORT=/dev/ttyUSB1 ros2 run micro_ros_setup flash_firmware.sh

✅ 七、啟動 micro-ROS Agent on PC

在 ROS2 主機上執行:

bash
ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0

✅ 八、驗證 Topic 傳送

bash
ros2 topic list ros2 topic echo /esp32_int

你應該會看到資料遞增輸出:

kotlin
data: 0 data: 1 data: 2 ...

📦 延伸支援

功能工具 or 建議
OTA 更新使用 ESP-IDF OTA 模組
WiFi UDP 支援改用 udp 模式啟動 Agent (udp4 --port 8888)
Topic → Servo PWM 控制app.c 內加入 rcl_subscription_t 接收控制訊號
與 STM32 共同架構使用 ROS2 Agent + DDS 完成同步




沒有留言: