前言

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

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

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

我们这篇文章完成。3骨架构建 4.定义自由度(Joints)5.添加形状(Geoms)

    <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="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>

这个 worldbody 其实只做了一件事:定义一个 6DOF 刚体 + 质量分布 + 力作用点

可以抽象成

           thrust site(施力点)
                ↑
     rotor mass ●       ● rotor mass
                \     /
                 \   /
           ●———刚体———●
                 /   \
                /     \
     rotor mass ●       ● rotor mass
                ↑
           thrust site

一<body> —— 刚体系统

    <body name="fly" pos="0 0 0.1" childclass="fly">
  • 定义一个刚体坐标系
  • pos → 初始位置(世界坐标系)
  • childclass="fly" → 所有子元素继承默认属性(mass / motor 等)

二构建无人机主体

   按照机身-机臂-旋翼的顺序依次构建无人机主体,机身就用一个盒子表示机身刚体,简化动力学计算,机臂capsule → 表示机身到旋翼的连杆,物理稳定,碰撞自然。旋翼单独刚体 → 可以挂 motor actuator 产生推力


            <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"/>

三构建6自由度模型和力作用点


            <freejoint/>

            <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"/>

此时一个简单的无人机模型就构建好了

Logo

更多推荐