第二章 动力学模型入门:牛顿-欧拉方程、拉格朗日动力学、关节空间与任务空间动力学
各位同学,欢迎来到力矩控制策略训练营的第二站。
说实话,动力学模型是很多工程师的拦路虎。我刚入行那会儿,也觉得这东西太抽象,不就是让机器人动起来吗?搞那么复杂干嘛。直到有一次,我在调试一个六轴协作臂的拖动示教功能时,机器人突然在奇异点附近剧烈抖动,差点把末端夹爪甩飞出去。嗯,从那以后,我老老实实把动力学补上了。
今天这一章,我们不讲虚的。直接上干货:牛顿-欧拉方程、拉格朗日动力学,以及关节空间和任务空间到底怎么用。
2.1 为什么需要动力学模型?
运动学只告诉你「关节转多少度,末端到哪」。动力学告诉你「关节需要多大扭矩,才能让末端以期望的加速度运动」。说白了,力矩控制的核心就是动力学逆问题:给定期望的运动轨迹,计算出每个关节该出多少力。
我个人习惯把动力学模型比作「机器人的身体感知」。没有它,你只能靠PID硬扛,遇到高速运动或重负载,系统很容易失稳。
核心要点: 动力学模型是力矩控制的基础。没有准确的模型,前馈补偿就是空谈,阻抗控制、力位混合控制都无从谈起。
2.2 牛顿-欧拉方程:最直观的动力学方法
牛顿-欧拉法,说白了就是「受力分析」。把机器人拆成一个个连杆,每个连杆都做一遍牛顿第二定律和欧拉方程。
牛顿方程(平动部分):
F = m * a
其中 F 是作用在连杆质心上的合力,m 是连杆质量,a 是质心加速度。
欧拉方程(转动部分):
τ = I * α + ω × (I * ω)
τ 是作用在连杆上的合力矩,I 是惯性张量,α 是角加速度,ω 是角速度。注意那个叉乘项,它代表陀螺效应——高速旋转时,这个项会变得非常大。
我在项目中遇到过一个问题:一个SCARA机器人在高速拾取时,末端总是有微小振动。排查了半天,发现是欧拉方程里的陀螺项被忽略了。加上之后,振动立刻消失。所以,千万别偷懒。
牛顿-欧拉递推算法:
实际工程中,我们不会手动去解每个连杆的方程。而是用递推算法:
- 正向递推:从基座到末端,计算每个连杆的速度、加速度
- 反向递推:从末端到基座,计算每个连杆的力和力矩
这个算法计算量小,适合实时控制。我建议你在嵌入式控制器上优先用这个。
我的小技巧: 写牛顿-欧拉代码时,先把每个连杆的坐标系画清楚。坐标系一乱,后面的计算全错。我曾经因为一个旋转矩阵的方向搞反了,调试了整整两天。
2.3 拉格朗日动力学:从能量角度看问题
拉格朗日法跟牛顿-欧拉法完全不同。它不看力,看能量。
拉格朗日函数 L 定义为:
L = T - U
其中 T 是系统总动能,U 是系统总势能。
然后代入拉格朗日方程:
d/dt (∂L/∂q̇) - ∂L/∂q = τ
q 是广义坐标(关节角度),q̇ 是广义速度,τ 是广义力(关节扭矩)。
你想想看,这个方程的好处是什么?它自动消除了内部约束力。你只需要写出系统的动能和势能,然后求偏导就行。对于自由度较少的机器人(比如2-3轴),拉格朗日法非常简洁。
但缺点也很明显:随着自由度增加,表达式会爆炸式增长。我见过一个六轴机器人的拉格朗日方程,写满了三页A4纸。所以,实际工程中,自由度超过4个,我一般推荐用牛顿-欧拉法。
注意: 拉格朗日法推导出的动力学方程,通常写成标准形式:
M(q) * q̈ + C(q, q̇) * q̇ + G(q) = τ
M 是惯性矩阵,C 是科里奥利和离心力矩阵,G 是重力项。这个形式在控制中非常有用,因为你可以分别处理每一项。
2.4 关节空间与任务空间动力学
搞清楚了动力学方程的形式,接下来要回答一个问题:我们在哪个空间里控制?
关节空间动力学:
直接以关节角度 q 为变量。方程就是上面那个标准形式。控制目标:让每个关节跟踪期望的角度轨迹。
- 优点:模型简单,计算量小
- 缺点:末端执行器的运动不直观,需要逆运动学转换
任务空间动力学:
以末端执行器的位姿 x 为变量。动力学方程变为:
Λ(x) * ẍ + μ(x, ẋ) + p(x) = F
Λ 是任务空间惯性矩阵,μ 是任务空间速度相关项,p 是重力项,F 是末端广义力。
我个人习惯在任务空间做阻抗控制。为什么呢?因为你可以直接设定末端的刚度、阻尼,让机器人像弹簧一样响应外力。这在人机协作场景下特别好用。
但任务空间动力学有个坑:当机器人接近奇异位形时,Λ 矩阵会变得病态,很小的末端力就会导致关节扭矩爆炸。我曾经在调试一个打磨机器人时,就因为这个原因烧坏过一个驱动器。所以,一定要加奇异点规避。
两者关系: 关节空间和任务空间可以通过雅可比矩阵 J 相互转换:
τ = J^T * F
ẋ = J * q̇
记住这个关系,它贯穿了整个机器人控制。
2.5 知识体系总览
下面这张图,是我自己总结的动力学模型知识框架。你可以把它当作本章的「地图」。
2.6 实战建议
学完这一章,你可能会问:我到底该用哪种方法?
我的建议是:
- 做实时控制(1kHz以上): 用牛顿-欧拉递推法,计算效率最高
- 做仿真或离线规划: 用拉格朗日法,推导清晰,便于分析
- 做人机协作或力控: 用任务空间动力学,控制更直观
避坑指南: 我曾经在项目里直接用了别人的动力学库,没仔细验证参数。结果机器人空载时表现完美,一抓取重物就开始抖。后来发现是惯性参数标定错了。所以,拿到机器人第一件事:做参数辨识。别偷懒。
好了,这一章就到这里。动力学模型是力矩控制的「内功心法」,练好了,后面的各种控制策略才能发挥威力。下一章我们开始讲具体的力矩控制算法,到时候会大量用到今天的内容。