发布时间:2026/7/26 4:34:42
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/7/26 4:34:42

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

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

2026/7/26 4:34:42

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

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

2026/7/26 4:34:42

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

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

2026/7/26 6:54:50

AI辅助工具如何提升职称论文写作效率

1. 论文写作效率革命:AI辅助工具的价值解析职称论文写作向来是职场人士晋升路上的关键挑战。从选题构思到文献综述,从数据分析到格式排版,每个环节都需要投入大量时间精力。而AI写作工具的兴起,正在改变这一传统工作模式。我作为科…

2026/7/26 6:54:50

Python爬虫进阶:TLS指纹伪装与请求头优化实战指南

1. 项目概述:为什么现代爬虫必须关注TLS指纹与请求头如果你还在用requests.get()加上一个简单的User-Agent就以为能畅通无阻地爬取数据,那你的爬虫可能早就被目标网站标记、限流甚至直接封禁了。今天要聊的,是爬虫工程师进阶路上必须翻越的两…

2026/7/26 6:54:50

Cisco无线控制器证书过期导致AP批量离线:诊断与根治方案

1. 项目概述与问题定位最近在维护一套老旧的Cisco无线控制器(WLC)和接入点(AP)网络时,碰到了一个相当典型但又容易让人头疼的问题:一批AIR-CT2504-15-K9控制器下的AP,突然集体“失联”&#xff…

2026/7/26 6:54:50

C/C++项目构建实战:从编译链接原理到CMake跨平台配置

1. 项目概述:从“自用笔记”到系统性工程认知 最近在整理自己过去几年写C/C项目时攒下的各种零散笔记,发现里面充斥着各种关于编译、链接、CMake配置、目标平台(比如恼人的x86_amd64)的报错和临时解决方案。这些笔记当初只是为了快…

2026/7/26 6:54:50

OpenClaw:AI自主编程开源项目的核心技术解析

1. 项目概述:当AI开始自己写代码最近在GitHub上发现一个叫OpenClaw的项目,看完代码后我整晚没睡着——这可能是目前最接近"AI自主编程"的开源实现。它不像常规的AI辅助编程工具那样只是补全代码片段,而是能够完整理解需求文档&…

2026/7/26 6:49:50

分享学习C语言代码思维和逻辑第四次记录

这是皮皮虾练习C语言代码的思维和逻辑学的是C语言今天皮皮虾给大家分享的是判断三角形的类型并输出面积,这里皮皮虾还添加了等腰直角三角形因为在数学中无法用三条整型的边长表示一个等腰直角三角形,所以我们这里用到浮点数和极小值EPS然而为什么用浮点数要用到极小…

2026/7/26 0:03:36

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/26 0:03:36

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/26 2:45:59

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…