collapse

* Links de Robótica

* Posts Recentes

Medir Agua que está no Poço por Njay
[Ontem às 18:28]


Ajuda Projecto IR / RF por pmj_pedro
[Ontem às 16:23]


CNC Laser 60w por nandotx
[15 de Outubro de 2017, 19:01]


Equipar laboratorio por LVirtual
[13 de Outubro de 2017, 08:34]


Arranjo de Berbequim por jm_araujo
[13 de Outubro de 2017, 08:34]


Escolher ligações por dropes
[08 de Outubro de 2017, 23:26]


Perfis V-Slot vs C-Beam vs Bosch vs 8020 por senso
[08 de Outubro de 2017, 18:22]


Ideias para construir um quadrúpede simples por Njay
[07 de Outubro de 2017, 22:12]


Meu projecto - Arm Robot com arduino por Diogo Bento
[05 de Outubro de 2017, 20:54]


Alimentar arduino nano com 12V por helderjsd
[05 de Outubro de 2017, 16:26]

Autor Tópico: Navegação com mapeamento  (Lida 14135 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Navegação com mapeamento
« em: 23 de Agosto de 2008, 19:39 »
Qualquer robot para se poder movimentar num meio ambiente, precisa de saber onde está, nem que seja, saber onde está relativamente ao seu ponto de partida.

Assim surge a necessidade de mapear o percurso feito, a fim de não andar simplesmente de um modo aleatório a percorrer uma zona.

Quais as vantagens e desvantagens de se mapear e andar de um modo "inteligente" no meio ambiente?
  • Pois bem, como desvantagem existe todo o processo que tem que ser feito antes de tomar um decisão, e para esse processamento ser feito é preciso não só computação, como capacidade de armazenar a informação do mapeamento já efectuado de uma forma eficaz.
  • Como vantagens temos tanto o de se evitar caminhos sem saída, como ao de se deslocar da forma mais rápida de um ponto A para um ponto B, calculando os percursos não só em distância mas também calculando as trajectórias que melhor evitam os obstáculos.

Assim surgem dois problemas:
  • Primeiro, a necessidade de se ter exactidão ao medir-se distâncias percorridas, arranjando um método eficaz que vá contando a distância percorrida desde o ponto inicial, sem ter "derrapagens" para que o mapa não venha a induzir o robot em erro.
  • Segundo, todo o processamento que tem que ser feito em tempo de movimentação, por um lado para armazenar o que o robot vai "descobrindo", por outro para saber se aquele percurso ainda se mantém válido, ou se existe um melhor.

A fim de podermos fazer uma tarefa destas, cheguei à conclusão que um microcontrolador como o caso do Arduino Diecimila, o Basic Stamp, ou o Picaxe ficam muito debilitados quer por processamento passível de ser efectuado nos mesmo, quer por dificuldade das linguagens que dispõem para gerir tal quantidade de informação.

Contudo, para optarmos por máquinas com melhores capacidades de processamento e armazenamento de informação, chegamos à ideia dos computadores portáteis.

Não é obrigatório que seja esta a alternativa, mas digamos que é a mais fácil e exequível.

Contudo tempos hoje em dia a possibilidade de o fazer também a partir de mini-portáteis, como o famoso Eee PC da ASUS, ou até mesmo por uma mini máquina como o linutop. Para dizer a verdade quando conheci o linutop visualizei-o logo como um excelente cérebro de robots, visto ter um consumo de apenas 8 Watts, correr linux e ter processamento e armazenamento mais do que necessário para as tarefas que hoje em dia os robots realizam.

Para além de todas as possibilidades acima referidas, existe ainda a possibilidade de os fazer a partir de telemóveis. Sim, os telemóveis hoje em dia são boas máquinas de processamento, na ordem dos 400Mhz e com cerca de 32, 64mb de RAM, e ainda a memoria de cartão a chegar aos 2, 4Gb são excelentes máquinas de processamento. A somar a isto tudo tem a grande vantagem de correrem JAVA, uma poderosa linguagem orientada a objectos.

Mas como é que eu ligo o telemóvel a motores e sensores? Este TigPT deve estar maluco.. vou agora estragar o meu telemóvel???

Todos os equipamentos referidos contém bluetooth, e no caso dos portáteis ou do linutop, portas USB. O bluetooth não é nada mais nada menos do que uma porta COM sem fios, permitindo assim que todo o tipo de equipamento compatível com comunicações serial (COM) comuniquem com estes equipamentos, e possam assim dar a informação a processar, e receber ordens.

Assim como por exemplo um Arduino Bluetooth nem precisamos de mais nada a não ser emparelhar os dispositivos, e fazer código. Caso os dispositivos sejam de porta COM, podemos fazer nós mesmo a adaptação para bluetooth com uma placa de bluetooth que se pode facilmente encontrar por exemplo na Sparkfun.

Ok, já chegamos à conclusão de que podemos aumentar o processamento e a memória dos nossos robots, mas será assim tão fácil fazê-lo?

Sim, o que precisamos de fazer, é transformar o nosso microcontrolador  (antigo cérebro do robot) num cliente que faz a bridge entre a electrónica e o software... Assim mandamos pedidos de informações dos sensores, recebemos os valores para processar, e mandamos ordens para o microcontrolador as processar para os respectivos actuadores como por exemplo motores.

Mas será esta comunicação rápida o suficiente? Digamos que é, mas de qualquer das formas o nosso microcontrolador não precisa de ficar totalmente burro, este pode passar a fazer de gestor de prioridades de tarefas a realizar, se pro exemplo mando os motores de locomoção parar mas ele ainda estava a ver a temperatura e a humidade, a bússola e a distância dos objectos na sua frente, este demoraria algum tempo a parar, o que poderia causar uma colisão ou queda do nosso robot. Assim podemos fazer com que o microcontrolador tenha um hand shaking com o controlador principal antes de emitir qualquer valor, perguntando a este se ele tem informações a transmitir-lhe. Evitando a utilização do bus para informações menos importantes. E caso este lhe garanta utilização do bus, ele comunica os dados que tinha em buffer. Mas se nesse hand shaking o microcontrolador recebe uma ordem a actuadores prioritários, este coloca de lado a informação que tinha a transmitir, e de imediato propaga a informação recebida aos actuadores antes que seja tarde de mais.

Então conseguimos assim ter bom processamento, boa capacidade de memória, sem comprometer a velocidade de actuação em momentos vitais para o robot, mesmo com uma quantidade enorme de sensores a serem monitorizados regularmente.

Parece que temos a solução para podermos então ter um cérebro remoto ao microcontrolador, sem com isso perdermos capacidades de comunicação quer em prioridade, quer em número de sensores/actuadores.


Solução:
  • Migrar a computação principal para um sistema mais robusto.
  • Utilizar uma unidade de processamento local ou remota, a fim de se poder tomar decisões a nível de processamento de todo o histórico de informação colectada.
  • Contudo dar ao microcontrolador algum poder de computação que permita preencher as lacunas na comunicação, como o tempo de acesso a dados, e gestão de tarefas prioritárias.
  • Fazer uma bridge entre o melhor das várias linguagens, tal como a velocidade e o baixo nível do C, com a complexidade e portabilidade do Java, falando entre si por protocolos que ambos conhecem como comunicações Serial.

Próximos passos:
  • Saber o que acham da ideia, porque não quero ser o único maluco neste barco.
  • Fazer uma lista mais concreta das Vantagens e Desvantagens, assim como possíveis problemas que possam surgir.
  • Standarizar os problemas para criar uma estrutura dos problemas permitindo assim ataca-los isoladamente e permitir que sejam utilizáveis no futuro.
  • Começar a definir objectivos e caminhar nesse sentido para que possamos criar uma plataforma passível de vir a ser utilizável por todos em qualquer que seja o projecto.
  • Receber sugestões :D
« Última modificação: 22 de Dezembro de 2008, 22:49 por Fifas »

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Navegação com mapeamento
« Responder #1 em: 01 de Novembro de 2008, 12:35 »
Li tudo com atenção e parece-me que tens tudo muito bem esquematizado.
É uma boa ideia. Só tenho uma dúvida: A comunicação feita por bluetooth, implica a utilização de um modem bluetooth no Arduino e outro no computador? Isto é, o Arduino fica na parte da emissão de dados do PC ou na parte da recepção de dados e interpretação?

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re: Navegação com mapeamento
« Responder #2 em: 01 de Novembro de 2008, 13:00 »
Exacto, Bluetooth é nada mais nada menos do que R232 (porta COM) mas sem fios.

O sinal respeita todas as regras do R232, sendo bi-direccional, e com streams de bytes, etc...

O Arduino precisa de um modulo de bluetooth para comunicar com o computador, enviado dados, e recebendo instruções. Instruções essas que podem ser pedidos de novos dados, ou envio de ordens para actuadores.

A comunicação também pode ser feita por portam serial (COM), em vez de bluetooth, mas obriga o robot a ter o computador dentro dele, ou um cordão umbilical para passar os dados, dai a alternativa do bluetooth.

Qualquer outro método de transmissão de dados poderá ser utilizado, desde que seja bi-direccional.


Estou a pensar começar a pensar em como fazer bibliotecas genéricas em Java para depois com uma "layer" de software no arduino possa implementar qualquer envio e recepção de dados dum para o outro dispositivo que corra java, como PC, PDA ou Telemóvel.

O Java permite-nos assim correr depois o "Cérebro" em qualquer máquina que corra Java.

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Navegação com mapeamento
« Responder #3 em: 01 de Novembro de 2008, 15:04 »
Gosto da ideia.
Depois até pode ser feito um código em PHP para enviar/receber dados pelo browser.

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re: Navegação com mapeamento
« Responder #4 em: 01 de Novembro de 2008, 17:19 »
Exactamente, permitindo até fazer um applet para por numa página de web, para o controlar a partir de qualquer local no mundo ;)

Ver se começo a fazer isso...

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.300
Re:Navegação com mapeamento
« Responder #5 em: 29 de Janeiro de 2009, 00:46 »
li e gostei.. mt.. talvez porque se assemelha a uma ideia que toscamente tenho vindo a desenvolver nos ultimos dias.. eu sou mt novo nisto do arduino (kt mais com a robótica) mas no que for preciso e acharem k posso ajudar, apitem.

a ideia tosca pode ser k a vão percebendo por duvidas que vos venha a apresentar.

de qualquer forma, tiago, segue em frente k eu tb apoio..

(aish.. só reparei agora há kt tempo isto aki tá.. de kk forma, gostei..)
« Última modificação: 29 de Janeiro de 2009, 00:52 por ricardo-reis »

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re:Navegação com mapeamento
« Responder #6 em: 29 de Janeiro de 2009, 01:11 »
é um brainstorming que possivelmente nos próximos meses vai começar a ganhar API para depois se poder tornar realidade... ;)

Obrigado pelo apoio.

Offline msaleiro

  • Mini Robot
  • *
  • Mensagens: 691
    • Blog
Re:Navegação com mapeamento
« Responder #7 em: 29 de Janeiro de 2009, 01:38 »
Achei a ideia muito interessante.. mas na minha opinião faria mais sentido utilizar os telemóveis como cérebro presente no robot, e não remoto. Como são pequenos e têm baixos consumos poderiam ser directamente integrados no robot. Se fosse para ser um cérebro remoto acho que mais valia utilizar logo um computador com bluetooth. Mas como disse, a ideia em si é bastante interessante. Serve até ara aproveitar telemóveis que possam estar a caminho do "ponto electrão" lol Acho que com mais um pouco de brainstorming é capaz de sair daqui algo interessante :)
msaleiro - Mário Saleiro
UAlg FCT-DEI / VisLab - Instituto de Sistemas e Robótica / eLab Hackerspace
http://thebitbangtheory.com

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re:Navegação com mapeamento
« Responder #8 em: 29 de Janeiro de 2009, 01:44 »
Não se esqueçam do pouco alcance que tem o bluetooth.
E que tal isto:
 - Telemovel integrado no robot -> ligação a grandes distancias aproveitando a capacidade de comunicação do telémovel, GPRS, 3g, Edge, etc.

Desta forma até se podia distribuir o processamento pelo mundo todo e não só. Controlo, fetch de informações, sensores, etc. E assim a disntância deixava de ser um problema.
Tr3s
Daniel Gonçalves

Offline msaleiro

  • Mini Robot
  • *
  • Mensagens: 691
    • Blog
Re:Navegação com mapeamento
« Responder #9 em: 29 de Janeiro de 2009, 01:50 »
Concordo perfeitamente com a sugestão do tr3s. Parece-me a opção em que se tira mais vantagens e se aproveita melhor as características do telemóvel. Assim poderia ter-se um cérebro potente integrado no robot e com uma ligação para grandes distâncias poderia actualizar-se o firmware do robot à distância ou até mesmo colocar um programa num computador remoto a assumir o controlo do robot, como se fosse uma espécie de telnet.
msaleiro - Mário Saleiro
UAlg FCT-DEI / VisLab - Instituto de Sistemas e Robótica / eLab Hackerspace
http://thebitbangtheory.com

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re:Navegação com mapeamento
« Responder #10 em: 29 de Janeiro de 2009, 01:50 »
Não se esqueçam do pouco alcance que tem o bluetooth.
E que tal isto:
 - Telemovel integrado no robot -> ligação a grandes distancias aproveitando a capacidade de comunicação do telémovel, GPRS, 3g, Edge, etc.

Desta forma até se podia distribuir o processamento pelo mundo todo e não só. Controlo, fetch de informações, sensores, etc. E assim a disntância deixava de ser um problema.
A ideia é mesmo essa, ao termos protocolos gerais como serial, i2c, bluetooth, podemos depois em java fazer APIs entre quaisquer protocolos para dar a qualquer projecto todas as conectividades que quisermos, é só ir adicionando layers que corram java. O java depois faz a bridge entre os vários protocolos do equipamento.

O que acham?

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.300
Re:Navegação com mapeamento
« Responder #11 em: 29 de Janeiro de 2009, 02:19 »
usar o tlm só pa comunicar parece-me pouco. há shield de cartão SIM para arduino..

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.234
    • Tiago Rodrigues
Re:Navegação com mapeamento
« Responder #12 em: 29 de Janeiro de 2009, 02:22 »
Quase todos os telemóveis tem Java e Bluetooth, a ideia é este estar no robot, mesmo que não conectado fisicamente, e comunicar por bluetooth com o arduino (ou outro micro) para enviar e receber dados dos sensores e actuadores, podendo processar a "inteligência" em java, com a vantagem do alto nível, object oriente, capacidades de memória e processamento muito mais elevados do que num microcontrolador...

Offline tr3s

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 811
  • char x=1, y=5; x^=y^=x^=y;
Re:Navegação com mapeamento
« Responder #13 em: 29 de Janeiro de 2009, 02:25 »
Eu lembro-me de ver uma apesentaçao de projecto final de curso em que um aluno utilizou um Modulo GSM da nokia que ja tinha suporte nativo para Java. E aquilo até era barato...

Ricardo-Reis, construir algo baseado numa board de desenvolvimento é má ideia. Projectos como o Arduino são bons para testar conceitos e desenvolver ideias. No caso do Arduino fazer algo baseado em AVR, nos picaxe, algo baseado em PIC, etc..
Por exemplo, se programares algo no Arduino que utilize umas quantas shields para fazer alguma coisa e depois quiseres passar isso para um produto, não vais despejar uma coisa no mercado com Arduino e shields atrás. Tens novamente todo o trabalho de projectar td sem aquele hardware todo que te facilitou o estudo e prova de conceito.
Daí que quanto mais genérico for  que se está a projectar, melhor. :D
Tr3s
Daniel Gonçalves

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.300
Re:Navegação com mapeamento
« Responder #14 em: 29 de Janeiro de 2009, 02:35 »
oki-doki.. (é a segunda vez que me dizes isso, tr3s, acho k aprendi.. :) )