机械臂动力学方程线性化
给大家分享一下,网上没有找到具体推导公式,不喜欢藏着掖着,这是自己推导的,仅供大家参考。有问题欢迎批评指正。
1.问题来源
进行机械臂惯性参数辨识,需将机械臂的动力学方程线性化,及将动力学方程的形式写成力矩等于矩阵与惯性参数乘积的形式,且矩阵Y中不包含机械臂惯性参数,这样可以利用矩阵的广义逆,求解出惯性参数。本文以6R机械臂为例,假设机械臂运动过程中需要的关节力矩
但是由于机械臂惯性参数对应的矩阵Y一般非满秩,一般寻求一组最小的惯性参数集Pr,使得最小惯性参数集的系数矩阵Yr满秩,进而使用广义逆求解。定义矩阵C,使得式1.3成立。
则式1.1可化为:
定义
其中
啰嗦一句,matlab求矩阵的逆,即使系数矩阵不满秩,也可以求,具体用机械臂60个参数去辨识还是用最小惯性参数集去辨识,这也是目前个人比较困惑的问题,我们这有人直接60个参数一起辨识,很多文献上都是最小惯性参数辨识,这两种区别,希望有大佬能够解答解答两者的区别。
2.解决思路
常见的机械臂动力学方程建模形式主要有牛顿欧拉动力学方程和拉格朗日动力学方程两种。由于拉格朗日动力学方程中需要动势对关节角求偏导,个人觉得不太好对动力学方程中进行化简,使用matlab符号运算推导,最后求解出的系数矩阵Y表达式很长,因此改用牛顿欧拉方式推导线性化动力学方程。拉格朗日线性化动力学方程推到过程参考霍伟《机器人动力学与控制》。
线性化动力学方程存在两个主要的问题,一是如何将动力学方程中的惯性参数分离出来;二是方程组的化简。为了分离出惯性参数,获得较为简洁的线性化动力学方程,采用牛顿欧拉形式对动力学方程进行推导,推导过程中的根据自己的思路将部分跟惯性参数无关的变量化简,最后得到推导系数矩阵Y的递推公式。
牛顿欧拉方式推导动力学方程,欧拉公式用于描述物体的转动,通用的形式如下:
传统的欧拉公式相对连杆质心C坐标系建立,即欧拉公式中惯性矩阵I是相对于质心的惯性矩阵
牛顿欧拉推导线性化动力学方程,求解过程主要分为以下几个步骤:
1)求解相邻连杆坐标系的旋转变换矩阵
2)求连杆角速度
3)求连杆角加速度
4)求坐标系原点的加速度
由于上述1)~4)中的运动学参数与机械臂惯性参数无关,且输入关节角
5)求解每个连杆的合力
6)从连杆末端到基座递推求连杆i受到连杆i-1的力
7)将每个关节力矩
3.求解方案
3.1求旋转矩阵
旋转矩阵
3.2求连杆角速度
由于基座不动,所以基座的角速度
其中
由各连杆角速度表达式可知,连杆角速度
3.3求连杆角加速度
由于基座不动,所以连杆0的角加速度
同样由上式知角加速度表达式与惯性参数无关,所以将连杆角加速度的7个量可视为已知量,带入后面的动力学参数的系数矩阵中。
3.4求坐标系原点的加速度
已知基座不动,为将重力g的影响带入动力学方程,需在牛顿欧拉公式中,将基座的加速度设为(这里默认机械臂正装,侧装及倒装对应g的位置可能在x方向或者y方向上,具体跟设立的坐标系有关):
根据式3.6,可以求得每个连杆坐标系的加速度:
3.5逆推求连杆所受的合力
设连杆质心处加速度
由
由式3.9知,连杆受到的合力
(这个式子可以将叉乘写成叉积矩阵的形式,是分离动力学方程很重要的一个式子)
用式3.10改写式3.9:
则整个机械臂所有连杆的惯性参数集P:
将3.11式写成矩阵乘惯性参数的形式:
3.6逆推求连杆合力矩
1)求关节处作用力
对每个连杆列动力学方程,有:
研究连杆i的旋转,设连杆受到的合力矩在坐标系{i}中表示为
(这个式子是第二个线性化动力学方程很重要的式子,将Iw转换成矩阵乘惯性参数的形式)
用式3.20和式3.10将式3.19化简
对连杆i坐标系原点列力矩平衡方程:
即当i=6时,连杆受力
当i=5时:
根据式3.23可知:
同理,对连杆4、3、2、1有:
3.7求系数矩阵Y
由于每个关节处力矩
4.总结
本文将牛顿欧拉公式中的部分跟惯性参数无关的运动学参数作为已知量,去简化动力学方程的推导,最终获得线性化的牛顿欧拉方程。本文简化过程均自我推导,仅供参考。