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"/>
| 特性 | URDF | MuJoCo |
|---|---|---|
| 连接方式 | 显式通过 < 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
相关文章:
Mujoco xml模型
Mujoco xml模型 一个例子compileroptionassetmesh default基本使用childclass与class多个class worldbodybody关系inertialjointgeom XML主要分为以下三个部分: < asset> : 用 tag导入STL文件;< worldbody>:用tag定义…...
LLM 为什么使用ID,每个单词不都是有编码的吗
LLM 为什么使用ID,每个单词不都是有编码的吗 在自然语言处理(NLP)里,把文本转换为整数 ID 来表示是一种常见的做法,以下为你详细阐述使用 ID 的原因,以及是否每个单词都有编码。 使用 ID 的原因 1. 计算机可处理性 计算机没办法直接处理文本数据,因为文本是人类使用的…...
vue专题1---vue中绑定的自定义事件对应的事件处理函数,如何在传递参数的同时接收事件对象 event
在 Vue 中,如果想在事件处理函数中传递参数,可以使用箭头函数或者 v-bind 来实现。下面是两种常见的方法: 方法1:使用箭头函数 你可以直接在事件监听中使用箭头函数来传递参数,同时接收事件对象 e。 <template&g…...
转行嵌入式,需要自学多久?
作为一个本硕都学机械,却阴差阳错进入嵌入式行业的老兵,这个问题我能聊一整天。十几年前我还在工厂车间穿着工装和机床打交道,偶然接触到单片机后就一发不可收拾。 转行这条路我走得异常艰辛,踩过的坑比写过的代码还多。去年我终…...
实现抗隐私泄漏的AI人工智能推理
目录 什么是私人AI? 什么是可信执行环境? TEE 如何在 AI 推理期间保护数据? 使用 TEE 是否存在风险? 有哪些风险? Atoma 如何应对这些风险 为什么去中心化网络是解决方案 人工智能推理过程中还有其他保护隐私的方法吗? 私人人工智能可以实现什么? 隐私驱动的应…...
SeaTunnel系列之:Apache SeaTunnel编译和安装
Apache SeaTunnel编译 Prepare编译克隆源代码本地安装子项目从源代码构建 SeaTunnel构建子模块安装 JetBrains IDEA Scala 插件安装 JetBrains IDEA Lombok 插件代码风格运行简单示例不仅如此 安装下载 SeaTunnel 发布包下载连接器插件从源代码构建 SeaTunnel 运行 SeaTunnel 在…...
数据结构刷题之贪心算法
贪心算法(Greedy Algorithm) 是一种在每个步骤中都选择当前最优解的算法设计策略。它通常用于解决优化问题,例如最小化成本或最大化收益。贪心算法的核心思想是:在每一步选择中,都做出局部最优的选择,希望…...
Spring进阶:掌控Bean的作用域与生命周期
在上一篇文章中,我们了解了Spring IoC容器如何接管对象的创建和依赖注入,实现了松耦合。容器创建并管理的对象,我们称之为Bean。 但是,容器仅仅是创建Bean就够了吗?显然不是。我们还需要关心: 这个Bean在容…...
【Leetcode-Hot100】移动零
题目 解答 首先,使用的解题思路是:使用两个指针,分别指向数组的第一个0元素位置,以该元素位置1为起始点寻找接下来第一个非0元素位置。二者确定后,对其进行交换。随后继续寻找下一个0元素位置。重复上述操作。 但第一…...
安装 Calico 的两种主流方式对比
本文对比了 Calico 的两种主流安装方式: 使用 calico.yaml 的 Manifest 安装方式使用 Tigera Operator(tigera-operator.yaml custom-resources.yaml)安装方式 ✅ 1. 使用 Manifest 方式安装(直接部署 calico.yaml) …...
leetcode_203. 移除链表元素_java
203. 移除链表元素https://leetcode.cn/problems/remove-linked-list-elements/ 1、题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head …...
常见算法模板总结
文章目录 一、二叉树1. DFS2. BFS 二、回溯模板三、记忆化搜索四、动态规划1. 01背包朴素版本滚动数组优化 2. 完全背包朴素版本滚动数组优化 3. 最长递增子序列LIS朴素版本贪心二分优化 4. 最长公共子序列5. 最长回文子串 五、滑动窗口六、二分查找七、单调栈八、单调队列九、…...
UE5学习笔记 FPS游戏制作44 统一UI大小 sizeBox
如果我们希望多个类似的UI大小一样,例如不同菜单的标题,可以使用sizeBox组件 我们在标题控件上,用sizeBox包裹所有子物体 然后指定他的最小宽高,或最大宽高 如果指定的是最小宽高,当子元素(如图片…...
# 基于BERT的文本分类
基于BERT的文本分类项目的实现 一、项目背景 该文本分类项目主要是情感分析,二分类问题,以下是大致流程及部分代码示例: 二、数据集介绍 2.1 数据集基本信息 数据集自定义类型二分类(正面/负面)样本量训练集 验证…...
C++学习之服务器EPOLL模型、处理客户端请求、向客户端回复数、向客户端发送文件
目录 1.启动epoll模型 2.和客户端建立新连接 3.接受客户端Http请求数据 4.代码回顾从接受的数据中读出请求行 5.请求行解析 6.正则表达式以及匹配 7.解析请求行以及后续处理 8.对path处理说明 9.如何回复响应数据 10.对文件对应content-type如何查询 11.服务器处理流…...
BUUCTF-web刷题篇(17)
26.BabyUpload 源码:https://github.com/imaginiso/GXY_CTF/tree/master/Web/babyupload 查看题目源码: 写着:SetHandler application/x-httpd-php 通过源码可以看出这道文件上传题目主要还是考察.htaccess配置文件的特性,倘若…...
国网B接口协议调阅实时视频接口流程详解以及检索失败原因(电网B接口)
文章目录 一、B接口协议调阅实时视频接口介绍B.6.1 接口描述B.6.2 接口流程B.6.3 接口参数B.6.3.1 SIP头字段B.6.3.2 SIP响应码B.6.3.3 SDP参数定义B.6.3.4 RTP动态Payload定义 B.6.4 消息示例B.6.4.1 调阅实时视频请求B.6.4.2 调阅实时视频请求响应 二、B接口调阅实时视频失败…...
windows11下pytorch(cpu)安装
先装anaconda 见最下方 Pytorch 官网:PyTorch 找到下图(不要求版本一样)(我的电脑是集显(有navdia的装gpu),装cpu) 查看已有环境列表 创建环境 conda create –n 虚拟环境名字(…...
NVR接入录像回放平台用EasyCVR打造地下车库安防:大型商居安全优选方案
一、背景分析 随着居民生活品质的提升,大型商业建筑和住宅小区纷纷配套建设地下停车库。但是地下车库盗窃、失火、恶意毁坏车辆、外部人员随意进出等事件频发,部署视频监控系统成为保障地下车库的安全关键举措。 目前,很多商业和住宅都会在…...
玻璃期货数据下载与分析:Python金融实战分享
期货数据下载与分析:Python实战分享 引言 在金融市场中,期货分析是一项重要的工作,而获取准确且及时的数据是进行有效分析的基础。今天,我们将深入探讨一段使用Python编写的代码,该代码用于从郑州商品交易所…...
excel常见错误包括(#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?、#NULL! )
目录 1. #N/A2. #VALUE!3. #REF!4. #DIV/0!5. #NUM!6. #NAME?7. #NULL!8.图表总结 在 Excel 中,可能会遇到以下常见的错误值,每个都有特定的含义和成因: 1. #N/A 含义: 表示“Not Available”(不可用)。…...
乾元通渠道商中标川藏铁路西藏救援队应急救援装备项目
乾元通渠道商中标川藏铁路西藏救援队应急救援装备项目,项目内通信指挥车基于最新一代应急指挥车解决方案打造,配合乾元通自研的车载多链路聚合路由及系统,主要用途为保障应急通讯,满足任务执行时指挥协调、通信联络及数据传输的要…...
数学知识——矩阵乘法
使用矩阵快速幂优化递推问题 对于一个递推问题,如递推式的每一项系数都为常数,我们可以使用矩阵快速幂来对算法进行优化。 一般形式为: F n F 1 A n − 1 F_nF_1A^{n-1} FnF1An−1 由于递推式的每一项系数都为常数,因此对…...
左右开弓策略思路
一、策略概述 本策略是一种基于多种技术指标的复杂交易策略,包括自定义指标计算、过滤平滑处理以及交易信号生成。 该策略通过不同的交易平台代码段实现,旨在通过分析历史价格数据来预测未来价格走势,并据此生成交易信号。 二、主要技术指标…...
将jar包制作成deb一键安装包
文章目录 准备环境准备deb包结构构建Deb包测试安装常用操作命令 本文介绍如何将java运行环境、jar程序一起打包成一个deb格式的安装包,创建桌面图标,通过点击图标可使用系统自带浏览器快捷访问web服务的URL,同时注册服务并配置好开机自启。 准…...
Java 常用安全框架的 授权模型 对比分析,涵盖 RBAC、ABAC、ACL、基于权限/角色 等模型,结合框架实现方式、适用场景和优缺点进行详细说明
以下是 Java 常用安全框架的 授权模型 对比分析,涵盖 RBAC、ABAC、ACL、基于权限/角色 等模型,结合框架实现方式、适用场景和优缺点进行详细说明: 1. 授权模型类型与定义 模型名称定义特点RBAC(基于角色的访问控制)通…...
aws平台练习
注册 AWS 账户 访问 AWS 官方网站,点击“免费注册”按钮,按照提示完成账户注册: 提供电子邮件地址、密码和电话号码。 验证身份(可能需要手机验证码)。 设置 billing 信息。 2. 登录 AWS 管理控制台 使用注册的邮箱和…...
力扣DAY40-45 | 热100 | 二叉树:直径、层次遍历、有序数组->二叉搜索树、验证二叉搜索树、二叉搜索树中第K小的元素、右视图
前言 简单、中等 √ 好久没更了,感觉二叉树来回就那些。有点变懒要警醒,不能止步于笨方法!! 二叉树的直径 我的题解 遍历每个节点,左节点最大深度右节点最大深度当前节点当前节点为中心的直径。如果左节点深度更大…...
【MYSQL从入门到精通】数据类型及建表
一些基础操作语句 1.使用客户端工具连接数据库服务器:mysql -uroot -p 2.查看所有数据库:show databases; 3.创建属于自己的数据库: create database 数据库名;create database if not exists 数据库名; 强烈建议大家在建立数据库时指定编…...
【动态规划】 深入动态规划—两个数组的dp问题
文章目录 前言例题一、最长公共子序列二、不相交的线三、不同的子序列四、通配符匹配五、交错字符串六、两个字符串的最小ASCII删除和七、最长重复子数组 结语 前言 问题本质 它主要围绕着给定的两个数组展开,旨在通过对这两个数组元素间关系的分析,找出…...
