mujoco建模(一)
前言
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 name="floor" .../> <body name="link1">
<joint .../>
<geom .../>
<body name="link2">
<joint .../>
<geom .../>
</body>
bodies>
</worldbody>
<equality> ... </equality> <tendon> ... </tendon> <actuator> ... </actuator> <sensor> ... </sensor> </mujoco>
我们来解释一下上面的框架:
2.1. 顶层配置:规则设定区
在蓝图的最开头,你得先定好“度量衡”和“物理环境”。
-
<compiler>(编译器设置):-
作用:告诉 MuJoCo 怎么理解你的数字。
-
常用属性:
angle="degree"(我写的 90 是 90 度,不是弧度)、coordinate="local"(坐标是相对父节点的)。
-
-
<option>(物理选项):-
作用:设定模拟环境的物理规律。
-
常用属性:
gravity="0 0 -9.81"(重力朝哪指)、timestep="0.002"(模拟步长,越小越精确但越慢)。
-
2.2 <asset>:仓库区
想象这是一个仓库。如果你想给机器人穿漂亮的衣服(材质)或者用复杂的 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>中设定angle="degree"(推荐) 和坐标系,在<worldbody>中添加地板和灯光。 -
资源准备:在
<asset>中导入复杂的 3D 模型文件 (STL/OBJ) 或定义颜色材质。 -
骨架构建(Kinematic Tree):这是最核心的一步。按照“父节点 -> 子节点”的顺序在
<worldbody>中建立 Body 树。 -
定义自由度(Joints):在每个 Body 下添加 Joint。注意:MuJoCo 的关节是定义在子节点上的。
-
添加形状(Geoms):为每个 Body 添加 Geom。通常建议每个 Body 至少有两个 Geom:一个用于视觉(好看),一个用于碰撞(简单几何体,提高计算速度)。
-
添加约束与传动:如果有闭环链或绳索,添加
<equality>或<tendon>。 -
添加动力(Actuators):定义电机,关联到对应的 Joint 上。
-
添加观测(Sensors):根据实验需求安装传感器。
更多推荐

所有评论(0)