Consegna:
- Installare il software ORB_SLAM2
- Procedere al processamento della rosbag V1_01_easy.bag contenuta nell’EuRoC MAV Dataset
- Modificare opportunamente il codice di ORB_SLAM2 in modo che venga salvata in un file .pcd la point cloud corrispondente alla ricostruzione dei punti 3D generata dall’algoritmo di SLAM. Assicurarsi che il file .pcd creato abbia un formato compatibile con la libreria PCL
- Eseguire ORB_SLAM2 modificato sulla rosbag V1_01_easy.bag generando così un file .pcd
- Utilizzare la libreria PCL per visualizzare in 3D la point cloud appena generata
- Clusterizzare i punti della point cloud in base alla distanza Euclidea utilizzando opportuni valori di soglia
Recarsi nella cartella ORB_SLAM2 e digitare:
./build.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:$(pwd)/Examples/ROS
./build_ros.sh
Recarsi poi nella cartella Cluster Extraction e digitare:
cmake
make
- Estrarre nella medesima cartella il tar.gz
ORBvoc.txt.tar.gz
situato nella cartella/ORB_SLAM2/Vocabulary/
ottenendo quindi il fileORBvoc.txt
- Aprire un terminale e lanciare
roscore
- Recarsi in ORB_SLAM2, aprire un altro terminale e lanciare
rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/EuRoC.yaml true
- Recarsi nella cartella dov'è collocata la bag V1_01_easy.bag, aprire un altro terminale e lanciare
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:$(pwd)/Examples/ROS
e successivamenterosbag play --pause V1_01_easy.bag /cam0/image_raw:=/camera/left/image_raw /cam1/image_raw:=/camera/right/image_raw
- Per far partire la bag, premere
[SPAZIO]
nell'ultimo terminale - Ad esecuzione conclusa, verrà creato un file nella cartella ORB_SLAM2 chiamato pointcloud.pcd
- Per visualizzare questo file tramite la libreria PCL, posizionarsi nella cartella ORB_SLAM2 e lanciare in un terminale il comando
pcl_viewer pointcloud.pcd
- Per clusterizzarlo, spostare questo file all'interno della cartella Cluster Extraction (poiché ho messo dentro al file cluster_extraction.cpp il comando di andare a leggere il file pointcloud.pcd direttamente nella cartella dov'è eseguito cluster_extraction) ed eseguire il comando
./cluster_extraction
- È possibile specificare il valore di soglia mettendolo come secondo parametro, in questo modo:
./cluster_extraction 0.35
- Se non dovesse essere specificato, il software userà il valore di default pari a
0.28
- Per visualizzare i punti clustati della point cloud con la libreria PCL, lanciare il comando
pcl_viewer cloud_cluster_*
(dove l'asterisco serve per mandare al viewer tutti i file creati dal cluster_extraction)
Ho modificato il file /ORB_SLAM2/src/System.cc
aggiungendo a riga 475 una funzione che salva in un file i punti ottenuti da GetAllMapPoints()
. Ho aggiunto dei commenti a quella porzione di codice fatta da me.
Per fare questo ho consultato questa pagina.
Poi ho aggiunto al file /ORB_SLAM2/include/System.h
nelle righe 119 e 120 la dichiarazione della funzione costruita in System.cc
.
Ho modificato /ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_stereo.cc
righe 128 e 129 per invocare la funzione da me creata passandogli come stringa "pointcloud.pcd", così da crearmi l'omonimo file.
Ho creato la cartella Cluster Extraction e all'interno ho scritto il file cluster_extraction.cpp
come suggerito dalla documentazione. Ho modificato leggermente questo file nelle righe 77~81 per permettere di passare come secondo parametro il valore di soglia.
Ho creato il file CMakeLists.txt
come suggerito dalla documentazione e l'ho eseguito con cmake
e quindi poi compilato con make
.