terça-feira, 5 de março de 2013

Robotics Toolbox - Um Simulador de Robótica para MATLAB (mini tutorial)

--- Atualizado em 19/08/2014

Você está procurando um simulador para estudar robótica ou para testar controladores para robôs? Seus problemas acabaram! O Robotics Toolbox para MATLAB, desenvolvido por Peter Corke, é composto por um conjunto de ferramentas para simulação de robôs manipuladores e de robôs móveis. E o melhor: é gratuito!

Eu já comentei sobre outros simuladores baseados em MATLAB (como o simulador feito pelo Alexandre Brandão e outro que eu desenvolvi junto com o colega Wanderley Cardoso). Mas, o Robotics Toolbox é especial pois é bastante completo e possui versões para Octave, SciLab e Python, embora estas ainda não possuam todos os recursos da versão para MATLAB. Os arquivos do Robotics Toolbox estão disponíveis para download no site do próprio autor.

Instalar o toolbox é bem simples. Basta descompactar os arquivos numa pasta a sua escolha. Em seguida, execute o startup_rvc.m para adicionar as pastas do toolbox ao path do MATLAB. Pronto! Você já pode acessar suas funções!

O toolbox conta com vários modelos de robôs comerciais pré-programados, como os manipuladores PUMA 560, Motoman HP6 e FANUC AM120. Também possui os modelos do Stanford Arm e de um manipulador planar de duas juntas. A imagem abaixo ilustra a execução da simulação de um manipulador PUMA 560.

Simulação do robô PUMA 560.

Se você quiser, pode criar o modelo de seu próprio robô! O toolbox possui funções que ajudam na criação do modelo com base nos parâmetros de Denavit-Hartemberg. Por exemplo, o código a seguir cria um manipulador RRRR e obtém diversas informações sobre o robô criado. O robô criado é baseado no robô didático SPIDER, desenvolvido por Renan Louzada e Marcos Vieira.

% Primeiro, a função Link é usada para criar cada elo. 
% Os parâmetros da função Link são exatamente os parâmetros
% de Denavit-Hartemberg do elo em questão, nesta ordem: 
% theta = ângulo da junta (rad)
% d = deslocamento do elo (m)
% a = comprimento do elo (m)
% alpha = torção do elo (rad)
% sigma = tipo de junta (0: rotativa ou 1: prismática)

L(1) = Link([0 1 0 pi/2 0]);
L(2) = Link([0 0 1 0  0]);
L(3) = Link([0 0 0 pi/2 0]);
L(4) = Link([0  1 0 0 0]);

% Em seguida, a função SerialLink cria o robô 
% utilizando os elos criados anteriormente. 

robo = SerialLink(L, 'name', 'Robô Spider')
pause;

% A função fkine permite obter a matriz de transformação
% homogênea que relaciona o referencial da base com o do
% efetuador (cinemática direta) para uma dada configuração.

disp('Variáveis de juntas:');
q0 = [0 0 0 0];
qf = [pi pi/4 3*pi/4 pi];
qf2 = [pi pi/4 3*pi/4 0];

disp('Cinematica Direta:');
T = robo.fkine(qf)
pause;

% A matriz jacobiana relaciona as velocidades das juntas com
% a velocidade espacial do efetuador. O toolbox permite obter
% o jacobiano geométrico (que considera as componentes de 
% velocidade cartesiana do efetuador):

disp('Jacobiano:');
J = robo.jacob0(qf)
pause;

% Finalmente, é possível calcular o índice de manipulabilidade
% deste efetuador na configuração dada:

m = sqrt(det(J*J'))

% A representação gráfica do robô para as posições articulares
% armazenadas no vetor q pode ser obtida com a função plot. No
% exemplo a seguir, uma animação é gerada a partir de uma 
% sequência de configurações articulres:

tempo = 0:.1:10;
q = jtraj(q0, qf, tempo);
robo.plot(q)
q = jtraj(qf, qf2, tempo);
robo.plot(q)


Várias outras funções estão disponíveis no toolbox, como funções para obtenção da cinemática inversa, cálculo de matrizes de rotação, entre outras. 

O toolbox também traz esquemas de controladores utilizando alguns dos modelos pré-programados. Por exemplo, o diagrama a seguir ilustra o sistema feito em Simulink de um esquema de controle de movimentação para o manipulador PUMA 560 com base em Jacobiano inverso. 

Diagrama de blocos de um controlador de movimento para o robô manipulador PUMA 560.

No Robotics Toolbox também existe suporte para simulação de robôs móveis. Devo dizer que o aspecto visual da simulação de robôs móveis não sé tão bom quanto o do simulador desenvolvido pelo colega Alexandre Brandão (de fato, o simulador do Alexandre ganha de muito). 

Até a versão 9.8, havia limitações como a não consideração de aspectos dinâmicos nos modelos de robôs móveis e a inexistência de um modelo para o tradicional robô de tração diferencial (uniciclo). No entanto, na versão 9.9 o autor acrescentou os blocos que desenvolvi para simulação do robô de tração diferencial! :-)

Se você quiser, além dos blocos DiffSteer Kinematics e DiffSteer Dynamics, para simulação do robô de tração diferencial, eu preparei outros blocos, como: controlador de seguimento de trajetória, controlador de compensação dinâmica, adaptação automática de parâmetros dinâmicos para o controlador de compensação dinâmica, geração de trajetórias de referência e cálculo de índices de desempenho (IAE, ISE, ITAE, ITSE e Energia). Para utilizar esses blocos, basta fazer download do arquivo ZIP que está disponível no site da MathWorks e descompactar seu conteúdo numa pasta a sua escolha. Não é necessário ter o Robotics Toolbox instalado para usar esses blocos, mas se você estiver usando o Robotics Toolbox, é uma boa ideia descompactar na pasta "...\rvctools\simulink" do toolbox. Após copiar os arquivos, abra a biblioteca "DiffSteer_model.slx" e veja que os novos blocos.

Também acrescentei no arquivo ZIP alguns exemplos de utilização dos novos blocos. Dois podem ser rodados com os scripts "sim_unicycle_dynamics.m" e "sim_unicycle_kinematics.m" e servem apenas para ilustrar a diferença de comportamento entre os modelos quando se considera ou não a dinâmica da estrutura. Aproveitei a mesma estrutura de um dos exemplos originais do toolbox, mas que fazia a simulação do robô car-like. Outros dois sistemas são "kinematic_controller_system.slx" e "dynamic_controller_system.slx", que já trazem sistemas completos com uso dos blocos do robô, controladores, gerador de trajetórias e cálculo de índices de desempenho. A figura abaixo ilustra um deles.


Sistema completo para simulação de controlador adaptativo de compensação da dinâmica do robô de tração diferencial.

O bloco DiffSteer Kinematics pode ser facilmente utilizado para simular o modelo uniciclo. Basta colocar em zero o valor do parâmetro que determina a distância do ponto de interesse ao centro do eixo virtual das rodas de tração.

Mais informações sobre a utilização de cada bloco podem ser obtidas acessando o help dos próprios blocos (clique com o botão direito no bloco e selecione help). Testei com sucesso os novos blocos com o Robotics Toolbox versão 9.8 rodando em MATLAB R2012b e R2013a em Windows 7, e R2013a em Windows 8.1.

O Robotics Toolbox é muito interessante para simulação de robôs móveis, principalmente pela facilidade de utilização, pela possibilidade de alteração dos modelos e pelas funções de planejamento de trajetórias, localização e mapeamento. Por exemplo, o toolbox possui funções para aplicação de diagrama de Voronoi, filtro de Kamlan Estendido (EKF) e filtro de partículas! 

Além de simular robôs terrestres, o Robotics Toolbox também possui ferramentas para simulação de quadrotores! É muito bom para você poder testar suas ideias e evitar destruir seu brinquedo. :-)

Simulação de um quadrotor em voo.

Você pode fazer download do Robotics Toolbox aqui. Os blocos para simulação do robô de tração diferencial (uniciclo) estão disponíveis aqui. O manual com explicação de todas as funções do toolbox está disponível aqui.

Além do manual, o livro Robotics, Vision and Control, de autoria do prórprio Peter Corke, aborda a teoria e traz a explicação das funções dos toolboxes de robótica e de visão computacional (também de autoria dele) com mais de mil exemplos! Na parte final ele traz uma série de exemplos de controladores para robôs baseados em visão computacional. Comprei o livro e achei excelente!

Espero que possam aproveitar esta ótima ferramenta.
Até a próxima!

Referências:
http://www.mathworks.com/matlabcentral/fileexchange/44850-velocity-based-dynamic-model-and-adaptive-controller-for-differential-steered-mobile-robot
https://dl.dropbox.com/u/24875984/Unicycle.zip
https://dl.dropbox.com/u/24875984/unicycle_model_for_Robotics_Toolbox.zip
http://petercorke.com
http://petercorke.com/Toolbox_software.html
http://www.petercorke.com/RVC/

3 comentários:

  1. Olá, Laese. Acho que essa sua dica seria mais interessante na página sobre uso de Bluetooth com Android e Arduino:
    http://nossosrobos.blogspot.com.br/2012/05/arduino-wireless-parte-ii-via-bluetooth.html
    Abraços!

    ResponderExcluir
  2. cara parabens, bem simples era oque eu estava precisando

    ResponderExcluir