micro-ROS

micro-ROS 是针对微控制器(MCU)专门优化的 ROS 2 的一个版本。它允许开发者在资源受限的设备上运行 ROS2 节点,促进传统机器人系统与物联网传感器和设备之间的互操作性。这一能力对于在低功耗和实时性能至关重要的环境中部署机器人应用至关重要。
其架构如下:
我的理解,micro-ROS 在 MCU(如 esp32s3)中运行,实现网络及底层控制等;PC 上运行 micro-ros-agent 代理 MCU 与 ROS 系统通信;各种逻辑及应用控制在 PC 中实现,如此减轻 MCU 压力,MCU 只需要驱动及通信实现即可。
Espressif ESP32
官网上列出已经支持的硬件列表,其中包括 ESP32,下面记录一下安装及测试过程。
测试硬件及配置:
- MCU:ESP32-S3
- PC:Ubuntu 24.04 & ROS2 jazzy & docker
- Network:MCU & PC 处于同一网段可互通
安装
准备环境:
安装推荐版本的 ESP-IDF,在 shell 中激活组件,如下:
# 若不想使用系统默认环境,可以创建一个虚拟环境
python3 -m venv ~/my_ros_env
source ~/my_ros_env/bin/activate
# 激活 ESP-IDF
export IDF_PATH=/xxx/esp/v5.2.6/esp-idf
export IDF_TOOLS_PATH=/xxx/esp/.espressif
source $IDF_PATH/export.sh
# 安装必要的 python 插件
pip3 install catkin_pkg lark-parser colcon-common-extensions empy==3.3.4
编译项目:
在 github 上下载需要的 micro_ros_espidf_component 分支代码,如我 PC 上安装的 ROS2 jazzy 版本,micro_ros_espidf_component 也选择 jazzy 分支。
克隆 micro_ros_espidf_component 代码,其中自带例子可以测试及编译。(注意科学上网,编译会下载其他库,下载失败会导致编译失败)
# 网络问题配置代理
git config --global http.proxy http://127.0.0.1:xxxx
git config --global https.proxy https://127.0.0.1:xxxx
# 打开用例文件夹
cd examples/int32_publisher
# 配置 mcu 型号,我使用 esp32s3
idf.py set-target esp32s3
# 尝试编译
idf.py build
# 想要清除缓存,可在 micro_ros_espidf_component 下执行
make -f libmicroros.mk clean
失败时可检查 build/log 下日志文件
测试
可使用 VSCode 打开用例 examples/int32_publisher 文件夹。
配置参数:
- Wifi:配置 Wifi 名称及密码(与 PC 同网段)
- Agent:配置代理及端口(PC IP & PORT)
启动 Agent:
docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm --privileged --net=host microros/micro-ros-agent:jazzy udp4 --port 8090 -v4
PC Docker 启动网络和端口需与 ESP32 配置一致(如上我使用的是 8090 端口)
![]()
启动 MCU:
VSCode 用例编译下载及启动:
连接成功后,Agent 会显示如下信息:
ROS2 节点测试:
ROS_DOMAIN_ID 使用默认值
查看节点列表:
ros2 node list

查看详细信息:
ros2 node info /esp32_int32_publisher

订阅节点:
ros2 topic echo /freertos_int32_publisher

ros2 topic hz /freertos_int32_publisher
