sexta-feira, 6 de abril de 2012

Quer aprender robótica?

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!

Stanford Arm - robô manipulador
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!

---
Falei um pouco mais sobre cursos on-line de robótica em outro post, mais recente. Se você quiser começar por um curso mais básico e com foco em controle de robôs móveis, vale dar uma olhada!
http://nossosrobos.blogspot.com.br/2012/11/cursos-online-e-gratuitos-de-robotica.html
---

Até a próxima!

Referências: