
ROS2入门这事说实话资料多到让人眼花缭乱但真正能让人从零基础一路走到能自己写功能包、跑导航的赵虚左老师那套讲义绝对是绕不开的一份。很多读者私信问我资源在哪拿、怎么配合着学这次我就把这套讲义的获取方式、配套环境搭建、学习路线以及我跑过程中踩过的坑一次性说清楚。先给没接触过的朋友一个定位赵虚左老师的ROS2讲义主打“保姆级”从Ubuntu系统准备、ROS2安装到节点通信、自定义消息、TF坐标变换再到SLAM建图和Nav2导航一路都有图文和配套视频。它不是什么高深的理论书而是一份照着敲就能跑通的实操手册。适合三类人刚接触ROS2、被一堆概念绕晕的初学者已经从ROS1转过来、想快速上手ROS2开发的老手以及做毕设或比赛项目、需要快速搭出机器人仿真和导航框架的同学。这套讲义的价值不在“讲了多少个知识点”而在于把“学ROS2”这件事拆成了可以一步步执行的路径。接下来我就按实际操作的顺序把获取讲义、搭建环境、配套学习方法、高频问题排查整个流程梳理一遍。1. 为什么ROS2入门都绕不开这套讲义1.1 讲义解决的核心痛点资料散、版本乱、概念抽象刚接触ROS2的人第一个崩溃的点往往不是ROS2本身而是“不知道该信哪个教程”。网上能搜到大量基于ROS1的教程命令是roscore、catkin_make而ROS2里全是ros2 run、colcon build照着旧教程敲一天报错报得怀疑人生。赵虚左老师这套讲义从起源上就是围绕ROS2设计的并且会明确标注“这个命令在ROS2 Humble下测试通过”这样就避开了“教程和版本不匹配”这个最大的坑。另一个痛点是ROS2的概念确实抽象。节点、话题、服务、动作、参数、生命周期节点……如果不理解这些通信机制学起来就是死记硬背换个场景就不会了。讲义的写法是先抛出生活中能对应的类比再用手敲代码的方式让你直观感受数据怎么流动最后才总结概念。比如讲话题通信它会先从“发布者—订阅者”的广播模型切入再写一个发布端节点、一个订阅端节点让你看到消息在终端里实时打印出来这个概念基本就忘不掉了。1.2 这套讲义在整个学习资源里处于什么位置如果把ROS2学习资源比作导航地图赵虚左老师的讲义算是“主路”。它和官方文档、其他视频教程的关系是这样的官方文档docs.ros.org是“交通法规”最权威、最完整但新手看容易迷路适合当字典查。赵虚左讲义是“导航路线”帮你规划好先走哪条路、再走哪条路每段路有明确的目标。其他视频教程是“路边的风景讲解”能补充细节和技巧但不适合作为主线因为很多视频基于旧版本或只讲某一个点。我个人建议的用法是主线跟着讲义走遇到概念不清时去官方文档查原始定义遇到具体功能包用法时再去视频或博客里补充。这样既有体系又有深度。1.3 不同基础的人该怎么用这套讲义纯零基础老老实实从第1章环境搭建开始别跳步。ROS2的很多问题都是环境问题基础没打牢后面写代码全是报错根本分不清是代码问题还是环境问题。有ROS1基础重点看通信机制对比、launch文件写法、colcon构建体系这几章可以跳过一些基础操作描述但建议把例程代码实际跑一遍感受差异。目标明确做导航/机械臂可以先把讲义中“通信基础”部分过一遍然后直接跳到SLAM、Nav2或者MoveIt相关的章节但遇到不懂的通信概念再回翻不要硬啃。2. 拿到讲义前的准备工作环境选型与基础配置2.1 先确定你的Ubuntu版本和ROS2发行版赵虚左老师的讲义内容主要针对ROS2 Humble版本这个版本对应Ubuntu 22.04。虽然ROS2也有新版本比如Jazzy对应Ubuntu 24.04但Humble是目前生态最成熟、资料最多、功能包兼容性最好的发行版讲义选择Humble作为主版本也是这个原因。这里有一个非常关键的建议如果你的电脑还没装系统或者准备换系统直接装Ubuntu 22.04别犹豫。有些同学觉得“我装个最新版Ubuntu 24.04再装新版本ROS2不是更前卫吗”结果就是讲义里的命令、功能包版本全都对不上遇到问题查资料也难查学习成本翻倍。学习阶段稳定比“新”重要得多。如果已经装了Ubuntu 20.04对应的是ROS2 Foxy和Humble的API差异不大但有些功能包名称和参数会有区别讲义里有些命令需要手动调整。建议有条件还是装22.04 Humble。2.2 系统安装完成后的基础环境配置装好Ubuntu 22.04之后先别急着装ROS2做好三件事换软件源国内网络环境直接把Ubuntu的软件源换成国内镜像不然apt update会慢到怀疑人生。安装基础工具vim、git、curl、net-tools这些基础工具先装上后面会经常用。确认网络ROS2安装过程中要从packages.ros.org下载如果网络不稳定建议先配置好镜像源后面安装部分会说。这里补充一个很实用的检查命令装完系统后先看一下自己CPU架构uname -m绝大多数PC是x86_64如果是arm64比如RK系列板子安装流程会有些差异。赵虚左老师讲义默认基于x86_64ARM平台需要额外注意消息库和功能包的兼容性别照着敲完才发现架构不对。2.3 选择安装方式二进制包还是源码编译ROS2 Humble安装有两种主流方式方式优点缺点适合场景二进制包apt安装安装快、依赖自动处理、卸载干净版本固定、无法修改底层绝大多数初学者、应用开发源码编译可修改内核代码、体验最新特性编译时间长、依赖坑多需要二次开发底层、研究源码初学者一律选二进制包安装这点我在无数场合强调过。源码编译看似“高级”实际会消耗大量时间在环境依赖上而不是学习ROS2本身。赵虚左老师讲义上手阶段也是基于二进制包等后面的课程用到源码编译时再切换也不迟。2.4 一键安装脚本和手动安装怎么选现在网上流传很广的“鱼香ROS一键安装”脚本确实能省不少事适合想快速搞定环境的人。但我的建议是如果你是跟着讲义学习第一遍最好手动安装。原因很简单手动安装过程会逼你理解“源”、“密钥”、“环境变量”这些概念而这些概念在后面排查问题时会反复用到。一键脚本装完你确实有了ROS2但遇到问题了会完全无从下手因为你根本不知道它往系统里放了什么。如果实在懒得折腾用一键脚本也可以但装完后要手动验证一下ros2命令能否正常使用并且知道环境变量配置在哪个文件里通常就是~/.bashrc里加了几行source。3. 赵虚左老师讲义获取的完整路径3.1 讲义的呈现形式视频、文档、代码仓库三件套赵虚左老师的ROS2学习资源其实是一个“三件套”组合视频B站上面有完整的课程视频适合跟着操作。讲义文档就是大家常说的“讲义”有在线版和PDF版图文并茂是学习主线。配套代码讲义中每个章节的例程代码都有对应的源码仓库可以下载下来直接编译运行。这三者缺一不可。视频帮你看操作过程文档帮你理思路代码让你能跑起来看到实际效果。只拿一个都会让学习效率打折扣。3.2 如何找到最新最全的讲义内容获取讲义的最直接方式就是搜索关键词“赵虚左 ROS2讲义”这里提醒一点网上流传的版本很多有的PDF是早期版本内容不完整或者命令过时。建议以在线文档的持续更新版本为准而不是下载一个别人转存的PDF就完事。常见途径有这么几个讲义对应的在线文档站会持续更新内容最全。GitHub上的源码仓库里面除了代码往往也有讲义的Markdown源文件。B站课程视频的置顶评论或简介中作者会放出讲义和代码的获取方式。我的经验是先找到配套源码仓库然后从仓库的README中找到讲义链接这样最容易拿到同步更新的版本。因为作者经常更新代码但PDF未必同步发布而仓库里的文档通常是最新的。3.3 获取配套源码仓库的正确方式讲义的每个章节几乎都有对应的例程这些例程的获取方式比讲义本身更重要。拿到源码仓库后不要急着git clone先看README确认两件事这个仓库对应的ROS2版本Humble还是其他依赖了哪些额外的功能包比如navigation2、gazebo、cartographer等。然后建议把仓库放到一个固定的工作目录下比如~/ros2_ws/src方便后续用colcon build统一编译。不要下载到桌面或下载文件夹路径有中文或空格会导致很多莫名其妙的问题。3.4 讲义内容获取后如何验证完整性拿到讲义后建议先翻目录确认是否包含以下几个核心模块ROS2环境安装与配置工作空间与功能包创建话题、服务、动作通信机制自定义消息与接口TF坐标变换launch文件与参数常用仿真Gazebo、RViz2SLAM与Nav2导航进阶如果某个版本缺了“Nav2导航”或“Gazebo仿真”这些章节说明是早期版本建议找更新版。因为这几章是ROS2从“会通信”到“会用”的关键跨越跳过去的话后面做机器人项目会遇到很多概念断层。4. 拿到讲义后怎么学才能高效落地4.1 第一个目标不是“搞懂”而是“跑通”很多人学ROS2有个误区拿到讲义后想先把理论看明白再动手。我的建议完全相反先照着敲跑通再想为什么。就拿“发布者-订阅者”来说你先把发布端节点写出来、编译、运行看到终端里一条条消息打印出来再回头去看“节点”、“话题”这些概念一下子就通了。如果先啃概念很容易在“什么是DDS”、“什么是QoS策略”这些底层细节上卡住失去了学习的节奏感。赵虚左老师讲义的每一个章节都建议按这个流程走看一遍文档15分钟→ 照着敲代码30分钟→ 编译运行看到效果15分钟→ 修改参数观察变化20分钟。整个过程控制在一小时内比单纯看两个小时视频效果好得多。4.2 用“小海龟”作为第一个验收节点“运行小海龟”这件事看起来简单实际上是ROS2环境是否打通的金标准。我建议每个学习者都把讲义中小海龟的例程作为第一个验收节点# 终端1启动小海龟仿真器 ros2 run turtlesim turtlesim_node # 终端2启动键盘控制节点 ros2 run turtlesim turtle_teleop_key如果能出现小海龟窗口并用键盘控制它移动说明你的ROS2基础环境已经OK了。此时可以顺手用ros2 node list和ros2 topic list看看当前有哪些节点和话题这是理解ROS2通信机制的第一手素材。这里分享一个我自己常用的检查套路# 查看话题列表 ros2 topic list # 查看话题的数据类型 ros2 topic type /turtle1/cmd_vel # 实时查看话题消息 ros2 topic echo /turtle1/cmd_vel在另一个终端按方向键时你会看到linear和angular数据在实时跳动这就是“话题通信”最直观的体现。很多初学者纠结“话题到底是什么”这么一操作比看十遍概念都管用。4.3 自定义消息接口从“用现成”到“自己造”讲义从第4章左右开始会讲自定义消息Custom Interface这是很多人觉得难的地方但恰恰是ROS2开发的精髓。为什么需要自定义消息因为实际项目中你不可能永远只传简单的std_msgs/String或geometry_msgs/Twist机器人的状态、传感器数据、控制指令都需要自己定义数据结构。自定义消息的流程我建议按四步走在功能包下创建.msg文件定义消息字段和类型。修改CMakeLists.txt和package.xml让构建系统知道要生成这个接口。用colcon build编译并source环境。在代码里import自定义消息用ros2 interface show验证。我踩过最大的坑是定义完消息colcon build成功但运行节点时提示找不到消息类型。原因通常是忘了source新的工作空间或者消息定义有语法错误没有在构建时暴露。现在我的排查套路很固定# 确认消息是否生成 ros2 interface show 你的功能包名/msg/你的消息名 # 如果找不到先检查是否source了工作空间 source install/setup.bash这个习惯让我后面写机械臂、导航相关的代码时省了很多时间。4.4 从基础通信到SLAM与Nav2讲义如何衔接进阶拿到讲义的前半部分很多人会问学完通信、TF、launch这些基础接下来怎么办其实讲义本身就把路铺好了。在基础阶段之后讲义的进阶章节会引入Gazebo仿真环境然后进入SLAM建图和Nav2导航。这个衔接是有讲究的Gazebo仿真解决的是“没有真实机器人也能跑算法”的问题它在计算机里建一个虚拟世界让机器人模型在里面运动、感知。SLAM建图解决的是“机器人怎么知道周围环境长什么样”的问题常用工具是Cartographer或Slam Toolbox。Nav2导航解决的是“机器人知道地图后怎么从A点安全走到B点”的问题涉及全局路径规划、局部避障、代价地图等概念。这三层是一环扣一环的跳过任何一层后面的内容都会卡壳。我见过不少同学想直接学Nav2通信和TF都弄不明白最后调了几天参数都不知道机器人为什么原地打转。按照讲义顺序走虽然慢一点但每一步都是稳的。结合时下的热门方向学完Nav2后还可以把“八叉树地图导航”OctoMap作为延伸。八叉树地图的特点是能表达三维空间中的占据情况适用于无人机和机械臂的避障导航它的数据结构用octomap_server实现。如果讲义版本里没有这一章可以自己额外找资料补充但前提是先把讲义基础的2D导航吃透。4.5 机械臂方向MoveIt与讲义基础的关系如果你的目标是机械臂方向讲义中关于TF坐标变换和URDF机器人建模的章节就是重中之重。机械臂的运动规划基于MoveIt框架而MoveIt的核心就是维护各个关节的TF树然后做运动学解算和碰撞检测。没有TF基础MoveIt的配置文档看起来就像天书。建议的学习路径是讲义中的TF章节反复看两遍自己动手创建一个带两个关节的简单URDF模型在RViz2里拖动关节看模型变化。这个过程走通了再接触MoveIt就顺理成章。反过来如果一上来就launch官方机械臂的demo只会看到一大堆节点和话题完全不知道怎么改自己的机械臂。5. 学习过程中最常踩的坑与排查技巧5.1 安装阶段换源和密钥问题ROS2 Humble安装过程中最多的问题集中在apt update和添加源这两步。用国内网络时建议把ROS2源换成国内镜像操作方式是把/etc/apt/sources.list.d/ros2.list里的packages.ros.org替换为国内镜像地址然后sudo apt update sudo apt upgrade如果apt update报错提示缺少公钥一般是添加密钥那步出了问题重新按官方教程执行gpg添加密钥的命令即可。这种问题很常见不用慌它不是ROS2的问题是系统信任链的问题。5.2 编译阶段colcon build的坑和依赖缺失colcon build报错是ROS2学习中最常见的“劝退点”之一。我总结下来大部分编译失败原因如下代码里漏了头文件或依赖包没有在package.xml中声明CMakeLists.txt里没有正确添加编译依赖编译时忘了source之前已安装的依赖环境工作空间下有多个功能包互相依赖但编译顺序不对。解决思路是先单独编译报错的功能包看完整错误日志不要只看最后几行。很多错误信息在终端前面几屏翻上去看才能定位到真正的原因。另外强烈建议用--symlink-install参数编译自己开发的功能包colcon build --symlink-install这个参数会把Python代码以软链接形式安装改代码后不用重新编译就能生效对调试Python节点极其高效。C代码改了还是需要重新编译但这个参数至少省掉了Python部分的重复编译时间。5.3 运行阶段环境变量和source顺序ROS2环境中“source了没有”是灵异事件的最大来源。有时候你明明编译成功运行节点却提示找不到功能包90%是环境变量问题。检查思路# 查看当前ROS2环境 printenv | grep ROS # 查看是否能看到工作空间 ros2 pkg list | grep 你的功能包名source /opt/ros/humble/setup.bash之后每次打开新终端都要重新执行。如果觉得麻烦可以写进~/.bashrc但我建议理解它的原理而不是无脑添加。因为当你同时使用多个工作空间时后source的会覆盖先source的可能导致版本错乱。5.4 仿真阶段Gazebo和RViz2常见问题Gazebo启动卡死、RViz2打开后没有机器人模型这些也是高频问题。先说Gazebo启动卡死多半是模型文件下载慢导致的Gazebo启动时会尝试从模型库下载3D模型国内网络容易卡住。解决办法是提前把模型库git clone下来放到~/.gazebo/models目录。再说RViz2打开后什么都没有通常是这几个原因没有运行发布机器人模型的节点robot_state_publisher没启动Fixed Frame设置不对应设为URDF中的根坐标系通常是base_link或base_footprintTF树断裂某些关节的parent frame和child frame对不上。排查时可以建一个tf_monitor或直接ros2 run tf2_tools view_frames生成TF树PDF一眼就能看到断在哪。这个方法我用了很多次比盲改参数高效得多。5.5 实用排查速查表症状常见原因排查命令 / 操作ros2: command not found环境变量没sourcesource /opt/ros/humble/setup.bash找不到功能包工作空间环境变量缺失source install/setup.bashcolcon build报依赖缺失package.xml或CMakeLists.txt配置不全看完整日志检查每个依赖RViz2没有机器人模型robot_state_publisher未启动检查TF树确认Fixed FrameGazebo启动卡死模型库下载失败预下载模型库到~/.gazebo/models话题收不到数据QoS不匹配ros2 topic info -v 话题名查看QoS自定义消息找不到未重新编译或未sourceros2 interface show验证QoS不匹配这个问题在讲义里可能只是一带而过但实际项目中经常会遇到尤其是做摄像头和激光雷达数据传输时。如果两个节点的QoS策略不一致比如一个是SENSOR_DATA一个是DEFAULT话题就会处于“有名字但收不到数据”的诡异状态。6. 从讲义出发建立自己的ROS2知识体系6.1 不要停留在“能跑”要追一层原理按讲义学完一遍后很多人会陷入一个状态能照着文档跑通所有例程但换个需求就不知道怎么写代码。这种“看得懂但写不出”的本质是没有建立自己的知识网络。建议从下面几个方向去深入看消息接口每接触一个新功能包先ros2 interface show看它的消息定义理解数据从哪来到哪去。看节点图用ros2 rqt_graph看看当前系统中节点和话题的拓扑结构建立“系统由节点组成、节点通过话题协作”的直觉。看日志跑通后用ros2 topic echo观察消息内容用rqt_console看日志输出培养数据敏感性。6.2 善用日志和调试工具拒绝瞎试调试ROS2程序我见过太多人靠“随便改一下再编译试试”这种方式效率极低。正确做法是按层次定位网络层用ros2 node list确认节点是否正常注册通信层用ros2 topic list/ros2 topic echo确认话题是否有数据算法层再看代码逻辑是否正确。这个顺序基本能定位95%的问题。如果节点本身没起来你却盯着代码逻辑看半天浪费时间不说还会怀疑人生。6.3 扩展方向交叉编译与嵌入式平台如果做项目做到一定阶段遇到要在ARM板卡比如RK系列上跑ROS2的情况就涉及交叉编译。讲义本身不会讲太深但基础打牢后会更容易理解交叉编译的思路在x86主机上编译出ARM平台的二进制再拷贝到板卡上运行。主要会用到sysroot、交叉编译工具链和colcon的一些参数配置。这个话题比较进阶建议先把讲义学完、在PC上跑通完整流程再碰。不要一开始就想着嵌入式平台否则会遇到“传感器驱动没有”、“功能包不支持ARM”等一系列问题学习动力很容易被消磨掉。6.4 构建自己的学习作品集学完讲义后强烈建议做一个小项目来巩固。比如使用Gazebo搭建一个室内环境用Cartographer建图用Nav2实现自动导航到指定点订阅激光雷达话题用RViz2做实时数据可视化结合IMU消息格式融合里程计数据做定位。做完这些小项目后简历上和面试时都有东西可以展示比单纯说“我学过ROS2”有说服力得多。7. 写在最后一些实用的学习经验聊了不少干货最后分享几个我自己的体会第一学习ROS2最大的障碍不是技术本身而是“信息筛选”的能力。赵虚左老师的讲义是一份很干净的学习路径尽量跟着它走不要同时看太多其他教程否则容易精力分散。先把一份吃透再广泛涉猎是我验证过最有效的路线。第二遇到报错不要急着搜问题先养成看日志的习惯。ROS2的日志信息其实比较丰富大部分时候已经把原因写在里面了只是很多人习惯跳过日志直接去百度反而让简单问题复杂化。第三环境问题占了ROS2学习时间的一半以上所以每一台新电脑、每一个新系统都建议用同一个检查清单快速验证环境ros2 doctor、ros2 node list、ros2 topic list、运行小海龟。我给自己定的规矩是——不通过这个清单绝不开始写业务代码。最后再分享一个小技巧讲义里所有的例程都建议自己手动敲一遍而不是复制粘贴。虽然慢但手敲过程会让你注意到许多被忽略的细节比如空格、缩进、分号、包的依赖关系。这些细节复制粘贴永远不会告诉你。等你敲了几十个例程之后对ROS2的代码结构会自然形成肌肉记忆写自己的功能包时思路会清晰很多。