惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
WordPress大学
WordPress大学
爱范儿
爱范儿
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客
博客园_首页
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
MyScale Blog
MyScale Blog
IT之家
IT之家
H
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
人人都是产品经理
人人都是产品经理

博客园 - 人艰不拆_zmc

AI 里的“本体”到底是什么?一篇写给技术小白的通俗解释 15000mAh 到底是什么概念?一篇看懂电池容量 买了宇树 Go2 以后怎么二次开发?写给第一次做机器狗项目的人 买了一块 NVIDIA Jetson,怎么在上面安装 ROS2?从 JetPack 到 ROS2 的完整入门指南 NVIDIA Jetson 到底是什么?写给第一次接触机器人和边缘 AI 的人 ROS / ROS2 到底是什么?写给第一次接触机器人开发的人 大模型到底能同时多少人用?一篇看懂并发、排队与容量估算 大模型为什么有快有慢?一篇看懂响应速度背后的关键因素 技术小白也能看懂:大模型里的量化、蒸馏到底是什么意思? Codex 使用技巧:从“会聊天”到“真正能干活” 我终于搞懂了:Codex 对话中插件和 Skill 到底怎么用 我终于搞懂了 Agent Spec:它其实就是 Agent 的“标准设计图” 我终于搞懂了 Tool:原来不只是 Function Calling 里的函数 Skill 里的 Python 脚本,到底是不是 Tool? 我终于搞懂了 Codex 的 Plugin 和 Skill:顺便把 App、MCP 一次理清 我终于搞懂了 Codex 的“应用”:App 到底是什么,怎么添加和维护? 我终于搞懂了 Tool、Function Calling 和 MCP:大模型到底怎么知道该调哪个接口? 我终于搞懂了 MCP:从 HTTP API 到 ERP MCP Server 的完整入门 我终于搞懂了 Codex 的“记忆”是怎么回事 Codex 用久了越来越慢?我的上下文管理小技巧 我终于搞懂了 Codex 里的 Thread、Turn 和 Session 从 Qwen3.8-27B 到 FP8、NVFP4、MoE:一次搞懂几个常见大模型概念 FPS 是什么意思?简单理解 60 FPS、25 FPS 和视频帧率 DeepSeek Harness 明明像 AI Coding 工具,为什么又能用来构建各种 Agent? 使用 Codex 开发项目,怎么才能节约 Token? 模型里的 32K、128K、256K 是什么意思?简单聊聊上下文限制 Codex 一次对话到底会给模型发送什么?以 Spring Boot 项目为例讲清 Context、代码读取与 Token 消耗 AI Agent 中的 Rule 是什么?以 Codex 为例,小白也能看懂 我终于搞懂了 Harness:它不是论文,也不是标准,更不是 Codex 独有 小白也能看懂:RTSP 到底是什么?
go2_ros2_sdk 到底是干什么的?从 Go2、官方 SDK、ROS2 一路...
人艰不拆_zmc · 2026-09-14 · via 博客园 - 人艰不拆_zmc

如果你刚买了一台 宇树 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_ros2_sdk,先搞懂一台 Go2 EDU 本身是什么

你刚买到的 Go2 EDU,本身已经是一台完整的四足机器人。

它已经具备很多能力,例如:

站立
趴下
前进
后退
转弯
保持平衡
关节控制
IMU
激光雷达
摄像头
机器人状态
网络通信

最重要的一点是:

“四条腿到底怎么动”这件事,宇树已经帮你做好了。

你不需要自己写:

左前腿关节转 16°
右前腿关节转 18°
左后腿输出多少力矩
下一步哪个脚先落地
身体怎么保持平衡

这些属于 Go2 自己的底层运动控制。

你做二次开发时,更像是在告诉它:

站起来
↓
往前走
↓
停下来

所以可以把 Go2 分成两层理解。

你写的程序
=
决定“让机器狗做什么”

Go2 自己的控制系统
=
负责“具体怎么把动作做出来”

三、最基础的 Go2 二次开发,其实根本不需要 go2_ros2_sdk

假设你现在只想做一件非常简单的事:

写一个 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


四、宇树官方 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 一起工作。


七、到这里为止,为什么还需要 ROS2?

如果你只做:

站起来
前进
后退
转弯
停止
读取机器人状态

官方 SDK 已经很好用了。

但是机器人项目一旦复杂一点,就会出现很多程序。

例如:

雷达程序
摄像头程序
机器人控制程序
地图程序
定位程序
导航程序
可视化程序

这些程序之间需要互相交换数据。

例如:

雷达
↓
把环境数据给建图程序

建图程序
↓
把地图给导航程序

导航程序
↓
告诉控制程序往哪走

这时候就需要一个统一的机器人软件框架。

这就是:

ROS2


八、ROS2 可以怎么理解?

ROS2 全称:

Robot Operating System 2

中文通常叫:

机器人操作系统 2

但它并不是 Windows、Ubuntu 这种真正的操作系统。

更适合小白的理解是:

ROS2 是机器人软件之间的“公共通信平台 + 开发框架”。

假设机器人里面有三个程序:

雷达程序
地图程序
导航程序

没有 ROS2 时,你可能自己设计:

HTTP
TCP
UDP
文件
自定义协议

让它们互相通信。

有 ROS2 后,可以使用统一的:

Node
Topic
Service
Action

让程序协作。

第一次接触,只需要先理解两个词。


Node 是什么?

Node 可以理解成:

一个正在运行的机器人程序。

例如:

雷达驱动
=
一个 Node

摄像头程序
=
一个 Node

导航程序
=
一个 Node

Topic 是什么?

Topic 可以理解成:

ROS2 里面传递消息的一条“频道”。

例如:

雷达 Node
↓
不断往一个 Topic 发雷达数据

SLAM Node
↓
订阅这个 Topic

于是 SLAM 得到了雷达数据

可以把 Topic 想成微信群。

雷达
=
群里一直发消息的人

SLAM
=
群里一直看消息的人

两边不需要直接写死互相调用。


九、Go2 已经有雷达,为什么接 ROS2 还这么麻烦?

这是理解 go2_ros2_sdk 最关键的问题之一。

Go2 确实有雷达。

但是:

“硬件上有雷达”不等于“ROS2 里的所有软件都能直接使用这个雷达”。

比如 Go2 雷达产生了一份原始数据。

ROS2 中很多程序希望得到的是:

PointCloud2
LaserScan

这种标准数据。

所以中间可能需要:

Go2 雷达
↓
读取原始数据
↓
解析
↓
格式转换
↓
ROS2 PointCloud2
↓
ROS2 LaserScan
↓
SLAM / Nav2

这就是机器人集成里非常重要的一件事:

把硬件数据变成 ROS2 标准数据。

所以:

Go2 自带雷达

和:

ROS2 能直接使用 Go2 雷达

不是同一件事。


十、Go2 已经有摄像头,为什么也需要接入?

同样的道理。

Go2 有摄像头。

但是 ROS2 里的程序希望:

订阅一个 Image Topic

然后直接拿到图片。

所以需要有人完成:

Go2 摄像头
↓
获取视频流
↓
解码
↓
转成 ROS2 Image
↓
发布 Topic

这样:

RViz
目标检测
图像处理
其他 ROS2 程序

才能比较方便地使用它。

所以重点不是:

有没有摄像头。

而是:

摄像头的数据有没有被接入 ROS2。


十一、现在终于轮到 go2_ros2_sdk 了

到这里,再看这个名字就容易理解了:

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_sdk?

这是一个特别好的问题。

宇树官方的:

unitree_ros2

主要解决:

Go2 怎么和 ROS2 通信。

而这个第三方的:

go2_ros2_sdk

在这个基础目标上继续往上做了很多集成。

它不仅想让:

Go2
↓
ROS2

通信起来。

还进一步帮你组合:

机器人模型
雷达
摄像头
RViz
手柄
SLAM
Nav2
Foxglove
目标检测

所以可以非常粗略地类比:

unitree_ros2
=
官方提供“基础道路”

go2_ros2_sdk
=
社区开发者在道路基础上,
又帮你把很多常用设施搭起来了

十四、可以把 go2_ros2_sdk 理解成什么?

如果一定要用一个生活化的比喻,我更推荐:

“精装修样板房”。

宇树官方 SDK 给你的更像:

房子的基础结构
水电入口
建筑接口

go2_ros2_sdk 已经帮你继续做了:

灯接好了
水龙头接好了
空调位置留好了
门装好了
一些家具也摆进去了

你拿过来以后:

不是从一块空地开始建房子。

而是在一个已经能住的基础上继续修改。

当然,这只是为了方便理解。

从技术上说,它是:

Go2 ROS2 的第三方集成项目。


十五、这个项目现在已经帮你接了哪些东西?

根据项目当前 README,它已经覆盖很多能力,包括:

URDF 机器人模型
关节状态同步
IMU
手柄控制
Go2 状态 Topic
足底力传感器
激光雷达 PointCloud2
摄像头
Foxglove
LaserScan
多机器人
WebRTC
CycloneDDS
点云地图
SLAM
Nav2
目标检测

第一次看到这些名词不用紧张。

我们一个一个翻译成人话。


十六、URDF 是什么?

URDF 可以简单理解成:

机器人的“数字模型说明书”。

它描述:

Go2 身体多大
腿在哪里
关节在哪里
每个部件怎么连接

有了它以后,RViz 才能画出一条 Go2。

例如:

真实 Go2
        ↓
关节状态
        ↓
URDF
        ↓
RViz
        ↓
屏幕上看到一条虚拟 Go2

所以你在 RViz 里看到机器狗模型,不是摄像头拍出来的。

而是:

ROS2 根据机器人模型和实时关节状态画出来的。


十七、RViz 又是什么?

RViz 是 ROS2 非常常见的可视化工具。

可以理解成:

机器人开发人员的“可视化监控窗口”。

它可以显示:

机器人模型
雷达点云
LaserScan
地图
坐标系
摄像头
机器人当前位置
导航路线
目标点

也就是说,真实机器狗在地上走。

你的电脑屏幕里可以同时看到:

它自己
周围雷达
地图
导航路线

这对于调试非常重要。


十八、PointCloud2 是什么?

Go2 的雷达会感知周围很多空间点。

这些点组合在一起,叫:

点云。

例如雷达看到:

墙
桌子
椅子
柜子
人

不会直接告诉你:

“这是桌子。”

它更像产生:

这里有一个点
那里有一个点
那里还有一个点
……

成千上万个点组合起来:

就形成了周围环境的三维轮廓。

ROS2 中常用:

PointCloud2

来表示这种点云数据。


十九、LaserScan 又是什么?

PointCloud2 更像:

三维空间点。

而 LaserScan 可以先理解成:

机器人周围一圈二维距离扫描。

很多 SLAM 和导航程序很喜欢使用这种形式。

所以项目里面会有类似:

Go2 雷达
↓
PointCloud2
↓
转换
↓
LaserScan

这也是为什么 README 里会看到:

pointcloud_to_laserscan

它不是新的雷达。

它只是:

把一种数据格式转换成另一种更适合导航使用的格式。


二十、SLAM 是什么?

SLAM 是机器人领域非常常见的一个词。

不用先记英文。

直接理解成:

机器人一边走,一边画地图,同时判断自己大概在哪里。

比如 Go2 第一次进入一个办公室:

开始
↓
不知道房间长什么样
↓
雷达不断扫描
↓
Go2 慢慢往前走
↓
发现墙
↓
发现门
↓
发现走廊
↓
地图逐渐画出来

最后得到:

一张地图

这个项目已经集成:

slam_toolbox

所以不用你从零自己把 SLAM 接到 Go2 上。


二十一、Nav2 是什么?

SLAM 解决:

地图从哪里来。

Nav2 更偏向解决:

有了地图以后,机器人怎么从 A 点走到 B 点。

例如地图已经有:

办公室门口
会议室
走廊
房间

现在你告诉机器人:

去会议室。

Nav2 会做:

我现在在哪
↓
目标在哪
↓
算一条路线
↓
沿着路线移动
↓
遇到障碍重新调整

所以:

SLAM
=
把环境画成地图

Nav2
=
利用地图导航

二十二、go2_ros2_sdk 为什么特别有价值?

现在就很好理解了。

如果没有这个项目,你可能要自己完成:

Go2 接 ROS2
↓
Go2 雷达接 ROS2
↓
摄像头接 ROS2
↓
关节状态接 ROS2
↓
机器人模型接 RViz
↓
PointCloud2 转 LaserScan
↓
配 TF
↓
接 slam_toolbox
↓
接 Nav2
↓
调 Launch

每一项都不是一句代码。

真正麻烦的是:

这些东西必须全部能一起工作。

而这个项目已经把大量连接工作提前做好。

这才是它最大的价值。


二十三、没有这个项目,Go2 会不会就不能建图?

不会。

这是一定要讲清楚的。

没有这个项目:

Go2 仍然有雷达

你仍然可以:

使用宇树官方接口
↓
自己读取雷达
↓
自己接 ROS2
↓
自己接 SLAM

所以:

没有 go2_ros2_sdk,不是不能做。

而是:

很多东西需要自己搭。


二十四、没有这个项目,Go2 会不会就不能导航?

也不会。

你完全可以使用:

官方 SDK
官方 unitree_ros2
ROS2
SLAM
Nav2

自己搭一套。

但你需要解决:

数据格式
Topic
TF
Odometry
机器人模型
雷达
地图
Nav2 参数
运动控制

所以区别是:

没有它
=
自己拼

有它
=
别人已经帮你拼好了很大一部分

二十五、Go2 自己明明已经能建图,为什么还要 SLAM?

这个地方也很容易混淆。

Go2 官方 App 自己就提供一定的建图能力。

那为什么还要 ROS2 的:

slam_toolbox

因为两者目标不完全一样。

官方 App 建图更偏:

官方功能
快速使用
基础体验

而 ROS2 SLAM 更偏:

开发者自己控制地图
自己保存
自己修改
自己接导航
自己接其他 ROS2 程序
自己调整参数

所以你可以理解:

不是 Go2 “不会建图”,而是 ROS2 开发者希望把地图能力掌握在自己的软件体系里。


二十六、启动 go2_ros2_sdk 后,到底发生了什么?

这个项目有一个很重要的启动文件:

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 系统的“总启动按钮”。


二十七、项目启动后,RViz 里会看到什么?

根据 README,启动后可以看到多种数据。

例如:

RobotModel
PointCloud2
LaserScan
Image
Map
Odometry

翻译成人话:

RobotModel
=
屏幕里的虚拟 Go2

PointCloud2
=
雷达三维点云

LaserScan
=
雷达二维扫描

Image
=
Go2 摄像头画面

Map
=
SLAM 生成的地图

Odometry
=
机器人走过的位置变化

这时候你就真正进入了 ROS2 的机器人开发世界。


二十八、一个最通俗的例子:我只想看看 Go2 雷达

假设你刚开始。

目标非常简单:

我想在电脑上看到 Go2 雷达数据。

如果不用这个项目,你可能需要研究:

Go2 雷达数据接口
↓
数据怎么读取
↓
格式是什么
↓
怎么转成 PointCloud2
↓
怎么发布 ROS2 Topic
↓
RViz 怎么订阅

有了这个项目:

连接 Go2
↓
启动项目
↓
项目读取雷达
↓
转换成 PointCloud2
↓
发布 ROS2 Topic
↓
RViz 显示

你面对的是:

已经有人铺好的链路。

这就是最直观的价值。


二十九、第二个例子:我想让 Go2 建一张房间地图

目标:

让 Go2 在房间走一圈,然后得到地图。

整个过程可以理解成:

Go2 雷达
↓
go2_ros2_sdk
↓
ROS2 PointCloud2 / LaserScan
↓
slam_toolbox
↓
地图
↓
RViz 显示

然后你用手柄让 Go2:

往前
↓
转弯
↓
经过走廊
↓
进入另一个房间

Go2 一边走:

雷达一边扫描

SLAM 一边:

画地图

最后保存。

项目 README 已经提供了这一套建图流程。


三十、第三个例子:有了地图以后,让 Go2 去一个位置

地图已经做好。

下一步:

让 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 通信。


三十三、这个项目怎么和 Go2 通信?

README 当前支持两种主要方式:

WebRTC
CycloneDDS

项目的说明是:

WebRTC
→ Wi-Fi

CycloneDDS
→ Ethernet / 有线

第一次学习不用研究底层协议。

可以先简单理解成:

方案 A
电脑通过 Wi-Fi 和 Go2 通信

方案 B
电脑通过有线网络和 Go2 通信

项目负责帮你处理对应的通信。


三十四、为什么固件版本还会影响项目?

因为它是第三方项目。

Go2 官方固件更新以后:

通信方式
加密方式
数据接口
数据频率

可能发生变化。

第三方项目就需要跟着适配。

README 当前就专门提到:

Go2 较新的固件在 WebRTC 本地连接中改变了加密握手方式。

某些情况下需要额外提供:

AES Key

这说明一个很现实的问题:

第三方项目能帮你省很多开发时间,但兼容性需要自己验证。


三十五、项目里提到 LiDAR 7Hz、Joint State 1Hz 是什么意思?

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 用地图导航

只要这个主线通了,后面看代码才不会迷路。


三十八、官方 SDK、unitree_ros2、go2_ros2_sdk 到底怎么选?

可以直接这样判断。

如果你只是想学最基础的 Go2 控制

例如:

站起来
前进
停止
读取状态

先学:

Unitree SDK2
或者
unitree_sdk2_python

如果你想学习宇树官方 ROS2 接入

例如:

Go2 和 ROS2 怎么通信

看:

unitree_ros2

如果你想比较快地看到一套完整链路

例如:

Go2
+
ROS2
+
雷达
+
摄像头
+
RViz
+
SLAM
+
Nav2

可以研究:

go2_ros2_sdk

这三个不是互相替代。

更像是不同层次。


三十九、有了 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 是不是控制 Go2 的唯一方式?

不是。

即使删掉:

go2_ros2_sdk

你仍然可以:

自己的程序
↓
Unitree SDK2
↓
Go2

所以它不是:

Go2 必须依赖的系统。

它是:

一个很有价值的第三方 ROS2 集成方案。


四十二、另一个误解:用了 go2_ros2_sdk,是不是就不用学 ROS2?

也不是。

一开始你可以靠项目直接跑起来。

但是以后你想修改:

Topic
TF
SLAM 参数
Nav2 参数
Launch
机器人模型
控制逻辑

还是需要慢慢理解 ROS2。

就像:

你会用一个现成网站框架,不代表以后永远不需要懂 HTTP、数据库和前端。

项目帮你:

减少从零搭建。

不是帮你:

永久绕开基础知识。


四十三、还有一个误解:用了它以后,Go2 自带雷达和摄像头就“没用了”?

恰恰相反。

这个项目的重要价值之一,就是:

把 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 以及宇树官方开发文档为准。