Halo
发布于 2025-01-09 / 2 阅读 / 0 评论 / 0 点赞

mujoco创建关节

完整示例

<mujoco model="elbow_joint">
    <compiler angle="degree"/>
    <option timestep="0.001"/>
    
    <worldbody>
        <!-- 定义上臂体,它将保持不动 -->
        <body name="upper_arm" pos="0 0 0">
            <!-- 上臂的几何形状 -->
            <geom name="upper_arm_geom" type="capsule" fromto="0 0 0 0 0 0.5" size="0.1" rgba="1 0 0 1"/>
            
            <!-- 定义下臂体,它将绕肘部关节旋转 -->
            <body name="lower_arm" pos="0 0 0.5">
                <!-- 肘部关节定义 -->
                <joint name="elbow_joint" type="hinge" pos="0 0 0" axis="0 1 0" range="-150 0"/>
                <!-- 下臂的几何形状 -->
                <geom name="lower_arm_geom" type="capsule" fromto="0 0 0 0 0 0.5" size="0.1" rgba="0 1 0 1"/>
            </body>
        </body>
    </worldbody>
    
    <actuator>
        <!-- 定义驱动肘部关节的电机 -->
        <motor name="elbow_motor" joint="elbow_joint" gear="100"/>
    </actuator>
</mujoco>

拖动xml到mujoco, 点击运行按钮,操控ctrl值就能看到关节控制效果

joint和body的关系

在mujoco中,joint不用指定连接两端的body名字,而是通过body包含关系来确定。joint放在body元素里面,表示该body、上一级body两者之间建立关节。

actuator

actuator定义驱动关节或肌腱的执行器,有三种类型:motor(力矩)、position、velocity、motor(肌腱)。

  • motor(力矩) 通过施加力矩来直接驱动关节。含有name(执行器的名称)、joint(对应关节名称)、gear(齿轮比,缩放执行器对关节的力矩和速度的影响)
  • position 通过控制关节的位置来驱动关节。含有name(执行器的名称)、joint(对应关节名称)、kp(位置增益,于控制执行器对位置误差的响应强度)。
  • velocity 通过控制关节的速度来驱动关节。含有name(执行器的名称)、joint(对应关节名称)、kv(速度增益,用于控制执行器对速度误差的响应强度)
  • motor(肌腱) 通过控制肌腱的长度或速度来驱动关节。含有name(执行器的名称)、tendon(对应肌腱名称)、gear(齿轮比,用于缩放执行器的力)
<!-- motor(力矩) -->
<actuator>
    <motor name="elbow_motor" joint="elbow_joint" gear="100"/>
</actuator>

<!-- position -->
<actuator>
    <position name="elbow_position" joint="elbow_joint" kp="100"/>
</actuator>

<!-- velocity -->
<actuator>
    <velocity name="elbow_velocity" joint="elbow_joint" kv="100"/>
</actuator>

<!-- motor(肌腱) -->
<actuator>
    <motor name="tendon_motor" tendon="tendon_name" gear="100"/>
</actuator>

评论