Modelet Gemini Robotics ER mund të planifikojnë detyra dhe të arsyetojnë rreth hapësirës duke nxjerrë përfundime se cilat veprime duhen ndërmarrë dhe cilat objekte duhen lëvizur për të përfunduar një qëllim. Kjo faqe tregon një shembull për drejtimin e një operacioni marrje-dhe-vendosjeje përmes një API-je të personalizuar të robotit për të orkestruar detyrën e vendosjes së një sendi në një tas. Ky shembull përdor modelin standard Gemini ER 2, për një shembull transmetimi, shihni udhëzuesin e transmetimit Gemini ER 2 .
Për kodin e plotë të ekzekutueshëm, shihni librin e gatimit të Robotics .
Duke përdorur një API të personalizuar për robotët
Ky shembull demonstron orkestrimin e detyrave me një API të personalizuar për robotët. Ai prezanton një API të improvizuar të projektuar për një operacion marrjeje dhe vendosjeje. Detyra është të marrësh një bllok blu dhe ta vendosësh atë në një tas portokalli:

Ky shembull përdor API-n e mëposhtme të robotit simulues:
Python
def move(x, y, high):
print(f"Mock Robot: Moving to coordinates: {x}, {y}, {'high above table' if high else 'down at table level'}")
def setGripperState(opened):
print(f"Mock Robot: {'Opening gripper' if opened else 'Closing gripper'}")
robot_origin_y = 300
robot_origin_x = 500
move_function = {
"type": "function",
"name": "move",
"description": "Moves the arm to the given coordinates.",
"parameters": {
"type": "object",
"properties": {
"x": {"type": "integer", "description": "X coordinate relative to the origin"},
"y": {"type": "integer", "description": "Y coordinate relative to the origin"},
"high": {"type": "boolean", "description": "Set to True to lift the robot arm above the scene for avoiding obstacles. Set to False to place the gripper on the surface."}
},
"required": ["x", "y", "high"]
}
}
set_gripper_state_function = {
"type": "function",
"name": "setGripperState",
"description": "Opens or closes the robot's gripper.",
"parameters": {
"type": "object",
"properties": {
"opened": {"type": "boolean", "description": "True opens the gripper, False closes the gripper."}
},
"required": ["opened"]
}
}
Shembulli i mëposhtëm i dërgon modelit kërkesën dhe imazhin me përkufizimet e mjeteve. Pastaj ekzekuton një cikël agjentësh: pas çdo përgjigjeje të modelit, ekzekuton çdo thirrje funksioni të kërkuar ( move , setGripperState ), i kthen rezultatet përsëri modelit duke përdorur previous_interaction_id dhe përsërit derisa modeli të ndalojë së thirruri funksionet ose të arrihet limiti i hapave.
Python
prompt = (
"You are a robotic arm with six degrees-of-freedom. "
f"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.\n\n"
"Find the blue block and the orange bowl. Calculate their coordinates relative to the origin.\n"
"Perform a pick and place operation where you pick up the blue block and place it into the orange bowl. "
"Call the appropriate sequence of functions to complete this operation."
)
# 1. Initial Interaction
interaction = client.interactions.create(
model=MODEL_ID,
input=[{"type": "user_input", "content": [
{"type": "image", "data": img_b64, "mime_type": "image/png"},
{"type": "text", "text": prompt}
]}],
tools=[move_function, set_gripper_state_function],
generation_config={"thinking_level": "low"}
)
print("\n--- Executing Orchestrated Plan ---")
max_steps = 15 # Safety limit to prevent infinite loops
step_count = 0
# 2. The Agentic Loop
while step_count < max_steps:
step_count += 1
# Check if the model wants to call any functions
tool_calls = [step for step in interaction.steps if step.type == "function_call"]
if not tool_calls:
# If no tools were called, the model is finished with the sequence
print("Sequence complete.")
if interaction.output_text:
print(f"Model Summary: {interaction.output_text}")
break
function_results = []
for step in tool_calls:
function_name = step.name
arguments = step.arguments
# Execute the mock function
if function_name == "move":
move(**arguments)
elif function_name == "setGripperState":
setGripperState(**arguments)
else:
print(f"Unknown function: {function_name}")
# 3. Create a result object to tell the model the function succeeded
function_results.append({
"type": "function_result",
"name": step.name,
"call_id": step.id,
"result": [{"type": "text", "text": '{"status": "success"}'}]
})
# 4. Send the results back to the model, passing previous_interaction_id
# so it remembers the conversation history and generates the NEXT step
interaction = client.interactions.create(
model=MODEL_ID,
previous_interaction_id=interaction.id,
tools=[move_function, set_gripper_state_function],
input=function_results
)
Më poshtë tregohet një rezultat i mundshëm i modelit bazuar në prompt dhe API-n e robotit simulues. Rezultati përfshin rezultatin e thirrjeve të funksioneve robot që modeli i renditi së bashku.
--- Executing Orchestrated Plan ---
Mock Robot: Opening gripper
Mock Robot: Moving to coordinates: 160, 440, high above table
Mock Robot: Moving to coordinates: 160, 440, down at table level
Mock Robot: Closing gripper
Mock Robot: Moving to coordinates: 160, 440, high above table
Mock Robot: Moving to coordinates: -250, 60, high above table
Mock Robot: Moving to coordinates: -250, 60, down at table level
Mock Robot: Opening gripper
Mock Robot: Moving to coordinates: -250, 60, high above table
Sequence complete.
Model Summary: I have completed the task of picking up the blue block and placing it into the orange bowl.
Çfarë vjen më pas
- Robotikë me transmetim — transmetim në kohë reale me thirrje funksionesh (vetëm Gemini Robotics ER 2).
- Kuptimi i videos — ndiqni progresin e detyrës nga videoja (vetëm ER 2).
- Arsyetimi hapësinor — shembuj të kutisë së drejtimit, ndjekjes dhe kufizuese.