实战指南:RK3588 ubuntu20.04下 ROS1和ROS2共存运行配置
摘要:本文详细介绍了在RK3588芯片的Ubuntu 20.04系统中同时运行ROS1(Noetic)和ROS2(Foxy)的配置方法。通过动态切换环境变量实现两套系统的无缝切换,涵盖ROS2安装、编译工具配置、串口映射及节点运行验证等关键步骤。实测验证了该方案的可行性,为机器人开发中需要兼容ROS1/ROS2的场景提供了实用解决方案,兼顾开发灵活性与环境稳定性。
在基于 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 功能包的完整运行流程。
四、关键注意事项
- 环境切换后,需确保当前终端仅加载一套 ROS 环境,避免变量冲突;
- Colcon 编译前需确认工作空间下
src目录包含正确的 ROS2 功能包; - 串口映射需根据实际硬件路径调整(如
/dev/ttyUSB1),并确保串口权限(可通过chmod 777 /dev/ttyUSB0临时授权); - 若出现 ROS2 节点通信异常,可检查 DDS 配置(默认 CycloneDDS)与网络环境。
小结
本文通过标准化的步骤实现了 RK3588 Ubuntu20.04 环境下 ROS1 与 ROS2 的共存与切换,从基础安装到实战运行覆盖全流程。该配置方案兼顾了开发灵活性与环境稳定性,适用于需要同时适配两套 ROS 系统的机器人开发场景,所有操作均基于实测验证,可直接落地使用。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)