首页 > 其他分享 >MuJoCo解析之 mjData

MuJoCo解析之 mjData

时间:2024-08-29 18:14:17浏览次数:9  
标签:mjData 解析 碰撞 mjContact dist mjtNum MuJoCo

在 MuJoCo 中,mjData 用于存放仿真数据,即给定模型后,当前的状态数据。比如,各个对象的位置、各关节的角度、碰撞信息等等。下面,详细解析 mjData 中各个变量的含义。


1. mjContact

mjContact 是表示碰撞结果的类,其定义如下:

struct mjContact_ {                // result of collision detection functions
  // contact parameters set by near-phase collision function
  mjtNum  dist;                    // distance between nearest points; neg: penetration
  mjtNum  pos[3];                  // position of contact point: midpoint between geoms
  mjtNum  frame[9];                // normal is in [0-2], points from geom[0] to geom[1]

  // contact parameters set by mj_collideGeoms
  mjtNum  includemargin;           // include if dist<includemargin=margin-gap
  mjtNum  friction[5];             // tangent1, 2, spin, roll1, 2
  mjtNum  solref[mjNREF];          // constraint solver reference, normal direction
  mjtNum  solreffriction[mjNREF];  // constraint solver reference, friction directions
  mjtNum  solimp[mjNIMP];          // constraint solver impedance

  // internal storage used by solver
  mjtNum  mu;                      // friction of regularized cone, set by mj_makeConstraint
  mjtNum  H[36];                   // cone Hessian, set by mj_constraintUpdate

  // contact descriptors set by mj_collideXXX
  int     dim;                     // contact space dimensionality: 1, 3, 4 or 6
  int     geom1;                   // id of geom 1; deprecated, use geom[0]
  int     geom2;                   // id of geom 2; deprecated, use geom[1]
  int     geom[2];                 // geom ids; -1 for flex
  int     flex[2];                 // flex ids; -1 for geom
  int     elem[2];                 // element ids; -1 for geom or flex vertex
  int     vert[2];                 // vertex ids;  -1 for geom or flex element

  // flag set by mj_setContact or mj_instantiateContact
  int     exclude;                 // 0: include, 1: in gap, 2: fused, 3: no dofs

  // address computed by mj_instantiateContact
  int     efc_address;             // address in efc; -1: not included
};
typedef struct mjContact_ mjContact;

其中,dist 是碰撞深度/距离,即 A、B 两物体之间最近的距离;pos[3] 是碰撞点,是 A、B 两物体相交处的中点;frame[9] 则依次存放了法向量,A 上的碰撞点,B 上的碰撞点。这部分信息的示意图如下:
(待补充)

标签:mjData,解析,碰撞,mjContact,dist,mjtNum,MuJoCo
From: https://www.cnblogs.com/wghou09/p/18387359

相关文章

  • HTTPS证书一年费用是多少?价格全解析
    HTTPS证书作为保障数据传输安全的关键工具,其重要性日益凸显。本文将深入探讨HTTPS证书的作用、类型以及价格因素,帮助读者了解如何为网站选择合适的安全证书。HTTPS证书的作用HTTPS证书的核心作用是通过加密技术保护网站与用户之间的数据传输,防止数据在传输过程中被截获或篡改。这不......
  • leetcode_128_最长连续序列解析
    题目给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入......
  • leecode_049_字母异位词分组解析
    题目给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。示例1:输入:strs=["eat","tea","tan","ate","nat","bat"]输出:[["bat"],["nat","tan"],[&......
  • Dapper传递参数对象时,只支持属性,无法解析字段(出现Parameter '?id' must be defined)
    有的时候使用Dapper执行数据操作时,我们会把模型对象直接作为参数传递进去,但是需要在注意的是!Dapper解析数据是根据属性进行解析的,如果传递的类中使用字段赋值,就会报错 Parameter'?xxx'mustbedefinedclassAAA{publicintID{get;set;}......
  • Android开发 - Serializable 接口对对象进行“打包”传递和接收后“解包”解析
    Serializable是什么Serializable是一种接口,用于将对象转换成字节流。通俗地说,Serializable是一种让对象能够“打包”和“解包”的方式,使得它们可以在存储和传输时保留其状态和数据Serializable的好处在程序中,我们经常需要在不同地方传递数据,比如在两个Activity之间传......
  • Android开发 - “序列化”与“反序列化”解析
    简介序列化和反序列化是计算机科学中两个非常常用的概念。简单来说,它们是将数据转换成不同形式的过程序列化(Serialization)序列化是将对象(比如一个Java对象或一个Python字典)转换成一种可以保存或传输的格式的过程。这种格式通常是字节流或字符串。通过序列化,你可以将一个......
  • 【性能优化】:设计模式与技术方案解析(二)
    引言在【性能优化】:探索系统瓶颈的根源(一)文章中,我们已经分析了手动结算的弊端和瓶颈,本文来分析下怎么优化系统性能。需求分析既然手动结算耗时费力易出错,那么能不能开发一个**程序自动化处理**呢?如果要开发一个自动化跑批的程序,核心功能点是什么呢?第一:需要能正常运行;......
  • 非结构化文档解析
    参考:RAG效果优化:高质量文档解析详解知识库RAG的核心之一就是知识库的离线存储,如何将非结构化文档存储是非常重要的。PDF和Word文件结构word文件解析pdf文件解析Papermage介绍总结阿里云上的文件解析方法示例准确率参考......
  • Android开发 - Parcel 类打包对象数据进行传递解析
    Parcel是什么Parcel是用于对象序列化和反序列化的一个类。通俗地说,它是一种轻量级的容器,常用于打包对象的数据(如基本类型和其他Parcelable对象),使它们能够在不同的组件(如Activity、Service等)之间传递Parcel的主要作用不同的组件(如Activity、Service)之间需要传递数据。......
  • Android开发 - Parcelable 接口实现不同组件之间传递数据解析
    什么是ParcelableParcelable是用于对象序列化的一种接口。通俗来讲,Parcelable允许将一个对象转化为一个字节流,这样你就可以将这个对象在不同的组件之间(如Activity、Service等)进行传递为什么需要Parcelable组件之间通信时(比如在两个Activity之间传递数据),传递的对象必......