Percorso di apprendimentoPrincipiante

Navigazione reattiva: insegna a un robot a evitare gli ostacoli

Puoi far rilevare ostacoli a un robot e fargli decidere autonomamente dove andare: nessuna mappa, solo sensori affidabili e un ciclo di comportamento.

La navigazione reattiva è il primo modo in cui la maggior parte dei robot impara a orientarsi: invece di conservare una mappa e pianificare un percorso, il robot reagisce semplicemente a ciò che i suoi sensori segnalano in quel momento. Rileva lo spazio davanti, decide, si muove e ripete molte volte al secondo. È economico, robusto e sufficiente a far girare un robot in una stanza ingombra senza colpire nulla: è il comportamento alla base di ogni robot per principianti che evita gli ostacoli.

Questo percorso costruisce la competenza un livello alla volta. Inizi trasformando un ping ultrasonoro grezzo in una distanza di cui puoi fidarti, poi impari perché le letture del sensore saltano e come filtrarle. Confronti gli ultrasuoni con il laser a tempo di volo per sapere quale sensore mente e quando, aggiungi una scansione con servomotore perché il robot possa vedere dove c’è spazio libero, inserisci tutto in una macchina a stati del comportamento e finisci regolando il ciclo completo in un simulatore.

Segui i nodi in ordine: ogni nodo sblocca il successivo dopo che lo hai completato e i tuoi progressi vengono salvati su questo dispositivo. Quando sarai pronto a costruire il sistema reale, questo percorso prosegue direttamente nel progetto del robot che evita gli ostacoli.

Prima di iniziare

Devi saper leggere un sensore e pilotare due motori; la parte di pilotaggio è trattata nel percorso sul controllo dei motori. Qui non sono coinvolte mappe, localizzazione o algoritmi di pianificazione; è una scelta deliberata ed è ciò che rende la navigazione reattiva il primo approccio più adatto.

Che cosa saprai fare

  • Trasformare un ping ultrasonoro in una distanza su cui agire, con un timeout che impedisca a un eco mancante di bloccare il ciclo e un filtro mediano che impedisca a una lettura errata di deviare il robot.
  • Indicare quale sensore preferire per una data superficie e spiegare perché un sensore laser a tempo di volo e uno a ultrasuoni falliscono su materiali completamente diversi.
  • Ruotare un sensore lungo un arco e scegliere dalle letture la direzione più aperta.
  • Esprimere il comportamento tramite stati espliciti anziché condizioni annidate, così alla domanda «che cosa sta facendo il robot adesso?» c’è sempre una risposta.

Dove le persone si bloccano

Leggere il sensore prima che il servomotore si sia fermato. La misura riguarda ciò che il sensore puntava a metà scansione, quindi il robot ruota convinto verso un muro. Aggiungi un tempo di assestamento dopo aver comandato l’angolo e prima di emettere il ping.

Nessun timeout per l’eco. Se non torna nulla, e su una superficie morbida o inclinata spesso non torna nulla, una chiamata ingenua a pulseIn blocca l’intero ciclo. Il robot sembra bloccarsi in modo casuale.

Fidarsi di una singola lettura. I sensori a ultrasuoni producono occasionali valori anomali. Una sola lettura spuria di 20 cm nello spazio libero basta a provocare una virata d’emergenza. Effettua tre misurazioni e usa quella centrale.

Superfici inclinate e morbide. Il suono si riflette su un muro incontrato con un angolo ripido lontano dal sensore, quindi un muro a 45° può essere letto come spazio libero. Cuscini e tende assorbono completamente il ping. Questo è un limite fisico, non un bug: progetta il comportamento in modo da superarlo.

Oscillazione presso una soglia. Con una sola distanza di arresto, un robot che si aggira nelle vicinanze passa molte volte al secondo tra avanzamento e rotazione. Usa due soglie: arrestati più vicino e riprendi più lontano, così il comportamento ha isteresi e si impegna in una decisione.

Che cosa serve

Componente Perché serve a questo percorso Note
HC-SR04 o VL53L0X La misurazione della distanza su cui si fonda l’intero percorso ~$2 e rispettivamente ~$5
Un servomotore hobbistico Permette al sensore di guardare in una direzione diversa da quella frontale SG90 basta ampiamente per una testa con sensore
Uno o due microinterruttori a leva L’unico sensore che non mente mai su una collisione Protezione economica contro ogni errore di misurazione indicato sotto
Un telaio robotico mobile Due motori e un driver del motore che sai già comandare Il percorso sul controllo dei motori ti porta fin qui
Un pavimento ingombro L’ambiente di prova, che deve includere una superficie morbida e una inclinata Un cuscino e una porta aperta sono le due migliori ostacoli di prova

Perché il percorso segue quest’ordine

Prima il rilevamento, sempre, poi la decisione. Quasi ogni comportamento di evitamento che funziona male agisce in modo corretto su una lettura errata. Finché una misura di distanza non è affidabile, con un timeout per un eco mancante e la mediana di tre letture contro i picchi, nessuna quantità di logica di comportamento produrrà un robot che funziona. Eseguire il debug in ordine inverso significa sospettare un problema nella tua macchina a stati per un guasto che risiede nel sensore.

Confrontare i sensori prima di sceglierne uno. Il nodo di confronto esiste perché sonar e laser falliscono su materiali completamente diversi e la scelta dipende interamente dalla stanza in cui il robot si muove. Prendere questa decisione consapevolmente una sola volta costa molto meno che scoprirla dopo aver costruito un telaio attorno al sensore sbagliato.

Filtrare prima di scansionare. Una scansione con servomotore moltiplica il tasso di errore del sensore per il numero di angoli campionati. Se una singola lettura è inaffidabile, una scansione a nove punti offre nove possibilità di scegliere la direzione sbagliata e il robot ruota convinto verso un muro.

Scansionare prima di decidere. Un robot che vede solo in avanti ha esattamente due opzioni: fermarsi o ruotare alla cieca. Poter misurare più direzioni trasforma l’evitamento da un riflesso in una scelta, ed è il punto in cui il comportamento inizia a sembrare intelligente.

La macchina a stati prima dell’algoritmo. L’algoritmo di evitamento è una macchina a stati; impararne separatamente la struttura significa che il nodo finale riguarderà la robotica anziché la decodifica di un flusso di controllo intrecciato.

Rilevamento di contatto in ogni fase. Il microinterruttore non è deliberatamente l’ultimo elemento. Ogni sensore di distanza di questo percorso ha superfici che non può vedere, quindi un robot senza rilevamento di contatto è sul punto di spingere una tenda finché qualcosa non si rompe. È l’affidabilità più economica dell’intero robot.

Checkpoint: come sapere che una tappa è stata superata

Tappa Controllo Esito positivo
Lettura della distanza Punta il sensore verso un muro a 30 cm e stampa i valori per un minuto Stabile entro uno o due centimetri, senza zeri e senza blocchi quando lo punti al soffitto
Timeout Punta il sensore verso l’aria aperta e osserva la frequenza del ciclo Il ciclo mantiene l’intervallo: l’assenza di eco non deve congelare il robot
Filtro mediano Fai passare ripetutamente una mano attraverso il fascio I valori anomali occasionali spariscono dall’uscita; l’avvicinamento reale resta visibile
Confronto dei sensori Misura un cuscino, un muro a 45° e una superficie scura e opaca Prima di misurare sai quale sensore fallisce su quale superficie
Scansione con servomotore Scansiona e stampa la distanza per ogni angolo davanti a una porta aperta La porta è chiaramente il massimo e le letture si ripetono da una scansione all’altra
Tempo di assestamento Rimuovi deliberatamente il tempo di assestamento Le letture si sfumano tra un angolo e l’altro: ora sai come appare quel guasto
Macchina a stati Stampa lo stato corrente a ogni ciclo Puoi sempre nominare ciò che il robot sta facendo e ogni transizione ha una causa visibile
Microinterruttore Premilo lentamente e conta gli eventi Una pressione produce esattamente un evento, non i nove generati da un interruttore grezzo
Comportamento completo Provalo in una stanza ingombra per cinque minuti Il robot sopravvive e, quando si blocca, sai dire in quale stato si trovava

Dove termina questo percorso

La navigazione reattiva ha un limite netto, che vale la pena dichiarare: non puoi inviare un robot reattivo in un luogo specifico. Non ha memoria, quindi non può andare in cucina, non può garantire di aver percorso tutto il pavimento e non può evitare l’angolo in cui si è bloccato l’ultima volta. Non sono lacune dell’implementazione: sono ciò che significa non avere una mappa.

Il percorso si ferma anche prima di due aspetti che vorrai affrontare in seguito. L’inseguimento di un muro è l’estensione naturale ed è il primo comportamento che inizia a sembrare un piano, perché un robot che mantiene una distanza fissa da un muro su un lato attraversa un’intera stanza in modo deterministico. E la copertura, cioè una scansione reale di un’area anziché aggirarvisi, è il punto in cui l’assenza di memoria diventa finalmente inaccettabile.

Quando arriva quel momento, pianificazione del percorso e mappatura sono la risposta, e questo è il percorso giusto da completare prima: ogni robot che costruisce mappe ha comunque bisogno dei riflessi creati qui per il momento in cui la sua mappa si rivela sbagliata.

Percorso di apprendimento

Il percorso

Segui i nodi in ordine: ognuno sblocca il successivo una volta completato. I tuoi progressi vengono salvati su questo dispositivo.

0 / 11 completati

100%

Domande comuni

Domande frequenti

Cos'è la navigazione reattiva nella robotica?

È navigare senza mappa e senza piano. Il robot rileva ciò che ha davanti in quel momento, decide cosa fare, si muove e ripete, spesso cinquanta volte al secondo. Non chiede mai dove si trova, perché non ha bisogno di saperlo. Questo la rende economica e robusta, e immune agli errori di localizzazione che fanno fallire la navigazione basata su mappe, al costo di non poter eseguire azioni che richiedono memoria: non può raggiungere un luogo denominato, non può garantire di aver percorso una stanza e può restare intrappolato indefinitamente in un angolo concavo.

Perché il mio robot che evita gli ostacoli si schianta contro i muri?

Quasi sempre la causa è il sensore, non la logica, e di solito è una di tre. Un sensore a ultrasuoni che incontra un muro con un angolo ripido riflette il ping invece di restituirlo al sensore, così un muro a 45° viene letto come spazio libero: è fisica, non un guasto. Le superfici morbide, come tende e cuscini, assorbono completamente il ping. Inoltre, se leggi il sensore prima che il servomotore di scansione abbia terminato di muoversi, la distanza ottenuta corrisponde a ciò che puntava a metà scansione. Aggiungi un tempo di assestamento dopo aver comandato un angolo e installa un microinterruttore a leva, così il contatto viene sempre rilevato anche quando la misurazione della distanza fallisce.

Perché il mio robot vibra avanti e indietro davanti a un ostacolo?

Perché c'è una sola soglia di arresto. Quando il robot si trova nelle sue vicinanze, piccole variazioni di misura invertono la decisione molte volte al secondo e il robot esita invece di decidere. Usa due soglie distanziate: fermati a 20 cm e riprendi solo a 30 cm. Questo intervallo è l'isteresi e costringe il comportamento a prendere una decisione. Lo stesso schema risolve quasi ogni oscillazione basata su soglie nel codice di un robot, non solo questa.

Per l'evitamento degli ostacoli conviene usare ultrasuoni o laser a tempo di volo?

Falliscono su cose opposte ed è questo che rende facile la scelta una volta conosciuto l'ambiente. Gli ultrasuoni hanno un cono ampio, con un semiangolo di circa 15°, quindi rilevano una gamba del tavolo di cui non riescono a determinare la posizione e non vedono superfici morbide o fortemente inclinate. Un sensore laser VL53L0X ha un fascio stretto, quindi localizza con precisione ma può mancare completamente un ostacolo sottile e fatica con superfici scure, opache o a specchio sotto una forte luce ambiente. Per girare in una stanza ingombra, il cono ampio del sonar è realmente un vantaggio. Per misurare la distanza da un oggetto specifico, vince il laser.

Serve una macchina a stati per evitare gli ostacoli?

Serve dal momento in cui il comportamento ha più di due stati, cosa che l'evitamento degli ostacoli raggiunge quasi subito: avanzare, fermarsi, scansionare, ruotare, arretrare, recuperare. Scritto con condizioni annidate diventa illeggibile entro un pomeriggio e, peggio, perdi la possibilità di rispondere alla domanda 'che cosa sta facendo il robot adesso', da cui inizia ogni sessione di debug. Una macchina a stati esplicita la rende una sola variabile che puoi stampare.

Un robot reattivo può bloccarsi?

Sì, ed è una proprietà dell'approccio, non un bug correggibile. Un robot senza memoria, in un angolo concavo o in un vicolo cieco a U, ruoterà verso la direzione più aperta, avanzerà e tornerà per sempre nel punto da cui è partito. Le soluzioni usuali sono una componente casuale nella scelta della rotazione e un rilevatore di blocco che attiva una manovra di fuga più ampia dopo diversi tentativi falliti. La vera soluzione è la memoria, quindi una mappa, ed è un percorso diverso.