一次成功流水账——众擎T800推理复现
用 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 很难给出可运行的代码。原因在于:
- 机器人结构未知:T800 有多少关节?每个关节的自由度和力矩范围是什么?
- 仿真接口不熟:MuJoCo 的
qpos、qvel、ctrl等数据如何与机器人关节对应? - MNN 推理流程复杂:观察空间(observation)怎么构造?动作(action)怎么映射到关节?
- 调试需要过程:初始高度、动作缩放、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 编程":
- 化整为零:将复杂任务拆解为多个小步骤,每一步只解决一个问题
- 循序渐进:从环境验证 → 结构认知 → 仿真控制 → 策略推理 → 调试优化
- 及时验证:每一步都通过代码运行结果验证理解是否正确
- 迭代优化:发现问题后,通过新的 prompt 让 AI 修复
5.2 关键经验
- 先理解再动手:不要急于写推理代码,先花时间理解机器人结构和仿真接口
- 可视化很重要:通过 matplotlib 可视化连杆、通过滑块控制界面验证关节,能大大加速理解
- 日志是调试的好帮手:精简的日志信息能帮助快速定位问题
- 初始状态很关键:机器人的初始高度、初始姿态对策略执行效果影响很大
5.3 适用场景
这种方法不仅适用于 T800 机器人,也适用于其他具身智能机器人的推理复现,例如:
- 其他众擎机器人(如 PM01)
- 其他强化学习策略的部署
- 任何需要结合物理仿真和神经网络推理的场景
六、相关资源
- 众擎 T800 SDK:engineai_robotics_native_sdk
- MuJoCo 官方文档:mujoco.readthedocs.io
- MNN 推理引擎:alibaba/MNN
欢迎交流讨论,如有问题请在评论区留言。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)