21
Projet de premi ` ere ann ´ ee Contrˆ ole d’une cam´ era Kinect par le middleware ROS Auteurs : Elian Cocchi Maxime Sibellas Tuteurs : ISIBOT Romuald Aufrere

Contrôle d'une caméra Kinect par le middleware ROS

  • Upload
    dothien

  • View
    223

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Contrôle d'une caméra Kinect par le middleware ROS

Projet de premiere annee

Controle d’une camera Kinect parle middleware ROS

Auteurs :

Elian Cocchi

Maxime Sibellas

Tuteurs :

ISIBOT

Romuald Aufrere

Page 2: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 3: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 4: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 5: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 6: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 7: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 8: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 9: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 10: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 11: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 12: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 13: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 14: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 15: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 16: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 17: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 18: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 19: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 20: Contrôle d'une caméra Kinect par le middleware ROS

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

Page 21: Contrôle d'une caméra Kinect par le middleware ROS

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