视觉语言模型 (VLM)通过将文本和图像投影到同一嵌入空间,将基础 LLM 的强大语言理解能力与 视觉 Transformer (ViT)的视觉功能相结合。它们可以获取非结构化多模态数据并对其进行推理,然后以结构化格式返回输出。这些模型基于广泛的预训练基础构建,可以通过提供新提示或参数高效微调轻松适应不同的视觉相关任务。
它们还可以与实时数据源和工具集成,以便在不知道答案时请求获取更多信息,或在知道答案时采取行动。LLMs 和 VLMs 可以充当代理,对数据进行推理,帮助机器人执行可能难以定义的有意义任务。
在之前的文章“ 使用 NVIDIA Jetson 实现生成式 AI ”中,我们展示了您可以在 NVIDIA Jetson Orin 设备上运行 LLM 和 VLM,从而实现各种新功能,例如零样本物体检测、视频字幕和在边缘设备上生成文本。
但是,如何将这些进步应用于机器人的感知和自主性呢?在将这些模型部署到现场时,您会面临哪些挑战?
在本文中,我们将讨论 ReMEmbR,这是一个结合了 LLM、VLM 和 检索增强型生成 (RAG)技术的项目,可让机器人在数小时到数天的时间内,根据他们在远程部署中看到的内容进行推理并采取行动。
ReMEmbR 的内存构建阶段使用 VLM 和 向量数据库 来高效构建长视距语义内存。然后,ReMEmbR 的查询阶段使用 LLM 代理 对该内存进行推理。它是完全开源的,在设备上运行。
ReMEmbR 解决了在机器人应用中使用大型语言模型(LLM)和视觉语言模型(VLM)时面临的许多挑战:
- 如何处理大型上下文。
- 如何推理空间内存。
- 如何构建基于提示的智能体,以查询更多数据,直到用户的问题得到解答?
为了更进一步,我们还构建了一个在真正的机器人上使用 ReMEmbR 的示例。我们使用 Nova Carter 和 NVIDIA Isaac ROS 完成了这一步,并分享了我们的代码和步骤。有关更多信息,请参阅以下资源:
- ReMEmbR 网站
- /NVIDIA-AI-IOT/记住 GitHub 库
- ReMEmbR:为机器人导航构建长距时空记忆并进行推理 论文
用于长视距空间和时间记忆、推理和动作的 ReMEmbR
人们越来越期望机器人能够长时间感知周围环境并与之交互。机器人每次部署数小时(如果不是数天的话),它们会顺便感知不同的物体、事件和位置。
为了让机器人能够在机器人长期部署的场景中理解和回答需要复杂多步骤推理的问题,我们构建了 ReMEmbR,这是一种用于实体化机器人的检索增强型内存。
ReMEmbR 为机器人构建了可扩展的长视距内存和推理系统,从而提高了机器人的感知问答和语义行动能力。ReMEmbR 包含两个阶段:内存构建和查询。
在构建内存阶段,我们利用 VLM 通过向量数据库构建结构化内存。在查询阶段,我们构建了一个 LLM 代理,可以在循环中调用不同的检索函数,最后回答用户提出的问题。
构建更智能的内存
ReMEmbR 的内存构建阶段就是让内存为机器人服务。当机器人部署数小时或数天后,您需要一种高效的方式来存储这些信息。视频易于存储,但难以查询和理解。
在构建内存期间,我们会截取短视频片段,使用 NVIDIA VILA 字幕 VLM 为其添加说明,然后将其嵌入到 MilvusDB 向量数据库中。我们还会将机器人的时间戳和坐标信息存储到向量数据库中。
这种设置使我们能够高效地存储和查询机器人内存中的各种信息。通过使用 VILA 捕获视频片段并将其嵌入到 MilvusDB 向量数据库中,系统可以记住 VILA 可以捕获的任何内容,从人走动等动态事件和特定的小物体,一直到更一般的类别。
使用向量数据库可以轻松添加供 ReMEmbR 考虑的新型信息。
ReMEmbR 智能体
鉴于数据库中存储的内存如此长,标准 LLM 难以在漫长的环境中快速推理。
ReMEmbR 代理的 LLM 后端可以是 NVIDIA NIM 微服务 、本地设备上的 LLM 或其他 LLM API。当用户提出问题时,LLM 会生成对数据库的查询,并以迭代方式检索相关信息。LLM 可以根据用户的询问内容查询文本信息、时间信息或位置信息。这个过程会重复,直到问题得到解答。
我们为 LLM 智能体使用这些不同的工具,使机器人不仅能够回答有关如何前往特定位置的问题,还能够实现空间和时间推理。图 2 展示了此推理阶段的外观。
在真正的机器人上部署 ReMEmbR
为了演示如何将 ReMEmbR 集成到真正的机器人中,我们使用 ReMEmbR 以及 NVIDIA Isaac ROS 和 Nova Carter 构建了一个演示。Isaac ROS 基于开源 ROS 2 软件框架构建,是一套加速计算包和 AI 模型的集合,可为全球的 ROS 开发者带来 NVIDIA 的加速能力。
在演示中,机器人回答问题并指导人们了解办公室环境。为了揭开构建应用程序的神秘面纱,我们想分享一下我们采取的步骤:
- 构建占用率网格图
- 运行内存构建器
- 运行 RembR 代理
- 添加语音识别
构建占用率网格图
第一步是创建环境地图。为了构建向量数据库,ReMEmbR 需要访问单目摄像头图像以及全局位置(姿态)信息。
根据您所处的环境或平台,获取全局姿态信息可能具有挑战性。幸运的是,使用 Nova Carter 时,这一点非常简单。Nova Carter 由 Nova Orin 参考架构提供支持,是一个完整的机器人开发平台,可加速新一代自主移动机器人(AMR)的开发和部署。它可能配备 3D LIDAR,以生成准确且全局一致的指标地图。
通过遵循 Isaac ROS 文档 ,我们通过远程操作机器人快速构建了占用率地图。该地图后来用于在构建 ReMEmbR 数据库时进行定位,以及在最终机器人部署时进行路径规划和导航。
运行内存构建器
创建环境地图后,第二步是填充 ReMEmbR 使用的向量数据库。为此,我们远程操作机器人,同时运行 AMCL 进行全局定位。有关如何使用 Nova Carter 执行此操作的更多信息,请参阅 教程:使用 Isaac Perceptor 和 Nav2 进行自主导航 。
在后台运行定位后,我们又启动了两个专用于内存构建阶段的 ROS 节点。
第一个 ROS 节点运行 VILA 模型,为机器人摄像头图像生成说明。该节点在设备上运行,因此即使网络是间歇性的,我们仍然可以构建可靠的数据库。
借助于量化和推理的 NanoLLM ,在 Jetson 上运行此节点变得更加容易。 Jetson AI 实验室中包含了此库以及许多其他库。甚至还有最近发布的 ROS 包( ros2_nanollm ),可轻松将 NanoLLM 模型与 ROS 应用集成。
第二个 ROS 节点订阅 VILA 生成的描述以及 AMCL 节点估计的全局姿态。它为描述构建文本嵌入,并将姿态、文本、嵌入和时间戳存储在向量数据库中。
运行 ReMEmbR 代理
填充向量数据库后,ReMEmbR 智能体拥有回答用户查询和生成有意义的操作所需的一切。
第三步是运行 实时演示 。为了使机器人的内存保持静态,我们禁用了图像字幕和内存构建节点,并启用了 ReMEmbR 代理节点。如前所述,ReMEmbR 代理负责接受用户查询、查询向量数据库,并确定机器人应采取的适当操作。在本例中,该操作是与用户查询对应的目标目标姿态。
然后,我们通过手动输入用户查询对系统进行端到端测试:
“带我去最近的电梯”“带我去找点零食”
ReMEmbR 智能体确定最佳目标姿态并将其发布到 /goal_pose
主题。然后,路径规划器生成全局路径,供机器人遵循以导航至此目标。
添加语音识别
在真实的应用中,用户可能无法访问终端输入查询,因此需要一种与机器人交互的直观方式。为此,我们通过集成语音识别来为智能体生成查询,从而使应用更进一步。
在 Jetson Orin 平台上,集成语音识别非常简单。为此,我们编写了一个 ROS 节点,用于包装最近发布的 WhisperTRT 项目。WhisperTRT 使用 NVIDIA TensorRT 优化 OpenAI 的 Whisper 模型,从而在 NVIDIA Jetson AGX Orin 和 NVIDIA Jetson Orin Nano 上实现低延迟的推理。
WhisperTRT ROS 节点使用 PyAudio 直接访问麦克风,并在语音主题上发布识别到的语音。
全部整合在一起
结合所有组件,我们创建了机器人完整的演示 。
开始使用
我们希望本文能激励您探索机器人领域的 生成式 AI 。如需详细了解本文中的内容,试用 ReMEmBr 代码,并开始构建您自己的生成式 AI 机器人应用,请参阅以下资源:
- ReMEmbR 网站
- /NVIDIA-AI-IOT/记住 GitHub 库
- ReMEmbR:为机器人导航构建长时空记忆并进行推理 论文
- NVIDIA Isaac ROS 文档
- Nova Carter
- NVIDIA Jetson AI 实验室
注册 NVIDIA 开发者计划 ,获取有关其他资源和参考架构的更新,以支持您的开发目标。
随时了解 LinkedIn 、 Instagram 、 X 和 Facebook 上的最新动态。如需了解更多信息,请浏览 我们的文档 ,并通过 我们的开发者论坛 和 YouTube 频道加入机器人社区。欢迎关注 我们的自主培训 和网络会议( Isaac ROS 和 Isaac Sim )。