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

推荐订阅源

罗磊的独立博客
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
C
Check Point Blog
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG

博客园 - 人艰不拆_zmc

go2_ros2_sdk 到底是干什么的?从 Go2、官方 SDK、ROS2 一路讲到 SLAM 和 Nav2 买了一块 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 到底是什么? Codex Token 消耗太快?使用 RTK 压缩终端输出,减少无效 Token Remotion 是什么?
买了宇树 Go2 以后怎么二次开发?写给第一次做机器狗项目的人
人艰不拆_zmc · 2026-09-14 · via 博客园 - 人艰不拆_zmc

第一次拿到 宇树 Go2 EDU,很多人最困惑的其实不是“代码怎么写”,而是下面这些更基础的问题:

我写的程序到底放在哪里?
是不是要登录到机器狗里面写代码?
写完以后怎么测试?
程序怎么“部署到狗上”?
我的代码又是怎么让 Go2 真正动起来的?

如果这些问题没搞懂,直接去看 SDK、DDS、ROS2、关节控制,很容易越看越乱。

所以这篇文章不从复杂算法开始,也不讲自主导航、SLAM 等高级功能,只做一件事:

把 Go2 EDU 最基础的二次开发流程,从“代码写在哪里”一直讲到“程序怎么真正控制机器狗”。

看完以后,你至少应该能建立下面这条完整的认识:

我写的程序
    ↓
Unitree SDK
    ↓
网络通信
    ↓
Go2 EDU
    ↓
Go2 自己的运动控制系统
    ↓
四条腿真正运动

这就是最基础的 Go2 二次开发。


一、先说最重要的结论:代码通常不是直接写进机器狗里面

这是第一次接触 Go2 时最容易误解的地方。

很多人会下意识认为:

买到 Go2
   ↓
SSH 登录机器狗
   ↓
把 Python 程序上传进去
   ↓
在机器狗里运行

对于刚开始做 Go2 二次开发的人,不要先这样理解

更常见、更容易入门的方式是:

你的 Ubuntu 电脑
│
│  运行你自己写的程序
│
│  Python / C++
│
↓
Unitree SDK
↓
网线 / 局域网
↓
Go2 EDU

也就是说:

你的程序先运行在自己的电脑上,然后通过网络控制 Go2。

此时你的电脑可以理解成一个:

“可以自己编程的高级遥控器”。

普通遥控器是:

人推动摇杆
↓
Go2 前进

自己写程序以后变成:

你的代码
↓
调用 SDK
↓
Go2 前进

只不过把“人手按遥控器”,变成了“程序发命令”。


二、那 Go2 自己里面没有电脑吗?

当然有。

Go2 自己内部有控制器和计算系统,否则它根本不可能完成:

站立
保持平衡
行走
转弯
奔跑
关节控制
传感器读取

但这里要区分两个概念。

Go2 自己的程序

主要负责:

“身体到底怎么动。”

比如你告诉它:

向前走。

Go2 内部的控制系统会自己计算:

哪条腿先抬
每个关节转多少
身体怎么保持平衡
脚落在哪里
下一步怎么迈

这些底层工作,不需要你重新开发。

你写的程序

更像是在负责:

“让机器狗做什么。”

比如:

站起来
↓
向前走
↓
两秒后停止
↓
再趴下

所以可以用一句特别简单的话理解:

Go2 自己的控制系统
=
负责“怎么走”

你的程序
=
负责“让它什么时候走、怎么用这些能力”

三、什么叫“二次开发”?

“二次开发”听起来很技术,其实非常简单。

宇树已经把一条能稳定运动的机器狗做好了。

你不是重新开发:

腿
电机
关节
平衡算法
步态算法

而是在已有能力上继续开发自己的功能。

比如宇树已经提供:

站起来
趴下
向前走
后退
转弯
停止
读取机器人状态
读取部分传感器数据

你可以把这些能力组合成自己的程序。

例如:

程序启动
↓
读取 Go2 状态
↓
让 Go2 站起来
↓
向前走 2 秒
↓
停止
↓
趴下
↓
程序结束

这已经是一个最基础、最标准的二次开发程序了。


四、程序怎么控制 Go2?中间靠的是 SDK

这里会遇到一个很重要的词:

SDK

SDK 全称:

Software Development Kit

中文一般叫:

软件开发工具包。

第一次接触时,不需要研究 SDK 的内部原理。

直接把它理解成:

宇树给程序员准备的一套“控制 Go2 的编程接口”。

例如你想让机器狗站起来。

你不需要研究:

12 个关节分别转多少度
每个电机输出多少力
机器狗怎么保持重心

你更希望有一个现成接口:

StandUp

调用以后:

你的程序
↓
StandUp
↓
Unitree SDK
↓
Go2
↓
机器狗站起来

类似地,宇树 SDK 的高层运动接口提供了类似:

StandUp
Move
StopMove
Sit
StandDown

这样的能力。

所以 SDK 最重要的价值就是:

把机器狗很复杂的底层能力,包装成程序员比较容易调用的接口。


五、Go2 EDU 最基础的开发环境长什么样?

如果你刚买到一台 Go2 EDU,建议第一阶段只准备这些东西:

Go2 EDU
+
原装遥控器
+
一台 Ubuntu 电脑
+
一根网线
+
Unitree SDK

整体结构:

┌─────────────────────────┐
│       Ubuntu 电脑        │
│                         │
│  你的 Python / C++ 程序  │
│           ↓             │
│     Unitree SDK         │
└───────────┬─────────────┘
            │
            │ 网线 / 网络
            ↓
┌─────────────────────────┐
│        Go2 EDU          │
│                         │
│   宇树自己的控制系统      │
│           ↓             │
│     控制四条腿运动        │
└─────────────────────────┘

你会发现:

最开始甚至不需要把自己的程序“装进机器狗”。

电脑和 Go2 能通信,就已经可以开始开发。


六、为什么建议第一次先用网线?

理论上机器人可以有多种网络连接方式。

但是第一次调试,我更建议:

Ubuntu 电脑和 Go2 先使用有线网络连接。

原因很简单:

连接更稳定
延迟更可控
排查问题更简单
不容易受 Wi-Fi 信号影响

第一次调试最怕出现这种情况:

代码没问题
但是 Wi-Fi 不稳定

↓
你误以为 SDK 有问题

所以入门阶段,先把变量降到最低。


七、连接 Go2 后,第一件事不是让它走,而是确认“能不能通信”

这一步特别重要。

不要一连上机器狗就运行运动程序。

正确顺序应该是:

先验证网络
↓
再验证能读取状态
↓
最后再发运动命令

为什么?

因为“读取状态”不会主动让机器狗运动,风险更低。


八、第一步:确认电脑能看到连接 Go2 的网卡

Ubuntu 电脑可以先执行:

ip addr

或者:

ip link

你会看到很多网卡,例如:

lo
enp2s0
wlp3s0

名字不一定一样。

其中:

enp2s0

可能就是你插网线以后使用的有线网卡。

以后运行宇树 SDK 示例时,经常会需要把这个网卡名称告诉程序。

例如:

python3 xxx.py enp2s0

这里的:

enp2s0

不是 Go2 的名字。

它表示:

“我的程序应该从电脑的哪块网卡去和机器人通信。”

这一点非常重要。


九、第二步:安装官方 SDK

对于完全第一次接触的人,如果只是为了理解二次开发,我更建议先从:

Python

开始。

宇树官方提供:

unitree_sdk2_python

可以理解成:

Unitree SDK2 的 Python 版本接口。

你后面写 Python 程序,就可以通过它获取 Go2 状态或者控制 Go2。

官方项目地址:

https://github.com/unitreerobotics/unitree_sdk2_python

实际安装时,建议直接以官方 README 和当前开发文档为准,因为 SDK 的依赖和版本会更新。

你现在先理解:

Ubuntu
↓
安装 unitree_sdk2_python
↓
Python 程序可以调用 Go2 接口

就够了。


十、第三步:不要先写代码,先运行官方“读取状态”示例

这是我最推荐的小白入门方式。

宇树 Python SDK 中提供了读取 Go2 高层状态的示例。

官方 README 当前给出的运行方式类似:

python3 ./example/high_level/read_highstate.py enp2s0

其中:

read_highstate.py
=
官方提供的测试程序

enp2s0
=
你的电脑连接 Go2 的网卡

如果你的网卡叫:

enp3s0

那就应该替换成:

python3 ./example/high_level/read_highstate.py enp3s0

如果这个程序能够持续读取到机器人状态,说明一个非常重要的事情:

Ubuntu 电脑
↓
SDK
↓
网络
↓
Go2

这条链路已经通了。

到这里,你还没有让机器狗主动运动。

但是你已经完成了二次开发的第一大步:

自己的开发电脑已经能“听到 Go2 在说话”。


十一、第四步:再测试“电脑能不能给 Go2 发命令”

当读取状态没有问题以后,再进入运动测试。

宇树 Python SDK 中也提供了高层运动示例。

官方 README 当前给出的方式类似:

python3 ./example/high_level/sportmode_test.py enp2s0

它会通过高层运动接口测试 Go2 的一些运动能力。

但是这里需要特别注意:

机器狗会真的动。

所以第一次执行前要做到:

场地空旷
周围没有人
远离楼梯
远离玻璃
速度尽量低
遥控器放在手边
做好随时停止的准备

第一次不要直接研究低层电机控制。

先使用官方高层运动接口。


十二、到这里到底发生了什么?

假设你运行:

python3 sportmode_test.py enp2s0

你看到的是一条命令。

实际上背后发生的是:

Python 示例程序
        ↓
unitree_sdk2_python
        ↓
DDS / 网络通信
        ↓
Go2 接收运动命令
        ↓
Go2 内部运动控制系统
        ↓
控制四条腿
        ↓
机器狗真正运动

注意这里最关键的一点:

你的 Python 程序没有直接控制每一个电机。

你的程序只是告诉 Go2:

站起来
向前走
停止

真正负责:

哪条腿抬起来
哪个关节怎么转
怎么保持平衡

的仍然是 Go2 自己。


十三、现在终于可以写自己的第一个程序了

当官方示例已经跑通,就不要马上开发一个复杂项目。

先写一个最简单的程序:

Go2 站起来 → 等一下 → 停止。

为了理解,可以先看伪代码:

连接 Go2

让 Go2 站起来

等待 2 秒

让 Go2 停止

程序结束

真正代码里,你会使用宇树 SDK 提供的接口。

整体思想仍然只是:

初始化 SDK
↓
选择连接 Go2 的网卡
↓
创建运动控制对象
↓
调用 StandUp
↓
调用 Move / StopMove

第一次自己写程序时,建议先模仿宇树官方示例。

不要从空白文件完全凭感觉写。

最简单的学习方式就是:

官方 example
↓
复制成自己的 demo
↓
每次只改一点
↓
运行测试
↓
确认变化

十四、假设我写了一个 my_go2_demo.py,怎么测试?

这是很多人最关心的一步。

假设你的目录是:

go2_demo/
│
└── my_go2_demo.py

那么测试过程不要一次到位。

建议拆成四层。


第一层:程序能不能正常启动?

先执行:

python3 my_go2_demo.py

此时先不要让机器狗运动。

先确认:

Python 没有语法错误
SDK 可以导入
程序能正常启动

第二层:网络是否正常?

程序启动以后,先只初始化通信。

例如逻辑上:

初始化 SDK
↓
绑定 enp2s0
↓
连接 Go2

如果这里就失败,先不要看运动代码。

重点排查:

网线
网卡
IP
SDK 环境
网络配置

第三层:先读状态

先让自己的程序实现:

读取 Go2 状态
↓
打印到终端

例如终端不断出现:

机器人在线
当前状态:正常
IMU:……
电量:……

不一定是这些具体字段,但核心目的只有一个:

证明你的代码能够收到 Go2 返回的数据。


第四层:最后才发运动命令

前面三层都正常以后,再加入:

StandUp
Move
StopMove

第一次运动测试建议:

动作少
速度低
时间短
一次只测试一个动作

例如:

先只测试站起来

确认正常以后,再增加:

向前走 0.5 秒

而不是第一次就:

连续跑 20 米
连续转弯
执行很多动作

机器人调试最重要的原则是:

一次只增加一个变量。


十五、写完的代码到底“部署在哪里”?

现在回答最容易困惑的问题。

情况一:开发和测试阶段

最简单:

代码
↓
放在你的 Ubuntu 电脑
↓
在 Ubuntu 电脑运行
↓
通过网络控制 Go2

也就是说:

my_go2_demo.py

完全可以一直放在你自己的开发电脑上。

运行:

python3 my_go2_demo.py enp2s0

程序开始工作。

你电脑关机,程序自然也就停止。

所以开发阶段根本不存在:

“必须先把代码上传到狗里面。”


情况二:我不想一直抱着电脑跟着机器狗

这时候才涉及真正意义上的“部署”。

你需要一台能够长期跟着机器人运行程序的 Linux 计算机。

它可以是:

随机器人安装的一台计算机
工控机
开发板
或者你购买配置中官方支持的用户计算环境

结构变成:

随机器人运行的 Linux 计算机
│
├── Python
├── Unitree SDK
└── 你的程序
        ↓
      网络
        ↓
      Go2 EDU

这里的核心思想仍然没有变化:

程序运行在一台 Linux 计算机上,通过 SDK 和网络控制 Go2。

只是原来这台电脑是:

你的笔记本

后来变成了:

跟着机器狗一起运行的计算机

十六、“部署到狗上”这个说法为什么容易误解?

因为一句:

“把程序部署到机器狗上。”

可能包含两种完全不同的意思。

第一种理解

把代码直接复制进 Go2 的核心控制系统

对于刚入门的人:

不要默认应该这么做。

Go2 内部的控制系统首先负责机器人的核心运动和硬件功能,不应该因为想运行自己的 Python 程序,就随意修改内部系统。

第二种理解

让自己的程序跟着机器狗一起长期运行

这个理解更合理。

例如:

Go2
+
一台随机器人运行的 Linux 计算机
+
你的程序

程序启动以后:

Linux 计算机
↓
Unitree SDK
↓
Go2

从外部看,你会感觉:

“程序已经部署在机器狗上了。”

但实际上:

程序运行在机器人携带的计算机上,Go2 的核心运动系统仍然运行自己的程序。


十七、Go2 EDU 自己有没有地方让我部署程序?

这个问题不能只根据“EDU”三个字直接下结论。

因为实际购买的:

Go2 EDU 配置
计算模块
选配硬件
固件
官方开放权限

可能存在差异。

所以最稳妥的做法是:

先确认自己这台 Go2 EDU 的具体配置,以及宇树官方给这套配置开放了什么用户开发环境。

如果官方明确提供:

用户计算环境
登录方式
SDK 环境
部署目录
启动方式

那就按照官方文档部署。

如果没有明确说明:

不要因为机器狗里面有 CPU,就默认可以随意 SSH 进入核心控制器部署自己的业务程序。

对于刚入门的人,最稳妥的开发方式仍然是:

外部 Ubuntu 电脑
↓
Unitree SDK
↓
Go2

十八、代码和 Go2 到底是怎么“说话”的?

你可能还会问:

我的电脑明明没有插到机器狗 CPU 里面,怎么控制它?

答案是:

通过网络通信。

Unitree SDK2 底层使用 DDS 等通信机制。

第一次学习不需要研究 DDS 原理。

可以把它理解成:

一套专门负责把“程序消息”在电脑和机器人之间传递的通信系统。

例如:

你的程序:
“Go2,站起来”
        ↓
      DDS
        ↓
       网络
        ↓
       Go2

反过来也一样:

Go2:
“这是我当前的状态”
        ↓
      DDS
        ↓
       网络
        ↓
你的程序收到状态

所以它实际上是双向通信:

              控制命令
你的程序  ─────────────→  Go2

你的程序  ←─────────────  Go2
              状态数据

理解这个图以后,Go2 二次开发就已经理解一大半了。


十九、程序停止以后,Go2 会怎么样?

这个问题也很重要。

假设你的程序正在做:

发送运动控制命令

然后程序结束。

你的业务程序就不会再继续发送新的控制逻辑。

但是:

Go2 自己的内部控制系统并没有因此消失。

机器狗的:

底层控制
硬件管理
平衡
内部服务

仍然是 Go2 自己在运行。

具体运动状态如何处理,要看你调用的接口和控制模式。

所以程序开发时,不要依赖:

“程序突然崩掉以后机器狗自己肯定会按我想的方式停止。”

更好的做法是:

正常退出前主动 StopMove
异常处理
超时处理
保留人工停止手段

真实机器人程序一定要考虑:

程序异常时怎么办。


二十、正式运行时怎么让程序自动启动?

如果以后你的程序已经测试稳定,希望:

设备开机
↓
程序自动启动

通常不是修改 Go2 的核心运动程序。

而是在运行你代码的那台 Linux 计算机上配置自动启动。

例如 Linux 常见方式包括:

systemd 服务
启动脚本
进程守护

可以理解成:

Linux 计算机开机
↓
自动运行 my_go2_demo.py
↓
程序初始化 Unitree SDK
↓
连接 Go2
↓
开始等待控制逻辑

这样你的程序就不需要每次人工执行:

python3 my_go2_demo.py

不过这是程序已经稳定以后的事情。

第一次学习时:

先手动运行,先把逻辑跑通。


二十一、一个完整的最小开发流程

如果你现在刚买了一台 Go2 EDU,可以直接按照下面这条路线理解。

第 1 步
Go2 开机

        ↓

第 2 步
先用遥控器 / 官方 App
确认机器狗本身正常

        ↓

第 3 步
Ubuntu 电脑用网线连接 Go2

        ↓

第 4 步
确认连接 Go2 的网卡
例如 enp2s0

        ↓

第 5 步
安装 unitree_sdk2_python

        ↓

第 6 步
运行官方“读取状态”示例

        ↓

第 7 步
确认电脑能够收到 Go2 数据

        ↓

第 8 步
运行官方高层运动示例

        ↓

第 9 步
确认电脑能够控制 Go2

        ↓

第 10 步
复制官方示例
写自己的 my_go2_demo.py

        ↓

第 11 步
先测试读取状态

        ↓

第 12 步
再测试 StandUp

        ↓

第 13 步
再测试 Move

        ↓

第 14 步
最后测试 StopMove

        ↓

完成最基础的 Go2 二次开发

二十二、可以先在仿真里测试吗?

可以,而且这是一个很好的习惯。

宇树官方提供了:

unitree_mujoco

可以在 MuJoCo 仿真环境中运行 Go2。

官方的示例已经提供了“仿真 → 实机”的思路。

例如同一个 Python 示例:

python3 ./stand_go2.py

可以用于仿真环境。

而指定真实机器人所连接的网卡:

python3 ./stand_go2.py enp3s0

就可以切换到真实机器人。

这件事特别容易理解:

开发代码
   ↓
先控制“电脑里的虚拟 Go2”
   ↓
逻辑正常
   ↓
再连接真实 Go2
   ↓
实机低速测试

这叫:

Sim to Real(从仿真到真实机器人)。

对于会让机器人明显运动的程序,这是非常有价值的测试方式。


二十三、第一次二次开发,哪些东西暂时不要碰?

对于完全刚入门的人,我建议先不要研究:

低层电机力矩控制
关节级控制
自己写步态算法
修改 Go2 核心系统
复杂实时控制

原因很简单:

这些都不是“让 Go2 向前走一下”所必需的。

而且低层控制做错以后,真实机器人可能:

突然动作
摔倒
碰撞
伤人
损坏关节

第一阶段只用:

官方高层运动接口。

先把:

读取状态
站起来
移动
停止

做明白。

这已经足够建立 Go2 二次开发的完整概念。


二十四、最容易产生的 6 个误解

误解 1:二次开发就是登录机器狗内部写代码

不一定。

最简单的方式就是:

Ubuntu 电脑运行代码
↓
网络
↓
控制 Go2

误解 2:程序必须部署进 Go2 内部才能控制机器狗

不需要。

只要运行程序的计算机能够通过官方接口和 Go2 通信,就可以进行二次开发。


误解 3:我要自己控制每条腿

基础应用开发完全不需要。

高层运动控制已经帮你封装好了。


误解 4:第一次就应该自己写完整程序

不建议。

先运行官方示例。

然后:

复制示例
↓
每次改一点
↓
每次测试一点

误解 5:只要代码能运行,就可以直接上真机

机器人和普通软件不一样。

代码错误可能让现实里的机器突然运动。

建议:

能仿真先仿真
实机第一次低速
场地空旷
一次只测一个动作

误解 6:EDU 就代表可以随便修改机器狗内部系统

不是。

EDU 更适合二次开发,不代表核心运动控制系统可以随意改动。

具体开放哪些能力,要看:

购买配置
官方接口
固件版本
开发文档

二十五、如果我只会一点 Python,第一周可以怎么学?

可以给自己定一个非常简单的目标。

第一天

做到:

电脑能连上 Go2

第二天

做到:

官方 SDK 能正常安装

第三天

做到:

读取 Go2 状态

第四天

做到:

让 Go2 站起来

第五天

做到:

让 Go2 缓慢向前移动

第六天

做到:

自己写一个简单 Python 文件

例如:

站起来
↓
等待
↓
停止

第七天

把整个过程重新整理一遍:

代码在哪里运行
SDK 是干什么的
网卡为什么要传进去
Go2 怎么收到命令
状态怎么返回

如果这些都能自己讲明白:

你已经真正跨进 Go2 二次开发的门了。


二十六、最后用一张图彻底讲明白

┌──────────────────────────────────┐
│          你的 Ubuntu 电脑         │
│                                  │
│  my_go2_demo.py                  │
│         │                        │
│         ↓                        │
│  unitree_sdk2_python             │
│         │                        │
└─────────┼────────────────────────┘
          │
          │ 网线 / 网络
          │
          ↓
┌──────────────────────────────────┐
│            Go2 EDU               │
│                                  │
│      接收 SDK 发来的命令          │
│               ↓                  │
│        Go2 内部控制系统            │
│               ↓                  │
│     关节 / 电机 / 平衡控制         │
│               ↓                  │
│          四条腿真正运动            │
│                                  │
│     同时把机器人状态返回给程序       │
└─────────┬────────────────────────┘
          │
          │ 状态数据
          ↓
      你的程序读取

你真正需要写的是最上面这一层:

my_go2_demo.py

宇树已经帮你做好了最下面复杂的:

电机
关节
步态
平衡
底层控制

中间通过:

Unitree SDK + 网络

连接起来。


二十七、最终应该怎么理解 Go2 EDU 二次开发?

如果整篇文章只记住一句话:

Go2 EDU 二次开发最基础的方式,就是在自己的 Ubuntu 电脑上写程序,通过 Unitree SDK 和网络向 Go2 发送控制命令,同时读取 Go2 返回的状态数据。

你不需要一开始就:

登录机器人内部
修改系统
研究步态
控制每个关节

真正适合初学者的顺序是:

先让电脑和 Go2 通信
↓
先读状态
↓
再跑官方运动示例
↓
再改成自己的简单代码
↓
先在仿真或安全环境测试
↓
再上真实机器狗
↓
最后才考虑让程序长期自动运行

至于“部署到狗上”,也不要把它理解成:

必须把代码复制进 Go2 的核心控制器。

更准确的理解是:

让一台能够和 Go2 通信的 Linux 计算机长期运行你的程序,它就可以持续控制 Go2。至于你的具体 EDU 配置是否带有官方开放的用户计算环境,需要根据实际购买配置和宇树官方文档确认。

理解了这一点,再去看 SDK、DDS、ROS2 等技术,就不会觉得机器狗二次开发是一团完全陌生的东西了。


参考资料

说明: 宇树的 SDK、固件、产品配置和开发接口会持续更新。真正操作前,应以自己购买的 Go2 EDU 实际配置和宇树官方最新开发文档为准。本文重点用于帮助第一次接触 Go2 二次开发的人理解“程序在哪里运行、怎么测试、怎么和机器人通信、什么才叫部署”。