domingo, 29 de abril de 2012

Festo ExoHand

A Festo é uma empresa que prima pela inovação. Na área de robótica ela já deu algumas contribuições muito interessantes, como no desenvolvimento do Smart Bird, um robô que voa batendo as asas como um pássaro (veja aqui).

Agora, a Festo divulga a ExoHand, uma garra super avançada para robôs manipuladores! A ExoHand imita quase que perfeitamente os movimentos de uma mão humana. Pode ser controlada diretamente por um humano através de uma luva dotada de sensores: a ExoHand repete os movimentos feitos pela luva.

Veja o vídeo:



Com a ExoHand, é possível controlar robôs à distância para que executem tarefas muito delicadas em locais onde humanos não poderiam ter acesso. A Festo também prevê sua utilização em tarefas de auxílio a deficientes ou a pessoas que precisam de exercícios para recuperação de movimentos (nesse caso, o paciente pode vestir a luva que possui os atuadores).

O acionamento dos dedos da ExoHand é feito por oito cilindros pneumáticos de dupla atuação. Potenciômetros lineares são usados para detectar o deslocamento dos dedos e sensores de pressão evitam que ela esmague objetos sensíveis. Eles também transmitem informação para a luva, fazendo com que o humano seja capaz de sentir o que o robô está sentindo (force feedback). A pessoa pode sentir a forma do objeto que o robô está segurando!!

Informações completas sobre a ExoHand podem ser encontradas neste documento da Festo:


Até a próxima!

sexta-feira, 6 de abril de 2012

Quer aprender robótica?

--- Atualizado em 31/07/2017:
Esse post é antigo. A informação é válida, mas alguns dos links não funcionam mais. Falei um pouco mais sobre cursos on-line de robótica nesse outro post. Se você quiser começar por cursos mais básicos ou com foco em controle de robôs móveis, vale dar uma olhada!
---

Mas... aprender o quê de robótica? Robótica é um termo muito amplo e "aprender robótica", em si, não quer dizer muita coisa. Em primeiro lugar, a robótica se divide principalmente em duas grandes áreas:
- Robótica Móvel (que trata dos robôs que se locomovem); e
- Robótica de Manipuladores (os robôs industriais que têm estruturas similares a braços).

Além disso, há subdivisões. Por exemplo, de acordo com o tipo de estrutura de locomoção, os robôs móveis podem ser terrestres, aéreos ou aquáticos. E os terrestres podem ser a rodas, com esteiras, rastejantes, saltitantes... (veja aqui alguns robôs móveis bem diferentes). Para completar, o estudo da robótica pode envolver as áreas de mecânica, de eletrônica, de controle, de sensoreamento, de visão computacional, de inteligência artificial...

Enfim, não é meu objetivo aqui definir as diversas áreas da robótica. Apenas queria enfatizar que "aprender robótica" em geral significa aprender uma área da robótica. É verdade que muitos dos conceitos de uma área da robótica são usados em outras. Por isso, se você quer aprender robótica, comece por uma dessas áreas e vá em frente!

Se você tem interesse em aprender sobre robôs manipuladores (o que inclui a estrutura base dos robôs humanóides), confira o curso Introduction to Robotics, lecionado pelo professor Oussama Khatib. A página do curso é totalmente aberta (veja aqui) e inclui vídeos de todas as aulas que o professor Khatib lecionou em Stanford no ano de 2008, além de material em PDF. O professor Oussama Khatib é um respeitado pesquisador nessa área, com mais de 25 anos de experiência e mais de 200 trabalhos publicados!

Se você gosta da área de programação e quer aprender técnicas usadas em robôs móveis reais, uma excelente opção é fazer um curso on-line, totalmente gratuito e com material didático incluído, lecionado por um dos pesquisadores mais importantes da área de veículos robóticos! Estou falando do CS373 - Programming a Robotic Car, da Udacity. Quem dá o curso é o Sebastian Thrun, que é professor da Universidade de Stanford e coordenador do projeto do Google Car.

Antes do curso começar, fiz um comentário sobre ele aqui no blog. Participei da primeira turma desse curso e conto aqui um pouco de minha impressão sobre ele. 

Primeiro, veja o vídeo de introdução do curso, disponibilizado logo no início da primeira aula. Nele, Sebastian Thrun mostra alguns de seus trabalhos com veículos robóticos, como os carros usados nas competições da DARPA de 2005 e 2007, além do Google Car andando na cidade de maneira autônoma!



Minha impressão sobre o curso? Foi fantástico!! Achei realmente fascinante a maneira como as aulas são organizadas, como os assuntos são abordados e como as tarefas de casa são distribuídas.

Para dar uma ideia a vocês, o curso é organizado em 7 lições, cada uma com duração de uma semana. Cada lição tem cerca de 20 a 30 vídeos de curta duração (alguns têm 2~4 minutos, outros têm 30 segundos ou menos). É possível assistir todos de uma só vez ou poucos de cada vez, de acordo com sua disponibilidade. O sistema da Udacity marca quais vídeos você já completou, assim você sempre sabe onde parou.

Há alguns pré-requisitos para fazer esse curso. Além de ser todo em inglês, ele foi feito pensando em alunos de graduação ou que, pelo menos, já tenham nível médio completo. Também é importante ter conhecimento básico de programação. Eles usam a linguagem Python (se você não conhece essa linguagem, recomendo começar pelo curso CS101 da Udacity). Além disso, algum conhecimento de álgebra linear (matrizes) é desejável.

Os temas abordados nas aulas foram temas importantes e aplicáveis a qualquer robô móvel. Têm ligação com as áreas de localização e movimentação dos robôs. Foram os seguintes:


- Probabilidade Básica;
- Localização usando técnicas de Markov e Filtro de Partículas;
- Gaussianas e probabilidade contínua;
- Rastreando outros veículos com Filtro de Kalman;
- Planejamento e busca;
- Otimização de caminhos com algoritmos A Star e Programação Dinâmica;
- Controle PID da direção do veículo;
- SLAM (navegação e mapeamento simultâneos).


Muitos dos vídeos do curso contêm perguntas ou problemas a serem resolvidos pelos alunos, o que me pareceu excelente para auxiliar no aprendizado. Ao final do vídeo, uma tela com a pergunta aparece sobre o próprio vídeo, com um local para que você coloque sua resposta. Pode ser uma pergunta de múltipla escolha, ou para que você calcule alguma coisa ou até para que você faça uma parte do código de um programa! Nesse caso, uma janela com um interpretador Python é aberta para que você digite seu código na tela do navegador mesmo. Se você não quiser, não é necessário instalar nada em seu computador.

De fato, muitas das tarefas são mesmo de programação! A figura a seguir mostra o resultado de um de meus programas de teste do robô com controlador PID. No curso, fazemos toda a programação num ambiente simulado. O professor Thrun nos fornece o código básico com o que precisamos para fazer o sistema rodar, para cada exercício. No exercício de PID, por exemplo, nós tínhamos uma classe "Robot" que criava um objeto com as características e o modelo cinemático do robô que tínhamos de controlar!

Resultado de uma simulação de controlador PID aplicado ao robô móvel do problema dado.

No final do curso há uma "prova final", formada por uma série de exercícios sobre todos os assuntos tratados no curso, além de um exercício de programação.

Enfim, se você quer começar a "aprender robótica" e não tem robô para praticar, vale muito à pena  experimentar esse curso!

Até a próxima!

Referências:

quarta-feira, 7 de março de 2012

Cheetah - o robô mais veloz do mundo!

A Boston Dynamics ataca novamente! Depois do famoso quadrúpede robô Big Dog e do impressionante humanóide Petman (já comentados aqui no Blog), a empresa divulgou resultados do desenvolvimento do robô chamado Cheetah.

O nome não foi escolhido por acaso: Cheetah é, hoje, o robô terrestre mais veloz do mundo. É capaz de galopar a 18 milhas por hora (cerca de 29km/h)!! Isso mesmo: galopar! Veja:



A impressionante velocidade alcançada por Cheetah deve-se não apenas a seus atuadores hidráulicos, mas também à sua estrutura mecânica, cujo desenho é baseado no corpo dos mamíferos mais rápidos. Suas costas são articuladas, permitindo a realização de movimento para frente e para trás que promove maior velocidade de deslocamento, como num galope. 

A versão atual de Cheetah precisa trabalhar com um compressor hidráulico externo. Por isso, os testes foram todos feitos numa esteira, em laboratório. A Boston Dynamics prevê a realização de testes de campo ainda neste ano. Fique ligado!

O desenvolvimento de Cheetah foi financiado pela DARPA, que é uma agência de defesa dos EUA cuja missão é: "Manter a superioridade tecnológica militar dos EUA e evitar que surpresas tecnológicas afetem a segurança nacional através do financiamento de projetos de pesquisa revolucionários, preenchendo o espaço entre descobertas fundamentais e sua aplicação militar." Não por acaso, a DARPA também financiou projetos como os robôs Big Dog e Petman, além de grandes competições de robótica como o DARPA Urban Challenge e o DARPA Gran Challenge.

Preciso dizer mais alguma coisa?

Eu quero uma agência dessas aqui no Brasil!!!
Atá a próxima!

Referências:

sábado, 4 de fevereiro de 2012

Programando um Carro Robótico

Depois do enorme sucesso do curso on-line Inteligência Artificial realizado junto com Peter Norvig, o professor Sebastian Thrun vai ensinar você a programar o seu próprio veículo autônomo! É isso mesmo!! Veja:



Pra quem não conhece, o professor Sebastian Thrun coordenou a equipe de Stanford que venceu o DARPA Gran Challenge de 2005, onde o veículo batizado de Stanley percorreu 240km do deserto da Califórnia de maneira completamente autônoma! Atualmente o professor Thrun é o responsável pelo projeto do Google Car, que possui um histórico de mais de 1.500km dirigidos sem intervenção humana e mais de 220.000km dirigidos com intervenção ocasional, tudo em ruas e avenidas reais, com trânsito real!

O curso está marcado para começar em 20 de fevereiro e tem previsão de durar 7 semanas. Faça já sua inscrição visitando o site da Udacity (clique aqui). Eu já me inscrevi!! :-)

Até a próxima!

quinta-feira, 12 de janeiro de 2012

Boxie

Você conhece o Boxie?

Boxie é um robô muito simpático, projetado pelo pessoal do MIT Media Lab para estudos dos processos de interação homem-robô. A ideia foi construir um robô que parecesse meio perdido e que pedisse ajuda, para que as pessoas pudessem se sentir compelidas a interagir com ele. O robô diz algumas frases e pede que a pessoa lhe conte quem é, faça coisas, mostre o lugar etc. Tudo é gravado em vídeo! 

O robô possui sensores de temperatura, aceleração etc., para poder tentar inferir se as pessoas lhe carregam com cuidado ou se o maltratam. Tem carroceria de papelão, o que o torna muito leve, além de bastante simpático!

Veja como ficou o documentário feito com vídeos gravados pelo robô:


Até a próxima!

sábado, 7 de janeiro de 2012

LCD para seu robô com Arduino

Gostaria que seu robô tivesse uma tela para mostrar informações sobre os sensores, configurações etc.? Bem... se você usa o NXT (da Lego), você já tem isso. Se não, você pode conectar seu robô a um tablet ou a um computador, construir uma interface gráfica e aproveitar a tela de seu dispositivo (como o Ivan fez - veja no blog TechLego).

Mas, se quer uma coisa mais simples (e barata), seus problemas acabaram! :-)

Se você está usando o Arduino (ou qualquer microcontrolador) para controlar seu robô, usar um display de cristal líquido não é uma tarefa complicada.

Os displays de cristal líquido mais comuns (chamados simplesmente de LCDs - Liquid Crystal Displays) são construídos em módulos que possuem esquemas de ligação e de comunicação padronizados (pelo menos até certo ponto). Por isso, seu uso se torna mais simples, principalmente se o compilador do seu microcontrolador possui uma biblioteca para uso dos LCDs (como é o caso do Arduino). Esses displays possuem seus próprios processadores que cuidam do acionamento dos pixels da tela de cristal líquido. O que você precisa fazer é informar ao processador do display o que você quer exibir, e em que lugar.

Existem basicamente dois tipos comuns de LCDs: os de caractere e os gráficos. Os de caractere são os mais simples de se usar. Esses LCDs possuem pequenos retângulos com um número fixo de pixels, sendo que cada retângulo pode exibir apenas um caractere. O número de retângulos determina a quantidade de caracteres que o display pode exibir. O da imagem abaixo é o tipo mais comum de LCD de caractere: possui 16 colunas e 2 linhas ou, simplesmente, 16x2. Outros tipos são 20x2, 16x4, 16x1, entre outros.

LCD 16x2 tipo caractere.

Os LCDs de caractere possuem memória com o mapa dos caracteres que podem ser exibidos. O seu microcontrolador deve informar ao display qual caractere quer exibir, e em que posição da tela. Isso é feito através de comandos padronizados. Não é o objetivo deste post dar detalhes sobre o funcionamento dos LCDs. Se você quiser saber mais, pode acessar este tutorial que mostra a função de cada pino, o mapa de caracteres etc.

Para usar os LCDs de caractere com o Arduino, você pode utilizar a biblioteca LiquidCrystal, disponível no ambiente de compilação. Nesse caso, escrever no display se resume a usar o comando lcd.print()! É muito fácil! A conexão elétrica entre o LCD e o Arduino é mostrada na figura abaixo. Um exemplo completo de utilização da biblioteca está disponível no site oficial do Arduino. Veja aqui!



Se você usa microcontrolador PIC, veja esta apostila disponível no blog Mecatrônica de Garagem.

O uso de LCDs gráficos não é tão simples, pois deve-se controlar cada pixel individualmente. A padronização desses LCDs também permitiu o surgimento de bibliotecas que facilitam bastante a utilização desses displays. No entanto, existem diversas variações entre fabricantes e modelos, o que exige mais cuidado e atenção ao se utilizar displays gráficos.

O LCD gráfico mais comum é baseado no chip KS0108. Os LCDs de 128x64 pixels que eu conheço são todos baseados nesse chip. É tão comum que existe uma biblioteca para uso desses LCDs com o Arduino (veja detalhes na página que descreve o uso da biblioteca GLCD - Graphic LCD).

Como mencionei, a padronização desses displays não é tão forte como a dos LCDs de caractere. Por isso, tente identificar seu LCD antes de fazer a ligação de seus pinos à placa. Alguns LCDs trazem os pinos de alimentação (Vcc e GND) invertidos!! A página da biblioteca GLCD do Arduino traz informações sobre a ligação de quatro subtipos comuns desse LCD.

Uma observação importante é que alguns LCDs gráficos exigem que a alimentação do potenciômetro de ajuste de contraste seja feita com tensão negativa! Se isso não for feito, mesmo que todos os pinos de seu LCD estejam ligados corretamente, nada aparecerá na tela. Felizmente os módulos atuais trazem um pino especial para alimentar o potenciômetro de contraste, sendo que a tensão negativa é gerada pelo próprio circuito do LCD (assim, você só precisa fazer a ligação correta e alimentar o display com +5V). 

Fiz um teste com o display que tenho ligado a um Arduino Nano. O modelo do meu LCD é  KSM12864J-4. Ele não está na lista da página do Arduino, por isso tive de fazer alguns testes até conseguir fazê-lo funcionar corretamente. A ligação entre o LCD e o Arduino ficou assim:


Arduino Nano Função Pino LCD Comentários
5V +5 volts 2
GND GND 1
-- Vo (Contraste) 3 Ligar ao pino central do potenciômetro
8 D0 7
9 D1 8
10 D2 9
11 D3 10
4 D4 11
5 D5 12
6 D6 13
7 D7 14
14 (alog0) CSEL1 15
15 (alog1) CSEL2 16
-- Reset 17 Ligar a um resistor de 470R a +5V
16 (alog2) R_W 5
17 (alog3) D_I 4
18 (alog4) EN 6
-- Vee (saída contraste) 18 Ligar a um dos pinos do potenciômetro
-- Backlight +5 19 Ligar a um resistor de 100 a 330R a +5V
GND Backlight Gnd 20 Ligar o outro pino do potenciômetro também ao GND


Fiz a ligação do LCD utilizando como alimentação a própria tensão de 5V da placa do Arduino.

Note que o pino de RESET deste LCD NÃO deve ser ligado ao pino de reset do Arduino! Se você fizer isso, a comunicação entre o computador e a placa do Arduino falha. Como o RESET deste LCD é ativo em nível baixo, eu liguei um resistor de 470 ohms entre o pino 17 do LCD e +5V do Arduino, para manter o LCD sempre em funcionamento.

O ajuste de contraste deve ser feito por um potenciômetro de 10k a 20kohms (usei um de 10k, e funcionou bem). O pino central desse potenciômetro deve ser ligado ao pino 3 do LCD. Um dos outros dois pinos (qualquer um) deve ser ligado ao pino 18 do LCD e o outro, ao GND do Arduino.

A alimentação do backlight do LCD é feita através de um resistor de 330 ohms ligado ao pino 19 do display.

Testei esse LCD com a biblioteca GLCD do Arduino. O código a seguir gera a tela mostrada na figura abaixo. Note que os comandos de desenho e de escrita na tela são bem simples! Veja o código:


#include <ks0108.h>
#include "Arial14.h"         
#include "SystemFont5x7.h"   


void setup(){
  delay(500);                // tempo para reset do LCD
  GLCD.Init(NON_INVERTED);   // inicializa display
  GLCD.ClearScreen();  
}


void loop(){   
  GLCD.DrawRect(0, 0, 127, 63, BLACK); // desenha retangulo
  GLCD.DrawRoundRect(2, 2, 123, 59, 5, BLACK);  // retangulo com quinas arredondadas
  GLCD.SelectFont(Arial_14);  // define fonte
  GLCD.CursorTo(1,1);  // posicao inicial do cursor
  GLCD.Puts("Visite:");  // imprime mensagem na posicao selecionada
  GLCD.SelectFont(System5x7); // define fonte - padrao do display
  GLCD.CursorTo(2,5);
  GLCD.Puts("www.nossosrobos.");
  GLCD.CursorTo(4,6);
  GLCD.Puts("blogspot.com");
}



Exemplo de utilização do display gráfico 128x64 pixels com Arduino.

Última dica: você pode fazer o display escrever com fundo invertido (fundo branco e caracteres negros). Basta substituir a linha de inicialização do LCD para:

  GLCD.Init(INVERTED);   // inicializa display

Espero que possa aproveitar essas dicas para deixar seu robô mais interativo!
Até a próxima!

Referências:
http://www.arduino.cc/playground/Code/GLCDks0108
http://www.arduino.cc/en/Tutorial/LiquidCrystal
http://afonsomiguel.com/sites/default/files/lcd16x2_1.pdf
http://mecatronicadegaragem.blogspot.com/2011/01/apostila-usando-lcd-16x2-nos.html

quinta-feira, 5 de janeiro de 2012

Swarmanoid: Rumo a Enxames de Robôs Humanóides


O vídeo abaixo circulou pelas redes sociais em 2011 por ter ganhado a competição de vídeos sobre Inteligência Artificial organizado pela AAAI - Association for the Advancement of Artificial Intelligence.  Trata-se de um exemplo de utilização de robôs de forma cooperativa, com processamento, sensoreamento e atuação distribuídos, realizado pelo projeto Swarmanoid, coordenado pelo Professor Marco Dorigo.

O projeto Swarmanoid é financiado pela Comissão Europeia e tem como objetivo principal a realização de pesquisa científica, concepção, implementação e controle de um sistema distribuído robótico. O sistema em desenvolvimento é composto por pequenos robôs diferentes, mas dinamicamente conectados. Coletivamente, esses robôs formam o que chamamos de swarmanoid. Os robôs atualmente são de três tipos: ye-bots (olhos), hand-bots (mãos), e foot-bots (pés - embora tenha rodas).

Se você ainda não viu, assista o vídeo! Se já viu, veja de novo! Eu já assisti várias vezes, e ainda me surpreendo babando com o que esses robôs fazem!!




No site oficial do projeto você encontra informações sobre o hardware de cada um dos três tipos de robôs desse projeto. Veja aqui!

Até a próxima!!

quinta-feira, 22 de dezembro de 2011

Oficina de Robótica no ES

Quer começar a brincar com robôs? Tem entre 12 e 16 anos?? Então esta notícia é para você!! 

A UCL - Faculdade do Centro Leste, localizada em Manguinhos (Serra, ES), vai oferecer uma oficina de Introdução à Robótica, entre 23 e 27 de janeiro de 2012. 

Na oficina serão utilizados kits de robótica da Lego. Conhece? São muito bacanas!! Eu já publiquei um post sobre eles (veja aqui).

A oficina será realizada pela Robotech - Tecnologia em Robótica Educacional, e está sendo preparada pela professora Carmen Faria Santos, que também é chefe do Laboratório de Robótica Educacional do Centro Tecnológico da UFES e membro do comitê organizacional da RoboCup Junior. 



Para mais informações sobre a oficina, clique aqui.

Até a próxima!

quarta-feira, 7 de dezembro de 2011

Arduino wireless!

Arduino Mega com Wixel shield e módulos wireless.
Que tal fazer seu computador se comunicar com o Arduino sem precisar ligar cabos? Isso permite que você construa um robô com o Arduino e faça seu controle à distância! Ou ainda, que seu robô transmita dados de seus sensores ao computador, que pode processá-los e interferir na movimentação do robô!

Além do uso em robótica, existem várias aplicações para comunicação sem fio entre Arduino e computador, como sensoreamento remoto, sistemas embarcados e qualquer aplicação em que a conexão de cabos seja difícil ou não desejável.

No mercado existem diversos shields que permitem turbinar seu Arduino para que ele possa fazer comunicação sem fios. Alguns permitem comunicação via Bluetooth, outros possuem um rádio digital que transmitem os sinais da porta serial do Arduino (pinos RX e TX).

O shield que testei é o Wixel Shield, vendido pela Pololu:
http://www.pololu.com/catalog/product/2501

Trata-se de um shield que permite o acoplamento de um módulo wireless que se comunica com outro módulo gêmeo, ligado ao computador. Algumas coisas que eu achei muito bacanas nesse shield são:

  • Possui rádio de 2,4GHz com alcance de ~30 metros e velocidade de até 350kbps;
  • Possui um microcontrolador pode ser programado através de uma interface bastante amigável, disponível para download no site da Pololu;
  • Tem 15 pinos de entrada e saída, incluindo 6 entradas analógicas, que podem ser programados de forma independente da comunicação, o que permite expandir a capacidade do Arduino;
  • Permite a criação de uma rede com até 128 módulos de comunicação (por exemplo, 127 Arduinos e um computador);
  • Para fazer comunicação entre computador e Arduino, a configuração é muito simples: basta baixar para o módulo o programa indicado no site e configurar como você quer. A partir daí, a comunicação é feita como se fosse comunicação serial padrão;
  • Permite gravar programas no Arduino sem ligar o cabo USB à placa! Isso facilita muito a atualização do código.


O programa de testes que fiz é bem simples, e está disponível para download aqui.

Ele ativa a saída digital 12 com um sinal PWM cuja razão cíclica pode ser definida de duas formas: através da leitura do valor analógico do pino A2 (0 a 5V), ou através do valor digitado no Serial Monitor, enviado ao microcontrolador. No início, uma mensagem é enviada pela serial para solicitar o modo de funcionamento. A comunicação é feita a 57.600 bps.

Testei o programa no Arduino Mega 1280, com shield Wixel e módulos Wixel wireless. A comunicação funcionou muito bem! Caminhei com o Arduino pela casa e vi que ele era capaz de manter a comunicação em outro cômodo, mesmo separado por uma parede. No entanto, para distâncias maiores (dois cômodos ou mais), a comunicação começava a falhar. Nesse caso, o LED vermelho do módulo wireless se acende para indicar a falha.

Os módulos wireless foram configurados para comunicação em 57.600bps, pois esta é a velocidade de upload de código no Arduino Mega 1280. Dessa forma, isso me permite gravar programas no microcontrolador do Arduino usando a interface wireless (sem precisar ligar o cabo USB à placa). Se você tem outro modelo de Arduino pode ser necessário configurar o módulo wireless para outra velocidade. Exemplos:
Arduino Uno: 115.200 bps
Arduino Mega 2560: 115.200 bps
Arduino Mega 1280: 57.600 bps
Arduino Duemilanove com ATmega328: 57.600 bps
Arduino Diecimila ou Duemilanove com ATmega168: 19.200 bps

O vídeo abaixo ilustra o teste do sistema que montei:


Mais informacoes sobre o uso do Wixel Shield podem ser obtidas em: 

http://www.pololu.com/docs/0J47

E sobre o Wixel Programmable USB Wireless Module estão aqui:
http://www.pololu.com/catalog/product/1337 

Até a próxima!

quarta-feira, 9 de novembro de 2011

ASIMO - o humanóide da Honda

O vídeo abaixo é um comercial da Honda. Ele é meio antigo, mas só hoje o assisti. E fiquei tão emocionado que deu vontade de escrever um pouco sobre o ASIMO. Veja:



O ASIMO (sigla para Advanced Step in Innovative MObility) é, possivelmente, o robô humanóide mais famoso do mundo! Por isso, não vou ficar repetindo aqui o que você muito provavelmente já viu ou leu. No YouTube há centenas de vídeos do ASIMO correndo, dançando, subindo escadas, conversando com pessoas, jogando futebol e até... caindo! E suas especificações estão aqui.



O site oficial do ASIMO também tem vários vídeos, fotos e até um modelo interativo para você controlar. Lá você também encontra as especificações e até a história do desenvolvimento deste fantástico robô. Aliás, desenvolvimento de mais de 25 anos até o momento, contando com as versões de robôs E e P, com as quais a Honda desenvolveu todo o sistema de caminhar. Quando a primeira versão do ASIMO foi lançada, lá pelo ano 2000, ele foi considerado o robô mais complexo e inteligente já construído!

O vídeo a seguir resume a história da pesquisa que resultou no ASIMO:



Hoje a Honda anunciou uma nova versão do ASIMO. Tem mais ou menos o mesmo formato, mas é muito mais ágil e inteligente! Agora ele é capaz de correr a até 9 km/h! Mais rápido que eu. ;-)

Até a próxima!

domingo, 6 de novembro de 2011

Controle e Simulação de Robôs Móveis

Ontem realizei uma palestra sobre Controle de Robôs Móveis para duas turmas de pós-graduação em Engenharia de Controle e Instrumentação da Faculdade UCL. Falei um pouco sobre algumas características dos robôs móveis, como configuração mecânica, sensores utilizados, modelagem matemática e estratégias de controle.

O foco da apresentação foi na parte de modelagem e controle de movimentação dos robôs, especificamente de robôs móveis tipo uniciclo. Os robôs de tipo uniciclo são aqueles que possuem duas rodas de tração (uma de cada lado), acionadas por motores independentes (differential drive). Uma terceira roda "louca" é colocada apenas para dar equilíbrio à estrutura.

Os modelos e os controladores apresentados foram simulados no ambiente MATLAB/Simulink. Foi construído um sistema com os modelos matemáticos dos robôs e dos controladores, o que permite que diferentes configurações de controle sejam simuladas com distintas trajetórias a serem percorridas pelo robô. O sistema construído considera o modelo dinâmico do robô e possui parâmetros para simular alguns robôs comerciais (como o Pioneer 2 e o Pioneer 3). Ao final, calcula índices de desempenho (IAE, ISE, ITAE e ITSE), além de um índice de energia, que podem ser utilizados como base para comparação de desempenho dos controladores e dos ganhos testados.

Sistema construído em Simulink: controlador de seguimento de trajetória.

 Ao final de cada simulação, gráficos com os resultados podem ser visualizados para facilitar a análise do desempenho de cada controlador. Foram implementados dois controladores: um com base na cinemática do robô de tração diferencial e outro que realiza a compensação de sua dinâmica, inclusive de forma adaptativa. A figura a seguir ilustra o sistema com o controlador adaptativo de compensação da dinâmica.

Controlador de seguimento de trajetória com compensação adaptativa da dinâmica.

Um exemplo de resultado é ilustrado na figura abaixo, onde o robô teve de percorrer uma trajetória em forma de oito. A partir de 50 segundos de simulação, foi ativada a função de adaptação dos parâmetros, que resultou em redução do erro de seguimento de trajetória. A figura mostra a trajetória percorrida e a evolução dos parâmetros estimados ao longo da simulação.

Trajetória percorrida e evolução dos parâmetros estimados para o controlador de compensação da dinâmica.


Os arquivos do sistema completo para simulação em MATLAB/Simulink podem ser obtidos aqui. Eles são descompactados numa pasta chamada “Unicycle”, que deve ser acessada através do MATLAB.

--- editado em 28/12/2013 ---

Criei novos blocos para simulação do robô de tração diferencial que são compatíveis com o Robotics Toolbox. Esses blocos incluem: modelo cinemático, modelo dinâmico de velocidades, controlador de seguimento de trajetória, gerador de trajetórias de referência, compensador adaptativo da dinâmica e calculador de índices de desempenho. Estão disponíveis para download no site da MathWorks.

---

Há dois sistemas previamente construídos: um mais simples (sl_unicyclecontroller.mdl), que simula apenas um controlador cinemático, e outro mais complexo (sl_dynamiccontroller.mdl), que permite simular um controlador adaptativo que compensa a dinâmica do robô.

Para realizar as simulações, basta executar os arquivos unicyclecontroller.m (controlador cinemático) ou dynamiccontroller.m (controlador dinâmico). Tais arquivos contêm um script que inicializa uma série de variáveis e faz a chamada do arquivos .mdl correspondentes. Ao final da simulação eles chamam os arquivos plots.m ou plots_unicycle.m, que são responsáveis por traçar os gráficos com os resultados da simulação.

Você pode realizar simulações com diferentes controladores e comparar seus resultados. Para isso, abra o arquivo unicyclecontroller.m  ou dynamiccontroller.m e, antes de executá-lo, altere os parâmetros contidos no bloco SIMULATION OPTIONS. Veja comentários nos próprios arquivos.

Os slides da apresentação estão disponíveis no SlideShare, e podem ser acessados aqui.

Detalhes sobre o desenvolvimento do modelo, projeto dos controladores e prova de estabilidade (usando a teoria de Lyapunov) podem ser encontrados na minha tese, disponível aqui. Os seguintes artigos também trazem informações sobre o desenvolvimento do modelo dinâmico do robô uniciclo (que é baseado em velocidades) e sobre o projeto dos controladores utilizados:


MARTINS, F. N., Celeste, W. C., Carelli, R., Sarcinelli-Filho, M. and Bastos-Filho, T. F. An Adaptive Dynamic Controller for Autonomous Mobile Robot Trajectory Tracking. Control Engineering Practice, v. 16, p. 1354–1363, 2008.
doi: 10.1016/j.conengprac.2008.03.004

MARTINS, F. N., Carelli, R., Sarcinelli-Filho, M. and Bastos-Filho, T. F. Dynamic Modeling and Adaptive Dynamic Compensation for Unicycle-Like Mobile Robots. 14th International Conference on Advanced Robotics - ICAR 2009, Germany, June, 22-26, 2009.

Espero que possam praticar um pouco no MATLAB!
Até a próxima!

Atualizado em 09/03/2013, 21/07/2013 e 28/12/2013.

quarta-feira, 2 de novembro de 2011

PETMAN

PETMAN é um robô humanóide desenvolvido pela empresa Boston Dynamics. Não é "só" mais um humanóide. Este é possivelmente o humanóide com movimentos mais parecidos com os movimentos humanos já construido até hoje! Foi desenvolvido especialmente para as forças armadas americanas, para ser usado (dizem) no teste de roupas e de vestimentas de proteção para ambientes contaminados com agentes químicos.

Vejam como o robô é capaz de se mover e de se equilibrar:




Deu medo?? Mas espere! Não ligue agora! Como o PETMAN foi desenhado para testar vestimentas, ele também é capaz de simular condições de temperatura e umidade do corpo humano. Isso mesmo! O robô pode suar! Imagina só esse cara com uma pele andando por aí.

Eu já vi um filme em que Arnold Schwarzenegger fazia o papel de um robô que suava... A humanidade não se deu muito bem no final...

A empresa Boston Dynamics ficou muito conhecida com o desenvolvimento do BigDog, um robô destinado a fazer transporte de material militar nos mais diversos tipos de ambiente. Ele tem um equilíbrio de impressionar! Para aqueles que não conhecem, deixo aqui um vídeo com um resumo da evolução do Big Dog.



Até a próxima!

quarta-feira, 26 de outubro de 2011

Robôs que aprendem com pessoas

Que tal ter um robô que é capaz de aprender a fazer algo apenas assistindo alguém fazendo? Pois é nisso que Pieter Abbeel está trabalhando! Pieter é professor em Berkeley, Universidade da Califórnia, e recentemente recebeu o prêmio "MIT Tech Review 2011: Young Innovators Under 35 Award" (TR35), oferecido anualmente pelo MIT a pessoas com menos de 35 anos de idade que realizam trabalhos inovadores.

O trabalho que motivou sua premiação é na área de aprendizagem robótica. Especificamente, ele tornou um robô capaz de aprender a fazer alguma coisa através de observação. Depois de observar, o robô tenta descobrir como ele mesmo pode fazer a tarefa. A partir da percepção do ambiente através da visão, o robô é capaz de simular seus movimentos para descobrir quais deve executar para cumprir a tarefa. Então, faz suas próprias tentativas!

O vídeo abaixo mostra o robô pegando uma toalha e dobrando. É uma tarefa usual para humanos, mas este robô está indo onde nenhum outro robô jamais esteve!



Tudo bem. Eu sei... o robô é meio lento mesmo. Leva vários minutos para dobrar a toalha. Mas, lembre-se: ele aprendeu a fazer isso sozinho!! Esta capacidade dá aos robôs uma autonomia sem precedentes! Dá pra imaginar o horizonte de aplicações desta tecnologia?

Outro trabalho muito interessante de Pieter na área de aprendizado de máquina é um helicóptero autônomo que aprende a fazer acrobacias. Esse trabalho foi tema de sua tese de doutorado, defendida em 2008, e é bastante famoso na área de Machine Learning. Veja o vídeo abaixo. É impressionante!


Para quem quiser aprender mais sobre Inteligência Artificial e Aprendizado de Máquina, recomendo que dê uma conferida nos cursos on-line da Universidade de Stanford. São gratuitos!

Introduction to Artificial Intelligence - http://www.ai-class.com
Machine Learning - http://www.ml-class.org/

Até a próxima!

quarta-feira, 12 de outubro de 2011

Arduino com MATLAB! Mini tutorial

--- Atualizado em 26/04/2014

É isso mesmo! Agora você pode ligar seu Arduino ou LaunchPad (com MSP430) na USB e escrever programas diretamente a partir do MATLAB ou do Simulink!! É muito bacana! Imagine o potencial: os programas são escritos e executados pelo MATLAB!

Fiz o teste com meu Arduino Mega. Testei no MATLAB R2009a com Windows Vista e deu certo! Também testei com sucesso com Arduino UNO no MATLAB R2013a rodando em Windows 8.

As informações a seguir se referem ao Arduino. Mas, se você usa LaunchPad com MSP430, você também pode usar esse pacote para fazer o MATLAB se comunicar com sua placa! Para isso, use o Energia IDE para carregar os arquivos "adio.pde" ou "adioe.pde". Podem ser usadas placas com MSP430G2553 e com MSP430G2452 (o G2231 não possui memória suficiente). Os demais passos são exatamente os mesmos.

Como exemplo, fiz um data logger simples. O programa amostra várias vezes a entrada analógica A2, ajusta o PWM da saída 11, guarda os valores num vetor e depois mostra o gráfico dos valores armazenados. Veja como ficou o resultado:

MATLAB obtendo dados de uma das entradas analógicas do Arduino.

Você pode baixar meu código aqui!

Preparei um passo-a-passo para fazer a conexão Arduino-MATLAB:

1. Faça download do toolbox do Arduino para o MATLAB:
http://www.mathworks.com/matlabcentral/fileexchange/32374

2. Instale o toolbox:
 - descompacte o arquivo e coloque a pasta ArduinoIO no caminho de sua proferência (por exemplo, na pasta work do MATLAB);
 - abra o MATLAB, vá até a pasta ArduinoIO e rode o arquivo "install_arduino.m" para que o caminho seja configurado corretamente;

3. Usando a IDE do Arduino (ou o Energia, caso use LaunchPad), transfira o programa "adio.pde" para a placa. Este programa está na pasta "...\ArduinoIO\pde";

4. Verifique a porta COM a que seu Arduino está conectado e feche a IDE;

5. De volta ao MATLAB, digite o seguinte comando (substitua 'COM8' pela porta onde seu Aduino está):
a = arduino('COM8')

Deve aparecer na tela a mensagem:
Attempting connection .............

Se tudo estiver correto, depois de alguns segundos surgirão as mensagens:
Basic Analog and Digital I/O (adio.pde) sketch detected !
Arduino successfully connected !

a = 

arduino object connected to COM8 port
Basic Analog & Digital I/O sketch (adio.pde) running on the board
...
e outras informações.

Pronto! A partir de agora sua placa está pronta para receber comandos diretamente do MATLAB!! Como primeiro teste, escreva:

a.pinMode(13,'output');
a.digitalWrite(13,1); 

O LED do pino 13 deve acender!

Você deve ter notado que a sintaxe no MATLAB é muito parecida com a da própria linguagem do Arduino, o que ajuda muito! Outros exemplos de comandos são:

a.digitalRead(4) % lê valor digital do pino 4

a.analogRead(2) % lê valor analógico do pino A2

a.analogWrite(11, 155) % ajusta o duty cycle do PWM do pino 11 para 155

a.serial % obtém a identificação da porta serial do Arduino

a.flush; % apaga os dados do buffer serial do Arduino

a.roundTrip(42) % envia um dado ao Arduino, que o envia de volta

Com esse pacote também é possível controlar servomotores e fazer a leitura de encoders diretamente do MATLAB. Para isso, ao invés de fazer o upload do arquivo "adio.pde" para o Arduino, você vai precisar usar o "adioe.pde" (encoder) ou o "adioes.pde" (encoder + servo). Para controlar motores CC, pode usar o "motor_v1.pde" ou o "motor_v2.pde". Veja mais detalhes em:
http://www.mathworks.com/matlabcentral/fileexchange/32374-matlab-support-package-for-arduino--aka-arduinoio-package-

Informações completas sobre o ArduinoIO Package para MATLAB estão em:
http://www.mathworks.com/academia/arduino-software/arduino-matlab.html

Bom divertimento e até a próxima!

segunda-feira, 10 de outubro de 2011

Introdução à Eletrônica com Arduino




Nos dias 30 de setembro e 5 de outubro de 2011 foi realizada uma Oficina de Introdução à Eletrônica com Arduino no campus Serra do IFES. A oficina foi organizada pelo NERA - Núcleo de Estudos em Robótica e Automação, e oferecida a um grupo de alunos de ensino médio da escola pública Clóvis Borges Miguel, do município de Serra, ES. Tais alunos participam de um grupo de robótica e são orientados pela professora Neide Vieira.

Uma dificuldade dos alunos era decorrente do desconhecimento de conceitos básicos de eletricidade e eletrônica, portanto a oficina foi preparada com o intuito de construir uma base inicial de conhecimentos nesses temas.

A oficina também foi aberta a alunos do próprio instituto e contou com a participação de estudantes dos cursos Técnico em Informática e de Engenharia de Controle e Automação.

Os slides preparados para apresentação do conteúdo (já atualizados) estão disponíveis para download neste link! Eles  abordam os seguintes tópicos, com exemplos de circuitos e de programas:

  • Microcontroladores;
  • Arduino;
  • Eletrônica (conceitos básicos de tensão, corrente e resistência);
  • Motores (de corrente contínua e servo-motores);
  • PWM - modulação por largura de pulso;
  • Leitura de sensores analógicos através de conversor A/D;
  • Comunicação serial entre Arduino e computador;
  • Exemplos em robótica.


Antes do início da oficina foi aplicado um questionário que continha perguntas envolvendo conceitos básicos de eletrônica e sensores. Ao final do último dia, o mesmo questionário foi aplicado novamente. Os alunos da escola Clóvis Borges Miguel tiveram um aproveitamento médio de 56% no questionário inicial e de 75% no questionário final, o que significa uma melhora de 33%! Os alunos dos cursos técnico e de engenharia também apresentaram melhora de desempenho no questionário final em relação ao inicial. Esse resultado ilustra que a oficina cumpriu seu principal objetivo, que era o de aumentar e fixar conceitos de eletrônica entre os alunos.

Gostaria de agradecer a todos que participaram desta primeira Oficina! Espero que possamos melhorá-la para que as próximas edições possam ser ainda mais animadas! Também agradeço à professora Carmen Faria, da UFES, pelas dicas que me deu para preparação das atividades. :-)


Alguns alunos que participaram da Oficina

Os slides do curso estão disponíveis no SlideShare:




Até a próxima!

terça-feira, 4 de outubro de 2011

Equipe de robótica da UFES vence competição latino-americana (de novo)!

Equipe Ultrabots
A equipe ULTRABOTS, formada por alunos de engenharia da Universidade Federal do Espírito Santo (UFES), acaba de se consagrar tetracampeã na categoria IEEE SEK do Latin American Robotics Competition (LARC) 2011!!

A equipe é orientada pela professora Carmen Faria, chefe do Laboratório de Robótica Educacional do Centro Tecnológico da UFES. 

Há cerca de duas semanas a equipe Ultrabots participou da Competição Brasileira de Robótica (CBR) em São João Del Rei, tendo ficado em segundo lugar. Eles trabalharam duro na solução dos problemas dos robôs e conseguiram fazer bonito na Colômbia, onde foram realizadas as provas da competição latino-americana! 

Os robôs da equipe foram feitos com kits da Lego, e contam comunicação via Bluetooth.

A categoria da qual participaram (IEEE SEK) apresenta um desafio diferente a cada ano. Em 2011 o cenário foi o transbordamento de um rio. Dois robôs deveriam trabalhar de forma coordenada, e totalmente autônoma, para construir uma espécie de barreira de contenção em volta do rio. Primeiro eles deveriam posicionar os tubos vermelhos em torno do local onde há vazamento. Só depois que ambos completassem essa fase, os tubos verdes deveriam ser posicionados à margem do rio. O vídeo abaixo mostra a realização de uma das rodadas da prova:



Parabéns à equipe!!! E obrigado ao Pacheco pelo aviso! :-)

Até a próxima!

Fonte: portal da UFES - http://portal.ufes.br/node/2212

Robôs entre nós!

Saiu hoje na BBC, e achei legal compartilhar!



Ou seja, vamos precisar oficializar as leis de Isaac Asimov:


1. Um robô não pode prejudicar um ser humano ou,  por omissão, permitir que o ser humano sofra dano;
2. Um robô tem de obedecer às ordens recebidas dos seres humanos, a menos que contradigam a Primeira Lei;
3. Um robô tem de proteger sua própria existência, desde que essa proteção não entre em conflito com a Primeira ou a Segunda Leis.

Até a próxima!

sexta-feira, 23 de setembro de 2011

Emerotecos: rumo à RoboCup 2012!

Emerotecos: Matheus, Felipe, Ivan e Hudson.
A equipe Emerotecos, formada pelos alunos do IFES Ivan Seidel, Matheus Canejo e Gabriel Lima, e orientada pelo professor Hudson Cássio e por mim, está classificada para a RoboCup 2012! A equipe participou na categoria Resgate B da competição nacional que ocorreu entre 17 e 21 de setembro, em São João Del Rei, MG.

O robô que eles construíram e programaram foi feito utilizando peças de Lego (como o bloco NXT, rodas e sensores), uma placa Arduino e alguns sensores de ultrassom. O Arduino era responsável pela leitura dos sensores de ultrassom e enviava as informações ao NXT, que fazia o controle dos motores e continha o algoritmo para percorrer o labirinto.

A Emerotecos também participou da categoria Resgate A da OBR, obtendo o sétimo lugar.

Robô usado no Resgate B
Além disso, os alunos Ivan Seidel e Matheus Canejo também integraram a equipe CHS, que acabou vencendo na categoria Soccer Jr e também está classificada para a RoboCup! Foi um excelente trabalho em cooperação com alunos de São Paulo e de Pernambuco, colocando em prática a integração e troca de conhecimentos, um dos principais objetivos do evento!

As competições de robótica foram realizadas em conjunto, num grande evento nacional envolvendo alunos desde o nível fundamental até o nível superior. Foram provas da Competição Brasileira de Robótca (CBR) e da Olimpíada Brasileira de Robótica, além da Mostra Nacional de Robótica (MNR), em conjunto com o X SBAI - Simpósio Brasileiro de Automação Inteligente.

Algumas fotos da competição podem ser vistas abaixo:


Todas essas fotos (além de alguns vídeos) podem ser vistas com melhor resolução neste link!  

Uma categoria que fez muito sucesso neste ano foi a de dança, da RoboCup Junior. Confira no vídeo a seguir e veja a razão!


Animado para participar também? ;-)

Até a próxima!

terça-feira, 20 de setembro de 2011

Competições de Robótica em MG

No dia 18 de setembro de 2011 foram iniciadas em São João Del Rei as competições de robótica que ocorrem junto com o X SBAI. São provas da Competição Brasileira de Robótca (CBR) e da Olimpíada Brasileira de Robótica, além da Mostra Nacional de Robótica (MNR).

Muitas equipes, de todo o Brasil, estão participando das competições e da mostra. O evento é bem grande e muito animado, com competições envolvendo alunos de todos os níveis (fundamental, médio e superior) em diversas categorias. São competições de futebol de robôs (várias categorias), resgate, dança, entre outras. Em todas as provas os robôs devem operar de forma totalmente autônoma, tomando decisões com base apenas em seus sensores e em sua programação.
Categoria IEEE SEK - CBR.
No dia 18 começaram as competições de algumas categorias da CBR. No dia seguinte foram iniciadas as competições da OBR, em que a equipe Emerotecos está participando, assim como os trabalhos da Mostra Nacional de Robótica. Tem muita coisa interessante por aqui! Deixo algumas fotos.

Categoria Resgate A - OBR.






Até a próxima!


quinta-feira, 15 de setembro de 2011

Equipe Emerotecos vai para a OBR 2011


A equipe capixaba Emerotecos, formada por alunos do IFES, vai embarcar para a cidade de São João del Rei neste sábado, 17/09/2011, para participar das finais da Olimpíada Brasileira de Robótica (OBR 2011). Eles irão competir na categoria Resgate - nível 2.

São João del Rei vai ser dominada pelos robôs de 18 a 21 de setembro de 2011! Nesse período ocorrerão vários eventos simultâneos envolvendo a comunidade de robótica, todos integrados à décima edição do Simpósio Brasileiro de Automação Inteligente (SBAI). São apresentações de trabalhos, workshops e mini-cursos, além da IX Competição Brasileira de Robótica (CBR 2011), as finais da V Olimpíada Brasileira de Robótica (OBR 2011) e a I Mostra Nacional de Robótica (MNR). Pra quem gosta de robótica, é imperdível!!

O vídeo abaixo também está participando da Mostra Nacional de Robótica!



Vou tentar publicar notícias e fotos diretamente do evento. Pra quem vai, nos vemos lá!
Até a próxima!