quarta-feira, 20 de março de 2013

A necessidade de robôs

Neste vídeo, Dr. Peter Corke apresenta uma visão muito interessante sobre a crescente necessidade de uso de robôs em várias aplicações. Muito interessante! Acompanhe o vídeo com os slides de sua apresentação!



Dr. Peter Corke é um renomado pesquisador na área de robótica, autor do livro Robotics, Vision and Control, criador do Robotics Toolbox para MATLAB e professor na Queensland University of Technology, Austrália.

Até a próxima!

sábado, 16 de março de 2013

MorpHex - Um hexapod estilo Transformers

Meu conceito de hexapod mudou completamente depois de ver esse vídeo!! Veja que ideia super legal!



Recentemente o projeto do robô MorpHex venceu um concurso de inovação da empresa Boca Bearing. Não é pra menos! O MorpHex realmente impressiona!

O robô foi idealizado pelo norueguês Kåre Halvorsen (conhecido como Zenta). Você pode conhecer vários projetos do Zenta e saber mais sobre o MorpHex acessando seu blog.

Até a próxima!


quarta-feira, 6 de março de 2013

Comunicação I²C entre Lego NXT e Arduino


Os kits de robótica Lego NXT são ferramentas de desenvolvimento fantásticas! São fáceis de se trabalhar e permitem a construção e programação de robôs de forma intuitiva e rápida (veja mais sobre esses kits aqui).

No entanto, o controlador do Lego NXT 2.0 (ilustrado na figura abaixo) possui limitação em termos do número de sensores e de motores que podem ser utilizados de maneira simultânea: usando o hardware original, apenas quatro sensores e três motores podem ser conectados simultaneamente ao controlador do robô! Para conexão de mais sensores é necessário comprar um hardware adicional que faz a expansão das entradas, permitindo que até quatro sensores sejam conectados a uma mesma entrada.


Controlador Lego NXT conectado a 4 sensores e 3 motores.

Embora tal limitação não seja um problema para muitas aplicações, em alguns casos o uso de apenas quatro sensores pode ser crítico. Uma solução de baixo custo que permite a utilização de mais sensores é conectar um microcontrolador a uma das portas de entrada do NXT e conectar os sensores ao microcontrolador. Dessa forma, o microcontrolador serve como uma "ponte", fazendo a multiplexação dos sinais dos diversos sensores ligados a ele e enviado ao NXT a leitura de um sensor de cada vez.

As portas do NXT podem utilizar dois padrões de comunicação: RS-485 ou I²C. O aluno Daniel Barcelos Mendes realizou e apresentou o trabalho “Desenvolvimento de Interface de Comunicação e Expansão para Kit de Robótica Educacional” na VII Jornada de Iniciação Científica do IFES, em outubro de 2012. Basicamente, ele implementou uma interface de comunicação entre o NXT e um Arduino. Como o Arduino possui bibliotecas para uma grande variedade de sensores, sua conexão dá ao NXT acesso a muitos sensores diferentes dos oferecidos pela Lego!

Em seu trabalho, Daniel realizou estudos de montagem e de programação do NXT (em linguagem NXC) e do Arduino, montou protótipos e testou a comunicação. Para prova de comunicação foram utilizados no Arduino um sensor de luz tipo LDR (resistor dependente de luz), um sensor de distância ultrassônico e um servomotor.

O texto completo contém códigos para Lego (NXC) e para Arduino e está disponível para download aqui.

Se você prefere realizar comunicação RS-485, veja este tutorial que já foi apresentado aqui no blog.

Divirta-se!
Até a próxima!

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/

quinta-feira, 21 de fevereiro de 2013

Quadricópteros acrobatas!

O vídeo a seguir mostra a incrível coordenação de dois quadricópteros que não apenas equilibram uma haste enquanto voam (pêndulo invertido), mas também lançam a hasta um pro outro. Veja!




Só tenho uma coisa a dizer: PQP!!!
Até a próxima!

Referência:

domingo, 10 de fevereiro de 2013

Arduino RoboDeck

Que tal ter um robô potente, dedicado a pesquisa, baseado em Arduino? Esta é a proposta da XBot, uma empresa brasileira que desde 2007 projeta e fabrica robôs móveis para as áreas de educação e entretenimento.


Robodeck, da empresa XBot.

O Robodeck é um robô destinado a pesquisa. Sua plataforma conta com quatro rodas, sendo que todas possuem motores de tração e de direção. Com isso, o robô pode mover-se em qualquer direção e girar em torno do próprio eixo. Veja:



O robô conta com processador embarcado, câmera, GPS, bússola, acelerômetros, sensores ultrassônicos e infra-vermelhos para detecção de obstáculos, comunicação WiFi, etc. Pesa até 18kg (dependendo da quantidade de baterias) e suporta até 10kg de carga, o que permite transportar sensores e equipamentos.

Com Arduino Robodeck é possível utilizar no Robodeck os shields desenvolvidos para o Arduino. Isso permite agregar, de forma fácil, várias funções ao seu robô! Além disso, você pode programá-lo utilizando a linguagem do Arduino.

A XBot fabrica várias plataformas de robôs móveis. Também promove eventos, competições e treinamentos na área de robótica educacional. Confira o site da empresa!

Até a próxima!

Referências:
http://www.xbot.com.br/educacional/arduino-robodeck/
http://www.xbot.com.br/educacional/robodeck/
http://www.xbot.com.br/