这是一个基于 Vue 3 + Vuetify 的单页演示网站,用于在浏览器中运行 MuJoCo WebAssembly 场景,并使用 ONNX policy 驱动人形机器人运动。当前默认配置会从 public/examples 加载 G1 场景、policy 和 motion 数据。
在线地址:https://imchong.github.io/RL_Sim2Sim_Demo_Website/
本仓库在实现上引用并改造了以下开源项目源码:
当前仓库的主要工作包括:
- 将项目迁移到
ImChong/RL_Sim2Sim_Demo_Website - 适配 GitHub Pages 部署
- 保留原始网页演示能力,便于后续继续扩展 sim2sim demo
npm install
npm run devsrc/views/Demo.vue:演示页面的主要 UI 控件src/simulation/main.js:MuJoCo、Three.js 渲染与 policy loop 的启动入口src/simulation/mujocoUtils.js:场景 / policy 加载工具与 MuJoCo 文件预加载逻辑src/simulation/policyRunner.js:ONNX 推理封装与 observation 管线node_modules/mujoco-js/:MuJoCo wasm 运行时(npm 包)public/examples/scenes/:放置 MJCF 文件与 mesh 资源,运行时会预加载到 MuJoCo 的 MEMFSpublic/examples/checkpoints/:放置 policy 配置 JSON、ONNX 模型与 motion 数据
- 新建目录:
public/examples/scenes/<robot>/ - 将 MJCF 文件放到:
public/examples/scenes/<robot>/<robot>.xml - 将该 MJCF 依赖的 mesh / texture 一并放到同目录
- 把所有文件路径追加到
public/examples/scenes/files.json,这样加载器才能在 wasm 文件系统中预加载到/working/
- 新建:
public/examples/checkpoints/<robot>/tracking_policy.json - 放置 ONNX 模型到:
public/examples/checkpoints/<robot>/tracking_policy.onnx - 确认 JSON 中以下字段正确:
onnx.path指向正确的 ONNX 文件,例如./examples/checkpoints/<robot>/tracking_policy.onnxpolicy_joint_names与 MJCF actuator 中的关节名一致obs_config中使用的 observation 名称已在src/simulation/observationHelpers.js中实现action_scale、stiffness、damping、default_joint_pos的长度与policy_joint_names一致
- 如果你的 observation 设计与当前默认实现不同,需要同步修改:
src/simulation/observationHelpers.jssrc/simulation/policyRunner.js
- 新建索引文件:
public/examples/checkpoints/<robot>/motions.json - 将每段 motion clip 放到:
public/examples/checkpoints/<robot>/motions/ - 在
tracking_policy.json中,把tracking.motions_path指向该索引文件 - policy 加载时会自动下载索引中列出的全部 motion 文件
motions.json建议包含:format:tracking-motion-index-v1base_path:motion 文件夹相对路径,例如./motionsmotions:{ name, file }列表
- 每个 motion 文件至少应包含:
joint_pos或jointPosroot_pos或rootPosroot_quat或rootQuat(顺序为w, x, y, z)
更新 src/simulation/main.js 中的默认路径:
this.currentPolicyPath = './examples/checkpoints/<robot>/tracking_policy.json'await this.reloadScene('<robot>/<robot>.xml')await this.reloadPolicy('./examples/checkpoints/<robot>/tracking_policy.json')
如果你希望同时保留多个机器人,也可以在 src/views/Demo.vue 中增加切换器,并调用:
demo.reloadScene(...)demo.reloadPolicy(...)
本仓库已经接入 GitHub Pages,推送到 main 分支后会通过 GitHub Actions 自动构建并部署。
关于项目的后续开发计划、键盘控制功能实现以及机器人强化学习训练的学习路径,请查看: 👉 TODO.md