前言

我们先复习一下我们的建模顺序

1.全局环境搭建 2.资源准备 3.骨架构建 4.定义自由度(Joints)5.添加形状(Geoms)6添加约束与传动 7 添加动力 8 添加观测

如果有忘记的伙伴可以去看我的第一篇文章mujoco建模(一)

这篇文章我们将完成最后一步6添加约束与传动 7 添加动力 8 添加观测

  <actuator>
    <motor class="fly" name="thrust1" site="thrust1" gear="0 0 1 0 0 -.0201"/>
    <motor class="fly" name="thrust2" site="thrust2" gear="0 0 1 0 0  .0201"/>
    <motor class="fly" name="thrust3" site="thrust3" gear="0 0 1 0 0 -.0201"/>
    <motor class="fly" name="thrust4" site="thrust4" gear="0 0 1 0 0  .0201"/>
  </actuator>

  <sensor>
    <gyro name="body_gyro" site="imu"/>
    <accelerometer name="body_linacc" site="imu"/>
    <framequat name="body_quat" objtype="site" objname="imu"/>
  </sensor>

  <keyframe>
    <key name="hover" qpos="0 0 .3 1 0 0 0" ctrl="3.2495625 3.2495625 3.2495625 3.2495625"/>
  </keyframe>

一Actuator(执行器)

  <actuator>
    <motor class="fly" name="thrust1" site="thrust1" gear="0 0 1 0 0 -.0201"/>
    <motor class="fly" name="thrust2" site="thrust2" gear="0 0 1 0 0  .0201"/>
    <motor class="fly" name="thrust3" site="thrust3" gear="0 0 1 0 0 -.0201"/>
    <motor class="fly" name="thrust4" site="thrust4" gear="0 0 1 0 0  .0201"/>
  </actuator>

这个部分给每个旋翼的电机施加推力,同时考虑旋翼旋转方向对 yaw 的影响。gear是控制执行器与物理力/力矩之间的映射矩阵。最后一项正负号控制旋翼方向(顺/逆时针),影响无人机偏航。

二Sensor(传感器)

<sensor>
    <gyro name="body_gyro" site="imu"/>
    <accelerometer name="body_linacc" site="imu"/>
    <framequat name="body_quat" objtype="site" objname="imu"/>
</sensor>

给无人机添加gyro三轴陀螺仪,测量角速度。accelerometer三轴加速度计,测量线加速度framequat测量某个 site 的四元数姿态,这里用于无人机姿态表示site="imu"所有传感器都以 IMU site 为参考点,通常放在无人机质心附近

同时往body里设置imu传感器位置

 <site name="imu" pos="0 0 .02"/>

三完整代码如下

<mujoco model="sim">
   <compiler autolimits="true"/>

   <option timestep="0.01" density="1.225" viscosity="1.8e-5"/>
    

    <default>
        <default class="fly">
            
            <geom mass="0"/>
            <motor ctrlrange="0 13"/>

            <default class="collision">
                <geom group="1" type="box"/>

                <default class="rotor">
                    <geom type="ellipsoid" size=".13 .13 .01"/>
                </default>
            </default>

            <site group="2"/>
        </default>
    </default>

    <asset>
        <texture type="skybox" builtin="gradient" rgb1="0.3 0.5 0.7" rgb2="0 0 0" width="512" height="3072"/>
        <texture type="2d" name="groundplane" builtin="checker" mark="edge" rgb1="0.2 0.3 0.4" rgb2="0.1 0.2 0.3"
            markrgb="0.8 0.8 0.8" width="300" height="300"/>
        <material name="groundplane" texture="groundplane" texuniform="true" texrepeat="5 5" reflectance="0.2"/>
    </asset>

    <worldbody>
        <light pos="0 0 1.5" dir="0 0 -1" directional="true"/>
        <geom name="floor" size="0 0 0.05" type="plane" material="groundplane"/>

        <body name="fly" pos="0 0 0.1" childclass="fly">

            
            <geom class="collision" type="box" size="0.08 0.05 0.02" pos="0 0 0.02"/>

            <geom class="collision" type="capsule" fromto="0 0 0.02  -0.14 -0.18 0.05" size="0.01"/>

            <geom class="collision" type="capsule" fromto="0 0 0.02  -0.14  0.18 0.05" size="0.01"/>
 
            <geom class="collision" type="capsule" fromto="0 0 0.02   0.14  0.18 0.05" size="0.01"/>

            <geom class="collision" type="capsule" fromto="0 0 0.02   0.14 -0.18 0.05" size="0.01"/>


            <geom name="rotor1" class="rotor" pos="-0.14 -0.18 0.05" mass="0.25"/>
            <geom name="rotor2" class="rotor" pos="-0.14  0.18 0.05" mass="0.25"/>
            <geom name="rotor3" class="rotor" pos=" 0.14  0.18 0.05" mass="0.25"/>
            <geom name="rotor4" class="rotor" pos=" 0.14 -0.18 0.05" mass="0.25"/>

            <freejoint/>
            <site name="imu" pos="0 0 .02"/>
            <site name="thrust1" pos="-0.14 -0.18 0.05"/>
            <site name="thrust2" pos="-0.14  0.18 0.05"/>
            <site name="thrust3" pos=" 0.14  0.18 0.05"/>
            <site name="thrust4" pos=" 0.14 -0.18 0.05"/>

        </body>
    </worldbody>

    <actuator>
        <motor class="fly" name="thrust1" site="thrust1" gear="0 0 1 0 0 -.0201"/>
        <motor class="fly" name="thrust2" site="thrust2" gear="0 0 1 0 0  .0201"/>
        <motor class="fly" name="thrust3" site="thrust3" gear="0 0 1 0 0 -.0201"/>
        <motor class="fly" name="thrust4" site="thrust4" gear="0 0 1 0 0  .0201"/>
    </actuator>

    <sensor>
        <gyro name="body_gyro" site="imu"/>
        <accelerometer name="body_linacc" site="imu"/>
        <framequat name="body_quat" objtype="site" objname="imu"/>
    </sensor>
    
</mujoco>

Logo

更多推荐