在基于 RK3588 芯片的 Ubuntu20.04 环境中,同时运行 ROS1(Noetic)和 ROS2(Foxy)是机器人开发中常见的需求。本文将从环境搭建、兼容配置、编译运行等维度,手把手教你实现两套 ROS 系统的无缝切换与稳定运行,所有操作均经过实测验证。

一、基础环境搭建

1.1 ROS2 Foxy 安装配置

首先完成 ROS2 Foxy 的基础安装,确保软件源与系统环境匹配:

步骤 1:添加 ROS2 软件源

将 ROS2 官方源写入系统 sources.list,保证包管理工具能正确索引:

sudo sh -c 'echo "deb http://packages.ros.org/ros2/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros2-latest.list'
步骤 2:配置验证密钥

导入 ROS 官方密钥,避免安装过程中出现权限或校验错误:

curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
步骤 3:更新包索引并安装完整版本

更新本地包缓存后,安装 ROS2 Foxy 桌面完整版,包含核心组件与可视化工具:

sudo apt update
sudo apt install ros-foxy-desktop
步骤 4:配置环境变量(临时)

将 ROS2 环境变量注入当前 bash 会话,后续会整合到兼容配置中:

echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc
步骤 5:安装验证

通过经典的 turtlesim 例程验证安装是否成功,启动海龟仿真节点与键盘控制节点:

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

若能正常显示海龟窗口并通过键盘控制移动,说明 ROS2 基础环境搭建完成。

1.2 ROS1 Noetic 前置说明

本文默认你已完成 ROS1 Noetic 的基础安装(含 catkin_ws 工作空间配置),若未安装可参考 ROS 官方文档,核心需保证/opt/ros/noetic/setup.bash~/catkin_ws/devel/setup.bash路径有效。

二、核心配置:ROS1/ROS2 动态切换

直接同时加载两套 ROS 环境会导致环境变量冲突,因此需修改.bashrc文件,实现终端启动时手动选择运行的 ROS 版本。

步骤 1:编辑.bashrc 文件

sudo vim ~/.bashrc

步骤 2:注释原有 ROS 环境配置

将文件末尾已存在的 ROS1/ROS2 环境加载语句注释,避免自动加载,详见步骤3。

步骤 3:添加动态选择逻辑

插入以下脚本,实现终端启动时交互式选择 ROS 版本,并加载对应环境变量:

#source /opt/ros/noetic/setup.bash
#source ~/catkin_ws/devel/setup.bash
#export PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
#source /opt/ros/foxy/setup.bash
#ROS环境变量动态切换配置
echo "ROS noetic (1) or ROS2 foxy (2)?"
read edition
if ["$edition" -eq "1" ]; then
        source /opt/ros/noetic/setup.bash
        source /home/orangepi/catkin_ws/devel/setup.bash

        echo using ros noetic

else
        source /opt/ros/foxy/setup.bash
        export INIT_SERVO_S1=90
        export INIT_SERVO_S2=90
        echo using ros2 foxy
fi

配置验证

重启终端后,会出现版本选择提示:

  • 输入1,终端输出Using ROS Noetic,即加载 ROS1 环境;
  • 输入2,终端输出Using ROS2 Foxy,即加载 ROS2 环境。

三、ROS2 项目编译与运行

3.1 安装 Colcon 编译工具

ROS2 使用 Colcon 替代 ROS1 的 Catkin,需先安装编译依赖:

sudo apt install python3-colcon-common-extensions
sudo apt install python3-pip

3.2 编译 ROS2 工作空间

进入 ROS2 工作空间根目录,执行编译命令:

colcon build

3.3 串口映射(硬件适配)

为避免串口路径变动导致程序异常,将物理串口/dev/ttyUSB0映射为固定别名/dev/myserial

# 删除无效软链接(无则跳过)
sudo rm -f /dev/myserial 
# 创建固定映射
sudo ln -s /dev/ttyUSB0 /dev/myserial 
# 验证映射结果
ls -l /dev/myserial

若需免密执行映射(避免重复输入密码),可使用:

echo orangepi | sudo -S ln -s /dev/ttyUSB0 /dev/myserial

3.4 运行 ROS2 节点与话题验证

步骤 1:启动驱动节点
source install/setup.sh
ros2 run yahboomcar_bringup Mcnamu_driver_M1
步骤 2:查看话题列表

新开终端(加载 ROS2 环境),执行:

ros2 topic list

正常输出应包含:/buzzer/rgb_light/servo/cmd_vel/imu/data_raw/imu/mag等核心话题。

步骤 3:订阅 IMU 磁力计数据
ros2 topic echo /imu/mag

可实时查看 IMU 磁力计原始数据,示例输出:

header:
  stamp:
    sec: 1767171350
    nanosec: 840904689
  frame_id: imu_link
magnetic_field:
  x: -15.887
  y: 21.137
  z: -8.699
magnetic_field_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

3.5 启动手柄控制节点

source install/setup.sh
ros2 launch yahboomcar_ctrl yahboomcar_joy_launch.py

启动后可通过手柄实现对机器人的运动控制,验证 ROS2 功能包的完整运行流程。

四、关键注意事项

  1. 环境切换后,需确保当前终端仅加载一套 ROS 环境,避免变量冲突;
  2. Colcon 编译前需确认工作空间下src目录包含正确的 ROS2 功能包;
  3. 串口映射需根据实际硬件路径调整(如/dev/ttyUSB1),并确保串口权限(可通过chmod 777 /dev/ttyUSB0临时授权);
  4. 若出现 ROS2 节点通信异常,可检查 DDS 配置(默认 CycloneDDS)与网络环境。

小结

本文通过标准化的步骤实现了 RK3588 Ubuntu20.04 环境下 ROS1 与 ROS2 的共存与切换,从基础安装到实战运行覆盖全流程。该配置方案兼顾了开发灵活性与环境稳定性,适用于需要同时适配两套 ROS 系统的机器人开发场景,所有操作均基于实测验证,可直接落地使用。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐