mujoco无人机实战建模(三)
·
前言
我们先复习一下我们的建模顺序
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>
更多推荐


所有评论(0)