Differenze tra le versioni di "MultiFollower"

Da raspibo.
Jump to navigation Jump to search
 
(52 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
'''Progetto robot multi follower (2015)'''
 
'''Progetto robot multi follower (2015)'''
  
Obiettivi:  
+
Obiettivi:
 
  1  Costruire un Robot Follower (didattico) sensibile a diverse “guide”
 
  1  Costruire un Robot Follower (didattico) sensibile a diverse “guide”
  1.1  Montare tre tipi di sensori: InfraRed, elettromagnetico di linea, di delimitazione e a ultrasuoni per ostacoli;
+
  1.1  Montare tre tipi di sensori: InfraRed, elettromagnetico di linea e delimitazione,
 +
      a ultrasuoni per ostacoli;
 
  1.2  Verificare algoritmi per i diversi sensori;
 
  1.2  Verificare algoritmi per i diversi sensori;
 
  1.3  Programmare Arduino Sensori e Motori con Raspy WIFI via Rete;
 
  1.3  Programmare Arduino Sensori e Motori con Raspy WIFI via Rete;
Riga 64: Riga 65:
  
 
Si tratta del classico inseguitore di una linea Scura su spazio Chiaro (o viceversa). Per “vedere” la linea utilizza 2 sensori IR di tipo CNY70 che sono collocati a circa 5mm dal pavimento.
 
Si tratta del classico inseguitore di una linea Scura su spazio Chiaro (o viceversa). Per “vedere” la linea utilizza 2 sensori IR di tipo CNY70 che sono collocati a circa 5mm dal pavimento.
 +
 +
Immagine: Foto del sensore, Schema sensore.
 +
 +
[[File:CNY70.png]]
 +
 +
dimensione sensore 7x7x6 mm - led IR assorbe 20 mA - distanza ottimale 3-9mm dal suolo.
 +
 +
Immagine: Schema elettrico dell'assemblaggio sensori IR:
 +
 +
[[File:Uso_CNY.png]]
 +
 +
Si tratta di realizzare una procedura di lettura della quantità di “illuminamento” dei due ricevitori usando due convertitori ADC di Arduino. E' necessario avere al termine della procedura un “Valore pesato” che indica la posizione della linea rispetto ai sensori e quindi al Robot. I sistema utilizzato è il seguente:
 +
Se la coppia di sensori esce a “sinistra” viene restituito il valore 0, se il primo IR e sulla Linea Scura viene restituito 1000, se entrambi sono sulla linea il valore è 1500, se solo il secondo 2000, se esce a “destra” 2000.
 +
Il “valore pesato” viene dato in INPUT ad un algoritmo PID (Proporzionale Integrale, Derivato) di cui esiste una sperimentata libreria on-line (PID.h), che restituisce un valore proporzionale tra 0 e 255 che indica se svoltare a “destra” se <127 o a “sinistra” se >128 in modo più o meno aggressivo. Evidentemente Arduino invierà al driver Motori gli opportuni valori per azionare i motori in modo corretto.
 +
 +
Foto: il percorso da seguire disegnato con Nastro Nero
 +
 +
[[File:Percorso_Foll.png]]
 +
 +
 +
[https://youtu.be/tu07b0iK3pc '''Clicca per vedere il Follower IR in funzione''']
 +
 +
----
 +
 +
'''Follower EM:'''
 +
 +
La differenza rispetto al precedente Follower consiste nel fatto che la linea da seguire e generata da un segnale elettromagnetico con frequenza di circa 34 KHz immesso su un filo conduttore chiuso per delimitare il tragitto. La frequenza viene generata da un semplice circuito dotato di integrato 555 e alimentato a 12v.
 +
I sensori sono costituiti da due coppie Bobina-Condensatore che “risuonano” alla frequenza di circa 34 KHz si tratta di “regolare l'amplificazione del segnale” e darlo in input a un  integrato “decodificatore di tono” tipo NE567 che commuta da ALTO a BASSO quando la bobina è in “prossimità del filo”.
 +
La procedura da realizzare su Arduino per individuare la quantità di “illuminamento” è simile alla precedente dei sensori IR con la differenza che i due sensori  sono Digitali e non Analogici. Le uscite della procedura da dare in INPUT al PID funzionano come le precedenti e variano da 0 a 2000.
 +
 +
Foto: Il generatore del segnale alimentato da Batteria, Il filo che delimita il campo/percorso
 +
 +
[[File:Generatore.png]][[File:Delim_01.png]][[File:Delim_02.png]]
 +
 +
 +
[https://www.youtube.com/watch?v=rO4f0pyz9ds '''Clicca per vedere il Follower in EM funzione''' ]
 +
 +
----
 +
 +
'''Delimitazione EM:'''
 +
 +
E' la classica soluzione adottata da quasi tutti i “rasa erba automatici” in commercio che utilizzano una delimitazione elettromagnetica simile a quella illustrata sopra per contenere entro di essa il campo di lavoro del Robot rasa erba.
 +
Ora cambia solo l'algoritmo: Se viene “sentito” il campo del filo, questo dovrebbe avvenire a circa 10 cm dal filo, il robot arretra o semplicemente svolta rimanendo “all'interno del perimetro delimitato”. Questo avviene regolando opportunamente con un trimmer l'elettronica dei 2 sensori dotati di NE567.
 +
 +
L'elettronica di controllo è stata “realizzata” su scheda millefori dal sottoscritto con “scopiazzamenti” vari e scelte a dir poco “discutibili”. Un elettronico potrebbe migliorare il sistema e renderlo più semplice e più stabile. I contributi sono ben accetti e se qualche free-hardware vuole partecipare metterei a disposizione lo schema dell'attuale soluzione “artigianale”. (gcupini@alice.it)
 +
 +
Il perimetro usato negli esempi video è identico a quello usato per Il Follower EM.
 +
 +
 +
 +
[https://youtu.be/lyzbBpDmis4'''Clicca per il video del Robot DELIMITATO in funzione''' ]
 +
 +
----
 +
 +
'''Programmare Arduino da Raspy'''
 +
 +
 +
Raspberrypi è montato a fianco di Arduino, ed è dotato di boot da HD, di hub USB e di camera; il tutto alimentato da batteria a 12v con Convertitore DC/DC 12/5 da 3A. Il dongle WIFI consente di lavorare da un PC con “software vnc” e programmare Arduino collegato con l'hub di Raspy. Le prove effettuate confermano il funzionamento corretto sia per programmare Arduino, sia per inviare “comandi di esecuzione motoria” ad Arduino dal software di Raspberry.
 +
La necessità di inviare comandi di “movimento da Raspy ad Arduino” è stata prevista per poter eseguire tali comandi quando una “opportuna immagine direzionale” è individuata dalla camera, infatti il driver dei motori è “gestito” dell'elettronica di Arduino.
 +
 +
----
 +
 +
'''Usare telecamera Raspy per “Vedere”'''
 +
 +
 +
Questa parte deve ancora essere studiata e sviluppata. L'idea è quella di intrecciare un algoritmo di “Following di linea” con la “scelta visiva della direzione”. Esempio: quando si giunge ad una “biforcazione” della linea di following, di fronte all'ambiguità della biforcazione un segnale “stradale” tipo “curva a Destra/Sinistra” dovrà essere identificato dal software/camera di Raspberry e dovrà essere eseguita la scelta.
 +
 +
Primo sotto-problema: come identificare una “Biforcazione”; usando i sensori di Following con opportune modifiche della linea?
 +
Secondo sottoproblema: Come rendere efficiente il riconoscimento di direzione attraverso la camera di Raspberry?
 +
Terzo sottoproblema : La raspy camera deve riconoscere segnali grafici tipo frecce [http://www.themagpi.com/issue/issue-28/ (vedi rivista MagPi num.28)]
 +
      Oppure riconoscere un QR CODE ?
 +
Quarto sottoproblema: Come rendere efficienti gli scambi/comunicazioni tra Raspy e Arduino?
 +
 +
A tale scopo immagino di usare software (versione python o  c++ ?) con librerie OpenCv e realizzare l'opportuno algoritmo.
 +
Mi pare che in rete ci siano esempi di riconoscimento adeguabili al progetto.
 +
Qui tutti i contributi sono ben accetti, io sono solo un programmatore amatoriale. (gcupini@alice.it)
 +
 +
 +
 +
 +
 +
'''Continuerà i lavori sono in corso ...'''

Versione attuale delle 09:52, 16 set 2015

Progetto robot multi follower (2015)

Obiettivi:

1  Costruire un Robot Follower (didattico) sensibile a diverse “guide”
1.1  Montare tre tipi di sensori: InfraRed, elettromagnetico di linea e delimitazione,
     a ultrasuoni per ostacoli;
1.2  Verificare algoritmi per i diversi sensori;
1.3  Programmare Arduino Sensori e Motori con Raspy WIFI via Rete;
1.4  Usare Raspy con telecamera di “riconoscimento di segnali direzionali”;

La struttura fisica e logica del robot

Il robot ha una struttura dedicata a contenere Motori e azionamenti, Sensori, Alimentazioni e Logiche di controllo. Ha due ruote motrici indipendenti e una ruota “pivotante”.

Questo è il profilo “sommario”:

Robot schema.png

Quanti sensori montare

La scelta, dopo prove e ricerche è caduta sulle seguenti opzioni, schematizzate in figura:

1) Due sensori  del tipo CNY70 per following di linea (IR Foll.)
2) Due sensori elettromagnetici (bobina-capacità-controllo) sensibili al campo elettromagnetico 
  generato su un filo di percorso/delimitazione (Bobina/Logica locale di controllo)
3) Due  sensori a ultrasuoni per “vedere” ostacoli improvvisi (US/Logica locale di controllo)
4) Telecamera Raspy per “vedere” segnali direzionali (Raspberry/camera)

Foto: Sensori CNY70 IR Follower, Sensore elettromagnetico con Bobina, Tutti i sensori visti da sotto.

Sensori.png

Altri dispositivi

Sono visibili nel profilo anche:

5) Il Driver motori governato da Arduino
6) Il Controllo delle alimentazioni elettriche. Le 3 alimentazioni necessarie sono state separate per ragioni di stabilità circuitale: 
   a) Motori, b)Raspberry , c)Arduino. 
   Le batterie a 12 Volt sono DUE. Una per i Motori e una per le logiche. 
   Sono previsti uno Switch e due connettori per la ricarica delle singole Batterie.
7) Arduino Mega controlla sia il Driver dei Motori che la gestione dei sensori.
8) RaspberryPi 2 dotata di HD e Camera, consente la programmazione in remoto (WIFI) di Arduino e in futuro 
   l'uso della camera per identificare Segnali Direzionali (da sviluppare).

Foto: Driver Motori tipo L298n, Controllo Alimentazioni, Shield Connessioni su Arduino Mega

Altri disp.png

Lo shield è stato costruito per ragioni di stabilità delle connessioni coi sensori, per inserire un paio di led con funzioni di monitor, un deep switch per selezionare all'avvio l'algoritmo da eseguire e un pulsante di start dell'algoritmo.

Immagine d'insieme allo stato attuale:

Stato attuale.png



Algoritmi e gestione sensori

Il programma principale su Arduino ha la seguente struttura logica:

Diagramma flusso.png

Follower IR:

Si tratta del classico inseguitore di una linea Scura su spazio Chiaro (o viceversa). Per “vedere” la linea utilizza 2 sensori IR di tipo CNY70 che sono collocati a circa 5mm dal pavimento.

Immagine: Foto del sensore, Schema sensore.

CNY70.png

dimensione sensore 7x7x6 mm - led IR assorbe 20 mA - distanza ottimale 3-9mm dal suolo.

Immagine: Schema elettrico dell'assemblaggio sensori IR:

Uso CNY.png

Si tratta di realizzare una procedura di lettura della quantità di “illuminamento” dei due ricevitori usando due convertitori ADC di Arduino. E' necessario avere al termine della procedura un “Valore pesato” che indica la posizione della linea rispetto ai sensori e quindi al Robot. I sistema utilizzato è il seguente: Se la coppia di sensori esce a “sinistra” viene restituito il valore 0, se il primo IR e sulla Linea Scura viene restituito 1000, se entrambi sono sulla linea il valore è 1500, se solo il secondo 2000, se esce a “destra” 2000. Il “valore pesato” viene dato in INPUT ad un algoritmo PID (Proporzionale Integrale, Derivato) di cui esiste una sperimentata libreria on-line (PID.h), che restituisce un valore proporzionale tra 0 e 255 che indica se svoltare a “destra” se <127 o a “sinistra” se >128 in modo più o meno aggressivo. Evidentemente Arduino invierà al driver Motori gli opportuni valori per azionare i motori in modo corretto.

Foto: il percorso da seguire disegnato con Nastro Nero

Percorso Foll.png


Clicca per vedere il Follower IR in funzione


Follower EM:

La differenza rispetto al precedente Follower consiste nel fatto che la linea da seguire e generata da un segnale elettromagnetico con frequenza di circa 34 KHz immesso su un filo conduttore chiuso per delimitare il tragitto. La frequenza viene generata da un semplice circuito dotato di integrato 555 e alimentato a 12v. I sensori sono costituiti da due coppie Bobina-Condensatore che “risuonano” alla frequenza di circa 34 KHz si tratta di “regolare l'amplificazione del segnale” e darlo in input a un integrato “decodificatore di tono” tipo NE567 che commuta da ALTO a BASSO quando la bobina è in “prossimità del filo”. La procedura da realizzare su Arduino per individuare la quantità di “illuminamento” è simile alla precedente dei sensori IR con la differenza che i due sensori sono Digitali e non Analogici. Le uscite della procedura da dare in INPUT al PID funzionano come le precedenti e variano da 0 a 2000.

Foto: Il generatore del segnale alimentato da Batteria, Il filo che delimita il campo/percorso

Generatore.pngDelim 01.pngDelim 02.png


Clicca per vedere il Follower in EM funzione


Delimitazione EM:

E' la classica soluzione adottata da quasi tutti i “rasa erba automatici” in commercio che utilizzano una delimitazione elettromagnetica simile a quella illustrata sopra per contenere entro di essa il campo di lavoro del Robot rasa erba. Ora cambia solo l'algoritmo: Se viene “sentito” il campo del filo, questo dovrebbe avvenire a circa 10 cm dal filo, il robot arretra o semplicemente svolta rimanendo “all'interno del perimetro delimitato”. Questo avviene regolando opportunamente con un trimmer l'elettronica dei 2 sensori dotati di NE567.

L'elettronica di controllo è stata “realizzata” su scheda millefori dal sottoscritto con “scopiazzamenti” vari e scelte a dir poco “discutibili”. Un elettronico potrebbe migliorare il sistema e renderlo più semplice e più stabile. I contributi sono ben accetti e se qualche free-hardware vuole partecipare metterei a disposizione lo schema dell'attuale soluzione “artigianale”. (gcupini@alice.it)

Il perimetro usato negli esempi video è identico a quello usato per Il Follower EM.


Clicca per il video del Robot DELIMITATO in funzione


Programmare Arduino da Raspy


Raspberrypi è montato a fianco di Arduino, ed è dotato di boot da HD, di hub USB e di camera; il tutto alimentato da batteria a 12v con Convertitore DC/DC 12/5 da 3A. Il dongle WIFI consente di lavorare da un PC con “software vnc” e programmare Arduino collegato con l'hub di Raspy. Le prove effettuate confermano il funzionamento corretto sia per programmare Arduino, sia per inviare “comandi di esecuzione motoria” ad Arduino dal software di Raspberry. La necessità di inviare comandi di “movimento da Raspy ad Arduino” è stata prevista per poter eseguire tali comandi quando una “opportuna immagine direzionale” è individuata dalla camera, infatti il driver dei motori è “gestito” dell'elettronica di Arduino.


Usare telecamera Raspy per “Vedere”


Questa parte deve ancora essere studiata e sviluppata. L'idea è quella di intrecciare un algoritmo di “Following di linea” con la “scelta visiva della direzione”. Esempio: quando si giunge ad una “biforcazione” della linea di following, di fronte all'ambiguità della biforcazione un segnale “stradale” tipo “curva a Destra/Sinistra” dovrà essere identificato dal software/camera di Raspberry e dovrà essere eseguita la scelta.

Primo sotto-problema: come identificare una “Biforcazione”; usando i sensori di Following con opportune modifiche della linea? 
Secondo sottoproblema: Come rendere efficiente il riconoscimento di direzione attraverso la camera di Raspberry?
Terzo sottoproblema : La raspy camera deve riconoscere segnali grafici tipo frecce (vedi rivista MagPi num.28) 
      Oppure riconoscere un QR CODE ?
Quarto sottoproblema: Come rendere efficienti gli scambi/comunicazioni tra Raspy e Arduino?

A tale scopo immagino di usare software (versione python o c++ ?) con librerie OpenCv e realizzare l'opportuno algoritmo. Mi pare che in rete ci siano esempi di riconoscimento adeguabili al progetto. Qui tutti i contributi sono ben accetti, io sono solo un programmatore amatoriale. (gcupini@alice.it)



Continuerà i lavori sono in corso ...