Vinicius Mariano Gonçalves
Prof: Vinicius Mariano Gonçalves
Sala: 2120 (DEE)
E-mail: vinicius.marianog@gmail.com
Pontos:
Robotics, Modelling, Planning and Control
Bruno Siciliano
Lorenzo Sciavicco
Luigi Villani
Giuseppe Oriolo
Classificação por tipo de movimento:
Nesta disciplina, nosso foco são os robôs manipuladores:
Entretanto, a maioria dos conceitos apresentados nesta disciplina são aplicáveis em robótica, no geral.
Estamos interessados na modelagem matemática desses robôs e no seu controle.
Restrições podem reduzir os graus de liberdade.
O robô ao lado, que normalmente tem 6 graus de liberdade, está restrito a ficar com seu efetuador
"preso" no chão.
Quatro restrições:
6 juntas - 4 restrições = 2 graus de liberdade.
No exemplo anterior, a restrição não erá "física", no sentido que a imposição de que o
robo tenha o efetuador grudado no chão foi imposta pelo programador.
Em alguns casos, a restrição é estrutural do robô. Veja a Plataforma
de Stewart ao lado.
Cada um dos "braços" tem 1 junta prismática, 2 rotativas (na ponta inferior) e 3 rotativas (na junta superior);
Entretanto, temos 30 restrições, e portanto 6 x 6 - 30= 6 graus de
liberdade.
Não trataremos esse tipo de robô, em que o número de graus de liberdade não é o número de juntas ("cadeia fechada"), neste curso.
Plataforma de Stewart
Cartesiano: três juntas lineares.
As três juntas são ortogonais.
A área de trabalho é uma caixa.
Muito simples de modelar/controlar.
Não é possível controlar a orientação do efetuador.
Muito utilizado em impressão 3D, por exemplo.
Cilíndrico: duas juntas lineares e uma rotativa.
Rapidez e precisão boa no controle (grosso modo: juntas rotativas são mais rápidas que lineares).
A área de trabalho é um cilindro.
Utilizado em tarefas de pick and place.
SCARA (Selective Compliance Articulated Robot Arm): duas juntas rotativas e
uma linear.
Muito rápido (mais que o cilíndrico).
A área de trabalho é um cilindro.
Compliance ("Compliança") é a capacidade de um sistema de ser
flexível e se adaptar à força que nele age. Os robôs SCARA têm uma leve compliança nos eixos x e
y (mas não no z), permitindo que suas juntas rotativas se movam um pouco reagindo a uma força. De
certa forma, é o oposto de rigidez.
Usado em tarefas que exigem a aplicação de uma força (ex: inserir uma peça dentro de outra).
Objetivo: descrever o movimento do robô.
Nossos manipuladores são formados por corpos rígidos (os
elos) conectados sequencialmente.
Descrevendo o movimento deles, descrevemos o movimento do robô.
Corpos rígidos são objetos que não podem ser deformados, quebrados ou grudados.
Como descrever o movimento desses objetos?
No ensino médio, aprendemos a fazer a descrição de movimento de uma partícula
no espaço tridimensional.
Para isso, dado um referencial \(\mathcal{F}_0\), fornecemos a todo instante de tempo
\(t\)
as coordenadas
\(x(t)\), \(y(t)\) e \(z(t)\) da partícula em \(\mathcal{F}_0\).
Note que em uma partícula a rotação é irrelevante (suas dimensões são desprezíveis, ou
seja, não tem volume).
O movimento de corpos rígidos pode ser descrito "grudando" um referencial no objeto e
descrevendo o
movimento
(translação + rotação) desse referencial. Será necessário fornecer mais informação que
\(x(t)\), \(y(t)\) e \(z(t)\).
Posição + orientação = pose do objeto.
Objetivo: descrever o movimento do efetuador do robô, um corpo
rígido.
Como o único movimento do robô é utilizando suas juntas,
há de existir um mapeamento matemático entre a posição atual das juntas (variáveis no
tempo)
e os parâmetros estruturais do robô (fixos) na descrição matemática da pose do efetuador
com relação a um
referencial \(\mathcal{F}_0\).
Seja \(q\) um vetor com a posição de todas as juntas e \(T\) a descrição
do efetuador em \(\mathcal{F}_0\), então deve existir uma função matemática \(f\) tal
que
\(T = f(q)\).
A função \(f\) é chamada de cinemática direta do efetuador;
Permite calcular onde o efetuador está em função das juntas móveis, cuja posição está no
vetor \(q\).
A cinemática inversa resolve o problema contrário: dado uma pose
\(T\), qual é o valor das juntas \(q\) tal que \(T=f(q)\)?
Os dois problemas são importantes, pois controlaremos a posição das juntas \(q\)
objetivando fazer com que o efetuador alcance uma determinada pose \(T\). As duas
funções fazem as duas ligações possíveis entre essas duas quantias.
Objetivo: descrever o movimento do efetuador do robô, um
corpo rígido.
As cinemáticas diretas e inversas mapeiam posições (das juntas) em
"posições" do efetuador (no caso de um corpo rígido, por "posição"
entenda "pose").
Em controle, isso não é o suficiente. Precisamos relacionar velocidades também.
Um corpo rígido tem dois vetores velocidades, ambos vetores tridimensionais:
O objetivo da cinemática diferencial é o seguinte: dado que em um
instante
de tempo a posição das juntas é \(q\) e a velocidade instantânea
das juntas é
\(\dot{q}\), determine o valor de \(v\) e \(w\) naquele mesmo instante de tempo.
Portanto, existem funções \(g_v\) e \(g_{\omega}\) tal que \(v=g_v(q,\dot{q})\) e
\(\omega=g_{\omega}(q,\dot{q})\).
Objetivo: controlar as juntas do robô para atingir uma determinada
pose no efetuador.
Aqui faremos uma hipótese (muito razoável) sobre o robô: que ele tem uma interface de
programação que nos permite
enviar, a cada ciclo de controle, a velocidade de cada junta desejada para o robô, aqui
chamada de \(u\).
Assumimos que ele segue perfeitamente esse comando enviado. Portanto, consideramos um sistema de controle
em que a variável manipulada \(u\) é a velocidade
da juntas desejada e a
variável de processo \(q\) é a posição das
juntas. O modelo que relaciona
as duas é $$\dot{q} = u.$$
O objetivo então é, dada uma pose desejada para o efetuador \(T_{des}\), criar um controlador (algoritmo) utilizando a posição das juntas atual \(q\) (portanto em malha fechada) que garanta que o efetuador sairá da sua pose inicial (qualquer seja ela) e chegue na pose desejada:
$$u = h(q)$$É chamado de controle cinemático pois abstrai a dinâmica
do sistema, isso é,
as forças/torques que agem no robô, e as massas/momentos de inércia envolvidas.
O controlador usa a cinemática direta e a cinemática diferencial para calcular a ação de
controle.
Controle, no geral, não linear pois a função \(h(q)\) é, no geral,
não linear.
Objetivo: controlar as juntas do robô para atingir uma determinada
pose no efetuador, mas agora
sem considerar que o robô tem uma interface de controle de alto nível de velocidade.
Atuaremos diretamente
no torque dos motores que movem as juntas.
Portanto, agora não mais estamos falando de cinemática, mas sim de
dinâmica, uma vez
que as forças/torques que agem no robô e as massas/momentos de inércia de seus corpos
rígidos são relevantes.
Temos portanto que aprender a escrever as equações de dinâmica do
sistema, ou seja,
uma equação diferencial que relaciona a evolução da posição e a velocidade de todas as
partículas
do robô dados os parâmetros do sistema (como as massas e momentos de inércia) com as
forças
(que podem ser variáveis).
Como o movimento de todas as partículas do robô é uma consequência somente
ao movimento das juntas (pois
são corpos rígidos) e assumindo que a única força que age no sistema são os torques em
cada motor, \(\tau\), desejamos
obter a equação diferencial $$\ddot{q} = F(q,\dot{q},\tau)$$ que
relaciona essas quantias.
Aplicar as Leis de Newton em cada uma das (infinitas) partículas
que formam o robô não é factível. Felizmente, há várias maneiras de contornar esse
problema...
Objetivo: controlar as juntas do robô para atingir uma determinada
pose no efetuador, mas agora
sem considerar que o robô tem uma interface de controle de alto nível de velocidade.
Atuaremos diretamente
no torque dos motores que movem as juntas.
Utilizando o modelo dinâmico do robô, \(\ddot{q}=F(q,\dot{q})\), podemos projetar uma lei
de controle
$$\tau = h(q, \dot{q})$$ utilizando a posição e a velocidade das juntas para alcançar
uma pose desejada \(T_{des}\).
Aqui assumimos que as únicas forças que agem no robô vêm dos motores, e portanto são
completamente
controláveis. Portanto, não haverá força externa (como contato do robô com o
ambiente).
Uma das maneiras de projetar o controle dinâmico é começando a partir do controle
cinemático.
Controle, no geral, não linear pois a função \(h(q,\dot{q})\) é, no
geral, não linear.
Q: Qual a vantagem do controle dinâmico sobre o cinemático?
R: Com ele podemos implementar certos tipos de tarefas que
não seriam possíveis usando controle cinemático. Em especial, ele serve como base para o
controle de força (que não veremos neste curso), onde consideramos
forças externas agindo no robô. Tal controle é necessário quando temos tarefas em que o robô
deve fazer uma força controlada no ambiente.
ROS (Robotic Operating System): é um software amplamente utilizado na academia e a indústria
para intermediar a comunicação entre códigos de controle (códigos em C++, Python, etc...) e os robôs;
Permite a reutilização do código em robôs diferentes, pois abstrai detalhes de comunicação específicos de cada
robô (ou seja, comunica com os drivers de cada robô).
É similar ao conceito de OPC em automação.
Veremos noções introdutórias desse software nesta disciplina.
Um dos pioneiros na robótica da Escola de Engenharia foi o professor Guilherme
Pereira, que
fundou o laboratório CORO em 2004.
Desde 2018 é professor da West Virginia University.
Atualmente, temos o grupo MACRO, formado por docentes do depto. de elétrica e eletrônica.
Formado por 6 docentes e vários discentes.
Eu (Vinicius) sou um dos membros, trabalhando com controle baseado em otimização aplicado a diversos tipos de robôs: manipuladores, manipuladores móveis, humanoides, drones, aviões autônomos.
Equipe de competição de quadrotores da UFMG;
Formado primariamente por alunos de pós-graduação em Engenharia Elétrica.
Cooperação entre CORO e VERLAB.
Em 2019, sétimo lugar na AlphaPilot Challenge. Foi o unico time da América Latina classificado.
O mercado de trabalho no Brasil é, infelizmente, ainda incipiente e limitado.
Entre outros fatores, isso é consequência dos preços elevados dos robôs (um manipulador pode variar entre U$ 50.000 e U$ 100.000 dólares!!!).
Grande parte dos roboticistas no Brasil estão em universidades.
Apesar disso, existem algumas iniciativas e a expectativa é que o mercado cresça bastante,
sobretudo com a redução do preço dos robôs.
Considerando o mercado mundial, a situação melhora significativamente.
Ainda é um trabalho muito especializado, de modo que uma parte relevante dos profissionais de
robótica
tem mestrado ou doutorado.
Muitas oportunidades de mestrado e doutorado no exterior.
Veja a principal lista de robótica do mundo: https://www.lists.kit.edu/sympa/arc/robotics-worldwide/2022-03/.
Principais desenvolvedoras de robôs manipuladores industriais:
UAIBot é um simulador de robótica open-source desenvolvido por mim
(Vinicius), meu aluno Johnata Brayan e outros colaboradores.
A parte de código é feita em Python, e a visualização das simulações pode ser feita
no próprio navegador, sem necessidade de instalar nenhum programa.
As animações geradas são arquivos .html que podem ser vistos em qualquer navegador.
Usaremos esse simulador na disciplina.
Github do projeto:
https://github.com/viniciusmgn/uaibot_vinicius
.
Há várias maneiras de usar\instalar o UAIBot:
Usando uma IDE (como o Pycharm), digite no terminal:
>>git clone https://github.com/viniciusmgn/uaibot_vinicius.git
>>pip install uaibot_vinicius/
Após a instação, teste rodando uma simulação já instalada no pacote. Para isso, rode o seguinte código em Python:
import uaibot as ub
sim = ub.Demo.control_demo_1()
sim.save('C:\\','teste_controle_1')
Vá na pasta (C:\) e abra o arquivo HTML criado para ver a simulação.
Se não quiser usar IDEs no Desktop, você pode usar a plataforma colaborativa online Google Colab, deixando tudo no
navegador.
No Google Colab, rode o comando para instalar o UAIBot
!git clone https://github.com/viniciusmgn/uaibot_vinicius.git
!pip install uaibot_vinicius/
Note que isso precisa ser feito sempre que você reiniciar o Google Colab.
No Google Colab não é necessário usar a função "save". As simulações já são mostradas no próprio
navegador. Ao rodar o código abaixo, a simulação já será mostrada automaticamente:
import uaibot as ub
sim = ub.Demo.control_demo_1()
Para ao trabalho final da disciplina, vocês devem implementar no simulador UAIBot uma aplicação de robótica.
Vocês devem escolher o robô adequado para a aplicação. A implementação deve observar limitações práticas do robô como
limites de juntas, velocidade e torque nos motores, etc.
Os manuais dos robôs implementados no UAIBot podem ser encontrados aqui.
Há muitas ideias interessantes de aplicação aqui.
Mais informações (datas, instruções, etc...) em breve, no Minha UFMG.