










如果你刚买了一台 宇树 Go2 EDU,然后开始研究二次开发,很容易遇到这样一个 GitHub 项目:
abizovnuralem/go2_ros2_sdk
项目地址:
https://github.com/abizovnuralem/go2_ros2_sdk
很多第一次接触机器人开发的人,看到这个项目以后会更迷糊:
Go2 不是已经有 SDK 了吗?
Go2 自己不是已经有摄像头和雷达了吗?
ROS2 又是干什么的?
这个go2_ros2_sdk和宇树官方 SDK 是什么关系?
是不是把它“装进机器狗”以后,Go2 就会自动导航?
没有这个项目,Go2 就不能二次开发了吗?
我的代码到底运行在电脑上,还是运行在机器狗里面?
这些问题其实都指向同一件事:
你还没有把“Go2 本体、官方 SDK、ROS2、go2_ros2_sdk、SLAM、Nav2”放到同一张图里。
这篇文章不从复杂源码开始,而是从一台刚买回来的 Go2 EDU 开始,一层一层把这些概念串起来。
如果你之前完全没有机器人开发经验,也可以直接从头看。
先给结论:
go2_ros2_sdk不是 Go2 的官方驱动,也不是机器狗的操作系统,更不是一个完整的机器人产品。
它是一个:
第三方开源的 Go2 + ROS2 集成项目。
它主要做的事情是:
把 Go2 的运动状态、雷达、摄像头、机器人模型等能力接入 ROS2,并且进一步把 RViz、SLAM、Nav2、手柄控制等常见机器人组件提前帮你串起来。
最简单的理解:
Go2
↓
go2_ros2_sdk
↓
ROS2
↓
雷达 / 摄像头 / 机器人模型
↓
SLAM / Nav2 / RViz
所以它不是“让 Go2 从不能开发变成能开发”。
真正的价值是:
让 Go2 更容易进入 ROS2 生态,少做大量基础集成工作。
你刚买到的 Go2 EDU,本身已经是一台完整的四足机器人。
它已经具备很多能力,例如:
站立
趴下
前进
后退
转弯
保持平衡
关节控制
IMU
激光雷达
摄像头
机器人状态
网络通信
最重要的一点是:
“四条腿到底怎么动”这件事,宇树已经帮你做好了。
你不需要自己写:
左前腿关节转 16°
右前腿关节转 18°
左后腿输出多少力矩
下一步哪个脚先落地
身体怎么保持平衡
这些属于 Go2 自己的底层运动控制。
你做二次开发时,更像是在告诉它:
站起来
↓
往前走
↓
停下来
所以可以把 Go2 分成两层理解。
你写的程序
=
决定“让机器狗做什么”
Go2 自己的控制系统
=
负责“具体怎么把动作做出来”
假设你现在只想做一件非常简单的事:
写一个 Python 程序,让 Go2 站起来,然后向前走,再停止。
这时候最基础的结构是:
你的 Ubuntu 电脑
│
│ 运行 Python 程序
↓
Unitree SDK
↓
网络
↓
Go2 EDU
你的程序不一定需要放到 Go2 内部。
它完全可以运行在你自己的 Ubuntu 电脑上。
例如:
my_go2_demo.py
运行:
python3 my_go2_demo.py
程序通过宇树 SDK 给 Go2 发命令。
Go2 收到:
站起来
然后 Go2 自己负责控制四条腿站起来。
这个时候:
你已经在做 Go2 二次开发了。
还没有 ROS2。
也没有 go2_ros2_sdk。
宇树官方提供:
Unitree SDK2
还提供 Python 版本:
unitree_sdk2_python
第一次接触时,可以把 SDK 理解成:
宇树给程序员准备的“可编程遥控器接口”。
普通遥控器:
你推动摇杆
↓
Go2 前进
SDK:
你的程序
↓
调用 Move
↓
Go2 前进
例如程序逻辑可能是:
StandUp
↓
Move
↓
StopMove
你并不需要知道每条腿内部是怎么运动的。
所以官方 SDK 解决的是:
“我的程序怎么和 Go2 说话。”
这是整个 Go2 二次开发里最容易误解的问题。
刚开始开发时,最简单的方式就是:
┌──────────────────────┐
│ 你的 Ubuntu 电脑 │
│ │
│ my_go2_demo.py │
│ ↓ │
│ Unitree SDK │
└─────────┬────────────┘
│
│ 网线 / Wi-Fi
↓
┌──────────────────────┐
│ Go2 EDU │
│ │
│ Go2 自己的控制系统 │
│ ↓ │
│ 四条腿运动 │
└──────────────────────┘
也就是说:
你的代码运行在电脑上,Go2 负责执行动作。
所以刚入门时,不要先理解成:
SSH 登录 Go2
↓
复制 Python 文件
↓
直接在机器狗核心系统里运行
这不是最适合初学者建立概念的方式。
开发阶段:
Ubuntu 笔记本
↓
运行程序
↓
控制 Go2
完全没问题。
如果以后希望程序长期运行,就需要有一台 Linux 计算机长期跟着机器人工作。
可以理解成:
一台随机器狗一起运行的 Linux 计算机
↓
运行你的程序
↓
通过网络控制 Go2
核心逻辑始终没变:
运行你代码的计算机,通过网络和 Go2 通信。
所以所谓:
“把程序部署到机器狗上”
很多时候并不是:
把程序塞进 Go2 核心控制器。
而是:
让运行你程序的 Linux 计算机跟着 Go2 一起工作。
如果你只做:
站起来
前进
后退
转弯
停止
读取机器人状态
官方 SDK 已经很好用了。
但是机器人项目一旦复杂一点,就会出现很多程序。
例如:
雷达程序
摄像头程序
机器人控制程序
地图程序
定位程序
导航程序
可视化程序
这些程序之间需要互相交换数据。
例如:
雷达
↓
把环境数据给建图程序
建图程序
↓
把地图给导航程序
导航程序
↓
告诉控制程序往哪走
这时候就需要一个统一的机器人软件框架。
这就是:
ROS2
ROS2 全称:
Robot Operating System 2
中文通常叫:
机器人操作系统 2
但它并不是 Windows、Ubuntu 这种真正的操作系统。
更适合小白的理解是:
ROS2 是机器人软件之间的“公共通信平台 + 开发框架”。
假设机器人里面有三个程序:
雷达程序
地图程序
导航程序
没有 ROS2 时,你可能自己设计:
HTTP
TCP
UDP
文件
自定义协议
让它们互相通信。
有 ROS2 后,可以使用统一的:
Node
Topic
Service
Action
让程序协作。
第一次接触,只需要先理解两个词。
Node 可以理解成:
一个正在运行的机器人程序。
例如:
雷达驱动
=
一个 Node
摄像头程序
=
一个 Node
导航程序
=
一个 Node
Topic 可以理解成:
ROS2 里面传递消息的一条“频道”。
例如:
雷达 Node
↓
不断往一个 Topic 发雷达数据
SLAM Node
↓
订阅这个 Topic
于是 SLAM 得到了雷达数据
可以把 Topic 想成微信群。
雷达
=
群里一直发消息的人
SLAM
=
群里一直看消息的人
两边不需要直接写死互相调用。
这是理解 go2_ros2_sdk 最关键的问题之一。
Go2 确实有雷达。
但是:
“硬件上有雷达”不等于“ROS2 里的所有软件都能直接使用这个雷达”。
比如 Go2 雷达产生了一份原始数据。
ROS2 中很多程序希望得到的是:
PointCloud2
LaserScan
这种标准数据。
所以中间可能需要:
Go2 雷达
↓
读取原始数据
↓
解析
↓
格式转换
↓
ROS2 PointCloud2
↓
ROS2 LaserScan
↓
SLAM / Nav2
这就是机器人集成里非常重要的一件事:
把硬件数据变成 ROS2 标准数据。
所以:
Go2 自带雷达
和:
ROS2 能直接使用 Go2 雷达
不是同一件事。
同样的道理。
Go2 有摄像头。
但是 ROS2 里的程序希望:
订阅一个 Image Topic
然后直接拿到图片。
所以需要有人完成:
Go2 摄像头
↓
获取视频流
↓
解码
↓
转成 ROS2 Image
↓
发布 Topic
这样:
RViz
目标检测
图像处理
其他 ROS2 程序
才能比较方便地使用它。
所以重点不是:
有没有摄像头。
而是:
摄像头的数据有没有被接入 ROS2。
到这里,再看这个名字就容易理解了:
go2_ros2_sdk
可以拆成:
Go2
+
ROS2
+
SDK / 集成工具
它的核心目标就是:
让 Go2 更容易变成一台“ROS2 机器人”。
可以画成:
Go2
│
├── 机器人状态
├── 雷达
├── 摄像头
├── IMU
├── 关节状态
└── 运动控制
│
↓
go2_ros2_sdk
│
↓
ROS2
│
┌──────┼──────┐
↓ ↓ ↓
RViz SLAM Nav2
这就是这个项目最核心的位置。
不是。
这个项目仓库是:
abizovnuralem/go2_ros2_sdk
它属于:
第三方社区开源项目。
宇树官方仓库通常在:
unitreerobotics/...
例如:
unitree_sdk2
unitree_sdk2_python
unitree_ros2
所以一定要区分:
Unitree SDK2
=
宇树官方
unitree_ros2
=
宇树官方
go2_ros2_sdk
=
社区第三方
这是一个特别好的问题。
宇树官方的:
unitree_ros2
主要解决:
Go2 怎么和 ROS2 通信。
而这个第三方的:
go2_ros2_sdk
在这个基础目标上继续往上做了很多集成。
它不仅想让:
Go2
↓
ROS2
通信起来。
还进一步帮你组合:
机器人模型
雷达
摄像头
RViz
手柄
SLAM
Nav2
Foxglove
目标检测
所以可以非常粗略地类比:
unitree_ros2
=
官方提供“基础道路”
go2_ros2_sdk
=
社区开发者在道路基础上,
又帮你把很多常用设施搭起来了
如果一定要用一个生活化的比喻,我更推荐:
“精装修样板房”。
宇树官方 SDK 给你的更像:
房子的基础结构
水电入口
建筑接口
而 go2_ros2_sdk 已经帮你继续做了:
灯接好了
水龙头接好了
空调位置留好了
门装好了
一些家具也摆进去了
你拿过来以后:
不是从一块空地开始建房子。
而是在一个已经能住的基础上继续修改。
当然,这只是为了方便理解。
从技术上说,它是:
Go2 ROS2 的第三方集成项目。
根据项目当前 README,它已经覆盖很多能力,包括:
URDF 机器人模型
关节状态同步
IMU
手柄控制
Go2 状态 Topic
足底力传感器
激光雷达 PointCloud2
摄像头
Foxglove
LaserScan
多机器人
WebRTC
CycloneDDS
点云地图
SLAM
Nav2
目标检测
第一次看到这些名词不用紧张。
我们一个一个翻译成人话。
URDF 可以简单理解成:
机器人的“数字模型说明书”。
它描述:
Go2 身体多大
腿在哪里
关节在哪里
每个部件怎么连接
有了它以后,RViz 才能画出一条 Go2。
例如:
真实 Go2
↓
关节状态
↓
URDF
↓
RViz
↓
屏幕上看到一条虚拟 Go2
所以你在 RViz 里看到机器狗模型,不是摄像头拍出来的。
而是:
ROS2 根据机器人模型和实时关节状态画出来的。
RViz 是 ROS2 非常常见的可视化工具。
可以理解成:
机器人开发人员的“可视化监控窗口”。
它可以显示:
机器人模型
雷达点云
LaserScan
地图
坐标系
摄像头
机器人当前位置
导航路线
目标点
也就是说,真实机器狗在地上走。
你的电脑屏幕里可以同时看到:
它自己
周围雷达
地图
导航路线
这对于调试非常重要。
Go2 的雷达会感知周围很多空间点。
这些点组合在一起,叫:
点云。
例如雷达看到:
墙
桌子
椅子
柜子
人
不会直接告诉你:
“这是桌子。”
它更像产生:
这里有一个点
那里有一个点
那里还有一个点
……
成千上万个点组合起来:
就形成了周围环境的三维轮廓。
ROS2 中常用:
PointCloud2
来表示这种点云数据。
PointCloud2 更像:
三维空间点。
而 LaserScan 可以先理解成:
机器人周围一圈二维距离扫描。
很多 SLAM 和导航程序很喜欢使用这种形式。
所以项目里面会有类似:
Go2 雷达
↓
PointCloud2
↓
转换
↓
LaserScan
这也是为什么 README 里会看到:
pointcloud_to_laserscan
它不是新的雷达。
它只是:
把一种数据格式转换成另一种更适合导航使用的格式。
SLAM 是机器人领域非常常见的一个词。
不用先记英文。
直接理解成:
机器人一边走,一边画地图,同时判断自己大概在哪里。
比如 Go2 第一次进入一个办公室:
开始
↓
不知道房间长什么样
↓
雷达不断扫描
↓
Go2 慢慢往前走
↓
发现墙
↓
发现门
↓
发现走廊
↓
地图逐渐画出来
最后得到:
一张地图
这个项目已经集成:
slam_toolbox
所以不用你从零自己把 SLAM 接到 Go2 上。
SLAM 解决:
地图从哪里来。
Nav2 更偏向解决:
有了地图以后,机器人怎么从 A 点走到 B 点。
例如地图已经有:
办公室门口
会议室
走廊
房间
现在你告诉机器人:
去会议室。
Nav2 会做:
我现在在哪
↓
目标在哪
↓
算一条路线
↓
沿着路线移动
↓
遇到障碍重新调整
所以:
SLAM
=
把环境画成地图
Nav2
=
利用地图导航
现在就很好理解了。
如果没有这个项目,你可能要自己完成:
Go2 接 ROS2
↓
Go2 雷达接 ROS2
↓
摄像头接 ROS2
↓
关节状态接 ROS2
↓
机器人模型接 RViz
↓
PointCloud2 转 LaserScan
↓
配 TF
↓
接 slam_toolbox
↓
接 Nav2
↓
调 Launch
每一项都不是一句代码。
真正麻烦的是:
这些东西必须全部能一起工作。
而这个项目已经把大量连接工作提前做好。
这才是它最大的价值。
不会。
这是一定要讲清楚的。
没有这个项目:
Go2 仍然有雷达
你仍然可以:
使用宇树官方接口
↓
自己读取雷达
↓
自己接 ROS2
↓
自己接 SLAM
所以:
没有
go2_ros2_sdk,不是不能做。
而是:
很多东西需要自己搭。
也不会。
你完全可以使用:
官方 SDK
官方 unitree_ros2
ROS2
SLAM
Nav2
自己搭一套。
但你需要解决:
数据格式
Topic
TF
Odometry
机器人模型
雷达
地图
Nav2 参数
运动控制
所以区别是:
没有它
=
自己拼
有它
=
别人已经帮你拼好了很大一部分
这个地方也很容易混淆。
Go2 官方 App 自己就提供一定的建图能力。
那为什么还要 ROS2 的:
slam_toolbox
因为两者目标不完全一样。
官方 App 建图更偏:
官方功能
快速使用
基础体验
而 ROS2 SLAM 更偏:
开发者自己控制地图
自己保存
自己修改
自己接导航
自己接其他 ROS2 程序
自己调整参数
所以你可以理解:
不是 Go2 “不会建图”,而是 ROS2 开发者希望把地图能力掌握在自己的软件体系里。
这个项目有一个很重要的启动文件:
robot.launch.py
第一次看到 Launch 可以理解成:
“总开关”。
因为一个机器人系统不是只启动一个程序。
可能要启动:
Go2 驱动
机器人模型
摄像头
雷达
LaserScan
RViz
手柄
SLAM
Nav2
如果没有 Launch,你可能需要:
终端 1:启动 Go2 驱动
终端 2:启动雷达
终端 3:启动摄像头
终端 4:启动 robot_state_publisher
终端 5:启动 RViz
终端 6:启动 SLAM
终端 7:启动 Nav2
Launch 的作用就是:
帮你把一堆程序一起启动。
所以运行:
ros2 launch go2_robot_sdk robot.launch.py
本质上相当于:
按下这套 Go2 ROS2 系统的“总启动按钮”。
根据 README,启动后可以看到多种数据。
例如:
RobotModel
PointCloud2
LaserScan
Image
Map
Odometry
翻译成人话:
RobotModel
=
屏幕里的虚拟 Go2
PointCloud2
=
雷达三维点云
LaserScan
=
雷达二维扫描
Image
=
Go2 摄像头画面
Map
=
SLAM 生成的地图
Odometry
=
机器人走过的位置变化
这时候你就真正进入了 ROS2 的机器人开发世界。
假设你刚开始。
目标非常简单:
我想在电脑上看到 Go2 雷达数据。
如果不用这个项目,你可能需要研究:
Go2 雷达数据接口
↓
数据怎么读取
↓
格式是什么
↓
怎么转成 PointCloud2
↓
怎么发布 ROS2 Topic
↓
RViz 怎么订阅
有了这个项目:
连接 Go2
↓
启动项目
↓
项目读取雷达
↓
转换成 PointCloud2
↓
发布 ROS2 Topic
↓
RViz 显示
你面对的是:
已经有人铺好的链路。
这就是最直观的价值。
目标:
让 Go2 在房间走一圈,然后得到地图。
整个过程可以理解成:
Go2 雷达
↓
go2_ros2_sdk
↓
ROS2 PointCloud2 / LaserScan
↓
slam_toolbox
↓
地图
↓
RViz 显示
然后你用手柄让 Go2:
往前
↓
转弯
↓
经过走廊
↓
进入另一个房间
Go2 一边走:
雷达一边扫描
SLAM 一边:
画地图
最后保存。
项目 README 已经提供了这一套建图流程。
地图已经做好。
下一步:
让 Go2 从当前位置去房间另一头。
你可以在 RViz 中设置:
Nav2 Goal
简单理解就是:
在地图上点一个目标点。
然后:
Nav2
↓
计算路线
↓
输出运动控制
↓
Go2
↓
开始移动
这就是导航。
但是:
能运行,不等于一定一次就运行得很好。
地图、初始位置、机器人朝向、参数等都会影响导航效果。
不是。
这是必须单独强调的。
它已经帮你做了大量工作。
但真实机器人不是网页程序。
可能出现:
地图歪了
↓
导航路线就歪
初始位置错了
↓
机器人以为自己在另一个地方
朝向错了
↓
Go2 一开始就往错误方向走
参数不合适
↓
原地转圈
环境变化
↓
重新规划
README 甚至明确提醒:
地图或定位有问题时,机器人可能出现撞墙、试图穿墙等异常行为。
所以这个项目降低的是:
开发和集成门槛。
它没有消除:
现场调试。
这又回到了最开始的问题。
最常见的理解是:
Ubuntu 电脑
│
├── ROS2
├── go2_ros2_sdk
├── SLAM
├── Nav2
└── RViz
│
│ 网络
↓
Go2 EDU
所以:
go2_ros2_sdk通常运行在你的 ROS2 Ubuntu 计算机上。
不是:
把 GitHub 项目直接复制进机器狗核心控制器
然后就结束。
你的 Ubuntu 电脑运行:
ROS2 Node
这些 Node 通过:
网络
和 Go2 通信。
README 当前支持两种主要方式:
WebRTC
CycloneDDS
项目的说明是:
WebRTC
→ Wi-Fi
CycloneDDS
→ Ethernet / 有线
第一次学习不用研究底层协议。
可以先简单理解成:
方案 A
电脑通过 Wi-Fi 和 Go2 通信
方案 B
电脑通过有线网络和 Go2 通信
项目负责帮你处理对应的通信。
因为它是第三方项目。
Go2 官方固件更新以后:
通信方式
加密方式
数据接口
数据频率
可能发生变化。
第三方项目就需要跟着适配。
README 当前就专门提到:
Go2 较新的固件在 WebRTC 本地连接中改变了加密握手方式。
某些情况下需要额外提供:
AES Key
这说明一个很现实的问题:
第三方项目能帮你省很多开发时间,但兼容性需要自己验证。
README 当前还提到:
LiDAR
大约 7Hz
Joint State
在部分新固件情况下大约 1Hz
Hz 可以简单理解成:
每秒更新多少次。
例如:
7Hz
=
一秒大约更新 7 次
1Hz
=
一秒大约更新 1 次
所以:
雷达画面
可能更新得比较快
关节模型
可能看起来有一点延迟
这并不一定说明机器狗真实的腿一秒只动一次。
而是:
ROS2 这边收到的某类关节状态数据更新频率可能较低。
这个项目还集成了 COCO 目标检测相关能力。
简单理解:
Go2 摄像头
↓
ROS2 Image
↓
目标检测程序
↓
识别人 / 动物 / 常见物体
比如检测到:
person
以后可以继续开发自己的逻辑。
但是第一次学习这个项目,我不建议先看这一层。
正确顺序更应该是:
先连上 Go2
↓
先看机器人状态
↓
再看雷达
↓
再看摄像头
↓
再建图
↓
再导航
↓
最后再考虑目标检测
因为你现在首先需要建立的是:
系统结构。
而不是:
某个 Python 文件第 87 行是什么意思。
你应该先能自己讲出:
Go2 是机器人本体
↓
官方 SDK 负责基础通信和控制
↓
ROS2 负责机器人软件协作
↓
go2_ros2_sdk 把 Go2 和 ROS2 常用组件集成起来
↓
雷达进入 ROS2
↓
SLAM 用雷达建图
↓
Nav2 用地图导航
只要这个主线通了,后面看代码才不会迷路。
可以直接这样判断。
例如:
站起来
前进
停止
读取状态
先学:
Unitree SDK2
或者
unitree_sdk2_python
例如:
Go2 和 ROS2 怎么通信
看:
unitree_ros2
例如:
Go2
+
ROS2
+
雷达
+
摄像头
+
RViz
+
SLAM
+
Nav2
可以研究:
go2_ros2_sdk
这三个不是互相替代。
更像是不同层次。
还是写在你的 ROS2 工程里。
例如你以后写一个自己的 Node:
my_go2_node
它可以订阅这个项目已经发布出来的数据。
例如:
雷达 Topic
摄像头 Topic
机器人状态 Topic
然后你自己的程序做:
读取状态
↓
做判断
↓
发送控制
这时候 go2_ros2_sdk 更像:
基础设施。
你自己的代码则是:
上层应用。
把所有东西放到一张图里:
┌──────────────────────────────┐
│ 你的 Ubuntu 电脑 │
│ │
│ 你自己的程序 │
│ ↓ │
│ ROS2 │
│ ↓ │
│ go2_ros2_sdk │
│ ↓ │
│ 雷达 / 摄像头 / 模型 / 控制 │
└──────────────┬───────────────┘
│
│ 网络
↓
┌──────────────────────────────┐
│ Go2 EDU │
│ │
│ Go2 自己的运动控制系统 │
│ ↓ │
│ 关节 / 电机 / 平衡 │
│ │
│ 自带雷达 / 摄像头 / IMU │
└──────────────────────────────┘
这张图可以反复看。
不是。
即使删掉:
go2_ros2_sdk
你仍然可以:
自己的程序
↓
Unitree SDK2
↓
Go2
所以它不是:
Go2 必须依赖的系统。
它是:
一个很有价值的第三方 ROS2 集成方案。
也不是。
一开始你可以靠项目直接跑起来。
但是以后你想修改:
Topic
TF
SLAM 参数
Nav2 参数
Launch
机器人模型
控制逻辑
还是需要慢慢理解 ROS2。
就像:
你会用一个现成网站框架,不代表以后永远不需要懂 HTTP、数据库和前端。
项目帮你:
减少从零搭建。
不是帮你:
永久绕开基础知识。
恰恰相反。
这个项目的重要价值之一,就是:
把 Go2 自带雷达和摄像头更方便地利用起来。
结构是:
Go2 自带雷达
↓
go2_ros2_sdk
↓
ROS2 PointCloud2 / LaserScan
↓
SLAM / Nav2
Go2 自带摄像头
↓
go2_ros2_sdk
↓
ROS2 Image
↓
RViz / 图像处理
所以它不是替换传感器。
而是在:
“接传感器的数据”。
不一定。
如果你只是学习:
ROS2
建图
导航
摄像头
雷达数据
应该先验证:
Go2 自带传感器是否已经满足你的需求。
不要因为看到机器人项目就默认:
再买一个雷达
再买一个摄像头
只有当以后项目提出:
更远探测
更高精度
高清变焦
夜视
热成像
特殊视角
等需求时,再考虑增加外部设备。
适合,但要有顺序。
如果你完全不懂 Go2,也完全不懂 ROS2,一上来直接看:
SLAM
Nav2
TF
PointCloud2
CycloneDDS
WebRTC
肯定很痛苦。
更建议:
第 1 层
先理解 Go2
第 2 层
跑通官方 SDK
第 3 层
理解 ROS2 的 Node / Topic
第 4 层
再跑 go2_ros2_sdk
第 5 层
看雷达 / 摄像头 / RViz
第 6 层
再做 SLAM
第 7 层
最后做 Nav2
这样最容易理解。
不用第一天追求:
自动导航。
先按下面顺序。
第 1 步
准备项目 README 明确测试过的系统环境
↓
第 2 步
安装 ROS2
↓
第 3 步
下载 go2_ros2_sdk
↓
第 4 步
安装依赖
↓
第 5 步
colcon build
↓
第 6 步
确认电脑和 Go2 网络连通
↓
第 7 步
设置 ROBOT_IP / CONN_TYPE
↓
第 8 步
启动 robot.launch.py
↓
第 9 步
先确认 RobotModel
↓
第 10 步
再确认摄像头
↓
第 11 步
再确认雷达
↓
第 12 步
再测试手柄
↓
第 13 步
最后才测试 SLAM / Nav2
每一层单独验证。
这是机器人项目里非常重要的调试习惯。
因为如果你一启动就发现:
导航不走
你根本不知道问题在哪。
可能是:
Go2 没连接
雷达没数据
TF 错
地图错
定位错
Nav2 参数错
运动控制没接好
如果你分层测试:
先看机器人状态
正常
再看雷达
正常
再看地图
正常
再看 Nav2
异常
你马上就知道:
问题主要在导航这一层。
所以机器人开发一定要:
一层一层验证。
更值得学习的是:
机器人系统是怎么被拼起来的。
例如你会第一次真正看到:
硬件
↓
驱动
↓
ROS2 Topic
↓
数据转换
↓
SLAM
↓
地图
↓
Nav2
↓
运动控制
这条链路。
当这条链路看明白以后,再换:
其他机器人
其他雷达
其他摄像头
思路其实还是类似的。
最后用最简单的方式对比。
Go2
↓
官方 SDK / unitree_ros2
↓
自己接机器人模型
↓
自己接雷达
↓
自己转 PointCloud2
↓
自己转 LaserScan
↓
自己接摄像头
↓
自己配 TF
↓
自己接 RViz
↓
自己接 SLAM
↓
自己接 Nav2
↓
自己调
Go2
↓
go2_ros2_sdk
↓
ROS2
↓
机器人模型
雷达
摄像头
RViz
SLAM
Nav2
然后你更多做的是:
跑通
验证
调整
理解
二次修改
继续开发自己的功能
所以最核心的差别不是:
能不能做。
而是:
从零拼,还是站在别人已经拼好的基础上继续做。
你的程序
│
↓
ROS2
│
↓
go2_ros2_sdk
┌────────────┼────────────┐
↓ ↓ ↓
机器人模型 雷达 摄像头
│ │ │
↓ ↓ ↓
RViz PointCloud2 Image
│
↓
LaserScan
│
↓
SLAM
│
↓
地图
│
↓
Nav2
│
↓
运动控制
│
↓
Go2
│
┌──────────┴──────────┐
↓ ↓
内部控制系统 自带传感器
↓
关节 / 电机 / 平衡
如果整篇文章只记住一句话:
go2_ros2_sdk是一个第三方 Go2 ROS2 集成项目,它不是让 Go2“突然拥有能力”,而是把 Go2 原本已有的运动、雷达、摄像头和状态数据更方便地接入 ROS2,并提前帮开发者串好了 RViz、SLAM、Nav2 等常用机器人组件。
没有它:
Go2 依然可以二次开发。
你可以使用:
Unitree SDK2
unitree_sdk2_python
unitree_ros2
自己开发。
有了它:
你少做很多基础集成工作。
所以它真正解决的不是:
“Go2 能不能走。”
而是:
“怎么更快把 Go2 变成一台可以在 ROS2 里继续开发的机器人。”
对于第一次学习 Go2 + ROS2 的人来说,这才是这个项目最值得理解的地方。
说明:
go2_ros2_sdk是第三方社区开源项目,不是宇树官方 SDK。项目的功能、依赖、固件兼容性和运行方式会持续变化。当前 README 明确包含 Go2 AIR/PRO/EDU、WebRTC/CycloneDDS、雷达、摄像头、SLAM、Nav2 等相关能力。真正使用时,应以项目最新 README、Issue 以及宇树官方开发文档为准。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。