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

news2024/9/19 7:25:26

前言

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

// 待更

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2145782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux嵌入式相机 — 项目总结

main函数执行流程 1、初始化触摸屏 Touch_screen_Init();struct tsdev *ts NULL; ts ts_setup(NULL, 0); //以阻塞打开2、初始化 LCD LCD_Init(void); 通过 ioctl 函数获取 LCD 的固定参数、可变参数&#xff0c;得到分辨率、bpp、一行的长度&#xff08;以字节为单位&a…

如何创建和编辑抖音百科词条,不会的找我们代创建!

如何创建和编辑抖音百科词条&#xff0c;不会的找我们代创建&#xff01; 如何创建抖音百科个人词条&#xff0c;个人抖音百科的创建 #抖音百科 #百科 #推广 做过百度百科的老板们注意了&#xff0c;等一下别划走。 2024 年品宣新风口出现了&#xff0c;抖音百科正在替代百度…

Unity Behavior Designe 可视化有限状态机(Composites篇)

对有限状态机这一个概念你可以看看这两篇文章&#xff1a; Unity 一个比较适合学习的FSM状态机(汉化和功能简述)-CSDN博客 C# x Unity面向对象补全计划 设计模式 之 实现一个简单的有限状态机-CSDN博客 当时我对代码下的有限状态机只有一个想法&#xff0c;设计巧妙&#…

数据结构与算法学习day21-回溯法

一、组合 1.题目 . - 力扣&#xff08;LeetCode&#xff09; 2思路 把组合问题抽象成树形结构&#xff08;N叉树&#xff09; 每次从集合中选取元素&#xff0c;可选择的范围随着选择的进行而收缩&#xff0c;调整可选择的范围。 图中可以发现n相当于树的宽度&#xff0c…

Linux(6)--CentOS目录

文章目录 1. 根目录2. cd目录切换命令3. CentOS目录介绍4. pwd命令介绍5. ls命令介绍5.1 ls5.2 ls -a5.3 ls -l 1. 根目录 Windows电脑的根目录是计算机(我的电脑)&#xff0c;然后C盘、D盘。 Linux系统的根目录是/&#xff0c;我们可以使用cd /进入根目录&#xff0c;然后使…

客户端/服务器的简易实现

目录 一,网络编程套接字 二,UDP/TCP的区别(​编辑) 三,UDP API使用 四,TCP API使用 一,网络编程套接字 socket socket(操作系统给应用程序的API,起了一个名字,就成为socket API) socket API提供了两套API分别为UDP和TCP: 二,UDP/TCP的区别() TCP有链接,可靠传输,面向字…

图解view_transformation(可视化BEV视角转换的过程)

BEV视图生成的流程总结&#xff1a; &#xff08;1&#xff09;生成视锥 &#xff08;2&#xff09;将视锥由uv坐标系转到EGO坐标系 &#xff08;3&#xff09;视锥体素化 &#xff08;4&#xff09;bev_pool &#xff08;1&#xff09;生成视锥 长宽数量: 模型输入图片尺寸//…

Winform登录实现及工具栏切换

1、登录实现 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace LoginApp {public par…

峟思传感器在水库坝体渗漏防治措施中的应用

在水库工程管理中&#xff0c;坝体渗漏是一个不容忽视的问题&#xff0c;它不仅影响水库的正常运行&#xff0c;还可能对下游地区造成严重的安全隐患。因此&#xff0c;采取有效的渗漏防治措施至关重要。在这一过程中&#xff0c;传感器作为关键的技术手段&#xff0c;发挥着不…

react + antDesignPro 企业微信扫码登录

效果 实现步骤 1、项目中document.ejs文件引入企微js链接 注意&#xff1a;技术栈是使用的react antDesignPro&#xff0c;不同的技术栈有不同的入口文件&#xff08;如vue在html文件引入&#xff09; <script src"https://wwcdn.weixin.qq.com/node/wework/wwopen/j…

02 ETH

以太坊与比特币有什么不同&#xff1f; 以太坊立足比特币创新之上&#xff0c;于 2015 年启动&#xff0c;两者之间有一些显著不同。 比特币就仅仅是比特币&#xff1b;以太坊包括以太币&#xff0c;以太币才是和比特币对等的存在。以太坊是可编程的&#xff0c;所以你可以在…

Mybatis+Druid+MybatisPlus多数据源配置

MybatisDruidMybatisPlus多数据源配置 平常我们使用的是 properties 或者 yaml 来配置数据库的地址、用户名、密码等 但是这样只能配置一个数据源 现在我们想在一个项目里面配置多个数据源&#xff0c;那么我们就需要配置自己的配置类 配置类和配置文件 Mybatismysqldruid配置…

[数据集][目标检测]棉花叶子病害检测数据集VOC+YOLO格式977张22类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;977 标注数量(xml文件个数)&#xff1a;977 标注数量(txt文件个数)&#xff1a;977 标注类别…

Linux标准IO-系统调用详解

1.1 系统调用 系统调用&#xff08;system call&#xff09;其实是 Linux 内核提供给应用层的应用编程接口&#xff08;API&#xff09;&#xff0c;是 Linux 应用层进入内核的入口。不止 Linux 系统&#xff0c;所有的操作系统都会向应用层提供系统调用&#xff0c;应用程序通…

软件测试技术之 GPU 单元测试是什么!

1 背景 测试是开发的一个非常重要的方面&#xff0c;可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题&#xff0c;但较差的测试往往总是导致故障和停机。 单元测试用于测试各个代码组件&#xff0c;并确保代码按照预期的方式工作。单…

《MmAP : Multi-Modal Alignment Prompt for Cross-Domain Multi-Task Learning》中文校对版

系列论文研读目录 文章目录 系列论文研读目录摘要1 引言2 相关工作3 方法3.1对比图像预训练3.2 多模式对齐提示3.3 多任务提示学习框架 4 实验4.1基准设置4.2实验结果4.3消融研究 5、结论 摘要 多任务学习&#xff08;Multi-Task Learning&#xff0c;MTL&#xff09;是为了同…

Vue3.0组合式API:使用defineEmits()实现子组件向父组件传递数据

1、使用 defineEmits() 函数 父组件通过使用 Prop 为子组件传递数据&#xff0c;但如果子组件要把数据传递回去&#xff0c;就需要使用自定义事件来实现。父组件可以通过 v-on 指令&#xff08;简写形式“”&#xff09;监听子组件实例的自定义事件&#xff0c;而子组件可以通…

大数据Flink(一百二十一):Flink CDC基本介绍

文章目录 Flink CDC基本介绍 一、什么是CDC 二、CDC的实现机制 三、​​​​​​​​​​​​​​传统 CDC ETL 分析 四、​​​​​​​​​​​​​​基于 Flink CDC 的 ETL 分析 五、​​​​​​​​​​​​​​什么是 Flink CDC 六、​​​​​​​​​​​​​​…

KeyError: u‘2‘

字典键的定义跟要求不一致 如&#xff1a;digit‘23’ (字符串&#xff09; 定义字典时 dict1{‘1’:X, ‘2’:X} 而不是dict1{1:X, 2:X}

8.2Roberts算子边缘检测

基本概念 Roberts算子是一种简单的一阶导数边缘检测算子&#xff0c;它通过计算图像在水平和垂直方向上的梯度来检测边缘。在OpenCV中&#xff0c;Roberts算子可以通过手动应用卷积核来实现。Roberts算子是一组2x2的小型滤波器&#xff0c;用于检测图像中的垂直和水平边缘。 …