welcom ! Handel home

2025年4月14日 星期一

STM32F407VET6 + FreeRTOS 上移植 micro-ROS

 STM32F407VET6 + FreeRTOS 上移植 micro-ROS,這會是一個非常實用的配置,

特別適合資源有限但需要 ROS 2 通訊能力的嵌入式裝置。

以下是完整的教學、移植步驟與資源介紹,讓

你可以順利在 FreeRTOS 上跑 micro-ROS,並連接到 ROS 2 主機。


🧱 一、整體架構概念

元件說明
STM32F407VET6Cortex-M4 MCU,支援 UART、USB
FreeRTOS精簡 RTOS,適合小型 MCU
micro-ROS Client跑在 STM32 上的 ROS 2 Node
micro-ROS Agent跑在 PC 上,負責串接 DDS
Transport通常使用 UART 串列傳輸或 USB CDC(推薦)

🔧 二、開發環境準備

✅ 安裝工具鏈(在 Linux 開發主機)

bash
sudo apt install gcc-arm-none-eabi cmake python3-pip pip3 install catkin_pkg empy colcon-common-extensions

🚀 三、使用 micro-ROS 的 build system 建立專案

bash
# 建立 micro-ROS firmware workspace git clone https://github.com/micro-ROS/micro_ros_setup.git cd micro_ros_setup git submodule update --init --recursive # 初始化 firmware workspace ros2 run micro_ros_setup create_firmware_ws.sh freertos stm32f4

這會建立 firmware/ 目錄,內含:

  • freertos 作業系統

  • stm32f4 板支援設定(包含 stm32f4xx_hal 驅動)

  • micro-ROS 所需模組


⚙️ 四、設定與編譯 micro-ROS 程式

1️⃣ 設定要跑的應用(例如 int32_publisher)

bash
ros2 run micro_ros_setup configure_firmware.sh int32_publisher

2️⃣ 建構 firmware

bash
ros2 run micro_ros_setup build_firmware.sh

3️⃣ 燒錄到 STM32F407VET6

bash
st-flash write firmware/build/micro_ros_firmware.elf 0x8000000

🔧 如果使用 PlatformIO / STM32CubeIDE,也可以整合 firmware/freertos_apps/micro_ros_app 進專案


📦 五、連接 micro-ROS Agent

主機端啟動 micro-ROS Agent(透過 UART)

bash
docker run -it --rm \ --net=host \ --privileged \ -v /dev:/dev \ microros/micro-ros-agent:foxy serial --dev /dev/ttyUSB0

你應會看到:

less
[INFO] [micro_ros_agent]: Client connected [INFO] [micro_ros_agent]: Successfully negotiated session

🧪 六、觀察 ROS 資料流

透過 ros2 topic 查看資料是否傳出:

bash
ros2 topic echo /micro_ros_arduino_node_publisher

你會看到整數不斷遞增的資料流。


📂 七、自訂專案架構參考

swift
firmware/ ├── freertos_apps/ └── micro_ros_app/ ├── app.c <- 你的主程式 (pub/sub/init) └── CMakeLists.txt ├── freertos/ └── ... ├── middleware/ ├── toolchain/ ├── build/ └── ...

你可以修改 app.c 加入你自己的控制邏輯與 ROS topic。


📚 八、學習資源與官方支援

資源說明
🔗 micro-ROS 官方教學全平台架構概念與快速上手
🔗 micro_ros_setupROS 2 工具鏈整合建構
🔗 STM32F4 supportSTM32F4 HAL 移植結構
🔗 freertos_apps 應用範例Publisher、Subscriber、Timer 範例
📖 FreeRTOS 官方網站任務、佇列、資源管理等教學

🎯 九、micro-ROS 在 STM32F407VET6 + FreeRTOS 上的實作要點

要點說明
UART 傳輸預設使用 USART2,可在 platform.c 中修改
HAL 設定使用 STM32Cube HAL 驅動初始化
main() 位置app.c 中實作,或由 micro-ROS 自動注入
ROS 介面使用 rclc API 撰寫 Publisher / Subscriber
可裁切性可裁減掉不必要的中介層節省 Flash

✅ 延伸功能

你可以在 micro-ROS 中整合:

  • IMU 資料串接 → /imu/data

  • 馬達命令訂閱 → /cmd_vel

  • STM32 GPIO 控制 → 透過 ROS 介面驅動硬體

沒有留言: