: 2020-2021
On peut constater que l’utilisation des Robots mobile propage de plus en plus.
L’intérêt indéniable de cette catégorie est d’avoir permis d’augmenter
considérablement nos connaissances sur la localisation et la navigation de
systèmes autonomes
1
def target_hist(frame):
hsv_img=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
hist=cv2.calcHist([hsv_img],[0],None,[50],[0,255])
return hist
Chapitre 1
2
Chapitre 1 : Généralités sur la robotique et la Raspberry Pi 4
I.1- Introduction
Ce chapitre examine en termes d’analyse le cahier des charges et la
définition générale sur la robotique, en particulier les Robots voitures.
Ultérieurement le chapitre aborde les composants intéressant la réalisation de
notre projet, cette partie sera décomposée en trois éléments secondaires qui sont
:
Déplacement automatique ;
Détection des objets via caméra ;
3
le robot suivant les instructions programmées par un code après acquisition des
informations à partir d’une caméra Pi. Le driver moteur L298N joue le rôle d’un
pont qui relie la carte Raspi avec les moteurs.
Le premier type de machine que l'on peut appeler robot correspond aux
"Automates". Ceux-ci sont généralement programmés à l'avance et permettent
d'effectuer des actions répétitives.
On peut estimer que les robots mobiles à roues constituent la plus grande
partie des robots mobiles. Historiquement, leur étude est née assez tôt, suivant
celle des robots manipulateurs, au milieu des années 1970. Leur faible
complexité en a fait de bons premiers sujets d’étude pour les roboticiens
intéressés par les systèmes autonomes. Les principales raisons de ce choix
technologique sont les suivantes : les roues sont plus faciles à contrôler, elles
procurent une meilleure stabilité au véhicule, elles dissipent moins d’énergie et
elles permettent au véhicule de se déplacer plus rapidement.
5
Fig. 1 : Châssis d’un Robot voiture
6
Chapitre 1 : Généralités sur la robotique et la Raspberry Pi 4
7
Comme il est montré dans la figure ci-dessous, cette carte comporte aussi
deux ports HDMI, deux ports USB 2.0, deux ports USB 3.0, un port Ethernet,
une prise Jack et un slot MicroSD, des GPIO broches d’entrée/sortie.
Conclusion
Dans ce chapitre, dans le but d’avoir une idée du matériel qu’on va
utiliser, on a parlé de la définition générale de la robotique, les types des robots,
la différence entre eux puis on a mentionné les composants des robots mobiles.
On a aussi défini la Raspberry en parlant des composants.
8
Chapitre 2
La mise en place
9
Chapitre 2 : La mise en place
II.1- Introduction
Dans ce chapitre on va commencer à mettre en place ce dont on a besoin
pour commencer à réaliser le robot voiture. Pour cela, on va faire marcher la
Raspberry, la connecter avec les moteurs et la caméra.
10
Il nous suffit alors de cocher le système que nous souhaitons installer, ce
qui est Raspbian - c’est un système d’exploitation GNU/Linux nommé par la
fusion des mots Raspberry et Debian -, puis de cliquer sur « Installer ».
11
SSH (Secure SHell) désigne à la fois un logiciel et un protocole de
communication informatique. Il permet de se connecter à distance sur une
machine en utilisant un compte utilisateur de cette dernière.
VNC, ou Virtual Network Computing, est un système permettant la prise
de contrôle à distance d’un ordinateur par un autre tout en montrant le bureau de
celle-ci. Ainsi, on peut voir en temps réel ce qui se passe sur le Raspberry Pi,
sans avoir à le brancher sur un moniteur.
Procédure :
1. Démarrer la "Raspberry Pi"
2. Se connecter au terminal avec CTRL+ALT+T
3. Saisir la commande "sudo raspi-config" puis valider.
4. sélectionner "Interfacing Options"
5. Sélectionner l’option "ssh"
6. Sélectionner le choix "Enable".
7.Le même pour "VNC"
7. Confirmer le message par "Ok".
8. Terminer la configuration avec le bouton "Finish".
12
Fig.9 : Raspberry Pi paramètres
13
permet de saisir nos commandes s’affiche, il faut mettre le login et le mot de
passe qui sont par défaut :
- Login : Pi
- Mot de passe : Raspberry
Installation de VNC
La mise à jour
14
Maintenant qu’on peut manipuler la carte à distance, il faut qu’on mise à
jour le système d’exploitation et tous les logiciels qui sont déjà installés en
utilisant la commande « apt-get update » et c’est préférable de l’utiliser chaque
fois qu’on installe un programme.
« apt-get » est un outil de commande qui permet de gérer les paquets sous
Linux. Sa tâche principale est de récupérer les informations et les paquets des
sources authentifiées pour les installer.
15
Fig.13 : L298N
II.3- Python :
Le Raspberry Pi nous donne la possibilité de le relier à une multitude des
composants externes (capteurs, actionneurs…), mais pour faire fonctionner tous
ces éléments, il faudra écrire des programmes spécifiques qui seront écrit en
Python.
On peut aussi écrire ces programmes en utilisant un autre langage de
programmation (Java, C++, Scratch…), mais on a opté pour Python car il est
très facile de s'y mettre, très convivial pour les débutants et c’est le langage de
programmation officielle qui a été pris en charge comme langue d’apprentissage
éducatif sur le Raspberry Pi.
Installation de Python en Raspberry :
Pour qu’on puisse installer Python, Cette commande suffit :
$ sudo apt-get install python3-dev
16
Les bibliothèques en Python :
En Python, une bibliothèque est un nombre de routines, qui peuvent être
déjà compilées et prêtes à être utilisées par des programmes, chacune a ses
propres usages qui rendent la programmation facile (Traitement du texte,
traitement d’images…)
Pour installer une bibliothèque, on utilise la commande « Pip », un
utilitaire fourni avec Python et qui permet d'installer simplement les
bibliothèques déposées sur l'index des paquets Python Pypi.
Conclusion
17
Dans ce chapitre dédié à la mise en place du Raspberry Pi, On est arrivé à
le manipuler à distance, trouver une solution pour contrôler les moteurs et
donner une définition générale de Python et on a vu comment utiliser les
broches GPIO pour contrôler les composants électroniques à l’aide de langage
de programmation python comme préparation à réaliser le projet.
Chapitre 3
18
Chapitre 3 : La détection des objets via Caméra Pi
III.1-Introduction :
La vision par ordinateur est un domaine informatique qui permet aux
machines non seulement de voir mais aussi de traiter et d'analyser des images et
des vidéos numériques.
Un grand domaine d'application de la vision par ordinateur est la
détection d'objets, c'est-à-dire la capacité d'un ordinateur de localiser et
d'identifier des objets dans une image. Grâce au deep learning, les ordinateurs
peuvent, à partir de grands ensembles de données d'images, apprendre à
reconnaître et à suivre des objets vus dans des images et des vidéos avec une
grande précision.
L'objectif de la détection d'objets est de détecter toutes les instances
d'objets d'une classe connue, comme par exemple personnes, voitures ou
visages dans une image.
Cependant, une grande puissance de calcul est encore nécessaire pour
exécuter efficacement les tâches visuelles et, sur un appareil aux ressources
matérielles limitées, l'exécution d'un système de détection d'objets peut s'avérer
difficile. Le Raspberry Pi est un petit ordinateur, pas plus grand qu'une carte de
crédit. Ce type d’ordinateur n'a pas la puissance de calcul des ordinateurs de
19
bureau traditionnels, mais en raison de leur faible coût et de leur taille, il est
souvent préférable de les utiliser pour certaines tâches.
III.2- La Méthode :
Il n'existe pas de méthode optimale à utiliser dans un système de
détection d'objets. De nouvelles méthodes sont présentées en permanence,
chacune prétendant être plus performante que les autres. Ainsi que les systèmes
de détection d'objets construits avec du matériel similaire ont montré des
performances médiocres auparavant. C'est pourquoi les résultats devraient
montrer que le Raspberry Pi 4 seul aura du mal à atteindre des vitesses plus
élevées sans sacrifier beaucoup de précision.
Il existe de nombreuses méthodes de détection d'objets qui pourraient être
testées dans le cadre de ce projet. Mais en raison du temps limité, on va tester
qu’une.
OpenCV
Le logiciel de ce projet consiste un script écrit en langage de Python. Il y
en a plusieurs cadres de deep learning open source qui peuvent être utilisés pour
la détection d'objets, tels que Tensorflow ou OpenCV. Pour ce projet, la
bibliothèque open source de vision par ordinateur OpenCV a été choisie pour
gérer cette tâche.
C’est une énorme bibliothèque open-source pour la vision par ordinateur,
l'apprentissage automatique et le traitement d'images. OpenCV supporte une
grande variété de langages de programmation comme Python, C++, Java, etc. Il
peut traiter des images et des vidéos pour identifier des objets, des visages ou
même l'écriture d'un être humain.
Les fonctions fournies par cette bibliothèque sont également nécessaires
dans le processus de développement de l'application de suivi d'objets. Il existe
de nombreuses possibilités, mais dans le cadre de ce projet, l'accent est mis sur
l'acquisition de trames à partir d'un flux de caméra en direct, le seuillage de
l'image en utilisant les plages de l'espace couleur HSV, la recherche de taches et
l'utilisation de leurs contours détectés dans une image binaire
Les Fonctions OpenCV les plus pertinentes pour la détection d'objets à base
de couleur :
20
Nom de la fonction Courte description
Vérifie si les éléments du tableau de
pixels d'une image se trouvent entre
inRange
les éléments de deux autres tableaux
(limites inférieure et supérieure)
imshow Affiche une image.
Convertir une image (matrice de
pixels) dans un autre format.
cvtColor Dans ce projet, il est utilisé pour
convertir chaque image capturée de la
caméra de BGR à HSV.
Recherche les contours de toutes les
zones possibles dans une image
binaire et les stocke dans un vecteur
findContours
de points
(les pixels les plus externes des zones
blanches).
HSV :
L'espace couleur HSV se compose de trois descripteurs différents, qui
sont toujours le nombre minimum pour classifier une couleur, le premier étant
"hue" la teinte qui décrit une couleur que l'œil humain peut voir. Le deuxième
est la saturation, qui décrit la pureté d'une couleur ou, dans le domaine de la
21
vision par ordinateur, combien cette couleur est mélangée au blanc et la
troisième est "Value" la valeur (ou luminosité), qui représente au contraire
l'ampleur du noir dans notre couleur. Par conséquent, Une couleur avec une
faible valeur semble plus sombre ou simplement noire
La raison pour laquelle on utilise ici le format de pixel HSV au lieu de
RGB, est que l'espace couleur HSV sépare les informations de couleur
(saturation) de l'intensité lumineuse (valeur). En ignorant la valeur dans les
paramètres de seuillage, il est toujours possible de détecter n'importe quelle
couleur dans une image, à condition d'utiliser les bonnes valeurs de teinte et de
saturation.
22
Fig.15 : Installation snapd
23
Il s'agit d'un métapaquet qui fournit le paquet de développement
nécessaire au développement d'OpenCV (Open Computer Vision).
On peut l’installer par la commande :
$ sudo apt-get install libopencv-devpython-opencv
Après, on doit compiler les fichiers avec l’outil CMake dans le répertoire
qu’on a créé comme suit
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.0.0/modules \
-D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \
-D BUILD_TESTS=OFF \
-D WITH_TBB=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF ..
Chapitre 3 : La détection des objets via Caméra Pi
25
Pour la dernière étape, la compilation, on doit utiliser la commande $
Make –j4
Le programme commencera à construire OpenCV et vous pourrez
voir la progression en pourcentage. Le processus prendrait environ 30-40
minutes.
Remarque : La commande "make -j4" utilise les quatre cœurs pour compiler
OpenCV, pour utiliser qu’un cœur on peut utiliser « make –j1 » mais cela
prendra encore plus de temps.
Enfin, on peut vérifier si la bibliothèque a été ajoutée avec succès en
exécutant une simple commande python
Conclusion
Dans ce chapitre, on a parlé de la vision des ordinateur en donnant une
définition, on a exploré les méthodes en faisant connaissance aux logiciels dont
on a besoin et on a installé les bibliothèques et le logiciel qui vont nous
permettre de traiter la vidéo qu’on va capter par la caméra
Dans le chapitre qui suit on va commencer à réaliser le projet en liant les
composants et coder les programmes.
26
Chapitre 4
27
La Réalisation
IV.1-Introduction :
Dans ce chapitre, on va aborder la réalisation de notre robot voiture en
deux parties, la première sera de le monter physiquement et la deuxième sera de
coder le programme qui va nous permettre d’identifier un objet et le suivre.
IV.2- Montage :
28
Fig.21 : Montage
IV.3-Partie Logicielle :
Caméra Pi :
La capture de la vidéo directement à partir du module caméra du Raspberry
Pi est simple avec OpenCV et ne nécessite pas de pilotes supplémentaires ou
d'autres logiciels.
FIG.
Les valeurs de teinte sont comprises entre 0 et 179. Les chiffres sont des
estimations approximatives de là où une couleur se termine et où une autre
commence, tandis que le "tuyau" représente sa nature continue, ce qui signifie
que si la limite inférieure est définie pour être plus élevée que la limite
supérieure sur la barre de contrôle, la gamme ne se terminera pas à 179, mais
progressera plutôt vers 0.
30
Fig.22 Image avant et après les 3 étapes
31
Fig.23 : points de contour d'un demi-cercle et d'un rectangle
Après avoir recueilli des informations sur tous les blobs de l'image en les
donnant des indices, le programme peut alors calculer la taille de la zone (cv2.
contourArea) et les coordonnées centrales pour les zones à l'intérieur de chaque
contour. Il les compare pour qu’on travaille qu’avec le plus grand contour et
l’entourer d’un rectangle avec la fonction « boundingRect ».
32
Puis vérifie si la coordonnée x est au centre, sinon il se déplace pour la
mettre au centre, de cette façon le robot fera face directement à l'objet.
Lorsque la voiture fait directement face à l'objet, elle avance tout en
vérifiant que la coordonnée x est au centre.
33
Si l'objet se déplace, la variable "last" se transforme en un certain nombre
dépendant de la direction dans laquelle l'objet a été vu pour la dernière fois à
l'écran, puis tourne à droite si la cible a été vue pour la dernière fois à droite.
Conclusion générale :
L'identification d'objets par filtrage des couleurs (valeurs HSV des pixels)
n'est qu'une des nombreuses méthodes qui peuvent être utilisées pour un tel
système. La détection d'objets à l'aide de couleurs est une méthode efficace,
surtout lorsqu'il s'agit d'objets qui n'ont généralement pas de caractéristiques ou
coins distinctes. Ces objets peuvent être des ballons ou d'autres objets ronds et
colorés.
Le problème principal lié à l'utilisation des couleurs, ou plus précisément
des valeurs de pixels, est l'effet d'un éclairage irrégulier, auquel un ordinateur
peut être très sensible, alors que l'œil humain ne peut détecter qu'une légère
différence. Le cause est l’incapacité de l’ordinateur de s’adapter aux nouvelles
conditions en raison de lumières naturelles.
OpenCV et Python possèdent tous les deux de bibliothèques vastes, avec
des possibilités infinies en ce qui concerne les opérations visuelles, le traitement
des images, la gestion de la mémoire et bien d'autres choses encore. Il est donc
tout à fait nécessaire de mener des recherches plus approfondies dans ce
domaine. Bien que le projet actuellement développé a été réalisé conformément
aux attentes fixées au début de ce travail, une compréhension plus large (ou plus
34
spécifique) des outils utilisés est nécessaire pour créer des systèmes sans défauts
et rentables.
35