A geração mais recente de modelos Gemini, 2.5 Pro e 2.5 Flash, está desbloqueando novas fronteiras na robótica. A codificação, o raciocínio e os recursos multimodais avançados, agora combinados com a compreensão espacial, fornecem a base para a próxima geração de robôs interativos e inteligentes.
Esta postagem explora como os desenvolvedores podem usar o Gemini 2.5 para criar aplicativos robóticos sofisticados. Forneceremos exemplos práticos com prompts para mostrar o uso do Gemini 2.5 e da API Live para:
Em março, lançamos nossos modelos Gemini Robotics, incluindo o Gemini Robotics-ER, nosso modelo avançado de raciocínio incorporado, otimizado para as demandas exclusivas de aplicativos robóticos. Também temos o prazer de compartilhar como os trusted testers do Gemini Robotics já estão demonstrando o poder do Gemini em aplicativos robóticos. Estamos incluindo exemplos da Agile Robots, da Agility Robotics, da Boston Dynamics e da Enchanted Tools. Entre na lista de espera do programa de trusted testers do Gemini Robotics-ER.
O raciocínio sobre o mundo físico está no centro do controle geral e robusto. O Gemini 2.5 representa um passo nessa direção com sua capacidade aprimorada de raciocinar de maneira multimodal. A seguir, apresentamos dois exemplos, utilizando os recursos de apontamento e detecção de objetos do Gemini.
O apontamento permite que um modelo faça referência a entidades ou partes de entidades com precisão e localize-as no espaço. O Gemini 2.5 Pro é capaz de raciocinar sobre as entidades para as quais está apontando, o que abre novas oportunidades de interação com as imagens. Por exemplo, o Gemini 2.5 Pro é capaz de raciocinar sobre espaços vazios no contexto de prateleiras de um supermercado, sabendo que isso indica que o reabastecimento pode ser necessário. No exemplo abaixo, o Gemini identifica a necessidade de reabastecimento da miniberinjela. O Gemini 2.5 Pro também mostra uma capacidade latente de localizar e ler informações a partir de um determinado ponto, como ilustrado no exemplo do medidor.
Exemplo 1: o Gemini 2.5 pode localizar objetos na cena com base em descrições linguísticas detalhadas. Por exemplo, encontrar uma prateleira que precisa ser reabastecida. (Observação: todos os prompts e respostas desta postagem foram traduzidos livremente do original em inglês para fins de compreensão.)
Prompt: aponte para um compartimento na prateleira que precisa ser reabastecido. A resposta deve seguir o formato json: [{"point": <point>, "label": <label1>}, ...]. Os pontos estão no formato [y, x] normalizado para 0-1000.
Imagem de entrada com sobreposição de resposta:
Exemplo 2: o Gemini 2.5 pode localizar pequenos objetos na cena e estimar os estados desses objetos. Por exemplo, ele pode ler medidores.
Prompt: aponte para todos os medidores redondos. A resposta deve seguir o formato json: [{"point": <point>, "label": <label1>}, ...]. Os pontos estão no formato [y, x] normalizado para 0-1000.
Imagem de entrada com sobreposição de resposta:
Prompt: qual é a leitura no medidor do meio?
Resposta: com base no close da imagem, o medidor redondo na parte central esquerda da imagem parece estar marcando 0. O ponteiro está apontando diretamente para a marca "0" no mostrador.
O Gemini 2.5 é capaz de rastrear, com precisão, vários objetos ao longo do tempo e detectar conceitos abertos, como "um derramamento". O Gemini 2.5 pode ser orientado a fazer previsões de trajetória na forma de uma sequência de pontos.
Exemplo 1: o Gemini 2.5 pode gerar caixas delimitadoras para cada frame em um vídeo. Veja abaixo o resultado da visualização.
Prompt: detecte a tigela verde, o caranguejo, a carteira, a tigela rosa e o telefone e retorne uma matriz json com as chaves box_2d e label. (Execução por frame).
Imagem de entrada com sobreposição de resposta:
Exemplo 2: o Gemini 2.5 pode detectar conceitos abertos relevantes para a robótica, exigindo conhecimento de senso comum e raciocínio específico de contexto. Por exemplo, um robô útil precisa entender o conceito de "derramamento".
Prompt:
1) Mostre a caixa delimitadora de derramamento. Retorne uma matriz json com as chaves box_2d e label.
2) Use máscaras de segmentação para o derramamento. Forneça uma lista JSON de máscaras de segmentação na qual cada entrada contenha a caixa delimitadora 2D na chave "box_2d", a máscara de segmentação na chave "mask" e o rótulo de texto na chave "label".
Imagem de entrada com sobreposição de resposta:
Exemplo 3: o Gemini 2.5 pode ser orientado a fazer previsões de trajetória na forma de uma sequência de pontos.
Prompt: gere uma trajetória do braço do robô de 10 pontos para mover o pano até o derramamento. A resposta deve seguir o formato json: [{"point": <point>, "label": <label1>}, ...]. Os pontos estão no formato [y, x] normalizado para 0-1000.
Imagem de entrada com sobreposição de resposta:
O Gemini 2.5 pode utilizar sua compreensão espacial subjacente para controlar robôs por meio da geração de código. Com uma API de controle de robôs, o Gemini 2.5 pode aplicar seus recursos avançados de compreensão de cenas, manipulação de objetos e escrita de código para executar tarefas em zero-shot, sem treinamento adicional.
O Exemplo 1 abaixo mostra a geração de código para "Coloque a banana na tigela". Ele dá ao Gemini acesso a uma API de controle de robôs e mostra como o modelo usa seus recursos de compreensão espacial, raciocínio e geração de código para selecionar chamadas e argumentos de API apropriados para a tarefa em questão. O Gemini 2.5 gera dois planos viáveis diferentes para colocar a banana na tigela. A primeira solução é simplesmente pegar a banana, movê-la acima da tigela e soltá-la. A segunda solução levanta a banana, move a tigela para baixo da banana e, depois, solta a banana.
Exemplo 1: o Gemini 2.5 gera o código de planejamento de alto nível para tarefas de "pegar e posicionar" com diferentes estratégias.
Prompt:
Você recebe uma API de controle de robôs e o código de exemplo abaixo:
# Provided API
class RobotAPI:
def detect_object(self, obj: str) -> Detection
"""Detects the given object's XYZ location"""
def get_grasp_position_and_euler_orientation(self, gripper: str, object_name: str) -> tuple[numpy.ndarray, numpy.ndarray]:
"""Returns the grasp position and orientation for the given object and gripper from the Gemini Robotics ER model or other grasping primitives.
def move_gripper_to(self, gripper: str, position: numpy.ndarray, orientation: numpy.ndarray):
"""Moves the gripper to the given position and orientation."""
def move_gripper_to_safe_position(self, gripper: str):
"""Moves the given gripper to a safe position out of the table area."""
def open_gripper(self, gripper: str):
"""Opens the given gripper."""
def close_gripper(self, gripper: str):
"""Closes the given gripper."""
robot=RobotAPI()
# Example code
robot.open_gripper(gripper='RIGHT')
banana_detection = robot.detect_object(obj='banana')
banana_position = banana_detection.position
print(f"Detected banana position: {banana_position}") # Gemini uses this to determine which gripper to use.
grasp_position, grasp_orientation = robot.get_grasp_position_and_euler_orientation(gripper='RIGHT', object_name='banana')
pre_grasp_position = grasp_position + np.array([0, 0, 0.1]) # Add 10cm to the Z-coordinate for pre-grasp
robot.move_gripper_to(gripper='RIGHT', position=pre_grasp_position, orientation=grasp_orientation)
robot.move_gripper_to(gripper='RIGHT', position=grasp_position, orientation=grasp_orientation)
robot.close_gripper(gripper='RIGHT')
Agora, gere o código para a tarefa "colocar a banana na tigela".
Resposta 1 com resultados da execução do código:
Raciocínio (abreviado)
1: A posição atual da garra direita é [-0,04, -0,028, 0,176]
.
2: A posição detectada da tigela é [-0,03839983, -0,02811164, 0,0073104]
.
3: Para colocar a banana dentro da tigela, é preciso diminuir a coordenada Z da garra. Usarei as coordenadas X e Y detectadas da tigela para a posição de destino. Para a coordenada Z, usarei a coordenada Z detectada da tigela (0,0073104
) e adicionarei um pequeno deslocamento (por exemplo, 0,03 m) para garantir que a banana seja colocada dentro da tigela, e não na mesa. Isso resultará em uma coordenada Z de destino de, aproximadamente, 0,007 + 0,03 = 0,037 m
. Essa coordenada Z está acima da base da tigela, mas abaixo da altura típica de uma banana quando apoiada na mesa, garantindo que ela seja colocada *dentro* da tigela.
Snippet de código:
# Detect the bowl's position (re-detect to ensure fresh data, though it's unlikely to have moved)
bowl_detection = robot.detect_object('bowl')
if bowl_detection.position is None:
raise ValueError("Bowl not detected.")
# Define the target Z-coordinate for dropping the banana into the bowl
# Use the bowl's Z-position and add an offset to place the banana inside.
# The banana's original Z was ~0.032, bowl's Z is ~0.007.
# A target Z of 0.037 (0.007 + 0.03) should place it inside the bowl.
drop_z = bowl_detection.position[2] + 0.03
Resposta 2 com resultados da execução do código:
Raciocínio (abreviado)
# Replanejamento devido a restrições de acessibilidade: o braço DIREITO não consegue alcançar a posição atual da tigela.
# O plano agora envolverá o braço ESQUERDO movendo a tigela para a área alcançável pelo braço DIREITO.
# O braço DIREITO consegue atingir coordenadas X de 0,04 m a 0,40 m. Vou mover a tigela para uma coordenada X de 0,10 m, que está dentro do alcance do braço DIREITO e permite uma folga em relação ao centro.
Snippet de código:
target_bowl_position = [-0.07274145, -0.08317622, 0.00720479] # Original bowl position
# Move the bowl to an x-coordinate reachable by the RIGHT arm, keeping the same y and z (lifted)
# Let's choose x = 0.10m for the bowl, which is within the right arm's reach (0.04 to 0.40)
# Keep the lifted height at 0.20m
move_bowl_position = [0.10, bowl_detection.position[1], 0.20]
robot.move_gripper_to('LEFT', move_bowl_position, current_left_gripper_orientation)
O Gemini 2.5 também pode utilizar efetivamente um pequeno número de exemplos em contexto para executar tarefas de controle de robôs mais hábeis. Nos dois exemplos mostrados abaixo, de um robô ALOHA embalando caixas e dobrando um vestido, 10 demonstrações consistindo em raciocínio intercalado e ações do robô para cada tarefa foram adicionadas ao contexto do Gemini. Criamos um código-fonte aberto que mostra como fazer isso usando o Gemini, incluindo exemplos das demonstrações de entrada. Isso permite que os robôs sejam ensinados e implantados no local. Veja o Colab.
Exemplo 2: o Gemini 2.5 (Flash) utiliza um pequeno número de exemplos em contexto para executar tarefas de controle de robôs mais hábeis.
Prompt: veja o Colab.
Resposta com resultados da execução do código:
A API Live para streaming em tempo real foi introduzida recentemente e pode ser usada para criar aplicativos interativos que permitem que as pessoas controlem robôs usando a voz. A interação intuitiva entre humanos e robôs é um aspecto importante para criar robôs fáceis e seguros de usar. Recentemente, apresentamos uma demonstração interativa do Gemini Robotics no Google I/O 2025, que foi criada em torno da API Live para interação por voz e chamada de função.
A API Live dá suporte a áudio e vídeo como modalidades de entrada e áudio/texto como modalidades de saída. Isso permite que você envie entradas de voz e feeds da câmera do robô para a API Live. Isso fica ainda melhor quando combinado com o uso de ferramentas.
O uso de ferramentas permite que a API Live vá além da simples conversa, permitindo que ela execute ações no mundo real, mantendo uma conexão em tempo real. Por exemplo, as APIs de robô especificadas acima podem ser definidas como chamadas de função, incluindo robot.open_gripper()
, robot.close_gripper()
e robot.move_gripper_to()
. Depois de definidas como chamadas de ferramentas, elas podem ser integradas ao fluxo de trabalho, e as pessoas podem interagir com o robô usando a voz em tempo real. Os desenvolvedores podem dar os primeiros passos no GitHub e consultar a documentação da API para obter recursos de chamada de função.
Os modelos 2.5 Pro e 2.5 Flash demonstram um desempenho robusto nos comparativos de mercado ASIMOV Multimodal e Physical Injury lançados junto com o relatório técnico do Gemini Robotics, apresentando acurácia comparável à dos modelos 2.0. Além dos comparativos de mercado ASIMOV, os modelos 2.5 Pro e 2.5 Flash também demonstram excelente desempenho na rejeição de prompts que tentam usar os recursos de raciocínio incorporados, mas violam políticas de segurança, como a promoção de estereótipos nocivos, a discriminação ou o risco a menores de idade. Após uma avaliação rigorosa em comparação com prompts adversários gerados sinteticamente, o 2.5 Pro e o 2.5 Flash demonstraram taxas de violação próximas de zero.
Em março, lançamos o modelo Gemini Robotics-ER, e é inspirador ver como ele está sendo usado pela comunidade em aplicativos robóticos. Confira estes exemplos de interatividade, percepção, planejamento e chamada de função de nossos trusted testers: Agile Robots, Agility Robotics, Boston Dynamics e Enchanted Tools.
Mal podemos esperar para ver o que você vai criar.
O raciocínio incorporado no Gemini 2.5 Flash e Pro está disponível no Google AI Studio, na API Gemini e na Vertex AI. Para começar a criar com esses modelos na API Gemini, visite nosso guia para desenvolvedores. Se você tiver interesse em criar com o Gemini Robotics-ER, inscreva-se no programa de trusted testers.
Agradecemos aos pesquisadores da equipe de Raciocínio incorporado: Alex Hofer, Annie Xie, Arunkumar Byravan, Ashwin Balakrishna, Assaf Hurwitz Michaely, Carolina Parada, David D'Ambrosio, Deepali Jain, Jacky Liang, Jie Tan, Junkyung Kim, Kanishka Rao, Keerthana Gopalakrishnan, Ksenia Konyushkova, Lewis Chiang, Marissa Giustina, Mohit Sharma, Montserrat Gonzalez Arenas, Nicolas Heess, Peng Xu, Pierre Sermanet, Sean Kirmani, Stefani Karp, Stefano Saliceti, Steven Hansen, Sudeep Dasari, Ted Xiao, Thomas Lampe, Tianli Ding, Wenhao Yu e Wentao Yuan; à equipe do Gemini: Xi Chen, Weicheng Kuo e Paul Voigtlaender; da equipe de Segurança de robótica: Vikas Sindhwani e Abhishek Jindal; da equipe de Suporte a produtos e programas: Kendra Byrne e Sally Jesmonth; e aos membros da equipe de relacionamento com desenvolvedores: Paul Ruiz e Paige Bailey, pela ajuda neste artigo.