從兩個起點抵達同一終點
假設你想求出機器人運動方程——這個公式告訴你:在已知各關節的位置和運動速度時,每個電機究竟需要產生多大的關節力矩。推導它有兩種著名的方法。第一種是拉格朗日方法,像會計的做法:追蹤機器人的能量,再讓微積分把答案交給你。第二種是牛頓–歐拉方法,像工程師的做法:沿著機構逐桿推進,一路平衡每一個力和每一個力矩。
本課值得一學的驚喜在於:兩條路最終抵達的是*完全相同*的方程。不是相似,而是逐項相同。兩種方法在搭建過程中感覺截然不同,但物理迫使它們一致——因為它們描述的本就是同一台機器、遵循同一組定律。掌握兩者,既能互相校驗你的推導,也能培養出該用哪種工具的直覺。
第一條路:拉格朗日,能量會計
拉格朗日方法一開始完全不理會力,只盯著能量。你寫下兩個純量:動能(運動著的連桿中儲存了多少運動)和勢能(重力作用在被抬高的質量上儲存了多少)。拉格朗日量就是二者之差,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)。
正是這種「兩趟掃描」的結構讓遞迴形式如此之快:每根連桿只被訪問固定的次數,關節數翻倍也只讓運算量翻倍。同一套機制還支撐著正動力學(由給定力矩預測運動,用於模擬器內部),並為諸如計算力矩控制這類基於模型的控制器提供輸入。