為什麼波士頓動力的人形機器人能完成跑酷、後空翻等高難度動作?為什麼有時候它會翻車?工程師從中總結的經驗、教訓都在這裡了。
今年 4 月,著名機器人公司波士頓動力跟全世界開了一個玩笑,先是官宣人形機器人 Atlas 退役,狠狠來了一波回憶殺。
退役的 Atlas。
緊接著,就在第二天,他們又放出了一個新的人形機器人影片。新機器人也叫 Atlas,不過由原來的液壓改為了電動,身材更為小巧、靈活。
此時,外界才反應過來,原來波士頓動力並不是要放棄人形機器人,而是轉變了研發方向,讓機器人更加適應工業環境。該公司表示,這個電動版的 Atlas 將於明年初在韓國現代汽車工廠裡開始進行試點測試,並會在幾年後全面投產。
自公佈後,這個機器人鮮少露面。直到最近,在機器人頂會 RSS 的一場技術分享上,大家才知道,原來新的 Atlas 已經進化到可以做俯臥撐、倒立行走的地步了。
這個技術分享來自波士頓動力機器人工程師 Robin Deits。他是 MIT 博士,2018 年至今一直在波士頓動力工作,研究 Atlas 人形機器人的控制。
個人主頁:http://robindeits.com
在分享中,他介紹了 Atlas 機器人過去幾年的研發歷程,以及從中學到的經驗、教訓,對機器人行業從業者可能很有啟發。機器之心將在這篇文章中進行系統梳理。
影片連結:https://www.youtube.com/watch?v=aQi6QxMKxQM
Atlas 控制器的核心 ——MPC
在演講開頭,Robin Deits 首先介紹了波士頓動力這家公司。
波士頓動力現在是韓國現代汽車公司旗下的人形機器人公司,員工大概有八九百人,其代表性的機器人有 Spot(機器狗)、Stretch(倉庫搬運機器人)和 Atlas(人形機器人)。目前,Atlas 主要還是一個研發平臺,波士頓動力正慢慢將其轉化為產品。
接下來,Robin Deits 介紹了他們如何將 MPC 用於 Atlas,包括怎麼用、遇到了哪些挑戰、還有哪些問題沒有解決等。
MPC 指的是 Model Predictive Control(模型預測控制),這是一種高階控制策略,透過使用數學模型來預測系統在未來一段時間內的行為,然後最佳化控制輸入,以實現系統效能的最佳化。MPC 的一個關鍵優勢是它能夠處理多變數系統,並且可以顯式地考慮約束條件(例如輸入和狀態的限制)。在機器人領域,MPC 通常用於路徑規劃、運動控制、姿態控制等任務中,因為它能在動態和複雜的環境下提供魯棒的控制解決方案。
Robin Deits 表示,他們從 2019 年以來實現的所有機器人動作都是依靠 MPC 來完成的,包括跑酷、體操、跳舞、後空翻等等。最近,他們還展示了 MPC 用於操縱物體的效果。2024 款純電驅動的 Atlas 新版本也是由 MPC 驅動的。
所有版本 Atlas 的 MPC 都有一些共同特點,包括:
1、非線性動力學、成本和約束
Deits 指出,所有 MPC 版本從一開始就包含非線性動力學,非線性無處不在,特別是接觸點的位置與接觸點施加力的大小之間的耦合。他們選擇接受這一點:如果一切都是非線性的,他們不會找到一個完美的線性近似系統。
2、迭代線性化並求解 QP
他們透過迭代地線性化來解決這個問題。這包括從一個初始猜測開始,然後解決一個 QP(二次規劃問題),圍繞那個 QP 的解進行線性化。
3、從不執行到收斂
他們對收斂不感興趣,因為 Deits 認為收斂並不能很好地預測機器人是否真的有效。如果機器人在等待過程中摔倒了,那麼為了等待收斂到某個閾值而花費上百倍的時間並不值得。
4、利用問題結構提高速度
他們做了很多工作,利用問題結構來提高速度,儘可能保留由 MPC 問題結構帶來的稀疏性。
5、不將求解器視為黑盒
他們嘗試開啟求解器,重寫其內部,以提高效能,而不是簡單地將求解器視為一個無法更改的黑盒。因為最終,他們需要儘可能快地解決最大的 MPC 問題。
自進入波士頓動力以來,Deits 所在的團隊已經在機器人(硬體)上解決了大約 1000 萬個 QP 問題,在模擬環境中則解決了 100 億個。但這些還遠遠不夠。
把機器人看成長了四肢的「土豆」
為了簡化模型,他們首先把機器人想象成一個土豆。機器人存在諸多非線性因素,比如力的位置和大小之間的耦合,以及旋轉動力學等。透過簡化模型,專注於重心動力學,他們成功實現了 Atlas 機器人的 360 度旋轉、後空翻等動作。
但是,歸根結底,機器人不是土豆,它有可以移動的四肢,因此他們轉向了分階段最佳化:首先考慮土豆的重心動力學,然後在獨立的運動學上做一些下游最佳化,以找到與「土豆」一致的運動學行為。這種方法效果很好,幫 Atlas 實現了單手支撐跳過平衡木的動作。在這一過程中,他們使用手和腳來操縱重心動力變化,但是以一種跟蹤參考軌跡的方式移動四肢,使其清楚地避開平衡木。
但問題是,一旦「土豆」想做一些四肢做不到的事情(「土豆」以為能跳到那麼遠,而四肢其實不能),Atlas 就會貢獻翻車片段。二者之間不夠協調。
所以,從這時起,波士頓動力調整策略,開始將 Atlas 視為一個運動學 - 重心動力學耦合的系統(a Kinodynamic System)。這個系統可以讓 Atlas 完成 540 度的轉體空翻,這是以前的分階段最佳化系統做不到的。
此時,他們也意識到,增加模型的複雜性似乎總能在某種程度上提升機器人的效能,儘管這確實會讓計算過程變得更加複雜,軟體也更加龐大。他們在 MPC 問題中加入的每一個正確元素,都有助於改善機器人的表現,但這同時也意味著需要更強大的計算能力和更精細的軟體實現。他們尚未發現一個臨界點。
為了讓機器人能夠操縱物體,他們採取了類似的耦合方法,將機器人和物體的狀態放到一個 MPC 問題中去解決,因為二者的運動互相約束。這使得 Atlas 能夠做到扔工具包、搬運木板、操縱較重物體等動作。
不過,這些動作都是在非常結構化的環境中完成的,波士頓動力需要考慮機器人實際所處的世界。這讓問題變得更大、更難,引入了感知驅動的約束之類的東西。
他們採用像體素地圖這樣的世界表示,並將其作為 MPC 問題的額外約束。在一個例子中,他們讓機器人慢跑,沒有特別的參考動作,但是要求它保持頭部在體素外面,結果可以看到,機器人知道遇到體素要低頭。這仍然是一個區域性最佳化,機器人不會特別聰明地決定如何繞過一棵樹。但是 Deits 表示,依靠這些區域性最佳化並看看能用它做到什麼,效果出奇地好。在一個讓機器人跑向盒子的例子中,它居然透過一個聰明的扭臀動作繞過了盒子。
但想要真正創造出一個用於執行任務的有用機器人,只讓它在障礙物周圍走動並做一些程式設計好的動作還遠遠不夠。波士頓動力最近面臨的一大挑戰是如何將整個 MPC 系統應用到人類線上指定的某種任務上。
Deits 展示了他們遙控機器人進行操作的例子。在遙控過程中,他們獲取操作者手部的動作,並將這些動作轉換成 MPC 的參考軌跡。由於無法預知操作者將來想要做什麼,他們必須採取一些策略,將他們手部的即時姿態轉換成隨時間變化的 MPC 參考軌跡。
同樣的,他們還在嘗試執行一些自主行為,比如讓機器人注視一個固定點並向其移動。他們利用可能非同步線上傳入的感測器輸入來構建 MPC 的參考,這意味著 MPC 必須能夠非常靈活地適應參考軌跡在一瞬間完全改變的情況。
經驗、教訓總結
到目前為止,他們得到的有關模型「複雜性」的教訓是:
更復雜的模型持續有效;
將重心動力學和完整的運動學結合在一個最佳化過程中,而不是分開處理,通常效果更好。這種方法可以避免當機器人作為一個整體(如土豆)嘗試執行動作時四肢無法實現的問題;
不要丟失那些梯度。在將運動學和重心動力學最佳化分開時,他們沒有辦法告知機器人的主體部分四肢無法做到某些動作,因此那些梯度只能透過工程師的大腦間接地傳遞。而更有效的方式是讓這些梯度成為實際的梯度,讓求解器沿著這些梯度找到解決方案,而不是工程師自己去手動尋找。
Deits 還舉了一個例子來說明「一起最佳化」的效果要好於分階段最佳化。他們以很快的速度把一個籃球扔向機器人,機器人在平衡木上很難單腳保持平衡。但是,如果給機器人一根杆子,它就能利用那個杆子的動力學來保持平衡。波士頓動力也曾嘗試用分階段最佳化來做這件事,但結果都沒有成功。只有把機器人的模型和與之互動的物體的模型放在一起最佳化,機器人才能在平衡木上保持平衡。
第二個教訓是關於「非線性」方面的。他們發現,直接最佳化的非線性 MPC 可為非凸問題做出令人驚訝的正確決策,例如接觸點的位置和力的非凸性問題。Deits 確信他們經常達到的是區域性最小值,但這些結果通常已經足夠好。他認為,在機器人出問題時,原因並不是他們未能解決特定的非凸問題,而是他們的模型在某些方面存在根本性錯誤,或者他們未能做出有用的決策,比如改變模式序列。
在這裡,Deits 舉了一個例子:他們用一個棍子用力推機器人,但沒有告訴 MPC 該怎麼應對,只是讓它保持機器人直立(不要摔倒),然後給它一個左右踉蹌的序列。它所有的位置和選擇的力,包括所有的手臂、腿部動作都只是一個區域性最佳化。
除了常規的保持直立,這個 MPC 系統還能支援一些非常規動作,比如做俯臥撐、倒立行走。
第三個教訓是從「工程」角度來總結的。Deits 認為:
精心的工程設計是使 MPC 真正發揮作用的一大因素。把一個數學上合理的東西放入一個實際執行的機器人中,並讓它執行 100 億次 QP 求解,需要大量的工作。
軟體效能很重要,如果你的答案給得太晚,那就沒有用了。但軟體正確性更重要,一個符號錯誤會導致系統失效,或效果很差。在沒有找到 bug 之前,你很難區分問題出在數學上還是實現上,這會導致大家錯失一些好點子。因為一個符號錯誤而放棄一個在數學上很合理的點子是非常可惜的。
機器人的表現是唯一的目標,其他都是次要的。比如,求解器的「收斂」是無關緊要的,機器人是否完成了後空翻才是關鍵。
第四個教訓是關於「軌跡」的。Deits 發現,粗略的軌跡竟然可以成為良好的參考。他們把複雜的期望行為編碼為關節、末端執行器、物體姿態的軌跡。這些軌跡可能不一致,甚至完全不切實際。但更復雜的 MPC 能夠容忍這些不一致的參考。這意味著他們可以對所有動作執行相同的 MPC,而它卻能處理這些看似不合理的參考軌跡,併產生實際可行的動作。
在這裡,他發現了一個有用的指標:對於控制工程師來說,你的控制器越好,它能接受的參考就越差。按照這個標準,工程師們都會期望自己的 MPC 能夠接受幾乎無意義的參考,併產生物理上合理的東西。
尚未解決的問題
顯然,使用軌跡作為 MPC 的參考可以帶來很好的控制效果,但軌跡本身很難製作。因為,在為機器人的控制策略制定參考軌跡時,需要預測和定義一個考慮時間因素的成本函式。這個成本函式是 MPC 決策過程的關鍵部分,它影響著機器人如何根據當前狀態和預期目標來規劃其動作。
然而,一個主要的挑戰是,機器人的期望行為可能不是靜態的,而是根據機器人當前的行為和環境反饋動態變化的。這意味著,控制策略需要具備適應性,能夠實時調整參考軌跡以適應不斷變化的情況。比如在一個行走→到達→抓取→舉起的序列中,如果你處在到達與抓取之間,MPC 的參考軌跡應該是什麼?包括抓取嗎?我們不知道是否應該包含抓取,直到我們知道我們是否真的到達了應該到達的位置。MPC 的成本函式應該包括動態變化嗎?Deits 表示,對於這些問題,他們也還沒搞清楚。
另一個挑戰是由「區域性最佳化」帶來的。Deits 指出,儘管他們依靠區域性最佳化成功做了很多事情,但有時候,區域性最佳化中的梯度可能會錯誤地引導機器人,導致機器人採取非最優或錯誤的行動。
特別是,但沒有得到正確的接觸模式時,機器人會翻車。因為當機器人與環境接觸時,這種接觸會引入離散的變化,影響機器人的活動約束。
當機器人遇到意外情況或當前模式不再適用時,如何讓 MPC 系統動態地選擇一個新的模式序列?目前,他們還沒有一個明確的方法來解決這個問題。
Deits 提到的最後一個挑戰是:既然增加 MPC 的複雜性有幫助,那麼如何在該系統中新增更多的複雜性,讓模型變得更大?這包括以下問題:
如何在增加模型複雜性的同時減少延遲?
哪些複雜性是正確的、值得關注的?包括執行器扭矩、閉合運動鏈、隱式接觸最佳化、狀態不確定性、模型不確定性等等。
如何最有效地使用像 GPU 這樣的現代計算架構?
那麼波士頓動力打算如何應對這些挑戰呢?Deits 表示,MPC 與機器學習的結合是他們願景中最重要的一步。他不確定二者將以何種方式結合。他們將同時嘗試各種可能性,比如:
將 MPC 用作一個資料收集平臺。他們能夠控制機器人四處移動,因為他們擁有一個相當穩定的控制器來控制機器人行走和做事,藉此來收集資料。
將 MPC 用作一個 API,這樣強化學習策略就不必直接與關節對話,而是將 MPC 視為機器人能力的抽象,與之互動。
將 MPC 作為一個教師,用它來訓練可以被更高效地評估的策略。
將 MPC 作為一種當下選擇,直到逆向工程出 RL 替代技術再切換。
雖然整個分享只有短短的 20 多分鐘,但波士頓動力詳細介紹了他們在研發歷程中踩的坑,整個分享乾貨滿滿。感興趣的讀者可以點開影片觀看(字幕由剪映自動生成,僅供參考)。