walk-these-ways-go2
walk-these-ways-go2 是一个专为宇树科技(Unitree)Go2 四足机器人设计的开源项目,旨在实现从仿真环境到真实世界的运动控制部署。该项目基于 Improbable-AI 开发的 walk-these-ways 框架进行改编,核心目标是让 Go2 机器人能够像其前代产品 Go1 一样,具备灵活、稳定的行走能力。
这一工具主要解决了新一代 Go2 机器人在开发适配上的技术断层问题。由于 Go2 采用了全新的 unitree_sdk2 架构,不再依赖传统的 UDP 通信协议,导致原本适用于 Go1 或 A1 的控制代码无法直接复用。walk-these-ways-go2 通过修改底层 SDK 接口,并引入轻量级通信编组(LCM)技术,成功打通了高层策略与底层控制之间的数据链路,实现了传感器数据、电机指令及手柄状态的高效传输。
该项目特别适合具备一定编程基础的机器人开发者、研究人员以及强化学习爱好者使用。用户需要熟悉 Python 和 C++ 开发环境,并拥有配备 Nvidia GPU(至少 8GB 显存)的计算设备以支持 Isaac Gym 仿真训练。目前,训练好的策略模型主要通过 PC 或笔记本电脑进行部署,尚未完全适配 Jetson Orin 等嵌入式平台。
技术亮点方面,walk-these-ways-go2 不仅提供了完整的训练与推理流程,还预置了经过步态条件敏捷性训练的 Go2 模型,用户可直接加载体验或基于此进行二次开发。此外,项目详细说明了 LCM 消息类型的配置与编译方法,为希望深入理解 Sim-to-Real(仿真到现实)迁移技术的用户提供了宝贵的参考实例。
使用场景
某高校机器人实验室的研究团队正致力于将强化学习算法从仿真环境迁移至宇树 Go2 四足机器人,以验证其在复杂地形下的自适应步态控制能力。
没有 walk-these-ways-go2 时
- 底层通信壁垒高:Go2 采用了全新的 unitree_sdk2 架构,不再支持旧版 UDP 通信,研究人员需从头编写底层驱动接口,开发周期长达数周。
- 仿真与实机割裂:缺乏统一的 Sim-to-Real(仿真到现实)框架,在 Isaac Gym 中训练好的策略无法直接部署,需手动重写数据序列化逻辑,极易引入误差。
- 调试效率低下:传感器数据与控制指令之间缺乏标准化的中间件(如 LCM)桥接,导致实时状态监控困难,排查运动抖动或失衡原因如同“盲人摸象”。
- 配置管理混乱:环境参数与机器人物理属性分散在不同代码文件中,修改步态或地形参数时容易遗漏关键配置,导致训练崩溃或实机运行异常。
使用 walk-these-ways-go2 后
- 无缝对接新架构:工具内置了适配 unitree_sdk2 的 C++ 接口封装(lcm_position_go2),自动处理底层通信细节,让团队能直接聚焦于上层算法优化。
- 端到端流畅部署:通过标准化的 LCM 消息格式,实现了从 Python 训练脚本到 C++ 底层控制的透明数据传输,预训练模型可直接加载测试,大幅缩短验证周期。
- 可视化调试便捷:集成了完整的 LCM 日志系统,研究人员可实时查看关节状态、电机命令及 joystick 输入,快速定位并解决步态不稳问题。
- 集中化配置管理:所有关键参数统一收敛于
go2_config.py,修改地形难度或机器人动力学参数只需调整单一文件,显著降低了实验复现的难度。
walk-these-ways-go2 的核心价值在于消除了新一代四足机器人底层驱动与上层强化学习算法之间的技术鸿沟,让科研人员能以最低成本实现从仿真训练到真机落地的快速闭环。
运行环境要求
- Linux
- 必需 NVIDIA GPU,显存至少 8GB,训练需 CUDA 11.3
- Jetson Orin 部署推荐 CUDA 11.8
未说明

快速开始
Unitree Go2 上的 Sim-to-Real 项目
概述
本仓库基于 walk-these-ways 分叉而来,后者是一个用于 Go1 的 Sim-to-Real 行走运动入门套件。由于这些机器人均基于 unitree-legged-sdk,因此只需进行简单修改,便可在 Unitree A1 上使用 walk-these-ways。
然而,全新的架构 unitree-sdk2 已不再基于 UDP,因此本项目旨在通过修改 SDK 接口,在 Unitree Go2 上训练并部署 walk-these-ways。
需求
- Miniconda
- PyTorch 1.10(支持 CUDA 11.3)
- Isaac Gym
- 至少配备 8GB 显存的 NVIDIA GPU
训练与运行
克隆本仓库并安装:
git clone https://github.com/Teddy-Liao/walk-these-ways-go2.git
cd walk-these-ways-go2
pip install -e .
开始训练:
python scripts/train.py
go2_gym 和 go2_gym_learn 文件夹是训练过程的主要目录。
运行模型:
cd scripts
python play.py

Go2 预训练模型位于 ./runs,您可以通过修改 label = "gait-conditioned-agility/pretrain-go2/train" 这一行来选择是否使用提供的预训练模型,或替换为您自己训练的模型。
已知问题
- 在 go2_config 中,
flip_visual_attachments应设置为True,否则在可视化时会出现错误。 - 若要更改环境或机器人的配置参数,应修改 go2_config 中的参数,而非 legged_robot_config。
PC 上的部署
目前,训练好的策略仅支持通过您的 PC 或笔记本电脑进行部署,因为我对 Jetson Orin 并不熟悉,希望未来能够解决这一问题并在 Jetson Orin 上完成部署。
需求
安装 LCM
由于 walk-these-ways 实现了一个基于 Lightweight Communications and Marshalling (LCM) 的接口,用于在其代码与 Unitree 提供的底层控制 SDK 之间传递传感器数据、电机指令和操纵杆状态,因此首先需要在您的 PC 或笔记本电脑上安装 LCM。
将 LCM 仓库克隆到任意位置(通常放置已安装软件的地方),然后安装 LCM:
git clone https://github.com/lcm-proj/lcm.git
mkdir build
cd build
cmake ..
make
sudo make install
Unitree_SDK2
unitree_sdk2 已包含在 go2_gym_deploy/unitree_sdk2_bin/library/unitree_sdk2 中,您也可以从 Unitree Robotics 克隆以确保 SDK 是最新版本。
cd go2_gym_deploy/unitree_sdk2_bin/library/unitree_sdk2
删除构建文件:
rm -r build
安装并构建:
sudo ./install.sh
mkdir build
cd build
cmake ..
make
构建 lcm_position_go2
go2_gym_deploy/unitree_sdk2_bin/lcm_position_go2.cpp 是该项目的核心文件,它类似于 walk-these-ways 中的 lcm_position.cpp,但将 unitree_legged_sdk 替换为 unitree_sdk2。
构建 lcm_position_go2 并生成可执行文件 lcm_position_go2:
cd go2_gym_deploy
rm -r build
mkdir build
cd build
cmake ..
make -j
go2_gym_deploy/lcm_types 中的所有 LCM 消息文件均采用与 walk-these-ways 相同的格式,以确保与 Python 文件成功连接。本项目提供了 LCM 消息文件,您也可以按照以下说明生成自定义的 LCM 消息文件:
xxx_lcmt.hpp 文件由以下命令生成:
lcm-gen -x xxx.lcm
验证连接
使用以太网线将您的 PC/笔记本电脑与 Go2 机器人连接,并通过以下命令检查连接:
ping 192.168.123.161
查看网络接口地址,并复制该地址:
ifconfig
如果出现错误,请参考 Unitree 支持 获取详细信息。
测试 LCM 与 unitree_sdk2 之间的通信
您可以通过打开一个新的终端来验证 LCM 是否发送成功:
cd go2_gym_deploy/build
sudo ./lcm_receive
如果 LCM 和 unitree_sdk2 正确连接,终端中将显示消息:

启动 LCM
在启动 LCM 之前,请确保 lcm_receive 已经正确关闭。请注意,不要同时运行 lcm_receive 和 lcm_position_go2。
cd go2_gym_deploy/build
sudo ./lcm_position_go2 eth0
将 eth0 替换为您自己的网络接口地址。根据终端中显示的消息,多次按下回车键,即可建立 LCM 与 unitree_sdk2 之间的通信。
此命令会自动关闭 Unitree 的 sport_mode 服务,并将机器人设置为低级模式。请确保 Go2 处于悬空或平躺状态。
加载并运行策略
打开一个新的终端并运行:
cd go2_gym_deploy/scripts
python deploy_policy.py
根据终端中的提示,按下 [R2] 键启动控制器。RC 映射可在下文查看。
操纵杆映射

要查看操纵杆映射的详细信息,或甚至修改默认的映射逻辑,请参阅 cheetah_state_estimator.py 文件中的 get_command 函数。在本项目中,缺省步态设置为小跑。
注意:
- 如发生任何意外情况,请按下 [L2+B] 切换至阻尼模式!!!
- 本代码为研究用途,请自行承担风险;我们不对任何损害承担责任。
Unitree Go2 上的测试视频:
- 我的卧室测试:https://www.bilibili.com/video/BV1tQ4y1c7ZG/?spm_id_from=333.999.0.0&vd_source=07873ebe2a113dac57775e264a210929
- 其他贡献者的测试:https://www.bilibili.com/video/BV1Ut421H7Fr/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=07873ebe2a113dac57775e264a210929
Nvidia Jetson Orin 上的部署
Unitree Go2 机器人配备了一块基于 ARM 架构的 Nvidia Jetson Orin Nano/NX 板载计算机。该板载计算机的默认信息如下,您可以使用 SSH、VScode(远程开发)或 HDMI 线缆连接到 Jetson。
IP:192.168.123.18
用户名:unitree
密码:123
Jetson 的需求
- CUDA
- PyTorch
- Miniconda(此处省略;请自行安装)
- cuDNN(此处省略;请自行安装)
为了在 Jetson 上搭建正确的环境,提供了两种方法:通过互联网或通过 Docker。
通过互联网
将 Nvidia Jetson 设备连接到互联网主要有两种方式:
有线连接:直接将带有互联网接入的以太网电缆插入 Jetson 的以太网端口。这种方式提供稳定且快速的互联网连接,适用于需要高带宽或低延迟的任务。
通过 USB Wi‑Fi 适配器的无线连接:购买一个与 Jetson 设备兼容的 USB Wi‑Fi 适配器。这种方法增加了无线连接功能,使您无需物理电缆即可连接到互联网。不过,务必确保该 USB Wi‑Fi 适配器受 Jetson 操作系统及驱动程序的支持。
检查 Jetpack 版本
Jetson 上已预装了 Jetpack 工具箱,因此您应首先检查 Jetpack 的版本。
sudo -H pip install jetson-stats # 安装 jetson-stats 工具包
sudo jtop
根据终端窗口中显示的详细信息,我的 Unitree Go2 的 Jetpack 版本为 Jetpack 5.1.1 [L4T 35.3.1]。

您还可以检查已预装的库:
sudo jetson_release
为 Jetson 安装 CUDA
检查是否已预装 CUDA 版本。
nvcc -V # 检查预装的 CUDA 版本
如果预装的版本过高,您应该将其卸载,例如,目前没有与 CUDA 12.2 兼容的 PyTorch 版本。
sudo apt-get remove cuda
sudo apt autoremove
sudo apt-get remove cuda*
sudo dpkg -l |grep cuda # 检查是否存在残留的 CUDA 文件
sudo dpkg -P 残留文件名
我个人建议安装 CUDA 11.8。请点击链接 CUDA Toolkit 11.8 下载,查看安装命令。
为 Jetson 安装 PyTorch
请从 这里下载为 Jetson Nano 预编译的 PyTorch pip 轮子安装包,这与在 PC 上安装 PyTorch 的方式不同。请注意,必须选择与特定版本的 CUDA 和 Jetpack 兼容的正确 PyTorch 版本。
无缆运行代码
只要在 Jetson 上正确配置了环境和所需依赖,您就可以按照与在 PC 上相同的部署指南进行操作。这样一来,机器人就不再受电缆束缚了!现在您可以无需电缆测试代码,从而为机器人的运动和应用提供更多自由度。
通过 Docker
待续……
🌟🌟🌟 如果您觉得本项目对您有帮助,请给它点个赞!非常感谢! 🌟🌟🌟
致谢
- 非常感谢 Leolar,他提供了 Nvidia 3060ti 显卡及相关支持。
- 非常感谢 Jony 和 Peter 对我的支持,并鼓励我学习强化学习的基础知识。
- 非常感谢 Simonforyou,他提供了 Go2 的预训练模型。
待办事项
- 不再继承 go1_gym 的配置和环境,为 Go2 构建自定义的配置和环境文件
- 在 Jeston Orin Nano 上部署
- 通过 Docker 部署
常见问题
相似工具推荐
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
PaddleOCR
PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。
awesome-machine-learning
awesome-machine-learning 是一份精心整理的机器学习资源清单,汇集了全球优秀的机器学习框架、库和软件工具。面对机器学习领域技术迭代快、资源分散且难以甄选的痛点,这份清单按编程语言(如 Python、C++、Go 等)和应用场景(如计算机视觉、自然语言处理、深度学习等)进行了系统化分类,帮助使用者快速定位高质量项目。 它特别适合开发者、数据科学家及研究人员使用。无论是初学者寻找入门库,还是资深工程师对比不同语言的技术选型,都能从中获得极具价值的参考。此外,清单还延伸提供了免费书籍、在线课程、行业会议、技术博客及线下聚会等丰富资源,构建了从学习到实践的全链路支持体系。 其独特亮点在于严格的维护标准:明确标记已停止维护或长期未更新的项目,确保推荐内容的时效性与可靠性。作为机器学习领域的“导航图”,awesome-machine-learning 以开源协作的方式持续更新,旨在降低技术探索门槛,让每一位从业者都能高效地站在巨人的肩膀上创新。
scikit-learn
scikit-learn 是一个基于 Python 构建的开源机器学习库,依托于 SciPy、NumPy 等科学计算生态,旨在让机器学习变得简单高效。它提供了一套统一且简洁的接口,涵盖了从数据预处理、特征工程到模型训练、评估及选择的全流程工具,内置了包括线性回归、支持向量机、随机森林、聚类等在内的丰富经典算法。 对于希望快速验证想法或构建原型的数据科学家、研究人员以及 Python 开发者而言,scikit-learn 是不可或缺的基础设施。它有效解决了机器学习入门门槛高、算法实现复杂以及不同模型间调用方式不统一的痛点,让用户无需重复造轮子,只需几行代码即可调用成熟的算法解决分类、回归、聚类等实际问题。 其核心技术亮点在于高度一致的 API 设计风格,所有估算器(Estimator)均遵循相同的调用逻辑,极大地降低了学习成本并提升了代码的可读性与可维护性。此外,它还提供了强大的模型选择与评估工具,如交叉验证和网格搜索,帮助用户系统地优化模型性能。作为一个由全球志愿者共同维护的成熟项目,scikit-learn 以其稳定性、详尽的文档和活跃的社区支持,成为连接理论学习与工业级应用的最
keras
Keras 是一个专为人类设计的深度学习框架,旨在让构建和训练神经网络变得简单直观。它解决了开发者在不同深度学习后端之间切换困难、模型开发效率低以及难以兼顾调试便捷性与运行性能的痛点。 无论是刚入门的学生、专注算法的研究人员,还是需要快速落地产品的工程师,都能通过 Keras 轻松上手。它支持计算机视觉、自然语言处理、音频分析及时间序列预测等多种任务。 Keras 3 的核心亮点在于其独特的“多后端”架构。用户只需编写一套代码,即可灵活选择 TensorFlow、JAX、PyTorch 或 OpenVINO 作为底层运行引擎。这一特性不仅保留了 Keras 一贯的高层易用性,还允许开发者根据需求自由选择:利用 JAX 或 PyTorch 的即时执行模式进行高效调试,或切换至速度最快的后端以获得最高 350% 的性能提升。此外,Keras 具备强大的扩展能力,能无缝从本地笔记本电脑扩展至大规模 GPU 或 TPU 集群,是连接原型开发与生产部署的理想桥梁。