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