Ubuntu 24.04.3上ROS2 Humble完整安装与配置指南
1. 项目背景与目标最近在Ubuntu 24.04.3上进行了ROS2的完整环境测试这个组合对于机器人开发者来说是个值得关注的配置。Ubuntu 24.04作为长期支持版本提供了稳定的基础环境而ROS2则是目前机器人开发领域最热门的框架之一。我花了三天时间完整走了一遍安装、配置到基础功能测试的全流程过程中遇到了几个典型问题也总结出了一些优化配置的技巧。下面就把这次测试的详细过程和经验分享给大家特别是准备在新系统上部署ROS2的开发者。2. 环境准备与系统配置2.1 系统基础环境检查首先确认我的测试环境硬件Dell Precision 5560笔记本处理器Intel i7-11850H内存32GB存储1TB NVMe SSD系统Ubuntu 24.04.3 LTS 纯净安装在开始安装ROS2之前有几个系统级的准备工作需要完成更新系统软件包sudo apt update sudo apt upgrade -y安装基础开发工具sudo apt install build-essential cmake git python3-pip -y设置区域设置避免后续可能出现的问题sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8注意Ubuntu 24.04默认使用Wayland显示服务器但某些ROS2工具如rviz2在Xorg下表现更稳定。如果遇到图形界面问题可以切换回Xorgsudo nano /etc/gdm3/custom.conf取消注释WaylandEnablefalse这一行2.2 选择合适的ROS2版本目前ROS2有几个主要发行版可供选择Rolling Ridley滚动更新版Humble HawksbillLTS支持到2027年Iron Irwini标准版支持到2024年11月考虑到Ubuntu 24.04是较新的系统我选择了Humble版本因为它是长期支持版本稳定性有保障对Ubuntu 22.04/24.04都有良好支持社区资源丰富遇到问题容易找到解决方案3. ROS2安装与配置3.1 安装ROS2核心组件按照官方推荐的方式添加ROS2仓库并安装sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install curl -y 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 $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update sudo apt install ros-humble-desktop -y安装完成后验证核心组件source /opt/ros/humble/setup.bash ros2 --help3.2 环境变量配置为了方便使用建议将ROS2环境变量添加到bashrc中echo source /opt/ros/humble/setup.bash ~/.bashrc source ~/.bashrc同时设置一些常用环境变量echo export ROS_DOMAIN_ID0 ~/.bashrc echo export RMW_IMPLEMENTATIONrmw_cyclonedds_cpp ~/.bashrc提示ROS_DOMAIN_ID用于隔离不同的ROS2网络同一局域网内使用相同DOMAIN_ID的节点才能互相发现。3.3 安装colcon构建工具ROS2推荐使用colcon作为构建工具sudo apt install python3-colcon-common-extensions -y验证安装colcon --help4. 基础功能测试4.1 创建第一个ROS2工作空间mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build4.2 运行示例节点打开第一个终端ros2 run demo_nodes_cpp talker打开第二个终端ros2 run demo_nodes_cpp listener如果能看到talker发送消息listener接收消息说明基础通信功能正常。4.3 测试可视化工具启动rviz2rviz2如果rviz2能正常启动并显示界面说明图形子系统工作正常。5. 常见问题与解决方案5.1 图形界面卡顿或崩溃现象rviz2启动缓慢或频繁崩溃解决方案切换到Xorg显示服务器如前所述更新显卡驱动sudo ubuntu-drivers autoinstall sudo reboot降低OpenGL要求export LIBGL_ALWAYS_SOFTWARE1 rviz25.2 ROS2节点无法互相发现现象不同终端中的节点无法通信排查步骤检查环境变量echo $ROS_DOMAIN_ID确保所有终端使用相同的DOMAIN_ID检查网络配置ip addr确保所有机器在同一子网检查防火墙设置sudo ufw status必要时开放端口sudo ufw allow from 192.168.1.0/245.3 编译错误常见错误缺少依赖项解决方案rosdep install --from-paths src --ignore-src -y6. 性能优化建议6.1 使用CycloneDDS替代默认RMW虽然Humble默认使用FastDDS但CycloneDDS在某些场景下表现更好sudo apt install ros-humble-rmw-cyclonedds-cpp export RMW_IMPLEMENTATIONrmw_cyclonedds_cpp6.2 调整DDS配置创建自定义CycloneDDS配置文件nano ~/cyclonedds_config.xml内容示例CycloneDDS Domain General NetworkInterfaceAddressauto/NetworkInterfaceAddress /General Internal SocketBufferSize65536/SocketBufferSize /Internal /Domain /CycloneDDS然后设置环境变量export CYCLONEDDS_URIfile:///home/$USER/cyclonedds_config.xml6.3 使用ROS2的intra-process通信对于同一进程内的节点通信启用intra-process通信可以显著提高性能rclcpp::NodeOptions options; options.use_intra_process_comms(true); auto node std::make_sharedMyNode(options);7. 进阶功能测试7.1 测试多机通信准备两台安装好ROS2的机器在机器A上export ROS_DOMAIN_ID42 ros2 run demo_nodes_cpp talker在机器B上export ROS_DOMAIN_ID42 ros2 run demo_nodes_cpp listener7.2 测试ROS1-ROS2桥接安装桥接工具sudo apt install ros-humble-ros1-bridge ros-humble-turtlebot3-* -y启动桥接source /opt/ros/humble/setup.bash ros2 run ros1_bridge dynamic_bridge8. 开发环境配置建议8.1 VS Code配置推荐安装以下扩展ROSCCMake ToolsPython配置示例.vscode/settings.json{ cmake.configureArgs: [ -DCMAKE_BUILD_TYPEDebug ], ros.distro: humble }8.2 调试技巧使用gdb调试ROS2节点ros2 run --prefix gdb -ex run demo_nodes_cpp talker9. 系统监控与调优9.1 监控ROS2系统状态安装监控工具sudo apt install ros-humble-rqt-* -y常用监控命令ros2 topic list ros2 node info /talker ros2 topic hz /chatter9.2 性能分析工具安装系统监控工具sudo apt install htop sysstat -y使用top查看资源占用top -u $USER10. 实际项目集成测试10.1 创建自定义消息创建消息包ros2 pkg create --build-type ament_cmake my_interfaces cd my_interfaces mkdir msg定义消息msg/MyMessage.msgstring first_name string last_name uint32 age修改CMakeLists.txtfind_package(rosidl_default_generators REQUIRED) rosidl_generate_interfaces(${PROJECT_NAME} msg/MyMessage.msg )10.2 编写简单发布/订阅节点发布者示例publisher.cpp#include rclcpp/rclcpp.hpp #include my_interfaces/msg/my_message.hpp class MyPublisher : public rclcpp::Node { public: MyPublisher() : Node(my_publisher) { publisher_ this-create_publishermy_interfaces::msg::MyMessage(my_topic, 10); timer_ this-create_wall_timer( std::chrono::seconds(1), [this]() { auto message my_interfaces::msg::MyMessage(); message.first_name John; message.last_name Doe; message.age 30; publisher_-publish(message); RCLCPP_INFO(this-get_logger(), Publishing: %s %s, age %d, message.first_name.c_str(), message.last_name.c_str(), message.age); }); } private: rclcpp::Publishermy_interfaces::msg::MyMessage::SharedPtr publisher_; rclcpp::TimerBase::SharedPtr timer_; }; int main(int argc, char * argv[]) { rclcpp::init(argc, argv); rclcpp::spin(std::make_sharedMyPublisher()); rclcpp::shutdown(); return 0; }11. 持续集成配置11.1 GitHub Actions配置示例.github/workflows/ros2.ymlname: ROS2 CI on: [push, pull_request] jobs: build: runs-on: ubuntu-24.04 steps: - uses: actions/checkoutv3 - name: Install ROS2 run: | sudo apt update sudo apt install -y software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install curl -y 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 $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null sudo apt update sudo apt install -y ros-humble-desktop python3-colcon-common-extensions - name: Build run: | source /opt/ros/humble/setup.bash colcon build - name: Test run: | source /opt/ros/humble/setup.bash colcon test12. 容器化部署12.1 Dockerfile示例FROM ubuntu:24.04 # 安装基础工具 RUN apt-get update apt-get install -y \ curl \ gnupg2 \ lsb-release \ software-properties-common \ rm -rf /var/lib/apt/lists/* # 添加ROS2仓库 RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg RUN echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | tee /etc/apt/sources.list.d/ros2.list /dev/null # 安装ROS2 RUN apt-get update apt-get install -y \ ros-humble-desktop \ python3-colcon-common-extensions \ rm -rf /var/lib/apt/lists/* # 设置环境 RUN echo source /opt/ros/humble/setup.bash /root/.bashrc CMD [bash]构建并运行docker build -t ros2-humble . docker run -it --rm ros2-humble13. 性能基准测试13.1 通信延迟测试安装测试工具sudo apt install ros-humble-ros2topic -y测试命令ros2 run performance_test perf_test --reliable --keep-last --history-depth 10 -s 1 -m Array1k -n 100013.2 系统负载测试使用ros2_benchmark工具sudo apt install ros-humble-ros2-benchmark -y ros2 launch ros2_benchmark benchmark.launch.py14. 安全配置建议14.1 启用SROS2安装安全工具sudo apt install ros-humble-sros2 -y生成密钥ros2 security generate_artifacts -k keystore -e /talker /listener运行安全节点ros2 run demo_nodes_cpp talker --ros-args --enclave /talker ros2 run demo_nodes_cpp listener --ros-args --enclave /listener15. 实际应用建议经过这次完整测试我发现Ubuntu 24.04.3和ROS2 Humble的组合相当稳定适合用于实际机器人开发项目。以下是我的几点实用建议对于生产环境建议锁定软件包版本sudo apt-mark hold ros-humble-*开发过程中定期检查依赖关系rosdep check --from-paths src --ignore-src使用ccache加速编译sudo apt install ccache echo export PATH/usr/lib/ccache:$PATH ~/.bashrc对于大型项目考虑使用工作空间缓存colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPERelease这套环境我已经在三个实际机器人项目中成功应用包括一个室内导航系统和一个工业机械臂控制项目。特别是在实时性要求较高的场景下通过合理配置DDS参数能够获得令人满意的性能表现。