这件事的来源是这样的:结构手动把连杆坐标系下描述的惯性张量数据写入了urdf中,给我到以后发现有问题,给我搞懵了,以为我错了这么多年,于是有了本次的深度调研,先上结论,感兴趣的可以参考后文。
结论:
- URDF文件中inertial的数据是在质心坐标系下描述的!!!
文章目录
- 1. 官方说明
- 2. 论坛
- 3. 通过webots侧面验证
- 4. 通过urdf2webots验证
- 5. 通过matlab验证
- 6. 通过sw2urdf验证
- 7. 实测
1. 官方说明
urdf官方说明:https://wiki.ros.org/urdf/XML/link,原文如下:
This link’s moments of inertia ixx, iyy, izz and products of inertia ixy, ixz, iyz about Co (the link’s center of mass) for the unit vectors Ĉx, Ĉy, Ĉz fixed in the center-of-mass frame C.
18年的时候,笔者实测solidworks使用sw2urdf导出的urdf,其结果与sw中的质心坐标系对应:
2. 论坛
以下几个链接中,也说明是质心坐标系下描述的
- https://answers.ros.org/question/11407/what-is-the-origin-of-the-inertia-tensor-in-urdf/
- https://robotics.stackexchange.com/questions/42406/urdf-link-mass-inertia-properties
- https://answers.ros.org/question/246037/puzzles-about-link-inertia-in-urdf-exported-by-sw2urdf/
3. 通过webots侧面验证
从webots官方看到,webots中的惯性参数是描述在质心坐标系下的,官方说明:https://cyberbotics.com/doc/reference/physics,明确表示惯性矩阵是相对于centerOfMass定义的
笔者以前的测试可以说明这点:
4. 通过urdf2webots验证
从urdf2webots工具包的代码中,发现确实直接读取的是urdf中的ixx等标签,https://github.com/cyberbotics/urdf2webots/blob/master/urdf2webots/parserURDF.py#L509
从此处看,说明urdf中描述的是质心坐标系下的参数
5. 通过matlab验证
将urdf通过importrobot导入matlab的时候,发现rigidBody中的Inertia数据是连杆坐标系下描述的。rigidBody的官方描述如下:
Inertia of rigid body, specified as a [Ixx Iyy Izz Iyz Ixz Ixy] vector relative to the body frame in kilogram square meters. The first three elements of the vector are the diagonal elements of the inertia tensor. The last three elements are the off-diagonal elements of the inertia tensor. (https://ww2.mathworks.cn/help/robotics/ref/rigidbody.html)
6. 通过sw2urdf验证
SW2URDF工具源码:https://github.com/ros/solidworks_urdf_exporter
翻看代码,发现应该是导出的质心坐标系下的数据
7. 实测
实测环境:
● SOLIDWORKS 2022
● SolidWorks To URDF version 1.6.0-4-g7f85cfe