前言mujoco的建模其实很简单他就和建房子一样他是有一个基础的框架的在框架的基础上我们不断地去完善建立一些东西。下面我们就从框架出发带大家一步一步搞清楚他是怎样建模的1.基础概念Body (刚体)不带形状的概念只具有质量和惯性属性也就是重心。Joint (关节)定义 Body 相对于其父节点的自由度无关节则为固定连接。Geom (几何体)附着在 Body 上的实体用于碰撞 (Collision) 或外观 (Visual)。Site (位点)Body 坐标系内的一个点无质量常用于定义传感器位置。Transmission (传动机制)力如何作用于关节如直接作用或通过绳索2.MJCF 建模的框架是什么mujoco model模型名称 compiler .../ option .../ asset mesh .../ material .../ /asset worldbody light .../ geom namefloor .../ body namelink1 joint .../ geom .../ body namelink2 joint .../ geom .../ /body bodies /worldbody equality ... /equality tendon ... /tendon actuator ... /actuator sensor ... /sensor /mujoco我们来解释一下上面的框架2.1. 顶层配置规则设定区在蓝图的最开头你得先定好“度量衡”和“物理环境”。compiler(编译器设置)作用告诉 MuJoCo 怎么理解你的数字。常用属性angledegree我写的 90 是 90 度不是弧度、coordinatelocal坐标是相对父节点的。option(物理选项)作用设定模拟环境的物理规律。常用属性gravity0 0 -9.81重力朝哪指、timestep0.002模拟步长越小越精确但越慢。2.2asset仓库区想象这是一个仓库。如果你想给机器人穿漂亮的衣服材质或者用复杂的 3D 打印件网格模型你得先把它们放进仓库里并起个名字。mesh导入外部的 STL 或 OBJ 文件。material定义颜色、反光度、贴图。逻辑在这里定义好了后面在geom里通过名字调用。2.3.worldbody舞台区核心这是最重要的地方。所有的刚体、关节、形状都写在这里。(1)body—— 刚体骨架定义它是一个逻辑上的“块”。它本身没有形状只是一个坐标系。特点Body 里面可以嵌套 Body。嵌套就代表了父子连接。属性name(名字),pos(相对于父节点的位置)。(2)joint—— 关节轴承关键点关节必须写在body标签内部。含义它定义了这个 Body 相对于它的父节点怎么动。如果没有 Joint这个 Body 就死死地焊在父节点上。如果有 Joint它就可以绕着轴转动或滑动。常用类型hinge(像合页一样转动),slide(像抽屉一样滑动)。(3)geom—— 几何体肉体/碰撞体含义给看不见的 Body 加上形状。作用1.视觉展示让你看见它2.碰撞检测让它能撞到地板或别人。常用类型box(长方体),sphere(球体),capsule(胶囊体, 最常用因为计算速度快)。(4)site—— 位点记号笔含义在 Body 上定一个点。它不参与物理碰撞也不增加重量。作用就像在手臂上贴个标签告诉传感器“请测这个点的位置”或者“把绳索系在这个点上”。2.4. 动力与反馈区actuator(执行器)作用给关节加“电机”。逻辑你在worldbody里定义了一个 Joint能动在这里给它加一个 Actuator给它力让它动。sensor(传感器)作用安装摄像头、力矩传感器、加速度计等。3. 从 0-1 建立模型的建模顺序根据 XML 结构建议的建模逻辑顺序如下全局环境搭建在compiler中设定angledegree(推荐) 和坐标系在worldbody中添加地板和灯光。资源准备在asset中导入复杂的 3D 模型文件 (STL/OBJ) 或定义颜色材质。骨架构建Kinematic Tree这是最核心的一步。按照“父节点 - 子节点”的顺序在worldbody中建立 Body 树。定义自由度Joints在每个 Body 下添加 Joint。注意MuJoCo 的关节是定义在子节点上的。添加形状Geoms为每个 Body 添加 Geom。通常建议每个 Body 至少有两个 Geom一个用于视觉好看一个用于碰撞简单几何体提高计算速度。添加约束与传动如果有闭环链或绳索添加equality或tendon。添加动力Actuators定义电机关联到对应的 Joint 上。添加观测Sensors根据实验需求安装传感器。