ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu 下 ROS/ROS2 一键安装:版本匹配、环境变量与常见排错

Ubuntu 下 ROS/ROS2 一键安装:版本匹配、环境变量与常见排错 拿到一台刚装好的 Ubuntu第一件事不是急着敲apt install而是先想清楚这台机器要跑 ROS 还是 ROS2、跑哪个发行版、配哪个 Ubuntu 版本。我刚入行那会儿光是把 ROS 装起来就折腾了整整两天报错一堆、依赖冲突、环境变量改错导致终端一开就飘红那种体验现在回想起来还是有点头皮发麻。后来我摸清了一套思路用社区里的一键安装脚本配合手动兜底基本十分钟内能让roscore或者ros2 run demo_nodes_cpp talker跑起来不管你是刚接触ROS的学生、要快速搭ROS2实验环境的工程师还是准备搞机械臂和 Gazebo 仿真的人这套流程都能直接抄。这篇东西我想把为什么这样装、装之前要检查什么、脚本里到底干了哪些事、出问题怎么排查这几条线串起来讲。市面上的教程大多只给命令不给逻辑结果换个版本、换台机器就抓瞎。我更愿意把每一步背后的原因讲透这样你自己就能判断哪一步该改、该绕、该重来。1. 一键安装到底在装什么先把需求拆清楚很多人对一键安装有误解以为是把一堆命令打包成一条脚本就完事了。实际上真正让一键脚本有价值的地方是它帮你处理了版本匹配、软件源配置、密钥导入、依赖解析、环境变量写入这一整套容易出错的琐碎动作。搞清楚它干了什么出问题你才知道去哪儿找原因。1.1 Ubuntu 版本和 ROS 发行版的强制绑定关系ROS 的发行版不是随便挑的它和 Ubuntu 版本是硬绑定。这个绑定关系如果你不提前确认很可能装到一半发现压根没有对应的包。下面这张对照表是我这几年用得最多的一张建议收藏Ubuntu 版本对应 ROS1对应 ROS2支持状态Ubuntu 20.04NoeticFoxyNoetic 是 ROS1 收官版本长期维护Ubuntu 22.04无官方 ROS1HumbleHumble 是当前 LTS生态最全Ubuntu 24.04无Jazzy较新的 LTS部分包还在补齐看到这张表你会发现一个关键信息Ubuntu 22.04 之后官方就不给 ROS1 了。所以如果你手上的教程还在教你 Ubuntu 22.04 装 Noetic大概率是错的或者要折腾源码编译。这也是为什么我一直强调先确认系统版本再决定走 ROS1 还是 ROS2 的路线别本末倒置。判断自己系统版本很简单lsb_release -a输出里的Release字段就是版本号。如果你拿到的是 20.04那 ROS1 走 Noetic、ROS2 走 Foxy 是稳妥的如果是 22.04就直接上 Humble别惦记 ROS1 了除非你有明确的历史代码依赖。1.2 一键脚本相比手动安装省了哪些事手动装 ROS 的老流程大概是这样的添加软件源、导入 GPG 密钥、apt update、安装ros-distro-desktop-full、初始化rosdep、配置环境变量。每一步都可能踩坑尤其是 GPG 密钥和软件源这两步一旦软件源写错apt update直接报错新手往往卡在这里就放弃了。一键脚本的核心价值在于它把这一串动作顺序化、幂等化了。所谓幂等就是你重复执行它也不会把系统搞乱——第二次跑它会检测到已经装过跳过或者覆盖而不像手动操作那样容易因为重复添加源而产生冲突。社区里流传比较广的那套一键安装脚本用过的人应该知道是哪个本质就是这么个东西用 shell 封装了一组判断逻辑根据你的系统版本自动选发行版然后按顺序执行安装。提示一键脚本不是魔法它只是把你的手替掉了。所以理解它执行的每一步比无脑跑脚本更重要。1.3 该选桌面版还是基础版装 ROS 的时候会碰到ros-core、ros-base、desktop、desktop-full几个层级很多人不知道选哪个。说人话ros-core只有最核心的通信机制库都很少。ros-base加了常用库和构建工具适合做嵌入式或者服务器部署。desktop加了 rviz、rqt 这些图形化工具适合开发调试。desktop-full在 desktop 基础上再加 Gazebo 仿真、导航、感知等一大票包体积最大。我个人的建议是学习阶段直接上 desktop 或 desktop-full别为了省几个 G 的空间折磨自己。等到你要往机器人上部署的时候再考虑裁剪成 base。一键脚本通常会让你选或者默认装 full这点心里有数就行。2. 装之前必须做的三件检查脚本再智能也架不住环境本身有问题。我见过太多脚本跑一半失败了的案例最后查下来根本原因都是系统层面的小毛病。提前花三分钟检查能省掉后面半小时的排错。2.1 确认系统架构和软件源可用性先看架构x86_64 是最常见的但也有用 ARM 板子跑 ROS 的情况uname -m输出x86_64就是标准 64 位 PC 架构aarch64是 ARM 64 位。这个信息决定了你后面能装哪些预编译包ARM 平台有些包是要自己编译的。然后是软件源。默认的软件源在国内访问可能很慢脚本执行期间会频繁apt update慢到超时就会失败。所以装之前我一般会先把源换成国内镜像# 先备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak换源这事儿各版本略有差异24.04 之后用的是/etc/apt/sources.list.d/ubuntu.sources这个新格式。你要是图省事直接用脚本站里附带的换源功能或者手动把关键字换成国内镜像域名即可。换完记得sudo apt update能正常跑完不报错说明源的配置没问题。2.2 检查磁盘空间和 apt 锁状态ROS desktop-full 装下来轻松吃掉 5 到 10 个 G如果你的虚拟机当初只分了 20G装一半磁盘满是很常见的翻车点df -h看根分区剩余空间建议至少留 15G 以上。虚拟机用户可以提前扩容别等到装到一半才想起来。另一个高频问题是 apt 锁被占用表现是提示无法获得锁 /var/lib/dpkg/lock。这通常是因为你开了两个终端同时在跑 apt或者上次安装被强制中断了# 查看是不是有 apt 进程在跑 ps aux | grep -i apt如果确实有残留进程等它跑完如果是异常中断导致的可以用sudo rm /var/lib/dpkg/lock-frontend sudo dpkg --configure -a注意dpkg --configure -a这条命令是让 dpkg 把没配完的包重新配一遍别嫌它慢很多依赖坏了的假象跑一遍它就好了。2.3 用户权限与 sudo 免密一键脚本里大量使用sudo如果每次都提示输密码跑到一半你人不在电脑前脚本就卡死了。所以有两个选择要么全程盯着输密码要么给当前用户配个 sudo 免密。后者改/etc/sudoers有风险我一般不推荐新手碰直接坐在电脑前跑脚本更稳。如果你是在服务器或者远程 SSH 环境下跑尤其要注意这点。我遇到过同事晚上挂着脚本跑第二天来看卡在密码提示上一晚上白等。所以远程操作的话建议先用sudo -v刷新一下凭证缓存默认 15 分钟内不会再问密码脚本一般够跑完。3. 一键安装的完整实操流程前面铺垫这么多现在进入正题。我把整个流程拆成下载脚本、执行、选版本、验证四步每一步我都附上可能遇到的问题和我的处理方式。3.1 获取并运行安装脚本社区里那套一键安装脚本通常可以通过一条命令直接拉取运行。标准做法是先下载再执行别偷懒直接管道给 shell这样你能先看一眼脚本内容wget http://fishros.com/install -O fishros bash fishros这里以社区常见的入口为例实际地址以你使用的脚本官方说明为准。下载下来后你可以用cat fishros | less快速浏览一下看看它都干了哪些事这一步是建立信任的关键尤其是从网络拉下来的脚本看一眼总没错。脚本跑起来后一般会给你一个菜单大致像这样1. 安装 ROS 2. 安装 ROS2 3. 配置系统源 4. 配置 rosdep ...选 1 或 2 进入对应流程。如果你还没换源建议先选配置系统源那一项把源搞定再装成功率高很多。3.2 版本选择时的判断依据进入安装流程后会让你选具体发行版。注意脚本给出的选项是根据你的 Ubuntu 版本过滤过的也就是说 22.04 上它不会给你 Noetic 选项。这就是前面讲的版本绑定逻辑在起作用。这时候你要做的判断是我到底需要 ROS1 还是 ROS2如果你没有历史包袱新项目一律选 ROS2这是趋势生态也在往这边走。如果你要维护老代码或者跟着课程学那就按课程要求来。选完之后脚本开始跑会经历几个明显阶段换源、导入密钥、apt update、下载安装包、配置 rosdep。整个过程视网速从几分钟到二十分钟不等。rosdep init这一步有时候会失败原因一般是网络问题或重复初始化脚本通常会重试或者跳过你留意一下最后的提示就行。3.3 环境变量是怎么生效的安装完成后最重要的一步是 source 环境变量。脚本一般会自动帮你在.bashrc里追加一行source /opt/ros/humble/setup.bash以 Humble 为例其他版本把 humble 换成对应名字即可。这行的作用是让当前 shell 能找到 ROS 的命令和库路径。追加完你需要让它在当前终端生效source ~/.bashrc或者干脆关掉终端重开一个。我强烈建议验证一下是不是真的生效了echo $ROS_DISTRO如果输出humble恭喜你环境配好了。如果输出空白说明 source 没生效或者路径写错了回去检查.bashrc里那行路径对不对。这是新手最容易忽略又最容易出问题的地方。3.4 跑个小例子验证安装环境配好不代表装成功得跑个东西验证。ROS1 的话开两个终端一个跑roscore另一个跑小海龟# 终端 1 roscore # 终端 2 rosrun turtlesim turtlesim_node能看到小海龟窗口、能按方向键让它动说明通信机制是通的。ROS2 的话更简单一句话搞定ros2 run demo_nodes_cpp talker另开一个终端跑ros2 run demo_nodes_cpp listener能看到两者在互相收发消息就说明 ROS2 安装完全正常。这个验证习惯一定要养成装完不验证等真正开发时才发现问题回头查更难。4. 装完之后的收尾配置和一键安装的边界一键脚本能帮你把 ROS 本体装好但一个能用的开发环境还有几件事得自己做。这部分我列几个高频的收尾动作都是实际干活绕不过去的。4.1 常用工具和编译环境补齐ROS 本身不带编译器和工作空间工具这些得自己装sudo apt install python3-colcon-common-extensions python3-rosdep2 build-essential cmake gitcolcon是 ROS2 的构建工具catkin是 ROS1 的build-essential和cmake是几乎所有包的基础依赖。这几个装完你才能建工作空间、编译自己的代码。很多人装完 ROS 兴冲冲地colcon build结果提示找不到 colcon就是这一步漏了。初始化 rosdep 也很关键它是用来解决系统依赖的sudo rosdep init rosdep update这两条如果报错八成是网络问题或者之前初始化过残留了文件删掉/etc/ros/rosdep/sources.list.d/下的旧文件重试即可。4.2 建立自己的工作空间装完 ROS 不等于能写代码你还需要一个工作空间来放自己的功能包。以 ROS2 为例mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build source install/setup.bashsrc目录下放你的功能包colcon build编译source install/setup.bash让当前终端能找到你编译出来的东西。这个source每次都做太麻烦可以在.bashrc里加一句自动加载但要注意别和/opt/ros的 source 顺序搞反一般先 source 系统的再 source 你自己的。提示.bashrc里 source 太多环境有时候会拖慢终端启动我一般只在需要的时候手动 source 工作空间系统环境那行常驻就行。4.3 一键脚本不帮你做的那些事这里得说句实在话一键脚本的边界在哪。它擅长的是标准环境下的标准安装但下面这些情况它帮不上忙你要用特定版本的编译器或者交叉编译工具链。你要在非标准架构比如某些 ARM 开发板上装。你要多个 ROS 发行版共存比如 ROS1 Noetic 和 ROS2 Humble 装同一台机器。这些属于进阶需求需要你手动处理依赖和路径。尤其是多版本共存两个发行版的环境变量会打架你得靠命名空间或者切换脚本手动管理。这些不是一键脚本的锅是这类需求本身就复杂。5. 常见问题排查实录装 ROS 遇到的问题五花八门但翻来覆去就那几类。我把这些年踩过的、同事问过的整理成一张速查表配上排查思路遇到类似的可以直接对号入座。现象可能原因处理方式脚本下载失败网络不通或地址失效检查网络用浏览器打开地址看是否可访问apt update 报错 GPG密钥没导入或过期重新导入密钥或清理旧源重加提示找不到包软件源里没有对应版本核对 Ubuntu 与 ROS 版本绑定关系命令找不到 rosrun环境变量未 source检查 .bashrc重新 sourcerosdep 更新失败网络或残留文件清理 sources.list.d 重试磁盘写满分区太小清理缓存或扩容ROS1 和 ROS2 冲突环境变量叠加分开终端用切换脚本管理colcon build 找不到未装构建工具安装 colcon 扩展包逐条说下我的处理心得。GPG 报错是最烦的一类它的表现是apt update卡在某个源上刷屏报错但其他源没事。这种时候先把出问题的源摘出来一般是自己手动加源时加的。ROS2 从 Humble 开始官方源的密钥方式和之前变了用脚本自动加的基本没问题手动加的容易错。环境变量冲突是另一大类表现是明明装了 ROS2敲ros2却说找不到命令或者 ROS1 和 ROS2 的ROS_DISTRO互相覆盖。这种几乎都是.bashrc里 source 错了顺序或者同时 source 了两个发行版的 setup.bash。解决办法是去.bashrc里只保留一个/opt/ros/distro/setup.bash。还有一个隐蔽的坑就是软件源优先级。如果你同时配了系统源里自带的 ROS 包和官方源apt 可能会优先选系统源里的老版本导致装了但版本不对。排查方式是apt-cache policy ros-humble-desktop看候选版本是从哪个源来的如果来源不对就要调整源的优先级或者移除冲突的源。这个技巧不常用但遇到版本玄学问题时非常管用。6. 多版本共存与后续进阶方向最后聊两个稍微进阶的话题一个是 ROS1 和 ROS2 共存怎么办另一个是装完之后往哪个方向深入。6.1 ROS1 与 ROS2 打通的思路现实中很多团队是 ROS1 存量代码 ROS2 新项目并行所以共存需求很真实。装的时候其实不难Noetic 和 Humble 可以装在同一台 Ubuntu 20.04 上或者用容器隔离。难的是同时使用。ROS2 提供了一个叫ros1_bridge的工具能在两个系统之间做消息桥接让 ROS1 的节点和 ROS2 的节点互相通信。用法大致是先把两边环境都 source 上再单独开一个终端跑 bridge# 分别 source ROS1 和 ROS2 环境 source /opt/ros/noetic/setup.bash source /opt/ros/humble/setup.bash ros2 run ros1_bridge dynamic_bridgebridge 会把两边同名的消息类型自动打通。要注意消息类型不完全一致的时候得自己写映射不是所有类型都能自动桥接。6.2 装完 ROS 之后往哪儿走ROS 装好只是起点接下来几个方向看你的目标。做机械臂的下一步是配 MoveIt 和 URDF 模型做移动机器人导航的要啃 Nav2ROS2或 move_baseROS1和代价地图、八叉树地图这些东西做视觉的去了解 cv_bridge 和相机标定玩仿真的Gazebo 和 rviz2 是必学工具。每个方向都能深挖很久但基础都是这个能跑起来的 ROS 环境。我的建议是先别贪多找个官方教程或者靠谱的入门项目把话题、服务、参数这几个基本通信机制敲一遍跑通了再往上加复杂功能。ROS2 的命令行工具ros2 topic、ros2 node、ros2 service这几组命令要练熟它们是排查一切问题的底牌。说起来我在实际使用中发现一个规律那些装完就急着上大项目的人往往后期被各种环境问题拖累反而是先把安装流程和基本验证做扎实的人后面走得更顺。装环境这件事快不是目的稳才是。
返回列表