Gemini Robotics ER 2 概览

Gemini Robotics ER 是一种视觉语言模型 (VLM),可为机器人技术带来对物理世界的高级推理能力。该模型可解读视觉数据、执行空间和时间推理、规划多步骤任务,并协调机器人和工具。

模型

Gemini Robotics ER 2 是我们推理模型的更新版本,可对机器人的物理环境进行精确推理。它专注于具身推理功能,例如机器人的智能体编排(例如,使用视觉-语言-动作 [VLA] 模型)、机器人视频理解(包括进度理解和成功检测)、仪器读取、指向和空间推理。

以下模型处于预览版阶段:

  • gemini-robotics-er-2-preview:基于 Gemini 3.5 Flash 构建,在空间推理、视频时刻查找、视频进度分类、多机器人编排和多步骤工具使用方面有所改进。如需了解技术规格、词元和配额限制、支持的功能、区域可用性和价格,请参阅 Gemini Robotics ER 2 模型信息页面。

本指南将 Google Gen AI SDK 与 Gemini Enterprise Agent Platform 搭配使用。每个示例都会使用 enterprise=True 初始化客户端,并使用 Google Cloud凭据进行身份验证,以便您可以使用自己的 Google Cloud 项目调用模型。

机器人功能

下表总结了 Gemini Robotics ER 2 的核心功能:

能力 说明 指南
空间推理 指向对象、在视频中跟踪对象、使用边界框检测对象、规划轨迹。 空间推理
智能体代码执行 使用代码执行功能缩放/剪裁图片、读取仪器和为场景添加注释。 智能体功能
任务编排 将空间推理与自定义机器人 API 相结合,完成长跨度任务。 任务编排
视频理解 从连续视频 Feed 中查找时刻和进行进度分类。 视频理解

准备工作

Agent Platform 使用 Google Cloud凭证进行身份验证,而不是使用 Gemini API 密钥。在运行示例之前,请完成以下设置:

  1. 安装 Google Gen AI SDK。

    pip install --upgrade google-genai
    
  2. 在 Google Cloud 项目中启用 API,并确保您有项目 ID。您可以使用现有项目,也可以创建新项目。

  3. 使用应用默认凭据 (ADC) 进行身份验证。对于本地开发,请运行:

    gcloud auth application-default login
    
  4. 使用 Agent Platform 后端初始化客户端。本页上的所有 Python 示例都使用以下客户端,因此请设置您自己的项目 ID:

    from google import genai
    
    client = genai.Client(
        enterprise=True,
        project="your-project-id",
        location="global",
    )
    

    或者,您可以设置 GOOGLE_GENAI_USE_ENTERPRISE=True 环境变量,而不是将 enterprise=True 传递给客户端。

开始使用

以下示例在图片中查找对象,并返回其归一化 2D 坐标和标签。您可以将此输出直接传递给机器人 API 或视觉语言动作 (VLA) 模型,以生成机器人动作。

Python

from google import genai
from google.genai import types

PROMPT = """
          Point to no more than 10 items in the image. The label returned
          should be an identifying name for the object detected.
          The answer should follow the json format: [{"point": <point>,
          "label": <label1>}, ...]. The points are in [y, x] format
          normalized to 0-1000.
        """
client = genai.Client(
    enterprise=True,
    project="your-project-id",
    location="global",
)

# Load your image
with open("my-image.png", 'rb') as f:
    image_bytes = f.read()

image_response = client.models.generate_content(
    model="gemini-robotics-er-2-preview",
    contents=[
        types.Part.from_bytes(
            data=image_bytes,
            mime_type='image/png',
        ),
        PROMPT
    ],
    config = types.GenerateContentConfig(
        temperature=1.0,
        thinking_config=types.ThinkingConfig(
            thinking_level=types.ThinkingLevel.HIGH
        ),
    )
)

print(image_response.text)

REST

# First, ensure you have the image file locally.
# Encode the image to base64
IMAGE_BASE64=$(base64 -w 0 my-image.png)

# Set your Google Cloud project and location.
export PROJECT_ID="your-project-id"
export LOCATION="global"
export MODEL="gemini-robotics-er-2-preview"

# For the "global" location, use the aiplatform.googleapis.com host.
# For a regional location, prefix the host with the region, for example:
# https://us-central1-aiplatform.googleapis.com

curl -X POST \
  "https://aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL}:generateContent" \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {
        "parts": [
          {
            "inlineData": {
              "mimeType": "image/png",
              "data": "'"${IMAGE_BASE64}"'"
            }
          },
          {
            "text": "Point to no more than 10 items in the image. The label returned should be an identifying name for the object detected. The answer should follow the json format: [{\"point\": [y, x], \"label\": <label1>}, ...]. The points are in [y, x] format normalized to 0-1000."
          }
        ]
      }
    ],
    "generationConfig": {
      "temperature": 1.0,
      "thinkingConfig": {
        "thinkingLevel": "HIGH"
      }
    }
  }'

输出将是一个包含对象的 JSON 数组,每个对象都有一个 point(归一化 [y, x] 坐标)和一个用于标识对象的 label。

JSON

[
  {"point": [376, 508], "label": "small banana"},
  {"point": [287, 609], "label": "larger banana"},
  {"point": [223, 303], "label": "pink starfruit"},
  {"point": [435, 172], "label": "paper bag"},
  {"point": [270, 786], "label": "green plastic bowl"},
  {"point": [488, 775], "label": "metal measuring cup"},
  {"point": [673, 580], "label": "dark blue bowl"},
  {"point": [471, 353], "label": "light blue bowl"},
  {"point": [492, 497], "label": "bread"},
  {"point": [525, 429], "label": "lime"}
]

下图展示了这些点的显示方式:

一个显示图片中对象点的示例

工作原理

Gemini Robotics ER 2 接受图片、视频或音频输入,并支持自然语言提示。它可识别对象,推断场景上下文和空间关系,并返回坐标或边界框等结构化输出。

它还具有智能体特性:可将复杂任务分解为子任务,并通过调用机器人函数或运行生成的代码来执行这些子任务。例如,“把苹果放进碗里”会变成一系列定位、抓取和放置步骤。

如需详细了解如何使用 Gemini 进行函数调用,请参阅函数调用页面。

安全

Gemini Robotics ER 2 在设计时就考虑到了安全性,但您有责任维护机器人周围的安全环境。生成式 AI 模型可能会出错,实体机器人可能会造成损害。安全是重中之重,确保生成式 AI 模型在与现实世界中的机器人结合使用时安全可靠,是我们研究的一个活跃且关键的领域。如需了解详情,请访问 Google DeepMind 机器人安全页面。

最佳做法

请遵循以下最佳实践,以便充分发挥 Gemini Robotics ER 2 的效用:

  1. 使用简单自然的语言。像对人说话一样,描述您希望机器人执行的操作。如果某个字词不起作用,请尝试使用常见的同义词。

  2. 优化视觉输入。在发送图片之前,请先裁剪或放大较小或不清晰的对象。光线和色彩对比度低可能会影响检测。

  3. 将复杂的任务分解为多个步骤。将每个步骤作为单独的提示发送,以提高每个子任务的准确性。

  4. 对于高精度任务,请多次查询并计算平均结果。这种共识方法可减少空间输出的方差。

限制

使用 Gemini Robotics ER 2 进行开发时,请考虑以下限制:

  • 延迟时间与性能:复杂的查询、高分辨率输入或 thinking_level.HIGH 可能会导致处理时间增加。使用 thinking_level.MEDIUM 可在延迟时间和性能之间取得良好平衡。
  • 幻觉:与所有大语言模型一样,Gemini Robotics ER 2 有时可能会产生“幻觉”或提供不正确的信息,尤其是在提示不明确或输入超出分布范围时。
  • 依赖于提示质量:模型输出的质量高度依赖于输入提示的清晰度和具体程度。模糊或结构不佳的提示可能会导致结果不理想。
  • 计算资源:运行模型(尤其是使用视频输入或 thinking_level.HIGH)会消耗额外的计算资源。如需了解详情,请参阅思考页面。
  • 输入类型:如需详细了解每种模态的限制,请参阅以下主题:

隐私权声明

您确认,本文档中提及的模型(以下简称“机器人模型”)会利用视频和音频数据,以便根据您的指令操作和移动您的硬件。因此,您在操作机器人模型时,机器人模型可能会收集身份可识别的用户的数据,例如语音、图像和肖像数据(“个人数据”)。如果您选择以收集个人数据的方式操作机器人模型,则表示您同意,除非且直到这些身份可识别的人员已充分了解并同意按照适用的 Agent Platform 服务条款中所述收集和使用其个人数据,否则您不会允许任何身份可识别的人员与机器人模型互动或出现在机器人模型周围区域。您应确保此类通知允许按照这些条款所述收集和使用个人数据,并且您应尽商业上合理的努力,通过使用面部模糊处理等技术,以及在不包含身份可识别的人员的区域操作机器人模型(在可行范围内),最大限度地减少个人数据的收集和分发。

后续步骤

如需详细了解 Gemini Robotics ER 2,请参阅以下资源: