← 返回 3D 仿真实验室
COMPUTATION, ASSUMPTIONS & EVIDENCE

每一个读数,都应该有来处。

工作台使用开源 MuJoCo 求解机械动力学,用 Three.js 显示引擎返回的几何状态。场景、控制、显示和验证各有边界,不能把动画当作物理结果。

真实引擎,明确版本。

MuJoCo 3.16.0 的官方单线程 WebAssembly 版本负责刚体质量、转动惯量、关节约束、重力、接触、执行器与传感器。模型使用标准MJCF,由原生编译器加载。每个物理步直接调用 mj_step;显示和传感器读数再通过 mj_forward 与当前积分状态同步。

Three.js 0.186.1 只把引擎的 geom_xpos / geom_xmat 转换成画面,不另行生成运动轨迹。物理时间来自引擎。电脑运行慢时仿真可能慢于墙上时钟,不跳过物理过程来伪装实时。

所有默认尺寸以m、质量以kg、时间以s、角度以rad表示。滑动motor输入为N,转动motor输入为N·m,当前控制接口要求gear=1。参数是模型假设,不能把界面小数位数当作实物测量精度。

生成的是可检查模型。

内置文字入口是本地规则转换器,明确支持“直线滑台、单摆/摆杆、自由落球”三种起点。识别带单位的质量、长度、高度、目标、最大推力,以及Kp/Ki/Kd等字段。缺少的物理参数与控制参数会列为示例假设。混合机构、未识别数值、电气要求和固件运行要求会被拒绝。

它不是通用AI建模。复杂机构需要你或AI助手生成正确的标准MJCF与控制器JSON,再通过项目JSON导入或直接粘贴编辑。载入时会调用真实编译器,错误会阻止运行。即使编译成功,也必须继续检查结构是否符合你的要求。

通用项目交换格式

{
  "version": 1,
  "name": "自己的机械实验",
  "kind": "custom",
  "parameters": {},
  "xml": "完整、自包含的 MuJoCo MJCF 文本",
  "controllers": [],
  "assumptions": ["列出尚未测量或省略的物理因素"]
}

建议先从工作台导出一个可运行项目,交给AI助手修改,保留版本与字段结构。不能用只描述外观的3D模型代替质量、惯量、关节和执行器定义。

图形编辑会修改MJCF几何属性并重新编译,碰撞几何和画面一同更新;质量与惯量遵循MJCF的inertial/inertiafromgeom设置。MuJoCo的size对方块使用半尺寸、对球使用半径。由几何推算惯量时,修改几何质量会改变所属刚体总质量。有显式inertial且未强制inertiafromgeom时,界面禁用几何质量编辑,应直接编辑inertial中的质量与惯量。固定世界几何不参与刚体质量计算。拖动只平移所选几何体相对刚体的位置,不移动关节支点;由几何推算惯量时,这也会改变质心和惯量;显式惯量则保持其定义。

控制器的输入输出有单位。

离散PID使用 u=Kp·(r−y)+Ki·I−Kd·v,D项使用测量速度。采用条件积分抗饱和;输出范围取控制器限幅与原生motor输入/力限制的交集。采样周期必须是物理步长的整数倍。可显式加入位置量化和测量延迟;初始延迟窗口以初始观测保持,不伪造噪声。

“应用控制参数”会保留机械状态、清零控制器内部状态。改变质量、几何或MJCF后则重新编译并复位。默认PID是模型里的理想力/力矩控制,并未包括电机驱动器、电流环、PWM、通信总线与CPU执行时序。

传感器区直接读取原生sensordata。虚拟编码器反映关节状态,落球的测距来自原生rangefinder。它们没有自动变成真实摄像头、IMU或超声波模块;要加入真实带宽、噪声、量化、延迟和标定误差,需要相应模型与参数。

曲线和CSV保存实际积分状态、当时的参考值、指令与实际执行器输出。改变目标后不改写历史参考曲线。CSV包含所有标量关节与执行器数据,最多保留最近60 s。动力学没有标量观测通道时,不应从空数据推断系统性能。

九项检查,误差保留。

点击工作台“数值验证”会在当前浏览器中重新计算以下基准。结果表显示实算值、理论值、绝对误差和容限;可导出本次报告,失败保持为失败。

检查独立依据基准条件
自由落体高度、速度z=z₀−gt²/2;v=−gt球心初始高度2m,质量1kg,g=9.81m/s²,t=0.5s;接触前比较。
步长收敛平滑自由落体位置误差随一阶步长减半implicitfast,dt从2ms减至1ms;误差比预期约0.5。
恒力滑台速度v=Ft/mF=2N,m=2kg,阻尼0,t=0.5s。
复合物理摆周期T≈2π√(I支点/(gΣmd))杆长0.6m,方杆截面0.03×0.03m、质量0.2kg;端部实心球半径0.05m、质量0.5kg;初角0.03rad,无阻尼。
铰接点约束理想转动关节不允许支点平移读取摆杆body坐标原点与支点距离。
闭环滑台稳态独立比较目标与求解位置m=1kg,粘性阻尼0.1,目标0.4m,Kp=40、Ki=0、Kd=12,控制采样10ms,运行4s。
相同条件重放同版本/同平台/同初值/相同步数应相同相同滑台模型分别运行1s,不宣称跨引擎或跨版本复现。
地面接触静止球心应接近球半径半径0.08m落球运行2s;MuJoCo软接触允许小量压入。
验证基础算例,不给任意项目“盖章”。你的机构仍可能存在错误单位、错误惯量、错误关节位置、不合适的接触参数、控制延迟遗漏和未经测量的摩擦。编译通过与基准通过,都不能替代实物标定和需求验收。

现在可以做什么?

可编辑并运行最多64个刚体、128个基础几何体、16个执行器的自包含机械MJCF,观察关节、控制输入、接触与传感器。支持平面、球、方块、椭球、圆柱与胶囊;可组合成不同机械系统,范围不局限于作品集项目。

当前不支持外部CAD/网格文件、柔性体、电磁/流体求解、PCB接线、STM32固件运行或真实相机图像处理。精细齿轮啮合、柔性传动、轮胎接地和摩擦等,需要合适的物理模型与参数;不会因换成3D显示就自动准确。

旧的项目原理演示仍保留,但采用的是简化行为模型,与本页MuJoCo工作台明确区分。示例假设与数值容限会展示,未实现项不会被当作完成。

开源来源与复现。

物理计算:Google DeepMind MuJoCo官方WASM绑定,Apache-2.0,随站保留许可证。版权归DeepMind Technologies Limited;Box碰撞代码包含Svetoslav Kolev的版权贡献。3D显示:Three.js,MIT,随站保留许可证。依赖版本与文件SHA-256见引擎清单。

选型时也核对了Rapier与rp2040js。前者是实时刚体引擎;后者是Pico芯片模拟器,不能冒充STM32或机械动力学。本站目前未集成后者。

下载工作台源码与测试。包含依赖锁定、模型、控制器、数值基准、界面源码和构建脚本,不含个人项目材料或本机配置。下载后按包内README安装锁定依赖、运行测试并构建。