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
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