Gemini Robotics-ER 1.5

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

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

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

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

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

در Google AI Studio امتحان کنید

ایمنی

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

شروع کار: یافتن اشیا در یک صحنه

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

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

پایتون

from google import genai
from google.genai import types

import IPython
from PIL import Image

# 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()

# Load your image
img = Image.open("my-image.png")
img = img.resize((800, int(800 * img.size[1] / img.size[0])), Image.Resampling.LANCZOS) # Resizing to speed-up rendering

image_response = client.models.generate_content(
    model=MODEL_ID,
    contents=[
        img,
        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 برای شناسایی شیء است.

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 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 کاهش یافته است. کد کامل قابل اجرا و همچنین نمونه های اضافی را می توان در کتاب آشپزی Robotics یافت.

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

اشاره کردن و یافتن اشیاء در تصاویر یا فریم‌های ویدئویی یک مورد استفاده رایج برای مدل‌های بینایی و زبان (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()

# 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": <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)

خروجی مشابه مثال شروع خواهد بود، یک 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": <point>, "label": <label1>\}\}, ...].
  The points are in [y, x] format normalized to 0-1000.
  If no objects are found, return an empty JSON list [].
  """

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

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

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

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

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

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

پایتون

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()

# 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)

در شکل زیر کادرهای برگشتی از مدل را نمایش می دهد.

نمونه ای که جعبه های محدود کننده اشیاء یافت شده را نشان می دهد

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

نمونه‌های جعبه محدودکننده اضافی را می‌توانید در صفحه درک تصویر پیدا کنید.

مسیرها

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()

# 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()

# 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()

# 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 ساختگی را معرفی می کند که برای عملیات انتخاب و مکان طراحی شده است. وظیفه این است که یک بلوک آبی را بردارید و آن را در یک کاسه نارنجی قرار دهید:

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

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

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

پایتون

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()

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=[
        img,
        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. از زبان روشن و ساده استفاده کنید.

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

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

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

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

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

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

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

محدودیت ها

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

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

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

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

قیمت گذاری

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

نسخه های مدل

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

ورودی ها

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

خروجی

متن

محدودیت های رمز [*]

محدودیت رمز ورودی

1,048,576

محدودیت نشانه خروجی

65,536

قابلیت های

تولید صدا

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

Batch API

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

ذخیره سازی

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

اجرای کد

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

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

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

تولید تصویر

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

Live API

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

جستجوی زمین

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

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

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

فکر کردن

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

زمینه URL

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

نسخه
الگوهای نسخه مدل را برای جزئیات بیشتر بخوانید.
  • پیش نمایش: gemini-robotics-er-1.5-preview
آخرین به روز رسانی سپتامبر 2025
برش دانش ژانویه 2025

مراحل بعدی