波士頓動(dòng)力技術(shù)揭秘:后空翻、俯臥撐與翻車,6年經(jīng)驗(yàn)、教訓(xùn)總結(jié)
今年 4 月,著名機(jī)器人公司波士頓動(dòng)力跟全世界開(kāi)了一個(gè)玩笑,先是官宣人形機(jī)器人 Atlas 退役,狠狠來(lái)了一波回憶殺。

退役的 Atlas。
緊接著,就在第二天,他們又放出了一個(gè)新的人形機(jī)器人視頻。新機(jī)器人也叫 Atlas,不過(guò)由原來(lái)的液壓改為了電動(dòng),身材更為小巧、靈活。

此時(shí),外界才反應(yīng)過(guò)來(lái),原來(lái)波士頓動(dòng)力并不是要放棄人形機(jī)器人,而是轉(zhuǎn)變了研發(fā)方向,讓機(jī)器人更加適應(yīng)工業(yè)環(huán)境。該公司表示,這個(gè)電動(dòng)版的 Atlas 將于明年初在韓國(guó)現(xiàn)代汽車工廠里開(kāi)始進(jìn)行試點(diǎn)測(cè)試,并會(huì)在幾年后全面投產(chǎn)。
自公布后,這個(gè)機(jī)器人鮮少露面。直到最近,在機(jī)器人頂會(huì) RSS 的一場(chǎng)技術(shù)分享上,大家才知道,原來(lái)新的 Atlas 已經(jīng)進(jìn)化到可以做俯臥撐、倒立行走的地步了。


這個(gè)技術(shù)分享來(lái)自波士頓動(dòng)力機(jī)器人工程師 Robin Deits。他是 MIT 博士,2018 年至今一直在波士頓動(dòng)力工作,研究 Atlas 人形機(jī)器人的控制。

個(gè)人主頁(yè):http://robindeits.com
在分享中,他介紹了 Atlas 機(jī)器人過(guò)去幾年的研發(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
在演講開(kāi)頭,Robin Deits 首先介紹了波士頓動(dòng)力這家公司。
波士頓動(dòng)力現(xiàn)在是韓國(guó)現(xiàn)代汽車公司旗下的人形機(jī)器人公司,員工大概有八九百人,其代表性的機(jī)器人有 Spot(機(jī)器狗)、Stretch(倉(cāng)庫(kù)搬運(yùn)機(jī)器人)和 Atlas(人形機(jī)器人)。目前,Atlas 主要還是一個(gè)研發(fā)平臺(tái),波士頓動(dòng)力正慢慢將其轉(zhuǎn)化為產(chǎn)品。

接下來(lái),Robin Deits 介紹了他們?nèi)绾螌?MPC 用于 Atlas,包括怎么用、遇到了哪些挑戰(zhàn)、還有哪些問(wèn)題沒(méi)有解決等。
MPC 指的是 Model Predictive Control(模型預(yù)測(cè)控制),這是一種高級(jí)控制策略,通過(guò)使用數(shù)學(xué)模型來(lái)預(yù)測(cè)系統(tǒng)在未來(lái)一段時(shí)間內(nèi)的行為,然后優(yōu)化控制輸入,以實(shí)現(xiàn)系統(tǒng)性能的最佳化。MPC 的一個(gè)關(guān)鍵優(yōu)勢(shì)是它能夠處理多變量系統(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 年以來(lái)實(shí)現(xiàn)的所有機(jī)器人動(dòng)作都是依靠 MPC 來(lái)完成的,包括跑酷、體操、跳舞、后空翻等等。最近,他們還展示了 MPC 用于操縱物體的效果。2024 款純電驅(qū)動(dòng)的 Atlas 新版本也是由 MPC 驅(qū)動(dòng)的。

所有版本 Atlas 的 MPC 都有一些共同特點(diǎn),包括:
1、非線性動(dòng)力學(xué)、成本和約束
Deits 指出,所有 MPC 版本從一開(kāi)始就包含非線性動(dòng)力學(xué),非線性無(wú)處不在,特別是接觸點(diǎn)的位置與接觸點(diǎn)施加力的大小之間的耦合。他們選擇接受這一點(diǎn):如果一切都是非線性的,他們不會(huì)找到一個(gè)完美的線性近似系統(tǒng)。
2、迭代線性化并求解 QP
他們通過(guò)迭代地線性化來(lái)解決這個(gè)問(wèn)題。這包括從一個(gè)初始猜測(cè)開(kāi)始,然后解決一個(gè) QP(二次規(guī)劃問(wèn)題),圍繞那個(gè) QP 的解進(jìn)行線性化。
3、從不運(yùn)行到收斂
他們對(duì)收斂不感興趣,因?yàn)?Deits 認(rèn)為收斂并不能很好地預(yù)測(cè)機(jī)器人是否真的有效。如果機(jī)器人在等待過(guò)程中摔倒了,那么為了等待收斂到某個(gè)閾值而花費(fèi)上百倍的時(shí)間并不值得。
4、利用問(wèn)題結(jié)構(gòu)提高速度
他們做了很多工作,利用問(wèn)題結(jié)構(gòu)來(lái)提高速度,盡可能保留由 MPC 問(wèn)題結(jié)構(gòu)帶來(lái)的稀疏性。
5、不將求解器視為黑盒
他們嘗試打開(kāi)求解器,重寫其內(nèi)部,以提高性能,而不是簡(jiǎn)單地將求解器視為一個(gè)無(wú)法更改的黑盒。因?yàn)樽罱K,他們需要盡可能快地解決最大的 MPC 問(wèn)題。
自進(jìn)入波士頓動(dòng)力以來(lái),Deits 所在的團(tuán)隊(duì)已經(jīng)在機(jī)器人(硬件)上解決了大約 1000 萬(wàn)個(gè) QP 問(wèn)題,在模擬環(huán)境中則解決了 100 億個(gè)。但這些還遠(yuǎn)遠(yuǎn)不夠。

把機(jī)器人看成長(zhǎng)了四肢的「土豆」
為了簡(jiǎn)化模型,他們首先把機(jī)器人想象成一個(gè)土豆。機(jī)器人存在諸多非線性因素,比如力的位置和大小之間的耦合,以及旋轉(zhuǎn)動(dòng)力學(xué)等。通過(guò)簡(jiǎn)化模型,專注于重心動(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)了單手支撐跳過(guò)平衡木的動(dòng)作。在這一過(guò)程中,他們使用手和腳來(lái)操縱重心動(dòng)力變化,但是以一種跟蹤參考軌跡的方式移動(dòng)四肢,使其清楚地避開(kāi)平衡木。


但問(wèn)題是,一旦「土豆」想做一些四肢做不到的事情(「土豆」以為能跳到那么遠(yuǎn),而四肢其實(shí)不能),Atlas 就會(huì)貢獻(xiàn)翻車片段。二者之間不夠協(xié)調(diào)。

所以,從這時(shí)起,波士頓動(dòng)力調(diào)整策略,開(kāi)始將 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ì)算過(guò)程變得更加復(fù)雜,軟件也更加龐大。他們?cè)?MPC 問(wèn)題中加入的每一個(gè)正確元素,都有助于改善機(jī)器人的表現(xiàn),但這同時(shí)也意味著需要更強(qiáng)大的計(jì)算能力和更精細(xì)的軟件實(shí)現(xiàn)。他們尚未發(fā)現(xiàn)一個(gè)臨界點(diǎn)。
為了讓機(jī)器人能夠操縱物體,他們采取了類似的耦合方法,將機(jī)器人和物體的狀態(tài)放到一個(gè) MPC 問(wèn)題中去解決,因?yàn)槎叩倪\(yùn)動(dòng)互相約束。這使得 Atlas 能夠做到扔工具包、搬運(yùn)木板、操縱較重物體等動(dòng)作。


不過(guò),這些動(dòng)作都是在非常結(jié)構(gòu)化的環(huán)境中完成的,波士頓動(dòng)力需要考慮機(jī)器人實(shí)際所處的世界。這讓問(wèn)題變得更大、更難,引入了感知驅(qū)動(dòng)的約束之類的東西。
他們采用像體素地圖這樣的世界表示,并將其作為 MPC 問(wèn)題的額外約束。在一個(gè)例子中,他們讓機(jī)器人慢跑,沒(méi)有特別的參考動(dòng)作,但是要求它保持頭部在體素外面,結(jié)果可以看到,機(jī)器人知道遇到體素要低頭。這仍然是一個(gè)局部?jī)?yōu)化,機(jī)器人不會(huì)特別聰明地決定如何繞過(guò)一棵樹(shù)。但是 Deits 表示,依靠這些局部?jī)?yōu)化并看看能用它做到什么,效果出奇地好。在一個(gè)讓機(jī)器人跑向盒子的例子中,它居然通過(guò)一個(gè)聰明的扭臀動(dòng)作繞過(guò)了盒子。

但想要真正創(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)行操作的例子。在遙控過(guò)程中,他們獲取操作者手部的動(dòng)作,并將這些動(dòng)作轉(zhuǎn)換成 MPC 的參考軌跡。由于無(wú)法預(yù)知操作者將來(lái)想要做什么,他們必須采取一些策略,將他們手部的即時(shí)姿態(tài)轉(zhuǎn)換成隨時(shí)間變化的 MPC 參考軌跡。
同樣的,他們還在嘗試執(zhí)行一些自主行為,比如讓機(jī)器人注視一個(gè)固定點(diǎn)并向其移動(dòng)。他們利用可能異步在線傳入的傳感器輸入來(lái)構(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)化過(guò)程中,而不是分開(kāi)處理,通常效果更好。這種方法可以避免當(dāng)機(jī)器人作為一個(gè)整體(如土豆)嘗試執(zhí)行動(dòng)作時(shí)四肢無(wú)法實(shí)現(xiàn)的問(wèn)題;
 - 不要丟失那些梯度。在將運(yùn)動(dòng)學(xué)和重心動(dòng)力學(xué)優(yōu)化分開(kāi)時(shí),他們沒(méi)有辦法告知機(jī)器人的主體部分四肢無(wú)法做到某些動(dòng)作,因此那些梯度只能通過(guò)工程師的大腦間接地傳遞。而更有效的方式是讓這些梯度成為實(shí)際的梯度,讓求解器沿著這些梯度找到解決方案,而不是工程師自己去手動(dòng)尋找。
 
Deits 還舉了一個(gè)例子來(lái)說(shuō)明「一起優(yōu)化」的效果要好于分階段優(yōu)化。他們以很快的速度把一個(gè)籃球扔向機(jī)器人,機(jī)器人在平衡木上很難單腳保持平衡。但是,如果給機(jī)器人一根桿子,它就能利用那個(gè)桿子的動(dòng)力學(xué)來(lái)保持平衡。波士頓動(dòng)力也曾嘗試用分階段優(yōu)化來(lái)做這件事,但結(jié)果都沒(méi)有成功。只有把機(jī)器人的模型和與之交互的物體的模型放在一起優(yōu)化,機(jī)器人才能在平衡木上保持平衡。

第二個(gè)教訓(xùn)是關(guān)于「非線性」方面的。他們發(fā)現(xiàn),直接優(yōu)化的非線性 MPC 可為非凸問(wèn)題做出令人驚訝的正確決策,例如接觸點(diǎn)的位置和力的非凸性問(wèn)題。Deits 確信他們經(jīng)常達(dá)到的是局部最小值,但這些結(jié)果通常已經(jīng)足夠好。他認(rèn)為,在機(jī)器人出問(wèn)題時(shí),原因并不是他們未能解決特定的非凸問(wèn)題,而是他們的模型在某些方面存在根本性錯(cuò)誤,或者他們未能做出有用的決策,比如改變模式序列。

在這里,Deits 舉了一個(gè)例子:他們用一個(gè)棍子用力推機(jī)器人,但沒(méi)有告訴 MPC 該怎么應(yīng)對(duì),只是讓它保持機(jī)器人直立(不要摔倒),然后給它一個(gè)左右踉蹌的序列。它所有的位置和選擇的力,包括所有的手臂、腿部動(dòng)作都只是一個(gè)局部?jī)?yōu)化。
除了常規(guī)的保持直立,這個(gè) MPC 系統(tǒng)還能支持一些非常規(guī)動(dòng)作,比如做俯臥撐、倒立行走。
第三個(gè)教訓(xùn)是從「工程」角度來(lái)總結(jié)的。Deits 認(rèn)為:
- 精心的工程設(shè)計(jì)是使 MPC 真正發(fā)揮作用的一大因素。把一個(gè)數(shù)學(xué)上合理的東西放入一個(gè)實(shí)際運(yùn)行的機(jī)器人中,并讓它運(yùn)行 100 億次 QP 求解,需要大量的工作。
 - 軟件性能很重要,如果你的答案給得太晚,那就沒(méi)有用了。但軟件正確性更重要,一個(gè)符號(hào)錯(cuò)誤會(huì)導(dǎo)致系統(tǒng)失效,或效果很差。在沒(méi)有找到 bug 之前,你很難區(qū)分問(wèn)題出在數(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),其他都是次要的。比如,求解器的「收斂」是無(wú)關(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ì)于控制工程師來(lái)說(shuō),你的控制器越好,它能接受的參考就越差。按照這個(gè)標(biāo)準(zhǔn),工程師們都會(huì)期望自己的 MPC 能夠接受幾乎無(wú)意義的參考,并產(chǎn)生物理上合理的東西。
尚未解決的問(wèn)題
顯然,使用軌跡作為 MPC 的參考可以帶來(lái)很好的控制效果,但軌跡本身很難制作。因?yàn)?,在為機(jī)器人的控制策略制定參考軌跡時(shí),需要預(yù)測(cè)和定義一個(gè)考慮時(shí)間因素的成本函數(shù)。這個(gè)成本函數(shù)是 MPC 決策過(guò)程的關(guān)鍵部分,它影響著機(jī)器人如何根據(jù)當(dāng)前狀態(tài)和預(yù)期目標(biāo)來(lái)規(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ì)于這些問(wèn)題,他們也還沒(méi)搞清楚。

另一個(gè)挑戰(zhàn)是由「局部?jī)?yōu)化」帶來(lái)的。Deits 指出,盡管他們依靠局部?jī)?yōu)化成功做了很多事情,但有時(shí)候,局部?jī)?yōu)化中的梯度可能會(huì)錯(cuò)誤地引導(dǎo)機(jī)器人,導(dǎo)致機(jī)器人采取非最優(yōu)或錯(cuò)誤的行動(dòng)。
特別是,但沒(méi)有得到正確的接觸模式時(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è)新的模式序列?目前,他們還沒(méi)有一個(gè)明確的方法來(lái)解決這個(gè)問(wèn)題。

Deits 提到的最后一個(gè)挑戰(zhàn)是:既然增加 MPC 的復(fù)雜性有幫助,那么如何在該系統(tǒng)中添加更多的復(fù)雜性,讓模型變得更大?這包括以下問(wèn)題:
- 如何在增加模型復(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è)妇爸凶钪匾囊徊?。他不確定二者將以何種方式結(jié)合。他們將同時(shí)嘗試各種可能性,比如:
- 將 MPC 用作一個(gè)數(shù)據(jù)收集平臺(tái)。他們能夠控制機(jī)器人四處移動(dòng),因?yàn)樗麄儞碛幸粋€(gè)相當(dāng)穩(wěn)定的控制器來(lái)控制機(jī)器人行走和做事,借此來(lái)收集數(shù)據(jù)。
 - 將 MPC 用作一個(gè) API,這樣強(qiáng)化學(xué)習(xí)策略就不必直接與關(guān)節(jié)對(duì)話,而是將 MPC 視為機(jī)器人能力的抽象,與之交互。
 - 將 MPC 作為一個(gè)教師,用它來(lái)訓(xùn)練可以被更高效地評(píng)估的策略。
 - 將 MPC 作為一種當(dāng)下選擇,直到逆向工程出 RL 替代技術(shù)再切換。
 

雖然整個(gè)分享只有短短的 20 多分鐘,但波士頓動(dòng)力詳細(xì)介紹了他們?cè)谘邪l(fā)歷程中踩的坑,整個(gè)分享干貨滿滿。感興趣的讀者可以點(diǎn)開(kāi)視頻觀看(字幕由剪映自動(dòng)生成,僅供參考)。















 
 
 












 
 
 
 