













第一次拿到 宇树 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 站起来
↓
向前走 2 秒
↓
停止
↓
趴下
↓
程序结束
这已经是一个最基础、最标准的二次开发程序了。
这里会遇到一个很重要的词:
SDK
SDK 全称:
Software Development Kit
中文一般叫:
软件开发工具包。
第一次接触时,不需要研究 SDK 的内部原理。
直接把它理解成:
宇树给程序员准备的一套“控制 Go2 的编程接口”。
例如你想让机器狗站起来。
你不需要研究:
12 个关节分别转多少度
每个电机输出多少力
机器狗怎么保持重心
你更希望有一个现成接口:
StandUp
调用以后:
你的程序
↓
StandUp
↓
Unitree SDK
↓
Go2
↓
机器狗站起来
类似地,宇树 SDK 的高层运动接口提供了类似:
StandUp
Move
StopMove
Sit
StandDown
这样的能力。
所以 SDK 最重要的价值就是:
把机器狗很复杂的底层能力,包装成程序员比较容易调用的接口。
如果你刚买到一台 Go2 EDU,建议第一阶段只准备这些东西:
Go2 EDU
+
原装遥控器
+
一台 Ubuntu 电脑
+
一根网线
+
Unitree SDK
整体结构:
┌─────────────────────────┐
│ Ubuntu 电脑 │
│ │
│ 你的 Python / C++ 程序 │
│ ↓ │
│ Unitree SDK │
└───────────┬─────────────┘
│
│ 网线 / 网络
↓
┌─────────────────────────┐
│ Go2 EDU │
│ │
│ 宇树自己的控制系统 │
│ ↓ │
│ 控制四条腿运动 │
└─────────────────────────┘
你会发现:
最开始甚至不需要把自己的程序“装进机器狗”。
电脑和 Go2 能通信,就已经可以开始开发。
理论上机器人可以有多种网络连接方式。
但是第一次调试,我更建议:
Ubuntu 电脑和 Go2 先使用有线网络连接。
原因很简单:
连接更稳定
延迟更可控
排查问题更简单
不容易受 Wi-Fi 信号影响
第一次调试最怕出现这种情况:
代码没问题
但是 Wi-Fi 不稳定
↓
你误以为 SDK 有问题
所以入门阶段,先把变量降到最低。
这一步特别重要。
不要一连上机器狗就运行运动程序。
正确顺序应该是:
先验证网络
↓
再验证能读取状态
↓
最后再发运动命令
为什么?
因为“读取状态”不会主动让机器狗运动,风险更低。
Ubuntu 电脑可以先执行:
ip addr
或者:
ip link
你会看到很多网卡,例如:
lo
enp2s0
wlp3s0
名字不一定一样。
其中:
enp2s0
可能就是你插网线以后使用的有线网卡。
以后运行宇树 SDK 示例时,经常会需要把这个网卡名称告诉程序。
例如:
python3 xxx.py enp2s0
这里的:
enp2s0
不是 Go2 的名字。
它表示:
“我的程序应该从电脑的哪块网卡去和机器人通信。”
这一点非常重要。
对于完全第一次接触的人,如果只是为了理解二次开发,我更建议先从:
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 在说话”。
当读取状态没有问题以后,再进入运动测试。
宇树 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 的核心运动系统仍然运行自己的程序。
这个问题不能只根据“EDU”三个字直接下结论。
因为实际购买的:
Go2 EDU 配置
计算模块
选配硬件
固件
官方开放权限
可能存在差异。
所以最稳妥的做法是:
先确认自己这台 Go2 EDU 的具体配置,以及宇树官方给这套配置开放了什么用户开发环境。
如果官方明确提供:
用户计算环境
登录方式
SDK 环境
部署目录
启动方式
那就按照官方文档部署。
如果没有明确说明:
不要因为机器狗里面有 CPU,就默认可以随意 SSH 进入核心控制器部署自己的业务程序。
对于刚入门的人,最稳妥的开发方式仍然是:
外部 Ubuntu 电脑
↓
Unitree SDK
↓
Go2
你可能还会问:
我的电脑明明没有插到机器狗 CPU 里面,怎么控制它?
答案是:
通过网络通信。
Unitree SDK2 底层使用 DDS 等通信机制。
第一次学习不需要研究 DDS 原理。
可以把它理解成:
一套专门负责把“程序消息”在电脑和机器人之间传递的通信系统。
例如:
你的程序:
“Go2,站起来”
↓
DDS
↓
网络
↓
Go2
反过来也一样:
Go2:
“这是我当前的状态”
↓
DDS
↓
网络
↓
你的程序收到状态
所以它实际上是双向通信:
控制命令
你的程序 ─────────────→ 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 二次开发的完整概念。
不一定。
最简单的方式就是:
Ubuntu 电脑运行代码
↓
网络
↓
控制 Go2
不需要。
只要运行程序的计算机能够通过官方接口和 Go2 通信,就可以进行二次开发。
基础应用开发完全不需要。
高层运动控制已经帮你封装好了。
不建议。
先运行官方示例。
然后:
复制示例
↓
每次改一点
↓
每次测试一点
机器人和普通软件不一样。
代码错误可能让现实里的机器突然运动。
建议:
能仿真先仿真
实机第一次低速
场地空旷
一次只测一个动作
不是。
EDU 更适合二次开发,不代表核心运动控制系统可以随意改动。
具体开放哪些能力,要看:
购买配置
官方接口
固件版本
开发文档
可以给自己定一个非常简单的目标。
做到:
电脑能连上 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 二次开发最基础的方式,就是在自己的 Ubuntu 电脑上写程序,通过 Unitree SDK 和网络向 Go2 发送控制命令,同时读取 Go2 返回的状态数据。
你不需要一开始就:
登录机器人内部
修改系统
研究步态
控制每个关节
真正适合初学者的顺序是:
先让电脑和 Go2 通信
↓
先读状态
↓
再跑官方运动示例
↓
再改成自己的简单代码
↓
先在仿真或安全环境测试
↓
再上真实机器狗
↓
最后才考虑让程序长期自动运行
至于“部署到狗上”,也不要把它理解成:
必须把代码复制进 Go2 的核心控制器。
更准确的理解是:
让一台能够和 Go2 通信的 Linux 计算机长期运行你的程序,它就可以持续控制 Go2。至于你的具体 EDU 配置是否带有官方开放的用户计算环境,需要根据实际购买配置和宇树官方文档确认。
理解了这一点,再去看 SDK、DDS、ROS2 等技术,就不会觉得机器狗二次开发是一团完全陌生的东西了。
说明: 宇树的 SDK、固件、产品配置和开发接口会持续更新。真正操作前,应以自己购买的 Go2 EDU 实际配置和宇树官方最新开发文档为准。本文重点用于帮助第一次接触 Go2 二次开发的人理解“程序在哪里运行、怎么测试、怎么和机器人通信、什么才叫部署”。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。