最小仿真示例
本章目标:无需 3D 打印、无需硬件、无需焊接,在 GPU 电脑上一键跑通飞特 HD1910 版 MicroDuck 仿真环境,理解 Sim2Real 完整链路全貌。 前置:Docker + NVIDIA GPU 驱动(CUDA 支持);仓库已切换至
book-dev分支。
2.1 为什么把 Demo 放在最前面
传统机器人教程习惯从机械图纸、硬件装配开始,读者投入大量时间打印零件,最后才发现仿真根本跑不起来。 本书采用问题驱动、由虚到实的学习路径:
- 先在仿真世界验证机器人动力学、舵机模型、强化学习策略;
- 确认仿真环境行为符合预期后,再进入机械设计、3D 打印、硬件装配;
- 仿真里发现的动力学缺陷(惯性、重心、舵机参数),提前修正,避免真机返工。
本章最小 Demo 只做三件事:
- 加载飞特 HD1910 版本 MJCF 机器人模型;
- 校验模型合法性(惯性、关节限位);
- 加载预训练站立策略,启动 MuJoCo-Warp 仿真,可视化机器鸭站立。
本章不训练新策略,只复现一个已经收敛的站立策略,快速验证整套软件栈是否正常工作。
2.2 环境准备(Docker 一键容器)
仓库内置 Dockerfile,锁定 CUDA、Python、MuJoCo-Warp、mjlab 版本,消除版本依赖冲突。
# 拉取代码,切换本书开发分支
git clone https://github.com/你的用户名/microduck-replica.git
cd microduck-replica
git checkout book-dev
# 构建并启动 GPU 仿真容器
cd docker
docker-compose up --build
容器会自动挂载本地仓库目录,代码修改在宿主机直接生效,不需要重新打包镜像。
新开终端,进入容器环境:
docker exec -it microduck-replica-sim bash
2.3 模型校验(必须执行)
Sim2Real 工程中,MJCF 模型错误是最高发故障。仓库内置自动化校验脚本,检查惯性张量、总质量、关节限位。
python scripts/validation/validate_mjcf.py \
--mjcf software/training/assets/robots/microduck_feetech.xml
✅ 正常输出示例:
✅ MJCF加载成功,连杆数量: 16
✅ 整机总质量: 0.726 kg
✅ MJCF基础校验完成
❌ 报错场景:惯性张量非正定、关节限位超出舵机物理范围,需要回到 CAD/Onshape 环节修正。
2.4 运行最小 Demo:加载预训练站立策略
python software/training/train_ppo.py \
config=experiments/exp01_standup/config.yaml \
resume=experiments/exp01_standup/checkpoints/latest.onnx
执行后,MuJoCo-Warp 启动 GPU 并行仿真,弹出可视化窗口,机器鸭保持站立。
2.4.1 实验配置说明(exp01_standup/config.yaml)
robot_xml: "software/training/assets/robots/microduck_feetech.xml"
bam_params: "experiments/exp01_standup/bam_params.json"
num_envs: 256
control_freq: 50
policy_type: "ppo"
task: "stand"
domain_randomization: false
control_freq: 50:和 RK3566 板端 50Hz 控制频率严格对齐,是 Sim2Real 迁移的关键;domain_randomization: false:最小 Demo 关闭域随机化,保证行为稳定;后续章节开启域随机化做消融实验。
2.5 观察现象与基础诊断
观察仿真行为:
- 机器鸭稳定站立,无缓慢倾倒;
- 关节角度在 HD1910 物理限位内;
- 仿真无大量数值爆炸警告。
常见故障排查(本章踩坑实录)
- 启动立刻倒地:大概率 MJCF 重心/惯性参数错误;回到第 4 章 CAD→MJCF 流程复核;
- 关节剧烈抖动:BAM 舵机参数不匹配,需要第 8 章台架标定;
- CUDA out of memory:减小
num_envs。
2.6 本章小结
你已经验证了整套仿真软件栈:MJCF 模型、BAM 舵机模型、MuJoCo-Warp、PPO 策略加载。
仿真只是数字世界,仿真的动力学参数是否贴近真实机器人,决定后续真机迁移成败。 下一章进入机械 CAD,第 4 章:Onshape 自动化导出 MJCF,从源头计算连杆惯性、重心,告别手动估算。
实验记录:本次实验归档于
experiments/exp01_standup/,可在 TensorBoard 查看观测、奖励曲线。