机器人力控入门——牛顿欧拉法动力学建模

建立机器人的动力学模型是完成力控的基础,常用的动力学模型建模法有拉格朗日法和牛顿-欧拉法,其中牛顿-欧拉采用递推形式,计算更为简便,使用也更为广泛。本文就来介绍下牛顿-欧拉的动力学建模方法,

PS,网上关于动力学建模的参考资料很多,看了一圈还是感觉《机器人学导论 Craig》写的最清楚,建议刚学习的时候还是看这种经典的书籍。下面的公式和图也都是来自《机器人学导论》,后续看书学习的时候也不会陌生。

我的知乎原文:机器人力控入门——牛顿欧拉法动力学建模 - 知乎


外推

理解牛顿-欧拉法建模有两个要点,其中一个是搞清楚连杆之间的速度/加速度传递关系(建立起 ^{i+1}v_{i+1}^iv_i以及 ^{i+1}\omega_{i+1}^i\omega_i的关系),这是后面求解连杆间力/力矩的基础。

首先明确一下定义^iv_i^i\omega_i

这两个变量分别是连杆i的线速度和角速度在坐标系i上表示,如图 1所示,

 只有在同一个坐标系中,速度才能加减,也就是说对于角速度^{i}\omega_{i+1}和线速度^{i}v_{i+1}

看一下公式(1),坐标系 i+1原点处的角速度除了自身的角速度,还包含上一个坐标系 原点处角速度的叠加。这里  表示关节角速度是沿着z轴方向的

公式(2):坐标系 i+1原点处的线速度除了上一个坐标系 原点处的线速度,还包括由于坐标系 旋转带来的线速度。

这两个公式理解没有问题的话,下面的肯定也都能看懂。

对公式(1)和(2)求导,可得:

 这个公式中可能会对这个部分有疑问:

可以参考:旋转矩阵的导数(机器人学)_旋转矩阵求导_cuntou0906的博客-CSDN博客 或者以旋转矩阵的导数为关键词自行搜索。

同理,对原点处的线速度做平移,得到连杆 i质心处 C_i的线速度,因为质心坐标系和连杆坐标系姿态相同,因此: 

对(3)和(4)做坐标变换(乘以一个旋转矩阵),可以得到如下加速度传递关系:


内推

理解牛顿-欧拉法建模的另一个要点是要搞清楚连杆之间力/力矩的传递关系

同样的,先明确下力和力矩的定义,

如图 2所示, f_i表示由连杆  i-1作用在连杆  i上的力,n_i 表示由连杆  i-1作用在连杆  i上的力矩。

 连杆运动所需的力是关于加速度及其质量的函数,计算出每个连杆质心处的线加速度和角加速度之后,运用牛顿-欧拉公式,计算出作用在连杆质心  C_i上的惯性力 ^iF_i和力矩^iN_i  ,由牛顿方程可得:

由欧拉方程可得: 

 ^{C_i}I是连杆 的转动惯量,分析作用在连杆 上的力平衡关系: 

从内推和外推的公式中可以看出动力学模型中有一些变量时恒定不变的,如  这些参数被称为机器人的动力学参数,而后续在机器人平台上实现力控的下一个关键步骤就是要把这些变量辨识出来,这样就可以准确算出伺服系统要提供多大的转矩,从而实现机械臂(连杆)的运动控制。

如果把所有公式都带入到(13)式中展开,把它表示成  的函数,那么就有了拉格朗日形式的动力学方程:

细心的朋友可能会发现这里面没有包含摩擦力矩,在上面牛顿-欧拉递推的过程中,确实是忽略了摩擦的,这可能是因为摩擦力本身模型不确定,单独加到关节上会更加简洁些。在辨识的时候会把摩擦力加上,或者单独辨识摩擦力。拉格朗日形式的动力学方程也会加上摩擦力矩,变成这样的形式

最后再贴一个学习资料sympybotics GitHub - cdsousa/SymPyBotics: [UNMAINTAINED] Symbolic Framework for Modeling and Identification of Robot Dynamics,这是一个用python的开源机器人运动学和动力学的符号推导工具包,可以去里面读读代码,看看人家是怎么实现的,这对理解机器人动力学会有很大帮助。(PS,这个工具包也是后面做辨识必不可少的,可以先阅读了解下) 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
六轴机械臂的动力学建模可以采用牛顿-欧拉法进行求解,具体步骤如下: 1.建立机械臂的运动学模型,包括机械臂的关节角度、关节速度、关节加速度、末端位姿等参数。 2.计算机械臂的质心位置、质心加速度、惯性矩阵、科氏力矩等参数。 3.根据牛顿-欧拉法公式,计算机械臂的广义力和关节加速度之间的关系。 4.编写MATLAB程序,基于所得到的机械臂动力学模型和求解公式进行数值求解,得到机械臂的关节加速度。 以下是MATLAB程序实现部分: ``` % 机械臂动力学参数 m = [0.5 1.2 0.8 0.7 0.5 0.3]; % 每个关节的质量 Ixx = [0.03 0.08 0.05 0.04 0.02 0.01]; % 每个关节的惯性矩 Iyy = [0.04 0.09 0.06 0.05 0.03 0.02]; Izz = [0.02 0.05 0.03 0.03 0.02 0.01]; l = [0.2 0.3 0.4 0.3 0.2 0.1]; % 每个关节的长度 g = 9.8; % 重力加速度 % 机械臂状态量 q = [0 0 0 0 0 0]; % 关节角度 qd = [0 0 0 0 0 0]; % 关节速度 qdd = [0 0 0 0 0 0]; % 关节加速度 % 计算机械臂的运动学参数 T = eye(4); for i = 1:6 DH(i,:) = [0 l(i) 0 q(i)]; T = T * DH2T(DH(i,:)); p(:,i) = T(1:3,4); z(:,i) = T(1:3,3); end Jv = zeros(3,6); Jw = zeros(3,6); for i = 1:6 Jv(:,i) = cross(z(:,i),p(:,6)-p(:,i)); Jw(:,i) = z(:,i); end J = [Jv; Jw]; % 计算机械臂的动力学参数 for i = 1:6 I(:,:,i) = [Ixx(i) 0 0; 0 Iyy(i) 0; 0 0 Izz(i)]; r(:,i) = p(:,i)-p(:,6); r_cross = [0 -r(3,i) r(2,i); r(3,i) 0 -r(1,i); -r(2,i) r(1,i) 0]; I_hat(:,:,i) = I(:,:,i) + m(i)*(r_cross*r_cross'); I_inv(:,:,i) = inv(I_hat(:,:,i)); f(:,i) = m(i)*Jv(:,i); n(:,i) = I(:,:,i)*Jw(:,i) + cross(Jw(:,i),I(:,:,i)*Jw(:,i)); end % 计算机械臂的动力学方程 M = zeros(6,6); C = zeros(6,1); G = zeros(6,1); for i = 1:6 M = M + J(:,i)'*I_inv(:,:,i)*J(:,i); C = C + (J(:,i)'*I_inv(:,:,i)*n(:,i)-J(:,i)'*I_inv(:,:,i)*J(:,i)*qd')'; G = G + m(i)*g*r(3,i)*Jv(:,i); end tau = M*qdd' + C + G; ``` 其中,DH2T函数用于计算机械臂的变换矩阵,可自行编写或使用MATLAB Robotics Toolbox中的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值