Projet de premiere annee
Controle d’une camera Kinect parle middleware ROS
Auteurs :
Elian Cocchi
Maxime Sibellas
Tuteurs :
ISIBOT
Romuald Aufrere
Table des matieres
1 Le middleware ROS 3
1.1 Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Configuration d’un environnement ROS . . . . . . . . . . . . . . . . 3
1.3 Outils importants . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.1 OpenNI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.2 Rviz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2 La camera Kinect 8
2.1 Presentation generale . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Capacites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Fonctionnalites de base . . . . . . . . . . . . . . . . . . . . . . . . . 9
3 Interaction Kinect-ROS 11
3.1 Etude de l’interaction . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Recuperation de donnees . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2.1 Recuperation des donnees via une interface : Rviz . . . . . . 15
3.2.2 Analyse du transfert d’information . . . . . . . . . . . . . . 17
3.2.3 Interpretation des resultats . . . . . . . . . . . . . . . . . . . 17
1
Introduction
Le club de robotique de l’ISIMA utilise la technologie de la camera Kinect
dans leur projet de creation de robot. Cette camera permet une interaction entre
le robot et son environnement.
Dans le cadre de ce projet, les membres de ce club nous ont demande d’etudier
les possibilites d’interactions entre une Kinect et le middleware ROS (Robot Ope-
rating System) et de realiser un demonstrateur permettant l’acquisition d’un nuage
de points devant aider a la localisation de leur robot. Pour realiser cela, nous avions
a disposition une camera Kinect V1 mise a disposition par l’etablissement ainsi
que le site officiel du middleware ROS.
Notre but pour ce projet etait de nous familiariser avec le middleware ROS puis
d’etudier comment la camera interagit avec celui ci et enfin de trouver un moyen
de recuperer des donnees sous forme de nuage de points.
Pour cela nous nous sommes tout d’abord renseigne sur ROS, puis sur les compo-
sants de la Kinect et nous avons enfin utiliser l’interaction entre la camera et le
middleware afin d’obtenir des donnees.
2
Chapitre 1
Le middleware ROS
1.1 Presentation
”Robot Operating System” ou ROS est un middleware (logiciel mediateur)
open source originellement developpe par la societe Willow Garage en 2007. Sa
derniere version en date est ROS Jade qui est sortie en avril 2015, mais c’est sur
la version precedente, ROS Indigo, que nous avons effectue notre projet.
ROS est compatible sur un bon nombre de robots sur le marche comme Qbo ou
Robotino.Comme tout logiciel mediateur, il permet des echanges d’informations
entre les divers composants du robot et les applications. Il permet entre autre
la detection de mouvements et d’obstacles grace a une camera, le controle des
mouvements du robot etc.
Il est possible d’interagir avec ROS via des programmes en C++ ou Python.
1.2 Configuration d’un environnement ROS
Avant de commencer, l’installation de ROS se fait via les commandes suivantes.
”Distro” correspondant au nom de la version voulue.
$ sudo apt-get install ros-<distro>-desktop-full
3
Controle d’une camera Kinect par le middleware ROS ISIMA
Creation de l’environnement
Un environnement ROS se cree en creant le repertoire catkin ws (pour cat-
kin workspace) puis le sous repertoire src qui contiendra les sources. Il suffit en-
suite d’initialiser l’espace de travail dans le sous-repertoire src avec la fonction
catkin intit workspace.
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
Pour compiler l’espace de travail, il suffit de lancer la commande catkin make
dans le repertoire catkin ws.
Creation de package
Une fois notre environnement cree, nous pouvons y rajouter des packages de
la facon suivante. Tout d’abord en se placant dans le sous-repertoire src puis en
executant la commande catkin create pkg avec pour parametres le nom du package
et les dependances souhaitees.
$ cd ~/catkin_ws/src
# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
Il faut ensuite compiler l’espace de travail comme precedemment. Ensuite, on
ajoute le nouveau package a l’environnement de la facon suivante.
$ . ~/catkin_ws/devel/setup.bash
Les dependances d’un package peuvent etre listees grace a l’outil rospack de la
facon suivante :
$ rospack depends1 <package_name>
Pour compiler un package, il faut utiliser la commande catkin make dans le
repertoire parent.
Cocchi - Sibellas Page 4
Controle d’une camera Kinect par le middleware ROS ISIMA
Les nodes
Un node est un executable contenu dans un package qui utilise ROS pour com-
muniquer avec d’autres nodes. Pour utiliser les nodes, il faut avoir lancer l’environ-
nement d’execution de ROS avec la commande roscore. Roscore est une collection
de nodes et de programmes requis par un systeme utilisant ROS. Autrement dit,
il faut que roscore soit lance pour que les nodes puissent interagir entre eux.
Une fois roscore lance, nous pouvons lister les nodes qui tournent avec la com-
mande rosnode list. A noter : roscore lance automatique le node rosout qui permet
d’arreter proprement roscore.
Pour lancer un node, on utilise la commande rosrun de la maniere suivante.
$ rosrun <package_name> <node_name>
Les topics
Un topic permet aux nodes de communiquer entre eux en recuperant les mes-
sages produits par un node et en les renvoyant vers le node correspondant. Pour
avoir un apercu des topics et des echanges entre les nodes, on utilise le package
rqt qui contient le node rqt graph qui va nous permettre de visualiser les topics et
les interactions entre nodes.
$ rosrun rqt_graph rqt_graph
Figure 1.1 – Visualisation des topics grace a rqt graph
On voit sur cette image que le node teleop turtle envoie des informations au
node turtlesim via le topic command velocity.
Cocchi - Sibellas Page 5
Controle d’une camera Kinect par le middleware ROS ISIMA
Il existe un autre node permettant de visualiser les topics : rostopic. Ce node
nous permet de :
lister les topics en cours avec la commande
$ rostopic list
recuperer les donnees envoyees pas un topic avec la commande
$ rostopic echo [topic]
recuperer le type du topic en question
$ rostopic type [topic]
envoyer des donnees a un node
$ rostopic pub [node] [info]
determiner la frequence auquel les informations sont envoyees
$ rostopic hz [topic]
Les parametres serveur
Lorsque l’on lance roscore, des parametres serveur sont initialises. Pour les
modifier il existe le node rosparam a utiliser avec les complements set et get. Pour
les reinitialiser, il suffit d’utiliser call clear.
$ rosparam set [param_name]
$ rosparam get [param_name]
$ rosparam call clear
Les scripts .launch
Les fichiers .launch permettent de lancer plusieurs nodes simultanement et
d’une maniere predefinie. Ils sont places dans un sous dossier ”launch” dans le
repertoire du package correspondant. Pour executer un tel fichier, on utilise la
commande roslaunch.
$ roslaunch [file_name]
Cocchi - Sibellas Page 6
Controle d’une camera Kinect par le middleware ROS ISIMA
1.3 Outils importants
1.3.1 OpenNI
La gestion de la camera Kinect V1 et de ses fonctionnalites est assuree par le
package openni launch qui contient des nodes permettant d’utiliser des dispositifs
OpenNi (Open Natural Interaction).
Ce package a ete cree pour la version ROS Fuerte et est donc obsolete. Cela
s’explique entre autre chose par la sortie des cameras Kinect V2. Cependant il est
toujours disponible via les depots unix avec la commande suivante.
$ apt-get install ros-fuerte-openni-camera ros-fuerte-openni-launch
Ou bien directement via le depot github des developpeurs a l’adresse github.com/ros−drivers/openni launch .
Le package se lance grace a roslaunch comme suit.
$ roslaunch openni_launch openni.launch
1.3.2 Rviz
Rviz est un outil de visualisation 3D pour ROS permettant de recuperer des
donnees via un node ROS. Il est possible d’interagir avec via des programmes
en C++/Python pour simuler des courbes, des surfaces et des volumes. Nous
l’utiliserons plus tard pour l’exploitation des donnees de la Kinect. Il se lance avec
la commande suivante.
$ rosrun rviz rviz
Cocchi - Sibellas Page 7
Chapitre 2
La camera Kinect
2.1 Presentation generale
La Kinect (mot-valise compose par kinetic et connect) est un peripherique sorti
en novembre 2010 pour la console Xbox 360 de Microsoft, promouvant une nou-
velle maniere de jouer. Il est equipe de plusieurs cameras ainsi que d’une source
de lumiere infrarouge capables d’evaluer la distance au capteur ainsi que de logi-
ciels de reconnaissance de personnes, permettant au joueur de jouer sans manette,
seulement en effectuant des gestes devant la camera de Kinect.
Des pilotes sont mis a disposition en tant que logiciel libre par un magasin
d’electronique ayant organise un concours de developpement dans ce but. Ces pi-
lotes sont peu apres portes sur le Robot Operating System ROS.
Suite a son succes, une version Kinect pour Windows sort en fevrier 2012, com-
patible avec les ordinateurs Windows et fournie avec un kit developpeur, mettant
la motion capture a portee de tout le monde.
Une toute nouvelle generation de Kinect sort en novembre 2013 avec la nouvelle
console de salon de Microsoft : la Xbox One. Nous ne nous interesserons cependant
ici qu’a celle sortie en 2010, la version Kinect v1.
8
Controle d’une camera Kinect par le middleware ROS ISIMA
2.2 Capacites
La Kinect est equipe de plusieurs capteurs detectant la couleur et la profondeur
des points filmes, permettant notamment de detecter des joueurs dans une piece,
ainsi que des visages entres dans une base de donnees. Le capteur est motorise
pour un champ de vision elargi et une capacite a suivre les mouvements d’objets
detectes. Le capteur de profondeur rend aussi possible l’utilisation de Kinect dans
l’obscurite.
La profondeur est mesuree par un emetteur/recepteur infrarouge emettant un
grand nombre de rayons infrarouges formant une sorte de grille et calculant pour
chaque rayon le temps qu’il lui faut pour parcourir l’aller-retour entre le capteur
et l’objet, permettant le calcul d’une distance.
Les capteurs de profondeur peuvent mesurer des profondeurs d’environ un
metre a quatre metres pour la premiere version disponible avec la Xbox et descen-
dant jusqu’a un peu moins de cinquante centimetres pour la version pour Windows
(nous ne disposions ici que de la version pour Xbox).
A cela s’ajoute un micro permettant la reconnaissance vocale dans une dizaine
de langues, accentuant le cote controle a distance sans intermediaire et donnant
lieu a un chat vocal dans certains jeux compatibles.
Le tout est monte sur un pied lui aussi motorise, de maniere a agrandir encore
le champ de vision, atteignant 57 degres a l’horizontale et 43 degres a la verticale.
2.3 Fonctionnalites de base
Les pilotes de base de Kinect permettent d’acceder a plusieurs prises de vue. On
a tout d’abord une simple image telle que celle qu’on aurait a travers un appareil
photo ou une camera classique, puis l’image couplee aux mesures infrarouges, qui
met en evidence la grille de lasers infrarouges grace a laquelle Kinect mesure les
profondeurs. Enfin, on a la � carte de profondeur � qui represente la profondeur
des points de l’image en differentes couleurs, par un degrade.
Cocchi - Sibellas Page 9
Controle d’une camera Kinect par le middleware ROS ISIMA
Ces images sont acquises sur ordinateur grace au package unix libfreenect.
Figure 2.1 – comparaison cote a cote de l’image standard et sa carte de profondeur
Figure 2.2 – Vue de la grille de la meme image
Cocchi - Sibellas Page 10
Chapitre 3
Interaction Kinect-ROS
3.1 Etude de l’interaction
Nous avons vu que les nodes interagissent entre eux grace aux topics. Interessons-
nous aux echanges entre le node openni launch et la camera Kinect. Pour cela nous
allons reutiliser rqt graph comme nous l’avons vu precedemment.
Le graphique nous permet de visualiser les topics qui interagissent entre la
camera et les nodes du package OpenNI.
/tf correspond au peripherique qu’est la camera. Les nodes camera base link, ca-
mera base link1, camera base link2 et camera base link3 interrogent la camera,
qui repond en envoyant des informations aux nodes traitant les informations rela-
tives aux images capturees ici le node concerne est /camera/camera nodelet manager,
le node charge de la gestion des communications avec les autres nodes. Ce gra-
phique est genere dans un cas ou on n’interroge aucun node, le node manager ne
transmet donc aucune information aux autres nodes du package.
11
Controle d’une camera Kinect par le middleware ROS ISIMA
Figure 3.1 – Topics entre Kinect et ROS via rqt graph
Cocchi - Sibellas Page 12
Controle d’une camera Kinect par le middleware ROS ISIMA
3.2 Recuperation de donnees
Maintenant que openni launch est lance, nous pouvons utiliser ROS pour trai-
ter et recevoir les informations capturees par la Kinect. Autrement dit, nous pou-
vons afficher ce que voit la Kinect, en demandant au node correspondant de trai-
ter les informations fournies par la camera. S’il on veut afficher la camera mono
chrome, on appellera le node /camera/rgb/image mono via la commande suivante.
$ rosrun image_view image_view image:=/camera/rgb/image_mono
Il en va de meme pour la camera couleur avec le node /camera/rgb/image color.
Nous pouvons aussi interroger le node traitant la difference de profondeur : /ca-
mera/depth/disparity avec la commande suivante.
$ rosrun image_view disparity_view image:=/camera/depth/disparity
Figure 3.2 – Sortie couleur et mono chrome
Figure 3.3 – Sortie du traitement de la profondeur par ROS
Cocchi - Sibellas Page 13
Controle d’une camera Kinect par le middleware ROS ISIMA
Pour acceder a l’acquisition d’un nuage de point avec profondeur, il nous faut
tout d’abord definir ce nuage de point construit a partir des donnees RGB de la
Kinect. Pour cela, on modifie la configuration des drivers avec rqt reconfigure en
le lancant avec la commande suivante.
$ rosrun rqt_reconfigure rqt_reconfigure
Dans le menu deroulant, /camera/driver, il faut cocher la case depth registration.
On peut alors interroger le node correspondant : /camera/depth registered/disparity.
Figure 3.4 – Reconfiguration
Le graphique d’interactions correspondant est celui de la figure suivante.
Cocchi - Sibellas Page 14
Controle d’une camera Kinect par le middleware ROS ISIMA
Figure 3.5 – Interaction Kinect - ROS avec affichage des sorties videos
On retrouve les topics questionnant la camera (/tf) et les informations retour-
nant au nodelet manager. Celui-ci transfert les informations aux nodelets, ceux-ci
les traitent puis les renvoient au manager qui lui les transmet aux nodelets qui
renvoient les informations sur l’ecran (via les processus image view).
3.2.1 Recuperation des donnees via une interface : Rviz
Rviz nous permet d’exploiter le nuage de point enregistre par le package OpenNI
grace aux informations collectees par la Kinect. Lancons rviz et regardons comment
exploiter le nuage de points de la Kinect.
Une fois rviz ouvert, il faut definir l’image recuperee par rviz. On ajoute un
Cocchi - Sibellas Page 15
Controle d’une camera Kinect par le middleware ROS ISIMA
nuage de point de type PointCloud2 et on definit le topic qu’il recupere sur
/camera/depth registered/points. Ce topic correspond a celui que nous avons
cree lorsque nous avons reconfigure les nodes avec rqt reconfigure. On choisit les
couleurs RGB8.
On recupere alors l’image de la Kinect sous forme de nuage de points.
Figure 3.6 – Affiche du nuage de point par Rviz
Cocchi - Sibellas Page 16
Controle d’une camera Kinect par le middleware ROS ISIMA
3.2.2 Analyse du transfert d’information
Pour analyser le transfert d’information, on etudie a la fois le topic du node
/camera/depth registered/points qui cree le nuage de points et celui du node
/camera/depth registered/disparity qui s’occupe du traitement de la profondeur.
Le nuage de points
rostopic echo renvoi tout les points enregistres par le node, avec une valeur nulle
dans le cas ou le point ne peut pas etre caracterise (zone d’ombre etc).
rostopic type renvoi sensor msgs/PointCloud2. Les informations envoyees sont
bien traitees comme faisant partie d’un nuage de points provenant du cap-
teur de la Kinect.
rostopic hz nous indique que le taux moyenne du transfert d’informations est de
30.
Le traitement de la profondeur
rostopic echo renvoi la valeur de la profondeur de chaque point, avec une valeur
nulle dans le cas d’un point non caracterise (zone d’ombre etc).
rostopic type renvoi stereo msgs/Disparity. On voit que les informations sont
pas du meme type que celles du nuage de points et ne sont pas collectee par
le meme capteur.
rostopic hz nous indique que le taux moyen du transfert d’informations est de
30, tout comme celui du nuage de points.
3.2.3 Interpretation des resultats
On voit sur le nuage de points resultant qu’il y a de grandes zones d’ombre
qui deteriorent l’image. Il s’agit simplement de zone que l’onde propagee par le
capteur de la Kinect ne peut pas atteindre, soit parce qu’elles se trouvent derriere
une surface, que l’obstacle est fait d’une matiere qui ne renvoie pas l’onde ou bien
parce qu’elles sont trop proches ou trop lointaines.
Cocchi - Sibellas Page 17
Controle d’une camera Kinect par le middleware ROS ISIMA
Les resultats obtenus sont neanmoins acceptables et utilisables. On effet, il suffit
de modifier la coloration du nuage de points et preferer une coloration par axe pour
se rendre compte que l’on peut utiliser ce resultat pour un systeme de detection
d’obstacles. En effet, grace a cette coloration, nous pouvons distinguer les sur-
faces : ce sont les etendues de points situes sur le meme plan. Cela permettrai de
programmer le robot pour contourner ces obstacles.
Figure 3.7 – Coloration selon l’axe des X par Rviz
Cocchi - Sibellas Page 18
Conclusion
L’etude de la camera Kinect et du middleware ROS nous a permis d’aboutir
a une methode de recuperation de donnees exploitables sous forme de nuage de
points. Cette methode peut etre approfondie et utilisee pour elaborer un algorithme
permettant a un robot d’eviter des obstacles.
Ce premier projet nous a permis d’apprehender le domaine de la robotique qui
est un domaine dans lequel on prend reellement conscience du role de l’informatique
dans les technologies embarquees. Cela nous a permis de preciser nos choix pour
la suite de nos etudes ainsi que nos domaines de carrieres.
Ces nouvelles connaissances nous seront utiles pour apprehender des projets
pour lesquels nous aurons besoin de reflechir sur des interfaces innovantes.
19
Bibliographie
[http ://wiki.ros.org/] Wiki concernant le middleware ROS.
[http ://fr.wikipedia.org/wiki/Robot Operating System] Page Wikipedia sur
ROS
[http ://en.wikipedia.org/wiki/OpenNI] Page Wikipedia sur l’Open Natural In-
teraction
20