JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

通向同一方程的两条路:拉格朗日与牛顿–欧拉

能量记账法,还是逐力分析法——两种经典方法推导出相同的动力学,而递归形式才是真实机器人实际计算的方式。

从两个起点抵达同一终点

假设你想求出机器人运动方程——这个公式告诉你:在已知各关节的位置和运动速度时,每个电机究竟需要产生多大的关节力矩。推导它有两种著名的方法。第一种是拉格朗日方法,像会计的做法:追踪机器人的能量,再让微积分把答案交给你。第二种是牛顿–欧拉方法,像工程师的做法:沿着机构逐杆推进,一路平衡每一个力和每一个力矩。

本课值得一学的惊喜在于:两条路最终抵达的是*完全相同*的方程。不是相似,而是逐项相同。两种方法在搭建过程中感觉截然不同,但物理迫使它们一致——因为它们描述的本就是同一台机器、遵循同一组定律。掌握两者,既能互相校验你的推导,也能培养出该用哪种工具的直觉。

第一条路:拉格朗日,能量会计

拉格朗日方法一开始完全不理会力,只盯着能量。你写下两个标量:动能(运动着的连杆中储存了多少运动)和势能(重力作用在被抬高的质量上储存了多少)。拉格朗日量就是二者之差,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),而这正是生产级控制器真正用来做逆动力学的方法:给定期望的关节位置、速度与加速度,精确算出所需的力矩。

  1. 外向遍历(底座 → 末端):从固定的底座出发,沿链条逐杆向上传递速度与加速度,让每根连杆都知道自己如何运动、如何加速。
  2. 用牛顿定律和欧拉定律,结合每根连杆的质量与惯量张量,由其运动算出作用在它身上的力与力矩。
  3. 内向遍历(末端 → 底座):从末端执行器出发,沿链条向下回传,逐级累加力与力矩,让每个关节都汇集到其外侧连杆施加于它的全部载荷。
  4. 把每个关节所受的合力与合力矩投影到它的运动轴上,便读出所需的驱动力矩——整套计算量与关节数成线性关系,即 O(n)。

正是这种"两趟扫描"的结构让递归形式如此之快:每根连杆只被访问固定的次数,关节数翻倍也只让运算量翻倍。同一套机制还支撑着正动力学(由给定力矩预测运动,用于仿真器内部),并为诸如计算力矩控制这类基于模型的控制器提供输入。