Caminho de construçãoIntermediárioUm fim de semana

Construa um braço robótico de 4 DOF: PCA9685, servos e cinemática

Um braço robótico de mesa que alcança as poses comandadas, controlado por PCA9685 e parametrizado pela cinemática inversa compreendida na simulação antes de conectar um servo.

Esquema técnico de Construa um braço robótico de 4 DOF: PCA9685, servos e cinemáticaREACHABLE WORKSPACE

Um braço robótico é o primeiro projeto em que um robô para de se deslocar e começa a fazer alguma coisa no mundo. Um robô seguidor de linha segue; um robô com desvio de obstáculos desvia; um braço alcança, posiciona e realiza a preensão. Essa mudança — de locomoção para manipulação — traz a ideia sobre a qual todo manipulador robótico é construído: a cinemática, a geometria que conecta os ângulos que você pode comandar ao ponto no espaço que realmente deseja.

Este caminho de construção trata o braço exatamente assim: uma aula de cinemática que você pode segurar. Você começa entendendo como um braço de dois elos transforma ângulos de junta em posição da ferramenta e volta, reúne as peças de que um braço com servo precisa e aprende o que cada uma faz; depois, antes de gastar dinheiro ou estripar uma engrenagem, explora o alcance, as duas soluções de cotovelo e as poses fora de alcance no simulador do navegador. Só então você conecta o braço real, calibra os servos à mão e executa a cinemática inversa no protótipo.

Siga a árvore tecnológica abaixo de cima para baixo. Cada nó é liberado quando seus pré-requisitos são concluídos, e seu progresso é salvo neste dispositivo, para que você possa construir o braço durante um fim de semana sem perder o ponto.

Lista de materiais

Peça Qtd. Custo aproximado Observações
Arduino Uno 1 US$ 5–8 Qualquer placa funciona — aqui ela se comunica por I²C
PCA9685, driver de 16 canais 1 US$ 3 Não é estritamente necessário para quatro servos, mas é a ferramenta certa
Servo SG90 4 US$ 8 Compre um MG90S para o ombro — engrenagens metálicas, e é a junta que falha
Kit de braço robótico de 4 DOF 1 US$ 12–25 Acrílico serve para aprender; alumínio flexiona muito menos
Fonte de 5–6 V, ≥3 A 1 US$ 8 Quatro servos em travamento simultâneo consomem ~2,6 A
Capacitor de 1000 µF 1 US$ 1 Em paralelo com V+, perto do terminal
Braços do servo de reserva 1 conjunto US$ 2 Você acabará instalando um na posição errada. Isso acontece com todo mundo

Total: aproximadamente US$ 40–60.

Vale pensar em duas compras antes de aceitar as padrão. Um MG90S com engrenagens metálicas no ombro custa um dólar a mais e é a junta que suporta o peso de todas as outras — engrenagens de nylon ali quebram sob carga contínua, não sob impacto. E uma fonte dimensionada para o travamento, porque uma falha característica de um braço ocorre quando, ao colidir com a própria estrutura ou ao preender algo rígido, todos os servos entram em travamento ao mesmo tempo.

Meça o braço antes de escrever qualquer código

A cinemática inversa é aritmética sobre comprimentos de elos. Estes quatro números constituem toda a entrada do cálculo, e obtê-los de uma ficha de produto em vez de medir com uma régua é o motivo mais comum de um braço chegar ao lugar errado com convicção.

Símbolo Medir de Até Típico
L1 Eixo da junta do ombro Eixo da junta do cotovelo 90–105 mm
L2 Eixo da junta do cotovelo Ponto real de preensão da garra 80–95 mm

A última linha faz mais trabalho do que parece. O “ponto real de preensão da garra” muda quando as mandíbulas fecham, e dimensionar a própria garra é um problema separado de posicioná-la — com sua própria geometria, seus cálculos e seus modos de falha. Se seu braço alcança a peça e depois a derruba ou esmaga, a resposta não está nesta página: comece pelo simulador de garras. | h | Superfície da mesa | Eixo da junta do ombro | 50–70 mm | | d | Eixo de giro da base | Eixo do ombro, horizontalmente | 0–15 mm |

Meça entre eixos das juntas, não nas bordas dos suportes. O eixo é o centro do acoplamento estriado de saída do servo, muitas vezes 5–10 mm dentro do suporte visível. Em um elo de 95 mm, um erro de 10 mm supera 10% e produz um braço sistematicamente curto de uma maneira que nenhum ganho corrige.

Esses dois comprimentos dão imediatamente o espaço de trabalho:

alcance máximo = L1 + L2          ex.: 100 + 90 = 190 mm
alcance mínimo = |L1 - L2|        ex.: |100 - 90| = 10 mm

O espaço de trabalho é um anel, não um disco. Há um vazio no centro que o braço não alcança fisicamente, e um alvo próximo à base ser identificado como “fora de alcance” é comportamento correto, não um bug.

Construa em marcos

A ordem de montagem aqui contém uma etapa quase impossível de desfazer, e é a etapa 2.

# Marco O teste Um resultado aprovado
1 O driver responde Varra o barramento I²C 0x40 aparece; V+ tem sua própria fonte
2 Servos na posição zero antes da montagem Comande todos os servos para 90° antes de encaixar qualquer braço do servo Cada braço do servo fica na pose zero pretendida
3 Limites por servo A partir do centro, avance em uma direção até o servo zumir Você tem contagens mínima e máxima por servo, não os padrões da biblioteca
4 Mapa das juntas registrado Comande cada junta por toda a faixa Deslocamento, sinal e limites mecânicos anotados para as quatro
5 Verificação de colisão Percorra lentamente toda a faixa de cada junta Nada atinge a estrutura; os limites refletem o que você observou
6 Cinemática direta Defina ângulos conhecidos, calcule a posição da ferramenta e meça Os valores calculados e medidos concordam dentro de poucos milímetros
7 Ida e volta Passe a posição calculada de volta pelo IK Os ângulos de saída correspondem aos de entrada
8 Os quatro quadrantes Solicite alvos à frente, atrás, à esquerda e à direita Todos funcionam — se dois forem espelhados, você usou atan em vez de atan2
9 Alcançabilidade Solicite um alvo bem além de L1 + L2 Um “fora de alcance” claro — não um NaN, nem um movimento brusco
10 Movimento suave Comande um deslocamento amplo Interpole em etapas, todas as juntas juntas, sem trancos
11 Repetibilidade Volte à mesma pose dez vezes vindo de direções diferentes Meça a dispersão das chegadas — esse número é sua folga

O marco 2 não pode ser refeito depois. Um braço do servo tem cerca de 20 dentes e só encaixa em posições discretas, aproximadamente a cada 18°. Se montar primeiro e calibrar depois, pode encontrar uma junta cuja faixa útil esteja deslocada em 40° sem nenhuma maneira mecânica de corrigir. Ligue cada servo, comande 90° e então encaixe o braço do servo.

Mova-o suavemente, sempre

Um servo comandado para um novo ângulo vai até lá em velocidade máxima. Em um braço, isso significa um movimento violento, um pico de corrente nos quatro servos e um choque mecânico nas engrenagens de nylon, multiplicado pela alavanca mecânica do próprio braço.

// Interpolate every joint together, so the tool takes a sensible path and
// no single servo carries the whole transition.
void moveTo(float base, float shoulder, float elbow, int steps, int stepMs) {
  static float cur[3] = {0, 0, 0};
  const float target[3] = {base, shoulder, elbow};

  for (int s = 1; s <= steps; s++) {
    const float t = (float)s / steps;
    for (int j = 0; j < 3; j++) {
      const float a = cur[j] + (target[j] - cur[j]) * t;
      pwm.setPWM(JOINT[j].channel, 0, countsFor(JOINT[j], a));
    }
    delay(stepMs);
  }
  memcpy(cur, target, sizeof(cur));
}

Interpolar todas as juntas juntas importa tanto quanto o próprio movimento suave. Mover as juntas uma de cada vez faz a ferramenta percorrer um arco estranho pelo espaço de trabalho — mais devagar e com muito mais chance de colidir com algo no caminho.

Como fica um bom resultado

Medição Kit de acrílico, SG90 Alumínio, MG90S
Repetibilidade, mesma direção de aproximação ±3–5 mm ±1–2 mm
Repetibilidade, direções de aproximação mistas ±8–15 mm ±3–5 mm
Carga útil utilizável em extensão total 20–30 g 40–60 g
Deformação em extensão total, sem carga 3–8 mm 1–3 mm

A diferença entre as duas linhas de repetibilidade é a folga, e ela é a maior fonte de erro de um braço simples. Quatro graus de folga no ombro, com um alcance de 190 mm, equivalem a mais de 13 mm na garra. A solução prática não são cálculos melhores — é sempre abordar um alvo pela mesma direção, o que elimina completamente a mudança de sinal e transforma um erro de ±13 mm em um desvio repetível que pode ser calibrado.

Solução de problemas

Sintoma Causa provável Correção
O braço alcança o ponto errado Braço do servo instalado em um ângulo arbitrário Leve todos os servos a 90° antes de instalar os braços do servo
A faixa de uma junta está deslocada ~18° O braço do servo está encaixado um dente fora Remova e reinstale — o software não corrige isso
Alcança corretamente à frente, espelha atrás atan em vez de atan2 atan2 resolve os quatro quadrantes
O IK retorna NaN e o braço avança bruscamente Argumento de acos fora de −1..1 Teste a alcançabilidade antes da trigonometria
Alvos perto da base falham Dentro do vazio de alcance mínimo Comportamento correto — o espaço de trabalho é um anel
A placa reinicia quando o braço se move Corrente dos servos passando pelo Arduino Fonte V+ separada, terra comum, capacitor de 1000 µF
O braço cede em extensão total Ombro além do torque confortável MG90S no ombro; compense com uma borracha
Zumba ao manter uma pose Servo lutando contra uma carga no limite Reduza a carga ou use detach quando não for necessário manter a pose
A velocidade da junta dispara perto da extensão total Ao atravessar uma singularidade Mantenha os caminhos planejados dentro de uma margem do limite
Chega de modo diferente conforme a direção Folga Sempre se aproxime pela mesma direção
Todos os ângulos ficam sistematicamente curtos Oscilador do PCA9685 não é exatamente 25 MHz Meça a frequência real de saída e chame setOscillatorFrequency

Para onde seguir

Adicione um movimento em linha reta. Interpolar no espaço de juntas, como o código acima faz, faz a ferramenta seguir uma curva. Interpolar no espaço cartesiano — calcular o IK em cada etapa ao longo de uma linha reta — faz a ferramenta viajar em linha reta, como qualquer sistema real de coleta e posicionamento precisa. É uma pequena mudança, e é aqui que as singularidades deixam de ser teóricas: um caminho reto quase totalmente estendido exige velocidades de junta enormes.

Adicione uma câmera e feche o laço de controle. Tudo aqui funciona com controle aberto: o braço vai para a posição comandada e nunca verifica. Uma câmera que lê um marcador ArUco no objeto permite que o braço corrija os erros deixados pela folga e pela deformação — é assim que um braço barato se torna preciso.

Melhore os componentes quando atingir o limite. Elos de alumínio removem quase toda a flexão, servos MG90S removem quase toda a folga, e um braço de 6 DOF adiciona um punho, de modo que o ângulo de aproximação da ferramenta passa a poder ser escolhido por você. Nada disso altera a matemática: o solucionador de dois elos que você escreveu aqui é o mesmo que um braço melhor usa, e é exatamente por isso que valeu a pena começar pela estrutura barata.

Roteiro do projeto

O caminho de construção

Siga a árvore tecnológica das peças até um robô funcionando. Cada nó é desbloqueado quando seus pré-requisitos são concluídos, e seu progresso fica salvo neste dispositivo.

0 / 13 concluídos

100%
Caminho de aprendizagem

Cinemática do braço robótico

Caminho de aprendizagem

Abrir caminho
Montagem

Conecte o braço

40 min

Montagem

Calibre a posição zero e os limites dos servos

30 min

Montagem

Execute a cinemática inversa no protótipo

45 min

Objetivo

Braço robótico de 4 DOF concluído

Você construiu

Componentes

Tutoriais deste caminho

Pratique antes de fazer a fiação

Ajuste no simulador ao vivo

O caminho de construção passa por um laboratório no navegador. Acerte o comportamento aqui e depois transfira suas configurações para o robô real.

Perguntas frequentes

Como faço um braço robótico com Arduino?

Monte quatro servos em uma estrutura de 4 DOF — base, ombro, cotovelo e garra — e controle-os com um PCA9685 por I²C para que o Arduino não fique sem pinos PWM. Calibre a faixa de ângulo para pulso de cada servo e forneça pontos alvo a um solucionador de cinemática inversa de dois elos que retorna os ângulos do ombro e do cotovelo. Este caminho percorre toda a cadeia, e você ajusta a geometria em um simulador antes de conectar qualquer coisa.

Quantos servos um braço robótico de 4 DOF precisa?

Quatro — um por grau de liberdade: uma base giratória, um ombro, um cotovelo e uma garra. Cada servo precisa do seu próprio canal PWM, e é exatamente por isso que um braço de múltiplas juntas usa um driver PCA9685 em vez dos poucos pinos PWM dedicados do Arduino.

Preciso de um PCA9685 para um braço robótico?

Ele é a ferramenta certa, embora não seja estritamente necessário. Quatro servos podem funcionar em um Arduino se forem alimentados separadamente, mas o PCA9685 libera os temporizadores do microcontrolador, controla cada junta por dois pinos I²C e encaminha a corrente dos servos por sua própria fonte V+ — mantendo a corrente alta longe da sua lógica e evitando que a placa sofra queda de tensão.

Preciso comprar peças antes de começar este projeto?

Não. A cinemática e a resolução de poses rodam no simulador do navegador, então você pode entender e explorar o alcance do braço, suas duas soluções e as poses fora de alcance antes de comprar qualquer coisa. Somente as etapas finais — fiação, calibração e execução do IK — precisam do Arduino físico, do PCA9685, dos servos, da estrutura do braço e da fonte de alimentação.

Como a cinemática inversa é usada em um braço robótico?

A cinemática direta informa onde a ferramenta fica dados os ângulos das juntas; a cinemática inversa faz o inverso útil — dado um ponto alvo, retorna os ângulos das juntas que o alcançam. Neste braço, o ombro e o cotovelo formam um solucionador planar de dois elos, a base orienta esse plano e a garra realiza a preensão. O simulador permite ver o solucionador funcionando, inclusive onde um alvo está fora de alcance.