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