Ubuntu 24.04.3上ROS2 Humble完整安装与配置指南

发布时间:2026/11/2 23:50:07

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参数能够获得令人满意的性能表现。
延伸阅读

更多相关文章

2026/10/31 19:31:57

陶哲轩用ChatGPT探讨雅可比猜想:AI数学推理能力边界分析

这次我们来看一个很有意思的案例:著名数学家陶哲轩使用ChatGPT讨论雅可比猜想反例的对话。这个案例展示了顶尖数学家如何将AI工具应用于前沿数学研究,也揭示了ChatGPT在复杂数学问题上的能力边界。雅可比猜想是代数几何中的一个著名未解决问题&#xff0…

2026/10/29 0:32:53

NLP谎言检测技术在AI客服测试中的应用实践

1. 项目背景与核心挑战在软件测试领域,我们经常需要处理各种边界条件和异常场景。但有一种特殊场景长期被忽视——人类交流中的非字面表达。当测试工程师尝试用自然语言与AI系统交互时,常常发现系统对反讽、夸张或社交性谎言的理解存在严重偏差。去年我在…

2026/10/26 19:49:07

C++数组深度解析:从内存模型到安全访问与实战技巧

1. 从“盒子”到“利器”:为什么C数组值得你深究刚接触C那会儿,数组给我的感觉就像一排整齐的鞋盒。你知道它能装东西,知道第一个盒子是0号,最后一个盒子是n-1号,老师教的、书上写的,似乎就这么简单。直到后…

2026/11/2 23:49:38

C# SSH连接模块拆解:基于SSH.NET的半成品封装与二次开发指南

简介:这是一份基于C#实现的SSH连接功能项目源码,源自作者另一项目中的子功能模块,目前处于半成品阶段,适合有一定WinForms开发基础、想学习或借鉴SSH通信实现的开发者参考。资源包共70个文件,约7.39MB,包含…

2026/11/2 23:49:38

技术认证UGC社区:构建高效备考生态的实践

1. 项目背景与核心价值技术认证备考社区作为垂直领域的内容平台,其用户生成内容(UGC)模式直接影响着知识传播效率和用户粘性。"证书攻略大作战"这个案例典型地呈现了认证备考场景下UGC生态的三大特征:结构化知识沉淀、实…

2026/11/2 23:49:38

团队协作中的文风对齐:方法与工具解析

1. 项目背景:团队写作中的"合成兽"困境去年参与某跨国合作项目时,我们五个人合写一份技术方案,交稿后被客户委婉指出:"内容扎实但读起来像拼凑品"。翻看文档发现:有人爱用长难句堆砌术语&#xff…

2026/11/2 23:49:38

论文写作格式自动化工具Paperxie的核心功能与应用

1. 论文写作的痛点与破局思路 第一次投期刊的新手研究者,往往会在格式要求这个环节栽跟头。我见过太多案例:耗时三个月完成的优质论文,因为行距差了0.5倍、参考文献格式不符等细节问题被直接退稿。更令人抓狂的是,不同期刊的格式规…

2026/11/2 23:49:38

Kafka性能优化实战:从原理到调优策略

1. Kafka性能优化的重要性与挑战在大数据生态系统中,Kafka作为分布式消息队列的核心组件,其性能直接影响着整个数据处理管道的吞吐量和延迟。我曾参与过一个日均处理20亿条日志的监控系统项目,最初由于Kafka配置不当,经常出现消息…

2026/11/2 23:44:38

C++实现LeetCode(769.可排序的最大块数)

前言 LeetCode 第 769 题「最多能完成排序的块」给一个长度为 n 的数组,它是 0 到 n-1 的一个排列。要求把数组切成尽量多的连续块,对每块单独排序后,按原顺序拼接起来,结果等于整个数组升序排列。 题目的关键约束是「排列」&…

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑