1. 为什么要在STM32上跑ROS2?聊聊micro_ros
如果你玩过机器人,肯定听说过ROS(机器人操作系统)。它就像机器人的“安卓系统”,把各种传感器、电机、算法模块用“话题”、“服务”这些方式连接起来,让开发变得像搭积木。但传统的ROS2主要跑在像树莓派、Jetson这类性能不错的Linux电脑上。那我们的STM32单片机呢?它资源有限,没操作系统或者只有轻量级的RTOS(比如FreeRTOS),直接上ROS2根本吃不消。
这时候,micro_ros就登场了。你可以把它理解为ROS2的“青春版”或“嵌入式特供版”。它由ROS2官方团队维护,核心目标就是把ROS2的通信框架(DDS)和中间件精简、优化,让它能塞进资源紧张的微控制器里,比如我们的STM32F407。这意味着什么?意味着你的STM32传感器数据可以直接发布成ROS2话题,也能直接订阅ROS2的控制指令,和上位机(比如跑着Ubuntu和ROS2的电脑)无缝对话。以前你可能需要自己定义串口协议,上位机解析,麻烦还容易出错。现在,直接用ROS2那套成熟、标准的通信机制,开发效率和质量都提升一大截。
我当初决定在STM32F407上集成micro_ros,就是看中了这种“原生”的互联能力。我的项目里,STM32负责读取多个传感器(IMU、编码器)并控制电机,而上位机负责运行SLAM和导航算法。用了micro_ros之后,STM32直接把传感器数据打包成标准的sensor_msgs/Imu、nav_msgs/Odometry消息发布出去,上位机直接订阅使用;同时订阅geometry_msgs/Twist速度指令来控制电机。整个数据流清晰、标准,调试也方便,用ros2 topic echo就能看数据,用rqt_graph能看到整个通信拓扑,非常舒服。
当然,天下没有免费的午餐。micro_ros会占用一定的Flash和RAM,并且需要你提供一个稳定的传输层(比如UART、USB CDC、CAN等)。但对于STM32F407这种拥有192KB RAM和1MB Flash的“大容量”MCU来说,跑起来是绰绰有余的。接下来,我就手把手带你走一遍在STM32CubeIDE里集成micro_ros的完整流程,我会把每一步的原理、我踩过的坑和解决方案都讲清楚,保证你也能顺利上车。
2. 搭建你的micro_ros“后方基地”:Ubuntu环境准备
玩转micro_ros,你得有个“大本营”,也就是运行标准ROS2和micro_ros Agent的Linux环境。我强烈推荐在Windows下用虚拟机(如VMware或VirtualBox)安装Ubuntu 22.04,这是目前最稳定、资料最全的方案。别在Windows上折腾WSL,串口设备映射和网络配置的坑能让你怀疑人生。
第一步,安装ROS2 Humble。 这是目前(截至我写这篇文章时)的长期支持版本,和micro_ros兼容性最好。打开Ubuntu终端,依次执行下面这些命令。别怕,我每条都加了注释,告诉你它在干嘛。
# 1. 设置locale,确保语言支持正确,避免后续软件包安装出错
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
# 2. 添加ROS2的软件源
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 3. 安装ROS2 Humble桌面版(包含核心工具、教程和GUI工具,推荐)
sudo apt update
sudo apt install ros-humble-desktop
# 4. 配置环境变量,让终端认识ROS2命令
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装完成后,开个新终端,输入ros2 --version,能看到版本号就说明ROS2安装成功了。
第二步,部署micro_ros构建系统。 这个系统是用来干嘛的?它最主要的功能是帮你编译生成STM32可以用的micro_ros静态库。我们不需要在单片机上跑庞大的构建系统,只需要它产出的那个.a库文件和一些头文件。创建工作空间并拉取代码:
# 创建一个专门的工作空间目录,叫microros_ws
mkdir -p ~/microros_ws/src
cd ~/microros_ws
# 拉取micro_ros的安装和配置工具代码
git clone -b humble https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
# 更新系统包并安装依赖(这里用rosdepc,是国内的镜像工具,速度飞快)
sudo apt update
sudo apt install python3-pip
sudo pip install rosdepc
sudo rosdepc init
rosdepc update
cd src
rosdepc install --from-paths . --ignore-src -y
# 回到工作空间根目录,编译工具
cd ~/microros_ws
colcon build
source install/local_setup.bash
这一步如果卡在


410

被折叠的 条评论
为什么被折叠?



