Article 4 sur les LiDAR et leur intégration dans des projets ROS

Integrazione di un LiDAR con ROS: esempi di progetti

This entry was posted in Uncategorized on by Nunzia Cicorella.

Scopri anche gli altri articoli della nostra serie “Tecnologia LiDAR”

Quelles applications pour les LiDAR ?   

Integrazione di un LiDAR con ROS: esempi di progetti

Questo articolo vi mostrerà come collegare e integrare il vostro LiDAR al PC o a una scheda embedded utilizzando il middleware ROS su Ubuntu. Alla fine della pubblicazione verrà anche trattata la fusione dei dati, una tecnica molto utilizzata nella robotica mobile.

ROS è una novità per voi?

Il Robot Operating System (ROS) è un insieme di librerie software e strumenti open source che aiutano a sviluppare applicazioni robotiche . Dai driver agli algoritmi avanzati, fino a potenti strumenti di sviluppo, probabilmente ROS sarà essenziale per il vostro prossimo progetto di robotica.

Qualora dobbiate scaricare Ubuntu , installate l’ultima versione consigliata (Ubuntu 18.04) . Successivamente, scaricate la distribuzione ROS corrispondente alla vostra versione di Ubuntu. Per Ubuntu 18.04, è necessario installare ROS Melodic.

Una volta che il vostro computer è configurato con Ubuntu e ROS è installato, vi consigliamo di dedicare del tempo ai tutorial ROS per familiarizzare con questo middleware (livello principiante e intermedio disponibile).

Ricevere i dati dal vostro LiDAR

Per collegare il LiDAR al PC, è necessario alimentarlo. A seconda del dispositivo, si tratterà ad esempio di 5VDC o 12/24VDC.

Un’alimentazione a 5VDC è generalmente supportata da un connettore USB collegato direttamente al PC. Basta collegarlo e il LiDAR sarà pronto all’uso.

Per tensioni di alimentazione più elevate, è necessario utilizzare un’alimentazione esterna (generatore a bassa frequenza) o un trasformatore/convertitore collegato alla rete elettrica o a una batteria.

Dopo aver collegato il LiDAR alla sua alimentazione, è necessario connettere il trasmettitore di dati.

Può trattarsi dello stesso cavo USB dell’alimentatore, di un altro cavo USB, di un cavo Rx/Tx, di un cavo UART o di un cavo Ethernet.

I cavi e gli adattatori necessari sono solitamente venduti insieme ai LiDAR.

Leggere i dati dal vostro LiDAR

Una volta che il vostro LiDAR è pronto all’uso, dovete verificare di avere i permessi sulla porta di ingresso dei dati.

Dopo aver collegato il trasmettitore di dati a una porta USB (o Ethernet), digitate il seguente comando per controllare i permessi:

$ ls -l /dev/tty

Dovrebbe apparire una nuova voce : ACMX , USBX o ETHX , dove X è un numero maggiore o uguale a zero (a seconda del numero di porte già in uso).

L’output dovrebbe essere simile a questo :

$ crw-rw-XX- 1 root dialout 166, 0 2016-09-12 14:18 /dev/ttyACM0

o

$ crw-rw-XX- 1 root dialout 166, 0 2016-09-12 14:18 /dev/ttyUSB0

    • Se XX è rw, il laser è configurato correttamente.

    • Se XX è –, il laser non è configurato correttamente e sarà necessario modificare le autorizzazioni nel seguente modo :

$ sudo chmod a+rw /dev/ttyACM0

oppure

$ sudo chmod a+rw /dev/ttyUSB0

Una volta configurati i permessi, dovrete scaricare il package ROS specifico per il vostro modello di LiDAR:

Per scaricare il pacchetto LiDAR da GitHub nella cartella src del vostro ambiente di lavoro ROS , i comandi sono :

$ cd ~/your_workspace/src

$ git clone

(vedere l’elenco dei GitHub dei produttori riportato sopra).

Prendete nota del nome del pacchetto appena scaricato.

$ cd ..

$ catkin_make

$ source devel/setup.bash

Entrate nella cartella launch , trovate il file launch corrispondente alla vostra versione di LiDAR e avviatelo con:

$ roslaunch votre_package votre_launch.launch

Per verificare che il LiDAR stia pubblicando dati sul topic /scan (il nome del topic è indicato nel file launch ), usate:

$ rostopic list

Verranno elencati tutti i topic attivi. Assicuratevi che /scan sia presente. In seguito, controllate i messaggi pubblicati in /scan usando:

$ rostopic echo /scan

Se tutto funziona correttamente, il LiDAR sta trasmettendo con successo i dati.

Potete visualizzare i dati su Rviz utilizzando il comando sotto indicato. Maggiori dettagli in questo tutorial: imparate a leggere i dati LiDAR con ROS. Se volete saperne di più su RViz, vi consigliamo questo tutorial .

$ rosrun rviz rviz

Fate clic su Aggiungi, quindi selezionate il topic /scan. Se si verifica un errore tf, inserite manualmente il fix frame come “/votre_LiDAR_frame_id” nella casella di testo accanto al fix frame sul lato sinistro dell’interfaccia grafica.

Il risultato finale dovrebbe essere una mappatura orizzontale delle distanze dal LiDAR in un sistema di coordinate rettangolari.

Intégration d’un LiDAR avec ROS : exemples de projets

Per integrare il LiDAR con un altro package, basta richiamare questo launch all’interno del vostro launch principale.

Alcuni LiDAR richiedono ulteriori passaggi di configurazione. Vi consigliamo di consultare il file readme del package del produttore per seguire le istruzioni specifiche.

Su ROS, tutti i LiDAR 2D pubblicano i dati su un topic di tipo LaserScan . I LiDAR 2D/3D li pubblicano su un topic di tipo PointCloud . Esistono numerosi esempi di codice che possono aiutarvi a elaborare questi dati.

Come può essere implementata l’elaborazione dei dati LiDAR?

1) Mappatura

LeGO-LOAM

LeGO-LOAM è un sistema ottimizzato per il Velodyne VLP-16 o un LiDAR Robosense , montato orizzontalmente su un veicolo terrestre. Il dispositivo suppone sempre la presenza di un piano terrestre all’interno dello scan.

L’UGV (Unmanned Ground Vehicle) che utilizziamo in molti dei nostri esperimenti è il Jackal di Clearpath Robotics . che dispone anche di una IMU integrata.

Questo repository contiene il codice di un sistema leggero di odometria e mappatura LiDAR ottimizzato per l’uso su superfici terrestri (LeGO-LOAM) su UGV compatibili con ROS.

Il sistema utilizza come input: nuvole di punti generate da un LiDAR Velodyne VLP-16 (montato orizzontalmente) e i dati IMU (opzionali). Se si desidera utilizzare un altro LiDAR 3D, come il RS-LIDAR-16 di Robosense, è necessario modificare i parametri di configurazione.

Fornisce in tempo reale una stima della posa 6D.

Una dimostrazione del sistema la si trova  qui .

È necessaria l’installazione di:

    • ROS (testato con Indigo e Kinetic)

    • GTSAM (libreria Georgia Tech Smoothing and Mapping, 4.0.0.0-alpha2)

A-LOAM

A-LOAM è un’implementazione avanzata di LOAM (J. Zhang e S. Singh. LOAM: LiDAR Odometry and Mapping in Real-time), che utilizza Eigen e Ceres Solver per semplificare la struttura del codice.

Questo codice è una modifica di LOAM e LOAM_NOTED . Il codice è pulito e semplice, senza derivate matematiche complesse né operazioni ridondanti.

È un ottimo materiale di apprendimento per i principianti nello SLAM.

È necessario aver installato:

3D LIDAR-based Graph SLAM

hdl_graph_slam è un package ROS open source per SLAM 6DOF in tempo reale che utilizza un LiDAR 3D. Si basa su 3D Graph SLAM con stima dell’odometria basata sulla corrispondenza delle scansioni CND e il rilevamento delle chiusure di loop.

Supporta anche diverse restrizioni grafiche, tra cui: GPS, accelerazione IMU (vettore gravità), orientamento IMU (sensore magnetico) e piano del suolo (rilevato nel cloud di punti).

Abbiamo testato questo package con i sensori Velodyne (HDL32e, VLP16) e Robosense (16 canali) in ambienti sia interni che esterni.

Spin Hokuyo

Questo repository contiene i codici per controllare un attuatore Dynamixel e un LiDAR Hokuyo 2D, permettendo di creare un cloud di punti 3D visualizzabile in RViz.

Questo cloud di punti può poi essere utilizzato per generare una octomap.

Pagina Wiki: http://wiki.ros.org/spin_hokuyo

Un altro progetto simile utilizza il LiDAR Hokuyo UTM-30LX : cabine photo 3D .

2) Calibrazione

Pacchetto ROS per calibrare un LiDAR e una fotocamera

Questo package ROS permette di calibrare un LiDAR Velodyne con una fotocamera (funziona sia in modalità monoculare che stereo). In particolare, la fotocamera Point Gray Blackfly e la fotocamera ZED sono state calibrate con successo rispetto al Velodyne VLP-16, utilizzando la calibrazione LiDAR_camera_calibration.

Poiché il VLP-16 dispone di soli 16 raggi, riteniamo che i modelli superiori di Velodyne possano funzionare altrettanto bene con questo sistema. Dimostriamo la precisione del pipeline proposto fondendo cloud di punti acquisiti da più fotocamere, provenienti da diverse telecamere tenute in posizioni diverse, con una precisione quasi perfetta.

Il package implementa una rotazione e una traslazione che trasformano tutti i punti del fotogramma LiDAR al fotogramma (monoculare) della fotocamera.

Il package utilizza aruco_ros e un aruco_mapping (leggermente modificato) come dipendenze, entrambe disponibili nella cartella “dependencies” di questo tutorial.

La funzione LiDAR_camera_calibration/pointcloud_fusion fornisce uno script per fondere le nuvole di punti ottenute da due fotocamere stereo. Entrambe sono state calibrate utilizzando la calibrazione LiDAR e iDAR_camera_calibration .

È possibile leggere la pubblicazione relativa a questo progetto qui .

3) Tracking

Tracciamento di oggetti multipli con LiDAR

Il package ROS PCL per Rilevare/Categorizzare → Tracciare → Classificare oggetti statici e dinamici in tempo reale utilizzando scansioni LiDAR implementate in C++.

Caratteristiche:

  • Elaborazione dei cloud di punti basata su un’arborescenza K-D, per la rilevazione delle caratteristiche degli oggetti a partire dai cloud di punti;
  • Raggruppamento k-means non supervisionato, basato sulle caratteristiche rilevate e affinato tramite RANSAC;
  • Tracciamento stabile (identificazione degli oggetti e associazione dei dati) grazie a un insieme di filtri di Kalman;
  • Robusto rispetto al clustering k-means con monitoraggio del flusso medio.

4) Fusione

Extended Kalman Filter Project Starter Code

In questo progetto utilizzerete un filtro di Kalman per stimare lo stato di un oggetto in movimento utilizzando misure radar e LiDAR rumorosi.

Per completare con successo il progetto, è necessario ottenere valori di RMSE inferiori alla tolleranza indicata nella sezione del progetto.

Questo progetto richiede l’installazione del simulatore Term 2 .

Questo repository include due file che possono essere utilizzati per configurare e installare uWebSocketIO per sistemi Linux o Mac. Per Windows, è possibile utilizzare Docker, VMware o anche Windows 10 Bash su Ubuntu per installare uWebSocketIO.

Fusion EKF

Si tratta di un’implementazione estesa del filtro di Kalman per la fusione delle misurazioni provenienti da LiDAR e sensori radar. Un filtro di Kalman può essere utilizzato in qualsiasi situazione in cui si abbiano informazioni incerte su un sistema dinamico e si voglia effettuare una stima accurata del suo comportamento futuro.

In questo caso, abbiamo due sensori “rumorosi”:

    • Un sensore LiDAR, che misura la posizione in coordinate cartesiane (x, y).
    • Un sensore radar, che misura la posizione e la velocità in coordinate polari (rho, phi, drho). L’obiettivo è prevedere la posizione e la velocità in qualsiasi momento:
    • Principalmente: posizione e velocità del sistema in coordinate cartesiane → (x, y, vx, vy)
    • Nota: Supponiamo un modello a velocità costante (CV ) per questo specifico sistema. Il filtro di Kalman esteso esegue esattamente questa operazione.

Fusion UKF

Rispetto al filtro di Kalman esteso con modello a velocità costante, la RMSE dovrebbe essere inferiore con il filtro di Kalman unscented , specialmente per la velocità.

Il modello CTRV è più preciso rispetto al modello a velocità costante. L’UKF è noto per gestire meglio le equazioni non lineari rispetto all’EKF.

Robotica mobile

L’utilizzo di un LiDAR non è sempre sufficiente per alcune applicazioni. Infatti, è necessario raccogliere ulteriori dati per un’elevata accuratezza. Man mano che il sensore si sposta (essendo integrato su un robot mobile), è fondamentale considerare anche la sua posizione e orientazione per determinare la posizione dell’impulso laser al momento dell’emissione e al momento del ritorno.

Queste informazioni aggiuntive sono essenziali per garantire l’integrità dei dati. Spesso, vengono integrati i seguenti sensori:

  • Fotocamera
  • Chip GPS
  • IMU (Unità di Misura Inerziale)
  • Sensori ToF (Time of Flight)

Per ottenere misurazioni precise, è necessario fondere i dati e selezionare quelli più affidabili, in base all’ambiente e alla situazione. Questa fase è nota come fusione dei dati (data fusion). Attenzione: in alcuni casi, più sensori possono fornire lo stesso tipo di dati, ma con valori diversi a causa delle differenze di precisione ed errore. È quindi necessario determinare il valore reale, in base ai diversi valori dei sensori.

La fusione dei dati è una fase fondamentale: unendo tutte queste informazioni, il robot può localizzarsi con maggiore precisione all’interno del suo ambiente. Maggiore è la precisione dei sensori e del software di navigazione, più accurata sarà la stima della posizione del robot.

Implementare SLAM nella robotica mobile

Gli algoritmi SLAM più conosciuti sono:

L’immagine qui sotto mostra l’architettura della navigation stack di ROS, che è un’implementazione dello SLAM.

Architecture de la navigation stack de ROS

I sensori forniscono i dati di ingresso: le informazioni provenienti dai sensori stessi e dall’odometria. Sulla base di queste due fonti di dati, l’algoritmo calcola: la trasformazione del sensore, la stima della posa ( amcl ) e la mappatura dell’ambiente ( map_server ). Grazie a queste informazioni, il pianificatore di traiettoria può prendere decisioni.

I sensori sono quindi essenziali, e il LiDAR è il migliore per ottenere dati in formato LaserScan o PointCloud .

Per maggiori dettagli, puoi consultare questa introduzione alla navigazione con ROS .

Scopri anche gli altri articoli della nostra serie “Tecnologia LiDAR”

Quelles applications pour les LiDAR ?   

Consulta la sezione LiDAR per la ricerca e l’istruzione superiore oppure contattaci per maggiori informazioni o per richiedere un preventivo.

Marchi di LiDAR distribuiti da Génération Robots

LiDARs Ouster pour robots mobiles LiDARs Slamtec LiDARs YDLidar
LiDARs Robosense LiDARs Hokuyo LiDARs SICK