Mujoco代码解读笔记

知识点:

1、关于yaml

python:yaml模块
一、yaml文件介绍
YAML是一种简洁的非标记语言。其以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁。

  1. yaml文件规则
    基本规则:
    大小写敏感
    使用缩进表示层级关系
    缩进时不允许使用Tab键,只允许使用空格。
    缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
    使用#表示注释
    字符串可以不用引号标注

  2. yaml文件数据结构

    对象:键值对的集合(简称 "映射或字典")
    键值对用冒号 “:” 结构表示,冒号与值之间需用空格分隔
    数组:一组按序排列的值(简称 "序列或列表")
    数组前加有 “-” 符号,符号与值之间需用空格分隔
    纯量(scalars):单个的、不可再分的值(如:字符串、bool值、整数、浮点数、时间、日期、null等)
    None值可用null可 ~ 表示

二、安装yaml

pip命令: pip install PyYaml
引入:import yaml
用python读取yaml文件如下:

代码:
import yaml
from Common.dir_config import *

2、关于Mujoco

在MuJoCo中,模型是使用XML文件定义的,这些文件要么是以物理引擎的原生MJCF格式编写的,要么是以更著名的URDF格式编写的。MJCF模型可以代表具有广泛特征和模型元素的复杂动态系统,MJCF建模语言可以被认为是建模格式和编程语言之间的混合。在编译时,以MJCF或URDF格式表示的纯文本XML文件被编译成一个低级MJCF模型,用于模拟和计算。
MuJoCo提供了建模柔体的可能性。软体被建模为复合物体,由一组刚体组成。根据需要建模的柔体类型,可以将刚体集合组织为一维、二维或三维网格。复合物体本质上是一个由刚体组成的粒子系统。但是,可以通过模拟柔性对象的方式约束粒子一起移动。


image.png

软3D对象特别有趣,因为它们可以用来模拟人体躯干。软3D对象的示例如图2.3所示。在这里,粒子沿着外壳形成网格,与密集的3D网格相比,有效地减少了建模3D对象所需的粒子数量。为了模拟柔性对象的柔软度,每个粒子都有一个远离网格中心的滑动关节。这些关节允许软物体的表面在任何点压缩和膨胀。为了使软对象在变形后保持其形状,并使变形本身平滑,关节都被平等地约束到其初始位置和相邻关节。最后,为了保持对象的体积,所有关节位移的总和应该是常数。

MuJoCo使用软接触模型。这类模型通常用于模拟软手指和刚性物体之间的接触,允许手指在接触点施加相对于法线的附加扭矩。

Mujoco的接触模型与标准LCP(线性互补问题)接触模型的不同之处在于,它完全放弃了互补约束。互补约束规定,接触法向上的力和速度不能同时为正,这是LCP公式的一个重要部分。移除约束将LCP模型转换为凸模型。因此,MuJoCo的接触模型可以看作是凸的。

基于所有物理材料在现实中都允许一些变形的观点,消除了互补性约束,基本上使所有类型的物理接触变软。对于软接触,必须排除互补约束:当存在穿透且材料推动接触体零件时,法向力和速度均为正。因此,当假设现实世界中的所有触点都是软触点时,该约束会对模拟施加不现实的限制。

接触模型进一步基于点接触。接触点在几何上由两个接触刚体和以该点为中心的空间框架之间的点定义。接触体和空间框架之间的点都用全局坐标表示。这个-空间框架的轴指向接触法线方向,而其余两个轴跨越切线平面。当两个物体分开时,接触距离定义为正,当它们接触时为零,当它们穿透时为负。接触点位于沿法向轴的两个表面之间的中间。

3、Robosuite相关

仿真模型由任务对象定义,任务对象封装了机器人仿真的三个关键组成部分。这些组件包括机器人模型、对象模型和环境场景arena。因此,一项任务可以由一个或多个机器人组成,而不是由多个物体和一个arena场组成。机器人模型由机器人模型和相应抓取器模型组成,两者都指定为XML文件。对象模型可以从XML文件加载,也可以通过编程API按程序生成。机器人的工作空间在竞技场中定义。竞技场包括环境装置及其放置,例如带有位置和方向的桌面。任务类将机器人模型、对象模型和竞技场组合成一个XML对象,该对象由MuJoCo的MJCF建模语言指定。


Image From 仿真框架论文.png

你可能感兴趣的:(Mujoco代码解读笔记)