ReKep——李飞飞团队提出的新一代机器人操作方法:基于视觉语言模型和关键点约束

发布于:2024-09-19 ⋅ 阅读:(5) ⋅ 点赞:(0)

前言

由于工厂、车厂的任务需求场景非常明确,加之自今年年初以来,我司在机器人这个方向的持续大力度投入(包括南京、长沙两地机器人开发团队的先后组建),使得近期我司七月接到了不少来自车厂/工厂的订单,比如柔性上料、物料分拣、RL仿真平台搭建等

也让我们越来越坚定在机器人方向发力具身智能 工业协作机器人,且细分为如下三大场景

  • 初级,类似上条微博,面向高校实验室的具身「教学机器人」,及给青年少年小孩的「教育机器人」
  • 中级,面向小工厂或家务,硬件成本十来万到几十万,今24年q4 开搞
  • 高级,南京那边目前早已在弄的 面向大规模工业场景的协作机器人

而既然在机器人这个行业,故我们对该领域的各种前沿进展始终保持极高关注,从而注意到了李飞飞团队提出的这个ReKep,其对应的论文为《》,当然,你在阅读该文时,也欢迎使用我司七月开发的基于大模型的翻译系统(目前已上线七月官网,左边英文 右边中文,如此中英文对照下的阅读效率奇快无比)

如我司机器人技术合伙人姚博士所说,“ReKep的方法基于大模型,增加运动限制,而我们之前做的更多基于端到端的专用数据模型”

第一部分 ReKep的提出背景与其关键架构

1.1 提出背景

机器人操作涉及与环境中物体的复杂交互,这些交互通常可以在空间和时间域中表示为约束

考虑下图中的倒茶任务:机器人必须抓住把手,在运输过程中保持杯子直立,最后对齐壶嘴与目标容器,并以正确的角度倾斜杯子进行倒茶

在这里,这些约束不仅编码了中间的子目标(例如,对齐壶嘴),还编码了过渡行为(例如,在运输过程中保持杯子直立),这些约束共同决定了机器人在环境中行动的空间、时间和其他组合要求

然而,有效地为各种现实任务制定这些约束条件面临着重大挑战,之前有不少相关的工作,而李飞飞团队则提出了关系关键点约束——ReKep,具体来说

  1. 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
  2. 每个函数由关键点上的(可能是非线性的)算术运算组成,并编码了它们之间的期望“关系”,这些关键点可能属于环境中的不同实体,例如机器人手臂、物体部件和其他代理
  3. 虽然每个关键点仅包含其在世界坐标系中的三维笛卡尔坐标,但如果关键点之间的刚性rigidity得到保证,多个关键点可以共同指定线、面和/或三维旋转

他们在顺序操作问题的背景下研究 ReKep,其中每个任务涉及具有时空依赖关系的多个阶段——例如,上述示例中的“抓取”、“对齐”和“倒入”

虽然约束通常是根据任务手动定义的[4],但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)

具体来说

  1. 我们利用LVM在场景中提出细粒度且语义有意义的关键点,并利用VLM将这些约束从覆盖有建议关键点的视觉输入写成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.
  2. 通过生成的约束条件,可以使用现成的求解器,通过重新评估基于跟踪关键点的约束来生成机器人动作
    With the generated constraints, off-the-shelf solvers can be used to produce robot actions by re-evaluating the constraints based on tracked keypoints.
  3. 受[Sequence-of-constraints mpc: Reactive timing-optimal control of sequential manipulation]的启发,采用分层优化程序——将操作任务表述为具有关系关键点约束的分层优化问题
    首先解决一组路径点作为子目标(表示为SE(3)末端执行器姿态)
    然后解决退化视界控制问题,以获得实现每个子目标的密集动作序列
    Inspired by [7], we employ a hierarchical optimization procedure 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.2 ReKep的关键方法与其架构

1.2.1 什么是关系关键点约束

ReKep 的一个实例是一个函数f: \mathbb{R}^{K \times 3} \rightarrow \mathbb{R},它将关键点数组(记作 k)映射到一个无界的成本,其中f(\boldsymbol{k}) \leq 0表示约束已满足

函数 f 实现为一个无状态的 Python 函数,包含对关键点进行的 NumPy [123] 操作,这些操作可能是非线性和非凸的

本质上,ReKep 的一个实例编码了关键点之间的一种期望的空间关系,这些关键点可能属于机器人手臂、物体部件和其他代理

然而,一个操作任务通常涉及多个空间关系,并且可能具有多个时间上相互依赖的阶段,每个阶段都包含不同的空间关系

为此,我们将任务分解为N个阶段,并使用ReKep为每个阶段i \in\{1, \ldots, N\}指定两种约束

  1. 一组子目标约束\mathcal{C}_{\text {sub-goal }}^{(i)}=\left\{f_{\text {sub-goal }, 1}^{(i)}(\boldsymbol{k}), \ldots, f_{\text {sub-goal }, n}^{(i)}(\boldsymbol{k})\right\}
    其中,f_{\text {sub-goal }}^{(i)}编码了在阶段i结束时要实现的一个关键点关系,相当于是阶段目标
  2. 一组路径约束\mathcal{C}_{\text {path }}^{(i)}=\left\{f_{\text {path }, 1}^{(i)}(\boldsymbol{k}), \ldots, f_{\text {path }, m}^{(i)}(\boldsymbol{k})\right\}
    其中,f_{\text {path }}^{(i)}编码了在阶段i内每个状态都要满足的一个关键点关系,相当于是路径

考虑下图中的倒水任务,它包括三个阶段:抓取、对齐和倒水

  1. 阶段1的子目标约束(sub-goal constraint),将末端执行器拉向茶壶把手
  2. 然后阶段2的子目标约束指定茶壶嘴需要在杯口上方。此外,阶段2的路径约束(path constraint),确保茶壶保持直立,以避免在运输过程中洒出
  3. 最后,阶段3的子目标约束指定了理想的倒水角度

1.2.2 通过ReKep将操作任务视为带约束的优化问题

使用ReKep作为表示约束的一般工具,采用[7]中的公式,并展示如何将操作任务表述
为涉及\mathcal{C}_{\text {sub-goal }}^{(i)}\mathcal{C}_{\text {path }}^{(i)}的约束优化问题

将末端执行器姿态表示为\mathbf{e} \in S E(3),为了执行操作任务,旨在通过如下公式化控制问题来获得整体离散时间轨迹\mathbf{e}_{1: T}(记为方程1)

\underset{\mathbf{e}_{1: T}, g_{1: N}}{\arg \min } \sum_{i=1}^{N}\left[\lambda_{\text {sub-goal }}^{(i)}\left(\mathbf{e}_{g_{i}}\right)+\sum_{t=g_{i-1}}^{g_{i}} \lambda_{\text {path }}^{(i)}\left(\mathbf{e}_{t}\right)\right] \text { s.t. }\left\{\begin{array}{l} \mathbf{e}_{1}=\mathbf{e}_{\text {init }}, g_{0}=1,0<g_{i}<g_{i+1} \\ f\left(\boldsymbol{k}_{g_{i}} \leq 0, \forall f \in \mathcal{C}_{\text {sub-goal }}^{(i)}\right. \\ f\left(\boldsymbol{k}_{t}\right) \leq 0, \forall f \in \mathcal{C}_{\text {path }}^{(i)}, t=g_{i-1}, \ldots, g_{i} \\ \boldsymbol{k}_{t+1}=h\left(\boldsymbol{k}_{t}, \mathbf{e}_{t}\right), t=1, \ldots, T-1 \end{array}\right.

  • 其中 ,e_t表示在时间t的末端执行器姿态,g_{i} \in\{1, \ldots, T\}是从阶段ii+ 1的转换时间,这些也是辅助决策变量,k_t是时间t的关键点位置数组, h是关键点的前向模型,\lambda_{\text {sub-goal }}^{(i)}\lambda_{\text {path }}^{(i)}是子目标和路径问题的辅助成本函数(例如,碰撞避免)
  • 即,对于每个阶段i,上述优化函数应找到作为下一个子目标的末端执行器姿态及其时间序列以及一系列姿态\mathbf{e}_{g_{i-1}: g_{i}},以在给定的一组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.2.3 分解与算法实现

为了解实时解决方程1,可以对整个问题进行分解,只优化立即下一个子目标及其到达子
目标的相应路径(算法1中的伪代码)

  1. 所有优化问题均使用SciPy [ Scipy 1.0: fundamental algorithms for scientific computing in python]实现和解决,决策变量归一化到 [0, 1]
  2. 它们最初使用双重退火 [126] 和 SLSQP [127] 作为局部优化器(大约1秒)解决,然后基于先前的解决方案仅使用局部优化器以大约10 Hz1的频率解决

// 待更

1.2.4 关键点提议和ReKep生成

// 待更


网站公告

今日签到

点亮在社区的每一天
去签到