Table des matières

OrbSlam

Installation sur Ubuntu 14.04:

Suivre pas à pas les recommendations du lien suivant :

https://github.com/raulmur/ORB_SLAM

En résumé, installer les librairies nécessaires, libBoost en premier :

sudo apt-get install libboost-all-dev 

Puis installer ROS indigo (pour ubuntu 14.04), suivre les instructions sur :

http://wiki.ros.org/indigo/Installation/Ubuntu

(Facultatif ) Installer g2o, DBoW2, qui sont en théorie installées avec ROS.

Ensuite cloner le dépôt:

git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM

Ajouter ROS_PACKAGE_PATH dans votre .bashrc

Compiler g2o dans le dossier:

cd ORB_SLAM/Thirdparty/g2o/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make

Compiler DBoW2

cd ORB_SLAM/Thirdparty/g2o/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make  

IMPORTANT, pour ROS INDIGO, Enlever dans le manifest.xml la dépendance à opencv2 Compiler ORB_SLAM dans le répertoire racine

mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release make

Utilisation

Pour lancer ORB_SLAM, lancer tout d'abord ROS

roscore

Lancer pour INDIGO

roslaunch ExampleGroovyOrNewer.launch

Cette exemple lance ORB_SLAM, image_view et Rviz. Télécharger ensuite un rosbag d'exemple à l'adresse suivante :

http://webdiis.unizar.es/~raulmur/orbslam/downloads/Example.bag.tar.gz.

Décompressez et éxecuter ensuite la commande suivante afin de charger le vocabulaire et les param caméra:

rosrun ORB_SLAM ORB_SLAM /Data/ORBvoc.txt /Data/Settings.yaml

Exécuter enfin l'exemple (appuyer ensuite sur espace pour démarrer):

rosbag play --pause Example.bag

ORBSLAM2

Cette version d'OrbSlam n'utilise pas ROS et permet également d'être utilisée avec une paire stéréo Caméra ou une Kinect. La version monoculaire à été légérement amélioré.

Pour l'installation, suivre les instructions ici :

https://github.com/raulmur/ORB_SLAM2

Pour l'utilisation, il faut lancer un executable, soit créer de toute pièce, soit un des exemples :

./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTIX.yaml PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER 

Vocabulary/ORBvoc.txt est le chemin vers le vocabulaire ( fourni à l'avance) Examples/Monocular/KITTIX.yaml est le fichier de config lié à votre éxécutable ( Param caméra et param Slam) PATH_TO_DATASET_FOLDER/dataset/sequences/SEQUENCE_NUMBER est le chemin vers votre séquence

Avec Qtcreator

Afin de l'utiliser dans qtcreator, vous pouvez ouvrir directement le CMakelist.txt, et si vous voulez voir les sources dans l'éditeur, modifiez le Cmakelist.txt en y ajoutant :

FILE(GLOB_RECURSE LibFiles "include/*.h")
add_custom_target(headers SOURCES ${LibFiles})

Vous pouvez également ajouter de nouveaux exécutables adaptés à chaque situation.

add_executable(mono_live
Examples/Monocular/mono_live.cc)
target_link_libraries(mono_live ${PROJECT_NAME})
add_executable(mono_calib
Examples/Monocular/mono_calib.cc)
target_link_libraries(mono_calib ${PROJECT_NAME})

Ici on rajoute dans le Cmakelist un exécutable pour le calibrage et un pour le fonctionnement en live

LSD-SLAM

Pour ROS INDIGO et Ubuntu 14.04

sudo apt-get install python-rosinstall
mkdir ~/rosbuild_ws
cd ~/rosbuild_ws
rosws init . /opt/ros/indigo
mkdir package_dir
rosws set ~/rosbuild_ws/package_dir -t .
echo "source ~/rosbuild_ws/setup.bash" >> ~/.bashrc
bash
cd package_dir

Pour éxécuter l'exemple fourni à l'adresse suivante:

http://vision.in.tum.de/research/vslam/lsdslam

Lancer les commandes suivantes après avoir décompresser l'archive:

roscore
rosrun lsd_slam_viewer viewer
rosrun lsd_slam_core live_slam image:=/image_raw camera_info:=/camera_info
rosbag play LSD_room.bag

Pour lancer une séquence

rosrun lsd_slam_core dataset_slam  _files:=images/  _hz:=0 _calib:=pinhole_example_calibWS.cfg 

Avec _files le chemin vers un dossier contenant les images, ou un fichier contenant le chemin/nom des images, _hz la fréquence des images, et _calib un fichier de calibration ( Voir LSD_SLAM github pour la forme du fichier)

Exemple

Sur la séquence roomBag.bag de test:

Sur la séquence fr1desk2, fail du tracking entre 25 et 100 frames suivant la fréquence renseignée:

Sur une séquence crée avec tablette Samsung :

= NB =

Les auteurs ont réussi à exécuter ce slam sur smartphone (sony Xperia Z1). Voir le papier

Semi-Dense Visual Odometry for AR on a Smartphone (T. Schöps, J. Engel, D. Cremers), In International
Symposium on Mixed and Augmented Reality, 2014.

Et la vidéo de démonstration :

https://www.youtube.com/watch?feature=player_embedded&v=X0hx2vxxTMg

BagFromImages

Cet outils sert à créer un ros bag à partir d'un ensemble d'images

git clone https://github.com/raulmur/BagFromImages.git BagFromImages
cd BagFromImages
mkdir build
cd build
cmake ..
make

Créer un ros bag à partir de l'ensemble d'image en utilisant :

rosrun BagFromImages BagFromImages PATH_TO_IMAGES IMAGE_EXTENSION FREQUENCY PATH_TO_OUPUT_BAG

NOTES

Il y a de nombreux problèmes à gérer pour l'installation concurrente de ORB_SLAM et LSD_SLAM

Pour un éventuel soucis avec g2o ( Orbslam ne parvient pas à initialiser et erreur undefined symbol: _ZN3g2o17EdgeSE3ProjectXYZC1Ev) voir :

https://github.com/raulmur/ORB_SLAM/issues/17

Il est également nécessaire de gérer les ROS_PATH qui change en fonction du soft à utiliser.

DPPTAM

Suivre l'installation depuis :

https://github.com/alejocb/dpptam

Il est nécessaire d'installer ROS, PCL et BOOST.

Installation

Aller dans votre répertoire source catkin :

cd ~/catkin_ws/src

Puis cloner le dépôt depuis github :

git clone  https://github.com/alejocb/dpptam.git

Compilation

Retourner dans le dossier racine de catkin

 cd ~/catkin_ws
 
 catkin_make --pkg dpptam
 

DPPSLAM utilise un soft tiers pour les superpixels, basée sur le papier

Efficient Graph-Based Image Segmentation. P. Felzenszwalb, D. Huttenlocher. International Journal of Computer Vision, Vol. 59, No. 2, September 2004

Il faut donc le compiler :

cd ~/catkin_ws/src/dpptam/ThirdParty/segment
make

NB: thirdparty semblait déjà compilé dans mon cas, éventuellement faire make clean puis make.

Utilisation

Pour utiliser dpptam, il faut se mettre dans le répertoire racine catkin:

cd ~/catkin_ws

Lancer dpptam

rosrun dpptam dpptam

Si le package dpptam n'existe pas ou n'est pas trouvé par ros, lancer la commande

source devel/setup.bash

Lancer le visualisateur d'image ( ne fonctionne pas chez moi pour le moment)

rosrun image_view image_view image:=/dpptam/camera/image

Lancer rviz:

rosrun rviz rviz

Voir le lien suivant pour la configuration de rviz: https://www.dropbox.com/s/pymufqi2i2aixys/visualization_rviz.png?oref=e&n=314995776

Le global Status ne sera pas Ok tant que le rosbag ne sera pas lancer:

rosbag play yourRosBag.bag
Fichier de config Yaml

Il est nécessaire également de configurer le fichier dpptam/src/data.yml. Par exemple pour le rosbag lab_unizar.bag fourni par les auteurs:

camera_path:"/camera/rgb/image_color"
cameraMatrix: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 520.908620, 0., 325.141442, 0., 521.007327 , 249.701764, 0., 0., 1. ]
distCoeffs: !!opencv-matrix
   rows: 5
   cols: 1
   dt: d
   data: [ 0.231222, -0.784899, -0.003257, -0.000105, 0.917205 ]

Il faut mettre à jour le camera_path avec celui ou se trouve les images brutes, et également les coefficients caméra.

Fermer et relancer dpptam pour prendre en compte les modifications.

Ajout du profiling

Modification de CMakeLists.txt pour ajout de infos de profiling

#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -Wall  -O3 -march=native ")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall   -O3 -march=native")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -march=native -pipe -p -pg -g3 -Wall -W -D_REENTRANT -coverage -fprofile-arcs -ftest-coverage -Wextra -g")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -O0 -march=native -pipe -p -pg -g3 -Wall -W -D_REENTRANT -coverage -fprofile-arcs -ftest-coverage -Wextra -g")

lancement orbslam2

bvandepo@rapid:~/orbslam/ORB_SLAM2/Examples/Monocular$ ./mono_kitti ../../Vocabulary/ORBvoc.txt ./KITTI00-02.yaml ../../../dataset/sequences/17/

Cette tentative de profiling ne fait apparaitre que le main mais pas les threads:

gprof -zc mono_kitti gmon.out > analysis.txt
gprof mono_kitti | ~/tmp/gprof2dot/gprof2dot/gprof2dot.py > gmon.dot
 dot gmon.dot -Tpng -o gmon.png
dot -Tps gmon.dot -o gmon.pdf
evince gmon.pdf 

projet qt dans: ~/orbslam/ORB_SLAM2/qt$

gprof ne supporte pas le multithread ni les appels aux fonctions situées dans des librairies dynamiques: http://gernotklingler.com/blog/gprof-valgrind-gperftools-evaluation-tools-application-level-cpu-profiling-linux/

oprofile

installation

Pour profiler une application multithreadée:

http://oprofile.sourceforge.net/download/

cd ~/orbslam
mkdir oprofile
cd  oprofile
git clone git://git.code.sf.net/p/oprofile/oprofile
sudo apt-get install autoconf automake libpopt-dev l binutils-dev libiberty-dev
./autogen.sh
./configure
  Warning: The user account 'oprofile:oprofile' does not exist on the system.
       To profile JITed code, this special user account must exist.
       Please ask your system administrator to add the following user and group:
           user name : 'oprofile'
           group name: 'oprofile'
       The 'oprofile' group must be the default group for the 'oprofile' user.
sudo adduser oprofile        
make -j4
sudo make install

utilisation

cd ~/orbslam/ORB_SLAM2/Examples/Monocular  
opgprof ./mono_kitti  # Generate the gmon.out file
gprof -p ./mono_kitti > gmon.txt
opreport -cl --demangle=smart `./mono_kitti ../../Vocabulary/ORBvoc.txt ./KITTI00-02.yaml ../../../dataset/sequences/17/`
gprof -zc mono_kitti gmon.out > analysis.txt
gprof mono_kitti | ~/tmp/gprof2dot/gprof2dot/gprof2dot.py > gmon.dot
dot gmon.dot -Tpng -o gmon.png
dot -Tps gmon.dot -o gmon.pdf
evince gmon.pdf 

valgrind

sudo apt-get install kcachegrind valgrind 
valgrind --tool=callgrind ./mono_kitti ../../Vocabulary/ORBvoc.txt ./KITTI00-02.yaml ../../../dataset/sequences/04/

http://valgrind.org/docs/manual/quick-start.html#quick-start.prepare

cd ~/orbslam/testvalgrind 
nano myprog.c
gcc -g myprog.c 
./a.out 
valgrind --leak-check=yes ./a.out
valgrind --tool=callgrind ./a.out

#ATTENTION LE NOM DU FICHIER callgrind.out change à l'execution

kcachegrind callgrind.out.4904 

test avec orbslam2

cd ~/orbslam/ORB_SLAM2/Examples/Monocular
valgrind --tool=callgrind `./mono_kitti ../../Vocabulary/ORBvoc.txt ./KITTI00-02.yaml ../../../dataset/sequences/04/`
kcachegrind  callgrind.out.3819

Problèmes

https://github.com/raulmur/ORB_SLAM2/issues/117

https://eigen.tuxfamily.org/dox-devel/group__TopicStructHavingEigenMembers.html

Vrai rosification

https://www.youtube.com/watch?v=PFgZKqeSh3c

Par Jonathan

cd ~/catkin_ws/src
ln -s /home/bvandepo/orbslam/ORB_SLAM2/Examples/ROS/ORB_SLAM2 orbslam2 
catkin_make --pkg orb_slam2
catkin_make install  --pkg orb_slam2
cd ~/catkin_ws/devel
source setup.sh 

ne pas éditer les fichiers dans ~/catkin_ws/install/ car ils sont écrasé lorsqu'on fait le catkin_make install

mettre a jour dans /home/bvandepo/catkin_ws/src/orbslam2/launch/launch_kitti.launch

<param name="voc_path" value="/home/bvandepo/orbslam/ORB_SLAM2/Vocabulary/ORBvoc.txt"/>
<param name="config_path" value="/home/bvandepo/orbslam/ORB_SLAM2/Examples/Monocular/KITTI04-12.yaml"/>

sauver dans launch_kitti_bvdp.launch

récupérer un bag pour tester:

cd /home/bvandepo/orbslam/
wget https://bvdp.inetdoc.net/files/kitti_05.bag

Executer

cd ~/catkin_ws/
roslaunch orb_slam2 launch_kitti_bvdp.launch bag_path:=/home/bvandepo/orbslam/kitti_05.bag