README

INTRODUCTION

Sur Ubuntu 16.04, le package par défaut d'OpenCV est la version 2.4.x
Dans OpenCV 3.2, plusieurs algorithmes, dont sift et surf (utile pour la robotique) ont été mis dans un module différent (nonfree) qui n'est pas présent dans le paquet Ubuntu.
Si on veut pouvoir utiliser OpenCV avec ces algorithmes, nous avons deux possibilités :
* Installer OpenCV 2.4.x à partir du code source en installant avec les modules nonfree.
Les avantages :
- Même fonctions
- OpenCV indépendante de ROS
- Possibilité d'installer OpenCV à sa manière (avec ou non Qt, avec ou non tbb, avec ou non prise en charge driver Kinect, etc.)
- Compatibilité avec les noeuds ROS préexistants qui utilisent OpenCV.
Les inconvénients
- Faible prise en charge de python
- Pas accès aux dernières nouveautés d'OpenCV

* Installer OpenCV 3.2 via un noeud ROS ros-kinetic-opencv3
Installer OpenCV 3.2 directement à partir du code source semble présenter plusieurs problèmes. Le noeud ROS ros-kinetic-opencv3 à l'avantage de gérer la meilleure installation compatible avec ROS.
Les avantages :
- Meilleure prise en charge de python
- Dernière nouveauté OpenCV
- Compatible avec le noeud ROS cv_bridge
Les inconvénients :
- Si le noeud ROS évolue avec OpenCV, l'API peut être instable.
- OpenCV installée avec ROS, attention aux conflits avec d'autres applications non-ROS
- Pas de maîtrise sur les options d'installation d'OpenCV 3.2
- Par défaut, OpenCV 3.2 devient prioritaire, attention avec les anciens noeuds qui utilisaient OpenCV 2.4

Sur les machines de TP, on a installé ros-kinetic-opencv3. OpenCV 2.4.x est également installée depuis les dépôts Ubuntu.

Plus d'info ici : http://wiki.ros.org/opencv3

INSTALLATION OPENCV 3.2 (RECOMMANDE)

* Installation

sudo apt-get install ros-kinetic-opencv3

* Désinstallation

sudo apt-get purge ros-kinetic-opencv3

INSTALLATION OPENCV 2.4.13 (A EVITER)

* Installation
cd ~
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev libv4l-dev v4l-utils
wget https://github.com/opencv/opencv/archive/2.4.13.2.zip
mv 2.4.13.2.zip opencv-2.4.13.2.zip
unzip opencv-2.4.13.2.zip
cd opencv-2.4.13.2
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_OPENGL=ON -D WITH_OPENNI=ON -D WITH_OPENCL=OFF ..
make -j3
sudo make install

* Désinstallation

cd /home/turtlebot/opencv-2.4.13.2/build
sudo xargs rm < install_manifest.txt
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/local/share/OpenCV

* Re-installation

cd /home/turtlebot/opencv-2.4.13.2/build
sudo make install

INSTALLATION DU PACKAGE

* Le cas échéant, création d'un catkin workspace :

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

* Installation

- installation de ce depot git :
cd ~/catkin_ws/src
git config --global http.sslverify false
git clone https://gitlab.ensta.fr/battesti/tp_ros_ensta_u2is.git

- aller dans le répertoire tp_ros_ensta_u2is dans ~/catkin_ws/src :
cd ~/catkin_ws/src/tp_ros_ensta_u2is

- dans le répertoire scripts, rendre executable les scripts python :
chmod +x *.py

- compilation :
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

* Pour pouvoir utiliser les launch files et tester le package, il faut installer usb_cam (uvc-camera est obsolète avec ROS Kinetic)
cd ~/catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
catkin_make
source ~/catkin_ws/devel/setup.bash

UTILISATION DU PACKAGE

* Penser à le faire après avoir ouvert un nouveau terminal :
source ~/catkin_ws/devel/setup.bash
-> astuce : on peut mettre cette ligne à la fin de ~/.bashrc

* Exemple d'utilisation de la webcam dans 3 terminaux :
roscore
rosrun usb_cam usb_cam_node _pixel_format:="yuyv"
rosrun image_view image_view image:=/image_raw

Même chose avec un roslaunch
roslaunch tp_ros_ensta_u2is displayWebcam.launch

* cv_bridge + OpenCV + python
roslaunch tp_ros_ensta_u2is cam_circle_py.launch

* cv_bridge + OpenCV 3.2 + cpp
roslaunch tp_ros_ensta_u2is cam_invert_cpp.launch

* cv_bridge + sift OpenCV 2.4.13 or 3.2 but not 2.4.8 + python
roslaunch tp_ros_ensta_u2is cam_sift_py.launch

* cv_bridge + sift OpenCV 3.2 + python
roslaunch tp_ros_ensta_u2is cam_sift_cpp.launch

* Pure OpenCV sift and surf, version 2.4.13 or 3.2 but not 2.4.8 (peut être lancer sans ROS)
rosrun tp_ros_ensta_u2is sift_surf_direct.py
OU
roscd tp_ros_ensta_u2is/
cd scripts/
python sift_surf_direct.py