← 返回摇晃实验Office Café · MuJoCo 摇晃实验
结论
已根据指定的 mujoco_shake.py 运行真实 MuJoCo 仿真。三组记录数值有限、无 MuJoCo 警告;固定装置相对房间的位姿保持约束。这是带已知初始摆放与碰撞误差的诊断仿真,不是通过静置精度验收的物理孪生。
原始导出有 16 个门 / 抽屉关节,但自由家具为 0,且没有参考脚本需要的房间驱动器。直接运行会得到全零移动,因此单独创建了当前摇晃版本。
三组相同初始条件的实验
| 实验 |
幅值参数 m/s² |
最大静置漂移 cm |
后续末态位移 cm |
后续移动 > 1 cm |
| control |
0 |
3.08 |
2.05 |
1 / 62 |
| gentle |
1.5 |
3.08 |
39.68 |
51 / 62 |
| strong |
5 |
3.08 |
184.34 |
60 / 62 |
每组:碰撞预整理(原脚本约 1.2 s)、静置 1 s、驱动 5 s、平息 3 s。基础频率 1.5 Hz,铰链起始开度 25%,抽屉起始关闭。实验记录为 600 Hz 仿真中的 60 Hz 姿态采样,网页每组 540 帧;网页可以自由环绕并插值播放,浏览器不重新计算物理。
“后续末态位移”由参考脚本比较静置结束和全部实验结束的位置。零驱动条件下也存在继续静置漂移,因此不能把所有位移归因于摇晃。另附 paired_control_comparison.json,逐物体对比同一最终时刻的零驱动和受摇状态。相对房间的全过程峰值记录在各组 JSON 的 peak_room_relative_motion_m。
如何从当前场景构建
- 62 个独立家具组件获得自由关节,可平移、旋转并与环境接触。
- 保留 16 个门 / 抽屉关节;原位置伺服改为零输入力矩 / 力电机,使其响应被动动力学。
- 房间使用参考
mujoco_scene.py 的 50,000 kg 刚体、X/Y/Z 滑动和偏航关节;位置增益 5e7,速度增益 3.16e6,并补偿房间重力。
- 墙、地板、橱柜、固定灯具及设备与房间相连。窗边书架、共享工作台等在此实验中按固定装置处理。
- 单独建模的阅读角绿植与其花盆合为同一运动组件。
- 补齐原碰撞导出遗漏的 12 个细管椅架组件,替换为 357 个从原 Blender 几何提取的逐部件凸碰撞形状。静态建筑仍使用原盒状碰撞体。
- 初始的盒状碰撞版本导致六把休闲椅静置下沉约 35 cm;修正支撑后最大静置漂移降为 3.08 cm。原始诊断保存在
before_collider_repair/。
必须保留的局限
- 修正后起始仍有 46 条穿透超过 1 mm 的接触记录;预整理后仍有 16 条。该数量是接触点数量,不是物体数量。
- 最大静置漂移仍为 3.08 cm;零驱动的后续末态最大漂移为 2.05 cm。尚未达到每个自由物体静置漂移 < 1 cm 的目标。
- 三组过程中的最大接触穿透约 2.3 cm。不存在数值爆炸不代表几何支撑完全正确。
- 洗碗机下翻门在零驱动条件下也会因重力打开约 65.8°。此部分不能算作摇晃诱发;缺少实测平衡弹簧和阻尼数据。
- 质量、摩擦(0.55 / 0.03 / 0.005)、惯量、机构限位、阻尼及固定方式均为假定;模型尺度来自未经物理标定的单目测量。
- 幅值 A 用于位移公式 A/(2πf)²,Y/Z 轴频率分别为 1.41f / 1.93f,另含偏航。所有轴的实际峰值加速度并不等于 A,开始 / 结束驱动还有原脚本的阶跃。较强条件会造成较大的家具滑移或倾倒;这些值不代表震级或经标定的地震工况。
- 原脚本
static_moved_max_cm 会把自由物体下面没有独立关节的子部件计为“static”。本项目另外沿父子树检查真正固定于房间的 46 个节点,其相对误差小于 6e-15 m。
- 原脚本字段
hinge_swing_deg 中,铰链单位为度,滑动关节实际单位为厘米。
录像、数据和复现
网页的 134 个模型节点全部绑定到记录刚体,使用相对于原始闭合模型的运动变换;不会把模拟动画混入原相机测量。网页材质与 MuJoCo 原生 OpenGL 录像有所不同。
strong_overview.mp4:同一次较强驱动记录的原生 MuJoCo 渲染,30 fps。为便于观察,隐藏墙体 / 顶棚,显示原地面碰撞支撑表面;这些显示设置不改变物理轨迹。
*_trajectory.npz:同一次实际执行捕获的 qpos、qvel、qacc、世界位置与四元数、接触深度,以及碰撞预整理轨迹;没有另跑一套近似动画。
*_report.json:原参考报告、数值诊断、源文件摘要与参数。
scene.xml 与 meshes/:可直接加载的当前派生 MJCF,含全部网格依赖。
run.py 与 reference/mujoco_shake.py:可直接重复参考实验。
python3 -m pip install -r requirements.txt
python3 run.py --scene scene.xml --amplitude 1.5 --frequency 1.5 --settle 1 --shake 5 --calm 3 --ajar 0.25
原始已复核 reconstruction/final/scene.blend、MJCF 和 URDF 保持不变;本实验的碰撞 / 自由家具版本独立保存。
MuJoCo 原生录像