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或七月在线其他老师