2. 开发环境搭建
micro-ROS是ROS 2在嵌入式领域的延伸,其开发环境横跨“上位机(PC端)”与“下位机(MCU端)”两个层面。上位机负责编译、调试、运行ROS 2代理(Agent)与可视化工具,下位机则运行实时操作系统(如FreeRTOS)与micro-ROS客户端(Client)。本章将围绕Ubuntu 22.04系统、ROS 2 Humble发行版、micro-ROS工具链、VS Code IDE以及串口调试工具五个核心组件,构建一套可复现、可排障的完整开发环境。我们不仅关注“如何安装”,更关注“安装后如何验证”以及“常见失败点如何规避”。
上图展示了micro-ROS开发环境的整体拓扑。上位机与下位机通过UART或USB建立物理连接,两者之间运行micro-ROS协议栈。在实际开发中,我们通常先搭建上位机环境,再配置下位机交叉编译工具链,最后通过串口将两者联通。下面按照“系统层 → 中间件层 → 工具链层 → 集成开发环境层”的顺序逐步展开。
2.1 安装Ubuntu 22.04 LTS:虚拟机与双系统选型
核心原理
micro-ROS的官方支持目标平台是Ubuntu 22.04(Jammy Jellyfish)搭配ROS 2 Humble。Ubuntu 22.04提供了长期维护(LTS至2027年),且与ROS 2 Humble的二进制包完全兼容。选择虚拟机还是双系统,取决于开发者的硬件资源与工作流需求。虚拟机(如VMware、VirtualBox)适合在Windows/macOS上快速体验,但存在USB串口透传延迟和实时性不足的问题;双系统则能提供完整的硬件访问权限,适合需要连接多路传感器、执行器或进行时序敏感调试的场景。
操作流程
- 虚拟机方案(推荐初学者):下载Ubuntu 22.04.3 LTS镜像,在VMware Workstation 17中创建虚拟机,分配至少4核CPU、8GB内存、60GB磁盘。安装完成后,安装VMware Tools或open-vm-tools以增强图形性能与剪贴板共享。
- 双系统方案(推荐进阶开发者):使用Rufus制作启动U盘,在BIOS中关闭Secure Boot,预留至少100GB空闲分区。安装时选择“Install Ubuntu alongside Windows”,引导加载器选择默认的GRUB。
- 系统验证:打开终端执行
lsb_release -a确认版本为22.04,执行uname -m确认架构为x86_64(或aarch64,若使用树莓派)。
风险提示:若使用虚拟机,务必在VMware设置中将“USB兼容性”设为USB 3.1,并在虚拟机菜单中连接宿主机串口设备。否则,后续micro-ROS Agent将无法识别下位机生成的串口节点(如/dev/ttyUSB0)。
案例拆解:虚拟机串口透传失败排查
某学员在VMware中运行Ubuntu,插入ESP32开发板后执行 ls /dev/ttyUSB* 无输出。排查过程如下:
- 检查宿主机设备管理器,确认驱动已安装(CP210x或CH340)。
- 在VMware菜单“虚拟机 → 可移动设备”中,将“Silicon Labs CP210x USB to UART Bridge”连接至虚拟机。
- 在Ubuntu中执行
dmesg | tail -20,看到ch341-uart或cp210x驱动加载日志。 - 若仍无设备节点,执行
sudo modprobe cp210x手动加载内核模块。
最终通过上述步骤成功识别串口。复盘经验:虚拟机环境下,USB设备过滤设置是首要检查项,其次才是驱动问题。
2.2 安装ROS 2 Humble:从软件源到环境验证
核心原理
ROS 2 Humble采用基于Debian包的二进制分发方式,依赖Python 3.10、CMake 3.22等组件。安装过程本质上是配置APT软件源、添加ROS 2 GPG密钥、安装核心包与开发工具。与ROS 1不同,ROS 2使用 rosdep 管理依赖,使用 colcon 作为构建工具,且环境变量通过 source /opt/ros/humble/setup.bash 加载。
操作流程
# 1. 设置编码
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
# 2. 添加ROS 2软件源
sudo apt install software-properties-common curl
sudo add-apt-repository universe
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 jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 3. 安装ROS 2 Humble桌面版(包含可视化工具)
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions
# 4. 配置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证方法
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| ROS 2版本 | printenv ROS_DISTRO | humble |
| 核心节点运行 | ros2 run demo_nodes_cpp talker | 周期性输出Hello World |
| 话题通信 | 另开终端执行 ros2 run demo_nodes_py listener | 收到talker发布的消息 |
| 构建工具 | colcon version-check | 显示colcon-core版本 |
经验提示:若安装过程中出现 Unable to locate package ros-humble-desktop,请检查 /etc/apt/sources.list.d/ros2.list 中的架构标识是否正确。在x86_64系统上应为 amd64,在树莓派上应为 arm64。
2.3 安装micro-ROS工具链:Agent与Client的协同构建
核心原理
micro-ROS工具链包含两个核心组件:Agent(运行于上位机,充当ROS 2与嵌入式设备之间的网关)和Client(运行于MCU,实现微端ROS 2 API)。Agent通过串口、WiFi或UDP与Client通信,将嵌入式端的消息桥接到ROS 2网络。工具链的安装分为两步:先构建Agent,再为特定MCU平台生成Client库。
操作流程
# 1. 安装依赖
sudo apt install python3-pip python3-rosdep2
sudo pip3 install catkin_pkg lark-parser colcon-common-extensions
# 2. 创建micro-ROS工作区
mkdir -p ~/microros_ws/src
cd ~/microros_ws
git clone -b humble https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
# 3. 安装micro-ROS工具链
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y
sudo apt install python3-colcon-common-extensions
colcon build
source install/local_setup.bash
# 4. 构建Agent(支持串口与UDP)
ros2 run micro_ros_setup create_agent_ws.sh
ros2 run micro_ros_setup build_agent.sh
source install/local_setup.bash
案例拆解:Agent启动与串口连接验证
假设下位机为STM32F407,通过USB转串口连接至上位机的 /dev/ttyUSB0,波特率115200。启动Agent的命令如下:
ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0 -b 115200
启动后,Agent会进入监听状态。此时若下位机Client已烧录并复位,Agent终端会输出 [info] Client connected 日志。若连接失败,常见原因包括:
- 串口权限不足:执行
sudo usermod -aG dialout $USER并重新登录。 - 波特率不匹配:确认Client端配置的UART波特率与Agent一致。
- 固件未正确初始化:检查Client是否调用了
rmw_uros_set_custom_transport函数。
通过 ros2 topic list 可看到 /micro_ros_arduino_node_publisher 等话题,说明通信链路已打通。
2.4 配置VS Code与串口调试工具
核心原理
VS Code作为轻量级IDE,通过插件机制支持ROS 2开发、远程SSH、串口监视和CMake集成。串口调试工具(如Minicom、PuTTY、VS Code的Serial Monitor插件)用于查看MCU日志、发送调试指令。配置的核心在于:将VS Code的构建任务与colcon绑定,并确保串口工具能正确识别设备节点。
操作流程
- 安装VS Code:从官网下载.deb包,执行
sudo dpkg -i code_*.deb。 - 安装必要插件:
ms-vscode.cpptools(C/C++智能提示)、ms-iot.vscode-ros(ROS 2集成)、ms-vscode.cmake-tools(CMake构建)、eamodio.gitlens(代码协作)。 - 配置ROS 2环境:在
.vscode/settings.json中添加"ROS_DISTRO": "humble",并将/opt/ros/humble/setup.bash加入终端初始化。 - 串口调试:安装
ms-vscode.serial-monitor插件,在命令面板输入Serial Monitor: Start Monitoring,选择端口与波特率。
常见误区与总结复盘
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 在Windows上直接编译micro-ROS Client | 缺少POSIX API,编译失败 | 使用WSL2或Ubuntu虚拟机 |
| 忽略串口权限 | Agent无法打开设备节点 | 将用户加入dialout组 |
| Agent与Client的UART参数不一致 | 通信超时或乱码 | 统一波特率、数据位、停止位 |
| VS Code中未source ROS 2环境 | 无法找到ros2命令 | 在tasks.json中配置shell环境 |
实战建议:在 ~/.bashrc 中追加以下内容,确保每次打开终端都能自动加载micro-ROS与ROS 2环境:
source /opt/ros/humble/setup.bash
source ~/microros_ws/install/local_setup.bash
export ROS_DOMAIN_ID=0