点击蓝字,关注我们
1 具身智能概念介绍
1.1 具身智能定义
目前人工智能的进展,在诸多数据源和数据集(Youtube、Flickr、Facebook)、机器计算能力(CPU、GPU、TPU)的加持下,已经在CV、NLP上取得了许多任务(如目标检测、语义分割等)的重大进展。
但目前大部分深度学习模型训练时使用的数据来自于互联网(Internet AI),而并非来自现实世界的第一人称人类视角,这样训练得到的模型是旁观型的,它只能学习到数据中的固定模式并将其映射到标签层,并不能在真实世界中直接进行学习,也不能对真实世界作出直接影响。
而在自然界中,动物为了适应环境会不断地进化以更好的生存和生活。对于人类来说,从婴儿开始就扎根于真实世界,通过观察、移动、互动和与他人交谈来学习,因此人脑中的很多认知都依赖于主体物理身体特征与世界的连续型交互,而不是从混乱和随机的经验中学习,这才是人类感知世界的方式!智能体是在主体与环境的相互作用中出现的,并且是感觉活动的结果。
因此为了满足AI机器人能够像人类一样在真实世界中实践型学习,具身智能(Embodied AI)逐渐成为一个热门的讨论点,或许它就是通往通用人工智能的关键钥匙。具身的含义不是身体本身,而是与环境交互以及在环境中做事的整体需求和功能,这意味着机器人应该像人类一样通过观察、移动、说话和与世界互动来学习。
1.2 Internet AI和Embodied AI的区别?
旁观型标签学习方式 v.s. 实践性概念学习方法
Internet AI从互联网收集到的图像、视频或文本数据集中学习,这些数据集往往制作精良,其与真实世界脱节、难以泛化和迁移。
数据到标签的映射。
无法在真实世界进行体验学习。
无法在真实世界做出影响。
Embodied AI通过与环境的互动,虽然以第一视角得到的数据不够稳定,但这种类似于人类的自我中心感知中学习,从而从视觉、语言和推理到一个人工具象( artificial embodiment),可以帮助解决更多真实问题。
1.3 Embodied AI的挑战
一个Embodied AI中的经典任务如下图所示,智能体必须先理解问题“汽车的颜色是什么”,然后找到汽车,再回答问题是“橙色”。因此智能体必须根据其对世界的感知、潜在的物理约束以及对问题的理解,学习将其视觉输入映射到正确的动作。
主动感知。智能体收集的数据是在环境中采取的行动的结果,因此某种程度上它可以控制它想看到的像素。这与Internet AI中的静态数据集不同。
稀疏奖励。与监督学习不同,智能体会为每个动作收集即时奖励,但它们通常是稀疏的,大多数情况下,仅当它完成目标(例如“步行到汽车”)时才会提供正向奖励,但这会导致奖励稀疏。
1.4 Embodied AI的所需能力
Embodied AI一般需要测量、定位、导航、理解、实施、回答。主要有以下子任务:
Visual Odometry:使用视觉来传感器测量来智能体(比如无人机)的特定自由度下的姿态、速度等物理量,一般作为 GPS、惯性导航系统 (INS)、轮式里程计等的补充,它已被广泛应用于各种机器人。
Global Localization:给定环境地图和环境观察的情况下进行定位。
Visual Navigation:在三维环境中导航是在物理世界中运行的机器人的基本能力之一。
Grounded Language Learning:人类语言是这种交流最引人注目的方式,因此机器人必须要能够将语言、世界和行动联系起来。
Instruction Guided Visual Navigation:向机器人发出口头指令,然后希望它会执行和指令语义相关的任务,这也是多模态领域一个很重要的方向,视觉和语言导航 (VLN)。
Embodied Question Answering:即上图所示的例子,为了回答汽车的颜色是“橙色!”,它必须首先智能导航以探索环境,通过第一人称视觉收集信息,然后回答问题。因此它需要先主动感知、语言理解、目标驱动的导航、常识推理(如汽车通常位于房子的什么位置?),以及将语言转化为动作的基础(如将文本中的实体与相应的图像像素或动作序列相关联)。
1.5 数据集和虚拟环境
虚拟环境模拟器将承担以前由监督数据集扮演的角色。数据集一般由房屋、实验室、房间或外部世界的 3D 场景组成,然后模拟器允许具身agent与环境进行物理交互,如观察、移动并与环境交互等等,甚至可以与其他agent或人类交谈。为了使虚拟环境更贴近现实,其一般需要构建以下特征:
Environment。构建具体化的人工智能模拟器环境的方法主要有两种:基于游戏的场景构建(G)和基于世界的场景构建(W)。如下图左侧为游戏的画面场景和世界的房间场景。
Physics。模拟真实的物理属性,分为基本物理特征(B,如碰撞、刚体动力学和重力建模)和高级物理特征(A,如流体和软体物理学)。如下图右侧。
Object Type。用于创建模拟器的对象有两个主要源:数据集驱动的环境和资产驱动的环境。
Object Property。具有基本交互性的对象如碰撞、状态更改(如苹果被切成苹果片),因此可分为:可交互对象(I)和多个状态对象(M)。
Controller。用户和模拟器之间存在不同类型的控制器接口。如下图的python接口、机器人接口或VR接口。
Action。通过虚拟现实界面进行人机操作,分为机器人操作三层:导航(N)、原子动作(A)和人机交互(H)。
Multi-Agent。多代理拥有更广泛的实用价值,但目前涉及多代理强化学习的研究很少。
1.6 Embodied AI主要任务
具身智能研究任务主要类型分别是视觉探索、视觉导航和具身QA。
Visual Exploration:收集关于3D环境的信息,通常通过运动和感知,以更新其内部环境模型。
Visual Navigation:在有无外部先验或自然语言指令的情况下,将三维环境导航到目标。可以分为Point Navigation、Object Navigation、Navigation with Priors、Vision-and-Language Navigation。
Embodied QA:最重要的任务,需要拥有广泛的人工智能能力,如视觉识别、语言理解、问题回答、常识推理、任务规划和行动驱动导航。Multi-target embodied QA、Interactive Question Answering。
2 具身智能技术路线
Embodied AI:集成 环境理解、智能交互、认知推理、规划执行于一体的系统方案
环境理解:CV领域中做了很多的相关工作。比如目标检测模型,目标分割模型等等
智能交互:语音识别、大语言模型实现的拟人的交互(GPT-4o)
认知推理:通过对环境的理解,和对指令任务的匹配,利用大语言模型的内在推理能力,完成对复杂任务的拆解,从而完成要实现的任务。
规划执行:对大语言模型给出的拆解后的任务流程,调用相关的系统API,完成任务
2.1 大语言模型对具身智能的影响
大语言模型通过包罗万象的各种tokens的训练,蕴含的知识和思维逻辑能力,可以作为面向机器人的总体规划师(General Planner)
人类给出自然语言指令,同时通过文本的形式给出关于robot具有的能力的API定义。将人类的指令和API文档给到大语言模型,大语言模型会根据API文档生成一段可以执行的代码,机器人根据该代码,自主完成相应的任务。
2.2 场景理解
2.2.1 分割检测
分割 https://github.com/CASIA-IVA-Lab/FastSAM
检测
Meta 的 FAIR 实验室发布的Segment Anything Model (SAM),是一种最先进的图像分割模型,旨在改变计算机视觉领域。SAM 基于对自然语言处理 (NLP) 产生重大影响的基础模型(Foundation Model)。它专注于提示分割任务 (promptable segmentation tasks),使用提示工程来适应不同的下游分割问题。同时SAM3D可以将分割任务从二维转到三维的水平,可以在激光扫描下做分割任务。
https://openaccess.thecvf.com/content/CVPR2024/supplemental/Cheng_YOLO-World_Real-Time_Open-Vocabulary_CVPR_2024_supplemental.pdf
在YOLO-World模型中实现的开放词汇检测(Open-Voc Detection),可以从图片中找到某一个bonding box,使得其和用户的query匹配。同时也可以上升到三维,在点云中实现检测。
2.2.2 多模态Grounding
多模态大模型通过图像和文本的输入,获得图像中的基础的信息,实现像素级别的细粒度Grounding(相对于bonding box等信息密度更高),表征大语言模型的理解能力的大幅度提高。
https://arxiv.org/abs/2311.03356
上面第一个图可以看到模型很准确地对图像中的内容进行识别。虽然输入的图片是相同的,但是prompt的不同也会导致box圈出来的内容不同,prompt的多样性使得Grounding具有更好的针对性。
https://arxiv.org/abs/2311.12871
上升到3D,多模态,多任务的LLM,可以让机器人具有更加通用的场景理解能力。
2.3 数据引导
2.3.1 视频学习
https://arxiv.org/pdf/2403.12943
https://mimic-play.github.io/
对于具身智能来说,相应的数据集非常少。之所以叫做数据引导,是因为在该领域数据存在一个上限,很难到很大的规模。因此现在考虑使用已有的视频数据进行引导学习。用已有的视频引导机器人学习,因此不需要太多的数据,可以从广泛的互联网上筛选出来有用的数据。但是也有很大的缺陷,不仅是信息的表征完整度,还是内在的迁移能力等都有很大的局限性。
2.3.2 Light-weight Hardware
轻量级的硬件:没有包含庞大的躯干和双臂,只是对末端进行处理。
UMI https://arxiv.org/pdf/2402.10329
在一比一的假爪上安装摄像头,采集各种数据,采集完数据后部署到机器上面。(二指的开合假具)
DexCap https://arxiv.org/pdf/2403.07788(李飞飞团队)
人带上五指手套,通过深度摄像头对末端进行追踪,从而精确地捕捉到人在操作的时候末端的位置在3D环境中位置的表示,最后映射在四指的机器臂上。
HIRO Hand https://arxiv.org/pdf/2306.16857
和上面两种不太一样,上面两种都会有数据格式的转换,但是HIRO Hand是人在手上佩戴抓环和指套,相当于人手把手带着机械臂进行一些操作、抓取,这样收集的数据没有转换。
2.3.3 Heavy Hardware
重量级硬件,VR显示器+VR手套方案,成本很高,但是采集的信息的含量很高。
但是在硬件中采集,采集到的数据总归是有限的。
2.3.4 Generative Simulation
RoboGen https://arxiv.org/pdf/2311.01455
Propose- generate- learn cycle
先假设一个任务,然后基于提出的任务来生成环境,构建出来环境之后再进行学习。通过这样的闭环,实现针对不同任务的数据的大规模的收集。但是有一些问题,在propose和generate环节中可控性难以把握。
MimicGen https://arxiv.org/abs/2310.17596
demonstrations augmentation
基于之前收集到的一组展示,先进行MimicGen的分割分段,然后对其进行多样化,从而可以把一条数据扩展到很多条。相对于RoboGen,在数据收集的可控性上得到了一定的提升。
2.4 动作执行
重点是怎么去用神经网络的输出结果
2.4.1 Generative Imitation Learning 生成式模仿学习
ACT https://arxiv.org/pdf/2304.13705
直接把状态放到模型中,当作时间序列去处理,最后输出的也是时间序列。
Diffusion Policy https://ar5iv.labs.arxiv.org/html/2303.04137
把时间序列拆解到每一步,每一步进行diffusion。
2.4.2 Affordance可供性
Robo Affordances https://arxiv.org/abs/2004.07400
图片经过Affordances model之后生成出来两张图,第一张标出可以用来接触的像素点,第二张图标出可以接触的矢量方向。后续进一步对灵巧手可以做的动作更细一步划分。之后进一步上升到3D,直接在3D的点云上做的描述。
3D https://www.microsoft.com/en-us/research/uploads/prodnew/2024/04/SceneFun3D-preprint.pdf
2.4.3 Q&A from LLM
直接利用大语言模型做QA。
ManipLLM https://arxiv.org/pdf/2312.16217
利用大语言模型的理解和推理能力得到机器人要走的位置。用户输入Query,ManipLLM输出对应的文本,随后在文本中提取出contact的点和移动的具体方向。
https://arxiv.org/pdf/2403.11289
2.4.4 Prompt Planning from LLM
https://arxiv.org/abs/2311.17842
通过将用户的Prompt做拆解,从而把hard的任务转化为多个simple的任务,针对简单的方法调用API库等方式进行执行
2.4.5 Language Corrections
机器人在执行的过程中不可避免的会犯错,通过人的观察来阻止或者纠正犯错,从而更好地完成任务。
OLAF https://arxiv.org/pdf/2310.17555
Yell At Your Robot https://arxiv.org/pdf/2403.12910
在机器人完成任务的过程中,给出语言或文本的提示,帮助机器人更好地完成任务。
2.5 世界模型
Focus https://arxiv.org/pdf/2307.02427
Understanding the world in terms of objects and the possible interplays with them is an important cognition ability, especially in robotics manipulation, where many tasks require robot-object interactions.
3D VLA https://arxiv.org/pdf/2403.09631
输入模型一个点云,告诉模型要执行的操作,模型直接预测出下一个状态的点云。
LAPO https://arxiv.org/html/2312.10812v2
在图像层面预测当一个物体上下左右移动后,环境会变得怎么样,可以直接基于环境作出模型的预测。如果能有一个非常健全的模型预测,可以由此设计各种各样的控制器,也可以在完成各种操作时可以做到矫正,选择一个优的操作。
3 具身智能落地项目
3.1 具身智能操作系统
3.1.1 ROS2
机器人操作系统(Robot Operating System, ROS)自2007年诞生以来,已经极大地推动了机器人技术的发展。ROS提供了一套软件库与工具集,使得机器人的不同组件之间可以通信,并允许开发者在现有的操作系统(如Linux、Windows、Mac)上进行机器人研发。随着机器人技术的不断进步与复杂化,传统的ROS开始显示出其设计和架构的局限性,特别是在满足当今机器人技术发展中的稳定性、生命周期管理、多机协同以及数据加密等方面的需求。这些局限促成了ROS2的诞生。
ROS2不仅仅是传统ROS的升级版,而是一次彻底的革新和重新设计,它旨在解决随着机器人应用场景的不断扩展而出现的新挑战。ROS2在继承了ROS强大的功能和灵活的通信机制的基础上,对架构进行了全面的优化与改进,以适应更加多样化和高要求的机器人研发项目。
ROS2的主要特点和优势:
改进的通信机制:ROS2引入了DDS(Data Distribution Service)标准作为中间件,提高了数据的传输效率和系统的可扩展性。DDS支持更复杂的通信模型和更高级的服务质量(QoS)设置,使得ROS2能够更好地支持大规模和实时的机器人系统。
提高的系统稳定性:针对商业化和工业级应用的要求,ROS2在系统稳定性和可靠性上做了大量的优化。包括引入生命周期管理机制,使得系统的状态管理和错误处理更加规范和可控。
增强的安全特性:ROS2对数据通信的安全性给予了高度重视,通过加密、认证等手段提高数据传输的安全性,从而更好地保护机器人系统免受潜在的安全威胁。
更好的多机协作支持:ROS2优化了多机之间的通信机制,使得不同机器人之间或机器人与外部设备之间的协同工作更加高效和流畅。
ROS2的应用领域:
凭借以上特点,ROS2在多个领域都展现出了广泛的应用潜力,包括但不限于:
工业自动化:借助ROS2强大的通信能力和高稳定性,机器人可以更好地在复杂的工业环境下工作,例如在智能制造流水线上的精确搬运、装配等场景。
自主导航与地图构建:ROS2支持高级的路径规划与定位算法,适用于需要自主移动和环境感知能力的机器人,如清洁机器人、配送机器人等。
多机器人系统:在需要多个机器人协作完成任务的场景中,ROS2的多机通信和协同控制能力尤为重要,例如在自动化仓库和智能物流中的应用。
ROS2作为新一代的机器人操作系统,不仅继承了ROS的优良传统,还在性能、安全性、可用性等方面做了全面的提升。其全新的设计理念和丰富的功能,将为未来机器人技术的发展带来更广阔的空间。
3.1.2 dora-rs
在机器人技术领域,创建高效、灵活的机器人应用程序一直是一个挑战,其中涉及到硬件的集成、算法的开发以及人工智能模型的应用,这些组件之间的高效通信尤为关键。为了简化机器人应用的创建流程并提升性能,Dataflow-oriented Robotic Application(dora-rs)框架应运而生,dora-rs旨在快速而简便地构建机器人应用程序。
dora-rs 的核心特点:
跨语言支持:dora-rs 支持 Python、C、C++等语言,并且与 ROS2 紧密集成,使得软硬件之间的集成变得轻松。
低延迟通信:通过使用 zero-copy 的 Apache Arrow 消息,实现了低延迟的通信能力,大幅提升了数据处理效率。
尽管 dora-rs 还处于实验阶段,可能存在一些bug,但其开发团队正致力于提高稳定性,目标是打造一个高效且易用的机器人应用开发框架。
dora-rs的具体细节:
性能优势
相比于当前使用 Python 的 ROS2,dora-rs的速度可提高多达 17 倍。这得益于其自有的共享内存服务器和Apache Arrow 实现的零拷贝数据传输。
数据流范式
dora-rs 实现了一种声明式的数据流范式,将任务分割成独立进程中的节点。
节点可以是自定义的,其中 dora-rs 作为本地库嵌入。
运行时节点由 dora-rs 管理主循环,运行用户定义的操作符,并支持热重载功能。
通信机制
dora-rs 通过在同一机器上使用共享内存,在分布式机器上使用 TCP 进行节点间的通信。其共享内存实现能够跟踪跨进程的消息,并在消息过时时丢弃它们。此外,共享内存槽被缓存,避免了新的内存分配。
消息格式
节点间的通信采用 Apache Arrow 数据格式。Apache Arrow 是一种为平面和层级数据设计的通用内存格式,支持零拷贝读取,无需序列化开销即可实现快速数据访问。
运维检测
dora-rs 使用 OpenTelemetry 进行日志、指标和追踪记录,实现了数据和遥测信息之间的链接,使得 dora-rs 的遥测数据可以被大多数如 Elasticsearch、Prometheus、Datadog 等后端收集。
热重载功能
dora-rs 为 Python 实现了热重载功能,这意味着你可以在运行时更改 Python 代码,同时保持状态不变。通过使用特定的功能标记,dora-rs 会监视代码变更并重载已修改的节点,确保系统的灵活性和持续性能。
3.1.3 ROS2和dora-rs对比
3.2 具身智能应用项目
之所以使用dora-rs:让机器人程序的构建更加的简单,不需要c或者C++对底层进行开发,只需要使用python进行构建即可。
什么是机器人应用程序:
关键:多个循环并行运行,并且相互通信。例如,网络摄像头循环以一定的频率推送新图像。有一个独立的AI模型的循环,来进行计算。并且他们直接的操作是非阻塞的。关键是将他们绑定在一起,并以一种非常高效的方式去进行通信,这是dora-rs可以完成的事情。dora-rs引入节点的概念。节点是可以并行运行的独立主循环。边是进行数据交流的内容。节点之间是通过订阅/发布的模式进行通信的。完成这样的通信循环只需要YAML配置文件即可完成。
为了让数据的交换效率极高,需要一个统一的消息分享的方式。因为不可能每一种循环用一种语言进行交流,彼此之间无法快速沟通。在这里,dora使用的是arrow,它定义了一种统一的方式,例如定义数组。如果从C,C++转化到python,可以正常地进行沟通。在这种统一的内存布局的方式下,数据的传输就可以在不进行复制的情况下进行传输。可以将其看成是一个指针。在机器人上每个时刻都会有大量的数据,比如视频流,音频流等,如果需要复制,开销是非常大的。
在如此高性能通信的情况下,可以将大语言模型部署进行相互之间的通信,实现具身智能的demo
图生文:从图片中理解内容,并生成文字。可以将人说的话转换成文字进行输入,多模态大模型根据画面和人类的语言,生成文字,然后转成语音表达出来。
dora-rs还可以进行热启动,在修改某一行代码的时候,不需要关闭机器人,然后重新启动,重制各种不同的传感器。