Planejamento de Trajetórias no Espaço de Juntas
Objetivos de Aprendizagem
- Separar uma trajetória em caminho e escalonamento no tempo, e dizer o que uma reta no espaço de juntas dá e não dá no espaço de tarefa.
- Resolver os polinômios cúbico e quíntico para as condições de contorno e calcular os picos de velocidade, aceleração e jerk.
- Montar um perfil trapezoidal de velocidade, enunciar sua condição de viabilidade e achar o tempo mínimo sob limites de velocidade e aceleração.
- Sincronizar várias juntas para que a mais lenta defina a duração.
- Comparar métodos de pontos de passagem pela continuidade que dão, e reconhecer um ponto não atingido ou um overshoot.
Contexto e Motivação
A cinemática inversa entrega configurações, não movimento. Modern Robotics (Lynch e Park, capítulo 9) abre com isso: durante o movimento, o controlador recebe um fluxo contínuo de posições e velocidades desejadas para seguir. A trajetória é esse fluxo, e a rapidez dela define os torques. the-manipulator-equation-inertia-coriolis-gravity mostrou que reduzir pela metade a duração de um movimento multiplicou por 4 os torques de inércia e de velocidade, sem mudar a gravidade.
Aqui se trabalha no espaço de juntas: cada junta recebe uma função do tempo, que um controlador como o de independent-joint-control-and-pid segue. Modern Robotics contrapõe isso às retas no espaço de tarefa. No espaço de juntas, limites da forma formam um conjunto convexo, então a reta entre duas configurações permitidas continua permitida. Uma reta no espaço de tarefa pode passar perto de uma singularidade cinemática, onde as velocidades das juntas ficam muito grandes, ou sair do espaço de trabalho entre dois extremos alcançáveis. O preço do espaço de juntas é que a ferramenta não anda em linha reta, o que o Exemplo 5 mede.
Os números abaixo são de uma junta e de limites supostos, em graus e segundos.
Teoria Central
Caminho e escalonamento no tempo
Modern Robotics escreve uma trajetória como um caminho com e um escalonamento no tempo com . Para a reta no espaço de juntas,
Se todas as juntas usam o mesmo , elas começam e param juntas e a configuração fica sobre o segmento de reta entre e .
Polinômios cúbicos
Um cúbico tem quatro coeficientes, o bastante para posição e velocidade nas duas pontas: , , , . Resolvendo as quatro equações lineares (com SymPy):
Isso bate com as equações (9.26) a (9.29) de Modern Robotics. Do repouso ao repouso (), fica com , e
A aceleração é máxima nas pontas, onde a junta estava parada um instante antes: ela salta de para , o jerk é infinito ali e, segundo Modern Robotics, isso pode causar vibração.
Polinômios quínticos
Seis coeficientes permitem fixar também as acelerações nas pontas, e . A solução mantém , , e
Do repouso ao repouso com acelerações nulas nas pontas, , e
Agora a aceleração começa em zero, então é contínua nas pontas. O jerk ainda salta ali, de para , mas é finito. O custo é um pico de velocidade maior que o do cúbico. As duas fórmulas fechadas batem com as funções CubicTimeScaling e QuinticTimeScaling da biblioteca de código de Modern Robotics ( e em , ).
Perfis trapezoidais de velocidade
O trapézio acelera com constante durante um tempo de transição , segue em cruzeiro com e desacelera com no último . A posição é parábola, reta e parábola, daí o nome antigo "linear segment with parabolic blends" (LSPB). A distância percorrida é , então, para , e dados,
Viabilidade. A raiz é real só se
Na igualdade, , o trecho de cruzeiro some e o perfil é um triângulo com pico de velocidade . Com menos aceleração, nenhum perfil dessa família cobre no tempo . A velocidade de cruzeiro fica sempre na janela . Na forma normalizada de Modern Robotics, com , isso vira e .
Tempo mínimo. Dados limites e , o trapézio só atinge se , e então
Caso contrário, o perfil é um triângulo que nunca chega a , com . Modern Robotics observa que, com limites constantes de velocidade e aceleração, o trapézio que usa os maiores e permitidos é o movimento retilíneo mais rápido. A aceleração dele salta quatro vezes, em , , e . O perfil em S acrescenta fases de jerk constante para eliminar esses saltos.
Várias juntas
Numa reta no espaço de juntas, a junta percorre com e . Os limites de são então
e a duração é a de um trapézio unitário com esses limites. A junta mais lenta em relação à própria distância define , e as outras são desaceleradas para chegar junto.
Pontos de passagem
Muitas tarefas fixam configurações intermediárias em instantes dados. Os métodos comuns diferem no que é contínuo onde os segmentos se encontram:
| Método | Passa pelos pontos | Contínuo nos pontos | Na partida e na chegada em repouso |
|---|---|---|---|
| Segmentos cúbicos com velocidades escolhidas | sim | velocidade | aceleração salta |
| Spline cúbica (velocidades resolvidas) | sim | aceleração | aceleração salta |
| Segmentos quínticos com velocidades e acelerações escolhidas | sim | aceleração | aceleração pode ser 0 |
| Parar em cada ponto | sim | velocidade, que é 0 | aceleração salta |
| Segmentos retos com transições parabólicas | não, passa perto | velocidade | aceleração salta |
Modern Robotics apresenta a primeira linha e a generalização para quínticos, e observa que uma velocidade não especificada pode ser escolhida por uma heurística a partir dos pontos vizinhos. A linha da spline é a spline com derivadas fixas de splines: com velocidades nulas nas pontas, a curva inteira sai de um sistema tridiagonal, e as acelerações nas pontas ficam as que ele der. Na linha das transições, a parábola substitui o canto, então a junta nunca chega ao ponto; o Robotics Toolbox documenta isso na função mstraj ("the via point is not actually reached").
Livro vs hoje. O Robotics Toolbox for Python agora chama o trapézio de trapezoidal e marca o antigo lspb como obsoleto. No ROS 2, o joint trajectory controller do ros2_control (documentação da distribuição Lyrical, 2026) escolhe a interpolação pelo que cada waypoint traz: linear se só há posições (posição contínua, desaconselhado), cúbica se há velocidades (velocidade contínua), quíntica se há também acelerações (aceleração contínua).
Exemplos Resolvidos
Exemplo 1: uma junta, três perfis
Uma junta vai de a em s. O cúbico é , o quíntico , e o trapézio usa , o que dá s e . Amostras do script, em graus e segundos:
textt | cubic: q qd qdd | quintic: q qd qdd | trapezoid: q qd qdd 0.00 | 0.00 0.00 135.00 | 0.00 0.00 0.00 | 0.00 0.00 180.00 0.25 | 3.87 29.53 101.25 | 1.44 16.15 110.74 | 5.62 45.00 180.00 0.50 | 14.06 50.62 67.50 | 9.32 47.46 126.56 | 18.64 52.72 0.00 0.75 | 28.48 63.28 33.75 | 24.77 74.16 79.10 | 31.82 52.72 0.00 1.00 | 45.00 67.50 0.00 | 45.00 84.38 0.00 | 45.00 52.72 0.00 1.25 | 61.52 63.28 -33.75 | 65.23 74.16 -79.10 | 58.18 52.72 0.00 1.50 | 75.94 50.62 -67.50 | 80.68 47.46 -126.56 | 71.36 52.72 0.00 1.75 | 86.13 29.53 -101.25 | 88.56 16.15 -110.74 | 84.38 45.00 -180.00 2.00 | 90.00 0.00 -135.00 | 90.00 0.00 0.00 | 90.00 0.00 -180.00
Numa grade de 200001 pontos, o cúbico tem picos de e , o quíntico de e (em e s, entre as linhas da tabela), e o trapézio de e . O trapézio tem a menor velocidade e a maior aceleração; o quíntico, o contrário. O jerk do quíntico vai de a ; o do cúbico é no meio, mais os saltos de aceleração nas pontas.
Exemplo 2: viabilidade e tempo mínimo
Mesma junta e mesma distância, com limites supostos e .
Para s, o trapézio precisa de :
texta (deg/s^2) t_b (s) v (deg/s) note 60 - - infeasible: 60 < 90 90 1.0000 90.00 triangle, v = 2D/T 101.25 0.6667 67.50 v = 1.5 D/T 180 0.2929 52.72 360 0.1340 48.23 v tends to D/T = 45
A linha é o padrão do trapezoidal_func do Robotics Toolbox; o exemplo documentado (de 1 a 2 em 5 s, s, aceleração ) bate com a fórmula.
A duração mínima de cada perfil, com o limite que a determina:
textprofile T_min (s) binding limit peak qd peak |qdd| cubic 1.7321 acceleration 77.94 180.00 quintic 1.8750 velocity 90.00 147.80 trapezoid 1.5000 both 90.00 180.00
O trapézio tem , então entra em cruzeiro, com s. Sem o limite de velocidade, o triângulo levaria s, mas chegaria a . O cúbico em s precisaria de , acima do limite.
Exemplo 3: três juntas, uma duração
As juntas percorrem com limites supostos e . Sozinhas, terminariam em , e s (a junta 3 como triângulo). Juntas, e , então s. Os picos são e : a junta 1 está nos dois limites, a junta 2 no limite de aceleração, a junta 3 bem abaixo dos dois.
Exemplo 4: quatro pontos de passagem, seis métodos
Uma junta passa por em s, partindo e chegando em repouso. As inclinações dos segmentos são , e . A regra de velocidade usada aqui (uma heurística simples, não a única) toma a média das duas inclinações vizinhas quando têm o mesmo sinal e zero quando a junta inverte, o que dá em e em .
Com essas velocidades, o primeiro segmento cúbico é : em ele dá , e aceleração , enquanto o segmento seguinte começa em . A spline com derivadas fixas tem os trechos , e , com tempo local em cada um, e o CubicSpline do SciPy com bc_type=((1, 0.0), (1, 0.0)) concorda com eles até . C e D são segmentos quínticos; D usa as velocidades e acelerações da spline nos pontos e zera as acelerações das pontas. O método F usa segmentos retos com transições parabólicas de meia-largura s centradas em cada ponto, então começa em e termina em .
textmethod q at t=1,2 qd at t=1,2 qdd jump at t=1 qdd jump at t=2 qdd at start peak |qd| peak |qdd| A cubic, rule velocities 30, 70 35, 0 -40 -> 100 -170 -> -60 110 53.5 170.0 B clamped cubic spline 30, 70 50, 10 none (20) none (-100) 80 51.7 100.0 C quintic, rule velocities, qdd 0 30, 70 35, 0 none (0) none (0) 0 61.7 166.4 D quintic, spline values 30, 70 50, 10 none (20) none (-100) 0 51.7 101.0 E cubic, stop at every via 30, 70 0, 0 -180 -> 240 -240 -> -60 180 60.0 240.0 F lines with parabolic blends 30.5, 67.5 35, 15 blend: 25 blend: -125 75 40.0 125.0
A spline (B) é suave por dentro, mas passa dos dados: a velocidade dela em é , então a junta continua subindo até em antes de voltar, enquanto A, com velocidade zero na inversão, nunca passa de . C compra aceleração contínua forçando-a a zero em cada ponto, e paga com um pico de jerk dentro dos segmentos de , contra de D. Só C e D partem e chegam sem degrau de aceleração. Parar em cada ponto (E) é o mais simples e exige a maior aceleração. F erra cada ponto interno por , em que é a mudança de inclinação: em e em . Os picos menores dele não são vitória justa: ele leva s em vez de .
Exemplo 5: reta no espaço de juntas não é reta no espaço de tarefa
Um braço planar 2R com comprimentos supostos m e ângulos relativos, como em forward-kinematics-of-serial-manipulators, tem a ponta em . Andar pela reta de juntas de a leva a ponta de a :
texts theta (deg) tip (m) distance from the straight tip segment (m) 0.00 (0.0, 90.0) (1.0000, 1.0000) 0.0000 0.25 (22.5, 67.5) (0.9239, 1.3827) 0.2168 0.50 (45.0, 45.0) (0.7071, 1.7071) 0.2929 0.75 (67.5, 22.5) (0.3827, 1.9239) 0.2168 1.00 (90.0, 0.0) (0.0000, 2.0000) 0.0000
A ponta se afasta m da reta, o maior desvio numa grade fina. Outro escalonamento no tempo mudaria quando a ponta está em cada ponto, não onde os pontos estão.
Equívocos Comuns e Armadilhas
- "Qualquer serve para um trapézio se a aceleração for alta o bastante." A condição é ; o Exemplo 2 mostra falhando para .
- "O quíntico é mais suave em tudo." O pico de velocidade dele é maior que o do cúbico (Exemplo 1), então uma junta limitada em velocidade leva mais tempo com ele (Exemplo 2).
- "A spline cúbica é a escolha mais suave, logo a melhor." Ela passou dos dados por no Exemplo 4 e, com velocidades nulas nas pontas, ainda parte com um degrau de aceleração.
- "Aceleração contínua significa jerk baixo." O método C tem aceleração contínua e teve o maior jerk dentro dos segmentos, .
- "Um ponto com transição é atingido exatamente." A junta passa perto dele, aqui a .
Resumo
Uma trajetória no espaço de juntas é um caminho reto no espaço de configurações mais um escalonamento no tempo. O cúbico ajusta posição e velocidade nas duas pontas, tem picos de e e parte com um degrau de aceleração. O quíntico fixa também as acelerações nas pontas, o que tira esse degrau ao preço de um pico de velocidade de . O trapézio só existe quando , segue em cruzeiro a com e, com os maiores e permitidos, é, como observa Modern Robotics, o movimento retilíneo mais rápido. Com várias juntas, a mais restrita define a duração. Nos pontos de passagem, segmentos cúbicos dão velocidade contínua, splines e segmentos quínticos dão aceleração contínua, e transições parabólicas dão velocidade contínua mas não atingem o ponto.
Documentation Links
- Lynch and Park (2017, preprint 2019): Modern Robotics, Chapter 9 Trajectory Generation
- Lynch and Park: Modern Robotics book resources, 9.3 Polynomial via point trajectories
- NxRLab: Modern Robotics code library
- Corke: Robotics Toolbox for Python, Trajectories
- ros2_control: joint trajectory controller, trajectory representation (Lyrical)
- SciPy: scipy.interpolate.CubicSpline