Table des matières
Installation ROS
d'après: http://wiki.ros.org/indigo/Installation/Ubuntu
ROS Indigo ONLY supports Saucy (13.10) and Trusty (14.04) for debian packages.
mais d'apres: http://answers.ros.org/question/189033/can-you-run-indigo-on-ubuntu-1204/ on peut installer indigo sur 12.04
Prérequis OPENCV
sudo add-apt-repository ppa:gezakovacs/lz4 sudo apt-get update sudo apt-get install liblz4-dev liblz4-tool liblz4-0.0 wget http://skylink.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip unzip opencv-2.4.9.zip cd opencv-2.4.9/ mkdir build cd build/ cmake ..
ou pour des machines du LAAS pour specifier un dossier d installation sur lequel sudo a les droits, A TESTER!!!!
cmake -D CMAKE_INSTALL_PREFIX=/local/opencv ../
puis
make -j8 sudo make install sudo ldconfig
bug compile opencv [ 82%] Building CXX object modules/contrib/CMakeFiles/opencv_contrib.dir/src/rgbdodometry.cpp.o /home/bvandepo/installros/opencv-2.4.9/modules/contrib/src/rgbdodometry.cpp:65:47: erreur fatale: unsupported/Eigen/MatrixFunctions : Aucun fichier ou dossier de ce type
modification de /home/bvandepo/installros/opencv-2.4.9/modules/contrib/src/rgbdodometry.cpp , ajouter à la ligne 59
#define EIGEN_WORLD_VERSION 1
le sudo make install foire car il veut ecrire en tant que sudo sur des fichiers qui sont stockés sur le réseau… je déplace en locale sur la machine et crée un lien symbolique
cd /local/users/bvandepo mv ~/installros/ ./ ln -s /local/users/bvandepo/installros ~/installros
ROS Hydro
http://wiki.ros.org/indigo/Installation/Ubuntu
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-get update sudo apt-get install ros-hydro-desktop-full
ca vire la version fuerte et installe hydro
apt-cache search ros-hydro rosdep update sudo rosdep init bash echo "source /opt/ros/hydro/setup.bash" >> ~/.bashrc source ~/.bashrc
####IL FAUT LE METTRE A LA FIN DU .bashrc!!!!!
sudo apt-get install python-rosinstall
liste des paquets ROS dispo sur: http://www.ros.org/debbuild/hydro.html
http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment
printenv | grep ROS mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace
cd ~/catkin_ws/ catkin_make
source devel/setup.bash echo $ROS_PACKAGE_PATH
http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem
sudo apt-get install ros-hydro-ros-tutorials
pour avoir la version
rosversion -d apt-cache search ros-hydro | grep -i ueye sudo apt-get install ros-hydro-ueye ros-hydro-ueye-cam roscore
Ueye
Installation pilote ueye:
wget https://fr.ids-imaging.com/download-ueye-lin32.html?file=tl_files/downloads/uEye_SDK/driver/uEye_Linux_4.61_32_Bit.tgz
desinstall ancienne version:
sudo /usr/local/share/ueye/bin/ueyed_install-usb uninstall
install nouvelle:
sudo sh ./ueyesdk-setup-4.61-usb-i686.gz.run
noeud ueye: http://wiki.ros.org/ueye_cam#
This package has been tested with the Software Package for USB and GigE uEye Cameras Version 4.20 64 Bit for Linux, on Ubuntu 12.04 x64 & Ubuntu 13.04 x64, operating with UEye UI122xLE-C USB 2.0 cameras.
sur borderouge j'ai la version 3.9 du driver et en 32bits → je suis passé à la 4.61 pour que ca marche…
créer le catkin workspace
mkdir -p ~/ueye_catkin/src
initialize and download source code
cd ~/ueye_catkin/src && wstool init && wstool set ueye_cam --git https://github.com/anqixu/ueye_cam && wstool update && cd ..
Run catkin_make
catkin_make
explication de ce qu'est un catkin: http://wiki.ros.org/catkin/conceptual_overview
exécution ueye sur arm: https://www.youtube.com/watch?v=nU1u6vHoZ-I&feature=youtu.be
rostopic list
lancement d'un script demo:
bash cd ~/ueye_catkin/src/ueye_cam/launch roslaunch rgb8.launch
(il faut avoir lancé le démon ueye)
j'ai cette erreur: /opt/ros/hydro/lib/rosout/rosout: error while loading shared libraries: libroscpp.so: cannot open shared object file: No such file or directory
sudo apt-get install ros-hydro-ros-comm ros-hydro-roscpp ros-hydro-roscpp-core ros-hydro-rostime ros-hydro-rqt-gui-cpp
en cas de probleme il faut refaire:
source /opt/ros/hydro/setup.bash
liste des topics du noeud ueye:
rostopic list
rostopic echo /camera/camera_info rostopic echo /ueye_cam_nodelet/parameter_descriptions rostopic echo /camera/image_raw
camera:=/camera
REMARQUE: le code du noeud ROS fait une copie du buffer d'image (voir http://docs.ros.org/jade/api/ueye_cam/html/ueye__cam__nodelet_8cpp_source.html ) mais il n'y a pas de lock de la zone mémoire donc le driver de la ueye peut écraser les données!
Vu que le pilote ros ueye est bancal, peut être que certaines images sont verrollées (surtout quand je les acquière à 87 fps). Du coup, ca pourrait expliquer certains décrochement de SVO…. il faudra que j'enregistre des séquences vers du ramdisk en utilisant le drivers ros et vérifier quaucune image n'est sectionnée.
étalonnage géométrique
http://wiki.ros.org/camera_calibration et http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration
rosdep install camera_calibration rosmake camera_calibration
rectification et debayerisation de l'image: http://wiki.ros.org/image_proc
pour lancer l'étalonnage avec une mire contenant 8×6 intersections de coins espacées de 23mm:
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.023 image:=/camera/image_raw
Bouger la camera jusqu'à ce que le bouton calibrate soit dégrisé et cliquer dessus:
# oST version 5.0 parameters [image] width 640 height 480 [narrow_stereo] camera matrix 666.954335 0.000000 356.801725 0.000000 664.691658 215.604874 0.000000 0.000000 1.000000 distortion -0.377974 0.145009 -0.000818 -0.001899 0.000000 rectification 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 projection 599.969482 0.000000 363.101026 0.000000 0.000000 626.852661 212.125282 0.000000 0.000000 0.000000 1.000000 0.000000
bouton Save sauve en /tmp/calibrationdata.tar.gz , ce fichier contient les images en png et un fichier ost.txt
bouton Commit génère une erreur: Failed to write camera info to file… :(
TODO: regarder http://wiki.ros.org/ROS/EnvironmentVariables#ROS_PACKAGE_PATH et régler toutes les variables, notamment le ROS_HOME
utiliser: http://wiki.ros.org/camera_calibration_parsers pour convertir le ost.txt en .yml nécessaire à SVO
cd /tmp tar -zxvf calibrationdata.tar.gz ost.txt mv ost.txt ost.ini rosrun camera_calibration_parsers convert ost.ini cal.yml
Tutorial simpliste pour hydro
http://jbohren.com/articles/roscpp-hello-world/
Ouvrir 3 consoles:
roscore cd ~/hello_world_tutorial && ./hello_world_node rosnode info /hello_world_node
dans une autre fenêtre, on peut afficher le topic /rosout émis par hello_world_node
rostopic echo /rosout
SVO
https://github.com/uzh-rpg/rpg_svo
papier: https://github.com/uzh-rpg/rpg_svo/blob/master/Forster2014ICRA.pdf
http://rpg.ifi.uzh.ch/software_datasets.html
installation: https://github.com/uzh-rpg/rpg_svo/wiki
https://github.com/uzh-rpg/rpg_svo/wiki/Installation:-Plain-CMake-%28No-ROS%29
Installation sans ROS
DIR=~/Téléchargements/svo sudo apt-get install libboost-all-dev libeigen3-dev cmake libsuitesparse-dev libqt4-dev qt4-qmake libqglviewer-qt4-dev
cd $DIR git clone https://github.com/strasdat/Sophus.git cd Sophus git checkout a621ff mkdir build cd build cmake .. make
cd $DIR git clone https://github.com/uzh-rpg/fast.git cd fast mkdir build cd build cmake .. make
cd $DIR git clone https://github.com/RainerKuemmerle/g2o.git cd g2o mkdir build cd build cmake .. make sudo make install
cd $DIR git clone https://github.com/uzh-rpg/rpg_vikit.git in rpg_vikit/vikit_common/CMakeLists.txt set the flag USE_ROS to FALSE. cd rpg_vikit/vikit_common mkdir build cd build cmake .. make
cd $DIR git clone https://github.com/uzh-rpg/rpg_svo.git cd rpg_svo/svo In svo/CMakeLists.txt set the flag USE_ROS to FALSE. mkdir build cd build cmake .. make
/home/bvandepo/Téléchargements/svo/rpg_svo/svo/src/map.cpp:135:12: erreur: could not convert ‘nullptr’ from ‘std::nullptr_t’ to ‘svo::FramePtr {aka boost::shared_ptr<svo::Frame>}’
voir: http://stackoverflow.com/questions/29125396/building-svo-package-on-raspberry-pi
mais c'est une mauvaise solution, il vaudrait mieux gérer le C++ 11 : http://stackoverflow.com/questions/16886591/how-do-i-enable-c11-in-gcc
dans ./src/rpg_svo/svo/CMakeLists.txt changer
SET(CMAKE_CXX_FLAGS "-Wall -D_LINUX -D_REENTRANT -march=native -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unknown-pragmas")
en
SET(CMAKE_CXX_FLAGS "-std=c++11 -Wall -D_LINUX -D_REENTRANT -march=native -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unknown-pragmas")
MAIS J OBTIENS:
[ 51%] Built target vikit_ros [ 55%] [ 55%] Building CXX object rpg_svo/svo/CMakeFiles/svo.dir/src/frame_handler_base.cpp.o Building CXX object rpg_svo/svo/CMakeFiles/svo.dir/src/frame_handler_mono.cpp.o cc1plus: erreur: unrecognized command line option ‘-std=c++11’ cc1plus: erreur: unrecognized command line option ‘-std=c++11’ make[2]: *** [rpg_svo/svo/CMakeFiles/svo.dir/src/frame_handler_base.cpp.o] Erreur 1 make[2]: *** Attente des tâches non terminées.... cc1plus: erreur: unrecognized command line option ‘-std=c++11’ cc1plus: erreur: unrecognized command line option ‘-std=c++11’ make[2]: *** [rpg_svo/svo/CMakeFiles/svo.dir/src/frame_handler_mono.cpp.o] Erreur 1 make[1]: *** [rpg_svo/svo/CMakeFiles/svo.dir/all] Erreur 2 make: *** [all] Erreur 2 Invoking "make" failed
D'APRES: https://www.bountysource.com/issues/8218373-ubuntu-12-04-make-fails-cc1plus-error-unrecognized-command-line-option-std-gnu-11 Hi @Bloodyaugust. I've see this issue and as the C++11 support in 4.6 is not as complete as gcc 4.8, you should use gcc 4.8. You can install gcc-4.8 package:
sudo apt-get install g++-4.8
And then, before you run cmake:
export CXX="g++-4.8"
mais g++-4.8 n'est pas dans les paquets ubuntu 12.04
voir: https://gcc.gnu.org/projects/cxx0x.html
exécutables dans :
cd ~/Téléchargements/svo/rpg_svo/svo/bin ./test_depth_filter
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct null not valid
Abandon (core dumped)
dataset
https://github.com/uzh-rpg/rpg_svo/wiki/Run-SVO-without-ROS
cd $DIR mkdir Datasets export SVO_DATASET_DIR=${DIR}/Datasets wget http://rpg.ifi.uzh.ch/datasets/sin2_tex2_h1_v8_d.tar.gz -O - | tar -xz cd $DIR/rpg_svo/svo/bin ./test_pipeline cd $DIR/Datasets
Installation avec ROS sur machine Borderouge
Probleme avec le nfs, il faut mettre les fichiers d'install en local :(
cd /local/users/bvandepo mv ~/svo ./ ln -s /local/users/bvandepo/svo ~/svo echo $ROS_PACKAGE_PATH /opt/ros/hydro/share:/opt/ros/hydro/stacks
Il faut créer ~/catkin_ws et bien mettre rpg_svo et rpg_vikit dans ~/catkin_ws/src/ puis faire
cd ~/catkin_ws catkin_make
corriger l'erreur de nullptr
dataset pour ROS
https://github.com/uzh-rpg/rpg_svo/wiki/Run-SVO-with-ROS
cd ~/catkin_ws && wget rpg.ifi.uzh.ch/datasets/airground_rig_s3_2013-03-18_21-38-48.bag
pour utiliser rviz, je dois ajouter à .bashrc car ma carte ne supporte pas opengl2.1
export LIBGL_ALWAYS_SOFTWARE=1
Il faut executer en local sur la machine borderouge car le problème vient de l'export display…
Tentative en Live
bvandepo@borderouge:~/catkin_ws/src/rpg_svo/svo_ros/launch$ roslaunch svo_ros ./live.launch
[./live.launch] is neither a launch file in package [svo_ros] nor is [svo_ros] a launch file name
bvandepo@borderouge:~/catkin_ws/src/rpg_svo/svo_ros/launch$ rosrun rqt_svo rqt_svo [rospack] Error: stack/package rqt_svo not found bvandepo@borderouge:~/catkin_ws/src/rpg_svo/svo_ros/launch$ rosls rqt_svo live.launch live.launch~ test_rig3.launch bvandepo@borderouge:~/catkin_ws/src/rpg_svo/svo_ros/launch$ roscd rqt_svo roscd: No such package/stack 'rqt_svo'
D'apres http://answers.ros.org/question/44270/error-stackpackage-nxt_python-not-found/ , c'est un problème de ROS_PACKAGE_PATH environment variable
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/bvandepo/catkin_ws/ echo $ROS_PACKAGE_PATH
tentative:
rosrun rviz rviz -d /home/bvandepo/catkin_ws/src/rpg_svo/svo_ros/rviz_config.rviz
Si en lançant les scrits de launch, on obtient:
ERROR: cannot launch node of type [svo_ros/vo]: can't locate node [vo] in package [svo_ros]
alors charger:
source ~/catkin_ws/devel/setup.bash
même problème de gui svo qui affiche not connected: https://github.com/uzh-rpg/rpg_svo/issues/65
Inspection du fichier .bag:
rqt_bag ~/catkin_ws/airground_rig_s3_2013-03-18_21-38-48.bag
puis cliquer sur l'image toogle thumbnail (voir http://wiki.ros.org/rxbag )
vrac:
rostopic list rostopic bw /camera/image_raw rostopic echo /camera/image_raw rostopic hz /camera/image_raw rostopic type /camera/image_raw
analyse des paramètres
rosparam list rosparam get /svo/cam_cx
pour récupérer tous les paramètres du namespace /svo
rosparam get /svo
les enregistrer vers un fichier dump
rosparam dump test.yaml /svo/
Visualisation des échanges de données entre les noeuds ROS, selectionner Nodes/Topics All et cliquer sur raffraichir dans
rqt_graph
Affichage et tracé d'un topic
rostopic echo /imu/data rqt_plot /imu/data/linear_acceleration/x
affichage des messages publiés sur /rosout
rqt_console
probleme
en lancant d'abord
roslaunch svo_ros test_rig3.launch
puis
rosbag play catkin_ws/airground_rig_s3_2013-03-18_21-38-48.bag
le noeud svo plante:
[ INFO] [1443100635.238342952]: SVO initialized [ INFO] [1443100635.240118679]: Found parameter: svo/cam_topic, value: /camera/image_raw [ INFO] [1443100658.812386743]: RESET [svo-2] process has died [pid 8200, exit code -4, cmd /home/bvandepo/catkin_ws/devel/lib/svo_ros/vo __name:=svo __log:=/home/bvandepo/log/9176bd96-62be-11e5-8a0c-00137297c9b4/svo-2.log]. log file: /home/bvandepo/log/9176bd96-62be-11e5-8a0c-00137297c9b4/svo-2*.log
gedit /home/bvandepo/log/9176bd96-62be-11e5-8a0c-00137297c9b4/master.log & gedit /home/bvandepo/log/9176bd96-62be-11e5-8a0c-00137297c9b4/roslaunch-borderouge-8160.log &
même problème sans réponse: http://answers.ros.org/question/197452/roslaunch-crash-when-launch-rosbag-play-svo/
Tentative d'executer les programmes de test via ros (ils marchent sans): https://github.com/uzh-rpg/rpg_svo/tree/master/svo/test
cd ~/catkin_ws/src/rpg_svo/svo/test mkdir ~/Datasets
dans ~/.bashrc
export SVO_DATASET_DIR=${HOME}/Datasets
cd ${SVO_DATASET_DIR} wget http://rpg.ifi.uzh.ch/datasets/sin2_tex2_h1_v8_d.tar.gz -O - | tar -xz rosrun svo test_pipeline
[ INFO] [1443102370.121357754]: SVO initialized reading image /home/bvandepo/Datasets/sin2_tex2_h1_v8_d/img/frame_000002_0.png [ INFO] [1443102370.195465713]: RESET Instruction non permise (core dumped) bvandepo@borderouge:~/Datasets/sin2_tex2_h1_v8_d$ display /home/bvandepo/Datasets/sin2_tex2_h1_v8_d/img/frame_000002_0.png
c'est peut être la modif liée au nullptr
gedit ~/catkin_ws/src/rpg_svo/svo/src/map.cpp &
Install sur brute
installation ros et ueye
Installation de ros jade au lieu de hydro
il faut télécharger la version 64bits du driver de la ueye:
wget https://fr.ids-imaging.com/download-ueye-lin64.html?file=tl_files/downloads/uEye_SDK/driver/uEye_Linux_4.61_64_Bit.tgz
je met ueye dans le catkin avec svo:
cd ~/catkin_ws/src && wstool init && wstool set ueye_cam --git https://github.com/anqixu/ueye_cam && wstool update && cd .. sudo apt-get install ros-jade-ros-comm ros-jade-roscpp ros-jade-roscpp-core ros-jade-rostime ros-jade-rqt-gui-cpp
Le paquet libqglviewer-qt4-dev est remplacé par:
sudo apt-get install libqglviewer-dev
drivers propriétaires carte nvidia
http://doc.ubuntu-fr.org/nvidia
sudo add-apt-repository ppa:xorg-edgers/ppa sudo apt-get update ubuntu-drivers devices sudo apt-get install nvidia-340 sudo reboot 0 sudo apt-get install nvidia-settings sudo nvidia-settings
http://doc.ubuntu-fr.org/gestionnaire_de_pilotes_proprietaires
exécution
script pour avoir l'image en 752*480 avec la ueye
cp ~/catkin_ws/src/ueye_cam/launch/rgb8.launch ~/catkin_ws/src/ueye_cam/launch/rgb8752.launch
changer 640 en 752
gedit ~/catkin_ws/src/ueye_cam/launch/rgb8752.launch
étalonnage
cd ~/catkin_ws/src/ueye_cam/launch roslaunch rgb8752.launch
et dans une autre console:
rosrun camera_calibration cameracalibrator.py --size 8x8 --square 0.022 image:=/camera/image_raw
calibrate, save et commit
cd /tmp tar -zxvf calibrationdata.tar.gz ost.txt mv ost.txt ost.ini rosrun camera_calibration_parsers convert ost.ini cal.yml cp cal.yml ~/catkin_ws/
Ce n'est pas le même format yaml que celui attendu par svo!!!! voir: https://github.com/uzh-rpg/rpg_svo/wiki/Camera-Calibration
cd ~/catkin_ws/src find .| grep param ./rpg_vikit/vikit_ros/include/vikit/params_helper.h ./rpg_svo/svo_ros/param ./rpg_svo/svo_ros/param/camera_pinhole.yaml ./rpg_svo/svo_ros/param/vo_fast.yaml ./rpg_svo/svo_ros/param/camera_atan.yaml ./rpg_svo/svo_ros/param/vo_accurate.yaml
cd /home/bvdp/catkin_ws/src/rpg_svo/svo_ros/param
cp camera_pinhole.yaml camera_pinhole_ueye.yaml gedit camera_pinhole_ueye.yaml ~/catkin_ws/cal.yml &
copier les valeurs de camera_matrix→data et distorsion_coefficients→data
live
cp ~/catkin_ws/src/rpg_svo/svo_ros/launch/live.launch ~/catkin_ws/src/rpg_svo/svo_ros/launch/liveueye.launch gedit ~/catkin_ws/src/rpg_svo/svo_ros/launch/liveueye.launch &
changer en <rosparam file=“$(find svo_ros)/param/camera_pinhole_ueye.yaml” />
script launch qui intègre lancement camera + svo
merger ~/catkin_ws/src/rpg_svo/svo_ros/launch/ liveueye.launch et ~/catkin_ws/src/ueye_cam/launch/rgb8752.launch en ~/catkin_ws/src/rpg_svo/svo_ros/launch/ liveueye2.launch
optimisation
script liveueye3.launch qui règle la caméra ueye pour avoir 70fps et des paramètres d'exposition et de gain fixes (déterminés avec ueyedemo)
exécution
NB: il ne faut surtout pas donner le chemin devant le nom du fichier launch!!!!
cd ~/catkin_ws/src/rpg_svo/svo_ros/launch roslaunch svo_ros liveueye3.launch
dans la console texte, on peut presser R (reset) S (start) Q (quitter)
normalement, une gui doit s'ouvrir, sinon:
rosrun rqt_svo rqt_svo
Pour afficher la visu en 3D:
rosrun rviz rviz
et load du fichier de configuration
- liveueye4.launch
<launch> <arg name="nodelet_manager_name" value="nodelet_manager" /> <arg name="camera_name" value="camera" /> <node pkg="nodelet" type="nodelet" name="$(arg nodelet_manager_name)" args="manager" output="screen" /> <node pkg="nodelet" type="nodelet" name="ueye_cam_nodelet" args="load ueye_cam/ueye_cam_nodelet $(arg nodelet_manager_name)"> <param name="camera_name" type="str" value="$(arg camera_name)" /> <!-- == namespace for topics and services --> <param name="camera_topic" type="str" value="image_raw" /> <param name="camera_id" type="int" value="0" /> <!-- 0 = any camera; 1+: camera ID --> <param name="camera_intrinsics_file" type="string" value="" /> <!-- default: ~/.ros/camera_info/<camera_name>.yaml --> <param name="camera_parameters_file" type="string" value="" /> <!-- default: ~/.ros/camera_conf/<camera_name>.ini --> <param name="ext_trigger_mode" type="bool" value="False" /> <!-- if False, then camera will operate in free-run mode; otherwise, frames need to be triggered by hardware signal (falling-edge) on digital input pin of camera --> <!-- the following are optional camera configuration parameters: they will be loaded on the camera after the .ini configuration file, and before dynamic_reconfigure. That means that any (lingering) dynamic parameters from dynamic_reconfigure will override these values, and that these will override parameters from the .ini file. See http://www.ros.org/wiki/ueye_cam for more details. --> <param name="color_mode" type="str" value="mono8" /> <!-- valid options: 'rgb8', 'mono8', 'bayer_rggb8' --> <!-- WARNING: the following 4 parameters specify dimensions for camera's area of interest. Values for image_width and image_height that are smaller than your camera's maximum values will result in cropped field of view. For typical cases, one should modify values for sensor_scaling / binning / subsampling to downsample the resulting ROS image to the desired dimensions, without losing potential field of view. --> <param name="image_width" type="int" value="752" /> <param name="image_height" type="int" value="480" /> <param name="image_top" type="int" value="-1" /> <!-- -1: center --> <param name="image_left" type="int" value="-1" /> <!-- -1: center --> <param name="subsampling" type="int" value="1" /> <!-- supported by only some UEye cameras --> <param name="binning" type="int" value="1" /> <!-- supported by only some UEye cameras --> <param name="sensor_scaling" type="double" value="1.0" /> <!-- supported by only some UEye cameras --> <param name="auto_gain" type="bool" value="False" /> <param name="master_gain" type="int" value="0" /> <param name="red_gain" type="int" value="0" /> <param name="green_gain" type="int" value="0" /> <param name="blue_gain" type="int" value="0" /> <param name="gain_boost" type="bool" value="False" /> <param name="auto_exposure" type="bool" value="False" /> <param name="exposure" type="int" value="3" /> <!-- in ms --> <param name="auto_white_balance" type="bool" value="False" /> <param name="white_balance_red_offset" type="int" value="0" /> <param name="white_balance_blue_offset" type="int" value="0" /> <param name="flash_delay" type="int" value="0" /> <!-- in us --> <param name="flash_duration" type="int" value="1000" /> <!-- in us --> <param name="auto_frame_rate" type="bool" value="False" /> <param name="frame_rate" type="double" value="70.0" /> <param name="pixel_clock" type="int" value="40" /> <param name="flip_upd" type="bool" value="False" /> <param name="flip_lr" type="bool" value="False" /> </node> <node pkg="svo_ros" type="vo" name="svo" clear_params="true" output="screen"> <!-- Camera topic to subscribe to --> <param name="cam_topic" value="/camera/image_raw" type="str" /> <!-- Camera calibration file --> <rosparam file="$(find svo_ros)/param/camera_pinhole_ueye.yaml" /> <!-- <rosparam file="/home/bvdp/catkin_ws/cal.yml" /> --> <!-- Default parameter settings: choose between vo_fast and vo_accurate --> <rosparam file="$(find svo_ros)/param/vo_accurate.yaml" /> </node> </launch>
Pour adapter aux conditions d'éclairage, changer la valeur de <param name=“exposure” type=“int” value=“3” /> <!– in ms –>. Si l'éclairage est de type néon, il faut régler une valeur multiple de 10ms pour intégrer des périodes complètes du 100hz.
- camera_pinhole_ueye.yaml
cam_model: Pinhole cam_width: 752 cam_height: 480 cam_fx: 653.851271 cam_fy: 653.296902 cam_cx: 365.892823 cam_cy: 219.379481 cam_d0: -0.438732 cam_d1: 0.204663 cam_d2: -0.000598 cam_d3: 0.000145
Traitement Séquence aircobot
Extraction d'une séquence de pgm par décimation
- script.sh
#!/bin/bash rm select/image_*.pgm rm select/image_*.png rm select/image_*.jpg rm select/image_*.tif IMG_DIR="selecttif/" mkdir -p $IMG_DIR LIST_FILE=$IMG_DIR"list.txt" rm $LIST_FILE j=0 for i in $(seq -w 1 60 3769); do echo $j #formate sur 4 digits jf=`printf "%04.f\n" $j` echo $jf #cp image_$i.pgm $IMG_DIR/image_$jf.pgm convert image_$i.pgm $IMG_DIR/image_$jf.tif j=`expr $j + 1` done for k in $(seq -w 1 59); do #genere des paires for inc in $(seq 1 3); do l=`expr $k + $inc` #formate sur 4 digits kf=`printf "%04.f\n" $k` lf=`printf "%04.f\n" $l` echo image_$kf.pgm image_$lf.pgm >>$LIST_FILE done done
Génération d'un bag à partir de séquence d'image pgm
http://answers.ros.org/question/11537/creating-a-bag-file-out-of-a-image-sequence/
- img2bag_gray_mono.py
#adaptation par bvandepo de http://answers.ros.org/question/11537/creating-a-bag-file-out-of-a-image-sequence/ #pour traiter des séquences d'images en niveaux de gris (pgm ou png) et les trier import time, sys, os from ros import rosbag import roslib import rospy roslib.load_manifest('sensor_msgs') from sensor_msgs.msg import Image import ImageFile def GetFilesFromDir(dir): '''Generates a list of files from the directory''' print( "Searching directory %s" % dir ) all = [] if os.path.exists(dir): for path, names, files in os.walk(dir): for f in files: if os.path.splitext(f)[1] in ['.png','.pgm']: all.append( os.path.join( path, f ) ) return all def CreateMonoBag(imgs,bagname): '''Creates a bag file with camera images''' bag =rosbag.Bag(bagname, 'w') #tri des images par nom croissant imgs=sorted(imgs) try: for i in range(len(imgs)): print("Adding %s" % imgs[i]) fp = open( imgs[i], "r" ) p = ImageFile.Parser() while 1: s = fp.read(1024) if not s: break p.feed(s) im = p.close() Stamp = rospy.rostime.Time.from_sec(time.time()) Img = Image() Img.header.stamp = Stamp Img.width = im.size[0] Img.height = im.size[1] Img.encoding = "mono8" Img.header.frame_id = "camera" #Img_data = [pix for pixdata in im.getdata() for pix in pixdata] Img_data = [pix for pix in im.getdata()] Img.data = Img_data bag.write('camera/image_raw', Img, Stamp) finally: bag.close() def CreateBag(args): '''Creates the actual bag file by successively adding images''' all_imgs= GetFilesFromDir(args[0]) if len(all_imgs) <= 0: print("No images found in %s" % args[0]) exit() # create bagfile with mono camera image stream CreateMonoBag(all_imgs, args[1]) if __name__ == "__main__": if len( sys.argv ) == 3: CreateBag( sys.argv[1:]) else: print( "Usage: img2bag_gray_mono imagedir bagfilename")
Extraction d'images contenues dans un bag
http://wiki.ros.org/rosbag/Tutorials/Exporting%20image%20and%20video%20data
<launch> <node pkg="rosbag" type="play" name="rosbag" args="-d 2 /home/bvdp/catkin_ws/airground_rig_s3_2013-03-18_21-38-48.bag"/> <node name="extract" pkg="image_view" type="extract_images" respawn="false" output="screen" cwd="ROS_HOME"> <remap from="image" to="/camera/image_raw"/> </node> </launch>
Paramètres caméra
CAMERA_TYPE: 0 CAMERA_DEVICE: 0x00b09d010063565b IMG_WIDTH: 640 IMG_HEIGHT: 480 INTRINSIC: [4](327.3508, 249.9982, 622.0489, 621.6159) DISTORTION: [3](-0.3270245, 0.1944629, -0.09558001)
mais les images fournies sont déjà rectifiées, faire un fichier:
- camera_pinhole_aircobot.yaml
cam_model: Pinhole cam_width: 640 cam_height: 480 cam_fx: 622.0489 cam_fy: 621.6159 cam_cx: 327.3508 cam_cy: 249.9982 cam_d0: 0 cam_d1: 0 cam_d2: 0 cam_d3: 0
Pour connaître les paramètres des images publiées sur le topic /camera/image_raw
rostopic echo /camera/image_raw | grep width -A 3 -B 2
http://wiki.ros.org/rosbag/Tutorials/Recording%20and%20playing%20back%20data
rosbag info aircobot1.bag path: aircobot1.bag version: 2.0 duration: 17.9s start: Sep 30 2015 14:30:48.06 (1443616248.06) end: Sep 30 2015 14:31:05.99 (1443616265.99) size: 88.0 MB messages: 300 compression: none [100/100 chunks] types: sensor_msgs/Image [060021388200f6f0f447d0fcd9c64743] topics: camera/image_raw 300 msgs : sensor_msgs/Image
A faire
tenter des réglages: https://github.com/uzh-rpg/rpg_svo/wiki/Parameter-Settings
étalonner la camera avec le modèle ATAN: https://github.com/uzh-rpg/rpg_svo/wiki/Camera-Calibration
intégrer les données inertielles: http://rpg.ifi.uzh.ch/software_datasets.html
voir l'execution sur raspberry ou autre ARM: https://pixhawk.org/dev/ros/visual_estimation
https://pixhawk.org/dev/ros/getting_started_tutorial
http://frc.ri.cmu.edu/~kaess/vslam_cvpr14/
http://frc.ri.cmu.edu/~kaess/vslam_cvpr14/media/VSLAM-Tutorial-CVPR14-P22-SLAM%2B%2B.pdf