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

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

宇树 G1 人形机器人 SDK2 开发流程涵盖 C++ 与 Python 环境搭建、依赖安装及编译步骤。重点说明 CycloneDDS 通信架构、开发机与机器人静态 IP 网络配置方法。通过 ankle_swing 和 audio 示例演示关节控制与音频播放功能。包含常见问题排查如 DDS 连接失败、编译错误及网卡识别问题,适用于具身智能领域开发者快速上手真机调试。

BackendPro发布于 2026/3/23更新于 2026/6/1630 浏览
宇树机器人 SDK2 开发指南:环境搭建与 Demo 测试

宇树机器人 SDK2 开发指南

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 网络拓扑

开发电脑 (eth0: 192.168.123.222) <--- 网线 ---> 宇树 G1 机器人 (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. 步骤 1:开机
    • 将机器人在吊装状态下通电启动
  2. 步骤 2:等待零力矩模式
    • 等待机器人完成自检,进入零力矩(Damping)模式
    • 关节处于自由垂落状态,此时可安全操作
  3. 步骤 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)
# └── 真机部署

参考资源

资源地址
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. 宇树机器人 SDK2 开发指南
  2. 1. SDK2 概述与架构原理
  3. 1.1 宇树 SDK2 是什么
  4. 1.2 宇树 G1 机器人规格速览
  5. 2. 开发环境要求
  6. 3. 获取官方 SDK 包
  7. 3.1 正常网络环境
  8. 克隆 C++ SDK
  9. 克隆 Python SDK
  10. 3.2 国内网络加速(可选)
  11. 将 https://github.com 替换为 https://bgithub.xyz
  12. 或使用 Gitee 镜像(若有同步)
  13. git clone https://gitee.com/unitreerobotics/unitree_sdk2
  14. 3.3 目录结构预览
  15. 4. 安装依赖与编译
  16. 4.1 C++ SDK 依赖安装
  17. 4.2 编译 C++ SDK
  18. 方法一:标准两步构建
  19. 4.3 Python SDK 安装
  20. 确保 pip3 是最新版本
  21. 进入 Python SDK 目录并以可编辑模式安装
  22. 5. 机器人与开发机网络配置
  23. 5.1 网络拓扑
  24. 5.2 Ubuntu 图形界面配置静态 IP
  25. 5.3 命令行配置静态 IP(可选)
  26. 查看网卡名称(记住连接机器人的那块网卡名,如 eth0、enp3s0 等)
  27. 临时设置(重启后失效,用于快速测试)
  28. 5.4 验证网络连通性
  29. 测试是否能 ping 通机器人
  30. 正常输出示例:
  31. PING 192.168.123.161 (192.168.123.161) 56(84) bytes of data.
  32. 64 bytes from 192.168.123.161: icmp_seq=1 ttl=64 time=0.456 ms
  33. 5.5 查询实际网卡名称
  34. 6. 调试并运行 Demo
  35. 6.1 机器人准备流程
  36. 6.2 Step 1:重新编译(首次运行必须)
  37. 6.3 Step 2:运行关节摆动 Demo
  38. 语法:./build/bin/<demo 名称> <网卡名称>
  39. 6.4 Step 3:运行音频播放 Demo(C++)
  40. 7. Python SDK Demo 测试
  41. 7.1 运行音频客户端示例
  42. 7.2 Python SDK 使用范例
  43. 话题名称常量
  44. 8. 常见问题与解决方案
  45. 8.1 编译类错误
  46. 原因:CycloneDDS 库未正确安装或 CMake 未找到库路径
  47. 解决:
  48. 检查 dds.h 是否存在
  49. 如果不存在,手动安装 cyclonedds
  50. 如果已装 ROS Noetic
  51. 或从源码编译
  52. 重新安装
  53. 8.2 网络连接类错误
  54. 排查步骤:
  55. ① 确认网线物理连接正常(网卡指示灯是否亮起)
  56. ② 确认 IP 配置在正确的网卡上(注意多网卡环境)
  57. ③ 确认机器人已开机并处于调试模式
  58. ④ 检查防火墙是否阻断了 ICMP 包:
  59. ⑤ 用 ifconfig 确认 PC 端 IP 是否在 192.168.123.x 网段
  60. 确认网卡名称正确(区分大小写)
  61. 以正确网卡名重新运行
  62. 8.3 Python 环境类错误
  63. 升级 pip 后重试
  64. 若提示权限不足,加 --user 或使用 sudo pip3 install --user -e .
  65. 检查是否在正确目录下安装
  66. 验证模块路径
  67. 9. 总结
  68. 9.1 完整开发流程回顾
  69. 环境准备
  70. ├── Ubuntu 20.04 系统
  71. ├── 安装编译依赖(apt-get)
  72. └── 克隆 SDK 仓库
  73. SDK 编译安装
  74. ├── C++:cmake -B build && cmake --build build
  75. └── Python:pip3 install -e .
  76. 网络配置
  77. ├── 开发机设置静态 IP(192.168.123.x 网段)
  78. ├── ping 192.168.123.161 验证连通性
  79. └── ifconfig 查询网卡名称
  80. 机器人准备
  81. ├── 吊装状态下开机
  82. ├── 等待零力矩模式
  83. └── 遥控器 L2 + R2 进入调试模式
  84. Demo 测试
  85. ├── C++ Demo:./build/bin/g1ankleswing_example <网卡名>
  86. └── Python Demo:python3 ./example/g1/audio/g1audioclient_example.py <网卡名>
  87. 二次开发
  88. ├── 仿真验证(unitree_mujoco)
  89. └── 真机部署
  90. 参考资源
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • OpenClaw AI Agent 框架技术解析与架构设计
  • Python 异步编程实战:构建高性能网络应用
  • llama.cpp Vulkan 后端编译难题解决:环境配置与实战修复
  • OpenClaw WebUI 空白页故障排查与修复
  • Nginx 部署前端 Vue 项目
ToClaw 融合 OpenClaw 与远程功能,对比网页 AI 与传统工具
  • LeetCode Hot 100 链表经典题目实战解析
  • SketchUp STL 插件完整使用指南
  • Web 开发技术全景:从基础原理到全栈架构与未来趋势
  • Java 使用 Spire.PDF 将 PDF 转换为 Word 文档的两种模式
  • Faster-Whisper 本地部署及实时语音转文本方案
  • WebView 并发初始化竞争风险分析
  • SpringBoot 整合 Flowable 实现工作流实战指南
  • 悬架系统与天棚控制算法详解
  • 国内主流 AI 工具对比 - 豆包、元宝、千问、Kimi、DeepSeek、MiniMax、GLM
  • 前端面试高频场景题精选
  • YApi 代码生成功能使用指南:自动生成前端请求代码
  • GLM-5 与 Qwen3.5 大模型 API 调用教程
  • IT 行业转行指南:零基础如何判断自己是否适合?
  • Go 语言实现汉明距离(Hamming Distance)算法详解与源码
  • 相关免费在线工具

    • 加密/解密文本

      使用加密算法(如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