Mujoco xml模型

Mujoco xml模型

  • 一个例子
  • compiler
  • option
  • asset
    • mesh
  • default
    • 基本使用
    • childclass与class
    • 多个class
  • worldbody
    • body关系
    • inertial
    • joint
    • geom

XML主要分为以下三个部分:

  • < asset> : 用 tag导入STL文件;
  • < worldbody>:用tag定义了所有的模拟器组件,包括灯光、地板以及你的机器人;
  • < acutator>:定义可以执行运动的关节。定义的顺序需要按照运动学顺序来,比如多关节串联机器人以工具坐标附近的最后一个关节为joint0,依此类推。

一个例子

mujoco官方文档给了xml文件能写的内容
XML Reference

<mujoco model="example"><!-- set some defaults for units and lighting --><compiler angle="radian" meshdir="meshes"/><!-- 导入STL文件 --><asset><mesh file="base.STL" /><mesh file="link1.STL" /><mesh file="link2.STL" /></asset><!-- 定义所有模拟器组件 --><worldbody><!-- 灯光 --><light directional="true" pos="-0.5 0.5 3" dir="0 0 -1" /><!-- 添加地板,这样我们就不会凝视深渊 --><geom name="floor" pos="0 0 0" size="1 1 1" type="plane" rgba="1 0.83 0.61 0.5"/><!-- the ABR Control Mujoco interface expects a hand mocap --><body name="hand" pos="0 0 0" mocap="true"><geom type="box" size=".01 .02 .03" rgba="0 .9 0 .5" contype="2"/></body><!-- 构建串联机器人 --><body name="base" pos="0 0 0"><geom name="link0" type="mesh" mesh="base" pos="0 0 0"/><inertial pos="0 0 0" mass="0" diaginertia="0 0 0"/><!-- nest each child piece inside the parent body tags --><body name="link1" pos="0 0 1"><!-- this joint connects link1 to the base --><joint name="joint0" axis="0 0 1" pos="0 0 0"/><geom name="link1" type="mesh" mesh="link1" pos="0 0 0" euler="0 3.14 0"/><inertial pos="0 0 0" mass="0.75" diaginertia="1 1 1"/><body name="link2" pos="0 0 1"><!-- this joint connects link2 to link1 --><joint name="joint1" axis="0 0 1" pos="0 0 0"/><geom name="link2" type="mesh" mesh="link2" pos="0 0 0" euler="0 3.14 0"/><inertial pos="0 0 0" mass="0.75" diaginertia="1 1 1"/><!-- the ABR Control Mujoco interface uses the EE body to --><!-- identify the end-effector point to control with OSC--><body name="EE" pos="0 0.2 0.2"><inertial pos="0 0 0" mass="0" diaginertia="0 0 0" /></body></body></body></body></worldbody><!-- 定义关节上的执行器 --><actuator><motor name="joint0_motor" joint="joint0"/><motor name="joint1_motor" joint="joint1"/></actuator></mujoco>

compiler

option

asset

mesh

<mesh name="base_link" file="base_link.obj"/><!--使用上-->
<geom type="mesh" mesh="base_link"/>  <!-- 使用该网格 -->

default

基本使用

< default> 定义的属性模板通过 ​​class 属性​​ 在后续的 < body>, < joint>, < geom> 等元素中引用。

基本引用规则​​:

  • ​​class="模板名"​​:在元素中添加该属性即可继承模板中定义的所有属性。
  • 继承逻辑​​:子类会继承父类的所有属性,同名属性会被子类覆盖,显式写了属性就会覆盖类的属性。
<default><!-- 根默认类 --><default class="robot">                <!-- 主模板 --><geom friction="0.6" margin="0.001"/> <!-- 所有几何体默认摩擦系数 --><joint damping="2"/>                 <!-- 所有关节默认阻尼 --><motor ctrlrange="-23.7 23.7"/>      <!-- 所有电机默认控制范围 --><!-- 子类:髋关节模板 --><default class="abduction">         <!-- 继承自 robot --><joint axis="1 0 0" range="-1.0472 1.0472"/> <!-- 覆盖 axis 和 range --></default><!-- 子类:膝关节模板 --><default class="knee">              <!-- 继承自 robot --><joint range="-2.7227 -0.83776"/>  <!-- 覆盖 range --><motor ctrlrange="-45.43 45.43"/>  <!-- 覆盖电机的控制范围 --></default></default>
</default>

根类使用

<body name="base" childclass="robot">  <!-- 所有子元素默认继承robot类 --><geom type="box" size="0.1 0.1 0.1"/> <!-- 自动应用 friction="0.6" --><joint name="free_joint"/>          <!-- 自动应用 damping="2" -->
</body>

子类abduction使用

<body name="FL_hip"><joint name="FL_hip_joint" class="abduction"/> <!-- 继承以下属性:axis="1 0 0" range="-1.0472 1.0472" damping="2" (从父类robot继承) -->
</body>

所以也就是说使用了 < joint class=“abduction”>的,有damping=“2"属性,也有axis=“1 0 0” range=”-1.0472 1.0472"属性。

显式覆盖

<default><default class="aa"><geom rgba="1 0 0 1" friction="0.8"/> <!-- 红色+高摩擦 --><joint damping="3"/>                   <!-- 高阻尼 --></default>
</default><body name="parent" childclass="aa"><!-- 子刚体自动继承类 aa --><body name="child1"><geom type="box"/> <!-- 自动应用 rgba="1 0 0 1" 和 friction="0.8" --><joint type="hinge"/> <!-- 自动应用 damping="3" --></body><!-- 子刚体显式覆盖属性 --><body name="child2"><geom type="sphere" rgba="0 1 0 1"/> <!-- 覆盖为绿色 --><joint type="slide" damping="1"/>    <!-- 覆盖阻尼 --></body>
</body>

childclass与class

childclass 的作用范围​仅作用于 < body> 标签内​​直接嵌套​​的子 < body>,当前刚体不使用这个属性,子刚体的子刚体(孙子级)不会自动继承该 childclass,除非它们也被显式设置。

<body name="parent" childclass="aa"><geom/> <!-- 不会应用 aa 的 geom 默认属性 --><!-- 子刚体(直接继承 aa) --><body name="child1"> <geom/> <!-- 自动应用 aa 的 geom 默认属性 --><!-- 孙子刚体(不继承 aa,除非 child1 也设置 childclass) --><body name="grandchild"><geom/> <!-- 不使用 aa 的属性 --></body></body>
</body><!-- 逐层传递 -->
<body name="parent" childclass="aa"><body name="child1" childclass="aa"> <!-- 显式传递 --><body name="grandchild"> <geom/> <!-- 现在继承 aa --></body></body>
</body>

class仅作用于当前 < body> 自身​​,不会自动传递给任何子刚体,​​子刚体若需继承​​,必须显式设置自己的 class 或 childclass。

<default><default class="robot_part"><geom rgba="1 0 0 1"/><joint damping="5"/></default>
</default><body name="parent" class="robot_part"> <!-- 当前body继承robot_part的属性 --><geom type="box"/> <!-- 红色方块 --><body name="child"><!-- 子刚体不受影响!使用全局默认属性 --><geom type="sphere"/> <!-- 默认颜色 --></body>
</body>

多个class

类名是要唯一的
​​同级 < default> 类名不能重复​​:在相同嵌套层级下,class 名称必须唯一。

<default><default class="a">...</default><default class="b">...</default>  <!-- 允许,不同名 --><default class="a">...</default>   <!-- 错误!与第一个 "a" 冲突 -->
</default>

子类只是会继承父类的属性,并不是嵌套使用的关系,body能直接使用aa和bb,所以aa和bb不能同名

<default class="a">  <!-- 父类 --><default class="aa">...</default>  <!-- 子类,继承 "a" 的属性 -->
</default>
<default class="b"><default class="bb">...</default>  <!-- 子类,继承 "b" 的属性 -->
</default>

worldbody

body关系

跟urdf的link和joint写法不一样,但是逻辑是一样的。

两个 < body>(刚体)通过 ​​关节(< joint>)​​ 实现物理连接,关节定义了它们之间的运动约束关系。
父子结构​​:子 < body> 必须嵌套在父 < body> 内,嵌套关系表达了父子关节,joint就不用写父子关节了。
关节定义位置​​:关节 < joint> 必须定义在 ​​子 < body> 内部​​。
​​默认行为​​:若无关节,子刚体会与父刚体​​刚性固定​​。
​​关节作用​​:添加关节后,子刚体可​​相对父刚体运动​​(旋转或平移)。

<!--定义父刚体​​-->
<body name="parent_body" pos="0 0 0"><!-- 父刚体的几何、惯性等属性 -->
</body>
<!--在父刚体内嵌套子刚体​​-->
<body name="parent_body"><body name="child_body" pos="0 0 0.1"> <!-- 初始位置偏移 --><!-- 子刚体的关节、几何等 --></body>
</body>
<!--在子刚体中添加关节​​-->
<body name="parent_body"><body name="child_body" pos="0 0 0.1"><joint name="child_joint" type="hinge" axis="0 1 0"/><geom type="box" size="0.1 0.1 0.1"/></body>
</body>

类似下面的urdf

<!-- URDF 的链式结构(明确指定父子关系) -->
<link name="parent_link"/>
<joint name="child_joint" type="revolute"><parent link="parent_link"/><child link="child_link"/><axis xyz="0 1 0"/>
</joint>
<link name="child_link"/>
特性URDFMuJoCo
​​连接方式 ​​显式通过 < parent> 和 标签隐式通过 < body> 嵌套层级
​​关节位置​​ 独立于 < link> 之外必须定义在​​子 < body> 内部​​
​​初始偏移​​在 < joint> 的 中定义在子 < body> 的 pos 属性中定义
​​几何体定义​​在 < link> 内通过 < visual>/< collision>直接在 < body> 内通过 < geom>

inertial

joint

能写的属性

属性类型描述
name字符串关节的唯一标识符。
type字符串关节的类型(如hinge、slide、ball等),决定了关节的运动方式。
pos数组关节相对于其父体的位置,默认为(0,0,0)。
axis数组运动轴向量,对于hinge和slide关节类型,这是旋转或滑动发生的方向。
range数组关节运动的范围,通常为一个最小值和一个最大值的数组。限制了关节可以达到的最小和最大位置。
damping浮点数关节的阻尼系数,用于模拟运动中的能量损失。
stiffness浮点数关节的刚度,用于模拟弹簧效果,影响关节回到初始位置的力度。
armature浮点数附加到关节轴上的虚拟质量,用于稳定仿真。可以认为是增加关节惯性的一种方式,有助于防止数值问题。
limited布尔值指示关节是否受到range属性定义的范围限制。默认为true,表示受限。

关节类型:Hinge(铰链关节),Slide(滑动关节),Ball(球形关节),free(自由关节)

geom

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】背景知识

一、Redis的特性 Redis是一种基于键值对&#xff08;key-value&#xff09;的NoSQL数据库&#xff0c;与很多键值对数据库不同的是&#xff0c;Redis中的值可以是由string&#xff08;字符串&#xff09;&#xff0c;hash&#xff08;哈希&#xff09;&#xff0c;list&#xf…

Redis的used_memory_peak_perc和used_memory_dataset_perc超过90%会怎么样

当Redis的used_memory_peak_perc&#xff08;当前内存占历史峰值的百分比&#xff09;和used_memory_dataset_perc&#xff08;数据集内存占比&#xff09;均超过90%时&#xff0c;可能引发以下问题及风险&#xff1a; 一、used_memory_peak_perc > 90% 的影响 内存交换风险…

嵌入式---灰度传感器

灰度传感器概览 一、定义与核心功能 1. 定义 灰度传感器是一种基于 光反射原理 的光电传感器&#xff0c;通过检测物体表面对入射光&#xff08;多为红外光或可见光&#xff09;的反射强度&#xff0c;将光信号转换为电信号&#xff0c;从而判断目标物体的 灰度值&#xff0…

0303hooks-react-仿低代码平台项目

文章目录 1. 副作用2.其他内置hooks2.1 useEffect2.2 useRef2.3useMemo2.4 useCallback 3.自定义hooks4. 第三方hooks5. hooks使用原则6. hooks闭包陷阱7. 总结结语 1. 副作用 当组件渲染完成时&#xff0c;加载一个Ajax网络请求当某个state更新时&#xff0c;加载一个Ajax网络…

Zephyr、FreeRTOS、RT-Thread 定时器区别分析

一、核心特性对比 特性ZephyrFreeRTOSRT-Thread定时器类型系统定时器&#xff08;k_timer&#xff09;、硬件定时器软件定时器&#xff08;基于系统tick&#xff09;软件定时器、硬件定时器定时模式单次、周期性单次、自动重载&#xff08;周期性&#xff09;单次、周期、自定…

手撕unique_ptr 和 shareed_ptr

文章目录 unique_ptrshared_ptr unique_ptr template<class T> class Unique_ptr { private:T* ptrNULL; public://1、删除默认的拷贝构造函数Unique_ptr(Unique_ptr& u) delete;//2、删除默认的复制构造Unique_ptr& operator(Unique_ptr& u) delete; …

对比 HashMap 和 ConcurrentHashMap 扩容逻辑的差异

HashMap 和 ConcurrentHashMap 在 扩容逻辑 上有明显的差异&#xff0c;尤其是在并发环境下的处理策略&#xff0c;这是它们核心区别之一。 &#x1f9f1; 一、总体对比表&#xff08;JDK 8 为例&#xff09; 特性HashMapConcurrentHashMap线程安全❌ 否✅ 是是否支持并发扩容…

Linux 的准备工作

1.root用户登录 首先讲一下root账户怎么登陆 直接 ssh root 公ip地址就可以了 比如我的是腾讯云的 这个就是公ip 下面所有普通用户的操作都是在root账户下进行的 2.普通用户创建 创建用户指令 adduser 用户名 比如说这个指令 我创建了一个ly_centos的普通用户 3.普通用…

自动变为 VIP 文章

今天突然发现自己写的大部分文章都被自动设为了VIP文章。 我这才想起来以前好像填过一个什么表&#xff0c;说要允许CS-DN把自己写的文章自动设为VIP文章。 我也忘了为啥要允许CSDN动我写的文章了&#xff0c;把几乎所有文章都给设为VIP显然是不合适的&#xff0c;毕竟文章是给…

Vue3+Vite+TypeScript+Element Plus开发-08.登录设计

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 Header响应式菜单缩展 Mockjs引用与Axios封装 登录设计 登录成功跳转主页 多用户动态加载菜单 文章目录 目录 系列文档目录 文章目录 前言 一、登录mo…

全新二手罗德SMCV100B信号发生器SMBV100A

全新二手罗德SMCV100B信号发生器SMBV100A SMCV100B信号发生器SMBV100A主要特点 适用于广播电视、导航、蜂窝和无线应用的多标准平台 全软件选件定义的矢量信号发生器&#xff0c;具备 5″ 触摸屏 全新的射频信号生成概念&#xff0c;频率范围介于 4 kHz 至 7.125 GHz 输出功率…

spring mvc @ResponseBody 注解转换为 JSON 的原理与实现详解

ResponseBody 注解转换为 JSON 的原理与实现详解 1. 核心作用 ResponseBody 是 Spring MVC 的一个注解&#xff0c;用于将方法返回的对象直接序列化为 HTTP 响应体&#xff08;如 JSON 或 XML&#xff09;&#xff0c;而不是通过视图解析器渲染为视图&#xff08;如 HTML&…

OpenCV——图像融合

OpenCV——图像融合 一、引言1.1 图像融合分类 二、C代码实现三、效果展示3.1 标准球3.2 铝制底座 一、引言 在许多计算机视觉应用中(例如机器人运动和医学成像)&#xff0c;需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量…

机器学习之PCA主成分分析详解

文章目录 引言一、PCA的概念二、PCA的基本数学原理2.1 内积与投影2.2 基2.3 基变换2.4 关键问题及优化目标2.5 方差2.6 协方差2.7 协方差矩阵2.8 协方差矩阵对角化 三、PCA执行步骤总结四、PCA参数解释五、代码实现六、PCA的优缺点七、总结 引言 在机器学习领域&#xff0c;我…

springboot自动配置原理例子讲解

Spring Boot 的自动配置是其核心特性之一&#xff0c;它帮助开发者**"开箱即用"**地使用各种第三方库或 Spring 组件&#xff0c;而无需手动配置 Bean。这一切的背后&#xff0c;都依赖于 Spring Boot 的自动配置机制。 我们分两部分来说&#xff1a; Spring Boot 自…

一款基于 .NET 8 + Vue 开源的、企业级中后台权限管理系统

前言 今天大姚给大家分享一款基于 .NET 8 Vue 开源、前后端分离的企业级中后台权限管理系统&#xff0c;助力快速完成常规业务需求开发&#xff1a;ApeVolo.Admin。 项目介绍 ApeVolo.Admin 一款基于.NET 8、SqlSugar、Vue、Elment UI、RBAC、前后端分离、开源&#xff08;…

vue3腾讯云直播 前端推流

1、在index.html文件中引入&#xff08;在body体中&#xff09; <script src"https://video.sdk.qcloudecdn.com/web/TXLivePusher-2.1.1.min.js" charset"utf-8"></script> 2、vue文件中&#xff0c;添加video推流&#xff08;我用的推流地…

蓝叠模拟器过检测全攻略

BlueStacks蓝叠MagiskLsposed安装和过应用检测教程 蓝叠MagiskLsposed安装和过应用检测教程 引言 蓝叠模拟器凭借其出色的性能和兼容性&#xff0c;在电脑上运行安卓应用和游戏方面备受青睐。然而&#xff0c;众多应用和游戏为确保公平性与安全性&#xff0c;加入了模拟器检测…

Flutter Invalid constant value.

0x00 问题 参数传入变量&#xff0c;报错&#xff01; 代码 const Padding(padding: EdgeInsets.all(20),child: GradientProgressIndicator(value: _progress), ),_progress 参数报错&#xff1a;Invalid constant value. 0x01 原因 这种情况&#xff0c;多发生于&#xff…

搜广推校招面经七十一

滴滴算法工程师面经 一、矩阵分解的原理与优化意义 矩阵分解在推荐系统中是一个非常核心的方法&#xff0c;尤其是在 协同过滤(Collaborative Filtering) 中。我们可以通过用户对物品的评分行为来推测用户的喜好&#xff0c;从而推荐他们可能喜欢的内容。 1.1. 直观理解&…