Mujoco xml < sensor>

< sensor>

  • jointpos
  • jointvel
  • jointactuatorfrc
  • framequat
  • gyro
  • accelerometer
  • framepos
  • framelinvel
  • touch
  • objtype="site" objname="imu" 和site="imu"的区别
  • python中与sensor有关的写法
    • 传感器名字索引第几个id
    • id索引传感器名字
    • 传感器数量
    • sensor中的顺序

jointpos

jointpos 是 MuJoCo 内置传感器类型之一,用于测量关节的位置

对于旋转关节(hinge):输出一个标量,单位为 弧度。(一般情况)
对于滑动关节(slide):输出一个标量, 单位为 米。
对于球关节(ball):输出为四元数 [w, x, y, z]表示的旋转,维度为 4。
对于自由关节(free):输出为 7维(3维位置 + 4维姿态四元数)数据 [x, y, z, qw, qx, qy, qz],表示位置和姿态。

<mujoco><worldbody><body name="link1" pos="0 0 0.5"><joint name="joint1" type="hinge" axis="0 0 1"/><geom type="capsule" size="0.05 0.1"/></body></worldbody><sensor><jointpos name="joint1_pos_sensor" joint="joint1"/></sensor>
</mujoco>
<!-- joint="joint1":指定这个传感器测量 joint1 的位置。 -->
<!-- name="joint1_pos_sensor":这个传感器的名称,可用于在Python中查找 -->

不涉及 site、body、geom、objtype、objname 等其他对象类型,因为它工作于关节级别

jointvel

jointvel 是用于测量 关节速度 的传感器。

输出的是该关节的瞬时速度:
对于 旋转关节(hinge),单位是 弧度/秒。
对于 滑动关节(slide),单位是 米/秒。
对于 球关节(ball),输出的是 3维角速度。
对于 自由关节(free),输出的是 6维(3维线速度 + 3维角速度)。

<mujoco><worldbody><body name="link1" pos="0 0 0.5"><joint name="joint1" type="hinge" axis="0 0 1"/><geom type="capsule" size="0.05 0.1"/></body></worldbody><sensor><jointvel name="joint1_vel_sensor" joint="joint1"/></sensor>
</mujoco>

jointvel 也不会使用 objname、objtype、site,它只针对关节,不针对几何体、site、body等

jointactuatorfrc

jointactuatorfrc 是 MuJoCo 中的一个传感器类型,用于测量 作用在关节上的控制力或控制矩。
这个力/矩 是 驱动器(actuator) 施加在关节上的效果,它只适用于那些与关节相关联的 actuator,如:motor(电机),position,velocity 控制器等。

对于旋转关节(hinge):输出的是 力矩,单位是 牛顿·米(Nm)。
对于滑动关节(slide):输出的是 线性力,单位是 牛顿(N)。
对于多自由度关节(ball、free):每个自由度会有一个相应的力或力矩分量输出。

<mujoco><worldbody><body name="link1" pos="0 0 0.5"><joint name="joint1" type="hinge" axis="0 0 1"/><geom type="capsule" size="0.05 0.1"/></body></worldbody><actuator><motor joint="joint1" ctrlrange="-1 1"/></actuator><sensor><jointactuatorfrc name="joint1_frc_sensor" joint="joint1"/></sensor>
</mujoco>
# 假设仿真过程中 joint1 的驱动器作用力矩为 0.5 Nm
mj_data.sensordata = [0.5]

jointactuatorfrc 仅与关节相关,不依赖 site、body、geom 等对象。所以不会使用 objtype,不会使用objname,不会使用 site。

framequat

framequat 是用于测量某个对象(site、body、geom)的 姿态(方向) 的传感器。
它的输出是该对象当前的姿态,以 四元数 [w, x, y, z] 的形式表示。

framequat 需要指定 测量哪个对象的姿态,所以它必须使用:objtype:对象类型(site、body、geom),objname:对象的名称。不用写joint,不是作用到joint上的。
objtype 值是什么,就测量什么的姿态,比如site,body,geom。

objtype 和 objname 的用途:framequat 必须 指定 哪个对象的姿态。

<mujoco><worldbody><body name="link1" pos="0 0 0.5"><geom type="box" size="0.1 0.1 0.1"/><site name="imu_site" pos="0 0 0.1" size="0.01"/></body></worldbody><sensor><framequat name="imu_quat_sensor" objtype="site" objname="imu_site"/></sensor>
</mujoco>
mj_data.sensordata[start_idx : start_idx+4] = [0.707, 0, 0.707, 0]
# 表示该 site 当前的方向为绕 y 轴旋转 90 度。

gyro

gyro 是 MuJoCo 用于模拟 陀螺仪 的传感器。
它测量的是某个对象的 角速度,即该对象在其局部坐标系下绕 x, y, z 轴 的旋转速度[ωx, ωy, ωz]。单位是 弧度/秒。

gyro 只支持 site,不使用 objtype 和 objname,不能对 body 或 geom 直接测量 gyro(但可以创建 site 附着在 body 或 geom 上)

<mujoco><worldbody><body name="link1" pos="0 0 0.5"><geom type="box" size="0.1 0.1 0.1"/><site name="imu_site" pos="0 0 0.1" size="0.01"/></body></worldbody><sensor><gyro name="imu_gyro_sensor" site="imu_site"/></sensor>
</mujoco>

accelerometer

accelerometer 是 MuJoCo 中用于模拟 加速度计 的传感器。

它测量的是某个对象(通常是 site)在局部坐标系下的 线加速度[ax, ay, az]。这个加速度包含:线性运动的加速度;重力分量(默认是带重力的加速度,除非设置排除)。

accelerometer 不使用 objtype 和 objname。只能通过 site 定位测量点。

<mujoco><worldbody><body name="link1" pos="0 0 0.5"><geom type="box" size="0.1 0.1 0.1"/><site name="imu_site" pos="0 0 0.1" size="0.01"/></body></worldbody><sensor><accelerometer name="imu_acc_sensor" site="imu_site"/></sensor>
</mujoco>
mj_data.sensordata[start_idx : start_idx+3] = [0.0, 0.0, 9.81]

framepos

framepos 是 MuJoCo 用于测量某个对象(site、body、geom)在 世界坐标系 下的 位置 的传感器。它输出的是该对象参考系的 三维平移位置,单位是 米(m)。适用于跟踪某物体的位置,比如 IMU 位置、物体质心位置等。表示该对象(site、body、geom)在 世界坐标系 下的 x, y, z 位置。不能用于不能用于关节joint。
对于body就是测量某个刚体的质心位置。

<mujoco><worldbody><body name="link1" pos="0 0 0.5"><geom type="box" size="0.1 0.1 0.1"/><site name="imu_site" pos="0 0 0.1" size="0.01"/></body></worldbody><sensor><framepos name="imu_pos_sensor" objtype="site" objname="imu_site"/></sensor>
</mujoco>
mj_data.sensordata[start_idx : start_idx+3] = [0.0, 0.0, 0.6]

framelinvel

framelinvel 是 MuJoCo 中用于测量某个对象(site、body、geom)的 线速度 的传感器。
它输出的是该对象在 世界坐标系 下的 线速度分量[vx, vy, vz]。常用于模拟 IMU 中的速度传感器,或者跟踪物体运动状态。

objtype=“site”:指定测量对象类型,可以是 site、body 或 geom。不能用于关节joint

<mujoco><worldbody><body name="link1" pos="0 0 0.5"><geom type="box" size="0.1 0.1 0.1"/><site name="imu_site" pos="0 0 0.1" size="0.01"/></body></worldbody><sensor><framelinvel name="imu_linvel_sensor" objtype="site" objname="imu_site"/></sensor>
</mujoco>
mj_data.sensordata[start_idx : start_idx+3] = [0.1, 0.2, 0.0]

touch

touch 是 MuJoCo 中用于检测 对象是否发生接触 的传感器。
它输出的是一个标量:0 表示当前没有接触;非0 表示有接触发生(输出接触力的模长也就是大小)。

测量某个对象(site、body、geom)在 世界坐标系 下的接触以及接触力的传感器。

<mujoco><worldbody><body name="finger" pos="0 0 0.1"><geom name="finger_geom" type="sphere" size="0.01"/></body><body name="table" pos="0 0 0"><geom name="table_geom" type="box" size="0.2 0.2 0.01"/></body></worldbody><sensor><touch name="finger_touch_sensor" objtype="geom" objname="finger_geom"/></sensor>
</mujoco>
mj_data.sensordata[start_idx] = 5.3
# 表示 finger_geom 正在接触某物体,接触力模长为 5.3 牛顿。

objtype=“site” objname=“imu” 和site="imu"的区别

site是定义一个对象的属性。

site="imu"直接绑定到某个 site 上测量局部数据。是传感器“装在哪儿”测局部值。

objtype=“site” objname="imu"测量某个对象(site/body/geom)的世界坐标下状态。是传感器“测谁”的全局状态。

这也使得一些传感器会使用一个特定写法,比如像机器人质心imu会写objtype=“site” objname="imu"表示全局的方向。机器人的陀螺仪gyro会用site="imu"表示机器人自己的旋转角速度。

python中与sensor有关的写法

传感器名字索引第几个id

# 模型,类型是传感器,传感器名字
sensor_id = mujoco.mj_name2id(mj_model, mujoco.mjtObj.mjOBJ_SENSOR, "imu_gyro_sensor")

id索引传感器名字

sensor_name = mujoco.mj_id2name(self.mj_model, mujoco._enums.mjtObj.mjOBJ_SENSOR, i)
# 得到imu这种

传感器数量

<sensor><accelerometer site="box_site" name="accel_sensor"/><gyro site="box_site" name="gyro_sensor"/>
</sensor>
print("Number of sensors:", model.nsensor)
# Number of sensors: 2

sensor中的顺序

在代码中要找到xml中sensor的数据需要注意xml中传感器的顺序

   <sensor><jointpos name="joint1_pos" joint="joint1" /><jointpos name="joint2_pos" joint="joint2" /><framequat name="imu_quat" objtype="site" objname="imu" /><gyro name="imu_gyro" site="imu" /><accelerometer name="imu_acc" site="imu" /></sensor>
mj_model = mujoco.MjModel.from_xml_path(config.ROBOT_SCENE)
mj_data = mujoco.MjData(mj_model)print("sensordata 内容:", mj_data.sensordata)
输出是一个数组这样,[0.1, 0.2, 0.707, 0, 0.707, 0, 0.01, 0.02, 0.03, 9.8, 0, 0]按索引来是这样的顺序:
sensordata[0] = 0.1    # joint1_pos
sensordata[1] = 0.2    # joint2_pos
sensordata[2] = 0.707  # imu_quat (w)
sensordata[3] = 0.0    # imu_quat (x)
sensordata[4] = 0.707  # imu_quat (y)
sensordata[5] = 0.0    # imu_quat (z)
sensordata[6] = 0.01   # imu_gyro (x)
sensordata[7] = 0.02   # imu_gyro (y)
sensordata[8] = 0.03   # imu_gyro (z)
sensordata[9] = 9.8    # imu_acc (x)
sensordata[10] = 0.0   # imu_acc (y)
sensordata[11] = 0.0   # imu_acc (z)

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

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

相关文章

Python爬虫从入门到实战详细版教程

Python爬虫从入门到实战详细版教程 文章目录 Python爬虫从入门到实战详细版教程书籍大纲与内容概览第一部分:爬虫基础与核心技术1. 第1章:[爬虫概述](https://blog.csdn.net/qq_37360300/article/details/147431708?spm=1001.2014.3001.5501)2. 第2章:HTTP协议与Requests库…

ubuntu--汉字、中文输入

两种输入框架的安装 ibus 链接 (这种方式安装的中文输入法不是很智能&#xff0c;不好用)。 Fcitx 链接这种输入法要好用些。 简体中文检查 fcitx下载和配置 注意&#xff1a;第一次打开fcitx-config-qt或者fcitx configuration可能没有“简体中文”&#xff0c;需要把勾…

Java 数据库性能优化:SQL 查询的 10 个关键点

Java 数据库性能优化&#xff1a;SQL 查询的 10 个关键点 在 Java 开发中&#xff0c;数据库操作是必不可少的一环。然而&#xff0c;随着数据量的增加&#xff0c;数据库性能问题往往会成为系统性能的瓶颈。而 SQL 查询的优化&#xff0c;是提高数据库性能的重要手段。本文将…

Containerd与Docker的相爱相杀:容器运行时选型指南

容器运行时&#xff08;Container Runtime&#xff09;作为云原生基础设施的底层引擎&#xff0c;正从Docker一家独大走向多元化竞争。本文将深入剖析Containerd与Docker的技术血缘、性能差异及选型策略&#xff0c;揭示如何根据场景需求选择最优解。 一、技术血缘&#xff1a;…

计算机组成与体系结构:缓存(Cache)

目录 为什么需要 Cache&#xff1f; &#x1f9f1; Cache 的分层设计 &#x1f539; Level 1 Cache&#xff08;L1 Cache&#xff09;一级缓存 &#x1f539; Level 2 Cache&#xff08;L2 Cache&#xff09;二级缓存 &#x1f539; Level 3 Cache&#xff08;L3 Cache&am…

HTTP测试智能化升级:动态变量管理实战与效能跃迁

在Web应用、API接口测试等领域&#xff0c;测试场景的动态性和复杂性对测试数据的灵活管理提出了极高要求。传统的静态测试数据难以满足多用户并发、参数化请求及响应内容验证等需求。例如&#xff0c;在电商系统性能测试中&#xff0c;若无法动态生成用户ID、订单号或实时提取…

tomcat 的安装与启动

文章目录 tomcat 服务器安装启动本地Tomcat服务器 tomcat 服务器安装 https://tomcat.apache.org/下载 Tomcat 10.0.X 启动本地Tomcat服务器 进入 Tomcat 的 bin

TCP三次握手与四次挥手面试回答版本

面试官&#xff1a;说一下TCP三次握手的过程 参考面试回答&#xff1a; 在第一次握手的时候、客户端会随机生成初始化序号、放到TCP报文头部的序号字段中、同时把SYN标志设置为1 这样就表示SYN报文&#xff08;这里是请求报文&#xff09;。客户端将报文放入 TCP 报文首部的序…

AIGC产品如何平衡用户体验与内容安全?

当ChatGPT能写诗、Sora会拍电影、AI主播24小时带货时&#xff0c;一场关于“AI说什么”的隐形战争&#xff0c;正在算法与监管的夹缝中悄然爆发。 从DeepSeek的冲击到多模态技术的祛魅&#xff0c;AIGC正在重塑内容创作的边界。但同时&#xff0c;诸多质疑也正在发声&#xff…

安卓垂直进度条

package 你的包名;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.MotionEvent; import android…

hackmyvm-airbind

收集信息 arp-scan -l nmap -sS -v 192.168.195.162 访问扫描到的ip&#xff0c;直接跳转到登录页面&#xff0c;利用admin/admin弱口令登录 在settings.php中找到一处文件上传&#xff0c;上传一句话木马&#xff0c;上传成功 反弹shell 上传php-reverse-shell.php 抓包&am…

【Rust 精进之路之第14篇-结构体 Struct】定义、实例化与方法:封装数据与行为

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:超越元组,给数据赋予意义 在之前的学习中,我们了解了 Rust 的基本数据类型(标量)以及两种基础的复合类型:元组 (Tuple) 和数组 (Array)。元组允许我们将不同类型的值组合…

jenkins尾随命令

在访问jenkins的网址后面可以追加命令&#xff0c;比如访问地址是 http://10.20.0.124:8080/&#xff0c;常用的有以下几种方式&#xff1a; 1.关闭Jenkins 只要浏览器输入http://10.20.0.124:8080/exit即可退出&#xff0c;或者http://localhost:8080/exit 2.重启Jenkins …

相机模型--CMOS和CCD的区别

1--CMOS和CCD的工作原理 CCD&#xff08;Charge Coupled Device&#xff0c;电荷耦合器件&#xff09;&#xff1a; 1. 图像通过光电效应在感光单元中转化为电荷&#xff1b; 2. 每个像素上的电荷被依次“耦合”并传输到芯片的角落&#xff0c;通过一个或几个模拟输出放大器输…

二叉树理论基础

二叉树种类 满二叉树&#xff1a;每个非叶子节点都有且只有两个子节点。 和完全二叉树&#xff1a;除了最底层外&#xff0c;其他各层都是满的&#xff1b;最底层的节点都集中在左侧。 二叉搜索树&#xff1a;对于任意节点 u&#xff0c;左子树上所有节 点的值都小于 u.val…

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第九讲)

这一期讲解GUI_guider中的容器控件的使用以及相关函数&#xff0c;容器本质上是具有布局和自动调整大小功能的基本对象 &#xff0c;通常用来装载其他子控件。 打开上一期的项目&#xff0c;在工具栏中选中容器控件拖拽到界面中&#xff0c;具体如图所示&#xff1a; 容器默认…

qt QGroupButton 实现两个QPushButton的互斥

import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QButtonGroup, QVBoxLayoutclass ExampleApp(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):# 创建两个 QPushButtonself.button1 QPushButton("按钮1&quo…

工业物联网的可视化编程革新:Node-RED与边缘计算的深度融合-纵横智控

在工业物联网的演进历程中&#xff0c;可视化编程工具正成为打破技术壁垒的核心力量。Node-RED作为开源的可视化编程平台&#xff0c;通过其独特的拖拽式逻辑构建能力&#xff0c;为设备连接、数据处理与业务逻辑设计提供了全新范式。本文将深入解析Node-RED的技术优势&#xf…

Uniapp:view容器(容器布局)

目录 一、基本概述二、属性说明三、常用布局3.1 横向布局3.2 纵向布局3.3 更多布局3.3.1 纵向布局-自动宽度3.3.2 纵向布局-固定宽度3.3.3 横向布局-自动宽度3.3.4 横向布局-居中3.3.5 横向布局-居右3.3.6 横向布局-平均分布3.3.7 横向布局-两端对齐3.3.8 横向布局-自动填充3.3…

(最新)华为 2026 届校招实习-硬件技术工程师-硬件通用/单板开发—机试题—(共14套)(每套四十题)

&#xff08;最新&#xff09;华为 2026 届校招实习-硬件技术工程师-硬件通用/单板开发—机试题—&#xff08;共14套&#xff09;&#xff08;每套四十题&#xff09; 本套题目为硬件通用题目&#xff0c;适合多个岗位方向&#xff0c;如下 **岗位——硬件技术工程师 岗位意向…