Tutoriels

Sommaire



Interface graphique utilisant OpenGL (Windows)


Installation
  • Aucune "installation" n'est nécessaire pour utiliser la bibliothèque OpenGL
  • Créer un projet Win32ConsoleApplication
  • Copier les fichiers glut.h, glut32.lib, et glut32.dll dans le répertoire du projet

Vous disposez d'une version de ces fichiers dans le projet d'exemple fourni ci après. Si vous préférez ne pas avoir à copier la librairie et la DLL à chaque fois dans chaque projet, vous pouvez ajouter :
  • glut32.lib dans C:\Program Files\Microsoft Visual Studio\VC98\Lib
  • glut32.dll dans C:\WINDOWS\system32

Simulation du travail d'un ressort
Le projet complet est disponible au format zip : Ressort.zip (fonctionnel en 2008 sous XP en Visual C++ 6). Exemple d'utilisation des fonctions: glutReshapeFunc, glutDisplayFunc, glutKeyboardFunc, glutIdleFunc, glutMainLoop.



Webcam OpenCV (Windows and Linux)


Traitement d'un flux vidéo webcam

Installation et compilation sous VisualC++ 6
  • Installer la librairie OpenCV disponible sur sourceforge.net
  • Créer un projet Win32ConsoleApplication
    Les chemins suivants, permettant de lier la bibliothèque, sont des chemins absolus considérant l'installation d'OpenCV dans le répertoire par défaut : C:\Program Files\OpenCV\
  • Dans le menu "Project", "Settings", "C/C++", "Category", "Preprocessor", ajouter les liens suivants dans "Additional include directories" :
- C:\Program Files\OpenCV\cv\include
- C:\Program Files\OpenCV\cvaux\include
- C:\Program Files\OpenCV\cxcore\include
- C:\Program Files\OpenCV\otherlibs\highgui
  • Dans le menu "Project", "Settings", "Link", "Category", "Input" :
- ajouter les librairies suivantes dans "Object/library modules" : cv.lib cvaux.lib cxcore.lib highgui.lib
- ajouter les liens suivants dans "Additional libray path" : C:\Program Files\OpenCV\lib
  • Modifier la variable d'environnement "PATH" de Windows en ajoutant : C:\Program Files\OpenCV\bin

Installation et compilation sous Linux
  • Télécharger et extraire l'archive contenant la librairie OpenCV disponible sur sourceforge.net
  • Dans le dossier OpenCV extrait, exécuter les commandes suivantes :
- ./configure --prefix=/opencv_library_path_install_path/OpenCV
- make install
  • Configurer la variable PATH :
- créer un fichier 'opencv.conf' contenant /usr/local/lib dans le dossier /etc/ld.so.conf.d/
- exécuter la commande 'ldconfig -v'
  • Vérifier l'installation à l'aide de la commande make check
  • Compiler un programme par la commande make après avoir créé un fichier makefile (voir tutoriel Makefile)

Exemples de programmes en Visual C++ 6
  • Affichage et traitement d'un flux vidéo provenant d'une webcam
    Le projet complet est disponible au format .zip : [Webcam.zip] (fonctionnel en 2008 sous XP et VisualC++ 6)
    Traitements appliqués sur la vidéo : conversion en niveau de gris et lissage gaussien 5x5
  • Création d'une application MFC avec OpenCV
    Le projet complet est disponible au format .zip : [MFC.zip] (fonctionnel en 2008 sous XP et Visual C++6). Pour créer une MFC sous VisualC++ 6, créer un projet MFCAppWizard(exe) puis sélectionner le type dialog-based application.
    Traitement appliqué sur l'image : filtrage Laplacien




Stéréo caméra Firewire Firefly (Linux + libdc1394)


Lecture des images stéréo avec libdc1394 et affichage avec OpenCV (Point Grey Firefly MV firewire). Exemple de code au format .tar.gz : [Firefly.tar.gz] (fonctionnel en 2012 sous Ubuntu 10.04, libdc 2.x et OpenCV 2.3.x).




Stéréo caméra Firewire Bumblebee (Linux + libdc1394)


Lecture des images stéréo avec libdc1394 et affichage avec OpenCV (Point Grey Bumblebee2 Color 1024x768 firewire). Exemple de code au format .tar.gz : [Bumblebee.tar.gz] (fonctionnel en 2012 sous Ubuntu 10.04, libdc 2.x et OpenCV 2.3.x).




Stéréo caméra Firewire Bumblebee (Ubuntu Precise + ROS Fuerte)


Lecture des images stereo avec libdc1394 et affichage avec ROS Viewer (Point Grey Bumblebee2 Color, FORMAT 7_3, COLOR_CODING RAW16, 1024 x 768, 20 fps, firewire). Exemple de code au format .tar.gz : [bumblebee2.tar.gz] (fonctionnel en 2012 sous Ubuntu 12.04, libdc 2.x et Ros Fuerte).

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu precise main" > /etc/apt/sources.list.d/ros-latest.list'
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install ros-fuerte-desktop-full
echo "source /opt/ros/fuerte/setup.bash" >> ~/.bashrc
. ~/.bashrc
mkdir ~/ros_workspace
echo "export ROS_PACKAGE_PATH=~/ros_workspace:\$ROS_PACKAGE_PATH" >> ~/.bashrc
echo "export ROS_WORKSPACE=~/ros_workspace" >> ~/.bashrc
. ~/.bashrc


git clone git://libdc1394.git.sourceforge.net/gitroot/libdc1394/libdc1394/
cd ~/libdc1394/libdc1394
autoreconf -i -s
./configure
sudo make
sudo make install
svn co http://cornell-ros-pkg.googlecode.com/svn/trunk/bumblebee2/camera_drivers_experimental/libdc1394v2/
cd libdc1394v2/
sudo make
sudo make install


export ROS_PACKAGE_PATH=~/libdc1394v2:$ROS_PACKAGE_PATH
export ROS_PACKAGE_PATH=~/bumblebee2:$ROS_PACKAGE_PATH


rosmake
roslaunch camera1394 startcamera.launch
rostopic list
rosrun image_view image_view image:/bumblebbe2/left/image_raw


Few possible errors to correct
  • Correct dc1394_vloopback.c error
    Replace linux/videodev.h with libv4l1-videodev.h
  • Correct Yaml_cpp error
    Modify CMAKELIST adding target_link_librairies(${PROJECT_NAME} yaml-cpp)
    Modify MANIFEST adding <depend package="common-deps"/> and <rosdep_name="yaml"-cpp/>
  • Correct Dev_camera1394.cpp error
    Modify dev_camera1394.cpp add #include <ros/ros.h>
  • Correct Set_data_size error
    Replace image.set_data_size() by .data.resize()
  • Correct Camera_Info_Manager error
    Add camera_info_manager:: and suppress the second parameter in the constructor




Makefile et CMake (Linux)


MAKE: Compilation avec lien vers différentes librairies. Exemple de fichier Makefile :
CC=g++ 
CFLAGS=-W -Wall -ansi -I/usr/local/include/open -I./IN104Libgraphics/
LDFLAGS=-L./IN104Libgraphics -lgraphics -lX11 -lm -ljpeg -L/usr/local/lib/ -lcv -lcvaux -lcxcore -lhighgui -lstdc++ -Wl,--rpath -Wl,./opencv/lib/%:%.c
EXEC=ProjetRobot

all:      $(EXEC)

ProjetRobot: ProjetRobot.o images.o flux.o 
     $(CC) -o ProjetRobot ProjetRobot.o images.o flux.o $(LDFLAGS)

images.o: ProjetRobot.cpp images.cpp 
     $(CC) -o images.o -c images.cpp $(CFLAGS)

flux.o: flux.cpp 
     $(CC) -o flux.o -c flux.cpp $(CFLAGS)

ProjetRobot.o: ProjetRobot.cpp images.h flux.h
     $(CC) -o ProjetRobot.o -c ProjetRobot.cpp $(CFLAGS)

clean:
     rm -f *.o


CMAKE: Compilation avec lien vers différentes librairies. Exemple de fichier CmakeLists.txt :
cmake_minimum_required (VERSION 2.6)
project (Tutorial)

find_package( PCL 1.4 REQUIRED )
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

find_package( OpenCV REQUIRED )
include_directories(${OPENCV_INCLUDE_DIRS})
link_directories(${OPENCV_LIBRARY_DIRS})
add_definitions(${OPENCV_DEFINITIONS})

include_directories ("/home/stephane/Desktop/Code/imutestTimeModification/IIT_DAQ")
set (EXTRA_LIBS ${EXTRA_LIBS} iitio)

add_executable( Tutorial main_stream.cpp )
target_link_libraries( Tutorial ${OpenCV_LIBS} ${PCL_LIBRARIES} ${EXTRA_LIBS})




Contrôle Labjack (Windows)


Pilotage d'un servomoteur à l'aide d'un boitier Labjack

Matériel
  • un boitier Labjack (modèle U3, 100€)
  • un servomoteur (Servo Hitec modèle HS-325HB, 15€)


  • installer les pilotes du boitier LabJack
  • brancher le boitier LabJack, et le servomoteur sur le port FIO0
  • créer un projet MFC Application Wizard
  • ajouter au projet le fichier: labjackUD.lib (fichiers écrits par Fabrice Le Bars)

Exemple de programme sous Visual C++6
Le projet complet est disponible au format .zip [Labjack.zip]

Paramètres pour la commande d'un servomoteur :
  • fréquence Labjack 4 Mhz
  • fréquence et période du PWM ~61 Hz et 16.39ms (avec 65536 échantillons par période)

Il faut fournir au servomoteur une impulsion suivie d’un retour a zéro. La largeur d’impulsion est convertie proportionnellement en angle comme indiqué sur le schéma :




Asservissement visuel avec une webcam (Windows)


Suivi d’un objet coloré à l’aide d’une webcam montée sur un servomoteur ou sur un pan & tilt

Matériel
  • un boitier Labjack (modèle U3, 100€)
  • une webcam (Marque Logitech modèle QuickCam Express, 25€)
  • un servomoteur ou un pan & tilt (Servo Hitec modèle HS-325HB, 15€ ou kit pan & tilt 60€)

Les deux configurations : servo simple (à gauche) et pan & tilt (à droite)


  • installer les pilotes du boitier LabJack et de la Webcam
  • brancher le boitier LabJack, la webcam et le servomoteur sur le port FIO0
  • créer un projet Win32ConsoleApplication et ajouter les liens vers OpenCV (voir ci-dessus)
  • ajouter au projet les fichiers: LabJackUD.h, U3Config.cpp, U3Config.h, labjackUD.lib (fichiers écrits par Fabrice Le Bars)
  • ajouter au projet le programme principal « main.cpp » incluant les fichiers: cv.h, cvaux.h, highgui.h, stdio.h, U3Config.h

Suivi d’un objet coloré à l’aide d’une webcam montée sur un servomoteur [Demo.avi]
Le projet complet est disponible au format .zip : [Servo.zip] [Pan&Tilt.zip]. Sélectionner un objet de couleur à la souris dans l'image et l'algorithme de « tracking » va piloter le servo-moteur pour replacer l'objet au centre de l'image



Débruitage et amélioration des images sous-marines (Matlab)


Méthode de prétraitement automatique pour le débruitage des images sous-marines
Archive contenant l’ensemble des programmes permettant de prétraiter les images sous-marines : [UnderwaterImagePrefilter.zip]. Cinq filtres sont disponibles mais seulement un programme est directement « exécutable ».

  • « prefilter_demo.m »
- paramètre: le nom de l'image à prétraiter
- fonction: affiche sur une même figure l'image d'entrée et l'image filtrée
  • « prefilter_standard.m »
- paramètre: une image couleur convertie en double avec des valeur comprises entre 0 et 255
- fonction: prétraitement standard (correction de l’éclairage et des couleurs, rehaussement de contraste et débruitage)
  • « prefilter_with moire.m »
- paramètre: une image couleur convertie en double avec des valeur comprises entre 0 et 255
- fonction: prétraitement standard avec suppression de l’effet de moiré
  • « prefilter_with_block.m »
- paramètre: une image couleur convertie en double avec des valeur comprises entre 0 et 255
- fonction: prétraitement standard avec suppression de l’effet de block du à la compression
  • « prefilter_text_moire.m »
- paramètre: une image couleur convertie en double avec des valeur comprises entre 0 et 255
- fonction: prétraitement standard avec suppression de l’effet de moiré et suppression du texte en sur-impression

Quelques résultats de ces programmes sont affichés sur la figure suivante :

Les cinq premières images sont prétraités avec le programme « prefilter_standard.m »
et les trois dernières images avec par le programme « prefilter_with_moire.m »


Détection automatique d'objets manufacturés dans des séquences d'images sous-marines
Archive contenant l’ensemble des programmes [AutomaticUnderwaterObjectDetection.zip]. Deux programmes sont directement « exécutables » :

  • « MaDetectionImageTest.m »
- paramètre: aucun
- fonction: affiche sur une même figure l’image prétraitée, les contours pertinents et les formes particulières détectées
  • « MaDetectionVideoTest.m »
- paramètre: aucun
- fonction: ré-enrigistre une vidéo prétraitée avec les contours pertinents et les formes particulières détectées


Certains résultats présentés sur cette page ont été obtenues à partir de l'utilisation de données propriété de l'Etat Français qui ont été fournies par le GESMA (Groupe d'Etudes Sous-Marines de l'Atlantique) dans le cadre du projet TOPVISION coordonné par Thales Underwater Systems SAS. Ce projet est rattaché au programme Techno-Vision lancé par le Ministère de la Recherche français et le Ministère de la Défense français.

Copyright © 2008, Stéphane Bazeille.
Ces travaux soutenus par l'ENSTA Bretagne (2005-2008) sont sous licence Gnu Public Licence (GPL)



Construction d'une webcam étanche pour robots sous-marins


Méthode simple et rapide permettant une étanchéité jusqu'à au moins 10 mètres

Matériel
  • Webcam (Marque Logitech modèle QuickCamPro 9000, 80€)
  • Tube de plomberie (Raccord PVC: Té pied de biche FF diamètre 50cm, 3.80€)
  • 2 bouchons étanches (Bouchon fileté PVC M diamètre 50cm, 1.34€)
  • Connecteur étanche (Marque Radiospares: EMBASE EN3/4CTS FEM, FICHE EN3/4CTS 4 MALE, 10,80€ et 8,37€)
  • Vitre en PVC transparente
  • Tube de colle PVC
  • Tube de colle liquide
  • Tube de Mastic

Marche à suivre
  • Découpage du tube
    Avec une scie, couper la partie centrale sortant du tube précisément à la hauteur de la réduction (de manière à maximiser la surface de collage). La découpe devant être parfaitement verticale, garder de la marge en sciant un peu plus haut et finir ensuite à la lime ou au papier de verre pour obtenir une surface plane où l'on viendra coller la vitre.
  • Perçage d'un bouchon
    Percer un des deux bouchons pour pouvoir insérer le connecteur étanche (diamètre du trou 15,5cm à 16cm). La matière étant très fragile commencer avec des petits forets et augmenter la taille progressivement. Il est possible de terminer à la lime. Attention à ne pas abîmer le bouchon ni le joint lors de cette étape.
  • Mise en place de la webcam
    Couper le câble USB à quelques centimètres de la webcam. Fixez la webcam dans le tube. Avec de la glue par exemple.
  • Raccord de la webcam sur le connecteur étanche intérieur
    Monter le connecteur sur le bouchon. Dénuder les fils de la webcam et sonder les à la partie intérieure du connecteur étanche. Ajouter de la colle liquide sur les soudures pour éviter les mouvements des fils.
  • Raccord du connecteur extérieur sur le câble USB
    Insérer le capuchon puis la vis de serrage. Dénuder légèrement et souder les fils du câble USB sur la partie extérieure du connecteur étanche en respectant la correspondance des fils. Replacer la vis de serrage et le capuchon du connecteur étanche sur les fils. Remplir le capuchon de colle liquide.
  • Collage des deux bouchons
    Poncer l'intérieur du tube et les bouchons à l'endroit du collage. Essuyer avec un chiffon. Etaler la colle avec un pinceau. Collez les bouchons au tube avec la colle PVC.
  • Collage de la vitre
    Poncer et essuyer la surface à coller. Étaler la colle. Enlever le film de protection sur la face inférieure de la vitre puis collez. Garder le film de protection sur la face extérieure.
  • Finitions
    Ajouter du mastic aux endroits de collage pour parfaire l'étanchéité. Ôter le film de protection sur la vitre lors de sa première utilisation. Pour ne pas rayer la vitre protéger la lors du rangement ou de la manipulation de la webcam étanche.

(1) Le tube PVC original. (2) Un bouchon fileté original (en 2 parties). (3) Les deux bouchons percé et non percé.
(4) Le tube PVC coupé. (5) La webcam. (6) Le bouchon percé avec son connecteur étanche.


Webcam USB étanche terminée




Diapositives personnalisées avec la classe LaTeX beamer


L’archive BeamerEnsieta.zip contient les trois fichiers nécessaires à la compilation :
  • le fichier source « presentationbeamer.tex »
  • le fichier style « beamerthemeEnsieta.sty »
  • le fichier image « LogoEnsieta.pdf »
A noter que la compilation fonctionne sous TeXnicCenter avec le compilateur PdfLaTeX.

Aperçu de la présentation



Formules de résolution des Rubik Cube 2x2 et 3x3


La résolution du Rubik 2x2 est un cas simplifié du cube 3x3 elle peut donc être résolu de la même manière en utilisant uniquement les formules permettant de placer et orienter les coins.

Notations
  • U = Tourner la face supérieure d’un quart de tour dans le sens des aiguilles d’une montre
  • D = Tourner la face inférieure d’un quart de tour dans le sens des aiguilles d’une montre
  • L = Tourner la face gauche d’un quart de tour dans le sens des aiguilles d’une montre
  • R = Tourner la face droite d’un quart de tour dans le sens des aiguilles d’une montre
  • F = Tourner la face avant d’un quart de tour dans le sens des aiguilles d’une montre
  • B = Tourner la face arrière d’un quart de tour dans le sens des aiguilles d’une montre
  • « » signifie dans le sens inverse des aiguilles d’une montre
  • « 2 » signifie un demi tour au lieu d’un quart de tour

Première partie
  • Construire la croix supérieure de la face blanche
  • Placer trois des coins de cette face
  • Faire monter par le coin manquant les trois centres de la deuxième couronne n’étant pas sous le celui-ci
  • Terminer la première couronne en plaçant le coin manquant
  • Placer le milieu à monter sous le centre de couleur opposée puis appliquer la formule suivante :
D L D' L' D' F' D
  • Terminer la deuxième couronne en plaçant le centre manquant
  • La première partie est terminée, retourner le cube

Deuxième partie
  • Faites la croix inférieure
  • Dans le cas où il y a déjà une ligne, la placer perpendiculairement à la face avant puis appliquer la formule suivante :
F R U R’ U’ F’
  • Dans le cas ou un triangle est formé, placer le à l’arrière du coté gauche et appliquer la formule suivante :
F U R U’ R’ F’
  • Orienter la croix
  • Placer un des centres devant vous de manière à ce qu’il corresponde à la face avant. Celui-ci ne bougera pas.
  • Appliquer une des formules de permutation suivantes. La première effectue une permutation dans le sens des aiguilles d’une montre et l’autre le sens inverse :
R U2 R’ U’ R U’ R’
L’ U2 L U L’ U L
  • Placer les coins par permutation encore, le coin face à vous à gauche ne bouge pas.
L’ U R U’ L U R’ U’
R U’ L’ U R’ U’ L U
  • Orienter les coins encore par la même méthode, les coins à gauche ne bouge pas.
R U2 R’ U’ R U’ R’ L’ U2 L U L’ U L
  • La deuxième partie est terminée, votre cube est reconstruit.