Robô carro programado com Arduino


#1

Mensagem Seg Out 10, 2016 9:26 pm
Robô carro programado com Arduino Responder com citações Editar/Deletar esta mensagem Marcar mensagem como não lida

Olá à todos!

Sou iniciante no mundo da Robótica e preciso fazer um projeto que para mim é complexo. Confused

Tenho um veículo explorador de marte que vou deixar a imagem em anexo. Quero programá-lo com Arduino para que ele ande até um semáforo (no caso eu quero programar no Arduino um determinado tempo para o carro andar) e pare no semáforo vermelho por um tempo determinado. Voltando depois a andar, quando o sinal abrir. Ele andaria ao estímulo da luz solar, mas o Arduino é que ajudaria em todo processo de parar e andar quando deve.

O coordenador de curso de Robótica que sugeriu o projeto me passou um esquema onde a placa solar ficaria conectada à protoboard, que teria fios longos conectados diretamente ao carro, enviando as informações para ele. A protoboard por sua vez estaria conectada ao Arduino.

Eu não sei se fui clara em toda explicação, mas espero que sim!
É possível executar este projeto? Como posso fazê-lo?
Aguardo ansiosamente o retorno de vocês! Rolling Eyes


#2

Há muitos detalhes que precisariam ser elucidados sobre o que exatamente você quer, mas vou pensar que o robô irá andar apenas em uma linha reta onde haverá um semáforo que ele precisa parar caso esteja vermelho.

Bom, minha idéia para isso é bem óbvia, tendo o fornecimento de energia em pleno funcionamento e toda a parte mecânica corretamente montada, incluindo uma câmera, creio que você precisará usar uma biblioteca como OpenCV para detectar visualmente a cor do sinal.

Se for algo realmente mais simples e o sistema de semáforos fizer parte do mesmo sistema do robô, não precisaria de computer vision, apenas o robô saberia quando o sinal era vermelho dentro do sistema.

Por fim, uma abordagem também mais simples, seria o envio de sinais por uma rede sem fio como wi-fi/bluetooth.


#3

O que você precisa não dá pra fazer só com Arduino. Você precisará de um Raspberry invés disso. Também precisará da câmera do Raspberry Pi e então utilizar OpenCV. Daí precisará treinar um classifier para fazer reconhecimento de semáforo e então fazer o restante do trabalho, comparando a cor ou intensidade dos pixels nas regiões do semáforo.
Não é um trabalho trivial, mas eu tenho 2 exemplos de uso do OpenCV; um faz face detection, baseado no Haar Cascades, que é justamente o que você vai ter que utilizar para fazer o treinamento para detectar semáforo:

O outro tutorial é bem mais elaborado, utilizando DNN (Deep Neural Network) para fazer face recognition. Esse tutorial usa a mesma rede neural do facebook, mas acredito que para você esse segundo só serve de exemplo da interação com uma rede neural para tomada de decisão:

Abraços!


#4

Dá pra fazer com Arduino (usar uma câmera e opencv), mas dá mais trabalho do que fazer com um embarcado.


#5

Por favor, indique um link que exemplifica a execução de OpenCV no Arduino.


#6

Projeto de detecção de rosto com Arduino e OpenCV. Praticamente o primeiro link que retorna ao se procurar no Google por Arduino e OpenCV.


#7

Bom dia colega , bem legal essa ideia mas antes de tudo esse veiculo ja tem a parte mecanica pronta ?so falta dar um cerebro para ele ou ainda tem coisa para fazer na parte mecanica ? O maior obstaculo que o pessoal encontra quando utiliza arduino ,pics e afins nao é a programaçao e sim o veiculo em si pois exige muito tempo e precisao entao antes de começar a programar minha sugestao seria vc ter o veiculo perfeitamente funcional manualmente assim quando começar a programar so tera que se preocupar com o programa em si , eu nao entendi bem mas a celula solar ficara fora do veiculo sera interligada por fios é isso ? Se for isso vai ter probemas de arrasto o fio interfere na direçao do veiculo .


#8

Talvez você devesse ler tanto o que escrevi quanto sua referência. Você não roda OpenCV no Arduino.


#10

Entendi, não me referia a compilar OpenCV e driver de câmera no Arduino e sim que é possível fazer utilizando Arduino, ainda que mais trabalhoso, no entanto, é perfeitamente possível compilar a biblioteca OpenCV para o MCU utilizado pelo Arduino e o driver da câmera (se disponibilizado pelo fabricante) usando AVR-Libc e a porta de C do OpenCV, no entanto, por problemas de performance e espaço de armazenamento do binário, não é prático, para isso, como já disse acima, é melhor um embarcado, que traz um processador capaz de lidar com sinais digitais, um sistema operacional, uma API e provavelmente um driver, mesmo que genérico, para a câmera.


#11

O Arduino tem software embarcado, portanto é embarcado também, para deixarmos claro.

Não é apenas questão de migrar o código (coisa que já duvido que seja possível), além do Arduino não ter capacidade para processamento, sequer tem espaço para utilizar um classificador de face detection:

djames@gigaBrain ~ $ ls -sh "./Books/Case Studies, 2nd Edition/code/eye_tracking/cascades/haarcascade_frontalface_default.xml"
916K ./Books/Case Studies, 2nd Edition/code/eye_tracking/cascades/haarcascade_frontalface_default.xml

Em suma, não é possível rodar OpenCV no Arduino, ainda que fosse o propósito. Portanto na questão de fazer um robô com CV, o mais fácil está em utilizar o Raspberry porque tem a câmera CSI nativa com um ótimo controle de ajustes; porte nativo do OpenCV e diversos tutoriais pela Internet.

Eu vou fazer um robô com OpenCV, já o comprei e estou montando. Apenas não poderei utilizar a rede neural nele devido ao processamento gigantesco. Para fazer um classificador em um X86 com 19k imagens leva mais de uma hora. O mais básico (que é o face detection com Haar Cascades) já consome muita CPU, se você se dedicar a algumas tarefas com OpenCV vai perceber o drama.

Hoje estou trabalhando dioturnamente com IA e CV (há uns 5 meses) e ainda sou bem fraquinho, mas já consigo dar uns pitacos bem básicos como esse :slight_smile:


#12

Quando se fala em embarcado, em vias gerais, falamos de sistemas eletrônicos que já trazem o seu firmware para propósitos específicos embarcados/embutidos, como roteadores, calculadoras, impressoras e etc, esse termo também é hoje utilizado para contemplar placas que já trazem um sistema operacional embarcado, como Raspberry, Beaglebone entre muitas outras.

Arduino não se enquadra em nenhuma dessas definições, a única coisa que um Arduino tem, próximo do que se pode chamar de embarcado, é um bootloader, cujo único objetivo é subir binários e o MCU nem sequer precisa dele para ser perfeitamente funcional, você pode descartá-lo e enviar código por um gravador externo e ainda ganha espaço se livrando do bootloader.

Obviamente, se você escrever um firmware para uma calculadora que usará o mesmo MCU do Arduino, terá total direito de dizer que ali há um AVR embarcado, mas ele puro num kit de desenvolvimento, não é um embarcado mesmo usando a mais purista das definições.

Sobre não ser possível rodar OpenCV com Arduino e que é mais fácil usar um RPi, eu não sei qual foi a parte que você não entendeu do que foi escrito anteriormente:

Como já foi claramente demonstrado no link que você solicitou. E ao falar sobre armazenamento, você apenas repetiu o que eu já havia atestado:

Porém, mantenho minha opinião de que, é perfeitamente possível compilar a porta de C do OpenCV para AVR/RISC, se o MCU alvo será capaz de armazenar ou ter performance suficiente, isso é outro assunto, estamos falando sobre possibilidades e que é perfeitamente possível, não há dúvidas, talvez o AVR não seja capaz de tanto, mas se tentarmos utilizar a família ARM talvez tenhamos até resultados funcionais (ainda que eu ache que uma boa performance para uma aplicação desse porte, não será conseguida com algumas dezenas de MHz).


#13

Você está enubliando suas próprias afirmações, mas prefiro passar meu tempo escrevendo artigos do que acendendo lanterna pra cego.
Faça o seguinte, mostre para o mundo como você treina um classificador em Arduino. Enquanto isso fico na risada, porque eu na minha ignorância não consigo pensar nessa possibilidade.

Sua afirmação inicial era que dava pra fazer NO arduino. mas talvez seu problema seja de português.

“Não ser prático” e “ser impossível” são coisas diferentes, seu argumento é bastante fraco. Eu sugiro que você aprenda um pouco mais antes de azer afirmações. Dá menos trabalho não falar nada do que justificar besteira.


#14

Acho que o seu problema, além de ser de português (interpretação de textos, ortográfico e gramatical), é também de memória, minha afirmação inicial sobre isso foi:

Afinal, quem inventou essa história de fazer no Arduino, foi você! Está claro a primeira referência a isso neste tópico:

E mesmo que eu tivesse feito uma referência incorreta sobre “usar com” e “usar no”, eu deixei bem claro a minha intenção, quando elucidei a o meu pensamento:

Aí você aparece, querendo distorcer os fatos, que estão mais que claros no decorrer da discussão e me vem com essa:

E sou eu quem estou inebriando as afirmações? (certo Professor Pasquale, essa palavra “enubliando” nem sequer existe!).

Beleza, escreva seus artigos, mas por favor, de algum jeito não avise nesse fórum, pois eu não quero ler artigos que possam me fazer ficar mais burro que eu já sou, pois de gente que inventa palavras e tem deficiência intelectual crônica, pode-se esperar qualquer coisa!

Assim, me recubro da minha própria ignorância, pois hoje, aprendi com o grande engenheiro, que existem compiladores de C, incapazes de compilar certos códigos, enquanto na minha ingenuidade, pensava que C seguisse um padrão ISO/IEC… Vivendo e aprendendo!

Então amigo, fique rindo mesmo, da sua própria ignorância, pois não preciso provar para o mundo que eu treino um classificador em Arduino, tendo em vista que este nem é o tópico dessa discussão, eu não tento distorcer meus argumentos apresentando tópicos diferenciados, apenas para servir de bait para sair da discussão incômoda.


#16

@Djames_Suhanko @sksdutra Totalmente desnecessário, fica a dica para todos com excesso de testosterona:
CNV Wikipedia
Comunicação não violenta