从两个起点抵达同一终点
假设你想求出机器人运动方程——这个公式告诉你:在已知各关节的位置和运动速度时,每个电机究竟需要产生多大的关节力矩。推导它有两种著名的方法。第一种是拉格朗日方法,像会计的做法:追踪机器人的能量,再让微积分把答案交给你。第二种是牛顿–欧拉方法,像工程师的做法:沿着机构逐杆推进,一路平衡每一个力和每一个力矩。
本课值得一学的惊喜在于:两条路最终抵达的是*完全相同*的方程。不是相似,而是逐项相同。两种方法在搭建过程中感觉截然不同,但物理迫使它们一致——因为它们描述的本就是同一台机器、遵循同一组定律。掌握两者,既能互相校验你的推导,也能培养出该用哪种工具的直觉。
第一条路:拉格朗日,能量会计
拉格朗日方法一开始完全不理会力,只盯着能量。你写下两个标量:动能(运动着的连杆中储存了多少运动)和势能(重力作用在被抬高的质量上储存了多少)。拉格朗日量就是二者之差,L = T − V——动能减势能。
然后你"摇动曲柄":把 L 代入欧拉–拉格朗日方程,把那些导数一路算完。从另一端,几乎像变魔术一样,掉出来的正是精确的力矩。它的妙处在于能量是个标量——它不在乎坐标轴,也不在乎参考系朝哪个方向——所以你完全不必画受力图,也不必追着某个矢量满空间跑。代价是抽象:你是在对一个能量表达式求导,在代数算完之前,往往很难看清每一项背后对应的物理力。
L = T(q, q̇) − V(q) # Lagrangian: kinetic minus potential d/dt ( ∂L/∂q̇ ) − ∂L/∂q = τ # Euler–Lagrange: turn the crank → torques τ
第二条路:牛顿–欧拉,逐力记账
牛顿–欧拉路线一刻也不肯离开物理世界。它对每一根连杆都施加两条定律:牛顿定律(合力等于质量乘以连杆质心的加速度)和欧拉定律(合力矩等于角动量的变化率,这里要用到连杆的惯量张量)。每根连杆两个方程,老老实实用矢量写出来。
麻烦在于连杆之间是耦合的:手推前臂,前臂推上臂,一直传到底座——而重力与惯性又同时作用在每一段上。所以你无法孤立地解某一根连杆,而必须逐杆、逐参考系地把相邻连杆之间传递的力与动量记清楚。它具体而物理透明——你能指着每一项说出它*究竟是什么*——但也琐碎,一个贴错的参考系或一个写反的正负号,就会悄无声息地把后续一切都污染掉。
机器人真正运行的:递归算法
若是天真地先搭出完整的符号方程、再代入数字,所需的运算量增长得比关节数还快——慢到无法在真实机械臂上每秒运行上千次。解决之道是递归牛顿–欧拉算法(RNEA),而这正是生产级控制器真正用来做逆动力学的方法:给定期望的关节位置、速度与加速度,精确算出所需的力矩。
- 外向遍历(底座 → 末端):从固定的底座出发,沿链条逐杆向上传递速度与加速度,让每根连杆都知道自己如何运动、如何加速。
- 用牛顿定律和欧拉定律,结合每根连杆的质量与惯量张量,由其运动算出作用在它身上的力与力矩。
- 内向遍历(末端 → 底座):从末端执行器出发,沿链条向下回传,逐级累加力与力矩,让每个关节都汇集到其外侧连杆施加于它的全部载荷。
- 把每个关节所受的合力与合力矩投影到它的运动轴上,便读出所需的驱动力矩——整套计算量与关节数成线性关系,即 O(n)。
正是这种"两趟扫描"的结构让递归形式如此之快:每根连杆只被访问固定的次数,关节数翻倍也只让运算量翻倍。同一套机制还支撑着正动力学(由给定力矩预测运动,用于仿真器内部),并为诸如计算力矩控制这类基于模型的控制器提供输入。