掌握URDF中的惯性张量:从SolidWorks到强化学习机器人的关键一步

前言:

1.用强化学习控制自己的机器人,不论哪个仿真环境都要导入URDF,需要描述机器人关节的惯性张量,这个东西如何理解

2.solidworks中的质量属性可以导出惯性张量,这里由重心决定,由输出坐标系决定,该选择哪个,它说的正张量计数法又是什么,我们直接用solidworks测试

3.有人提到要在solidworks里面导出的加负号,为什么

参考:

https://en.wikipedia.org/wiki/Moment_of_inertia#Motion_in_space_of_a_rigid_body,_and_the_inertia_matrix

urdf/XML/link - ROS Wiki

CaptainChen:转动惯量、惯性张量、转动动能的推导


文章来源 知乎:Winter

掌握URDF中的惯性张量:从SolidWorks到强化学习机器人的关键一步


正文:

惯性张量可以简单理解为描述物体如何抵抗旋转的“度量”。就像质量告诉我们物体有多难推动一样,惯性张量告诉我们物体围绕不同轴旋转时有多难改变其旋转状态。

具体来说,它是一个矩阵,包含了物体的质量是如何分布的信息。这个矩阵决定了当你试图让物体绕某个轴旋转时,物体会如何响应。如果质量更多地分布在远离旋转轴的地方,那么改变它的旋转速度就会更困难,这通过惯性张量中的数值大小来体现。

1.1 移动应该是相对好理解的,就对照着移动里面的质量就行

  • 前提是什么(移动、固定轴转动、固定点转动)
  • 已知什么(质量、质量分布、线速度、角速度)
  • 能得到什么(加速度,力矩、动能、角动量、旋转动能)

三个(一会将会从这三个方面分别推导得到转动惯量,你只需要找自己最喜欢的一个方向推导得到就行)

1.2先搞定转动惯量

为什么要 转动惯量 这么个东西,我们知道平移刚体的动量 mv=p,只要这个物体有速度质量,那就有动量,那一个物体旋转的角动量怎么算,(这里公式截图自b站up:https://www.bilibili.com/video/BV1P6KKeaE3D/?spm_id_from=333.337.search-card.all.click&vd_source=6e590a696158991c67b5930a67d572c3

离散的你好算,大不了一个个加,我要是一个圆盘你怎么办,这里最主要就是刚体旋转的时候,上面每个粒子线速度不一样,但角速度是一样的,所以把线速度换成角速度,就导出这个转动惯量

1.3 不绕固定轴,绕固定点

那你绕着一个固定轴简单,不是顺着就是逆着,角速度w就是一个标量,我现在这个刚体绕着一个固定点转动,现在w是一个三维向量,这个刚体既绕着x,还绕y,还绕z,这种情况复杂多了,我还要能找到一个物理量,像这个转动惯量一样,我知道它,知道角速度,就要知道角动量

反正J就是一个质量,从这几个都能推导,喜欢哪个看哪个,哪个简单看哪个

从角动量导出:来源wiki百科

从旋转动能导出:来源Wiki百科

1.4例子:

看完推导,其实这个惯性张量就是一个矩阵映射,它在物理意义上起的就是质量的作用,只不过是在旋转(绕着固定轴 或者 固定点)为了更好的理解这个映射map,我关心动力学,也就是有了这个惯性张量,我需要这个刚体有一定的角加速度,应该怎么施加力矩

这个物理模型是两个小球,质量为1,空间中的位置在图上,都是绕着原点转动,你如果按照转动惯量思维绕着x轴转,那距离x轴一样近,那需要同样的角加速度,施加的力矩是一样的,但是用惯性张量计算,

(这里两个小球,应该乘2,我没乘),第二个模型施加的力矩是(2,0,0),没问题,第一个模型需要(2,-1,-1),我明明是需要x轴的1的角加速度,为什么y轴,z轴还要施加力矩,其实就是这里是固定点的,你得需要y轴,z轴的力矩维持对应的角加速度为0,不然你只施加x轴力矩,结果就是:因为离心力(如下图所示),拉着球,然后多产生了一个f1,这里的f2确实绕着x轴转动,但是f1就不是让刚体只绕着x轴转动了

换句话说,这个矩阵应该这么看,第一列就是为了维持x轴单位角加速度需要的力矩,第一个元素就是单纯的距离 x轴距离的平方,和转动惯量一样的r^2嘛,第二三个元素就是为了弥补这里是固定点转动,但你要的y,z轴不需要角加速度所补偿的力矩,

在物理模型中就是(看下图):你按照固定轴来计算就是用转动惯量,r2^2+r3^2, 但这个球肯定因为离心往红色箭头运行,形成力矩,所以轴那里就会有黄色的力来形成力矩使得只是绕着固定轴运动,所以要想结构受力好,绕着x轴运动,x轴的坐标就要尽量小,0的时候就没有这个力矩了

1.5性质:

这个惯性张量严重依赖选择的坐标系,坐标系不同,肯定不一样,要是这个坐标系运动呢?平移+旋转,依然可以方便的计算惯性张量

2.用简单对称的形状在solidworks进行测试

2.1惯性主轴和惯性主力矩

先看这个惯性主轴和惯性主力矩(注意红框的坐标系:)其实它就是用到了 1.5性质求解这个惯性主轴以及对应的转动惯量,那它的坐标系是什么样子:这里说的很清楚,原点就是放在重心,那坐标系方向呢?就是使得除对角线外都是0的方向,就是粉色的坐标系,这个是固定死的,只不过我们选择输出的坐标系不同,它就会在你选择的坐标系描述这个粉色的坐标系的方向,但它相对这个物体一直不动的

这个粉色的还是不动,原点就在重心,方向也不动,只不过现在它的方向是在我们选定的坐标系4里面表示的,x轴正好在坐标系4的x轴反方向,所以是(-1,0,0),y轴z轴同理

2.2 惯性张量

现在开始关心这个惯性张量(由重心决定和由输出坐标系决定):

1.由重心决定,对齐输出坐标系就是 它把坐标系原点放在重心上,方向对齐你选择的坐标系

2.完全由输出坐标系决定:就是坐标系原点不一定在重心上,而是你选择的坐标系原点,方向也是你选择的坐标系原点,

所以如果你选择的坐标系就放在重心,他俩就是一样的,如果你没有放在重心,他俩就不一样(因为原点不一样了)

因为这两个坐标系相对的方向对齐,但原点不一样,一个在重心,一个在我选定的坐标系原点

2.3 解释这个正张量计数法:

在引入wiki的解释:

有一些 CAD 和 CAE 应用程序,例如 SolidWorks、Unigraphics NX/Siemens NX 和 MSC Adams,它们对惯性积使用替代约定。根据此约定,从惯性公式的乘积中删除减号,而是插入到惯性矩阵中,

我们再来看看solidworks计算,这里按照惯性张量公式是 -Xy,我们刚体在坐标系3下发现所有的x,y都是正的,所以算出来-xy肯定是负数, solidworks这里是正数所以它把负号删了

2.4 URDF需要什么样的惯性张量

那么最后一个问题:你的机器人URDF文件里面的要的是什么配置:这个在urdf文件描述上找到

https://wiki.ros.org/urdf/XML/link

从这个文件可以看到关键信息

1.惯性张量要的是相对重心的,所以在solidworks要选择第二个,也就是这个坐标系原点在重心,那这个坐标系的方向呢?它这里讲:不需要与惯性主轴对齐,当然也就是任意,不过这样就出现了非对角线元素非0,这里就考虑要正张量还是负张量,这里 URDF假定惯性约定为负乘积,也就是说要在solidworks导出的非对角线加负号

(注意是加一个负号,并不是有负号就行,就算是正张量计数,非对角线也可能负数)

不过它这里更加推荐你的坐标系就直接和惯性主轴对齐,这样非对角线直接就是0,没有这些讲究,对齐的方向就通过RPY表现,就是画红线这里

总结

  1. 理解了惯性张量
  2. 知道了solidworks导出质量属性那里的含义
  3. 知道了URDF要的是负张量计数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值