搞了两天没搞定的事,小鱼用一行命令帮你做完了。
先说说我自己的经历。最开始学ROS的时候,我自己手动装ROS Noetic,光配置源、处理依赖冲突、等编译就折腾了一个周末。装完了还有一堆环境变量要设置,更别提中间还遇到好几次下载包到一半就断开的情况。后来在群里看到有人用了鱼香ROS的一键安装,抱着试试看的心态在自己电脑上重装了一遍,从头到尾十几分钟,中间只需要回答几个交互问题,剩下的事情全都自动化处理了。
这篇文章就来说说鱼香ROS一键安装这个工具,它到底帮你做了什么,为什么要这样装,完整实操过程是什么样,以及装了这么多次之后我自己总结出来的避坑经验。不管你是刚接触ROS的新手,还是之前在手动安装上栽过跟头的老手,只要目标是把ROS快速、干净地跑起来,这篇内容应该能帮到你。
1. 为什么说ROS安装是一道“劝退关”
1.1 原生安装路上的“五座大山”
先别急着跑那条命令,我觉得有必要先讲清楚:ROS安装之所以劝退了那么多人,真不是大家动手能力差,而是原生安装这条路本身就布满了雷。我把它总结成“五座大山”。
第一座山是系统版本匹配。ROS不是一个独立运行的软件,它和Ubuntu版本、内核版本、Python版本深度绑定。ROS 1 Noetic需要Ubuntu 20.04,ROS 2 Humble要求Ubuntu 22.04,如果你拿一个Ubuntu 18.04去装Noetic,第一步就会在添加软件源的时候得到一堆404,因为官方源里根本没有对应的包。很多人一开始就倒在这一步,装之前根本没意识到操作系统和ROS版本之间是强绑定关系。
第二座山是软件源问题。ROS默认的软件源是官方源,在国内网络环境下,下载速度经常只有几十KB/s。ROS整个生态装下来要拉取的包数量非常多,动辄几百个,光是等待下载就足够让人崩溃。手动安装的办法是把源替换成国内镜像,但不同发行版的镜像源写法不一样,Ubuntu源和ROS源的配置又是两套体系,写错一个地方后面全盘皆输。
第三座山是依赖地狱。ROS底层依赖Boost、OpenCV、Eigen等一大堆第三方库,还会依赖Python的不同版本。安装过程中经常会出现某个依赖版本冲突,apt告诉你“需要 foo 但是将安装 bar”,这时候绝大多数新手是一脸懵的。手动装的话,你得自己一个个去查、去调,搞不好还会把系统里原来好好的包给升级坏掉。
第四座山是编译时间。如果走源码编译的方式装ROS,光编译核心功能就要几十分钟到一个多小时,电脑性能弱一点的话两个小时都正常。而且编译过程中一旦报错,排查起来非常耗时,日志里几百上千行输出,根本不知道该看哪一行。
第五座山是环境变量配置。就算你千辛万苦把包都装好了,还要手动配置ROS的环境变量,包括source各种setup.bash,设置ROS_MASTER_URI、ROS_HOSTNAME等。很多人装完ros跑roscore,报错说找不到命令,十有八九就是环境变量没配好。这五座大山叠加在一起,就是很多人学ROS卡住的第一道坎。
1.2 ROS版本与Ubuntu系统的匹配关系
这里单独拉一节出来说,因为版本匹配问题真的是最容易被忽略的。我见过太多人上来就问“我能不能在Ubuntu 22.04上装ROS Noetic”这句话本身就是个坑。ROS 1的最后版本是Noetic,官方规定的首选系统是Ubuntu 20.04;ROS 2目前的主力长期支持版本是Humble,对应Ubuntu 22.04。除了这几个,还有一些过渡版本比如ROS 2 Foxy对应Ubuntu 20.04。我把比较常见的对应关系整理成一张表,方便你参考:
| ROS版本 | 对应的Ubuntu版本 | 支持状态 | 适用场景 |
|---|---|---|---|
| ROS 1 Noetic | Ubuntu 20.04 | 维护期快结束 | 老教学项目、论文复现 |
| ROS 2 Foxy | Ubuntu 20.04 | 已停止维护 | ROS 2学习过渡期 |
| ROS 2 Humble | Ubuntu 22.04 | 长期支持(LTS) | 最推荐的学习版本 |
| ROS 2 Iron | Ubuntu 22.04 | 短期支持 | 尝鲜新特性 |
为什么会有这种绑定关系?因为ROS的二进制包都是针对特定Ubuntu发行版编译的,底层链接的库版本不一样,换个系统就可能加载失败。这一点很像手机App对Android版本的要求,低版本系统装不了新版App,强行装也会闪退。
所以在选型的时候我的建议很直接:如果你是全新开始,直接选Ubuntu 22.04加ROS 2 Humble,这套组合是当前时代的主流,社区资料多,官方支持周期也长。如果你是在校学生、需要复现很多教材里的ROS 1例子,那就用Ubuntu 20.04加ROS 1 Noetic,这个组合目前还有大量课程在用。顺便说一句,如果你以后想做Gazebo仿真,版本匹配更要慎重,Gazebo 11配Noetic、Gazebo 11或Ignition配Humble,都是常见组合,一块选好能省很多事。
1.3 前期手动安装踩过的真实教训
手动安装ROS的教程网上多得是,但为什么成功率不高?因为教程往往默认你的环境是“干净”的,而现实里的Ubuntu环境往往用了一阵子、装过一些别的东西。比如你之前装过Anaconda,把系统的Python指到了conda环境,再去装ROS,非常容易遇到模块路径混乱的问题;比如你装过OpenCV的另一个版本,ROS编译的时候检测到版本不对,直接报错;再比如你之前在软件源列表里改过源,跟ROS源混在一起后,apt update直接报公钥错误。
我自己手动装翻车最惨的一次,是在一台Ubuntu 20.04上装Noetic,装完之后创建空工作区也报一堆找不到头文件。后来查来查去,发现是之前装某个深度学习框架的时候,把系统里关键的编译工具链给影响到了。这种问题你让新手去排查,真的就是在劝退。而一键安装工具为什么能规避这些?因为它自己有一套完整的依赖检查和处理流程,后面我详细展开。简单说,把专业运维做的事交还给脚本,成功率自然就上来了。
2. 鱼香一键安装:一条命令背后的门道
2.1 一行命令拆开来看,到底干了什么
第一次看到鱼香的安装命令,很多人会觉得玄乎:就一行wget加一个source,怎么能搞定那么多事?其实这一条命令只是一把钥匙,真正的核心是它拉下来的那个脚本。
wget http://fishros.com/install -O fishros && . ./fishroswget把服务器上的安装脚本下载到本地,命名为fishros;&&符号表示前面的命令成功执行后才执行后面;. ./fishros是用source方式在当前shell中执行脚本。为什么用source而不是直接bash执行?这一点很关键:source会在当前shell进程里执行脚本,这样脚本里设置的环境变量能保留下来。如果换成bash fishros,脚本在子进程里跑完,环境变量就丢了,最终等于白装。
下载下来的这个脚本本身是个终端菜单程序。运行后会弹出一个交互选择界面,让你选择要安装的内容,例如ROS 1、ROS 2、Gazebo、常用工具和依赖库,甚至还有嵌入式开发板相关的配置。选完编号,后面就是脚本自动清理旧配置、自动切换镜像源、自动调用apt安装依赖包,整个过程基本不用人盯。
这背后的设计思路,其实就是把“人工配置流程”翻译成“自动执行流程”。资深开发者手动安装时做的事情,脚本都会做:检查系统版本、配置apt源、安装ros-key、更新源、批量安装ROS核心包、初始化rosdep、设置环境变量。只不过脚本把这些步骤固化了,还做了很多人容易漏掉的容错处理。用一句话总结就是:手动装ROS是在做系统运维,而一键安装是在使用一个成熟工具。
2.2 核心能力拆解:换源、依赖、版本、rosdep
鱼香安装工具最核心的几个能力,我逐一拆开说。
第一个是自动换源。脚本会检测你当前的系统版本,然后自动把ROS源和apt源配置成国内镜像,这一步解决的就是前面说的“软件源”问题。镜像源配置完成之后,下载速度能有非常明显的变化,我自己实测从几十KB/s提升到几MB/s,这个差距在实际安装体验上是天壤之别。当然它也支持手动指定源,适合一些特殊网络环境。
第二个是依赖管理。ROS安装过程中需要处理大量依赖,脚本内置了对不同Ubuntu版本、不同ROS版本的依赖关系清单,遇到缺的依赖会直接用apt补齐。它还能处理一部分常见的冲突,比如检测到你已经装过某些版本的库导致冲突时,会先提示你处理还是强制覆盖。这一点对不熟悉apt依赖机制的新手尤其友好。
第三个是版本选择。脚本支持安装ROS 1和ROS 2的多个版本,你不需要自己记哪个版本配哪个Ubuntu系统,菜单里会有清晰提示。菜单会显示当前系统适合装哪些版本,比如识别到Ubuntu 20.04就会推荐Noetic和Foxy,识别到Ubuntu 22.04就会推荐Humble和Iron,基本上不会给你选错的机会。
第四个是rosdep初始化。rosdep是ROS里用来管理依赖的包管理器,很多手动安装教程会在这里卡住,因为rosdep update在国内网络环境下经常超时。鱼香脚本会帮你配置rosdep的源,并执行初始化,成功率对比手动操作提升非常明显。这一点很多从手动安装转过来的用户会特别有感触,因为以前卡得最久的就是这一步。
2.3 一键安装与手动安装的对比
我从自己的体验出发,把两种方式做一个实际对比,这样你理解起来更直观:
| 对比维度 | 手动安装 | 鱼香一键安装 |
|---|---|---|
| 需要提前了解版本匹配知识 | 必须,否则寸步难行 | 不需要,菜单会提示 |
| 软件源配置 | 手写源文件,容易出错 | 自动检测并配置镜像 |
| 依赖冲突处理 | 自己排查,难度极大 | 脚本自动处理常见冲突 |
| 全程耗时(以Noetic为例) | 2-6小时,看网络情况 | 5-15分钟 |
| 新手平均成功率 | 很低,反复翻车 | 非常高,基本一次过 |
| 环境变量配置 | 手动source,容易漏 | 自动写入bashrc |
| 排错成本 | 极高,日志难读 | 选项清晰,可重跑脚本 |
这个表格不是说手动安装一无是处。如果你之后想做ROS相关的深度开发,手动装一遍能让你对系统结构有更深的理解,但那是“学习”阶段该做的事,不是“使用”阶段该做的事。工具存在的意义就是把人从繁琐的重复劳动里解放出来,把精力留给真正重要的机器人开发本身。
3. 完整实操记录:从零到ROS跑起来
3.1 环境准备:虚拟机、双系统与最低配置
在真正跑一键安装之前,先搞定运行环境。这里分两种情况说。
如果电脑性能还可以,内存16G以上,硬盘有足够剩余空间,直接用虚拟机装Ubuntu是很省事的选择。虚拟机的好处是不影响主系统,想删就删,适合新手反复折腾。我自己在VMware和VirtualBox里都试过,Ubuntu 22.04虚拟机里跑ROS 2 Humble完全没问题。虚拟机设置里给Ubuntu分的内存建议8G,CPU核数至少2个,磁盘建议60G起。别嫌给得大,ROS装完、再加Gazebo和几个仿真包,轻松吃掉二十几个G,留出余量后面才不焦虑。
如果是深度学习方向,需要GPU加速,那就建议双系统。虚拟机里用NVIDIA的GPU做ROS加深度学习仿真会非常痛苦,驱动和Cuda都要额外处理,性能也打折扣。双系统安装稍微复杂,但装完之后运行ROS和Gazebo的体验会顺滑很多。至于双系统怎么装,网上教程很多,注意Ubuntu分区的时候给根分区和home分区留足空间就行。
很多人问最低配置到底要多低。给一个我实测过的大致门槛:CPU i3级别及以上,内存4G起步,硬盘剩余30G以上。低于这个配置,跑小乌龟和Rviz勉强可以,但要跑Gazebo仿真或者SLAM建图就比较吃力了。如果你手头就是这么一台机器,也先不用气馁,ROS学习初期的很多基础概念在小乌龟和Rviz里就能掌握,等后面需要重仿真了再想着换机器。
3.2 交互式安装全程实录
环境准备好之后,整个安装流程就是下面这些步骤。我在一台Ubuntu 20.04的全新虚拟机里实际跑了一次,下面就是当时的完整过程。
第一步,打开终端,确认系统能联网,然后执行安装命令:
wget http://fishros.com/install -O fishros && . ./fishros第一次执行的时候,wget会显示下载脚本的进度条,脚本不大,几百KB左右,网络正常几秒钟就下载完了。下载完成后自动进入脚本界面。
第二步,脚本会检查你的系统版本。看到类似下面的输出说明检测通过了:
[INFO] 检测系统版本: Ubuntu 20.04.6 LTS [INFO] 检测系统架构: x86_64如果系统不是Ubuntu,或者版本太老,脚本会给出提示并中止。这一步可以避免很多人瞎装的问题:版本不对直接拦住,而不是装到一半才报错。顺便提一句,树莓派、Jetson这种ARM架构设备,脚本也有对应适配,但选项会有所不同,这里就以x86的Ubuntu为例。
第三步,出现选择菜单,大概长这样:
请选择要安装的内容: 1. ROS(ROS 1 发行版,如 Noetic) 2. ROS 2(ROS 2 发行版,如 Humble) 3. Gazebo(仿真环境独立安装) 4. 基础工具与依赖库 ... 请输入对应的数字:这里输入1进入ROS安装,然后脚本会让你继续选择具体版本。如果刚才检测到的是Ubuntu 20.04,它会推荐Noetic;如果是Ubuntu 22.04,则会推荐Humble。我当时选择的是Noetic,因为要配合课程里的ROS 1教程。如果你想学ROS 2,输入2之后选择Humble即可。
第四步,选择安装模式。通常会有“桌面完整版”和“基础版”两种,桌面完整版会包含Rviz、Gazebo、各种可视化工具和常用功能包,占用空间大一些;基础版只有核心功能,适合对体积敏感的场景。新手我建议直接选桌面完整版,因为后面做仿真、可视化几乎一定会用到Rviz和Gazebo,后面单独补反而麻烦。
第五步,脚本自动开始配置源、更新源、安装依赖包。这个过程终端会滚动输出大量日志,你要做的就是等。我当时实测Noetic完整版下载加安装大概花了十来分钟,主要时间花在apt下载上。中间如果网络出现波动,脚本会自动重试几次,比手动装省心很多。
第六步,安装完成后,脚本会询问是否把环境配置写入shell配置文件。这一步一定选是,否则每次打开新终端都要手动source。如果误选了否,之后可以自己在配置文件里补上,ROS 1补source /opt/ros/noetic/setup.bash,ROS 2补source /opt/ros/humble/setup.bash。
第七步,脚本提示安装完成,建议重启终端。到这一步,安装流程就全部结束了,此时你打开一个新终端,输入rosversion -d(ROS 1)或者printenv ROS_DISTRO(ROS 2),就能看到当前版本信息。
3.3 小乌龟测试:最简单的安装验金石
安装完成之后,怎么判断真的装好了?我推荐用ROS最经典的入门例子,小乌龟仿真器。
打开第一个终端,启动ROS核心:
roscore看到类似下面的输出,说明ROS主节点启动了:
started core service [/rosout]然后打开第二个终端,启动小乌龟节点:
rosrun turtlesim turtlesim_node这时桌面上会弹出一个蓝色背景的窗口,中间有一只小乌龟。再打开第三个终端,启动键盘控制节点:
rosrun turtlesim teleop_turtle在第三个终端里按键盘上的方向键,小乌龟就会在窗口里移动,还能画出运动轨迹。如果这三步都正常,说明ROS的安装、节点通信、话题机制都是OK的,可以放心往下学。
ROS 2的命令略有不同,不需要roscore,而是直接:
source /opt/ros/humble/setup.bash ros2 run turtlesim turtlesim_node ros2 run turtlesim turtle_teleop_keyROS 2节点之间由DDS自动完成通信,这也是ROS 2和ROS 1在架构上的一个明显差别。小乌龟测试虽然看起来简单,但它验证的是整条通信链路,比单纯看安装日志可靠得多。凡是装完说“好像有问题”的,我第一件事就问小乌龟跑起来没有,跑不起来说啥都白搭。
3.4 环境变量配置与版本混装问题
安装的时候脚本虽然会帮我们配置环境变量,但理解这个机制依然是必要的,因为后面开发经常要跟它打交道。
在Ubuntu终端里输入以下命令可以查看当前ROS版本:
echo $ROS_DISTRO如果输出noetic,说明当前shell已经加载了ROS 1 Noetic的环境。ROS 1的核心环境变量主要是ROS_ROOT、ROS_PACKAGE_PATH、ROS_MASTER_URI等。ROS 2不一样,它依赖的是AMENT_PREFIX_PATH这些变量。
环境变量的加载原理其实很简单:安装的ROS包放在/opt/ros/目录下,这个目录里有一个setup.bash文件,里面配置了各种路径和环境变量。我们在~/.bashrc里加一行source /opt/ros/noetic/setup.bash,每次打开新终端就会自动加载。如果哪一天你打开终端却运行不了ros命令,第一反应就是检查~/.bashrc里有没有这一行,或者当前终端有没有手动source过。
还有一个很容易忽略的坑:如果同一台电脑上同时装了ROS 1和ROS 2,两个版本的setup.bash都写在~/.bashrc里,后加载的那个会把环境变量覆盖成自己的版本,导致你每次想用另一个版本还得手动source。我的建议是新手不要在同一台机器上混装ROS 1和ROS 2,这两个版本的命令体系差异很大,混着用非常容易出现“明明装了却命令不存在”的诡异问题。如果你确实有双版本需求,建议用官方推荐的Docker方式隔离,各跑各的,互不干扰。
4. 安装与使用中的高频问题排查
4.1 网络问题:下载失败、卡住、源不可用
鱼香一键安装虽然解决了源的问题,但受网络环境影响依然会出现下载失败。最常见的情况是脚本在执行apt更新时卡住,或者某些包下载到一半报出类似“Failed to fetch”的错误。
我自己的处理方法是,先确认网络能正常访问镜像源:
ping mirrors.aliyun.com如果ping不通,检查一下网络连接。虚拟机用户特别容易出现NAT模式下DNS解析异常,可以试着重置一下虚拟网卡,或者把Ubuntu的DNS改成公用DNS。如果网络正常但还是下载失败,多半是镜像源的某个节点暂时不可用,退出脚本重新执行一次,脚本会重新选择可用镜像。
还有个比较隐蔽的问题:有些校园网、公司内网会对特定域名做限制,导致wget下载脚本的时候一直超时。这种情况我的建议是换一个网络环境再试,或者用手机热点试一次。别小看这一步,我见过好几个人的问题就是卡在这里。你可能会觉得这种问题很蠢,但真实环境里就是会存在,提前有心理准备能省不少时间。
4.2 磁盘空间不足的检查与清理
如果ROS装到一半报磁盘空间不足,这也是常见问题。特别是虚拟机场景下,虚拟磁盘默认容量有限,Ubuntu系统加桌面环境、开发工具占掉大半,再装ROS很容易不够。
遇到这个情况,要么扩容虚拟磁盘,要么清理现有空间。清理可以用系统自带的磁盘分析工具看一下哪些目录占空间大,比较常见的重灾区是apt安装包缓存。安装完之后清理一下:
sudo apt clean这个命令释放的是apt下载的deb安装包缓存,不影响已安装软件,释放几个G是很正常的。另外,日志文件、旧内核也可以清理,但新手不建议乱动内核相关的东西。如果你想省心,最简单的办法就是一开始把虚拟磁盘给够,Ubuntu系统盘直接干到80G,基本就不会在为空间发愁了。ROS这个生态就是很占空间,尤其是装了Gazebo模型库之后,认识这个事实比到处找清理技巧更重要。
4.3 与Anaconda等Python环境的冲突
这是我在实际帮别人排查时碰到次数最多的一个问题。很多学ROS的人同时也是学深度学习的,系统里装了Anaconda,而且大概率在shell配置文件里自动加了conda的初始化配置,导致每次打开终端默认进入base环境。
ROS和Anaconda的冲突主要在Python路径上。conda环境的Python是它自己的一套,系统原本的Python是/usr/bin/python3。ROS的很多工具链依赖的是系统Python和对应的pip包,如果你在conda环境下去编译ROS功能包,经常会报出找不到module、找不到Python头文件之类的错误。
最简单的处理办法是关掉conda的自动激活,改成手动激活:
conda config --set auto_activate_base false然后每次要用conda环境的时候,手动执行conda activate环境名。这样平时终端里用的就是系统Python,ROS相关操作不会受干扰;做深度学习的时候再单独激活conda环境,两边互不打扰。这个方法我已经在很多机器上验证过,目前是最省事的。如果你不想改配置文件,也可以在运行ROS命令前手动conda deactivate退出base环境,但这样就容易忘,不如一劳永逸改掉自动激活。
4.4 安装验证失败的常见排查清单
小乌龟跑不起来的排查,我整理几条经验。
roscore启动后马上退出的,先看日志提示。常见原因有:ROS日志目录权限有问题,或者磁盘满了。删除~/.ros目录,这个目录是运行时临时生成的,删了没影响,再启动roscore一般能解决。
rosrun提示找不到turtlesim包的,说明环境变量没有正确加载。先确认一下echo $ROS_PACKAGE_PATH里有没有包含/opt/ros/noetic/share路径,如果没有,就重新source一下setup.bash。
小乌龟窗口弹出来但是一片黑色的,在虚拟机里比较常见,这是显卡驱动或者OpenGL渲染的问题,不影响节点运行。可以先忽略继续学习,如果实在介意,在虚拟机设置里把3D加速关掉再重新启动,或者换一个窗口管理器。
另外还有一个我见过多次的情况:安装完成之后,用户没关终端,直接就在原来的终端里运行ros命令,结果提示找不到命令。这不是安装失败,而是当前终端没有加载新的环境变量。关掉终端重新开一个,问题就没了。别看这个原因简单,实际遇到的人不少。
5. 装完之后的学习路径参考
5.1 用Rviz与Gazebo把“仿真感”拉满
装好ROS不是终点,而是起点。很多人的误区是装完就不知道干什么了,我建议把官方经典的案例按顺序跑一遍。
除了前面说的小乌龟,接着一定要接触Rviz。启动Rviz的方式很简单:
rosrun rviz rviz然后把小乌龟的坐标变换话题添加进去,你就能在Rviz里看到小乌龟的三维位姿。这个案例虽然简单,但能让你第一次把ROS的“话题”和“坐标变换”这两个核心概念真正可视化地理解。很多人在文字层面理解不了什么是tf树,到Rviz里拖一拖、转一转,一下就明白了。
再进一步,把Gazebo跑起来,在仿真的环境里加载一个机器人模型。Gazebo对新手来说上手会有一点门槛,但它是后面做自主导航、机械臂仿真绕不开的工具。鱼香一键安装里也有Gazebo的安装选项,建议单独选一次。Gazebo首次启动下载模型库可能会很慢,国内网络环境下尤其明显,这一点要有心理准备,可以手动配置模型库的镜像路径。
5.2 创建第一个工作空间与功能包
可视化案例跑通之后,下一步是搭建你自己的开发环境。所谓工作空间,就是ROS项目的根目录,ROS 1的标准名称一般叫catkin_ws。
创建并初始化一个ROS 1工作空间:
mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_makecatkin_make第一次运行会在src目录下生成CMakeLists.txt,表示空间初始化成功。之后在src目录里创建自己的功能包:
cd ~/catkin_ws/src catkin_create_pkg test_pkg roscpp rospy std_msgs这个命令创建了一个名为test_pkg的功能包,依赖roscpp(C++接口)、rospy(Python接口)和std_msgs(标准消息包)。创建完后回到工作空间编译:
cd ~/catkin_ws catkin_make每次编译完记得source一下devel目录下的setup.bash:
source ~/catkin_ws/devel/setup.bash对于ROS 2,流程相似但命令不同,用colcon build替代catkin_make,用ros2 pkg create替代catkin_create_pkg。整体思路一致:一个工程目录、一个源码目录、一个编译命令。第一次完整走通这套流程之后,ROS开发的基本节奏你就掌握了,后面所有项目都是这个模式的变体。
5.3 学习路径与心态建议
最后根据我的经验,给一条比较平缓的学习路径。
第一个阶段,把基本功打牢:理解节点、话题、服务、参数这四个ROS核心概念。不要急着写代码,先用命令行工具观察它们怎么工作,拿小乌龟和Rviz反复练习。这个阶段的主要目标是看明白“数据是怎么在节点之间流动的”。
第二个阶段,尝试写自己的第一个发布者和订阅者节点。可以从Python版本开始,代码简单,理解起来直观。ROS 1就是写talker和listener,ROS 2就是写publisher和subscriber,官方文档都有完整的示例。别光看教程,一定要自己敲一遍,哪怕照抄,敲完再跑通的感觉完全不一样。
第三个阶段,做一个小型机器人仿真项目。比如让两轮机器人模型在Gazebo里动起来,然后加一个激光雷达插件,做建图。再进阶一点就是导航和路径规划。到这个阶段,你已经从“会用ROS”迈向了“真做机器人”,这个坎越过去,后面基本就通了。
第四个阶段,如果学ROS 2,可以深入看一下DDS通信机制以及QoS策略;如果学ROS 1,可以研究一下launch文件的组织方式。到这个阶段你已经不被“安装”这件事挡住了,后面每一次踩坑都是真正的学习机会。
我个人的体会是,ROS学习中最劝退的往往不是概念有多难,而是环境搞不定、例子跑不起来、出错没人问。鱼香一键安装至少帮你把最前面的那道墙拆了,让你能把精力放在真正重要的机器人编程和算法上。装完之后,别急着看一堆高级资料,先跑一跑小乌龟、开一开Rviz、碰一碰Gazebo,让这套工具链在你心里建立起一个感性的认识,再回去看书,你会有非常不一样的理解。