memorizzazione punti notevoli degli spostamenti

Buongiorno a tutti,
io vorrei costruire un robot che esplora un'area e che quindi decide come muoversi in funzione degli spazi già percorsi. Si possono memorizzare i punti già raggiunti (almeno i punti notevoli, cioè i punti in cui per qualche motivo c'è stata una deviazione ad esempio perchè si è incontrato un ostacolo) per poi utilizzarli per determinare gli spostamenti successivi tramite elaborazioni matematiche al fine di esplorare l'area adiacente a ciò che si è già esplorato?
Se sì, quali funzioni permettono di memorizzare questi punti in modo che siano riutilizzabili dal loop del programma?
Grazie, cordiali saluti, GLS

Buongiorno,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del nostro regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto. :wink:

Di che tipo di spazi parliamo?
Una stanza, un cortile, un bosco?

… non e’ che stai cercando di costruire un micromouse da gara ? … :wink:

Mi sembra una cosa alquanto complicata e difficile da realizzare.
Immagina di cercare un percorso in un ambiente naturale, ti sembra fattibile senza sapere come è fatto l'ambiente, ovvero senza avere una mappa.
Adesso in un robot io memorizzo le posizioni in cui ho trovato un ostacolo, ma come farei a calcolare un percorso senza sapere come è fatto l'ambiente.
Comunque cercherei esempi di codice di robot taglia erba o robot aspirapolvere.

Per quello credo ci voglia un lidar, o come minimo un sensore laser TTF montato su un servo ... almeno potrebbe rilevare dei profili da integrare per creare la mappa ambiente, leggendo da diverse posizioni ... ma non so se poi la MCU di arduino sarebbe sufficente ...

Ciao, la mia idea era per una stanza o un ambiente aperto tipo un giardino.
La prima fase sarebbe l'esplorazione del bordo e poi proseguire a spirale concentrica per esplorare tutta l'area. Per fare questo dovrei memorizzare i punti notevoli e quando si raggiunge il punto iniziale di ogni giro occorrerebbe spostarsi di un passo e replicare il percorso trasponendolo più stretto.
Per fare questo occorrerebbe memorizzare i punti di riferimento del percorso fatto, confrontarli con la posizione attuale e calcolare la nuova traiettoria (parallela a quella precedente ma spostata di un passo).
La definizione del bordo dell'area non è banale perchè in funzione della tipologia di limite che si vuole esaminare occorre definire che sensori servono ma per questo penso di riuscire a risolvere (al limite ridurrò le possibilità di tipologie di situazioni rilevabili).
I robot tagliaerba sono piuttosto stupidi, cioè quando incontrano un ostacolo fanno una deviazione girandosi di un angolo predefinito. In questo modo ripercorrono molte volte gli spazzi centrali e sempre meno quelli vicino ai bordi e si fermano quando, considerando i tratti più lunghi percorsi senza ostacoli (da cui calcolano più o meno la dimensione dell'area), statisticamente dovrebbero aver percorso tutta l'area.
Io invece vorrei passare una sola volta in ogni punto.
Nelle istruzioni che ho visto per la programmazione di Arduino non ho mai trovato come memorizzare qualcosa e utilizzare questi dati all'interno del loop. Si può fare? Se sì, mi potreste dire dove posso trovare le spiegazioni, per favore?
Grazie mille.

Ciao. Memorizzare qualcosa si può e ci sono vari modi.
Dalla semplice variabile, alla eeprom, alla sd.
Anche rilevare gli ostacoli tutto sommato è semplice.
Il problema secondo me è il discorso della posizione. Come definisci il punto notevole? Come coordinate x/y su un piano cartesiano? Come direzione / distanza rispetto al punto di partenza?
Che precisione ti serve?

Ciao Fratt,
per quello che riguarda la precisione mi accontenterei di errori intorno al cm però per iniziare pensavo di utilizzare la rotazione delle ruote come misura di spostamento per cui dovrò vedere se ci saranno degli slittamenti delle ruote che andranno ad inficiare la misura degli spostamenti. Altrimenti dovrò creare dei punti fissi rilevabili e riferirmi a quelli con dei sensori ma diventerebbe complicato per cui vorrei iniziare con il movimento delle ruote.
Io pensavo ai punti notevoli come i punti in cui devo cambiare direzione ed è per questo che inizialmente pensavo alle coordinate vettoriali ma poi ho pensato che le coordinate cartesiane andrebbero meglio imponendo ogni tanto la verifica di un fondo scala per recuperare gli errori che altrimenti si accumulerebbero con il rischio di ritrovarmi in una posizione non corretta.
A questo punto occorrerebbe creare delle variabili ogni volta che si deve cambiare direzione e memorizzarle su eeprom o sd. Non l'ho mai fatto, sapresti dirmi dove posso trovare le istruzioni complete su come fare questi pezzi di software per fare in modo che il programma crei queste variabili e poi le utilizzi per decidere cosa deve fare per definire lo spostamento successivo, per favore?
Grazie.

La domanda in realtà è un'altra:

Come sei messo con il 'C'?

Premesso che mi pare un progetto abbastanza ambizioso soprattutto se sei agli inizi...
Premesso che (anche se non sono molto ferrato in materia) sono convinto che avrai molti problemi di precisione nella posizione...

Per la eeprom puoi guardare qui
https://www.arduino.cc/en/Reference/EEPROM

Per la sd puoi guardare qui (ma ci sono sicuramente anche altre librerie)
https://www.arduino.cc/en/Reference/SD

Poi rimane la questione posta da standardoil... Come te la cavi con c / c++ e con la programmazione in generale?

Grazie per le informazioni. Adesso mi devo documentare un pò.
Per quello che riguarda la programmazione sono un pò arrugginito perchè le mie prime esperienze sono state fatte con Basic ormai tantissimi anni fa e poi ho usato un pò di C++ all'università... più di 20 anni fa... ma è sempre stato un diletto perchè non ho fatto corsi di informatica avanzata nei miei studi.

Bah, il problema principale è conoscere la posizione, anche solo con una relativa precisione (1 cm scordatelo). Visto che parli di un giardino o una stanza, un metodo relativamente semplice ed economico è usare la triangolazione Bluetooth ossia posizioni tre sorgenti BT (ossia dei "beacon") ed interrogando l'intensità del segnale dei tre con un beve calcolo trigonometrico puoi determinare la tua posizione in x e y rispetto ad una origine (conoscendo le coordinate x ed y dei tre "beacon" ovviamente).

Fatto questo, per gli ostacoli anche qui la soluzione più semplice ed economica è quella di usare un sensore ad ultrasuoni, il classico SRF05, magari montato su un servo per fargli fare una breve "scansione" dei dintorni (una specie di micro "radar" diciamo) e con questa determinare gli ostacoli. In rete se cerchi "arduino sonar radar" trovi varie pagine e tutorial. Ad esempio QUI trovi un esempio di scansione, quindi con alcuni validi spunti hardware e software.

Ovviamente dovresti costruirti una "mappa" in memoria dell'area visitata e della posizione degli ostacoli, quindi il problema di come identificare i "punti notevoli" è secondario rispetto a questo, anche perché su Arduino non hai tanta RAM quindi devi in qualche modo ottimizzare il tutto e/o usare qualcosa che abbia un po' più di RAM (come le schede WeMos ESP ad esempio).

Ma se sei agli inizi ed un poco "arrugginito" con la programmazione diciamo che non la vedo tanto semplice, almeno non in tempi relativamente brevi per cui il mio consiglio è, come al solito, di sperimentare una cosa per volta e pian piano accumulare metodi e funzioni per i vari aspetti, che poi unirai sempre un passo alla volta.

gls:
Ciao, la mia idea era per una stanza o un ambiente aperto tipo un giardino.

Se stai pensando ad un rasaerba o ad un robottino per fare le pulizie, ti preallerto che il metodo statistico è quello più usato non a caso, il fatto è che è molto difficile avere una precisione tale da poter fare passate non sovrapposte e coprire in modo affidabile tutta l’area. E’ talmente difficile che praticamente non lo fa nessuno.
Per questo si adottano movimenti pseudo random (perchè non dovrebbero essere proprio random ma avere comunque una certa logica) per coprire statisticamente l’area nel tempo con una certa affidabilità.

Dopo che avrai rimosso un po’ di ruggine e ripassato le cose di base, se ne potrà riparlare, perchè al momento rischieresti solo tanta frustrazione e perdita di tempo.

Maurizio

Ciao e grazie a tutti per le note inviate.
Io pensavo di controllare gli spostamenti con un sistema tipo quello del mouse (o ottico con la limitazione di superfici liscie e non riflettenti o con una pallina con 2 encoder ortogonali come nei vecchi mouse). Non so se sarà realmente applicabile ma si potrebbe testare.
L'applicazione non era ancora esattamente definita ma visto che la vedete tutti abbastanza difficile penso che procederò a piccoli passi: anzitutto rispolvererò le conoscenze sulla programmazione, poi inizierò a testare alcuni componenti partendo da alcune tipologie di sensori per poi dedicarmi alla ricerca di una soluzione per la misurazione della posizione perchè senza questa soluzione direi che occorre cambiare le ambizioni....

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.