Gemini Robotics-ER 1.5

Gemini Robotics-ER 1.5 یک مدل بینایی-زبانی (VLM) است که قابلیت‌های عامل‌محور Gemini را به رباتیک می‌آورد. این مدل برای استدلال پیشرفته در دنیای فیزیکی طراحی شده است و به ربات‌ها اجازه می‌دهد داده‌های بصری پیچیده را تفسیر کنند، استدلال فضایی انجام دهند و اقدامات را از طریق دستورات زبان طبیعی برنامه‌ریزی کنند.

ویژگی‌ها و مزایای کلیدی:

  • خودمختاری پیشرفته: ربات‌ها می‌توانند در محیط‌های باز، استدلال کنند، سازگار شوند و به تغییرات پاسخ دهند.
  • تعامل با زبان طبیعی: با فعال کردن انجام وظایف پیچیده با استفاده از زبان طبیعی، استفاده از ربات‌ها را آسان‌تر می‌کند.
  • هماهنگ‌سازی وظایف: دستورات زبان طبیعی را به زیروظایف تجزیه می‌کند و با کنترل‌کننده‌ها و رفتارهای موجود ربات ادغام می‌شود تا وظایف بلندمدت را انجام دهد.
  • قابلیت‌های چندمنظوره: اشیاء را مکان‌یابی و شناسایی می‌کند، روابط اشیاء را درک می‌کند، برای گرفتن و مسیر حرکت آنها برنامه‌ریزی می‌کند و صحنه‌های پویا را تفسیر می‌کند.

این سند شرح می‌دهد که این مدل چه کاری انجام می‌دهد و شما را با چندین مثال آشنا می‌کند که قابلیت‌های عاملانه‌ی این مدل را برجسته می‌کند.

اگر می‌خواهید مستقیماً شروع کنید، می‌توانید مدل را در Google AI Studio امتحان کنید.

در استودیوی هوش مصنوعی گوگل امتحان کنید

ایمنی

اگرچه Gemini Robotics-ER 1.5 با در نظر گرفتن ایمنی ساخته شده است، اما مسئولیت حفظ محیط امن در اطراف ربات بر عهده شماست. مدل‌های هوش مصنوعی مولد می‌توانند اشتباه کنند و ربات‌های فیزیکی می‌توانند باعث آسیب شوند. ایمنی یک اولویت است و ایمن‌سازی مدل‌های هوش مصنوعی مولد هنگام استفاده با رباتیک دنیای واقعی، یک حوزه فعال و حیاتی از تحقیقات ما است. برای کسب اطلاعات بیشتر، از صفحه ایمنی رباتیک Google DeepMind دیدن کنید.

شروع کار: پیدا کردن اشیاء در یک صحنه

مثال زیر یک مورد استفاده رایج در رباتیک را نشان می‌دهد. این مثال نشان می‌دهد که چگونه می‌توان با استفاده از متد generateContent ، یک تصویر و یک متن را به مدل ارسال کرد تا لیستی از اشیاء شناسایی شده به همراه نقاط دوبعدی مربوطه‌شان را دریافت کرد. مدل، نقاط مربوط به مواردی را که در یک تصویر شناسایی کرده است، به همراه مختصات و برچسب‌های دوبعدی نرمال شده آنها، برمی‌گرداند.

شما می‌توانید از این خروجی با یک API رباتیک استفاده کنید یا یک مدل بینایی-زبان-عمل (VLA) یا هر تابع تعریف‌شده توسط کاربر شخص ثالث دیگری را فراخوانی کنید تا اقداماتی را برای انجام توسط ربات ایجاد کنید.

پایتون

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
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(api_key=YOUR_API_KEY)

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

image_response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
        types.Part.from_bytes(
            data=image_bytes,
            mime_type='image/png',
        ),
        PROMPT
    ],
    config = types.GenerateContentConfig(
        temperature=0.5,
        thinking_config=types.ThinkingConfig(thinking_budget=0)
    )
)

print(image_response.text)

استراحت

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

curl -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-robotics-er-1.5-preview:generateContent \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -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": 0.5,
      "thinkingConfig": {
        "thinkingBudget": 0
      }
    }
  }'

خروجی یک آرایه JSON حاوی اشیاء خواهد بود که هر کدام دارای یک point (مختصات نرمال شده [y, x] ) و یک label شناسایی کننده شیء هستند.

جی‌سون

[
  {"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 1.5 به ربات‌های شما اجازه می‌دهد تا با استفاده از درک فضایی، دنیای فیزیکی را درک کرده و در آن کار کنند. این نرم‌افزار با دریافت ورودی تصویر/ویدئو/صوت و زبان طبیعی، موارد زیر را انجام می‌دهد:

  • درک اشیاء و زمینه صحنه : اشیاء را شناسایی می‌کند و دلایل ارتباط آنها با صحنه، از جمله کارایی‌های آنها را بیان می‌کند.
  • دستورالعمل‌های انجام وظیفه را می‌فهمد : وظایف داده شده به زبان طبیعی، مانند «موز را پیدا کن» را تفسیر می‌کند.
  • استدلال مکانی و زمانی : توالی اعمال و نحوه تعامل اشیاء با یک صحنه در طول زمان را درک کنید.
  • ارائه خروجی ساختاریافته : مختصات (نقاط یا کادرهای محصورکننده) نشان‌دهنده مکان‌های شیء را برمی‌گرداند.

این امر ربات‌ها را قادر می‌سازد تا محیط خود را به صورت برنامه‌ریزی‌شده «ببینند» و «درک» کنند.

Gemini Robotics-ER 1.5 همچنین عامل‌گرا است، به این معنی که می‌تواند وظایف پیچیده (مانند "سیب را در کاسه قرار دهید") را به وظایف فرعی تقسیم کند تا وظایف بلندمدت را هماهنگ کند:

  • توالی‌بندی زیروظایف : دستورات را به یک توالی منطقی از مراحل تجزیه می‌کند.
  • فراخوانی توابع/اجرای کد : مراحل را با فراخوانی توابع/ابزارهای ربات موجود یا اجرای کد تولید شده اجرا می‌کند.

برای اطلاعات بیشتر در مورد نحوه فراخوانی تابع با Gemini، به صفحه فراخوانی تابع مراجعه کنید.

استفاده از بودجه فکری با Gemini Robotics-ER 1.5

Gemini Robotics-ER 1.5 دارای یک بودجه تفکر انعطاف‌پذیر است که به شما امکان کنترل بر بده‌بستان‌های تأخیر در مقابل دقت را می‌دهد. برای وظایف درک فضایی مانند تشخیص اشیاء، این مدل می‌تواند با یک بودجه تفکر کوچک به عملکرد بالایی دست یابد. وظایف استدلال پیچیده‌تر مانند شمارش و تخمین وزن از یک بودجه تفکر بزرگتر بهره‌مند می‌شوند. این به شما امکان می‌دهد تا نیاز به پاسخ‌های با تأخیر کم را با نتایج با دقت بالا برای وظایف چالش‌برانگیزتر متعادل کنید.

برای کسب اطلاعات بیشتر در مورد بودجه‌بندی‌های متفکرانه، به صفحه قابلیت‌های اصلی متفکرانه مراجعه کنید.

قابلیت‌های عامل‌محور برای رباتیک

این بخش به بررسی قابلیت‌های مختلف Gemini Robotics-ER 1.5 می‌پردازد و نحوه استفاده از این مدل را برای کاربردهای ادراک، استدلال و برنامه‌ریزی رباتیک نشان می‌دهد.

مثال‌های این بخش، قابلیت‌هایی از اشاره و یافتن اشیاء در یک تصویر گرفته تا برنامه‌ریزی مسیرها و هماهنگ‌سازی وظایف بلندمدت را نشان می‌دهند. برای سادگی، قطعه کدها برای نمایش اعلان و فراخوانی generate_content API کاهش یافته‌اند. کد کامل قابل اجرا و همچنین مثال‌های اضافی را می‌توانید در کتاب آشپزی رباتیک پیدا کنید.

اشاره به اشیاء

اشاره کردن و پیدا کردن اشیاء در تصاویر یا فریم‌های ویدیویی، یک مورد استفاده رایج برای مدل‌های بینایی و زبان (VLM) در رباتیک است. مثال زیر از مدل می‌خواهد که اشیاء خاصی را در یک تصویر پیدا کند و مختصات آنها را در یک تصویر برگرداند.

پایتون

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client(api_key=YOUR_API_KEY)

# Load your image and set up your prompt
with open('path/to/image-with-objects.jpg', 'rb') as f:
    image_bytes = f.read()

queries = [
    "bread",
    "starfruit",
    "banana",
]

prompt = f"""
    Get all points matching the following objects: {', '.join(queries)}. The
    label returned should be an identifying name for the object detected.
    The answer should follow the json format:

    [{{"point": , "label": }}, ...]. The points are in

    [y, x] format normalized to 0-1000.
    """

image_response = client.models.generate_content(
  model=MODEL_ID,
  contents=[
    types.Part.from_bytes(
      data=image_bytes,
      mime_type='image/jpeg',
    ),
    prompt
  ],
  config = types.GenerateContentConfig(
      temperature=0.5,
      thinking_config=types.ThinkingConfig(thinking_budget=0)
  )
)

print(image_response.text)

خروجی مشابه مثال شروع کار خواهد بود، یک JSON حاوی مختصات اشیاء یافت شده و برچسب‌های آنها.

[
  {"point": [671, 317], "label": "bread"},
  {"point": [738, 307], "label": "bread"},
  {"point": [702, 237], "label": "bread"},
  {"point": [629, 307], "label": "bread"},
  {"point": [833, 800], "label": "bread"},
  {"point": [609, 663], "label": "banana"},
  {"point": [770, 483], "label": "starfruit"}
]

مثالی که نقاط اشیاء شناسایی شده در یک تصویر را نمایش می‌دهد

از دستور زیر برای درخواست از مدل جهت تفسیر دسته‌های انتزاعی مانند "میوه" به جای اشیاء خاص و یافتن تمام نمونه‌ها در تصویر استفاده کنید.

پایتون

prompt = f"""
        Get all points for fruit. 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."""

برای سایر تکنیک‌های پردازش تصویر، به صفحه درک تصویر مراجعه کنید.

ردیابی اشیاء در یک ویدیو

Gemini Robotics-ER 1.5 همچنین می‌تواند فریم‌های ویدیویی را برای ردیابی اشیاء در طول زمان تجزیه و تحلیل کند. برای مشاهده لیست فرمت‌های ویدیویی پشتیبانی شده، به ورودی‌های ویدیویی مراجعه کنید.

دستور پایه زیر برای یافتن اشیاء خاص در هر فریمی که مدل تجزیه و تحلیل می‌کند، استفاده می‌شود:

پایتون

# Define the objects to find
queries = [
    "pen (on desk)",
    "pen (in robot hand)",
    "laptop (opened)",
    "laptop (closed)",
]

base_prompt = f"""
  Point to the following objects in the provided image: {', '.join(queries)}.
  The answer should follow the json format:

  [{{"point": , "label": }}, ...].

  The points are in [y, x] format normalized to 0-1000.
  If no objects are found, return an empty JSON list [].
  """

خروجی، حرکت یک خودکار و لپ‌تاپ را در فریم‌های ویدیویی نشان می‌دهد.

مثالی که ردیابی اشیاء را از طریق فریم‌ها در یک GIF نشان می‌دهد

برای کد کامل قابل اجرا، به کتاب آشپزی رباتیک مراجعه کنید.

تشخیص شیء و جعبه‌های محدودکننده

فراتر از نقاط منفرد، این مدل همچنین می‌تواند جعبه‌های مرزی دوبعدی را برگرداند و یک ناحیه مستطیلی محصورکننده یک شیء را ارائه دهد.

این مثال، کادرهای مرزی دوبعدی را برای اشیاء قابل شناسایی روی یک جدول درخواست می‌کند. به مدل دستور داده شده است که خروجی را به ۲۵ شیء محدود کند و چندین نمونه را به صورت منحصر به فرد نامگذاری کند.

پایتون

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client(api_key=YOUR_API_KEY)

# Load your image and set up your prompt
with open('path/to/image-with-objects.jpg', 'rb') as f:
    image_bytes = f.read()

prompt = """
      Return bounding boxes as a JSON array with labels. Never return masks
      or code fencing. Limit to 25 objects. Include as many objects as you
      can identify on the table.
      If an object is present multiple times, name them according to their
      unique characteristic (colors, size, position, unique characteristics, etc..).
      The format should be as follows: [{"box_2d": [ymin, xmin, ymax, xmax],
      "label": <label for the object>}] normalized to 0-1000. The values in
      box_2d must only be integers
      """

image_response = client.models.generate_content(
  model=MODEL_ID,
  contents=[
    types.Part.from_bytes(
      data=image_bytes,
      mime_type='image/jpeg',
    ),
    prompt
  ],
  config = types.GenerateContentConfig(
      temperature=0.5,
      thinking_config=types.ThinkingConfig(thinking_budget=0)
  )
)

print(image_response.text)

در ادامه، جعبه‌های برگردانده شده از مدل نمایش داده می‌شوند.

مثالی که کادرهای مرزی را برای اشیاء یافت شده نشان می‌دهد

برای کد کامل قابل اجرا، به کتاب آشپزی رباتیک مراجعه کنید. صفحه درک تصویر همچنین مثال‌های بیشتری از وظایف بصری مانند قطعه‌بندی و تشخیص اشیا دارد.

نمونه‌های بیشتری از کادرهای مرزی را می‌توانید در صفحه درک تصویر بیابید.

مسیرها

Gemini Robotics-ER 1.5 می‌تواند توالی‌هایی از نقاط را ایجاد کند که یک مسیر را تعریف می‌کنند و برای هدایت حرکت ربات مفید هستند.

این مثال یک مسیر برای حرکت یک خودکار قرمز به یک سازمان‌دهنده، شامل نقطه شروع و مجموعه‌ای از نقاط میانی، درخواست می‌کند.

پایتون

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client(api_key=YOUR_API_KEY)

# Load your image and set up your prompt
with open('path/to/image-with-objects.jpg', 'rb') as f:
    image_bytes = f.read()

points_data = []
prompt = """
        Place a point on the red pen, then 15 points for the trajectory of
        moving the red pen to the top of the organizer on the left.
        The points should be labeled by order of the trajectory, from '0'
        (start point at left hand) to <n> (final point)
        The answer should follow the json format:
        [{"point": <point>, "label": <label1>}, ...].
        The points are in [y, x] format normalized to 0-1000.
        """

image_response = client.models.generate_content(
  model=MODEL_ID,
  contents=[
    types.Part.from_bytes(
      data=image_bytes,
      mime_type='image/jpeg',
    ),
    prompt
  ],
  config = types.GenerateContentConfig(
      temperature=0.5,
  )
)

print(image_response.text)

پاسخ، مجموعه‌ای از مختصات است که مسیر مسیری را که خودکار قرمز باید برای تکمیل وظیفه حرکت دادن آن روی سازمان‌دهنده دنبال کند، توصیف می‌کند:

[
  {"point": [550, 610], "label": "0"},
  {"point": [500, 600], "label": "1"},
  {"point": [450, 590], "label": "2"},
  {"point": [400, 580], "label": "3"},
  {"point": [350, 550], "label": "4"},
  {"point": [300, 520], "label": "5"},
  {"point": [250, 490], "label": "6"},
  {"point": [200, 460], "label": "7"},
  {"point": [180, 430], "label": "8"},
  {"point": [160, 400], "label": "9"},
  {"point": [140, 370], "label": "10"},
  {"point": [120, 340], "label": "11"},
  {"point": [110, 320], "label": "12"},
  {"point": [105, 310], "label": "13"},
  {"point": [100, 305], "label": "14"},
  {"point": [100, 300], "label": "15"}
]

مثالی که مسیر برنامه‌ریزی‌شده را نشان می‌دهد

ارکستراسیون

Gemini Robotics-ER 1.5 می‌تواند استدلال مکانی سطح بالاتری را انجام دهد، اعمال را استنتاج کند یا مکان‌های بهینه را بر اساس درک زمینه‌ای شناسایی کند.

ایجاد فضای کافی برای لپ‌تاپ

این مثال نشان می‌دهد که چگونه Gemini Robotics-ER می‌تواند در مورد یک فضا استدلال کند. این اعلان از مدل می‌خواهد که مشخص کند کدام شیء باید جابجا شود تا فضا برای یک مورد دیگر ایجاد شود.

پایتون

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client(api_key=YOUR_API_KEY)

# Load your image and set up your prompt
with open('path/to/image-with-objects.jpg', 'rb') as f:
    image_bytes = f.read()

prompt = """
          Point to the object that I need to remove to make room for my laptop
          The answer should follow the json format: [{"point": <point>,
          "label": <label1>}, ...]. The points are in [y, x] format normalized to 0-1000.
        """

image_response = client.models.generate_content(
  model=MODEL_ID,
  contents=[
    types.Part.from_bytes(
      data=image_bytes,
      mime_type='image/jpeg',
    ),
    prompt
  ],
  config = types.GenerateContentConfig(
      temperature=0.5,
      thinking_config=types.ThinkingConfig(thinking_budget=0)
  )
)

print(image_response.text)

پاسخ شامل مختصات دوبعدی شیء است که به سوال کاربر پاسخ می‌دهد، در این مورد، شیء‌ای که باید حرکت کند تا جایی برای لپ‌تاپ ایجاد شود.

[
  {"point": [672, 301], "label": "The object that I need to remove to make room for my laptop"}
]

مثالی که نشان می‌دهد کدام شیء باید برای شیء دیگر جابجا شود

بسته بندی ناهار

این مدل همچنین می‌تواند دستورالعمل‌هایی برای کارهای چند مرحله‌ای ارائه دهد و برای هر مرحله به اشیاء مربوطه اشاره کند. این مثال نشان می‌دهد که چگونه مدل مجموعه‌ای از مراحل را برای بسته‌بندی یک کیسه ناهار برنامه‌ریزی می‌کند.

پایتون

from google import genai
from google.genai import types

# Initialize the GenAI client and specify the model
MODEL_ID = "gemini-robotics-er-1.5-preview"
client = genai.Client(api_key=YOUR_API_KEY)

# Load your image and set up your prompt
with open('path/to/image-of-lunch.jpg', 'rb') as f:
    image_bytes = f.read()

prompt = """
          Explain how to pack the lunch box and lunch bag. Point to each
          object that you refer to. Each point should be in the format:
          [{"point": [y, x], "label": }], where the coordinates are
          normalized between 0-1000.
        """

image_response = client.models.generate_content(
  model=MODEL_ID,
  contents=[
    types.Part.from_bytes(
      data=image_bytes,
      mime_type='image/jpeg',
    ),
    prompt
  ],
  config = types.GenerateContentConfig(
      temperature=0.5,
      thinking_config=types.ThinkingConfig(thinking_budget=0)
  )
)

print(image_response.text)

پاسخ این سوال، مجموعه‌ای از دستورالعمل‌های گام به گام در مورد نحوه بسته‌بندی کیسه ناهار از ورودی تصویر است.

تصویر ورودی

تصویری از یک جعبه ناهار و وسایلی که باید داخل آن قرار دهید

خروجی مدل

Based on the image, here is a plan to pack the lunch box and lunch bag:

1.  **Pack the fruit into the lunch box.** Place the [apple](apple), [banana](banana), [red grapes](red grapes), and [green grapes](green grapes) into the [blue lunch box](blue lunch box).
2.  **Add the spoon to the lunch box.** Put the [blue spoon](blue spoon) inside the lunch box as well.
3.  **Close the lunch box.** Secure the lid on the [blue lunch box](blue lunch box).
4.  **Place the lunch box inside the lunch bag.** Put the closed [blue lunch box](blue lunch box) into the [brown lunch bag](brown lunch bag).
5.  **Pack the remaining items into the lunch bag.** Place the [blue snack bar](blue snack bar) and the [brown snack bar](brown snack bar) into the [brown lunch bag](brown lunch bag).

Here is the list of objects and their locations:
*   [{"point": [899, 440], "label": "apple"}]
*   [{"point": [814, 363], "label": "banana"}]
*   [{"point": [727, 470], "label": "red grapes"}]
*   [{"point": [675, 608], "label": "green grapes"}]
*   [{"point": [706, 529], "label": "blue lunch box"}]
*   [{"point": [864, 517], "label": "blue spoon"}]
*   [{"point": [499, 401], "label": "blue snack bar"}]
*   [{"point": [614, 705], "label": "brown snack bar"}]
*   [{"point": [448, 501], "label": "brown lunch bag"}]

فراخوانی یک API ربات سفارشی

این مثال، هماهنگ‌سازی وظایف را با یک API ربات سفارشی نشان می‌دهد. این مثال یک API شبیه‌سازی شده را معرفی می‌کند که برای عملیات برداشتن و گذاشتن طراحی شده است. وظیفه این است که یک بلوک آبی را برداشته و آن را در یک کاسه نارنجی قرار دهید:

تصویری از بلوک و کاسه

مشابه سایر مثال‌های این صفحه، کد کامل قابل اجرا در کتاب آشپزی رباتیک موجود است.

اولین قدم این است که هر دو مورد را با استفاده از دستور زیر پیدا کنید:

پایتون

prompt = """
            Locate and point to the blue block and the orange bowl. 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.
          """

پاسخ مدل شامل مختصات نرمال‌شده بلوک و کاسه است:

[
  {"point": [389, 252], "label": "orange bowl"},
  {"point": [727, 659], "label": "blue block"}
]

این مثال از API ربات شبیه‌سازی‌شده‌ی زیر استفاده می‌کند:

پایتون

def move(x, y, high):
  print(f"moving to coordinates: {x}, {y}, {15 if high else 5}")

def setGripperState(opened):
  print("Opening gripper" if opened else "Closing gripper")

def returnToOrigin():
  print("Returning to origin pose")

مرحله بعدی فراخوانی دنباله‌ای از توابع API به همراه منطق لازم برای اجرای عمل است. اعلان زیر شامل توضیحی از API ربات است که مدل باید هنگام تنظیم این وظیفه از آن استفاده کند.

پایتون

prompt = f"""
    You are a robotic arm with six degrees-of-freedom. You have the
    following functions available to you:

    def move(x, y, high):
      # moves the arm to the given coordinates. The boolean value 'high' set
      to True means the robot arm should be lifted above the scene for
      avoiding obstacles during motion. 'high' set to False means the robot
      arm should have the gripper placed on the surface for interacting with
      objects.

    def setGripperState(opened):
      # Opens the gripper if opened set to true, otherwise closes the gripper

    def returnToOrigin():
      # Returns the robot to an initial state. Should be called as a cleanup
      operation.

    The origin point for calculating the moves is at normalized point
    y={robot_origin_y}, x={robot_origin_x}. Use this as the new (0,0) for
    calculating moves, allowing x and y to be negative.
    Perform a pick and place operation where you pick up the blue block at
    normalized coordinates ({block_x}, {block_y}) (relative coordinates:
    {block_relative_x}, {block_relative_y}) and place it into the orange
    bowl at normalized coordinates ({bowl_x}, {bowl_y})
    (relative coordinates: {bowl_relative_x}, {bowl_relative_y}).
    Provide the sequence of function calls as a JSON list of objects, where
    each object has a "function" key (the function name) and an "args" key
    (a list of arguments for the function).
    Also, include your reasoning before the JSON output.
    For example:
    Reasoning: To pick up the block, I will first move the arm to a high
    position above the block, open the gripper, move down to the block,
    close the gripper, lift the arm, move to a high position above the bowl,
    move down to the bowl, open the gripper, and then lift the arm back to
    a high position.
"""

در ادامه، خروجی احتمالی مدل بر اساس اعلان و API ربات آزمایشی نشان داده شده است. این خروجی شامل فرآیند تفکر مدل و وظایفی است که به عنوان نتیجه برنامه‌ریزی شده است. همچنین خروجی فراخوانی‌های تابع ربات که مدل به ترتیب با هم انجام داده است را نشان می‌دهد.

Reasoning: To perform the pick and place operation, I will first move the
robotic arm to a high position above the blue block to ensure clearance. Then, I
will open the gripper in preparation for grasping. Next, I will lower the arm to
the surface level to position the gripper around the block and close the gripper
to secure it. After picking up the block, I will lift the arm to clear the
surface and move towards the orange bowl, maintaining a high position to avoid
collisions. Once positioned above the bowl, I will lower the arm to place the
block inside. I will then open the gripper to release the block. Finally, I will
lift the arm out of the bowl and call `returnToOrigin` to reset the robot's
state.

[
  {
    "function": "move",
    "args": [
      163,
      427,
      true
    ]
  },
  {
    "function": "setGripperState",
    "args": [
      true
    ]
  },
  {
    "function": "move",
    "args": [
      163,
      427,
      false
    ]
  },
  {
    "function": "setGripperState",
    "args": [
      false
    ]
  },
  {
    "function": "move",
    "args": [
      163,
      427,
      true
    ]
  },
  {
    "function": "move",
    "args": [
      -247,
      90,
      true
    ]
  },
  {
    "function": "move",
    "args": [
      -247,
      90,
      false
    ]
  },
  {
    "function": "setGripperState",
    "args": [
      true
    ]
  },
  {
    "function": "move",
    "args": [
      -247,
      90,
      true
    ]
  },
  {
    "function": "returnToOrigin",
    "args": []
  }
]


Executing Function Calls:
moving to coordinates: 163, 427, 15
Opening gripper
moving to coordinates: 163, 427, 5
Closing gripper
moving to coordinates: 163, 427, 15
moving to coordinates: -247, 90, 15
moving to coordinates: -247, 90, 5
Opening gripper
moving to coordinates: -247, 90, 15
Returning to origin pose

اجرای کد

Gemini Robotics-ER 1.5 می‌تواند کد پایتون را برای انجام وظایفی که نیاز به اقدامات پویا دارند، مانند بزرگنمایی در یک ناحیه تصویر برای جزئیات بهتر، پیشنهاد و اجرا کند.

این مثال نشان می‌دهد که چگونه مدل می‌تواند با استفاده از ابزار اجرای کد ، پیشنهاد «بزرگنمایی» روی ناحیه خاصی از تصویر را بدهد، که سپس این کار را برای پاسخ به سوال کاربر انجام می‌دهد.

پایتون

from google import genai
from google.genai import types

client = genai.Client(api_key=YOUR_API_KEY)

MODEL_ID = "gemini-robotics-er-1.5-preview"

# Load your image and set up your prompt
with open('path/to/image-of-object.jpg', 'rb') as f:
    image_bytes = f.read()
prompt = """
          What is the air quality reading? Using the code execution feature,
          zoom in on the image to take a closer look.
        """

response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
        types.Part.from_bytes(
            data=image_bytes,
            mime_type='image/jpeg',
        ),
        prompt
    ],
    config = types.GenerateContentConfig(
        temperature=0.5,
        tools=[types.Tool(code_execution=types.ToolCodeExecution)]
    )
)

for part in response.candidates[0].content.parts:
    if part.text is not None:
        print(part.text)
    if part.executable_code is not None:
        print(part.executable_code.code)
    if part.code_execution_result is not None:
        print(part.code_execution_result.output)

شکل زیر یک پاسخ مدل ممکن برای این کار را نشان می‌دهد. خروجی، کد تولید مدل برای بزرگنمایی تصویر جهت خوانایی بهتر صفحه نمایش را نشان می‌دهد. همچنین فرآیند تفکر پیرامون تنظیمات انجام شده برای برش را نشان می‌دهد. برای نمونه کامل خروجی، به کتاب آشپزی رباتیک مراجعه کنید.

# Detect relevant objects and output in json format
# [{"box_2d": [379, 407, 481, 553], "label": "display"}]
from PIL import Image

# Open the image
img = Image.open("input_file_0.jpeg")

# Define the coordinates for cropping (normalized to 0-1000)
# Based on visual inspection, the display is roughly centered around [430, 430] to [500, 500] in a 1000x1000 scale.
# Let's try to zoom in on the display area.
# Bounding box for display: [ymin, xmin, ymax, xmax] in pixels.
# From visual inspection of the original image (size 90489 bytes, resolution
unknown but let's assume a standard aspect ratio and roughly 1000x1000 for
relative positioning),
# the display is located at approximately y=380-480, x=410-540.
# Let's define a larger area around it for context.
# Let's say we want to crop from y=350 to y=550 and x=350 to x=650.

...

thought
The crop was too tight and only captured part of the display. Let's adjust the bounding box.
The previous crop was `img.crop((400, 350, 600, 500))`. This means xmin=400, ymin=350, xmax=600, ymax=500.
The display is centered around x=480, y=430.
The previous crop captured the left side of the display.
Let's expand the x range to the right and y range to cover the whole circle.
New bounding box estimate: ymin=370, xmin=400, ymax=500, xmax=600.
Let's try again with a wider crop.
# Detect relevant objects and output in json format
# [{"box_2d": [379, 407, 481, 553], "label": "display"}]
from PIL import Image

# Open the image
img = Image.open("input_file_0.jpeg")

# Define the coordinates for cropping (normalized to 0-1000)
…

The reading of 14 falls into the "Moderate" category.
The prompt asks for the "air quality reading", which can be interpreted as
either the numerical value or the categorical description. Given the numerical
value is explicitly displayed, it's the primary reading.

Let's provide the numerical value as the reading.
The reading is 014.
Based on the display on the air purifier, the air quality reading is **014**.

بهترین شیوه‌ها

برای بهینه‌سازی عملکرد و دقت برنامه‌های رباتیک شما، درک چگونگی تعامل مؤثر با مدل Gemini بسیار مهم است. این بخش، بهترین شیوه‌ها و استراتژی‌های کلیدی برای ایجاد دستورالعمل‌ها، مدیریت داده‌های بصری و ساختاردهی وظایف را برای دستیابی به قابل اعتمادترین نتایج، تشریح می‌کند.

  1. از زبان واضح و ساده استفاده کنید.

    • زبان طبیعی را بپذیرید : مدل Gemini برای درک زبان طبیعی و محاوره‌ای طراحی شده است. دستورالعمل‌های خود را به گونه‌ای ساختار دهید که از نظر معنایی واضح باشد و نحوه ارائه دستورالعمل‌ها توسط یک فرد به طور طبیعی را منعکس کند.

    • از اصطلاحات روزمره استفاده کنید : به جای اصطلاحات فنی یا تخصصی، زبان رایج و روزمره را انتخاب کنید. اگر مدل آنطور که انتظار می‌رود به یک اصطلاح خاص پاسخ نمی‌دهد، سعی کنید آن را با یک مترادف رایج‌تر جایگزین کنید.

  2. ورودی بصری را بهینه کنید.

    • بزرگنمایی برای جزئیات : هنگام کار با اشیایی که کوچک هستند یا تشخیص آنها در یک نمای بازتر دشوار است، از تابع کادر محدودکننده برای جداسازی شیء مورد نظر استفاده کنید. سپس می‌توانید تصویر را به این قسمت برش داده و تصویر جدید و فوکوس شده را برای تجزیه و تحلیل دقیق‌تر به مدل ارسال کنید.

    • آزمایش با نورپردازی و رنگ : درک مدل می‌تواند تحت تأثیر شرایط نوری چالش‌برانگیز و کنتراست رنگ ضعیف قرار گیرد.

  3. مشکلات پیچیده را به مراحل کوچکتر تقسیم کنید. با پرداختن به هر مرحله کوچکتر به صورت جداگانه، می‌توانید مدل را به سمت نتیجه‌ای دقیق‌تر و موفق‌تر هدایت کنید.

  4. بهبود دقت از طریق اجماع. برای کارهایی که به دقت بالایی نیاز دارند، می‌توانید چندین بار با همان دستور، مدل را پرس‌وجو کنید. با میانگین‌گیری از نتایج برگشتی، می‌توانید به یک «اجماع» برسید که اغلب دقیق‌تر و قابل اعتمادتر است.

محدودیت‌ها

هنگام توسعه با Gemini Robotics-ER 1.5، محدودیت‌های زیر را در نظر بگیرید:

  • وضعیت پیش‌نمایش: این مدل در حال حاضر در مرحله پیش‌نمایش است. APIها و قابلیت‌ها ممکن است تغییر کنند و بدون آزمایش کامل، ممکن است برای برنامه‌های حیاتی در مرحله تولید مناسب نباشد.
  • تأخیر: پرس‌وجوهای پیچیده، ورودی‌های با وضوح بالا یا thinking_budget گسترده می‌توانند منجر به افزایش زمان پردازش شوند.
  • توهمات: مانند تمام مدل‌های زبانی بزرگ، Gemini Robotics-ER 1.5 می‌تواند گاهی اوقات "توهم" ایجاد کند یا اطلاعات نادرستی ارائه دهد، به خصوص برای دستورات مبهم یا ورودی‌های خارج از توزیع.
  • وابستگی به کیفیت دستور: کیفیت خروجی مدل به شدت به وضوح و اختصاصی بودن دستور ورودی وابسته است. دستورهای مبهم یا با ساختار ضعیف می‌توانند منجر به نتایج نامطلوب شوند.
  • هزینه محاسباتی: اجرای مدل، به خصوص با ورودی‌های ویدیویی یا thinking_budget بالا، منابع محاسباتی را مصرف می‌کند و هزینه‌هایی را به همراه دارد. برای جزئیات بیشتر به صفحه Thinking مراجعه کنید.
  • انواع ورودی: برای جزئیات بیشتر در مورد محدودیت‌های هر حالت، به مباحث زیر مراجعه کنید.

اطلاعیه حریم خصوصی

شما تصدیق می‌کنید که مدل‌های ارجاع‌شده در این سند ("مدل‌های رباتیک") از داده‌های ویدیویی و صوتی برای کار و جابجایی سخت‌افزار شما مطابق با دستورالعمل‌های شما استفاده می‌کنند. بنابراین، شما می‌توانید مدل‌های رباتیک را به گونه‌ای اداره کنید که داده‌های افراد قابل شناسایی، مانند صدا، تصویر و داده‌های شباهت ("داده‌های شخصی")، توسط مدل‌های رباتیک جمع‌آوری شود. اگر تصمیم بگیرید که مدل‌های رباتیک را به روشی که داده‌های شخصی را جمع‌آوری می‌کند، اداره کنید، موافقت می‌کنید که به هیچ فرد قابل شناسایی اجازه تعامل یا حضور در منطقه اطراف مدل‌های رباتیک را نخواهید داد، مگر اینکه و تا زمانی که این افراد قابل شناسایی به اندازه کافی از این واقعیت که داده‌های شخصی آنها ممکن است توسط گوگل ارائه و استفاده شود، همانطور که در شرایط خدمات اضافی Gemini API که در https://ai.google.dev/gemini-api/terms ("شرایط") آمده است، از جمله مطابق با بخش "نحوه استفاده گوگل از داده‌های شما" ذکر شده است، مطلع شده و رضایت خود را اعلام کرده باشند. شما تضمین خواهید کرد که چنین اطلاعیه‌ای، جمع‌آوری و استفاده از داده‌های شخصی را طبق مفاد مندرج در شرایط، مجاز می‌داند و با استفاده از تکنیک‌هایی مانند محو کردن چهره و اجرای مدل‌های رباتیک در مناطقی که افراد قابل شناسایی در آنها حضور ندارند، تا حد امکان، تلاش‌های تجاری معقولی را برای به حداقل رساندن جمع‌آوری و توزیع داده‌های شخصی به کار خواهید گرفت.

قیمت‌گذاری

برای اطلاعات دقیق در مورد قیمت گذاری و مناطق موجود، به صفحه قیمت گذاری مراجعه کنید.

نسخه‌های مدل

ملک توضیحات
کد مدل gemini-robotics-er-1.5-preview
انواع داده پشتیبانی شده را

ورودی‌ها

متن، تصویر، ویدئو، صدا

خروجی

متن

محدودیت‌های توکن [*]

محدودیت توکن ورودی

۱,۰۴۸,۵۷۶

محدودیت توکن خروجی

۶۵,۵۳۶

قابلیت‌های

تولید صدا

پشتیبانی نمی‌شود

API دسته‌ای

پشتیبانی نمی‌شود

ذخیره سازی

پشتیبانی نمی‌شود

اجرای کد

پشتیبانی شده

فراخوانی تابع

پشتیبانی شده

اتصال به زمین با نقشه‌های گوگل

پشتیبانی نمی‌شود

تولید تصویر

پشتیبانی نمی‌شود

API زنده

پشتیبانی نمی‌شود

جستجوی اتصال به زمین

پشتیبانی شده

خروجی‌های ساختاریافته

پشتیبانی شده

تفکر

پشتیبانی شده

زمینه URL

پشتیبانی شده

نسخه
برای جزئیات بیشتر، الگوهای نسخه مدل را مطالعه کنید.
  • پیش‌نمایش: gemini-robotics-er-1.5-preview
آخرین به‌روزرسانی سپتامبر ۲۰۲۵
حد آستانه دانش ژانویه ۲۰۲۵

مراحل بعدی

  • قابلیت‌های دیگر را بررسی کنید و به آزمایش با دستورالعمل‌ها و ورودی‌های مختلف ادامه دهید تا کاربردهای بیشتری برای Gemini Robotics-ER 1.5 کشف کنید. برای مثال‌های بیشتر به کتاب آشپزی رباتیک مراجعه کنید.
  • برای کسب اطلاعات بیشتر در مورد چگونگی ساخت مدل‌های Gemini Robotics با در نظر گرفتن ایمنی، به صفحه ایمنی رباتیک Google DeepMind مراجعه کنید.
  • برای اطلاع از آخرین به‌روزرسانی‌های مدل‌های Gemini Robotics، به صفحه اصلی Gemini Robotics مراجعه کنید.