刚接触ROS的时候我踩的第一个坑就是安装。那时候网上教程五花八门有从源码编译的有加清华源、中科大源的还有让你手动装一堆依赖的步骤长得能当小说看。折腾一整天最后卡在rosdep update心态直接裂开。后来看到群里有人用fishros的脚本一键装完我一开始还不太信——毕竟被“一键”这个词骗过太多次了。但实测下来确实稳装完直接能用后面给同事装环境、自己重装系统我基本都是走这个方案专门写一篇聊聊它到底做了什么、怎么用、以及踩过哪些坑。这篇内容不只是复制粘贴命令我会把脚本背后的设计逻辑、不同ROS版本怎么选、装完怎么验证、以及最常见的报错怎么处理都讲清楚适合刚入门ROS的小白也适合需要批量部署环境或者频繁重装系统的老手参考。1. 为什么手动安装这么折腾一键安装到底解决了什么1.1 手动安装的四大痛点很多人第一次装ROS先去ROS官网找Installation然后照着Ubuntu那一页敲命令。表面上就是几条apt install但实际操作起来每个环节都是坑。先说软件源问题。ROS官方仓库是国外的直接apt update大概率慢到怀疑人生甚至超时失败。解决办法是换成国内镜像源但不同学校的镜像同步延迟不一样有的源还偶尔抽风。你需要先搞清楚自己Ubuntu版本对应的源地址是什么然后去改/etc/apt/sources.list这个环节就卡掉了一批人。然后是依赖冲突。ROS的包依赖一大堆比如python3-catkin-pkg、python3-rospkg、python3-rosdep这些Python工具包以及cmake、boost、pcl、opencv这种重量级编译库。如果系统里已经装过一些Python包或者之前编译过别的东西很容易出现版本冲突apt常常会告诉你“需要手动修复”或者“以下软件包有未满足的依赖关系”。新手看到这种提示基本就懵了根本不知道让系统删掉哪个包。第三是rosdep init的坑。这个步骤需要访问raw.githubusercontent.com在国内网络环境下经常失败。有人让你手动改hosts有人让你用代理有人让你从gitee拉脚本方法五花八门。关键问题是rosdep这个工具本身还需要更新数据库即使init成功了update也可能报错因为它的源里包含大量GitHub的raw链接网络稍微一抖就中断。整个流程失败率非常高而且是间歇性的这次成功下次不一定成功。最后是时间成本。我第一次手动安装ROS Noetic从下午折腾到晚上十点多中间反复apt install、反复报错、反复百度最后勉强能用但我完全不知道自己装了什么、哪些环节是必须的、哪些是多余的。这种“黑箱”式的安装过程对学习没有任何帮助。1.2 一键安装脚本的设计思路鱼香一键安装其实是一段放在GitHub上的Shell脚本你在终端里通过wget把脚本下载下来赋予执行权限后运行剩下的操作基本由脚本替你完成。它把整个安装过程拆成了几个模块脚本运行起来会让你选装ROS 1还是ROS 2、对应哪个版本然后自动配置软件源、安装核心组件、初始化rosdep、设置环境变量、安装依赖工具。关键是在rosdep这一步脚本会通过镜像方案去拉取元数据把国内网络环境的挫败率降下来还会在安装完成后帮你设置.bashrc环境变量。我觉得它解决的不只是“命令太长不想敲”的问题而是把每一步背后的坑都帮你踩平了。以前我要记一堆repo列表、GPG key、发行版代号现在脚本里全部封装成了选择菜单。对刚接触ROS的新人来说他们不需要知道源在哪也不需要理解环境变量怎么加只需要知道自己的Ubuntu版本对应哪个ROS版本就行了。2. 鱼香一键安装实战全流程2.1 环境准备先确认版本匹配开始之前先确认你的系统版本用lsb_release -a看一下。目前主流的搭配就两种Ubuntu 20.04对应ROS 1的Noetic或者Ubuntu 22.04对应ROS 2的Humble。需要留意的是ROS 1只有Noetic这个版本还在支持期内对应的就是20.04ROS 2的Humble对应22.04长期支持到2027年。如果你用的是Ubuntu 24.04ROS 2的Jazzy也能装但生态和教程密度没有Humble高不建议新手一上来就折腾太新的组合。磁盘空间建议留出至少20GB系统盘紧张的话装到一半卡住很尴尬。网络方面脚本走的是国内镜像正常宽带都没问题不需要额外配置什么。另外一个建议是先执行sudo apt update sudo apt upgrade把系统基础软件包更新到最新避免用刚装完的旧系统直接跑安装脚本有时候基础依赖太老也会出问题。还有一个细节如果你用的是Windows可以考虑直接用WSL2装Ubuntu鱼香ROS脚本在WSL2里面跑也是可以的。不过要注意WSL2默认不会启动systemd有些ROS 2功能需要systemd支持需要在/etc/wsl.conf里配置systemdtrue这就牵扯到WSL本身的内容了这里先不展开。2.2 跑脚本命令就三条终端里依次执行下面三条命令wget http://fishros.com/install -O fishros chmod x fishros ./fishros执行后会进入一个交互式菜单一眼过去全是数字选项。第一次装ROS 1选1然后它会列出对应的版本选项Noetic直接回车。装ROS 2则选2然后选Humble。如果菜单里有换源选项建议先选换源把系统的apt源切到国内镜像后面能省不少时间。如果系统里已经装了conda等Python环境脚本可能会额外提示你处理冲突问题这个可以后面再说。脚本执行过程中会有几次输入比如设置用户密码授权sudo操作、确认是否需要安装桌面版依赖组件这些直接按提示选就行。它运行时间跟网络状况有关快的话十几分钟慢的话半小时以上千万不要以为卡住了就强行关掉终端。装完后脚本会提示你重新source环境你可以先执行source ~/.bashrc或者干脆重新打开一个终端然后在终端里输入roscore系统开始启动ROS主节点看到一堆日志输出最后一行显示started core service说明ROS已经能正常运作了。2.3 安装后的验证方式光能启动roscore还不够更完整的验证是运行小海龟示例。开三个终端第一个跑roscore第二个跑rosrun turtlesim turtlesim_node第三个跑rosrun turtlesim turtle_teleop_key。如果屏幕上弹出蓝色的小海龟窗口并且通过方向键可以控制它移动那环境就已经完全可用了。这里顺便提一下小海龟示例看似简单但它验证的是ROS最核心的通信机制master节点、话题通信、消息收发。你能按着键盘控制海龟说明roscore正常、topic正常、节点之间能互相发现这个基础打好了后面学launch文件、学自定义消息、学URDF建模都是在这个地基上盖楼。3. 安装过程中的典型报错与排查3.1 首次运行提示命令找不到装完之后重新打开终端输入roscore提示command not found。出现这个情况多半是环境变量没有正确写入.bashrc。你手动执行一下source /opt/ros/noetic/setup.bash然后echo $ROS_DISTRO如果输出noetic就说明环境没问题。为了以后不用每次手动source可以执行echo source /opt/ros/noetic/setup.bash ~/.bashrc再source ~/.bashrc一次。还有一个容易忽略的细节如果你用的是zsh而不是默认的bash那环境变量要写进.zshrc脚本默认只处理.bashrc。这也是挺多人的翻车点。3.2 rosdep update失败用一键脚本装完之后rosdep update一般不会卡在GitHub上了因为脚本通常配置了镜像。但如果你之前手动折腾过rosdep残留的配置会导致update阶段反复失败。最简单的处理办法是把rosdep的元数据缓存目录清掉sudo rm -rf /etc/ros/rosdep/sources.cache然后再跑sudo rosdep init和sudo rosdep update。如果此时系统一直提示文件已存在先删掉/etc/ros/rosdep/sources.list.d目录下的20-default.list再重试。这个问题的关键在于rosdep工具需要定期更新数据库就算是国内镜像联通的网络和电信的网络偶尔也会出现访问很慢的情况多试几次基本能过。3.3 安装到一半提示某些包无法定位脚本安装过程中如果报“Unable to locate package ros-noetic-xxx”很大概率是ROS软件源没配好。你可以检查一下/etc/apt/sources.list.d/ros-latest.list这个文件是否存在以及里面内容是否正确。正确的源地址是Ubuntu 20.04对应的noetic源或者Ubuntu 22.04对应的humble源。如果你apt源写错成别的版本代号apt当然找不到对应的包。这里要特别提醒一下如果你混用了多个ROS仓库源比如同时添加了ROS 2的源和ROS 1的源apt update时不会报错但真正安装包时可能出现版本混乱。我没建议你在同一台机器上同时装ROS 1和ROS 2虽然技术上可以共存但环境变量会互相干扰新手很难驾驭踩过坑的人应该都懂这个感受。3.4 常见问题速查表现象原因解决办法roscore: command not found环境变量没生效source /opt/ros/noetic/setup.bash 并写入bashrcrosdep update 超时网络或残留缓存问题清空rosdep缓存后重试用镜像源无法定位软件包ROS源未添加或版本代号错误检查ros-latest.list确认源对应Ubuntu版本安装卡在等待软件包系统有dpkg锁或半完成状态sudo dpkg --configure -a或者重开终端再试编译自己的包时报找不到catkin未安装ros工具链sudo apt install ros-noetic-catkin python3-catkin-tools打开小海龟黑框闪退系统缺OpenGL库sudo apt install mesa-utils libgl1-mesa-glx libgl1-mesa-dri这个表我建议收藏后面做实操一定会频繁用到。特别是如果你用的是虚拟机小海龟闪退的概率比实体机高不少多半就是缺mesa相关图形库。3.5 实操心得别在旧环境上反复横跳根据我个人的经验一键安装脚本在干净系统上跑是最舒服的。我自己有台开发机里面装了一堆PyTorch的CUDA环境、多个版本的Anaconda还有一个跑了一半的OpenCV源码。用脚本装ROS时因为Python路径冲突各种报错先是catkin_make找不到Python后来又出现rospkg模块缺失最后还算幸运通过添加PYTHONPATH环境变量解决了。但整个过程比重装系统还痛苦。如果你手头没有全新环境又必须装在现有系统上建议装之前先备份好数据然后在装之前把conda相关的环境变量临时屏蔽掉。具体做法是编辑.bashrc把conda initialize那几行注释掉启动一个新的终端再跑fishros脚本等装完ROS后再恢复。4. 装完之后的学习路径与配套工具推荐4.1 一个比较舒服的学习路线环境跑起来之后很多人会陷入一种“不知道下一步装什么”的迷茫。我建议按下面的顺序往前走第一步把turtlesim玩透。熟悉ROS节点的概念用rosnode list、rosnode info、rostopic list、rostopic echo去观察海龟的运动话题。第二步学launch文件掌握如何同时启动多个节点了解param和args的区别。第三步看URDF机器人模型学习用rviz加载一个简单的小车模型理解joint、link、坐标系的概念。第四步玩Gazebo仿真把URDF模型导进去给小车加传感器插件做简单的避障仿真。第五步再进到导航框架跑导航框架的自主导航仿真。这条路线对应的是ROS工程应用里最经典的“建模—仿真—导航”流程前期不需要直接碰真实硬件但逻辑和真实机器人完全一样。Brownies并举个简单的例子你在Gazebo里看到的小车和真实小车唯一的区别就是传感器数据来源不同一个来自仿真环境一个来自真实雷达或摄像头后面所有算法代码可以原封不动复用。真实感就是这么来的。4.2 标准和必要的工具链搭配装完ROS核心之后下面这几个工具建议顺手装上ros-noetic-desktop-full如果你选的是桌面完整版就不用再装这个包包含了rviz、gazebo、turtlesim等常用工具强烈建议选这个完整版别选基础版否则后面很多示例跑不了。python3-catkin-tools比catkin_make更好用的Catkin构建工具编译大型工作空间时错误提示更清晰增量编译体验也好不少。terminator多终端工具方便同时开多个终端同时监控不同的ROS节点做ROS开发基本上是人手一个。rqt_graph、rqt_plot、rqt_console这些是查看节点关系、绘图、查看日志的重要工具都是桌面完整版自带不用额外装。另外重点说一下工作空间的建立方式。学了ROS三天以后你一定会需要自己建一个catkin工作空间通用的做法是mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd ~/catkin_ws catkin_make echo source ~/catkin_ws/devel/setup.bash ~/.bashrc这个流程后面每当你新建功能包、修改CMakeLists或者重新编译之后都要记得source一下不然新编译的成果不会生效。4.3 常用工具和常见扩展方向如果你装的是ROS 2 Humble生活节奏会跟ROS 1不太一样主要区别在于没有roscore、用colcon build替代catkin_make、通信模型变成DDS从代码层面看就是话题和服务接口的写法变动比较大。因为这些差异很多人问“我到底是学ROS 1还是ROS 2”我的看法是如果没别的基础直接从ROS 2开始学目前新出的功能包、机器人方案基本都基于ROS 2了很多院校和开源社区已经把资源转移到ROS 2阵营。另外如果你的研究方向涉及到视觉或传感器后续还可以关注一下基于ROS的摄像头驱动。常见做法是安装相机厂商提供的ROS驱动包或者用USB免驱摄像头加usb_cam功能包这个包可以在ROS节点里直接发布图像话题配合rqt_image_view查看画面是很多人入坑视觉SLAM的第一步。还有一些人装完ROS后想玩小车自主导航那还绕不开定位和建图这个话题。后面你可以尝试安装导航相关功能包配合仿真环境跑起来再结合激光雷达驱动把实物小车跑起来。整个链路下来ROS的复杂度和乐趣就展现出来了。5. 关于一键安装的客观评价与最终建议从结果导向来说鱼香一键安装脚本是我目前体验下来对新手最友好的ROS安装方式。它不是那种“什么都要你自己搞”的教程式安装而是帮你决策、帮你处理冲突、帮你绕开国内网络环境的障碍是真正在替用户考虑问题。不过我也想说一句可能会泼冷水的话依赖一键安装可以把环境跑起来但如果想走得更远还是要尽量理解脚本到底帮你做了什么。具体来说别人帮你配好了ROS源你要知道源是什么、为什么要换源脚本帮你配置了rosdep你要知道rosdep的作用是解析依赖关系而不是装包脚本帮你source了setup.bash你要知道这是为了让shell能找到ROS命令。这些知识一旦掌握就算未来某天出现一个全新的机器人框架你也不会慌。最后再分享一个我自己的习惯。每次用脚本装完环境我都会存一份当时的Ubuntu镜像和脚本版本记在当前项目的README里或者干脆写个MARKDOWN commit存到仓库里。这个习惯看起来很小但等你的机器人项目进入中期队友的电脑也需要复现同样的环境时一份明确的环境记录能帮所有人节省大把时间。