用 AI 一步步引导,在 MuJoCo 仿真中复现众擎 T800 机器人行走推理

一、背景介绍

众擎(EngineAI)开源了人形机器人 T800 的完整 SDK —— engineai_robotics_native_sdk,其中提供了机器人的 XML 模型、URDF 模型和 Mesh 贴图文件,以及多种预训练策略(包括跳舞、走路等)。

我们的目标是:使用走路的预训练策略 t800_260318_150533_60000.mnn,在 MuJoCo 仿真环境中让 T800 机器人走起来。

核心难点在于:即便将 MNN-CODE 和 policy 模型都准备好,让大模型直接写一个完整的推理脚本也非常困难。大模型很难一步到位地理解机器人结构、仿真接口、MNN 推理流程之间的复杂关系。

解决方法:通过一系列精心设计的 prompt,一步步引导 AI 完成从环境验证到最终行走的完整流程。本文记录了这一过程,希望能帮助有类似需求的开发者。


二、环境准备

# 创建 conda 环境
conda create --name t800 python=3.11
conda activate t800

# 安装依赖
pip install mujoco==3.4
pip install numpy==2.3.5
pip install -U MNN

说明:MuJoCo 是 DeepMind 开源的物理仿真引擎,广泛用于机器人强化学习;MNN 是阿里巴巴开源的轻量级推理引擎,众擎的策略模型以 .mnn 格式提供。


三、核心思路:为什么需要"一步步引导"?

直接对 AI 说"用 MNN 模型让 T800 在 MuJoCo 里走路",AI 很难给出可运行的代码。原因在于:

  1. 机器人结构未知:T800 有多少关节?每个关节的自由度和力矩范围是什么?
  2. 仿真接口不熟:MuJoCo 的 qpos、qvel、ctrl 等数据如何与机器人关节对应?
  3. MNN 推理流程复杂:观察空间(observation)怎么构造?动作(action)怎么映射到关节?
  4. 调试需要过程:初始高度、动作缩放、PD 控制器参数都需要逐步调整。

因此,我们将整个流程拆解为 17 个步骤,每一步只解决一个问题,逐步构建出完整的推理系统。


四、分步实施

阶段一:环境验证与模型加载

步骤 1:验证 MuJoCo 环境

Prompt:帮我写一个脚本,验证 mujoco 的环境,写一个木块掉落的视频,木块的模型以 xml 格式编写,可视化代码以 01 开头。

目的:确认 MuJoCo 安装正确,能正常加载模型并渲染。

步骤 2:加载 T800 机器人模型

Prompt:帮我写一个 02 python 代码,把 t800.xml 众擎机器人加载到 mujoco 仿真世界中。

目的:确认 T800 的 XML 模型能被 MuJoCo 正确解析和加载。


阶段二:机器人结构认知

步骤 3:打印机器人关节信息

Prompt:帮我写一个新的 03 的 demo 代码,python 实现,打印 t800 机器人身上的全部的 joint,最小化编程,方便教学理解。

目的:了解 T800 有哪些关节,为后续控制做准备。

步骤 4:打印机器人连杆(Link)信息

Prompt:帮我写一个 04 的 demo 代码,把机器人全身的 link 给打印出来,打印名字,打印世界坐标系的位置信息。

目的:了解机器人的连杆结构和空间位置关系。

步骤 5:可视化连杆名称和坐标

Prompt:帮我写一个 05 的 demo 代码,使用 matplotlib 把全身的连杆的名称和位置坐标可视化的表示出来,并保存图片下来。

目的:通过可视化直观理解机器人的空间结构。

步骤 6:多视角查看连杆

Prompt:帮我写一个 06 的 demo 代码,给出 05_python_visualize_t800_links.py 对应的正视和侧视图视角,并保存对应的图片下来。

目的:从不同角度观察机器人结构,加深理解。

步骤 7:查看关节数、自由度数、主动关节数

Prompt:帮我写个 07 代码,查看机器人的关节数量,自由度数量,主动关节数量。

目的:从模型层面了解机器人的运动能力。

步骤 8:查看仿真环境接口给出的关节信息

Prompt:帮我写个 08 代码,查看 mujoco 仿真环境给出来的机器人的关节数量,自由度数量,主动关节数量。

目的:对比模型定义与仿真环境接口的差异,确保理解一致。


阶段三:仿真与控制器

步骤 9:单步调试仿真

Prompt:帮我写一个实例代码 09,我希望通过他理解 mujoco 仿真世界,一帧一帧是怎么运算的,我希望有个按钮,可以单步调试,一帧一帧的播放仿真。基于 02_python_load_t800.py 开发。

目的:理解 MuJoCo 的仿真循环机制,为后续控制打下基础。

步骤 10:添加 PD 控制器

Prompt:参考 02_python_load_t800.py,给这个机器人每个关节增加一个 PD 控制器,让机器人能保持初始的姿态,新的代码 10 开头。

目的:让机器人能够稳定站立,为行走提供基础。

步骤 11:查看关节力矩范围

Prompt:帮我写一个 11 开头的代码,打印 t800 机器人每一个关节的力矩范围。

目的:了解每个关节的输出能力,避免控制时超出物理限制。

步骤 12:滑块控制界面

Prompt:参考 02_python_load_t800.py,帮我写一个控制器,这个控制器界面有多个进度条,有图形化界面,拖动进度条可以控制机器人的关节角度。新的代码以 12 开头。

目的:通过可视化界面手动控制每个关节,验证关节运动是否正常。


阶段四:MNN 策略网络推理

步骤 13:分析 MNN 策略网络的观察空间

Prompt:MNN-CODE/demo.py 这个是众擎机器人推理 mnn 网络的参考代码,帮我写一个示例代码,分析一下众擎机器人网络模型的观察空间都是什么数据。帮我写一个 13 开头的代码。

目的:理解策略网络的输入格式,包括关节位置、关节速度、根节点位姿、上一时刻动作、任务目标等。

补充说明:T800 的观测空间通常由以下几类核心状态量拼接而成:

状态量类别MuJoCo 对应字段作用
关节位置data.qpos本体感知,位置闭环控制的基础
关节速度data.qvel动态反馈,抑制震荡
根节点位姿data.qpos[:7]判断是否摔倒、朝向及绝对高度
根节点速度data.qvel[:6]反映躯干运动趋势
上一时刻动作last_action提供动作连续性
任务目标/误差自定义变量引导 AI 向任务目标收敛
步骤 14:实现 MNN 推理,让机器人走路

Prompt:基于 13_python_analyze_mnn_obs_space.py 对机器人结构和模型数据的梳理,帮我把这个 mnn 推理的代码实现出来,要求机器人可以稳定的在仿真平台走路。代码的名字 14 开头。

目的:将观察空间构造、MNN 推理、动作映射、PD 控制串联起来,实现完整的行走控制。

核心链路:

策略网络输出归一化动作 → 动作缩放(action_scale)→ 叠加默认姿态 → 得到目标位置 target_qpos → PD 控制器计算力矩 → 执行器施加到关节 → 物理引擎推进一步


阶段五:调试与优化

步骤 15:分析日志,定位问题

Prompt:读取 log.txt 相关的日志,分析问题的原因,检查初始化的高度,初始化的动作范围。

目的:通过日志分析机器人运动异常的原因。

步骤 16:修复初始化和姿态问题

Prompt:现在一出来机器人蹦了一下,然后摔跤,把机器人初始高度设置一个单独的变量,可以修改,精简必要的日志信息,方便排查错误。他的上半身应该固定在同一个位置,不要来回旋转。

目的:调整初始高度、固定上半身姿态,解决机器人摔倒问题。

步骤 17:添加键盘控制

Prompt:给我写一个 16 的代码,可以通过键盘方向键控制机器人前后左右移动。

目的:增加交互控制,方便测试和演示。


五、总结与心得

5.1 方法论总结

本文的核心方法论是 "分步引导式 AI 编程":

  1. 化整为零:将复杂任务拆解为多个小步骤,每一步只解决一个问题
  2. 循序渐进:从环境验证 → 结构认知 → 仿真控制 → 策略推理 → 调试优化
  3. 及时验证:每一步都通过代码运行结果验证理解是否正确
  4. 迭代优化:发现问题后,通过新的 prompt 让 AI 修复

5.2 关键经验

  • 先理解再动手:不要急于写推理代码,先花时间理解机器人结构和仿真接口
  • 可视化很重要:通过 matplotlib 可视化连杆、通过滑块控制界面验证关节,能大大加速理解
  • 日志是调试的好帮手:精简的日志信息能帮助快速定位问题
  • 初始状态很关键:机器人的初始高度、初始姿态对策略执行效果影响很大

5.3 适用场景

这种方法不仅适用于 T800 机器人,也适用于其他具身智能机器人的推理复现,例如:

  • 其他众擎机器人(如 PM01)
  • 其他强化学习策略的部署
  • 任何需要结合物理仿真和神经网络推理的场景

六、相关资源


欢迎交流讨论,如有问题请在评论区留言。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐