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 开发环境双机拓扑与工具链链路 上位机(PC / 虚拟机) Ubuntu 22.04 LTS ROS 2 Humble micro-ROS Agent VS Code + 插件 串口调试工具 colcon / CMake 下位机(MCU 开发板) MCU (STM32/ESP32) Cortex-M / Xtensa FreeRTOS micro-ROS Client UART / USB-CDC 传感器 / 执行器 / 自定义外设 UART/USB Micro-ROS协议 关键链路说明 ① 上位机通过 colcon 构建 micro-ROS Agent,下位机通过 CMake 交叉编译 Client 固件。 ② 串口工具用于烧录固件、查看日志、监控 Agent-Client 通信质量。 ③ VS Code 提供远程开发、串口监视、CMake 集成,提升调试效率。

上图展示了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串口透传延迟和实时性不足的问题;双系统则能提供完整的硬件访问权限,适合需要连接多路传感器、执行器或进行时序敏感调试的场景。

操作流程

  1. 虚拟机方案(推荐初学者):下载Ubuntu 22.04.3 LTS镜像,在VMware Workstation 17中创建虚拟机,分配至少4核CPU、8GB内存、60GB磁盘。安装完成后,安装VMware Tools或open-vm-tools以增强图形性能与剪贴板共享。
  2. 双系统方案(推荐进阶开发者):使用Rufus制作启动U盘,在BIOS中关闭Secure Boot,预留至少100GB空闲分区。安装时选择“Install Ubuntu alongside Windows”,引导加载器选择默认的GRUB。
  3. 系统验证:打开终端执行 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_DISTROhumble
核心节点运行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绑定,并确保串口工具能正确识别设备节点。

操作流程

  1. 安装VS Code:从官网下载.deb包,执行 sudo dpkg -i code_*.deb。
  2. 安装必要插件:ms-vscode.cpptools(C/C++智能提示)、ms-iot.vscode-ros(ROS 2集成)、ms-vscode.cmake-tools(CMake构建)、eamodio.gitlens(代码协作)。
  3. 配置ROS 2环境:在 .vscode/settings.json 中添加 "ROS_DISTRO": "humble",并将 /opt/ros/humble/setup.bash 加入终端初始化。
  4. 串口调试:安装 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