Rapport Pfe Fadil
Rapport Pfe Fadil
Rapport Pfe Fadil
Balyo
Paris 2017
Remerciements
Je remercie mon tuteur Vincent Rebaud pour son aide. Sa patience et ses connais-
sances en vision robotique et en algorithmique générale m’ont permis de beaucoup
progresser durant mon stage à Balyo.
Je tiens à remercier également mon professeur encadrant Benoit Zerr pour son aide
tout au long de mon cursus à l’ENSTA Bretagne. Son engagement et son attrait pour
l’aspect pratique ont fait que ses cours aient été parmi mes favoris à l’ENSTA.
Enfin je tiens à remercier tous l’ensemble de l’entreprise Balyo pour leur accueil. En
particulier l’équipe Recherche et Développement avec laquelle j’ai passé le plus de temps
et dont les membres m’ont non seulement proposé leur aide à plusieurs reprises mais
qui m’ont accueilli dans les activités extérieures au travail. Cela a rendu ma période de
stage loin de ma famille et mes amis plus agréable.
Abstract
This paper is a report of the work done during my internship at Balyo. The goal
was to develop algorithms for the processing of data outputed by a 3D camera.
The main algorithms that I have worked on are the auto-calibration algorithm
and the obstacle detection algorithm. I have mainly coded in c++ on an ubuntu Ope-
rating system. I have also used in my projects the Point Cloud Library (PCL) along
with the Robot Operating System (ROS). These two libraries enabled me to make fast
prototypes and helped a lot by providing already existing functions ready to use thus
letting me focus on the problem at hand by lowering the coding burden.
My mission regarding the obstacle detection algorithm was to find the right set
of parameters that lowers false positive detection without letting through any obstacle.
If I managed to provide a set of parameters that filtered the majority of noise and false
detection, some types of errors could not be filtred.
On the other hand, I wrote the auto-calibration algorithm from scratch with the
help of my tutor. Testing on fork mounted cameras showed positive, providing correct
coordinates of the 3D camera in the truck’s coordinate system.
Résumé
Ce rapport présente le travail que j’ai réalisé pendant mon stage à Balyo. L’objectif
était de développé des algorithmes de traitement de données d’une caméra 3D.
Les algorithmes principaux sur lesquelles j’ai travaillé sont l’algorithme d’auto-
calibration et celui de détection d’obstacle. J’ai principalement écrit mon code en c++
sur une machine ayant Ubuntu comme système d’exploitation. J’ai également utilisé la
librairie Point Cloud Library (PCL) et l’intergiciel Robot Operating System (ROS). Ils
m’ont permis de créer des prototypes de manière rapide et m’ont également aidé en pro-
curant des fonctions utiles. Cela m’a permis de plus me concentrer sur la problématique
en allégeant la charge de code à produire.
La vision en robotique est un sujet majeur et qui connais récemment des avancées
importantes. En effet grâce aux progrès à la fois en puissance de calculs des systèmes
embarqués mais aussi à ceux réalisés au niveau des capteurs et de l’intelligence artifi-
cielle, de plus en plus de robots bénéficient de la vision.
Les applications sont nombreuses dans le domaine de la santé de la sécurité et du
transport. Le présent travail décrit une application de cette technologie dans la robo-
tisation du transport de marchandise dans les entrepôts. Dans la suite de ce rapport
seront détaillé la problématique posé, les solutions ainsi que les pistes d’améliorations
suggérées.
Table des matières
1 Présentation de Balyo 3
1.1 Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Locaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Services et Produits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Chariots 7
2.1 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Base roulante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Capteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Laser de navigation . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.2 Laser rideau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.3 Laser de sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.4 Caméra 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.5 Télémètre laser . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Interfaces Homme Machine . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Camera 3D 13
3.1 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.1 Caméra Time Of Flight . . . . . . . . . . . . . . . . . . . . . . . 13
3.1.2 Caméra stéréo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Problèmes rencontrés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.1 Points fantôme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3.2 Chevauchement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3.3 Erreur due a des textures singulière . . . . . . . . . . . . . . . . 16
3.3.4 Surchauffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3.5 Soleil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3.6 Calibration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4 ROS et PCL 19
4.1 ROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.2 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1
4.2 PCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.2 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5 Outils de développement 22
5.1 GIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.2 RedMine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6 Algorithme autocalibration 24
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.2 Filtre Pass-Through . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.3 Segmentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.4 Quaternion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.5 Proportionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.6 Calcul de distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.6.1 Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Bibliographie 35
2
Chapitre 1
Présentation de Balyo
1.1 Historique
Balyo a été créée en 2005 par Raul Bravo et Thomas Duval avec pour mission
augmenter la compétitivité de ses clients en automatisant leurs flux intra-logistique.
Balyo fait cela principalement en robotisant de chariots de manutentions. En effet
le nom Balyo vient de la mythologie grec Balios, un cheval d’Achille, en référence
au transport de marchandise. La zone de test des chariots également est appelé le
”Paddock” pour prolonger cette métaphore.
Ce qui différencie Balyo de ses concurrents c’est qu’elle prend des chariots déjà
existant et les munis d’une panoplie de robotisation au lieu de construire depuis zéro
un chariot autonome. La panoplie de robotisation est composé d’une MOVEBOX (or-
dinateur) et de plusieurs capteurs (Lasers, caméras, lecteurs code bar). Grâce à cette
approche Balyo a pu conclure un partenariat avec Linde en Europe, l’un des plus grands
producteurs de chariots de manutentions et Hyster-Yale aux États-Unis d’Amérique.
En plus de bénéficier de la capacité et qualité de production des chariots Linde et
Hyster-Yale, Balyo profite par la même occasion des agences et maintenance de ses
grandes sociétés présentes partout dans le monde, chose qui facilite l’implantation de
3
Balyo dans de nouveaux pays.
L’année 2017 est probablement l’année la plus importante de Balyo car elle fit son
introduction en bourse en Juin 2017 et réussi à lever plus de 40 millions d’euros.[1]
1.2 Structure
Même après plus de dix ans d’existence, Balyo reste une entreprise qui évolue
continuellement et rapidement, préservant sa culture de start-up. Un organigramme
représentant toute l’entreprise n’est pas disponible. Ci-dessous un diagramme regrou-
pant les différents pôles du département ingénierie. Sous tutelle de M. Vincent Rebaud
j’étais rattaché au pôle Robot Software, chargé du développement de nouvelles fonc-
tionnalités du chariot. Ces nouvelles fonctionnalités sont testées par le pôle validation
avant d’être mises à disposition de l’équipe installation. Enfin une équipe d’ingénieurs
installation est dispatchée chez le client pour pouvoir définir les réglages spécifiques des
chariots pour un fonctionnement optimal dans le site du client.
1.3 Locaux
Balyo est installée à Moissy-Cramayel, en périphérie parisienne. Le choix s’est porté
sur des bureaux relativement loin de la capitale pour des raisons d’espace. En effet pour
pouvoir modifier et tester les chariots, un espace considérable est nécessaire.
Dans ces locaux actuelle Balyo possède plusieurs zones de test adaptées à chaque
mission, chariot et site clients. Les ingénieurs de recherche et développement ainsi que
ceux de validations bénéficient ainsi d’une proximité des robots qui leur économise du
4
temps et permet d’être également proche de l’équipe production qui peut intervenir
rapidement en cas de problème mécanique sur un chariot.
5
Figure 1.4 – Produits Balyo
6
Chapitre 2
Chariots
2.1 Types
Il existe plusieurs chariots développés par Balyo, de taille et de capacité différentes
mais ils peuvent être regroupés en deux catégories. Les chariots avec et sans fourche.
Les chariots sans fourche ont pour but de déplacer, à la manière d’un train des cadis à
roues transportant les biens du client à l’intérieur de l’usine (outils, matière première).
Les chariots à fourche quant à eux déplacent des palettes dans des entrepôts.
7
électrique, ils disposent donc de batteries (plomb-acide) plus ou moins grande et lourde,
allant jusqu’à 1 500Kg pour le chariot Linde K ci-dessous.
2.3 Capteurs
Pour pouvoir évoluer dans leur environnement en toute sécurité, les chariots ont
besoin de plusieurs données sur l’espace qui les entoure et leurs propres coordonnées
(position, vitesse, hauteur des fourches...). Ces informations sont donc fournies par une
panoplie de capteurs que Balyo installe en production.
8
Figure 2.3 – Cartographie dans l’éditeur de circuit
Cependant ce capteur pose un problème. En effet après la détection d’un objet par
le laser rideau, le chariot s’arrête et a besoin d’être remis en ligne par un opérateur.
Ceci dû au fait que le robot ne peut pas savoir si l’objet détecté est toujours présent
entre le plan de détection et le chariot.
9
Figure 2.6 – Cas particulier obstacle
Dans la figure précédente le chariot ne voit plus l’obstacle avec le laser rideau et
ne peut également pas le détecté avec le laser de sécurité du bas car l’obstacle est en
hauteur. Balyo souhaite donc remplacer ce capteur par une caméra 3D.
2.3.4 Caméra 3D
Si la caméra 3D n’est pas encore utilisée comme substitue au laser rideau, elle est
utile en revanche sur certains chariots pour permettre à la fois la détection de palettes
mais aussi de vérifier si un espace est bien vide avant de procéder à la dépose. La caméra
3D permet au chariot de corriger la position de ses fourches avant une prise de palette.
10
Figure 2.8 – Caméra 3D fourche
Dans le cas représenté, les fourches poussent la palette, au-lieu de voir la distance
séparant les fourches de la palette diminuer, la valeur du télémètre reste inchangée.
Ceci fait surgir une erreur qui empêche le chariot de continuer à pousser la palette.
11
Figure 2.10 – Interface graphique du chariot
12
Chapitre 3
Camera 3D
3.1 Types
Malgré tous les progrès fait ces dernières années en calculs et développement de
système intelligents, la problématique de vision reste encore un obstacle majeur qui
entrave l’avènement de systèmes autonomes évoluant dans des environnements inconnus
et sujet aux changements.
Il existe plusieurs types de caméra qui permettent de procurer aux robots une vision
de leur espace d’évolution.
13
Figure 3.2 – Nuage de point en présence de soleil
3.2 Principe
14
avec laquelle j’ai travaillé, fonctionne en émettant à un intervalle régulier des pulsions
d’ondes infrarouge et en calculant le temps de vol des faisceaux, elle en déduit la
profondeur. Ce temps de vol est obtenu en calculant le déphasage entre l’onde émise et
réfléchie[4].
Q3 − Q4
φ = arctan( ) (3.1)
Q1 − Q2
c
d= φ (3.2)
4.π.f
Avec f la fréquence de l’onde choisie et c la vitesse de la lumière.
15
Figure 3.6 – Nuage de points brute
3.3.2 Chevauchement
La caméra IFM O3D303 fonctionnant par émission de salves d’ondes infrarouge
à une fréquence donné, si plus d’une caméra se retrouve à consulter la même scène
(croisement de deux chariots) les ondes se chevauchent et une erreur se produit. Le
logiciel de réglages de la caméra 3D fournis par IFM permet de choisir entre 3 fréquence
d’émissions, il suffit donc de s’assurer que deux caméras qui risquent de consulter la
même scène à un même moment ne soit pas réglées sur la même fréquence.
Figure 3.7 – Nuage de points d’une scène vue par deux caméras
16
Figure 3.8 – Type de sol engendrant des erreurs de détection
3.3.4 Surchauffe
La caméra IFM O3D303 possède plusieurs paramètres réglables sur le pilote fournis.
Il est possible de choisir le nombre d’images par seconde que l’on souhaite obtenir, la
durée d’exposition, de réglé la portée maximale, de choisir le canal d’émission des ondes
pour prévenir l’erreur de chevauchement et même d’appliquer des filtres spatiaux et
temporels directement sur les nuages de points.
Tous ces réglages consomment beaucoup de puissance de calcul et si mal réglé, la
caméra a du mal à maintenir une fréquence d’image acceptable (plus de 15 images par
seconde) et parfois même s’éteint. Il est donc nécessaire de vérifier que les paramètres
entrés ne surchargent pas la caméra en traitement ou d’avoir une fixation mécanique
permettant de réaliser une bonne dissipation thermique.
3.3.5 Soleil
Le soleil émettant sur un large spectre de longueur d’ondes (de 250 à 2 500 nm), il
perturbe les données relevées par la caméra 3D car cette dernière utilise des fréquences
présente dans l’infrarouge aux alentours de 800nm. Il est malheureusement impossible
de filtrer ou de corriger les erreurs introduites par la présence d’éclairage du soleil sur
une scène. D’où l’obsolescence de ce type de caméra en extérieur.
3.3.6 Calibration
En fin la dernière erreur constatée n’est pas lié au principe du fonctionnement
de la caméra mais à la manière dont celle-ci est fixée sur le chariot prototype avec
lequel j’effectuais mes tests. En effet il a été décidé que la caméra serait fixée de la
même manière que le laser rideau, c’est à dire en haut du chariot avec une inclinaison
avoisinant les 45◦ .
L’une des premières tâches qui m’eut été donné par mon tuteur été justement de
vérifier quel effet à cet angle sur la présence de bruit dans les données de la caméra.
Il fallait également trouver un compromis entre cet angle et le champ de vision de la
caméra. Vu que la fixation de la caméra était assurée par une paire d’aimant, l’angle de
la caméra nécessaire pour pouvoir remettre le nuage de point dans le repère du chariot
n’était pas connu précisément. Il fallait donc manuellement trouver cet angle ce qui
n’était pas précis. En effet si cet angle est mal déterminé des objets présents dans le
17
nuage de points sur le sol peuvent être soit vu plus grand ou plus petit qu’ils le sont,
ou, pire le sol peut alors être détecté comme obstacle.
La solution été donc d’utilisé PCL pour pouvoir faire une détection de plan et en
déduire l’orientation de la caméra. Cette méthode est détaillée par la suite dans le
chapitre traitant l’Autocalibration.
18
Chapitre 4
ROS et PCL
4.1 ROS
ROS étudié à l’ENSTA en 2-ème année et appliqué en 3-ème lors des projets She-
pherd et Guérledan permet de gérer les données et d’interfacer plusieurs capteurs.
Durant mon stage je l’ai principalement utilisé pour le prototypage. En effet grâce à la
fonction Dynamic Reconfigure de RQT, j’ai pu de manière empirique trouver les bons
réglages de filtres appliqués aux nuages de points.
4.1.1 Introduction
Le Robot Operating System se veut, comme son nom l’indique, être un système
d’exploitation pour robots. Créé par le laboratoire Willow Garage, son objectif principal
est de faciliter la création d’application robotique en réduisant la quantité de code qui
doit être écrit à chaque nouveau projet.
C’est pour cela que ROS promeut la réutilisation de code sous forme de nœuds [5].
Ainsi permettant de ne pas avoir à réinventer la roue à chaque fois mais aussi facilitant
le travail avec une multitude capteur équipant un même robot.
4.1.2 Application
Durant mon stage j’ai utilisé ROS pendant plusieurs étapes de développement de
mes projets. J’ai ainsi pu bénéficier de l’outil de visualisation RViz pour avoir un aperçu
des modifications que j’effectuais sur mes nuages de points. Grâce à ROS également il
m’était possible de voir les effets de mes paramètres sur la rapidité de l’algorithme de
filtrage et les fréquences d’affichage de nuage développé par mon tuteur.
Par la suite pour la création de mon algorithme d’auto-calibration, ROS m’a permis
19
de publier et souscrire à plusieurs orientations et versions de nuages de points sur
lesquelles j’ai effectué différentes opérations de transformations et de filtrage. D’autant
plus que grâce à RQT je pouvais en ayant créé les structures et .cfg adéquat faire varié
mes paramètres sur un log pris à partir d’un chariot et rejoué sur mon ordinateur depuis
mon bureau.
4.2 PCL
Issue du même laboratoire à l’origine du Robot Operating System, la Point Cloud
Library permet de fournir aux développeurs et roboticiens des outils facilitant le travail
avec les nuages de points.
4.2.1 Introduction
Un nuage de point est une structure de données utilisée pour représenter une col-
lection de points multi-dimensions dans le traitement de données 3D. En plus de co-
ordonnées spatiales (x,y,z) chaque points peut également contenir des informations sur
la couleur(RGB, HSV. . .).L’acquisition de ses données se fait à l’aide de capteurs tels
20
qu’une caméra acoustique un scanner laser ou, comme pour mon stage, une caméra
ToF.
4.2.2 Application
PCL [6] met à disposition une multitude de fonction allant de la simple copie et
concaténation de nuages de points jusqu’à la segmentation. Et grâce à ROS il est facile
et rapide d’obtenir un affichage en temps réel des nuages de points grâce à l’outil RQT.
En effet mon tuteur avait écrit un programme regroupant plusieurs filtres spatiaux et
leurs paramètres et pouvant aussi agir sur les coordonnées de la caméra 3D. Cela m’a
permis d’avoir une première impression et une réelle compréhension de ses différents
filtres, puisque je pouvais voir en temps réel l’effet qu’à chaque paramètre sur le nuage
de points résultant.
Pour la suite de mon stage je me suis inspiré du code de mon tuteur et également
des tutoriels de Point Cloud Library, pour créer une méthode permettant la détection
du sol et la calibration de l’angle de tangage de la caméra. Cet algorithme est décrit
dans le chapitre Algorithme d’auto-calibration.
PCL et ROS m’ont permis de pouvoir tester mes algorithmes de façons rapide,
néanmoins la partie la plus longue pour moi était de créer une librairie en cpp et
séparer ROS de mon code. Étant débutant dans ce langage et ne connaissant pas les
règles d’usage de codage de la compagnie il m’a fallu beaucoup d’effort d’adaptation.
21
Chapitre 5
Outils de développement
5.1 GIT
Le département de Recherche et Développement de Balyo étant composé de plu-
sieurs équipes qui travaillent toutes simultanément sur le développement du SDK. De la
création d’une nouvelle fonctionnalité par l’équipe software robot à son implémentation
dans l’éditeur de circuit, plusieurs étapes sont nécessaires. Il est ainsi impératif pour
éviter les conflits et permettre un travail en parallèle efficaces d’utiliser GIT. GIT per-
met donc à toutes les équipes de Balyo de travailler sur différentes versions en parallèle
et de pouvoir partager les changements réalisés par une personne au reste de l’équipe.
Il permet aussi à chaque utilisateur de modifier un fichier et de pouvoir revenir à une
version antérieur et assure la sauvegarde de l’évolution des programmes.
Pour ma part après avoir installer un outil de cryptage de fichier sur mon ordinateur
-cette période de l’année était marquée par plusieurs attaques de type ransomware- j’ai
pu obtenir de GIT la version du SDK sur laquelle j’allais travailler pendant la durée de
mon stage. Sur les conseils de mon tuteur j’ai créé une branche où je pouvais modifier
le code déjà existant en toute liberté et développer mon propre code.
5.2 RedMine
Après développement d’une nouvelle fonctionnalité par l’équipe Robot ou Tools et
Supervision, l’équipe validation doit vérifier qu’aucun bug n’est rencontré lors de son
implémentation finale à bords des chariots. Ils conduisent donc une série de tests dans
le Paddock (zone de test de Balyo).
Lorsqu’un problème est détecté il est signalé au reste de l’équipe R et D grâce à
RedMine, un outil web qui permet de répertorier les tickets selon leur priorité, la ver-
sion du SDK concerné et également l’attribuer à une personne qui sera chargée de le
résoudre.
Durant ma période de stage j’ai eu l’occasion de résoudre des tickets de traductions de
descriptions de variables dans un fichier xml, en développant un script python qui le
faisait automatiquement à partir de d’un fichier texte contenant la traduction des va-
22
leurs correspondantes. Mais aussi de résoudre des problèmes de détection qu’a rencontré
l’équipe validation avec la caméra 3D en l’absence de mon tuteur.
23
Chapitre 6
Algorithme autocalibration
Afin de pouvoir se servir des données acquises par la caméra 3D, il est nécessaire
de connaı̂tre ses coordonnées aussi bien en translation qu’en rotation. Ces coordonnées
connues il est possible alors d’effectuer un changement de repère vers le référentiel du
chariot et pouvoir réaliser des détections de palettes, d’espaces vide et d’obstacle.
6.1 Introduction
La calibration est donc une étape cruciale pour le bon fonctionnement du chariot.
Une mauvaise calibration cause une multitude de problèmes. J’ai fait des tests où en in-
troduisant délibérément une erreur de 3 degré sur l’orientation de la caméra 3D équipée
sur les fourches d’un chariot K-Matic de Linde, le chariot poussait les palettes et les
faisait tomber si on l’arrêtait pas manuellement.
La méthode que mon tuteur et moi avant décidé d’utiliser est de déduire les orienta-
tions de la caméra à partir de la détection de plans normal à chaque axe. En retrouvant
les équations d’un plan dans le repère de la caméra et connaissant son équation dans
le repère du chariot, on retrouve ainsi les coordonnées de la caméra 3D.
24
Une solution plus simple aurait été de rajouter une centrale inertielle au support
de la caméra mais l’ajout de ce capteur n’a pas été envisagé lors de la conception du
kit Balyo. Aussi la précision des centrales inertielle à bas coût reste faible.
25
6.3 Segmentation
Une fois le nuage de points filtré vient l’étape de segmentation. Comme présenté
ultérieurement, PCL permet à ses utilisateurs de bénéficier de nombres de fonction-
nalités déjà implémentée par la bibliothèque et la communauté de développeur, l’une
d’entre elle est la segmentation.
En créant un modèle de segmentation, PCL permet grâce à l’utilisation de la
méthode itérative RANSAC (RANdom SAmple Consensus) de trouver les coordonnées
du plan cible sous-forme de quaternions. On obtient ainsi une équation du plan observé.
ax + by + cz + d = 0 (6.1)
où a, b, c et d sont les coordonnées du plan trouvé par la méthode RANSAC.
6.4 Quaternion
On accordera plus d’importance à l’application des quaternions par PCL qu’à leur
définition, lourde, pour ce rapport. Un quaternion est un élément d’un espace vectoriels
de dimension quatre. Il est représenté comme suit [7] :
q = m + ni + pj + rk (6.2)
i2 = j 2 = k 2 = ijk = −1 (6.3)
Les quaternions sont utilisé comme substitue aux matrices de rotations car ils per-
mettent d’atténuer grandement l’utilisation de mémoire.
6.5 Proportionnel
Une fois le modèle de plan calculé, pour trouver les angles à appliquer en post-
traitement aux données de la caméra pour les transférer au repère du chariot. Il faut
minimiser les bons coefficients du plan. Ainsi pour trouver le plan qui a comme vecteur
normal l’axe x du repère du chariot, nous recherchons a minimiser les paramètres b et
c de du plan.
Pour se faire il suffit de trouver les bonnes rotations à appliquer autour de l’axe
z et y. J’utilise un correcteur proportionnel qui réduit au fur et à mesure les valeurs
adéquate du modèle. De manière empirique, mon problème se résume aux équations
suivantes.
anglez (t) = anglez (t − 1) + b.α (6.4)
26
Avec alpha le coefficient du proportionnel choisi par l’utilisateur. Par défaut il est
réglé à 0.01. L’algorithme estime avoir trouvé les bons angles quand b et c recalculé
sont suffisamment proche de 0.
Cas Horizontal
Cas profil
27
coordonnés x de la caméra. Cette coordonnée est calculée en effectuant la moyenne des
points appartenant au modèle du plan.
PN
i=0 inliers(i)
dx = (6.10)
N
Où N est le nombre de points appartenant au modèle de plan défini.(inliers)
6.6.1 Bilan
Cet algorithme permet donc de retrouver les coordonnées de la caméra 3D de
manière aisée. J’ai commencé par une version prototype qui dépendais de ROS pour
finalement créé une librairie complètement séparée qu’il est possible d’utiliser hors de
ROS.
28
Chapitre 7
Algorithme de détection
d’obstacle.
7.1 Introduction
Les chariots autonomes de Balyo disposent d’un laser de navigation qui leur permet
de connaı̂tre leurs coordonnées dans leurs zones d’opération. Et même s’ils peuvent
connaı̂tre la position des autres robots, il serait possible qu’ils effectuent leurs missions
sans avoir à bord de capteurs de sécurité. Hélas il est trop dangereux de supposer qu’il
n’y est aucun accident qui laisserait un objet sur le trajet du chariot d’autant plus que
dans bon nombres de sites clients, les chariots autonomes de Balyo roule dans le même
espace que des chariots classiques. C’est pour cela que Balyo équipe ses chariots d’une
multitude de laser assurant une zone de sécurité autour d’eux, ce qui leur permet de
manœuvrer qu’en l’absence d’obstacle sur leurs trajectoires.
29
Dans la continuité de l’innovation de l’entreprise et à fin d’améliorer la fiabilité des
chariots, Balyo a décidé d’étudier l’utilisation d’une caméra 3D au lieu du laser rideau.
En effet ce laser ne permet pas au chariot de savoir si l’obstacle qui a entraı̂né un arrêt
est toujours présent devant lui.
30
7.3.2 Paramètres de sécurités
31
7.3.4 Filtre médian
Vient ensuite le filtre médian qui va permettre de filtrer les points isolés et réduire
le bruit. Il remplace un point dans un voisinage par la valeur médiane de ce voisinage.
Une fenêtre de taille variant entre 3 et 5 constitue un bon compromis puissance de
calcul/qualité du filtre. Une fenêtre trop grande entraı̂ne un ralentissement conséquent
sur l’ensemble du traitement.
7.3.7 Segmentation
Enfin vient l’étape de segmentation. La méthode d’arbre k-d est utilisé pour pouvoir
regroupé les points proches en objet.
Un arbre k-d est une structure de donnée utilisé pour le traitement de points ap-
partenant à un espace à k dimensions. Dans le cas de mon stage et des données que je
traitent il s’agit de points appartenant à un espace de dimension trois. Un arbre k-d
est un arbre binaire. Il est utile dans la recherche des voisins les plus proche d’un point
spécifique.[8]
32
Un groupe de points est considéré comme objet si dans un voisinage donné en trouve
un nombres de points supérieurs au seuil fixé. Ainsi un objet est signalé comme obs-
tacle si il est sur le chemin du chariot et qu’il dépasse une certaine hauteur fixée par
l’utilisateur.
33
Conclusion
34
Bibliographie
[2] Localisation et cartographie simultanées pour un robot mobile équipé d’un laser
à balayage : CoreSLAM, Oussama El Hamzaoui.
35
Table des figures
36
6.4 Capture d’écran de la console . . . . . . . . . . . . . . . . . . . . . . . . 27
6.5 Nuage de point après calibration (en couleur) . . . . . . . . . . . . . . . 28
37