ReKep——李飛飛團隊提出的讓機器人具備空間智能:基於視覺語言模型GPT-4o和關係關鍵點約束(上)
、、前言
由於工廠、車廠的任務需求場景非常明確,加之自今年年初以來,我司在機器人這個方向的持續大力度投入(包括南京、長沙兩地機器人開發團隊的先後組建),使得近期我司七月接到了不少來自車廠/工廠的訂單,比如其中的三個例子:柔性上料、物料分揀、RL仿真平臺搭建
也讓我們越來越堅定在機器人方向發力具身智能 和工業協作機器人,且細分爲如下三大場景:
初級,面向教學場景,即高校實驗室的具身「教學機器人」,及給青年少年小孩的「教育機器人」
中級,面向科研場景,幫一系列公司或高校復現世界最頂級的開源機器人,使其最終落地於小工廠或家務,硬件成本十來萬到幾十萬
高級,面向工業場景,即協作機器人——南京那邊幾個月前便已在弄
而既然在機器人這個行業,故我們對該領域的各種前沿進展始終保持極高關注(畢竟在這種高科技領域,那關注世界級前沿 是必不可少的),從而
注意到了李飛飛團隊提出的這個ReKep(全稱爲Relational Keypoint Constraints)
其對應的論文爲《ReKep: Spatio-Temporal Reasoning of Relational Keypoint Constraints for Robotic Manipulation》,其作者團隊爲:Wenlong Huang, Chen Wang, Yunzhu Li, Ruohan Zhang, Li Fei-Fei
其對應的項目地址爲:https://rekep-robot.github.io/
其對應的GitHub爲: https://github.com/huangwl18/ReKep
當然,你在閱讀ReKep這篇論文時,歡迎使用我司七月開發的基於大模型的翻譯系統(目前已上線七月官網,左邊英文 右邊中文,如此中英文對照下的閱讀效率奇快無比)
如我司機器人技術合夥人姚博士所說,“ReKep的方法基於大模型,增加運動限制,而我們之前做的更多基於端到端的專用數據模型”
至於什麼叫做所謂的空間智能呢?
比如對於現有的大模型,你讓它倒杯茶,它能很快給你推理出來第一步幹什麼、第二步幹什麼、第三步幹什麼
但這畢竟是理論,等到真實世界中實際泡茶時,會遇到各種問題,比如要握好茶壺、移動茶壺的時候不要灑出、倒茶的時候要把茶嘴與杯子對齊 這些都需要對整個物理空間有感知,且每一步的運動都有一定的約束,這就叫空間智能
那沒有空間智能,機器人能不能完成倒茶這類任務呢? 能,比如通過額外的訓練 比如基於人類示教,然後讓機器人模仿人類行爲——即所謂的模仿學習,便可以 那如果不進行額外的訓練 只單純靠大模型推理 + 機器人自身的運動控制能力呢?理論上也可以,但可能不夠穩定、不夠絲滑、不夠精準
我司會在大模型和機器人這兩個方向不斷深挖,就像深海挖井,爲達預期 雖兩萬裡亦往矣,期待與更多大模型開發者、機器人開發者一路前行
第一部分 ReKep的提出背景與其關鍵架構、實現細節、完整示例
1.1 初步印象:ReKep的提出背景——是什麼以及有何不同
1.1.1 ReKep是什麼
機器人操作涉及與環境中物體的複雜交互,這些交互通常可以在空間和時間域中表示爲約束
考慮下圖中的倒茶任務:首先,機器人必須抓住把手;其次,在運輸過程中保持杯子直立;最後對齊壺嘴與目標容器,並以正確的角度傾斜杯子進行倒茶
在這裡,這些約束不僅編碼了中間的子目標(例如,對齊壺嘴),還編碼了過渡行爲(例如,在運輸過程中保持杯子直立),這些約束共同決定了機器人在環境中行動的空間、時間和其他組合要求
然而,有效地爲各種現實任務制定這些約束條件面臨着重大挑戰,之前有不少相關的工作,而李飛飛團隊則提出了關係關鍵點約束——ReKep,具體來說
ReKep 將約束表示爲 Python 函數,這些函數將一組關鍵點映射到一個數值成本,其中每個關鍵點都是場景中特定任務和語義上有意義的三維點ReKep repre-sents constraints as Python functions that map a set of keypoints to a numerical cost, where eachkeypoint is a task-specific and semantically meaningful 3D point in the scene
每個函數由關鍵點上的(可能是非線性的)算術運算組成,並編碼了它們之間的期望“關係”,這些關鍵點可能屬於環境中的不同實體,例如機器人手臂、物體部件和其他代理
雖然每個關鍵點僅包含其在世界座標系中的三維笛卡爾座標,但如果關鍵點之間的剛性rigidity得到保證,多個關鍵點可以共同指定線、面和/或三維旋轉
他們在順序操作問題的背景下研究 ReKep,其中每個任務涉及具有時空依賴關係的多個階段——例如,上述示例中的“抓取”(當然,準確來講,還包含“移動)、“對齊”、“倒入”
雖然約束通常是根據任務手動定義的[kpam: Keypoint affordances for categorylevel robotic manipulation],但ReKep的特定形式具有獨特的優勢
即可以通過預訓練的大型視覺模型LVM [Dinov2: Learning robust visual features without supervision]和視覺-語言模型VLM[比如GPT4]實現自動化「they can be automated by pre-trained large vi-sion models (LVM) [5] and vision-language models (VLM) [6]」
從而能夠從RGB-D觀測和自由形式的語言指令中進行自然環境下的ReKep規範(enabling in-the-wild specificationof ReKep from RGB-D observations and free-form language instructions)
具體來說
利用LVM來提出場景中細粒度且語義上有意義的關鍵點,並使用VLM比如GPT-4o將這些約束寫成「基於視覺輸入併疊加了關鍵點的」Python函數Specifically, we leverage LVM to propose fine-grained and semantically meaningful keypoints in the scene and VLM to write the constraints as Python functions from visual input overlaid with proposed keypoints.
這個過程可以理解爲通過視覺引用表達,將細粒度的空間關係——通常是那些難以用自然語言明確表達的關係,在VLM支持的輸出模式(代碼)中進行落地(使用大型視覺模型和視覺-語言模型自動指定關鍵點和約束)This processcan be interpreted as grounding fine-grained spatial relations, often those not easily specified with natural language, in an output modality supported by VLM (code) using visual referral expressions.
通過生成的約束條件,可以使用現成的求解器,通過重新評估基於跟蹤關鍵點的約束來生成機器人動作With the generated constraints, off-the-shelf solvers can be used to produce robot actions by re-evaluating the constraints based on tracked keypoints.
受[7,Sequence-of-constraints mpc: Reactive timing-optimal control of sequential manipulation]的啓發,採用分層優化程序——將操作任務表述爲具有關係關鍵點約束的分層優化問題(Inspired by [7], we employ a hierarchical optimization procedure)
比如
首先解決一組路徑點作爲子目標(表示爲SE(3)末端執行器姿態)「即,to first solve a set of waypoints as sub-goals (represented as SE(3) end-effector poses) 」
然後解決退化視界控制問題,以獲得實現每個子目標的密集動作序列「即,and then solve the receding-horizon control problem to obtain a dense sequence ofactions to achieve each sub-goal」
1.1.2 ReKep與先前關於操作視覺提示的工作的比較
任務自由度
ReKep專注於需要6自由度(單臂)或12自由度(雙臂)運動的挑戰性任務 然而,這對於現有的VLMs來說並不簡單,因爲它們在2D圖像上操作——正如MOKA [97]所引用的,“當前的VLMs無法可靠地預測6自由度的運動”,以及PIVOT [98]所說的,“推廣到更高維度的空間,如旋轉姿態,甚至帶來了額外的挑戰”
爲了解決這個問題,ReKep的一個關鍵見解是,VLMs只需要通過推理關鍵點在(x, y, z)笛卡爾座標中的位置來隱式地指定完整的3D旋轉one key insight from ReKep is that VLMs only need to implicitly specify full 3D rotations by reasoning about keypoints in (x, y, z) Cartesian coordinates
在此之後,實際的3D旋轉由高精度和高效的數值求解器解決,有效地避開了顯式預測3D旋轉的挑戰After this, actual 3D rotations are solved by high-precision and efficient numerical solvers, effectively sidestepping the challenge of explicitly predicting 3D rotations
因此,相同的思路/公式也自然地推廣到控制多個機械臂
高級規劃
許多研究也通過語言相關的任務規劃器來處理多階段任務(這些任務規劃器與具體的方法無關),ReKep的公式從TAMP中汲取靈感,並在統一的連續數學程序中有機地將高級任務規劃與低級動作集成在一起
因此,該方法可以自然地考慮跨階段的幾何依賴關係,並以實時頻率進行處理。當發生故障時,它會回溯到其條件仍然可以滿足的前一階段例如,在“倒茶”任務中,只有當茶壺嘴與杯口對齊時,機器人才能開始傾斜茶壺。然而,如果在此過程中杯子被移動,它應該將茶壺保持水平並重新與杯子對齊。或者,如果茶壺被從夾持器中取出,它應該重新抓住茶壺
低級執行
使用VLMs的一個常見問題是運行計算成本高,這阻礙了許多操作任務中經常需要的高頻率感知-行動反饋循環。因此,大多數現有工作要麼考慮在視覺感知僅在開始時使用的開環設置,要麼只考慮可以接受慢速執行的任務
相反,ReKep的公式通過將VLMs與點追蹤器結合,原生支持高頻率感知-行動循環,這有效地通過閉環執行實現了反應行爲——儘管利用了非常大的基礎模型
視覺提示方法Visual Prompting Methods
ReKep獨特地考慮使用視覺提示進行代碼生成,其中代碼可能包含通過視覺引用表達式對一組關鍵點進行任意算術運算
儘管單個點在捕捉複雜幾何結構方面有限制,但多個點及其關係甚至可以指定向量、表面、體積及其時間依賴性
雖然概念上簡單,但這提供了更高的靈活性,可以完全指定6自由度甚至12自由度的運動
1.2 ReKep總覽:關鍵方法與其架構
1.2.1 什麼是關係關鍵點約束
ReKep 的一個實例是一個函數,它將關鍵點數組(記作 k)映射到一個無界的成本,其中表示約束已滿足
函數實現爲一個無狀態的 Python 函數,包含對關鍵點進行的 NumPy [123] 操作,這些操作可能是非線性和非凸的
本質上,ReKep 的一個實例編碼了關鍵點之間的一種期望的空間關係,這些關鍵點可能屬於機器人手臂、物體部件和其他代理
然而,一個操作任務通常涉及多個空間關係,並且可能具有多個時間上相互依賴的階段,每個階段都包含不同的空間關係
爲此,我們將任務分解爲N個階段,並使用ReKep爲每個階段指定兩種約束
一組子目標約束其中,編碼了在階段結束時要實現的一個關鍵點關係,相當於是階段目標
一組路徑約束其中,編碼了在階段內每個狀態都要滿足的一個關鍵點關係,相當於是規劃路徑
考慮下圖中的倒水任務,它包括三個階段:抓取、對齊和倒水
階段1的子目標約束(sub-goal constraint),將末端執行器拉向茶壺把手
然後階段2的子目標約束指定茶壺嘴需要在杯口上方 此外,階段2的路徑約束(path constraint),確保茶壺保持直立,以避免在運輸過程中灑出
最後,階段3的子目標約束指定了理想的倒水角度
1.2.2 通過ReKep將操作任務視爲帶約束的優化問題
使用ReKep作爲表示約束的一般工具,採用[7,Sequence-of-constraints mpc: Reactive timing-optimal control of sequential manipulation]中的公式,並展示如何將操作任務表述爲涉及和的約束優化問題
將末端執行器姿態表示爲,爲了執行操作任務,旨在通過如下公式化控制問題來獲得整體離散時間軌跡(記爲方程1)
其中 ,表示在時間的末端執行器姿態,是從階段到階段的轉換時間where et denotes end-effector pose at time t, gi ∈ {1, . . . , T } are the timings of the transition from stage i to i + 1
是時間的關鍵點位置數組
是關鍵點的前向模型
和是子目標和路徑問題的輔助成本函數(例如,碰撞避免)
即,對於每個階段,優化過程應找到一個末端執行器的姿態作爲下一個子目標,以及其對應的時間,同時生成一個姿態序列,以實現該子目標,並滿足給定的ReKep約束和輔助代價Namely, for each stage i, the optimization shall find an end-effector pose as next sub-goal, along with its timing, and a sequence of poses egi−1:gi that achieves the sub-goal, subject to the given set of ReKep constraints and auxiliary costs.
1.3 深入約束:子目標約束與路徑約束的實現
爲了解實時解決方程1,可以對整個問題進行分解,只優化緊接着的下一個子目標及其到達下一個子目標的相應路徑——算法1中的僞代碼,如下圖所示(其中的Eq.2 是求解子目標,Eq.3是求解對應的路徑,下文馬上會詳述)
所有優化問題——包含子目標約束問題與路徑約束問題,均使用SciPy [ Scipy 1.0: fundamental algorithms for scientific computing in python ] 實現和解決,決策變量歸一化到 [0, 1]注意,SciPy 已成爲利用 Python 編程語言中的科學算法的事實標準,擁有 600 多個唯一代碼貢獻者、數千個依賴包、超過 100,000 個依賴存儲庫以及每年數百萬次下載,其中包括 GitHub 上幾乎一半的機器學習項目使用 SciPy
它們最初使用雙重退火 [126] 和 SLSQP [127] 作爲局部優化器(大約1秒)解決,然後基於先前的解決方案僅使用局部優化器以大約10 Hz1的頻率解決
1.3.1 子目標求解器的實現細節
首先,解決子目標問題以獲得,對於當前階段,有如下方程(定義爲方程2)
其中,包含輔助控制成本,比如場景碰撞避免、可達性reachability、姿態正則化、解決方案一致性,以及雙手設置的自碰撞
即,方程2試圖找到一個「滿足子目標約束的同時,最小化輔助成本」的子目標 另,如果一個階段涉及抓取,還包括一個抓取度量——則可以使用AnyGrasp「其對應論文爲《Anygrasp:Robust and efficient grasp perception in spatial and temporal domains》,即此文《 視覺語言機器人的大爆發:從RT2、VoxPoser、OK-Robot到Figure 01、清華CoPa 》中“4.2.2 機器人對現實世界物體的抓握”提到的AnyGrasp」
總之,子目標問題使用SciPy [125]實現並解決
決策變量是單臂機器人在 R6中的單個末端執行器姿態(位置和歐拉角),以及雙手機器人在 R12中的兩個末端執行器姿態
位置項的界限是預定義的工作空間界限,旋轉項的界限是末端執行器朝下的半球(由於Franka機械臂的關節限制,當末端執行器朝上時,往往容易達到關節限制)The bounds for the position terms are the pre-defined workspace bounds, and the bounds for the rotation terms are that the half hemisphere where the end-effector faces down (due to the joint limits of the Franka arm, it is often likely to reach joint limit when a end-effector pose faces up)
根據界限,決策變量被歸一化到 [−1,1]
在第一次求解迭代中,初始猜測選擇爲當前的末端執行器姿態。在第一次迭代中使用基於採樣的全局優化雙重退火 [126] 快速搜索整個空間
隨後使用基於梯度的局部優化器SLSQP [127] 來優化解決方案
整個過程在這一迭代中大約需要1秒鐘 在隨後的迭代中,使用前一階段的解決方案,並且只使用局部優化器,因爲它可以快速調整小的變化 優化在固定的時間預算內截止,表示爲目標函數調用的次數,以保持系統高頻運行
接下來,討論下目標函數中的成本項
約束違反
在優化問題中將約束實現爲成本項,其中ReKep函數返回的成本乘以較大的權重
場景碰撞避免
使用nvblox [149] 和 PyTorch 包裝器 [58] 在一個以20 Hz運行的單獨節點中計算場景ESDF
ESDF計算聚合了來自所有可用攝像頭的深度圖,並使用cuRobo排除機器人手臂和任何被抓取的剛性物體「通過一個被遮罩的跟蹤模型Cutie [136]進行跟蹤)」 然後使用ESDF計算一個碰撞體素網格,並由系統中的其他模塊使用 在子目標求解模塊中,我們首先使用最遠點採樣將夾持器點和被抓取物體點下采樣到最多30個點 然後我們使用帶有線性插值的ESDF體素網格計算碰撞成本,閾值爲 15釐米
可達性
由於我們的決策變量是末端執行器姿態,而機器人手臂可能無法總是到達這些姿態,特別是在狹小空間內,需要添加一個成本項,以鼓勵找到具有有效關節配置的解決方案 因此,我們在子目標求解器的每次迭代中使用PyBullet [133,「《Pybullet, a python module for physics simulation for games, robotics and machine learning》中的IK求解器」]解決一個逆運動學問題,並使用其殘差作爲可達性的代理順帶說一下,關於逆運動學,這篇論文《A survey of inverse kinematics techniques for 6-DOF manipulators》值得讀一下這篇綜述論文系統回顧了用於6自由度機械臂的多種逆運動學求解技術,包括解析法、數值法和優化方法。論文對比了這些方法的優缺點,並根據應用場景提供了選擇指導。它還討論了逆運動學在機器人操作中的實際挑戰,例如奇異性和冗餘自由度處理 發現這大約佔用了完整目標函數時間的40%。或者,可以在關節空間中解決問題,這將通過強制執行邊界來確保解決方案在關節限制範圍內 且發現,由於約束在任務空間中進行評估,而基於Python的實現效率較低——因爲需要在路徑求解器中計算大量的正向運動學 爲了解決這個問題並確保效率,未來的工作可以考慮使用硬件加速的實現來解決關節空間中的問題 [58]
姿態正則化 還添加了一個小成本,鼓勵子目標接近當前的末端執行器姿態
一致性 由於求解器以高頻率迭代解決問題,並且感知管道中的噪聲可能傳播到求解器,且發現包含一致性成本是有用的,這鼓勵解決方案接近先前的解決方案
(僅雙臂) 自碰撞避免 爲了避免兩隻手臂相互碰撞,他們計算了兩組點之間的成對距離,每組包括夾持器點和抓取物體點
1.3.2 路徑求解器的實現細節
其次,對於路徑問題:在獲得子目標之後,便可求解從當前末端執行器姿態到子目標的軌跡「After obtaining sub-goal egi , we solve for a trajectory et:gi starting from current end-effector pose et to the sub-goal egi」,定義爲方程3
其中包含以下輔助控制成本:場景碰撞避免、可達性、路徑長度、解決方案一致性,以及在雙手設置情況下的自碰撞
如果到子目標的距離在一個小容差範圍內 ϵ,將進入下一個階段 i+ 1if the distance to the sub-goal egi is within a small tolerance ϵ, we progress to the next stage i+1
總之,路徑問題使用 SciPy [125] 實現和解決。決策變量的數量是根據當前末端執行器姿態和目標
末端執行器姿態之間的距離計算的,具體來說
定義了一個固定的步長(20釐米和 45度),併線性近似所需的“中間姿態”數量,這些數量被用作決策變量。如在子目標問題中一樣,它們同樣使用位置和歐拉角表示,並具有相同的邊界
對於第一次求解迭代,初始猜測選擇爲起點和目標之間的線性插值 同樣在第一次迭代中使用基於採樣的全局優化,然後是基於梯度的局部優化器,並且在後續迭代中僅使用局部優化器 在獲得解決方案後,該解決方案表示爲若干中間姿態,使用當前姿態、中間姿態和目標姿態擬合樣條,然後對其進行密集採樣以由機器人執行 在目標函數中,首先對決策變量進行反歸一化並使用分段線性插值來獲得表示路徑的密集離散姿態序列(下文稱爲“密集樣本”)In the objective function, we first unnormalize the decision variables and use piecewise linear in-terpolation to obtain a dense sequence of discrete poses to represent the path (referred to as “dense samples” below) 樣條插值將與他們後處理和執行解決方案的方式保持一致,但他們發現線性插值在計算上更爲高效
下面討論目標函數中的各個成本項
約束違反
似於子目標問題,檢查路徑上每個密集樣本的ReKep約束違反情況,並給予大權重懲罰
場景碰撞避免
計算方法類似於子目標問題,只是針對每個密集樣本進行計算且忽略了起始和目標姿態附近 5釐米半徑內的碰撞計算,因爲在高頻率求解時,由於各種現實世界的噪聲,這有助於穩定解決方案 另外添加了一個桌面清除成本,以懲罰路徑穿透桌面(或輪式單臂機器人工作空間的底部)
路徑長度
通過取密集樣本的差值之和來近似路徑長度。鼓勵更短的路徑
可達性
在目標函數中爲每個中間姿態解決一個逆運動學問題,就像在子目標問題中一樣
一致性
與子目標問題一樣,鼓勵解決方案接近前一個。具體來說,存儲了前一次迭代的密集樣本。爲了計算解決方案的一致性,使用兩個序列(視爲兩個集合)之間的成對距離作爲有效的代理 或者,可以使用Hausdorff距離
(僅限雙臂) 自碰撞避免
同樣爲雙臂平臺計算自碰撞避免,就像在子目標問題中一樣,還使用兩個序列之間的成對距離來有效地計算此成本
1.3.3 回溯與關鍵點的前向模型
接着,再看回溯: 儘管子問題可以在實時頻率下解決,以在一個階段內對外部干擾做出反應,但如果最後一個階段的任何子目標約束不再成立(例如,在倒茶任務中,杯子被從夾持器中取出),系統必須能夠跨階段重新規劃
具體來說,在每個控制循環中,檢查是否違反了。如果發現違反,將迭代回溯到滿足的前一個階段
然後,再看關鍵點的前向模型
爲了解決方程2和方程3,在優化過程中必須利用一個前向模型來估計 從
如同之前的工作——kpam,使剛性末端執行器和“抓取關鍵點”(屬於同一物體或部分的剛性關鍵點組;從分割模型中獲得,下一節 即將介紹)之間的假設(we make the rigidity assumption between the end-effector and the “grasped keypoints”)
即給定末端執行器姿態的變化,可以通過應用相同的相對剛性變換來計算關鍵點位置的變化,同時假設其他關鍵點保持靜止Namely, given a change in the end-effector pose ∆e, we can calculate the change in keypoint positions by applying the same relative rigid transformation k′[grasped] = T∆e · k[grasped], while assuming other keypoints stay static.
且注意到,這是一個“局部”假設,因爲它僅假設在解決問題的短期(0.1秒)內成立We note that this is a “local” assumption in that it is only assumed to hold for the short horizon (0.1s) that the problem is solved.
實際的關鍵點位置使用20 Hz的視覺輸入進行跟蹤,並在每個新問題中使用Actual keypoint positions are tracked using visual input at 20 Hz and used in every new problem.
至於對於更具挑戰性的場景(例如,動態或接觸豐富的任務),可以使用學習或基於物理的模型For more challenging scenarios(e.g., dynamic or contact-rich tasks), a learned or physics-based model may be used.
除了以上,更多機器人相關見七月在線的《大模型機器人二次開發線下營》
↓↓↓掃碼瞭解課程↓↓↓
課程諮詢可找蘇蘇老師VX:julyedukefu008或七月在線其他老師