Ubuntu 22.04.5安装ROS2 Humble:鱼香ROS一键部署实战指南
发布时间:2026/9/26 23:22:53 锦皓数字建站

1. 项目概述为什么在Ubuntu 22.04.5上用鱼香ROS装ROS2 Humble是当前最稳的入门路径你刚下载完Ubuntu 22.04.5 LTS镜像双击安装完成桌面一亮心里盘算着“接下来该装ROS2了。”可刚打开终端敲下sudo apt update就发现网络卡顿、源地址超时想照着官网教程手动添加ROS2仓库结果curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -这行命令直接报错——因为Ubuntu 22.04.5默认已弃用apt-key而ROS官方文档还没同步更新更别提国内用户常遇到的“ubuntu22.04.5 找不到wifi”问题连基础联网都成障碍还怎么跑apt install ros-humble-desktop这时候鱼香ROS不是锦上添花的玩具而是救命稻草。它本质是一套由国内ROS社区开发者长期维护的、专为Ubuntu 22.04.5深度适配的自动化部署工具链核心价值在于把ROS2 Humble安装中所有“隐性门槛”全部封装掉自动切换清华/中科大/阿里云三重镜像源、智能识别并修复apt-key废弃问题、预置gpg密钥导入新流程、内置rosdep init与rosdep update的断点续传逻辑、甚至能绕过ubuntu安装gcc失败这类底层编译环境冲突。我去年带6个本科毕设小组实测纯新手从零开始在VMware虚拟机里装Ubuntu 22.04.5到成功运行ros2 run demo_nodes_cpp talker平均耗时23分钟——其中21分钟在等系统更新和下载真正需要人工干预的操作只有3步复制粘贴命令、输入一次密码、回车确认。这不是“一键安装”的营销话术而是把ROS2安装过程中所有可能让初学者卡住的“毛刺”全打磨平了。尤其当你看到热搜词里反复出现“ros2菜鸟教程”“ros2安装教程”“鱼香ros一键安装步骤”说明这不是小众需求而是整个ROS2中文学习圈的集体痛点。鱼香ROS解决的从来不是技术复杂度而是认知负荷——它让你在第一次接触ROS2时注意力能100%聚焦在node、topic、publisher这些核心概念上而不是和GPG error、Failed to fetch、E: Unable to locate package搏斗。2. 鱼香ROS工具链深度拆解它到底做了什么为什么比官方流程更可靠2.1 鱼香ROS不是单个脚本而是一套分层协作的工程化方案很多人误以为“鱼香ROS”就是GitHub上那个install_ros2.sh文件其实这是对工具链结构的严重低估。真正的鱼香ROS由三层组成基础环境层 → ROS2核心层 → 开发增强层。每一层都针对Ubuntu 22.04.5的特定缺陷做了加固。基础环境层这是最容易被忽略却最关键的环节。Ubuntu 22.04.5默认使用systemd-resolved管理DNS但很多校园网或企业内网DNS服务器不兼容其EDNS协议导致apt update时大量Could not resolve packages.ros.org错误。鱼香ROS在执行任何ROS操作前会先运行sudo systemctl disable systemd-resolved sudo systemctl stop systemd-resolved并改写/etc/resolv.conf为直连DNS如nameserver 114.114.114.114这个动作看似简单却直接规避了87%的新手首次安装失败案例。同时它会检测/usr/bin/python3是否软链接到python3.10Ubuntu 22.04.5默认版本若发现指向python3.11某些用户手动升级过则自动重建链接——因为ROS2 Humble的rosdep模块在Python 3.11下存在importlib.metadata兼容性问题会导致后续rosdep update静默失败。ROS2核心层这里彻底重构了官方安装流程。官方要求用户手动执行sudo apt install curl gnupg lsb-release再curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo gpg --dearmor -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 $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null。鱼香ROS将这三步压缩为一个原子操作它先校验本地/usr/share/keyrings/目录权限Ubuntu 22.04.5默认该目录属主为root:root且权限为755但某些Docker镜像会改为700导致gpg --dearmor失败再用sudo install -o root -g root -m 644 /dev/stdin /usr/share/keyrings/ros-archive-keyring.gpg确保密钥文件写入安全最后用printf而非echo生成sources.list避免echo在某些shell中处理反斜杠异常。这种对Linux底层细节的敬畏是它稳定性的根基。开发增强层装完ROS2只是起点。鱼香ROS默认集成colcon构建工具替代过时的catkin_make并预配置~/.bashrc中的source /opt/ros/humble/setup.bash和source /opt/ros/humble/local_setup.bash双加载机制——后者确保用户在工作空间内执行colcon build后新编译的包能立即被ros2 node list识别无需手动source install/setup.bash。更关键的是它内置rviz2的Qt平台插件修复逻辑Ubuntu 22.04.5的libxcb-xinerama0库版本与RViz2 12.2.0存在ABI不兼容导致启动白屏。鱼香ROS会自动检测并安装libxcb-xinerama01.14-3ubuntu1精确版本这个细节连ROS2官方Issue Tracker里都讨论了半年才确认根因。2.2 为什么必须用鱼香ROS而不是直接apt install ros-humble-desktop这个问题的答案藏在Ubuntu 22.04.5的软件包生命周期里。ROS2 Humble的官方Debian包由ROS基金会托管在packages.ros.org其构建环境基于Ubuntu 22.04.1的内核和GCC版本。但Ubuntu 22.04.5作为LTS的第五次点版本更新已将内核升级至5.15.0-122-genericGCC升级至11.4.0而ROS2 Humble的二进制包未做相应适配。典型症状是apt install ros-humble-desktop能成功但运行ros2 run demo_nodes_py listener时抛出ImportError: /lib/x86_64-linux-gnu/libstdc.so.6: version GLIBCXX_3.4.30 not found——因为新GCC编译的libstdc要求更高版本符号而ROS2 Humble二进制包链接的是旧版。鱼香ROS的解决方案是放弃直接安装ros-humble-desktop元包转而分拆安装核心组件。它只安装ros-humble-ros-base最小运行时ros-humble-rviz2可视化ros-humble-ros2cli命令行工具这三个包经社区实测在22.04.5上无符号冲突。对于需要navigation2等高级功能的用户鱼香ROS提供--full参数触发源码编译模式自动拉取ros2/navigation2仓库的humble分支用本地GCC 11.4.0重新编译彻底规避二进制兼容性问题。这种“混合部署策略”是纯官方流程无法提供的弹性。2.3 鱼香ROS的镜像源策略如何让rosdep update成功率从42%提升到99.8%rosdep update失败是ROS2新手最大噩梦而根源90%出在rosdistro索引下载。官方rosdep默认从https://raw.githubusercontent.com/ros/rosdistro/master/拉取YAML文件但GitHub在国内访问极不稳定超时率常年高于60%。鱼香ROS的破局思路很务实不挑战GitHub而是构建本地缓存代理。它在安装阶段会启动一个轻量级HTTP服务基于Pythonhttp.server模块监听localhost:8000并将/etc/ros/rosdep/sources.list.d/20-default.list中的原始URL重写为http://localhost:8000/rosdistro/master/。这个服务端代码只有83行核心逻辑是当收到请求时先检查本地~/.rosdep_cache/目录是否存在对应文件如rosdep/base.yaml有则直接返回无则用curl -x 禁用系统代理向GitHub发起请求成功后存入缓存并返回。更绝的是它预置了三个镜像源的fallback机制若GitHub失败自动切到清华镜像https://mirrors.tuna.tsinghua.edu.cn/github-release/ros/rosdistro/再失败则切中科大https://mirrors.ustc.edu.cn/github-release/ros/rosdistro/最后尝试阿里云https://github-proxy.oss-cn-hangzhou.aliyuncs.com/ros/rosdistro/。我在实验室用20台不同网络环境的Ubuntu 22.04.5机器压测rosdep update成功率从手动执行的42%飙升至99.8%剩下0.2%失败全是因用户提前终止了脚本——因为等待时间从平均12分钟缩短到47秒。这种“用空间换时间、用冗余换稳定”的工程哲学正是鱼香ROS被广泛采用的底层逻辑。3. 完整实操流程从裸机Ubuntu 22.04.5到运行第一个ROS2节点的每一步详解3.1 前置准备绕过Ubuntu 22.04.5的三大经典陷阱在敲下第一条鱼香ROS命令前必须确保系统处于“干净但健壮”的状态。根据我处理过的317个真实安装案例以下三个陷阱导致近60%的首次安装中断必须前置清除陷阱一NetworkManager与systemd-resolved的DNS战争Ubuntu 22.04.5默认启用systemd-resolved但它会劫持/etc/resolv.conf并指向127.0.0.53而NetworkManager又试图管理同一文件造成DNS解析混乱。验证方法ping -c 3 packages.ros.org若显示unknown host但nslookup packages.ros.org 114.114.114.114能返回IP则确诊。解决方案不是简单停用systemd-resolved而是优雅解耦sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved echo nameserver 114.114.114.114 | sudo tee /etc/resolv.conf echo nameserver 8.8.8.8 | sudo tee -a /etc/resolv.conf提示不要用sudo nano /etc/resolv.conf手动编辑因为NetworkManager可能在后台覆盖。必须用tee强制写入并确保/etc/resolv.conf权限为644sudo chmod 644 /etc/resolv.conf否则apt会拒绝读取。陷阱二Python 3.10软链接断裂某些用户为运行新软件手动升级Python导致/usr/bin/python3指向python3.11。ROS2 Humble的rosdep依赖importlib.metadata模块该模块在Python 3.11.0-3.11.2中存在DistributionNotFound异常。验证ls -l /usr/bin/python3若显示- python3.11则需修复sudo rm /usr/bin/python3 sudo ln -s python3.10 /usr/bin/python3注意不要用update-alternatives因为ROS2构建系统硬编码调用/usr/bin/python3alternatives的符号链接层级太深会导致路径解析失败。陷阱三APT缓存污染若之前尝试过官方安装并失败/var/lib/apt/lists/中残留的损坏索引会干扰鱼香ROS。执行sudo apt clean sudo rm -rf /var/lib/apt/lists/* sudo apt update这步耗时约2分钟但能避免后续出现E: Failed to fetch ... Hash Sum mismatch等诡异错误。3.2 鱼香ROS安装执行四步精准控制拒绝黑盒操作鱼香ROS的安装命令是wget -qO- https://gitee.com/rospack/ROS2-Install/raw/master/install_ros2.sh | bash -s -- -d humble -r tuna但直接复制粘贴是新手最大误区。必须理解每个参数的物理意义-d humble指定ROS2发行版。Ubuntu 22.04.5唯一官方支持的是Humble但鱼香ROS额外支持foxy用于兼容旧硬件和iron测试版此处必须严格写humble大小写敏感。-r tuna指定镜像源。tuna清华、ustc中科大、aliyun阿里云三选一。清华源同步最快但高峰时段可能限速中科大源稳定性最佳推荐生产环境使用阿里云源适合南方用户。切勿省略此参数否则默认回退到packages.ros.org安装成功率暴跌。--分隔符告诉bash后续参数传给脚本而非bash自身。执行过程分为四个明确阶段每个阶段都有可观测输出环境自检阶段0-90秒脚本首先运行lsb_release -sc确认系统为jammyuname -r确认内核≥5.15python3 --version确认Python为3.10.x。若任一检查失败输出红色警告并退出绝不强行继续。镜像源切换阶段90-180秒自动备份原/etc/apt/sources.list为sources.list.backup然后用sed逐行替换archive.ubuntu.com为mirrors.tuna.tsinghua.edu.cn同时处理security.ubuntu.com。关键细节它会保留restricted、universe、multiverse组件但禁用backports源因其与ROS2包冲突。密钥与仓库配置阶段180-300秒执行gpg --dearmor时会先创建/usr/share/keyrings/目录若不存在并设置权限755生成ros2.list时用$(dpkg --print-architecture)确保架构正确避免ARM64用户误装AMD64包。核心包安装阶段300-600秒安装顺序严格为ros-humble-ros-base→ros-humble-rviz2→ros-humble-ros2cli→python3-colcon-common-extensions。每个包安装后脚本会运行dpkg -l | grep ros-humble验证安装状态失败则记录日志并退出。实操心得安装过程中若看到Setting up ros-humble-ros-base (3.1.0-1jammy.20230915...字样说明已进入最后阶段。此时不要关闭终端即使屏幕暂停30秒也属正常——这是rosdep在预编译依赖。我见过最久的暂停是47秒发生在ros-humble-rviz2安装时因需编译Qt插件耐心等待即可。3.3 环境变量配置为什么source ~/.bashrc后ros2 --version仍报错安装完成后90%的用户会立刻执行source ~/.bashrc然后输入ros2 --version却得到Command ros2 not found。这不是鱼香ROS的bug而是Ubuntu 22.04.5的Shell初始化机制陷阱。根本原因在于鱼香ROS在~/.bashrc末尾添加的source /opt/ros/humble/setup.bash语句被~/.bashrc中更早的[ -n $PS1 ] source ~/.bash_aliases段落干扰——如果用户之前创建过~/.bash_aliases且其中包含unalias ros2就会覆盖ROS2命令。解决方案分三步诊断检查setup.bash是否真被加载grep setup.bash ~/.bashrc # 应输出source /opt/ros/humble/setup.bash验证setup.bash内容完整性head -5 /opt/ros/humble/setup.bash # 正常应显示#!/usr/bin/env bash\n# ROS2 Humble setup script...终极修复强制重载并跳过aliases# 临时绕过.bash_aliases bash --norc -i -c source /opt/ros/humble/setup.bash ros2 --version # 若返回ros2 0.18.12证明ROS2本身完好问题在.bashrc加载顺序真正的修复是编辑~/.bashrc将source /opt/ros/humble/setup.bash这一行剪切到文件最末尾并在其上方添加注释# ROS2 Humble setup - MUST be at end of .bashrc to avoid alias conflicts source /opt/ros/humble/setup.bash然后执行source ~/.bashrc。这个细节在鱼香ROS文档里没写但却是我帮用户远程调试时发现的最高频问题。3.4 首个ROS2节点实战从talker/listener到验证DDS通信安装成功后必须立即验证ROS2的核心能力——DDS中间件通信。不要急于跑rviz2先用最简demo_nodes_cpp包确认基础链路# 创建工作空间鱼香ROS不自动创建这是好习惯 mkdir -p ~/ros2_ws/src cd ~/ros2_ws # 拉取官方demo注意必须用humble分支 git clone -b humble https://github.com/ros2/demos.git src/demos # 构建鱼香ROS已预装colcon无需额外安装 colcon build --symlink-install # 激活环境 source install/setup.bash此时运行ros2 node list应返回空无节点然后启动发布者ros2 run demo_nodes_cpp talker在另一个终端中ros2 node list # 应显示 /talker ros2 topic list # 应显示 /chatter ros2 topic echo /chatter # 应实时打印 Hello World: 1, Hello World: 2...关键验证点ros2 topic info /chatter会显示QoS配置其中Durability: TRANSIENT_LOCAL表明DDS的持久化特性已启用History: KEEP_LAST和Depth: 10证明QoS策略被正确应用。这才是ROS2区别于ROS1的本质——不是简单的消息传递而是基于DDS的实时数据分发服务。很多教程跳过这步直接教rviz2导致用户后期调试navigation2时完全无法理解latched话题为何失效。4. 常见问题与排查技巧实录那些官方文档不会写的血泪经验4.1 “ubuntu22.04.5实现免密访问”与ROS2节点通信的隐性关联搜索热词中频繁出现“ubuntu22.04.5实现免密访问”表面看是SSH配置问题实则与ROS2多机通信强相关。当你要在两台Ubuntu 22.04.5机器间运行ROS2节点如主机talker从机listener必须满足三个条件两机/etc/hosts中互相解析对方主机名如192.168.1.100 robot1192.168.1.101 robot2两机ROS_DOMAIN_ID环境变量一致如export ROS_DOMAIN_ID42最关键从机必须能免密SSH登录主机因为ROS2的ros2 launch远程启动依赖SSH隧道验证方法在从机执行ssh -o ConnectTimeout5 robot1若需输入密码则失败。修复步骤# 在从机生成密钥若无 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_ros2 -N # 复制公钥到主机假设主机IP为192.168.1.100 ssh-copy-id -i ~/.ssh/id_rsa_ros2.pub robot1192.168.1.100 # 测试 ssh -i ~/.ssh/id_rsa_ros2 robot1192.168.1.100 hostname注意ssh-copy-id必须指定-i参数否则默认用id_rsa而ROS2场景需专用密钥隔离。我曾因混用密钥导致主机sshd日志爆满最终触发fail2ban封禁。4.2rviz2安装使用ros2失败的七种死法及解法rviz2是ROS2可视化核心但Ubuntu 22.04.5上安装后白屏、崩溃、闪退频发。根据故障现象分类解决现象根因解决命令启动即白屏终端无报错Qt平台插件缺失sudo apt install qt5-qmake qtbase5-dev启动报libxcb-xinerama0: cannot open shared object fileABI版本不匹配sudo apt install libxcb-xinerama01.14-3ubuntu1加载模型时崩溃日志Segmentation fault (core dumped)OpenGL驱动未启用sudo ubuntu-drivers autoinstall sudo reboot地图显示乱码方块代替汉字中文字体缺失sudo apt install fonts-wqy-zenhei sudo fc-cache -fv添加RobotModel插件时报No transform from [base_link] to [map]TF树未建立先运行ros2 run tf2_tools view_frames生成frames.pdfros2 topic list可见但rviz2不订阅QoS不匹配在rviz2中右键Topic →Reliability设为Best Effort启动后CPU占用100%Qt事件循环阻塞export QT_QPA_PLATFORMoffscreen rviz2最隐蔽的问题是第七种某些Intel核显驱动在Ubuntu 22.04.5上与Qt6的xcb插件存在事件循环死锁。解决方案不是重装驱动而是强制rviz2使用离屏渲染export QT_QPA_PLATFORMoffscreen rviz2。这个技巧连ROS2官方Wiki都没收录是我调试RK3588开发板时发现的。4.3ubuntu安装docker与ROS2容器化的协同部署越来越多用户想用Docker运行ROS2节点但ubuntu安装docker后常与ROS2冲突。根本矛盾在于Docker默认使用cgroup v1而Ubuntu 22.04.5默认启用cgroup v2导致ros2 launch在容器内无法正确获取CPU亲和性。验证docker run --rm hello-world成功但docker run --rm -it osrf/ros:humble-desktop ros2 node list报错Failed to initialize DDS。标准解法是升级Docker到24.0.0并启用cgroup v2支持但鱼香ROS提供更轻量方案# 修改Docker守护进程配置 echo {exec-opts: [native.cgroupdriversystemd]} | sudo tee /etc/docker/daemon.json sudo systemctl restart docker # 验证 docker info | grep Cgroup Driver # 应输出Cgroup Driver: systemd然后运行ROS2容器docker run -it --rm --network host \ -e ROS_DOMAIN_ID42 \ -e RMW_IMPLEMENTATIONrmw_cyclonedds_cpp \ osrf/ros:humble-desktop \ ros2 run demo_nodes_cpp talker注意必须指定RMW_IMPLEMENTATION因为Docker容器内默认DDS实现rmw_fastrtps_cpp在cgroup v2下性能极差。rmw_cyclonedds_cpp是目前ROS2 Humble在容器中最稳定的DDS实现。4.4ros2和dds的底层绑定为什么ros2 topic list能看到但ros2 node info看不到这是ROS2新手最困惑的问题之一ros2 topic list能列出/chatter但ros2 node info /talker返回Node not found。根源在于ROS2的节点发现机制依赖DDS的Participant生命周期管理。当talker节点因异常退出如CtrlC未捕获信号其DDS Participant未正常注销导致ros2 node info查询时超时。诊断命令# 查看DDS底层参与者 ros2 daemon stop ros2 daemon start ros2 node list # 若仍为空说明DDS层已损坏 # 强制清理DDS状态 rm -rf ~/.ros/discovery/终极解决方案是编写健壮的节点// 在talker.cpp中添加信号处理 #include signal.h void signalHandler(int signum) { RCLCPP_INFO(rclcpp::get_logger(talker), Interrupt signal (%d) received, signum); rclcpp::shutdown(); exit(signum); } int main(int argc, char * argv[]) { signal(SIGINT, signalHandler); // 捕获CtrlC signal(SIGTERM, signalHandler); // 捕获kill命令 // ...原有代码 }这个细节揭示了ROS2与DDS的深度耦合ROS2不是DDS之上的简单包装而是其语义的精确映射。理解这点才能真正驾驭ROS2。5. 进阶实践从鱼香ROS安装到真实机器人项目的落地路径5.1ros2项目实例的最小可行架构如何用鱼香ROS快速搭建导航框架鱼香ROS的价值不仅在于安装更在于它为真实项目提供了可复用的工程骨架。以ros2八叉树地图导航为例传统做法是手动克隆navigation2、slam_toolbox、nav2_bringup三个仓库再处理27个子依赖。鱼香ROS提供ros2-nav子命令一键构建最小导航栈# 安装导航扩展需在ROS2环境激活后 ros2-nav install --slam --nav2 --rviz # 自动执行 # 1. git clone -b humble https://github.com/ros-planning/navigation2.git # 2. git clone -b humble https://github.com/SteveMacenski/slam_toolbox.git # 3. colcon build --packages-select nav2_bringup slam_toolbox # 4. 预配置launch文件~/ros2_ws/install/nav2_bringup/share/nav2_bringup/launch/bringup_launch.py关键创新在于ros2-nav的配置注入机制它不修改原始launch文件而是在/opt/ros/humble/etc/nav2_params/下生成nav2_params.yaml通过include方式动态注入。例如要启用八叉树地图只需编辑该文件slam_toolbox: ros__parameters: odom_frame: odom map_frame: map base_frame: base_link # 启用八叉树后端 use_sim_time: false mode: localization # 或 mapping octomap: true # 关键开关然后启动ros2 launch nav2_bringup bringup_launch.py params_file:/opt/ros/humble/etc/nav2_params/nav2_params.yaml。这种“配置即代码”的设计让项目可版本化管理避免了传统ROS项目中launch文件散落各处的混乱。5.2ros2话题服务动作的调试黄金组合ros2 topic/ros2 interface/ros2 param三位一体ROS2的topic、service、action三类通信原语调试方法截然不同。鱼香ROS预装的工具链已优化为黄金组合Topic调试ros2 topic hz /chatter查看频率ros2 topic delay /chatter检测传输延迟ros2 topic bw /chatter监控带宽——这些命令背后调用的是rclpy的StatisticsAggregator比手动写Python脚本高效10倍。Service调试ros2 interface show example_interfaces/srv/AddTwoInts查看接口定义ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts {a: 1, b: 2}直接调用——注意YAML格式必须严格{a: 1, b: 2}合法{a: 1, b: 2}非法。Action调试ros2 action info /fibonacci查看状态机ros2 action send_goal /fibonacci fibonacci.action.Fibonacci {order: 5}发送目标——这里fibonacci.action.Fibonacci是完整类型名不能省略.action.。实操心得当ros2 action list看不到你的action时90%是因为rclpy节点未正确声明ActionServer。检查代码中是否有self._action_server ActionServer(self, Fibonacci, fibonacci, self.execute_callback)且execute_callback函数签名必须为def execute_callback(self, goal_handle):。漏掉self.或拼错Fibonacci都会导致注册失败而ros2 action list对此静默失败。5.3python构建ros2服务端的性能陷阱回调组CallbackGroup的正确用法用Python写ROS2服务端时新手常陷入“为什么服务响应慢”的误区。根源在于CallbackGroup配置不当。默认ReentrantCallbackGroup允许并发执行但若服务回调中包含阻塞IO如读取传感器文件会导致线程饥饿。鱼香ROS在~/.ros2/下预置了callback_group_tuning.md指南核心原则MutuallyExclusiveCallbackGroup适用于计算密集型服务如图像处理确保同一组内回调串行执行避免竞态。ReentrantCallbackGroup适用于IO密集型服务如HTTP API调用允许并发但需自行加锁保护共享资源。定时器服务组合对周期性服务如心跳检测用MutuallyExclusiveCallbackGroup绑定Timer和Service确保定时器不被服务阻塞。示例代码# 创建互斥组 self.group MutuallyExclusiveCallbackGroup() # 将服务和定时器加入同一组 self.srv self.create_service( AddTwoInts, add_two_ints, self.add_two_ints_callback, callback_groupself.group) self.timer self.create_timer( 1.0, self.timer_callback, callback_groupself.group)这样配置后timer_callback和add_two_ints_callback永远不会并发执行消除了资源争用。这个技巧让Python服务端性能逼近C实现是我带学生做ROS2课程设计时验证过的。6. 鱼香ROS之外当项目规模扩大如何平滑过渡到专业ROS2开发流6.1workbuddy ubuntu与vmware虚拟机安装ubuntu系统的协同开发模式鱼香ROS解决了单机安装问题但真实机器人开发必然涉及多环境协同。“workbuddy ubuntu”指代一种开发范式主机Workstation运行完整ROS2开发环境从机Robot运行精简ROS2运行时。鱼香ROS为此预置了ros2-remote工具# 在主机已装鱼香ROS上 ros2-remote setup robot1192.168.1.100 # 自动配置SSH密钥、同步ROS_DOMAIN_ID ros2-remote build ~/ros2_ws # 在从机上远程执行colcon build ros2-remote launch nav2_bringup bringup_launch.py # 远程启动其原理是ros2-remote在从机上部署一个轻量ros2-remote-agent仅12KB通过SSH通道转发ros2命令。相比ros2 launch的--prefix参数它避免了ssh命令嵌套导致的环境变量丢失问题。我在RK3588开发板上实测ros2-remote build比本地scpssh快3.2倍因为Agent直接调用colcon的--merge-install模式减少磁盘I/O。6.2ubuntu显卡驱动卸载不掉的ROS2视觉开发避坑指南
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。