跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++AI算法

宇树 G1 机器人 SDK2 开发指南:环境搭建至 Demo 测试

介绍宇树 G1 人形机器人 SDK2(C++ 与 Python)的开发流程。内容包括环境搭建(Ubuntu 20.04)、依赖安装、SDK 编译、网络配置(静态 IP 设置)、Demo 运行调试及常见问题解决。通过关节摆动与音频播放示例,帮助开发者快速实现机器人通信与控制。

微码行者发布于 2026/4/6更新于 2026/5/2130 浏览
宇树 G1 机器人 SDK2 开发指南:环境搭建至 Demo 测试

1. SDK2 概述与架构原理

1.1 宇树 SDK2 是什么

unitree_sdk2 是宇树科技官方提供的机器人二次开发工具包,支持 Go2、B2、H1、G1 等主流机型在真实环境中的数据通信与运动控制。它是 unitree_legged_sdk 的升级替代版本,底层基于 CycloneDDS 实现了一套高效可靠的机器人通信机制。

SDK 包语言适用场景
unitree_sdk2C++高性能实时控制、底层关节控制、嵌入式开发
unitree_sdk2_pythonPython快速原型验证、上层应用开发、算法研究
1.2 宇树 G1 机器人规格速览

开始开发前,先了解硬件规格有助于正确配置控制参数:

参数项规格
身高(站立)1320 mm
整机重量≈ 35 kg
总自由度(关节电机)23 ~ 43 个(版本不同)
单臂自由度5 DOF(标准)/ 7 DOF(含腕关节)
单腿自由度6 DOF(髋 ×3 + 膝 ×1 + 踝 ×2)
膝关节最大扭矩90 N·m
最大关节扭矩120 N·m
手臂最大负载≈ 3 kg
通信接口以太网(CycloneDDS)
机器人固定 IP192.168.123.161

2. 开发环境要求

项目要求
操作系统Ubuntu 20.04 LTS(推荐,官方完整支持)
编译器GCC 9+ / G++ 9+
构建工具CMake 3.16+
PythonPython 3.8+(建议 3.10)
网络接口有线以太网(需与机器人同网段)
C++ SDKunitree_sdk2
Python SDKunitree_sdk2_python

⚠️ 注意:SDK2 不建议在 Windows 上直接使用;若只有 Windows 主机,需安装 VMware 后在 Ubuntu 虚拟机中开发,但虚拟机的网卡直通配置较复杂,强烈建议使用原生 Ubuntu 系统。


3. 获取官方 SDK 包

3.1 正常网络环境
# 克隆 C++ SDK
git clone https://github.com/unitreerobotics/unitree_sdk2
# 克隆 Python SDK
git clone https://github.com/unitreerobotics/unitree_sdk2_python
3.2 国内网络加速(可选)

若 GitHub 访问较慢,可将域名替换为国内镜像加速节点:

# 将 https://github.com 替换为 https://bgithub.xyz
git clone https://bgithub.xyz/unitreerobotics/unitree_sdk2
git clone https://bgithub.xyz/unitreerobotics/unitree_sdk2_python
# 或使用 Gitee 镜像(若有同步)
# git clone https://gitee.com/unitreerobotics/unitree_sdk2
3.3 目录结构预览

克隆完成后,C++ SDK 的核心目录结构如下:

unitree_sdk2/
├── CMakeLists.txt # 顶层构建文件
├── include/
│   └── unitree/ # SDK 头文件
│       ├── robot/ # 机器人控制接口
│       └── idl/ # DDS IDL 数据结构定义
├── example/
│   ├── g1/ # G1 机器人示例
│   │   ├── low_level/ # 底层关节控制
│   │   ├── audio/ # 音频播放
│   │   └── ...
│   ├── go2/ # Go2 机器人示例
│   └── h1/ # H1 机器人示例
└── lib/ # 预编译库文件

4. 安装依赖与编译

4.1 C++ SDK 依赖安装

首先更新系统软件源,然后一次性安装所有编译依赖:

sudo apt-get update
sudo apt-get install -y cmake g++ build-essential libyaml-cpp-dev libeigen3-dev libboost-all-dev libspdlog-dev libfmt-dev

各依赖包用途说明:

包名用途
cmake / build-essential / g++基础编译工具链
libyaml-cpp-devYAML 配置文件解析(机器人参数配置)
libeigen3-dev线性代数库(矩阵运算、坐标变换)
libboost-all-devC++ 通用工具库(异步 IO、线程等)
libspdlog-dev高性能日志库
libfmt-dev格式化输出库(spdlog 依赖)
4.2 编译 C++ SDK
cd unitree_sdk2
# 方法一:标准两步构建
mkdir build
cd build
cmake ..
make
4.3 Python SDK 安装
# 确保 pip3 是最新版本
sudo apt install python3-pip
pip3 install --upgrade pip
# 进入 Python SDK 目录并以可编辑模式安装
cd ~/unitree_sdk2_python
pip3 install -e .

验证安装是否成功:

python3 -c "import unitree_sdk2py; print('SDK 安装成功!')"

5. 机器人与开发机网络配置

SDK2 通过有线以太网实现 PC 与机器人之间的 DDS 通信,正确的网络配置是连接成功的前提。

5.1 网络拓扑
开发电脑      宇树 G1 机器人
┌─────────────────┐  以太网  ┌─────────────────┐
│ eth0(或其他) ├──────────────┤ 固定 IP        │
│ 192.168.123.222│  网线直连  │ 192.168.123.161 │
└─────────────────┘           └─────────────────┘
或通过交换机

机器人固定使用 192.168.123.161 作为 IP 地址,开发机需设置为同一网段(123 网段)的其他 IP。

5.2 Ubuntu 图形界面配置静态 IP
  1. 打开 系统设置 → 网络(Network)
  2. 选择连接机器人的有线网卡,点击 ⚙ 设置图标
  3. 选择 IPv4 选项卡,将方式改为 手动(Manual)
  4. 填写以下信息:
字段填写内容
地址(Address)192.168.123.222(或其他 123 网段空闲 IP)
子网掩码(Netmask)255.255.255.0
网关(Gateway)192.168.123.1
  1. 点击 应用(Apply),断开并重新连接网络使配置生效。
5.3 命令行配置静态 IP(可选)
# 查看网卡名称(记住连接机器人的那块网卡名,如 eth0、enp3s0 等)
ifconfig
# 临时设置(重启后失效,用于快速测试)
sudo ip addr add 192.168.123.222/24 dev eth0
sudo ip link set eth0 up
5.4 验证网络连通性
# 测试是否能 ping 通机器人
ping 192.168.123.161
# 正常输出示例:
# PING 192.168.123.161 (192.168.123.161) 56(84) bytes of data.
# 64 bytes from 192.168.123.161: icmp_seq=1 ttl=64 time=0.456 ms
5.5 查询实际网卡名称
ifconfig

输出示例:

enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.123.222 netmask 255.255.255.0 broadcast 192.168.123.255 ...
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 ...

⚠️ 重要:记下连接机器人的网卡名称(如 enp3s0、eth0),后续运行 Demo 时需要作为命令行参数传入。不同电脑的网卡名称可能不同,请以实际 ifconfig 输出为准。


6. 调试并运行 Demo

6.1 机器人准备流程

在运行任何 Demo 之前,必须按以下步骤准备机器人:

步骤 1:开机
└── 将机器人在吊装状态下通电启动
↓
步骤 2:等待零力矩模式
└── 等待机器人完成自检,进入零力矩(Damping)模式
    关节处于自由垂落状态,此时可安全操作
↓
步骤 3:进入调试模式
└── 同时长按遥控器 L2 + R2 组合键
    机器人进入调试模式,等待外部控制指令

⚠️ 安全提示:务必在吊装状态下进行调试,防止机器人倒塌造成损坏 进入调试模式后,机器人关节将响应外部控制指令,请确保周围无障碍物 首次测试建议先以最小幅度运行 Demo,确认行为符合预期后再扩大测试范围

6.2 Step 1:重新编译(首次运行必须)
cd unitree_sdk2
cmake -B build
cmake --build build
6.3 Step 2:运行关节摆动 Demo

以 G1 踝关节摆动为例:

# 语法:./build/bin/<demo 名称> <网卡名称>
./build/bin/g1_ankle_swing_example enp3s0

将 enp3s0 替换为你实际的网卡名称。

程序运行后的预期行为:

  1. 终端输出连接状态日志
  2. 订阅机器人 rt/lowstate 话题,接收关节状态
  3. 向 rt/lowcmd 话题发布控制指令
  4. G1 的踝关节开始按正弦波形规律左右摆动
6.4 Step 3:运行音频播放 Demo(C++)
./build/bin/g1_audio_server_example enp3s0

预期效果:机器人内置扬声器播放预设音频,可用于验证音频通信链路是否正常。


7. Python SDK Demo 测试

Python SDK 提供了与 C++ SDK 功能等价的接口,更适合快速开发和算法验证。

7.1 运行音频客户端示例
cd unitree_sdk2_python
python3 ./example/g1/audio/g1_audio_client_example.py enp3s0
7.2 Python SDK 使用范例

以下是一个完整的 Python 控制示例,展示如何订阅机器人状态并发布控制指令:

import sys
import time
import math
from unitree_sdk2py.core.channel import ChannelSubscriber, ChannelPublisher, ChannelFactoryInitialize
from unitree_sdk2py.idl.unitree_go.msg.dds_ import LowCmd_, LowState_

# 话题名称常量
TOPIC_LOWCMD = "rt/lowcmd"
TOPIC_LOWSTATE = "rt/lowstate"

class G1Controller:
    def __init__(self):
        self.low_state = None
        self.low_cmd = LowCmd_()

    def init_cmd(self):
        """初始化控制指令结构,所有关节设置为阻尼模式"""
        for i in range(35):
            self.low_cmd.motor_cmd[i].mode = 0x01
            self.low_cmd.motor_cmd[i].q = 0.0
            self.low_cmd.motor_cmd[i].dq = 0.0
            self.low_cmd.motor_cmd[i].kp = 0.0
            self.low_cmd.motor_cmd[i].kd = 0.5  # 阻尼系数
            self.low_cmd.motor_cmd[i].tau = 0.0

    def low_state_handler(self, msg: LowState_):
        """机器人状态回调函数"""
        self.low_state = msg

def main():
    if len(sys.argv) < 2:
        print("用法:python3 script.py <网卡名称>")
        sys.exit(1)

    # 初始化 DDS 通信
    ChannelFactoryInitialize(0, sys.argv[1])

    ctrl = G1Controller()
    ctrl.init_cmd()

    # 创建订阅器(接收机器人状态)
    sub = ChannelSubscriber(TOPIC_LOWSTATE, LowState_)
    sub.Init(ctrl.low_state_handler, 10)

    # 创建发布器(发送控制指令)
    pub = ChannelPublisher(TOPIC_LOWCMD, LowCmd_)
    pub.Init()

    print("连接成功,开始控制循环...")

    t = 0.0
    while True:
        # 踝关节正弦摆动示例
        if ctrl.low_state is not None:
            ctrl.low_cmd.motor_cmd[14].q = 0.3 * math.sin(t)  # 左踝关节
            ctrl.low_cmd.motor_cmd[14].kp = 10.0
            ctrl.low_cmd.motor_cmd[14].kd = 1.0
            pub.Write(ctrl.low_cmd)
        t += 0.002  # 500 Hz 控制频率
        time.sleep(0.002)

if __name__ == "__main__":
    main()

8. 常见问题与解决方案

8.1 编译类错误

问题 1:fatal error: dds/dds.hpp: No such file or directory

# 原因:CycloneDDS 库未正确安装或 CMake 未找到库路径
# 解决:
# 检查 dds.h 是否存在
find /usr -name "dds.hpp" 2>/dev/null
# 如果不存在,手动安装 cyclonedds
sudo apt-get install -y ros-noetic-cyclonedds
# 如果已装 ROS Noetic
# 或从源码编译
git clone https://github.com/eclipse-cyclonedds/cyclonedds
cd cyclonedds && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc) && sudo make install

问题 2:libyaml-cpp 相关编译错误

# 重新安装
sudo apt-get install --reinstall libyaml-cpp-dev
8.2 网络连接类错误

问题 3:ping 192.168.123.161 无响应

# 排查步骤:
# ① 确认网线物理连接正常(网卡指示灯是否亮起)
# ② 确认 IP 配置在正确的网卡上(注意多网卡环境)
# ③ 确认机器人已开机并处于调试模式
# ④ 检查防火墙是否阻断了 ICMP 包:
sudo ufw disable  # 临时关闭防火墙测试
# ⑤ 用 ifconfig 确认 PC 端 IP 是否在 192.168.123.x 网段

问题 4:Demo 运行无响应(DDS 连接失败)

# 确认网卡名称正确(区分大小写)
ifconfig | grep -E "^[a-z]"
# 以正确网卡名重新运行
./build/bin/g1_ankle_swing_example enp3s0  # 换成实际网卡名
8.3 Python 环境类错误

问题 5:pip3 install -e . 失败

# 升级 pip 后重试
pip3 install --upgrade pip setuptools wheel
pip3 install -e .
# 若提示权限不足,加 --user 或使用 sudo pip3 install --user -e .

问题 6:ModuleNotFoundError: No such module 'unitree_sdk2py'

# 检查是否在正确目录下安装
cd ~/unitree_sdk2_python
pip3 install -e .
# 验证模块路径
python3 -c "import unitree_sdk2py; print(unitree_sdk2py.__file__)"
现象可能原因快速解决
编译时找不到头文件依赖库未安装重新运行 apt-get install 命令
ping 不通网络配置错误检查 IP 地址是否在 123 网段
Demo 运行无输出网卡名称错误用 ifconfig 查询正确名称
Python 模块找不到未安装 SDK在 SDK 目录执行 pip3 install -e .
关节无响应未进入调试模式重新按 L2 + R2 进入调试模式
编译警告 / 错误依赖版本冲突参考各问题具体解决方案

9. 总结

9.1 完整开发流程回顾
环境准备
├── Ubuntu 20.04 系统
├── 安装编译依赖(apt-get)
└── 克隆 SDK 仓库
↓
SDK 编译安装
├── C++:cmake -B build && cmake --build build
└── Python:pip3 install -e .
↓
网络配置
├── 开发机设置静态 IP(192.168.123.x 网段)
├── ping 192.168.123.161 验证连通性
└── ifconfig 查询网卡名称
↓
机器人准备
├── 吊装状态下开机
├── 等待零力矩模式
└── 遥控器 L2 + R2 进入调试模式
↓
Demo 测试
├── C++ Demo:./build/bin/g1_ankle_swing_example <网卡名>
└── Python Demo:python3 ./example/g1/audio/g1_audio_client_example.py <网卡名>
↓
二次开发
├── 仿真验证(unitree_mujoco)
└── 真机部署

参考资源

资源地址
宇树官方文档中心support.unitree.com
C++ SDK 仓库github.com/unitreerobotics/unitree_sdk2
Python SDK 仓库github.com/unitreerobotics/unitree_sdk2_python
MuJoCo 仿真器github.com/unitreerobotics/unitree_mujoco
ROS2 支持包github.com/unitreerobotics/unitree_ros2
强化学习训练框架github.com/unitreerobotics/unitree_rl_gym
宇树开源项目总览unitree.com/cn/mobile/opensource

目录

  1. 1. SDK2 概述与架构原理
  2. 1.1 宇树 SDK2 是什么
  3. 1.2 宇树 G1 机器人规格速览
  4. 2. 开发环境要求
  5. 3. 获取官方 SDK 包
  6. 3.1 正常网络环境
  7. 克隆 C++ SDK
  8. 克隆 Python SDK
  9. 3.2 国内网络加速(可选)
  10. 将 https://github.com 替换为 https://bgithub.xyz
  11. 或使用 Gitee 镜像(若有同步)
  12. git clone https://gitee.com/unitreerobotics/unitree_sdk2
  13. 3.3 目录结构预览
  14. 4. 安装依赖与编译
  15. 4.1 C++ SDK 依赖安装
  16. 4.2 编译 C++ SDK
  17. 方法一:标准两步构建
  18. 4.3 Python SDK 安装
  19. 确保 pip3 是最新版本
  20. 进入 Python SDK 目录并以可编辑模式安装
  21. 5. 机器人与开发机网络配置
  22. 5.1 网络拓扑
  23. 5.2 Ubuntu 图形界面配置静态 IP
  24. 5.3 命令行配置静态 IP(可选)
  25. 查看网卡名称(记住连接机器人的那块网卡名,如 eth0、enp3s0 等)
  26. 临时设置(重启后失效,用于快速测试)
  27. 5.4 验证网络连通性
  28. 测试是否能 ping 通机器人
  29. 正常输出示例:
  30. PING 192.168.123.161 (192.168.123.161) 56(84) bytes of data.
  31. 64 bytes from 192.168.123.161: icmp_seq=1 ttl=64 time=0.456 ms
  32. 5.5 查询实际网卡名称
  33. 6. 调试并运行 Demo
  34. 6.1 机器人准备流程
  35. 6.2 Step 1:重新编译(首次运行必须)
  36. 6.3 Step 2:运行关节摆动 Demo
  37. 语法:./build/bin/<demo 名称> <网卡名称>
  38. 6.4 Step 3:运行音频播放 Demo(C++)
  39. 7. Python SDK Demo 测试
  40. 7.1 运行音频客户端示例
  41. 7.2 Python SDK 使用范例
  42. 话题名称常量
  43. 8. 常见问题与解决方案
  44. 8.1 编译类错误
  45. 原因:CycloneDDS 库未正确安装或 CMake 未找到库路径
  46. 解决:
  47. 检查 dds.h 是否存在
  48. 如果不存在,手动安装 cyclonedds
  49. 如果已装 ROS Noetic
  50. 或从源码编译
  51. 重新安装
  52. 8.2 网络连接类错误
  53. 排查步骤:
  54. ① 确认网线物理连接正常(网卡指示灯是否亮起)
  55. ② 确认 IP 配置在正确的网卡上(注意多网卡环境)
  56. ③ 确认机器人已开机并处于调试模式
  57. ④ 检查防火墙是否阻断了 ICMP 包:
  58. ⑤ 用 ifconfig 确认 PC 端 IP 是否在 192.168.123.x 网段
  59. 确认网卡名称正确(区分大小写)
  60. 以正确网卡名重新运行
  61. 8.3 Python 环境类错误
  62. 升级 pip 后重试
  63. 若提示权限不足,加 --user 或使用 sudo pip3 install --user -e .
  64. 检查是否在正确目录下安装
  65. 验证模块路径
  66. 9. 总结
  67. 9.1 完整开发流程回顾
  68. 参考资源
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 包管理新范式:极速工具 uv 深度解析
  • FLUX.1-dev 工作流:Midjourney 迁移指南与 Prompt 工程适配
  • OpenClaw Cron 系统设计:AI Agent 自主定时任务实现
  • 基于开源飞控的无人机装调与测试
  • 利用 AI 工具擦除视频中的动态人物和文字
  • 使用 Higress MCP Server 插件将 REST API 转为 AI 工具
  • DeepSeek 各版本说明与优缺点分析
  • Midjourney 第三方 API 服务技术原理与合规边界探讨
  • 论文 AIGC 检测原理与降重工具实测指南
  • Git 本地身份配置:用户名与邮箱设置详解
  • FastGithub:GitHub 网络加速工具部署与配置指南
  • 前端安全基础:密码存储与常见漏洞防护
  • GitHub 日榜热门项目精选 (2026-03-20)
  • Vue3 前端部门管理功能开发及 Vite 代理配置解决内网访问问题
  • Whisper 模型跨平台下载与部署指南
  • ERNIE-4.5-0.3B 轻量化部署与效能实践
  • 基于 Python 实现抖音私信自动回复机器人
  • AIGC Bar API 平台接入与工程化实践指南
  • Conda Python 环境管理指南:uv 对比与迁移方案
  • Qwen3-VL-WEBUI 本地部署与多模态理解实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online