urdf和mjcf简介

文章目录


MJCF和URDF的区别

MJCF(MuJoCo XML Format)与 URDF(Unified Robot Description Format)都是一种基于XML文件格式,URDF主要用于描述机器人本身,而MJCF的描述范围更丰富,还包括环境信息以及复杂的物理属性。二者在文件结构逻辑上一致,但标签有所不同。


一、URDF

URDF中描述的机器人本体信息,由连杆(link)和关节(joint)组成。link由joint连接起来。其拓扑结构类似于数据结构中的树,link为节点,joint为边,如下图:
在这里插入图片描述
该拓扑结构存在一定的限制,即:

另外,link和joint中都有一些属性,见如下代码及注释:

<robot name> <!-- 定义机器人模型的顶层元素,name 为机器人名称 -->
    <link name> <!-- 定义机器人的一个链接(或部件),name 是链接的名称 -->
        <inertial> <!-- 定义链接的惯性属性 -->
            <origin xyz="0 0 0" rpy="0 0 0" /> <!-- 惯性中心相对于链接参考点的位置和方向,xyz 表示位置,rpy 表示绕 x, y, z 轴的旋转(单位为弧度) -->
            <mass value /> <!-- 链接的质量 -->
            <inertia ixx iyy izz ixy ixz iyz /> <!-- 定义惯性矩阵的六个值(ixx, iyy, izz, ixy, ixz, iyz) -->
        </inertial>
        
        <visual name> <!-- 定义链接的视觉外观 -->
            <origin xyz="0 0 0" rpy="0 0 0" /> <!-- 视觉几何体的位姿,xyz 表示位置,rpy 表示旋转 -->
            <geometry> <!-- 定义视觉模型的几何形状 -->
                <box size /> <!-- 定义一个盒子,size 指定其尺寸 -->
                <cylinder radius length /> <!-- 定义一个圆柱体,radius 和 length 指定其半径和长度 -->
                <sphere radius /> <!-- 定义一个球体,radius 指定其半径 -->
                <mesh filename scale="1" /> <!-- 使用外部网格文件定义形状,filename 为文件路径,scale 为缩放因子 -->
            </geometry>
            <material name> <!-- 定义视觉模型的材质 -->
                <color rgba="0.5 0.5 0.5 1" /> <!-- 设置颜色,rgba 表示红、绿、蓝、透明度值 -->
                <texture filename /> <!-- 定义材质的纹理文件,filename 为纹理路径 -->
            </material>
        </visual>
        
        <collision name> <!-- 定义链接的碰撞属性 -->
            <origin xyz="0 0 0" rpy="0 0 0" /> <!-- 碰撞几何体的位置和方向,xyz 和 rpy 定义位姿 -->
            <geometry> <!-- 定义碰撞模型的几何形状,格式与 <visual> 中相同 -->
                <box size /> <!-- 定义一个盒子,size 指定其尺寸 -->
                <cylinder radius length /> <!-- 定义一个圆柱体,radius 和 length 指定其半径和长度 -->
                <sphere radius /> <!-- 定义一个球体,radius 指定其半径 -->
                <mesh filename scale="1" /> <!-- 使用外部网格文件定义形状,filename 为文件路径,scale 为缩放因子 -->
            </geometry>
        </collision>
    </link>
    
    <joint name type> <!-- 定义两个链接之间的关节,name 为关节名称,type 为关节类型(如 revolute、continuous、prismatic、fixed 等) -->
        <origin xyz="0 0 0" rpy="0 0 0" /> <!-- 关节的原点位置和方向,xyz 和 rpy 定义其位姿 -->
        <parent link /> <!-- 定义父链接名称 -->
        <child link /> <!-- 定义子链接名称 -->
        <axis xyz="1 0 0" /> <!-- 定义关节的旋转轴,xyz 表示旋转轴方向 -->
        <calibration rising /> <!-- 校准关节的上升值 -->
        <calibration falling /> <!-- 校准关节的下降值 -->
        <dynamics damping="0" friction="0" /> <!-- 定义关节的动力学属性,damping 为阻尼系数,friction 为摩擦系数 -->
        <limit lower="0" upper="0" effort velocity /> <!-- 定义关节的限制,lower 为最小限位,upper 为最大限位,effort 为最大允许力或力矩,velocity 为最大速度 -->
        <mimic joint multiplier="1" offset="0" /> <!-- 定义从属关节的模仿关系,joint 为模仿的目标关节,multiplier 为放大因子,offset 为偏移值 -->
        <safety_controller soft_lower_limit="0" soft_upper_limit="0" k_position="0" k_velocity="0" /> <!-- 定义关节的安全控制器,soft_lower_limit 和 soft_upper_limit 为软限位,k_position 为位置增益,k_velocity 为速度增益 -->
    </joint>
</robot>

二、MJCF

参见官方文档:https://mujoco.readthedocs.io/en/stable/modeling.html

1.mjcf的嵌套结构和默认设置

mjcf在描述机器人结构时不是用parent link和child link的方式,而是通过直接的嵌套表示其父子关系。且mjcf不仅能表示机器人本体信息,还能表示环境信息,其根主体并不是robot,而是worldbody,worldbody内可嵌套多个body。

此外,mjcf还可以设置默认属性值,以下是一个简单的例子:

<mujoco>
  <!-- 定义默认属性组,类名为 "main" -->
  <default class="main">
    <!-- 设置默认几何体的颜色为红色 (rgba:, 绿,, 透明度) -->
    <geom rgba="1 0 0 1"/>
    <!-- 嵌套的默认属性组,类名为 "sub",继承自 "main"-->
    <default class="sub">
      <!-- 覆盖 "main" 类中的默认颜色,将几何体的颜色设置为绿色 -->
      <geom rgba="0 1 0 1"/>
    </default>
  </default>

  <!-- 定义场景中的主体 -->
  <worldbody>
    <!-- 定义一个几何体类型为 "box" 的物体,使用默认的属性(此处无具体颜色,因此使用继承的颜色设置) -->
    <geom type="box"/>
    
    <!-- 定义一个子物体,应用 "sub" 类的默认属性 -->
    <body childclass="sub">
      <!-- 定义一个椭球形几何体,继承 "sub" 类的颜色(绿色) -->
      <geom type="ellipsoid"/>
      <!-- 定义一个球形几何体,并设置颜色为蓝色 (rgba: 0 0 1 1);此处会覆盖子类的默认颜色 -->
      <geom type="sphere" rgba="0 0 1 1"/>
      <!-- 定义一个圆柱体几何体,应用 "main" 类的默认属性(红色) -->
      <geom type="cylinder" class="main"/>
    </body>
  </worldbody>
</mujoco>

该例子表示的各个几何体的颜色分别为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值