告别ROS1的坑!在Ubuntu 20.04上从零搭建ROS2 Dashing开发环境(含ROS1/ROS2共存配置)

张开发
2026/5/30 9:34:13 15 分钟阅读
告别ROS1的坑!在Ubuntu 20.04上从零搭建ROS2 Dashing开发环境(含ROS1/ROS2共存配置)
告别ROS1的坑在Ubuntu 20.04上从零搭建ROS2 Dashing开发环境含ROS1/ROS2共存配置机器人操作系统ROS已经走过了十多年的发展历程而ROS2的诞生正是为了解决ROS1在工业级应用中暴露出的诸多痛点。如果你曾经被ROS1的单Master架构、实时性不足、安全性问题困扰过那么现在是时候拥抱ROS2了。本文将带你从零开始在Ubuntu 20.04上搭建ROS2 Dashing开发环境同时实现与ROS1 Melodic的完美共存。1. 为什么选择ROS2从ROS1的痛点说起ROS1无疑是机器人开发领域的里程碑它让硬件和软件的集成变得前所未有的简单。但当我们试图将其应用于更复杂的场景时它的局限性就变得明显单Master架构在多机器人系统中ROS1的集中式架构成为瓶颈实时性不足无线网络下的数据延迟和丢失问题难以解决安全性缺失任何连接到Master的节点都能自由访问和修改话题跨平台支持有限对Windows和实时操作系统RTOS的支持较弱ROS2通过引入DDS数据分发服务作为底层通信中间件从根本上解决了这些问题。DDS提供了去中心化架构支持真正的分布式系统QoS控制可配置的通信质量策略强安全性内置认证和加密机制跨平台支持从微控制器到服务器都能良好运行提示Dashing是ROS2的第三个长期支持LTS版本特别适合需要稳定性的生产环境。2. 准备工作Ubuntu 20.04基础配置在开始安装ROS2之前我们需要确保系统环境配置正确。以下步骤将为你打下坚实的基础2.1 系统更新与区域设置首先更新软件包列表并升级已安装的软件sudo apt update sudo apt upgrade -yROS2对UTF-8编码有严格要求设置正确的localesudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-82.2 添加ROS2软件源添加ROS2的APT仓库和密钥sudo apt install curl gnupg2 lsb-release curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo sh -c echo deb [archamd64,arm64] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main /etc/apt/sources.list.d/ros2-latest.list3. ROS2 Dashing完整安装指南现在我们可以开始安装ROS2 Dashing了。根据你的需求有两种安装选项3.1 桌面版安装推荐桌面版包含ROS2核心、RViz、演示程序和各种教程工具sudo apt install ros-dashing-desktop3.2 基础版安装如果只需要通信库和命令行工具可以选择基础版sudo apt install ros-dashing-ros-base安装完成后设置环境变量source /opt/ros/dashing/setup.bash echo source /opt/ros/dashing/setup.bash ~/.bashrc3.3 安装命令行自动补全为了方便使用安装argcomplete工具sudo apt install python3-argcomplete3.4 可选安装其他DDS实现ROS2支持多种DDS实现可以根据需要安装sudo apt install ros-dashing-rmw-opensplice-cpp # OpenSplice sudo apt install ros-dashing-rmw-connext-cpp # RTI Connext需要许可证4. ROS1与ROS2共存配置很多开发者需要同时使用ROS1和ROS2下面介绍如何实现两者的无缝切换。4.1 安装ROS1 Melodic如果你还没有安装ROS1可以先安装Melodicsudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-melodic-desktop-full4.2 安装ros1_bridgeros1_bridge包允许ROS1和ROS2节点相互通信sudo apt install ros-dashing-ros1-bridge4.3 环境变量切换方案为了避免环境变量冲突我们可以创建一个智能切换脚本。编辑~/.bashrc文件添加以下内容function set_ros_env() { echo 请选择ROS版本 echo 1) ROS1 Melodic echo 2) ROS2 Dashing read -p 输入选择(1/2): ros_version case $ros_version in 1) source /opt/ros/melodic/setup.bash echo 已切换到ROS1 Melodic环境 ;; 2) source /opt/ros/dashing/setup.bash echo 已切换到ROS2 Dashing环境 ;; *) echo 无效选择保持当前环境 ;; esac } alias rosenvset_ros_env现在每次打开新终端时只需输入rosenv并选择对应的ROS版本即可。5. 验证安装与基础测试让我们通过几个简单的例子来验证安装是否成功。5.1 ROS2基础通信测试打开两个终端分别运行# 终端1 ros2 run demo_nodes_cpp talker # 终端2 ros2 run demo_nodes_cpp listener你应该能看到talker发送消息listener接收并打印这些消息。5.2 小海龟仿真测试ROS经典的小海龟演示在ROS2中同样可用# 终端1 ros2 run turtlesim turtlesim_node # 终端2 ros2 run turtlesim turtle_teleop_key5.3 ROS1与ROS2桥接测试首先启动ROS1的roscoreroscore然后启动ros1_bridgeros2 run ros1_bridge dynamic_bridge现在你可以在ROS1和ROS2之间转发消息了。6. 开发工具与工作区配置现代ROS2开发推荐使用colcon作为构建工具下面介绍如何配置开发环境。6.1 安装colcon构建工具sudo apt install python3-colcon-common-extensions6.2 创建工作区并编译mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build6.3 常用colcon命令命令描述colcon build构建所有包colcon build --packages-select pkg构建指定包colcon test运行测试colcon list列出工作区中的包7. 常见问题与解决方案在实际安装和使用过程中你可能会遇到以下问题7.1 依赖问题如果遇到依赖缺失可以尝试rosdep install --from-paths src --ignore-src -r -y7.2 编译警告CMake警告如CATKIN_INSTALL_INTO_PREFIX_ROOT通常可以忽略它们是由于兼容性考虑而保留的。7.3 网络问题由于某些ROS包托管在GitHub上国内用户可能会遇到下载缓慢的问题。可以考虑使用代理更换国内镜像源手动下载并放置到正确位置7.4 环境变量冲突如果遇到奇怪的命令行为检查是否有多个ROS版本的环境变量被同时source。确保每次只激活一个ROS版本。8. 进阶配置与优化为了让开发体验更顺畅这里有一些进阶建议8.1 自定义RMW实现默认情况下ROS2使用FastRTPS作为DDS实现。你可以通过设置环境变量来切换export RMW_IMPLEMENTATIONrmw_opensplice_cpp # 或 export RMW_IMPLEMENTATIONrmw_connext_cpp8.2 性能调优对于实时性要求高的应用可以调整DDS的QoS策略。创建一个ros2_qos_profiles.xml文件qos_profile namehigh_performance xmlnshttp://www.omg.org/spec/DDS-SECURITY/20170901 datawriter qos reliability kindRELIABLE/kind /reliability durability kindTRANSIENT_LOCAL/kind /durability /qos /datawriter /qos_profile然后通过环境变量指定export RMW_FASTRTPS_USE_QOS_FROM_XML1 export FASTRTPS_DEFAULT_PROFILES_FILEros2_qos_profiles.xml8.3 IDE集成对于大型项目推荐使用支持ROS2的IDEVSCode安装ROS插件Qt Creator配置ROS2工具链CLion通过插件支持ROS2开发9. 从ROS1迁移到ROS2的注意事项如果你有现有的ROS1项目想要迁移到ROS2需要考虑以下几点API变化许多ROS1的API在ROS2中有变化或替代方案构建系统从catkin迁移到ament通信模式理解DDS与ROS1 Master的区别工具链熟悉新的命令行工具如ros2 vs rosrun建议从简单的节点开始逐步迁移而不是一次性重写整个系统。10. 学习资源与社区支持ROS2的学习曲线可能比ROS1更陡峭但有许多优质资源可以帮助你官方文档https://index.ros.org/doc/ros2/ROS2维基https://wiki.ros.org/ROS2GitHub仓库https://github.com/ros2问答社区https://answers.ros.org在实际项目中我发现从简单的demo开始逐步增加复杂度是最有效的学习方式。ROS2的模块化设计让这种渐进式学习成为可能。

更多文章