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.pswp.cn/news/900749.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900749.shtml
英文地址,請注明出處:http://en.pswp.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. 直觀理解&…