Unidade 2 / 9

Inteligência Artificial em Robótica e Controle de Movimento

Ganhos:

  • Capacidade de configurar e resolver problemas de cinemática direta/inversa e planejamento de trajetória com a ajuda da IA
  • Capacidade de produzir uma órbita segura, fornecendo limites de articulação do robô, restrições de velocidade e aceleração como contexto para o prompt
  • Capacidade de verificar numericamente e fisicamente a saída cinemática e de trajetória produzida pela IA

Trazer a pinça na extremidade de um braço robótico para um determinado ponto no espaço, em uma determinada orientação; Parece simples, mas existem equações cinemáticas, limites de juntas, singularidades e planejamento de trajetória por trás disso. Aqui, o engenheiro mecatrônico usa trigonometria, álgebra linear e teoria de controle juntas. A inteligência artificial é uma ajuda poderosa neste processo: pode estabelecer equações de cinemática direta, sugerir abordagens de solução para cinemática inversa, parametrizar uma trajetória de acordo com restrições de velocidade/aceleração. No entanto, a robótica é uma das áreas da mecatrônica com maior risco físico; Se uma sequência angular gerada pela IA for enviada ao robô sem verificação, o braço pode atingir a si mesmo, ao ambiente ou ao operador. Nesta unidade veremos como configurar e verificar a cinemática e o planejamento de trajetória com IA.

Cinemática direta e inversa

Cinemática direta (FK): Encontrar a posição e orientação do efetor final se os ângulos da junta forem conhecidos. Só existe uma solução, é direta.

Cinemática inversa (IK): Se a posição desejada da função final for conhecida, encontrar os ângulos de junta que irão fornecer isso. Geralmente tem mais de uma solução (como cotovelo para cima/para baixo), às vezes não tem soluções (ponto inalcançável), às vezes tem soluções infinitas (singularidade).

conceito

entrada

saída

Número de soluções

Cinemática direta

ângulos articulares

Posição/orientação extrema

solteiro

Cinemática inversa

Posição/orientação extrema

ângulos articulares

Múltiplo/nenhum/infinito

Para um braço plano de duas articulações, a cinemática inversa pode ser configurada na IA e verificada manualmente da seguinte forma:

import numpy as npdef inverse_kinematik_2r(x, y, L1, L2): """IK para braço planar de 2 juntas. Retorna ângulos em radianos (solução cotovelo para baixo).""" r2 = x**2 + y**2 # Verificação de acessibilidade: o ponto está na área de trabalho? if np.sqrt(r2) > (L1 + L2) ou np.sqrt(r2) < abs(L1 - L2): raise ValueError("O ponto está fora do espaço de trabalho acessível") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2 = np.clip(cos_t2, -1.0, 1.0) # segurança numérica t2 = np.arccos(cos_t2) # cotovelo para baixo t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) return np.degrees(t1), np.degrees(t2)# Validação: L1=L2=1, alvo (1,1) -> esperado t2=90 grausprint(inverse_kinematik_2r(1,0, 1,0, 1,0, 1,0)) # ~ (0,0, 90,0)

As linhas críticas aqui são onde a IA frequentemente pula: verificação de acessibilidade (é o ponto no espaço de trabalho) e `np.clip` (evita que a entrada do arccos vá além de ±1 devido a erro de arredondamento). Sem essas duas proteções, o código produzirá NaN ou travará em um ponto inválido.

Dica: Ao solicitar resolução IK, diga claramente à IA para “adicionar controle de acessibilidade e limitar a entrada de arccos ao clipe”. Essas duas linhas evitam os erros silenciosos que mais causam dores de cabeça no campo.

Limites Conjuntos, Singularidade e Múltiplas Soluções

Cada junta de um robô real tem uma faixa de ângulo (por exemplo, -170° a +170°), um limite de velocidade e um limite de aceleração. Mesmo que IK forneça um ângulo matematicamente válido, ele não poderá ser usado se esse ângulo estiver fora da faixa física da junta. Além disso, o robô cai na singularidade em algumas configurações: dois eixos são alinhados, um grau de liberdade é perdido e as velocidades articulares tentam ir ao infinito para um pequeno movimento da ponta.

É por isso que a solução de RH por si só não é suficiente; Toda solução deve passar por um filtro de aceitabilidade:

def solução_gecerli_mi(acilar_deg, limites_deg): """dores: [t1,t2,...], limites: [(min,max),...]""" para dor, (amin, amax) em zip(acilar_deg, limites_deg): if not (amine <= pain <= amax): return False, f"Limite de articulação excedido: {pain:.1f} deg ({amina}, {amax}) exceto" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0], limites)) # (True, 'OK')print(cozum_valid_mi([0.0, 150.0], limites)) # (False, 'Limite conjunto excedido...')

A IA pode fornecer a solução “matemática” do CI; mas os limites conjuntos e a prevenção de singularidade são específicos do seu sistema e devem ser fornecidos como contexto para o prompt.

Planejamento de Órbita

Levar o robô do ponto A ao ponto B não significa traçar uma linha reta entre dois ângulos. A mudança repentina de velocidade cria choque mecânico e vibração. Em vez disso, são usados ​​perfis suaves: perfil de velocidade trapezoidal (aceleração constante – velocidade constante – desaceleração constante) ou curva S (mais suave, onde a aceleração também é limitada). Ao fazer a IA gerar uma trajetória, você deve fornecer o alvo, a duração e as restrições.

import numpy as npdef trapez_yorunge(q0, q1, v_max, a_max, dt=0.01): """Perfil de velocidade trapezoidal para uma única junta. A matriz de posição é retornada.""" distância = abs(q1 - q0) direção = np.sign(q1 - q0) t_speed = v_max / a_max distance_speed = 0,5 * a_max * t_speed**2 if 2 * distance_speed > distância: # perfil triangular (v_max não alcançável) t_speed = np.sqrt(distância / a_max) t_constant = 0,0 v_peak = a_max * t_speed else: t_constant = (distância - 2 * distance_speed) / v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt).

A verificação lógica aqui é esta: se a distância for curta, o motor nunca atingirá v_max e o perfil passará de trapezoidal para triangular. Se a IA não cumprir esta condição, será calculada a duração errada para movimentos curtos. Você pode verificar isso testando o código com um valor conhecido (por exemplo, uma distância muito curta).

Alerta Fraco/Prompt Forte

FRACO:"Escreva uma trajetória que leve o braço do robô de A a B."(Sem restrição: limite de velocidade? aceleração? espaçamento entre juntas? Saída cega.) FORTE:"Gere uma trajetória ponto a ponto no espaço articular para um robô de 6 eixos. O limite de velocidade para cada junta é 90 graus/s, o limite de aceleração é 180 graus/s^2, a faixa de ângulo é dada na tabela. Use um perfil de velocidade trapezoidal, se a distância for curta, caia em um perfil triangular. A saída de cada junta é Escreva também uma função de verificação que verifica se ela não excede os limites da junta: {{tabela}}"

Verificação: da simulação ao robô

A trajetória gerada pela IA é verificada nesta ordem antes de ir para o robô:

  1. Numérico: O ângulo articular, a velocidade e a aceleração de cada passo estão dentro dos limites?
  2. Colisão: Ao longo da trajetória, o braço colide consigo mesmo ou com o ambiente (visualize/simule se possível)?
  3. Singularidade: A órbita passa por uma região de singularidade (o determinante Jacobiano se aproxima de zero)?
  4. Teste de hardware lento: Opere o robô em baixa velocidade (por exemplo, 10%) e monitore-o visualmente.
  5. Aumento gradual da velocidade: Depois de tudo verificado, a velocidade aumenta passo a passo até o valor nominal.
Cuidado: Ao iniciar um robô com uma nova trajetória pela primeira vez, o override de velocidade deve ser sempre baixo e a parada de emergência deve estar disponível. Mesmo que a saída da IA ​​seja “matematicamente correta”, um deslocamento, eixo reverso ou problema de cabo na configuração física só será revelado com testes lentos.

Mini Estojo

O engenheiro de automação Ece pede à IA um código de trajetória no espaço conjunto para uma aplicação de seleção e posicionamento. A IA produz um perfil trapezoidal, mas quando Ece testa um movimento de curta distância, ela vê que o tempo é negativo: o código não tratou o caso do perfil triangular onde v_max não pode ser alcançado. Ece corrige isso dizendo ao prompt "se a distância for curta, caia no perfil triangular". Em seguida, ele compara os ângulos das juntas dados pela IA por meio de sua função de validação em sua própria tabela de limites e descobre que a junta 5 queria +125° em um ponto, enquanto o limite era +120°. Ele replaneja a trajetória e a monitora, desta vez operando o robô a 10% da velocidade. No primeiro round, ele percebe que a garra está chegando muito perto da mesa e corrige o deslocamento Z. A IA retornou um esboço funcional em minutos; mas três validações separadas (perfil triangular, limite de junta, teste lento) detectaram três problemas reais separados.

Erros Comuns

  • Utilização da solução IK sem limites conjuntos e controle de acessibilidade.
  • Não cortando entradas arccos/arcsin, mas produzindo NaN em caso de erro de arredondamento.
  • Solicitar a órbita sem limitar velocidade/aceleração e criar choque mecânico.
  • Ignorando zonas de singularidade e deixando as velocidades das articulações dispararem.
  • Ignorando a transição do perfil trapezoidal-triangular em uma curta distância e calculando o tempo errado.
  • Conduzindo o primeiro teste orbital a toda velocidade e sem acesso ao E-stop.

Em resumo

  • A cinemática direta tem uma solução única; a cinemática inversa pode produzir soluções múltiplas, inexistentes ou infinitas.
  • As soluções de CI são necessariamente filtradas em termos de limites conjuntos, acessibilidade e singularidade.
  • Planejamento de trajetória; Ele usa perfis suaves e compatíveis com limites, como trapezoidais ou curvas em S.
  • A curta distância o perfil muda de trapezoidal para triangular; isso deve ser tratado no código.
  • A IA acelera a matemática; Os limites e o contexto de instalação física devem entrar no prompt.
  • A nova trajetória é sempre percorrida pela primeira vez com uma relação de velocidade baixa e parada de emergência acessível.

Tarefa de aplicativo

Selecione um modelo de braço com duas ou três juntas (com comprimentos de ligação e limites de junta reais ou imaginários). Faça com que a IA gere uma função cinemática inversa e um planejador de trajetória com este contexto. Então: (1) verifique manualmente a saída IK com um alvo conhecido (você coloca os ângulos de volta e retorna ao mesmo ponto que o FK), (2) teste se o código os captura fornecendo pelo menos um ponto inacessível e um limite de articulação excedendo o alvo, (3) verifique se a uma curta distância o tempo orbital se mostra razoável. Anote quantos problemas de validação você encontrou na primeira versão do código e qual camada detectou cada um deles.