Dinâmica de Lagrange de um Robô de Cadeia Aberta
Objetivos de Aprendizagem
- Escrever a energia cinética e potencial de um braço planar de dois elos cujos elos têm massa, centro de massa e momento de inércia, com cada parâmetro declarado como valor suposto e com unidades.
- Aplicar a equação de Euler-Lagrange à mão e obter os torques nas juntas como funções de , e .
- Confirmar o resultado de quatro maneiras independentes: derivação simbólica com SymPy, um cálculo recursivo de Newton-Euler, um cálculo de Euler-Lagrange por diferenças finitas e a conservação de energia numa simulação.
- Ler a estrutura do resultado: linear em , quadrático em , trigonométrico em .
Contexto e Motivação
static-forces-and-joint-torques manteve o braço parado. Quando ele se move, os motores também precisam acelerar os elos, e elos em movimento empurram uns aos outros. Dois caminhos clássicos dão as equações de movimento. Newton-Euler escreve e o balanço de momentos de cada elo, incluindo as forças nas juntas que mantêm os elos unidos, e depois elimina essas forças internas. Lagrange parte de duas funções escalares, a energia cinética e a potencial escritas nos ângulos das juntas, e as forças internas nunca aparecem. Modern Robotics diz dos dois que as equações resultantes "are, and must be, identical". Esta lição deduz o braço de dois elos por Lagrange, à mão, e depois confere essa afirmação numericamente.
Teoria Central
A equação de Euler-Lagrange com torques nas juntas
Escolha coordenadas generalizadas que fixem a configuração; numa cadeia aberta com todas as juntas atuadas, os ângulos das juntas servem. As forças generalizadas são as grandezas para as quais é a potência entregue, que aqui são os torques nas juntas. Com o Lagrangiano ,
A gravidade entra por , então é todo o resto: os torques dos motores e, se forem modelados, atrito e torques de contato. Pôr a gravidade em e também em a conta duas vezes. A equação supõe elos rígidos e juntas ideais, cujas forças de vínculo não realizam trabalho.
O braço e seus parâmetros supostos
Mesmas convenções de antes: horizontal, para cima, do eixo até o elo 1, do elo 2 em relação ao elo 1, positivos no sentido anti-horário, gravidade ao longo de . Cada elo é modelado como uma barra delgada uniforme, então seu centro de massa fica no meio e seu momento de inércia em torno do centro de massa, para rotação no plano, é . Todos os valores são suposições escolhidas para o exemplo:
| Elo | Comprimento | Massa | Centro de massa a partir da junta | Inércia em torno do centro de massa |
|---|---|---|---|---|
| 1 | m | kg | m | |
| 2 | m | kg | m |
Energia cinética
Um corpo rígido que se move no plano tem energia cinética : translação do centro de massa mais rotação em torno dele. O elo 1 gira em torno da junta fixa: e . Para o elo 2, o centro de massa está em
e, elevando ao quadrado, com ,
A velocidade angular do elo 2 é absoluta: , não . Juntando os termos, com
Com os valores acima, , e , tudo em . Só aparece: girar o braço inteiro em torno da junta 1 não muda sua inércia, mas dobrar o cotovelo muda. As notas de Asada para o MIT 2.12 leem pelo teorema dos eixos paralelos: a inércia vista pela junta 1 é máxima com o braço esticado () e mínima com ele dobrado ().
Energia potencial
A dedução, à mão
Escreva , de modo que , e é constante.
Junta 1. . A derivada no tempo traz e :
não depende de , então .
Junta 2. , cuja derivada no tempo é . Agora depende de :
Na subtração, os termos em da junta 2 se cancelam, e o resultado é
Aqui , e os coeficientes da gravidade são N m e N m. As equações são lineares em , quadráticas em e trigonométricas em , o que Modern Robotics observa valer em geral para cadeias seriais de juntas de rotação.
Conferência com um caso publicado. Fazer , e transforma os elos em massas pontuais nas pontas. Um simplify do SymPy sobre a diferença entre essas equações, assim reduzidas, e a Equação (8.9) de Modern Robotics devolve para as duas juntas. Com , a reduzida é em e em , as matrizes impressas na Figura 8.3 do livro.
Exemplos Resolvidos
Exemplo 1: um estado, termo a termo
Em , rad/s e , com :
Os termos de velocidade, com : na junta 1, N m; na junta 2, N m. A gravidade dá N m. O total é
Nessa velocidade baixa, a gravidade é quase todo o . the-manipulator-equation-inertia-coriolis-gravity mostra como o equilíbrio muda quando o movimento acelera.
Exemplo 2: o SymPy faz a derivação
O SymPy monta o Lagrangiano a partir das posições, não de , então não herda um erro cometido ao juntar os termos:
plaintextt = sp.symbols('t'); q1, q2 = sp.Function('q1')(t), sp.Function('q2')(t) x2 = L1*sp.cos(q1) + lc2*sp.cos(q1 + q2); y2 = L1*sp.sin(q1) + lc2*sp.sin(q1 + q2) K = (m1*lc1**2*q1.diff(t)**2 + I1*q1.diff(t)**2 + m2*(x2.diff(t)**2 + y2.diff(t)**2) + I2*(q1.diff(t) + q2.diff(t))**2) / 2 P = m1*g*lc1*sp.sin(q1) + m2*g*y2 L = K - P tau = [sp.simplify(L.diff(qi.diff(t)).diff(t) - L.diff(qi)) for qi in (q1, q2)]
Com todos os parâmetros mantidos como símbolos, sp.simplify(tau[i] - hand[i]) devolve 0 nas duas juntas, em que hand guarda as duas equações acima. A dedução à mão está certa para quaisquer massas, comprimentos e inércias, não só para os da tabela.
Exemplo 3: um cálculo independente por Newton-Euler recursivo
Newton-Euler não usa nenhuma das expressões de energia. Uma passada para a frente calcula, da base para fora, a velocidade e a aceleração angular de cada elo (, depois ) e a aceleração de cada centro de massa, com a gravidade incluída dando à base uma aceleração para cima. Uma passada para trás, da ponta para dentro, calcula a força de que cada elo precisa, , soma a força repassada pelo elo seguinte e toma momentos em torno de cada junta para obter , que inclui . Em três estados sorteados com numpy.random.default_rng(1) (ângulos uniformes em , velocidades em rad/s, acelerações em , sorteados nessa ordem para cada estado):
textq (rad) qdot (rad/s) qddot (rad/s^2) tau Lagrange tau Newton-Euler (0.074, 2.830) (-2.135, 2.692) (-1.882, -0.767) (12.734756, -3.459386) (12.734756, -3.459386) (2.059, -0.571) (0.298, -2.835) (2.535, 0.381) (-3.914117, 1.050836) (-3.914117, 1.050836) (-1.070, 1.812) (-1.181, -0.279) (-3.660, -0.969) (8.151353, 2.843422) (8.151353, 2.843422)
A maior diferença é N m, erro de arredondamento. No estado do Exemplo 1, Newton-Euler dá N m.
Exemplo 4: diferenças finitas e energia
Mais duas conferências que só precisam de números.
Euler-Lagrange por diferenças finitas. Programe diretamente a partir das velocidades dos centros de massa, aproxime e por diferenças centrais com passo e aproxime por uma diferença central com passo s ao longo da trajetória que passa pelo estado do Exemplo 1 com os e dados. O resultado é N m, a menos de da forma fechada.
Conservação de energia. Com e sem atrito, tem de ficar constante. Resolvendo com scipy.integrate.solve_ivp, método DOP853, rtol=1e-10, atol=1e-12, a partir do repouso em (braço horizontal, ) por 5 s, o braço cai e balança de forma irregular, e , avaliado em 5001 instantes igualmente espaçados, fica abaixo de J. A conservação de energia também denuncia um modelo errado. Troque por em , um fator fácil de perder à mão, e a mesma simulação deriva J. Um modelo que passa no teste de energia ainda pode estar errado em termos que não realizam trabalho, e por isso as outras três conferências também são feitas.
Equívocos Comuns e Armadilhas
- "O elo 2 gira a ." Sua velocidade angular absoluta é . Usar tira de e de .
- "Some à inércia em torno da junta." Use a inércia em torno do centro de massa junto com , ou só a inércia em torno de um eixo fixo. Misturar as duas conta a mesma massa duas vezes.
- " tem termos de velocidade." depende só de , então na junta 1 sobra apenas a gravidade. Todos os termos de velocidade de vêm de derivar no tempo.
- "Lagrange e Newton-Euler dão dinâmicas diferentes." Dão os mesmos torques (Exemplo 3, até ). Diferem na organização do trabalho e no custo, não na resposta.
- "A matriz de massa é constante." vai de em a em , um fator de 2,75.
- "A energia se conserva, então o modelo está certo." O teste de energia pega erros que criam ou destroem energia, como o fator 2 perdido, mas não todo erro.
Resumo
Para um braço planar de dois elos com massa distribuída, o Lagrangiano e a equação de Euler-Lagrange dão, à mão, e , com . Para o braço suposto, , , e . O SymPy concordou simbolicamente, um cálculo recursivo de Newton-Euler concordou até , um Euler-Lagrange por diferenças finitas concordou até , e o movimento livre conservou a energia dentro de J, enquanto um modelo com um fator 2 perdido derivou 18,6 J. Com massas pontuais, o resultado se reduz à Equação (8.9) de Modern Robotics.
Documentation Links
- Lynch and Park (2017): Modern Robotics: Mechanics, Planning, and Control (preprint PDF)
- Asada (2005): MIT OCW 2.12 Introduction to Robotics, Chapter 7: Dynamics
- SymPy documentation: Calculus tutorial
- SymPy documentation: Kane's Method and Lagrange's Method (API)
- SciPy documentation: scipy.integrate.solve_ivp