两种定义方式

1

    <body name="arm_low_l" pos="-.06 0 -.016" quat="0 0 0.707107 0.707107"><joint name="l_elbow" range="-1.3 1.57" type="hinge"/><geom type="cylinder"  size="0.001 0.008"/></body>

2

     <body pos="0 0 2" euler="0 0 0"><joint name="pin" type="hinge" axis = "0 -1 0" pos="0 0 0.5"/><geom type="cylinder" size="0.05 0.5" rgba="0 .9 0 1" mass="1"/></body>

差异:

  1. 到第1种的定义方法,有一个四元数quat=“0 0 0.707107 0.707107”,第2种没有
  2. 到第2种的定义方法,body有euler,子元素joint有axis,pos属性,第1种没有

原因

任何姿态,等效于饶一个特定旋转轴旋转一定角度
—《机器人操作的数学导论》

  1. 第1种的定义方法,是依据上面的理论来的,用一个四元数来表示了旋转轴了,这里的四元数还包含了初始姿态。
  2. 第2种方法,是比较传统的方法,直接先定义一个连杆,然后再定义旋转轴的方向以及所在位置

第二种方法的一些解读

Mujoco中默认的body是垂直方向的,所以如果我们需要建一些水平会其他
形式的body,需要用euler以及axis属性组合起来

    <body name="shoulder_l" pos="0 0.06035 0" euler="0 0 0"><inertial diaginertia="0.0118742 0.00851644 0.00537304" mass="0.013" pos="-0.0135226 0.0102641 0.00139357" quat="0.89853 0.0814684 0.0409894 0.429332"/><joint name="l_shoulder_pitch" range="-2.61799 2.61799" type="hinge" axis="1 0 0" pos="0 0 -0.03" /><geom type="cylinder"  size="0.001 0.03"/></body>

1 euler:定义了下个关节所所在的局部坐标系在本关节的局部坐标系中的姿态

1.1 例子1

axis=“1 0 0”
euler=" 0 0 0",表示子坐标系与父坐标系的姿态相同

1.2 例子2

axis=“1 0 0”
euler=" -1.57 0" 表示子坐标系绕父坐标系的x轴顺时针旋转pi/2

1.3 例子3

axis=“0 0 1”
euler=" -1.57 0"

旋转原先是指向上边的,因为euler的值的影响,变成了指向右面

1.4 例子4

axis=“0 1 0”
euler=" -1.57 0"

旋转原先是指向右边的,因为euler的值的影响,变成了指向下面

2 axis: 定义了本关节绕本局部坐标系的哪个轴旋转

3 pos:定义关节在body中的哪个位置,注意,body的体坐标系是建在body的中间的,所以[0,0,0]就是将关节放在body中间

Mujoco中旋转轴的定义相关推荐

  1. java-在应用中获取spring定义的bean

    因为写了些bean作为quartz的任务用spring配置了,但有些时候需要在别的类中使用这些bean,没有太仔细去研究spring,依稀记得有个getBean,到网上g了一把,发现方法不止一种,选了 ...

  2. 在Java中是如何定义和声明接口的?

    java技术需要学习的内容有很多,本期小编整理的教程资料就是关于"在Java中是如何定义和声明接口的?"的内容,希望下面的介绍能够给大家带来帮助. 如果一个抽象类的所有方法都是抽象 ...

  3. java接口如何定义常量 c_在Java接口中怎样访问定义的常量呢?

    java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能).那么我们在Java接口中怎 ...

  4. GIS中的坐标系定义与转换

    GIS中的坐标系定义与转换 青岛海洋地质研究所 戴勤奋 2002-3-27 14:22:47 ----------------------------------------------------- ...

  5. java android 数组_android中数组的定义与使用

    android中数组的定义 可以直接在JAVA代码中声明,也可以在res->values目录下新建一个xml文件,作为数组资源进行声明 字符数组可以有如下2种声明方式String[]或者是Lis ...

  6. 办公自动化中工作流过程定义的设计与实现

    办公自动化中工作流过程定义的设计与实现 转载于:https://blog.51cto.com/hnoas/105576

  7. Linux内核源码中使用宏定义的若干技巧

    在C中,宏定义的概念虽然简单,但是真要用好却并不那么容易,下面从Linux源码中抽取一些宏定义的使用方法,希望能从中得到点启发: 1. 类型检查 比如module_init的宏定义: 点击(此处)折叠 ...

  8. 博途数据类型wstring怎么用_如何在STEP 7 (TIA 博途)中使用“用户定义数据类型” (UDTS)...

    说明 创建一个 PLC 数据类型,在项目导航中打开" PLC 数据类型"文件夹并双击"添加新数据类型".新创建的 PLC 数据类型将分配一个默认名称.如果想更改 ...

  9. NASM汇编程序中的宏定义

    NASM汇编程序中的宏定义 格式如下: %macro 宏名 参数名列表 宏体 %endmacro 如: %macro Descriptor 3 dw %2 & 0FFFFh dw %1 &am ...

  10. C语言中:在头文件中使用static定义变量意味着什么?

    C语言中:在头文件中使用static定义变量意味着什么? 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const wchar_t* ...

最新文章

  1. transform.Normalize()用法后面参数为什么用(0.5,0.5,0.5)(0.5,0.5,0.5)
  2. Point-to Analysis指针分析(1)
  3. Ceph Upstream 添加 InfiniBand RDMA 互联支持
  4. SQL FOREIGN KEY 约束
  5. Vue面试题汇总目录
  6. 枚举算法:求解不等式
  7. cuda event
  8. nvidia的jetson系列的方案_NVIDIA Jetson 平台
  9. SQL计算两个日期之间的工作天数
  10. 使用redis解决tomcat6在nginx负载下多节点共享session问题
  11. 凭借左程云(左神)的这份 “程序员代码面试指南”我入职了字节
  12. Kettle详细使用教程
  13. 最全的smarty‘总结~耿兴隆老师著作,学子zyf献上
  14. 室内地图制作软件,怎么制作电子地图?
  15. 中值定理5-泰勒中值定理
  16. linux 批量ping检测
  17. u盘插在电脑上灯亮没有反应_u盘插电脑灯在闪但是没反应怎么办
  18. 《大数据机器学习实践探索》 ---- 大数据机器学习:spark mlib 库【简介 与 架构初探】
  19. CentOS7 NVIDIA显卡驱动安装教程(亲测有效)
  20. 在linux系统下运行jar包的命令如下:

热门文章

  1. 递归方式计算一个数的几次方
  2. Windows如何ping端口
  3. 博途V15添加GSD文件
  4. 语音数字信号处理与分析及Matlab实现
  5. ios tableView截长屏图片,第三方分享
  6. 六大场景,看懂声纹识别技术怎样“抗疫防疫” 小快
  7. java jshell_JDK11 | 第二篇 : JShell 工具
  8. PLC、传感器 源型漏型、NPN与PNP之间的关系
  9. 海康录相机如何添加大华摄像头
  10. PMON 启动流程分析