Gemini Robotics ER
Gemini Robotics ER
Gemini Robotics ER(체화 추론) 모델은 로봇이 물리적 세계를 지각하고 상호작용할 수 있게 해주는 비전-언어 모델(VLM)이에요. 시각 데이터를 해석하고, 공간·시간 추론을 수행하며, 다단계 작업을 계획하고, 로봇과 도구를 오케스트레이션해요.
출처: 원문
본문
모델
Gemini Robotics ER 2 모델은 Gemini Robotics의 최신 모델이에요. 로봇이 환경을 정확히 이해할 수 있게 하는 업데이트된 추론 모델이에요. 에이전트형 로봇 오케스트레이션(예: VLA 사용), 진행 이해와 성공 감지를 포함한 로봇 비디오 이해, 계측기 판독, 포인팅, 공간 추론 같은 체화 추론 기능에 특화되어 있어요.
Gemini Robotics ER 2 모델은 두 개의 모델 엔드포인트를 도입해요.
- gemini-robotics-er-2-preview: 표준 ER 2 모델. 개선된 공간 추론, 비디오 모멘트 찾기, 비디오 진행 분류, 다중 로봇 오케스트레이션, 다단계 도구 사용으로 Gemini 3.5 Flash 위에 구축되었어요.
- gemini-robotics-er-2-streaming-preview: Live API를 통한 실시간 스트리밍에 최적화. 연속 오디오와 비디오 입력을 처리하는 저지연 로봇 에이전트에 이 모델을 사용하세요.
Gemini Robotics ER 1.6을 사용하고 있다면 API 호출에서 model="gemini-robotics-er-1.6-preview"를 model="gemini-robotics-er-2-preview" 또는 model="gemini-robotics-er-2-streaming-preview"로 바꿔 Gemini Robotics ER 2로 업그레이드하세요. Gemini Robotics ER 1.6 모델은 8월 말에 종료될 예정이라는 점에 유의하세요.
Google AI Studio에서 Gemini Robotics ER 2 사용해 보기
로보틱스 기능
Gemini Robotics ER은 다양한 체화 추론 기능을 지원해요. 기능을 선택해 자세히 알아보세요.
| 기능 | 설명 | 가이드 |
|---|---|---|
| 공간 추론 | 객체를 가리키고, 비디오에서 추적하고, 경계 상자로 감지하며, 궤적을 계획해요. | 공간 추론 |
| 에이전트형 비전 | 코드 실행을 사용해 이미지 조작 도구를 활용해 다른 기능을 강화해요. | 에이전트형 비전 |
| 작업 오케스트레이션 | 공간 추론을 커스텀 로봇 API와 결합해 장기 작업을 완료해요. | 작업 오케스트레이션 |
| 스트리밍(Gemini Robotics ER 2 Streaming 엔드포인트 전용) | 저지연 함수 호출을 갖춘 실시간 로봇 에이전트를 위한 양방향 스트리밍. | 로보틱스용 스트리밍 |
| 비디오 진행(Gemini Robotics ER 2 전용) | 연속 비디오 피드에서 모멘트 찾기와 진행 분류. | 비디오 이해 |
시작하기
다음 예시는 이미지에서 객체를 찾고 정규화된 2D 좌표와 라벨을 반환해요. 이 출력을 로보틱스 API나 VLA 모델에 직접 전달해 로봇 동작을 생성할 수 있어요.
from google import genai
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()
uploaded_file = client.files.upload(file="my-image.png")
image_response = client.interactions.create(
model="gemini-robotics-er-2-preview",
input=[
{
"type": "image",
"uri": uploaded_file.uri,
"mime_type": uploaded_file.mime_type
},
{"type": "text", "text": PROMPT}
],
generation_config={"thinking_level": "high"},
)
print(image_response.output_text)
import { GoogleGenAI } from "@google/genai";
const 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.
`;
const client = new GoogleGenAI();
const uploadedFile = await client.files.upload({ file: "my-image.png" });
const imageResponse = await client.interactions.create({
model: "gemini-robotics-er-2-preview",
input: [
{
type: "image",
uri: uploadedFile.uri,
mime_type: uploadedFile.mimeType,
},
{ type: "text", text: PROMPT },
],
generation_config: { thinking_level: "high" },
});
console.log(imageResponse.output_text);
import com.google.genai.Client;
import com.google.genai.gaos.models.interactions.Content;
import com.google.genai.gaos.models.interactions.CreateModelInteraction;
import com.google.genai.gaos.models.interactions.GenerationConfig;
import com.google.genai.gaos.models.interactions.ImageContent;
import com.google.genai.gaos.models.interactions.ImageContentMimeType;
import com.google.genai.gaos.models.interactions.Interaction;
import com.google.genai.gaos.models.interactions.InteractionsInput;
import com.google.genai.gaos.models.interactions.Model;
import com.google.genai.gaos.models.interactions.TextContent;
import com.google.genai.gaos.models.interactions.ThinkingLevel;
import com.google.genai.gaos.models.operations.CreateInteractionRequestBody;
import com.google.genai.types.File;
import com.google.genai.types.UploadFileConfig;
import java.util.List;
Client client = new Client();
String 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.";
File uploadedFile =
client.files.upload(
new java.io.File("my-image.png"),
UploadFileConfig.builder().mimeType("image/png").build());
Content imageContent =
ImageContent.builder()
.uri(uploadedFile.uri().orElse(""))
.mimeType(ImageContentMimeType.of(uploadedFile.mimeType().orElse("image/png")))
.build();
Content textContent = TextContent.builder().text(prompt).build();
CreateModelInteraction params =
CreateModelInteraction.builder()
.model(Model.of("gemini-robotics-er-2-preview"))
.input(InteractionsInput.ofContent(List.of(imageContent, textContent)))
.generationConfig(
GenerationConfig.builder().thinkingLevel(ThinkingLevel.HIGH).build())
.build();
Interaction imageResponse =
client.interactions.create(CreateInteractionRequestBody.of(params)).interaction().get();
System.out.println(imageResponse.outputText().orElse(""));
package main
import (
"context"
"fmt"
"log"
"google.golang.org/genai"
"google.golang.org/genai/interactions/models/interactions"
"google.golang.org/genai/interactions/models/operations"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
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.`
uploadedFile, err := client.Files.UploadFromPath(ctx, "my-image.png", &genai.UploadFileConfig{
MIMEType: "image/png",
})
if err != nil {
log.Fatal(err)
}
res, err := client.Interactions.Create(ctx, operations.CreateInteractionRequest{
Body: operations.NewCreateInteractionRequestBody(interactions.CreateModelInteraction{
Model: interactions.Model("gemini-robotics-er-2-preview"),
Input: interactions.NewInteractionsInput([]interactions.Content{
interactions.NewContent(interactions.ImageContent{
URI: genai.Ptr(uploadedFile.URI),
MimeType: genai.Ptr(interactions.ImageMimeTypeImagePng),
}),
interactions.NewContent(interactions.TextContent{
Text: prompt,
}),
}),
GenerationConfig: &interactions.GenerationConfig{
ThinkingLevel: interactions.ThinkingLevelHigh.ToPointer(),
},
}),
})
if err != nil {
log.Fatal(err)
}
if res.Interaction.OutputText != nil {
fmt.Println(*res.Interaction.OutputText)
}
}
# 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/interactions" \
-H "x-goog-api-key: *** \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-robotics-er-2-preview",
"input": {
"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."
}
]
},
"generation_config": {
"thinking_config": {
"thinking_level": "high"
}
}
}'
출력은 각각 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은 자연어 프롬프트와 함께 이미지, 비디오, 오디오 입력을 받아요. 객체를 식별하고, 장면 컨텍스트와 공간 관계를 추론하며, 좌표나 경계 상자 같은 구조화된 출력을 반환해요.
Gemini Robotics ER은 또한 에이전트형이에요. 복잡한 작업을 하위 작업으로 나누고 로봇 함수를 호출하거나 생성된 코드를 실행해 실행해요. 예를 들어 "사과를 그릇에 넣어"는 위치 찾기, 잡기, 놓기 단계의 시퀀스가 돼요.
Gemini가 도구 호출을 실행하는 방법에 대한 자세한 내용은 함수 호출을 참조하세요.
안전
Gemini Robotics ER은 안전을 염두에 두고 구축되었지만, 로봇 주변에 안전한 환경을 유지하는 것은 사용자의 책임이에요. 생성형 AI 모델은 실수할 수 있고, 물리적 로봇은 손상을 일으킬 수 있어요. 자세한 내용은 Google DeepMind 로보틱스 안전 페이지를 방문하세요.
모범 사례
- 평이하고 자연스러운 언어를 사용하세요. 사람에게 하듯 로봇이 무엇을 하길 원하는지 설명하세요. 용어가 잘 작동하지 않으면 일반적인 동의어를 시도해 보세요.
- 시각 입력을 최적화하세요. 이미지를 보내기 전에 작거나 불명확한 객체로 크롭하거나 확대하세요. 조명과 낮은 색 대비는 감지에 영향을 줄 수 있어요.
- 복잡한 작업을 단계로 나누세요. 각 단계를 별도 프롬프트로 보내 모델이 집중하고 정확도를 높이세요.
- 고정밀 작업에서는 여러 번 질의하고 결과를 평균내세요. 이 합의 접근 방식은 공간 출력의 분산을 줄여요.
제한 사항
Gemini Robotics ER로 개발할 때 다음 제한 사항을 고려하세요.
- API 키 제한: Gemini API는 무제한 API 키의 요청을 받지 않으며
403 Forbidden오류를 반환해요. AI Studio에서 제한을 추가해 API 키를 보호하세요. 자세한 내용은 무제한 API 키 보호를 참조하세요. - 지연 시간 대 성능: 복잡한 쿼리, 고해상도 입력 또는 높은 thinking 수준은 처리 시간을 늘릴 수 있어요. thinking 수준은 지연 시간과 성능의 좋은 균형을 위해 medium을 사용하세요.
- 환각: 모든 대규모 언어 모델처럼 Gemini Robotics ER 모델은 특히 모호한 프롬프트나 분포 외 입력에서 가끔 "환각"하거나 부정확한 정보를 제공할 수 있어요.
- 프롬프트 품질 의존성: 출력 품질은 입력 프롬프트의 명확성에 의존해요. 구체적이고 잘 구조화된 프롬프트를 사용하세요.
- 계산 비용: 모델을 실행하면 특히 비디오 입력이나 높은
thinking_budget에서 컴퓨팅 리소스를 소비하고 비용이 발생해요. 자세한 내용은 Thinking 페이지를 참조하세요. - 입력 유형: 각 모드의 제한 사항에 대한 자세한 내용은 관련 주제를 참조하세요. 이미지 입력 / 비디오 입력 / 오디오 입력.
개인정보 고지
이 문서에서 참조하는 모델("로보틱스 모델")이 사용자의 지침에 따라 하드웨어를 작동하고 움직이기 위해 비디오와 오디오 데이터를 활용한다는 점에 동의해요. 따라서 음성, 이미지, 초상 데이터("개인 데이터")와 같은 식별 가능한 사람의 데이터가 로보틱스 모델에 의해 수집되도록 로보틱스 모델을 운영할 수 있어요. 개인 데이터가 수집되는 방식으로 로보틱스 모델을 운영하기로 선택하면, 해당 식별 가능한 사람들이 https://ai.google.dev/gemini-api/terms (https://ai.google.dev/gemini-api/terms)에서 확인할 수 있는 Gemini API 추가 이용약관("약관")에 "Google이 개인 데이터를 사용하는 방식" 섹션을 포함해 명시된 대로 자신의 개인 데이터가 Google에 제공·사용될 수 있다는 사실을 충분히 통지받고 동의하지 않는 한, 식별 가능한 사람들이 로보틱스 모델과 상호작용하거나 주변 지역에 있는 것을 허용하지 않겠다고 동의해요. 그러한 통지가 약관에 명시된 개인 데이터 수집 및 사용을 허용하도록 보장하고, 가능한 범위에서 얼굴 흐림 같은 기술을 사용하고 식별 가능한 사람이 없는 지역에서 로보틱스 모델을 운영함으로써 개인 데이터 수집과 유통을 최소화하기 위해 상업적으로 합리적인 노력을 기울일 거예요.
가격
가격과 사용 가능 지역에 대한 자세한 정보는 가격 페이지를 참조하세요.
모델 엔드포인트
Gemini Robotics ER 2 미리보기
| 속성 | 설명 |
|---|---|
| 모델 코드 | gemini-robotics-er-2-preview |
| 지원 데이터 유형 | 입력: 텍스트, 이미지, 비디오, 오디오 / 출력: 텍스트 |
| 토큰 제한 [*] | 입력 토큰 제한 131,072 / 출력 토큰 제한 65,536 |
| 기능 | 오디오 생성: 미지원 / 캐싱: 지원 / 코드 실행: 지원 / 컴퓨터 사용: 지원 / 파일 검색: 지원 / 함수 호출: 지원 / Google 지도 그라운딩: 지원 / 이미지 생성: 미지원 / Live API: 미지원 / 검색 그라운딩: 지원 / 구조화된 출력: 지원 / Thinking: 지원 / URL 컨텍스트: 지원 |
| 소비 옵션 | 배치 API: 지원 / Flex 추론: 미지원 / 우선순위 추론: 미지원 |
| 버전 | 모델 버전 패턴에 대한 자세한 내용은 해당 문서를 참조하세요. 미리보기: gemini-robotics-er-2-preview |
| 최신 업데이트 | 2026년 7월 |
| 모델 카드 | 모델 카드 |
Gemini Robotics ER 2 Streaming 미리보기
| 속성 | 설명 |
|---|---|
| 모델 코드 | gemini-robotics-er-2-streaming-preview |
| 지원 데이터 유형 | 입력: 텍스트, 이미지, 비디오, 오디오 / 출력: 텍스트 |
| 토큰 제한 [*] | 입력 토큰 제한 131,072 / 출력 토큰 제한 65,536 |
| 기능 | 오디오 생성: 미지원 / 캐싱: 미지원 / 코드 실행: 미지원 / 컴퓨터 사용: 미지원 / 파일 검색: 미지원 / 함수 호출: 지원 / Google 지도 그라운딩: 미지원 / 이미지 생성: 미지원 / Live API: 지원 / 검색 그라운딩: 지원 / 구조화된 출력: 미지원 / Thinking: 지원 / URL 컨텍스트: 미지원 |
| 소비 옵션 | 배치 API: 미지원 / Flex 추론: 미지원 / 우선순위 추론: 미지원 |
| 버전 | 모델 버전 패턴에 대한 자세한 내용은 해당 문서를 참조하세요. 미리보기: gemini-robotics-er-2-streaming-preview |
| 최신 업데이트 | 2026년 7월 |
| 모델 카드 | 모델 카드 |
Gemini Robotics ER 1.6 미리보기
| 속성 | 설명 |
|---|---|
| 모델 코드 | gemini-robotics-er-1.6-preview |
| 지원 데이터 유형 | 입력: 텍스트, 이미지, 비디오, 오디오 / 출력: 텍스트 |
| 토큰 제한 [*] | 입력 토큰 제한 131,072 / 출력 토큰 제한 65,536 |
| 기능 | 오디오 생성: 미지원 / 캐싱: 지원 / 코드 실행: 지원 / 컴퓨터 사용: 지원 / 파일 검색: 지원 / 함수 호출: 지원 / Google 지도 그라운딩: 지원 / 이미지 생성: 미지원 / Live API: 미지원 / 검색 그라운딩: 지원 / 구조화된 출력: 지원 / Thinking: 지원 / URL 컨텍스트: 지원 |
| 소비 옵션 | 배치 API: 지원 / Flex 추론: 미지원 / 우선순위 추론: 미지원 |
| 버전 | 모델 버전 패턴에 대한 자세한 내용은 해당 문서를 참조하세요. 미리보기: gemini-robotics-er-1.6-preview |
| 최신 업데이트 | 2025년 12월 |
| 지식 기준일 | 2025년 1월 |
다음 단계
- 공간 추론 — 포인팅, 추적, 경계 상자, 궤적.
- 에이전트형 기능 — 코드 실행, 계측기 판독, 이미지 주석.
- 작업 오케스트레이션 — 커스텀 로봇 API를 이용한 장기 작업.
- 로보틱스 스트리밍 — 실시간 양방향 스트리밍(Gemini Robotics ER 2 전용).
- 비디오 이해 — 모멘트 찾기 및 진행 분류(Gemini Robotics ER 2 전용).
- Google DeepMind 로보틱스 안전 — 모델 계열 뒤의 안전 연구.