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

實踐中的正動力學、逆動力學與接觸動力學

逆動力學求出跟隨規劃所需的力矩;正動力學在模擬器中預測運動;接觸動力學則是乾淨模型與混亂現實世界相遇之處。

一個方程,兩種讀法

前面幾級搭建起了機器人運動方程:它整齊地記錄了力矩、慣量、運動與重力如何在每個關節上達成平衡。美妙之處在於,這個方程可以從兩個方向去讀,而每個方向都是一件不同且極其有用的工具。一種讀法給出逆動力學,另一種讀法給出正動力學

M(q) * qddot  +  C(q, qdot) * qdot  +  g(q)  =  tau

  M(q)   : mass / inertia matrix  (how heavy each motion feels)
  C(.)   : Coriolis & centrifugal terms (velocity coupling)
  g(q)   : gravity term
  tau    : joint torques the motors must supply

Inverse dynamics:  given q, qdot, qddot  ->  solve for tau
Forward dynamics:  given tau, q, qdot     ->  solve for qddot
同一個方程,要麼解出力矩(逆),要麼解出加速度(正)。

符號 q、qdot、qddot 分別是關節角度、速度與加速度。質量(慣量)矩陣 M、科里奧利與離心項 C 以及重力項 g,正是我們之前認識的三種力的貢獻。下文不過是在講一個故事:你把哪個符號當作已知,又去解出哪個符號。

逆動力學:從規劃到出力

逆動力學回答的是規劃器的問題:「我想讓手臂沿這條路徑運動,帶著這些速度和加速度——此刻每個電機各需輸出多少力矩?」你輸入期望的運動(q、qdot、qddot),方程便交還所需的關節力矩 tau。由於你是把已知數代入右端,這裡並不需要求解逆運算——它是一次直接而快速的計算。

這正是前饋控制背後的引擎。與其等機器人偏離軌道再去糾正——那是反饋控制被動的活兒——逆動力學會*提前*算出這段動作所需的力矩並主動施加。純PID 控制器只能靠對誤差作出反應去對抗重力與慣量;有了前饋項,大部分工作已經完成,反饋只需清理剩下的小誤差。

把這個想法推到極致,就得到計算力矩控制:每個週期裡,控制器都用逆動力學抵消機器人自身的非線性重量與慣量,把一個纏繞在一起的多關節系統,變成行為像簡單、溫順的彈簧—阻尼器那樣的東西。哪怕是最溫和的版本——讓手臂穩穩地抵住自身重量——也不過是目標加速度為零的逆動力學,更常被稱作重力補償

正動力學:從出力到運動

正動力學則把方程反過來跑。這裡你已知力矩——也許正是控制器即將發出的那些——於是你問:「在這些推力下,機器人究竟會如何加速?」解出 qddot 確實需要對質量矩陣 M 求逆,但這是一步成熟的線性代數運算。一旦得到加速度,你就用極小的時間步把它向前積分,得到速度、再得到位置,機器人未來的運動便在眼前徐徐展開。

機器人模擬器做的正是這件事,每秒成千上萬次:取當前狀態與施加的力矩,跑一遍正動力學,讓時間前進一步,再重複。它是每一個數位孿生的跳動心臟——真實機器人的虛擬副本,你可以隨意戳它、撞壞它、反覆訓練它,而不必弄彎一塊金屬。

記住這一對的簡潔辦法:逆動力學問「我需要多大的力?」,住在控制器裡;正動力學問「這個力會帶來什麼?」,住在模擬器裡。二者互為逆運算,而一個好的模擬器與一個好的控制器,其實是同一份物理知識朝相反方向指過去的樣子。

接觸動力學:數學變得棘手之處

迄今為止的一切,都假設機器人在空曠空間中自由運動,力與運動都平滑地變化。可一旦機器人*碰到了什麼*——夾爪抓住零件、腳踩上地面——這份平滑便瞬間破碎。這就是接觸動力學的疆域,也是優雅方程與頑固現實相遇之處。

有三樣東西打破了平滑的圖景。其一是衝擊:腳撞上地板時,速度幾乎瞬間改變,那是一記近乎不連續的猛震,微分方程必須把它吸收掉。其二是摩擦錐:接觸只能推、不能拉,且抵抗側向滑動的能力受摩擦設定的上限所限——於是允許的力住在一個錐體之內,而非整個空間。其三是接觸的通斷:腳要麼接觸、要麼不接觸,一旦切換,方程就在兩套截然不同的狀態之間瞬間翻轉。

這也是為什麼與世界接觸,最好不要用剛硬的位置指令,而要用柔順的指令來處理。一台以阻抗控制去觸碰表面的機器人,表現得像一根可程式化的彈簧,讓接觸力保持溫和而不至於驟然飆升——這是應對接觸所拋來的那些不連續性遠更安全的方式。

陷阱、模擬到現實的鴻溝,以及前沿

動力學的好壞,全繫於其模型,而真實機器人總在合謀破壞模型。每個質量、每個重心、每個摩擦係數都測得不夠完美,於是你算出的 M、C、g 總會有點偏差。更糟的是,真實連桿並非完全剛性:齒輪會撓曲、皮帶會拉伸、諧波減速器會像小彈簧一樣捲繞蓄勁。這種未建模的柔性意味著你下達的力矩與得到的運動,從來不會完全吻合。

摩擦尤其該被點名。教科書裡簡單的關節摩擦是一條平滑曲線,但真實摩擦會先黏住、再驟然打滑,還隨溫度與磨損而改變——出了名地難以建模。把這些通通加起來,你就得到了現實鴻溝:一個在模擬中完美無瑕的控制器或策略,到了真機上卻頻頻踉蹌。彌合它,正是模擬到現實遷移的全部挑戰。

前沿在於,在手推物理與純試錯之間取得折中。習得的動力學模型讓機器人從經驗中擬合出自己的運動方程——包括沒人能乾淨寫下的摩擦與柔性——而世界模型更進一步,學會直接從資料預測動作的後果。最難啃的獎賞當屬富接觸操作:諸如插插頭、扣襯衫鈕扣這類任務,其成敗完全棲身於經典模型最不擅長的那片混亂接觸地帶。這正是動力學研究下一步要去的方向。