每一个读数,都应该有来处。
工作台使用开源 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/m | F=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安装锁定依赖、运行测试并构建。