当前位置: 首页 > news >正文

mujoco无人机实战建模(一)

前言

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

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

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

我们这篇文章先完成全局环境搭建与资源准备

<mujoco model="sim"> <compiler autolimits="true" /> <option timestep="0.01" density="1.225" viscosity="1.8e-5"/> <default> <default class="x2"> <geom mass="0"/> <motor ctrlrange="0 13"/> <default class="collision"> <geom group="3" type="box"/> <default class="rotor"> <geom type="ellipsoid" size=".13 .13 .01"/> </default> </default> <site group="5"/> </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"/> </worldbody> </mujoco>

1配置全局环境

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

作用

  • autolimits="true":MuJoCo 会自动根据你的 geom/motor 设置生成默认的安全控制范围,保证仿真不会出现非法状态。
  • timestep 决定控制频率、积分精度。(此处参考值可直接引用)
  • density / viscosity 可用于后续建风阻或推进力模型。(此处参考值可直接引用

2让他好看一点

<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>
  • 这一段代码完全是渲染资源,对物理仿真、控制和动力学没有任何影响,感兴趣的小伙伴可以交给ai解析一下,这里不做过多赘述。
  • 用途:
    1. 天空盒:模拟环境天空
    2. 棋盘格地面:让无人机飞行视觉上更有参考
    3. 材质控制:纹理重复、均匀度、反射

3添加基础的光源的地面

<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"/> </worldbody>
  • pos="0 0 1.5":光源在世界坐标系的位置(x, y, z)
  • dir="0 0 -1":光线方向向量(dx, dy, dz)(0,0,-1)表示光线朝下照射
  • directional="true":光源类型true→ 平行光(类似太阳光),光线方向固定

4无人机的全局配置(重要)

<default> <default class="fly"> <geom mass="0"/> <motor ctrlrange="0 13"/> <default class="collision"> <geom group="3" type="box"/> <default class="rotor"> <geom type="ellipsoid" size=".13 .13 .01"/> </default> </default> <site group="5"/> </default> </default>

首先我们要学会无人机建模中的类建模。这三个类并不是随机创建的,它们代表了机器人建模中的三个抽象层级

  • fly (顶级:身份层):定义了“只要属于这架无人机,就必须遵守的基本准则”。比如无论机身还是旋翼,它们的控制输入范围和基本质量规则是统一的。

  • collision(中级:物理属性层):定义了“所有实体的、会撞到东西的零件”的共性。它把“看得见、摸得着”的物体从抽象的逻辑中分离出来。

  • rotor(底层:特殊形状层):定义了“旋翼这种特殊零件”的几何特征。旋翼和方方正正的机身不同,它需要特殊的形状描述。

那么为什么每个类下面是这些元素(geom, motor 等)

这是根据属性的作用域来决定的:

  • 顶级类 (x2) 放motorgeom mass="0"

    • 为什么?因为电机(Motor)是全局的,整个无人机的所有电机通常使用相同的电调(ESC)信号范围。

    • 关于mass="0":这是一个建模技巧。在顶级类设为 0,意味着除非你在具体的零件里手动指定质量,否则默认不计重(通常是为了配合 MuJoCo 自动计算惯量,或者在body层级统一设定质量)。

  • 中间类 (collision) 放geom group="3"

    • 为什么?group是 MuJoCo 用来控制显示的。通常 group 3 专门给“看不见的碰撞体”用。放在这里,所有碰撞零件就一键归类了。

  • 底层类 (rotor) 放特定的geom size

    • 为什么?因为只有旋翼才需要定义成“扁平的椭球体”来模拟它扫过的空间。机身是不需要这个尺寸的。

这么做的作用就是避免重复写代码。如果你的无人机有 4 个旋翼、1 个机身、4 个支架,你肯定不想给每个零件都手动设置一遍颜色、碰撞属性和质量。

http://www.cnnetsun.cn/news/1697632.html

相关文章:

  • 嵌入式开发者的编程能力提升与重构实践
  • Hyperf方案 多环境配置管理
  • Windows下OpenClaw安装避坑指南:Qwen3.5-9B-AWQ-4bit联调实录
  • OpenClaw长期运行优化:Qwen3.5-9B-AWQ-4bit内存泄漏排查
  • 《贾子科学真理主权理论(Truth Sovereignty of Science)》
  • M5Unit-DigiClock模块:基于I²C的即插即用数字时钟解决方案
  • RTOS任务切换机制与触发时机详解
  • 迷彩伪装目标检测数据集VOC+YOLO格式839张1类别
  • PicoBricks-for-ESP32库详解:面向教育的ESP32硬件抽象封装
  • 2006 Text 3
  • OpenClaw深度学习:千问3.5-9B模型微调实战
  • M2LOrder轻量级部署教程:Miniconda torch28环境隔离与依赖冲突解决
  • Go语言的接口与多态
  • NDefs:嵌入式C语言零开销宏库与类型安全实践
  • 嵌入式差分升级技术解析与实践指南
  • (复现)基于自适应滑模控制(ASMC)和神经网络容错控制的主从式无人机编队控制研究(Matlab代码实现)
  • C语言结构体详解:从基础到高级应用
  • Linux系统调用原理与性能优化实践
  • python unique
  • TomServo:嵌入式低功耗多路舵机串行控制库
  • 嵌入式RTP协议栈:面向实时音频的低延迟传输设计
  • STM32异步Web服务器:零拷贝HTTP/WS工业网关实战
  • 【CPP 深度学习】PyTorch On CPP 系列课程 第一章 01 :入门与环境搭建 【Ai Infra 3.0】[PyTorch CPP LibTorch 硕士研一课程]
  • 基于FPGA的TCP乱序重排算法的实战实现与解析:自创算法的Verilog编码及性能验证
  • 深入解析seamless-immutable:特殊对象处理的终极指南
  • LLMLingua未来展望:AI推理加速技术的终极发展趋势
  • VirtualAPK插件监控告警终极指南:钉钉/企业微信通知配置
  • GeoIP2-CN的IP段合并工具开发:命令行参数详解
  • STIX Two字体:解决学术文档数学符号显示难题的专业方案
  • Apache NetBeans项目管理技巧:Maven、Gradle与Ant深度整合