Professional Documents
Culture Documents
Projet ROS
Projet ROS
Encadré par :
Pr YOUNES ADNANI
2
2-2 Rôle :............................................................................................................................................25
2-3 Installation de la bibliothèque Snappy-ros :.................................................................25
3-Installation Firebase dans NodeRED :........................................................................................26
4 La liaison entre Firebase, Node Red et Topics :.......................................................................26
VI. Création d’application, en utilisant le site MIT app Inventor :..........................................27
VII. L’application est créé :...............................................................................................................28
VIII. Code Arduino................................................................................................................................28
IX. Connexion Bluetooth avec le ROS :........................................................................................32
X. Les étapes pour contrôler notre robot :.....................................................................................34
3
Liste de figure :
4
Introduction générale au projet :
Ce projet s'inscrit dans le cadre du développement d'une application Cloud Robotics utilisant
le ROS (Robot Operating System). L'objectif est de tirer parti du potentiel du cloud
computing pour renforcer les capacités des systèmes embarqués et créer des robots
intelligents capables d'interagir avec leur environnement de manière autonome et efficace.
Nous nous concentrons particulièrement sur la conception et la réalisation d'un robot capable
de détecter les obstacles et de les éviter de manière autonome. Pour ce faire, nous utiliserons
des composants matériels tels qu'un Arduino Uno, des capteurs à ultrasons HC-SR04, des
moteurs DC, et autres. Ce robot sera en mesure de détecter la présence d'obstacles grâce à ses
capteurs à ultrasons, et d'ajuster sa trajectoire pour les éviter en contrôlant ses moteurs DC.
En parallèle, nous mettrons en place une infrastructure cloud et un système ROS pour offrir
au robot une puissance de calcul et de stockage supplémentaire, ainsi qu'une connectivité
avec d'autres systèmes et services en ligne. Cette approche cloud Robotics permettra au robot
d'accéder à des données en temps réel, de communiquer avec d'autres robots et systèmes, et
d'améliorer ses capacités de manière significative.
Ce rapport détaillera les différentes phases du projet, depuis la conception matérielle jusqu'à
la programmation du comportement du robot en passant par la mise en place de
l'infrastructure cloud et du système ROS. Nous évaluerons également les performances de
notre solution et discuterons des perspectives d'amélioration pour les futures
itérations du projet.
L’idée est d’utiliser une carte Arduino pour lire les données reçues par un, ou plusieurs,
capteur(s) à ultrasons.
Lorsque le capteur détecte un obstacle devant lui, l’Arduino doit envoyer des instructions aux
moteurs qui pilotent les roues du robot pour l’éviter. Le robot serait en partie constitué de
châssis et de composantes électroniques (Arduino, capteur à ultrasons, moteurs, …) serait
fixé au châssis simplement à l’aide d’une colle.
Les matériels dont on a besoin pour réaliser ce robot sont :
Arduino UNO.
Un capteur à ultrasons HC-SR04.
Deux moteurs DC pour piloter les roues du robot.
Une pile de 11V et des connecteurs pour alimenter les moteurs DC.
L298N motor driver
Deux roues
Module Bluetooth HC05
Des câbles jumper
1. La carte Arduino
Une carte Arduino est une petite carte électronique équipée d’un microcontrôleur. Le
microcontrôleur permet, à partir d’événements détectés par des capteurs, de programmer et
commander des actionneurs ; la carte Arduino est donc une interface programmable.
Elle peut être programmé pour analyser et produire des signaux électriques, de manière à
effectuer des tâches très diverses comme le contrôle des appareils domestiques, éclairage,
chauffage, le pilotage d’un robot, de l’informatique embarquée, etc.
Il existe plusieurs types de cartes Arduino, on s’est orienté uniquement vers le type le
plus fréquent qui est la carte Arduino UNO Pour réaliser ce montage, on doit assurer la
liaison entre chaque composante électronique et notre carte Arduino.
En totale on aura besoin d’une carte Arduino qui contient au moins 9 broches numérique, et
aussi qui sera capable d’exécuter le plus vite possible l’algorithme gravé dans sa mémoire.
En revanche, la carte Arduino UNO est la carte la plus convenable à cette situation vue
qu’elle possède 14 broches numériques (dont 6 avec PWM) et 6 broches d’entrée analogique.
2 Capteurs ultra-son
7
2-1 Fonctionnement du capteur
9
Figure 6:module Bluetooth HC-05
4-1Description :
Ce module Bluetooth permet d'ajouter une connexion série sans fil Bluetooth sur votre
ARDUINO. Il communique avec le microcontrôleur via un port série.
Spécifications
100 % compatible avec
ARDUINO
Tension nominale : 3,3 V- 5
V MAX
Antenne de 2,4 GHz
intégrée
Contrôlez votre
ARDUINO sans fil
4-2Branchement du HC-05 :
10
Principe de fonctionnement
Description
Le driver moteur L298N est un circuit monolithique intégré dans des boîtiers Milliwatt et
PowerSO20 à 15 broches. Il s'agit d'un pilote à double pont complet haute tension et à
courant élevé conçu pour accepter les charges inductives d'entraînement de sable de niveau
logique TTL standard telles que les relais, les solénoïdes, les moteurs à courant continu et pas
à pas. Deux entrées de validation sont fournies pour activer ou désactiver le dispositif
indépendamment des signaux d'entrée. Les émetteurs des transistors inférieurs de chaque
pont sont connectés ensemble et la borne externe correspondante peut être utilisée pour la
connexion d'une résistance de détection externe. Une entrée d'alimentation supplémentaire
est fournie pour que la logique fonctionne à une tension inférieure.
11
Caractéristiques :
12
un courant aussi plus élevé. Pour cela, nous utilisons des circuits intégrés de pilotage de
moteur. Le pilote du moteur est un petit amplificateur de courant ou de tension. Il prend un
signal de courant faible et émet un signal de courant élevé qui peut entraîner un moteur. Il
peut également contrôler la direction du moteur. Les entraînements de moteur sont de
nombreux types en fonction de la tension d'alimentation maximale, du courant de sortie
maximal, de la dissipation de puissance nominale, de la tension de charge et du nombre de
sorties, etc. Nous allons ici discuter du pilote de moteur L298N. Il est utilisé dans le projet de
contrôle de la vitesse du moteur à courant continu et vous pouvez facilement interfacer le
moteur à courant continu avec le microcontrôleur à l'aide de ce pilote de moteur. Et aussi
dans un robot contrôlé par Bluetooth utilisant un microcontrôleur pic. Vous pouvez consulter
le robot suiveur de ligne pour en savoir plus sur ses applications.
6 Les fils connecteurs
Les câbles, fils ou connecteurs sont des éléments nécessaires pour établir des connexions
entre différents composants électriques.
Figure 8:Straps
la batterie Li-ion 18650 offre une flexibilité dans sa configuration en série ou en parallèle,
permettant d'adapter la capacité et la tension en fonction des besoins spécifiques de
l'application.
Ils peuvent être connectés en série. Dans ce cas, la tension se développe et la capacité reste
égale à une batterie. Cela peut être fait en utilisant un cas spécial. En connectant 3 batteries
de 3,7 v chacune, nous obtenons une batterie de 11,1 volts 3600 mA.
13
Figure 9:: Batteries de 3.7V
1 2 3
14
4 5
15
Partie 2 : Étude de la partie Software
Cette partie est dédiée à la représentation des plateformes informatiques utilisées dans le
développement du système robotique.
I. Plateforme de programmation Arduino
L’interface de l’IDE Arduino est plutôt simple, il offre une interface minimale et épurée pour
développer un programme sur les cartes Arduino. Il est doté d’un éditeur de code avec
coloration syntaxique et d’une barre d’outils rapide. Ce sont les deux éléments les plus
importants de l’interface, c’est ceux que l’on utilise le plus souvent. On retrouve aussi une
barre de menus, plus classique qui est utilisé pour accéder aux fonctions avancées de l’IDE.
Enfin, une console affichant les résultats de la compilation du code source, des opérations sur
la carte, etc.
16
a. Ecriture d’un programme Arduino
Un programme Arduino (Sketch)= 1 fonction setup() + 1 fonction loop() Le langage utilisé
C/C++
17
II. Ubuntu 2024 et VMWare WorkStation
Nodes : Un node est un exécutable qui utilise ROS pour communiquer avec d’autres
nodes.
Messages : Type de données ROS utilisés pour souscrire ou publier sur un topic.
Topics : Les nodes peuvent publier des messages sur un topic aussi bien que souscrire
à un topic pour recevoir des messages.
Master : Nom du service pour ROS (i.e. aide les noeuds à se trouver mutuellement).
Paramètres : Informations très peu dynamiques qui doivent être partagés dans
l’application.
rosout : Equivalent de stdout/stderr.
roscore : Master+rosout+parameter server (serveur de paramètres).
Les paquets sources n’ont pas de structure hiérarchique (ou à un seul niveau lorsque les
dépôts contiennent plusieurs paquets ROS).
18
2 Installation de ROS :
Mettez à jour la liste des paquets disponibles et installez ROS avec la commande suivante :
3 Setup d’environnement :
Configurez votre environnement ROS en exécutant la commande suivante :
19
4 Création du Workspace :
Pour créer un espace de travail (workspace) dans ROS, on utilise les commandes
suivantes :
5 Compilation du pakage :
La commande catkin_make est une étape fondamentale dans l'utilisation de ROS
(Robot Operating System). Son rôle principal est de compiler les packages inclus dans
un workspace ROS
20
7 Création des node :
Une fois que vous avez utilisé la commande "touch subscriber_node.py" pour créer un
nouveau fichier nommé "subscriber_node.py", qui pourrait servir de base pour la création
d'un nœud ROS, ce fichier est créé de manière inéxecutable par défaut. Pour le rendre
exécutable et ainsi permettre son exécution en tant que programme ou script, vous pouvez
utiliser la commande "chmod +x subscriber_node.py". Cela ajoutera le droit d'exécution au
fichier, ce qui vous permettra de lancer le script directement sans avoir à spécifier
l'interpréteur de commande. Cette étape facilite le processus de développement et de test des
nœuds ROS.
En créant de même manière la node Publisher .
21
8 Le code qui assure le contrôle du robot :
9 le ROS Master :
Facilite la découverte dynamique des nœuds dans un réseau ROS, permettant aux
différents composants du système de communiquer entre eux de manière flexible. Il
simplifie la gestion de l'environnement ROS en fournissant un point central de
coordination et d'information pour les nœuds du système.
22
La commande rosrun dans ROS permet de démarrer un node spécifique en spécifiant le nom
du package où se trouve le node ainsi que le nom du node lui-même. Cette commande est
utilisée pour exécuter des nodes particuliers. Pour interagir avec les topics :
Node-RED est une plateforme de programmation visuelle basée sur un navigateur, conçue
pour faciliter la création d'applications IoT. Elle utilise un modèle de flux de données où les
utilisateurs connectent des nœuds prédéfinis pour créer des applications en glissant-déposant.
Node-RED offre une bibliothèque de nœuds prêts à l'emploi, une extensibilité pour intégrer
divers services et une flexibilité pour développer rapidement des applications basées sur des
flux de données.
23
1 Lancement Node RED :
24
2 SNAPPY ROS :
2-1 Définition :
Snappy ROS est un module ou une bibliothèque qui permet à Node-RED de
communiquer avec des systèmes robotiques utilisant le Robot Operating System (ROS). Il
utilise le protocole "Snappy" pour échanger des messages et des données avec les nœuds
ROS, permettant ainsi une intégration transparente entre Node-RED et l'écosystème ROS.
2-2 Rôle :
Snappy ROS dans Node-RED facilite l'intégration et la communication entre Node-RED
et l'écosystème ROS, permettant aux développeurs de créer des applications robotiques
plus riches et plus interactives en combinant les fonctionnalités de ces deux plates-
formes.
25
3-Installation Firebase dans NodeRED :
V. FireBase
26
Firebase est une plateforme de développement d'applications mobiles et web proposée par
Google. Elle offre une gamme de services de backend prêts à l'emploi, des SDK pour
plusieurs plateformes, et des outils de développement et de test pour aider les développeurs à
créer, améliorer et faire évoluer leurs applications. Firebase est réputée pour sa facilité
d'intégration, sa haute disponibilité et ses performances élevées, ce qui en fait un choix
populaire pour les développeurs cherchant à construire des applications modernes et
évolutives.
27
VII. L’application est créé :
#include <ros.h>
#include <std_msgs/Int32.h>
int m1a = 9;
int m1b = 10;
int m2a = 11;
int m2b = 12;
int speedPinRight = 2;
int speedPinLeft = 3;
int demar =0;
#define trigPin 6
#define echoPin 7
ros::NodeHandle nh;
28
{
Backward();
demar = 1;
}
else if(statue == 4)
{
turnLeft();
demar = 1;
}
else if(statue == 1)
{
Forward();
demar = 1;
}
else if(statue == 3)
{
turnRight();
demar = 1;
}
else if(statue == 0)
{
stop();
demar = 1;
}
}
std_msgs::Int32 CapteurROS;
ros::Publisher CapteurROSPublisher("Capteur", &CapteurROS);
ros::Subscriber<std_msgs::Int32> EtatROSsubscriber("Etat", &callBackFunctionEtat);
29
void setup() {
nh.getHardware()->setBaud(9600);
nh.initNode();
nh.subscribe(EtatROSsubscriber);
nh.advertise(CapteurROSPublisher);
//______________________________OUTPUT INPUT
pinMode(speedPinRight, OUTPUT);
pinMode(speedPinLeft, OUTPUT);
pinMode(m1a, OUTPUT);
pinMode(m1b, OUTPUT);
pinMode(m2a, OUTPUT);
pinMode(m2b, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
nh.spinOnce();
delay(5);
if (demar == 1 ) {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance < 15) {
CapteurROS.data = 1 ;
}
30
else {
CapteurROS.data = 0 ;
}
CapteurROSPublisher.publish(&CapteurROS);
}
}
void Backward(){
digitalWrite(m1a, HIGH);
digitalWrite(m2a, LOW);
digitalWrite(m1b, LOW);
digitalWrite(m2b, HIGH);
analogWrite(speedPinRight, 150);
analogWrite(speedPinLeft, 150);
}
void Forward(){
digitalWrite(m1a, LOW);
digitalWrite(m2a, HIGH);
digitalWrite(m1b, HIGH);
digitalWrite(m2b, LOW);
analogWrite(speedPinRight, 150);
analogWrite(speedPinLeft, 150);
}
void turnLeft(){
digitalWrite(m1a, LOW);
digitalWrite(m2a, LOW);
digitalWrite(m1b, HIGH);
digitalWrite(m2b, LOW);
analogWrite(speedPinLeft, 150);
}
void turnRight(){
31
digitalWrite(m1a, LOW);
digitalWrite(m2a, HIGH);
digitalWrite(m1b, LOW);
digitalWrite(m2b, LOW);
analogWrite(speedPinRight, 150);
}
void stop(){
digitalWrite(m1a, LOW);
digitalWrite(m2a, LOW);
digitalWrite(m1b, LOW);
digitalWrite(m2b, LOW);
}
32
Topic capteur
Data’0’ absence d’obstacle.
Data’1’ présence d’obstacle
Topic état :
33
X. Les étapes pour contrôler notre robot :
Conclusion générale :
34
Au cours de ces mini-projets, nous avons exploré deux approches distinctes pour le
développement de systèmes embarqués et de robots intelligents. Le premier mini-projet s'est
concentré sur la création d'un robot détecteur de présence équipé de capteurs à ultrasons,
tandis que le deuxième mini-projet a mis en œuvre une application cloud Robotics utilisant le
ROS (Robot Operating System).
Dans le premier mini-projet, nous avons conçu et réalisé un robot capable de détecter les
obstacles à l'aide de capteurs à ultrasons et d'éviter les collisions en ajustant sa trajectoire.
Nous avons utilisé des composants matériels courants tels qu'un Arduino Uno, des moteurs
DC, des capteurs à ultrasons HC-SR04, et d'autres éléments. Ce projet nous a permis de
comprendre les principes de base de la robotique embarquée et de développer des
compétences pratiques en matière de conception matérielle et de programmation.
Dans le deuxième mini-projet, nous avons exploré l'approche du cloud Robotics en mettant
en œuvre une application utilisant le ROS pour la communication entre différents
composants, notamment le cloud, les smartphones et les systèmes embarqués. Cette approche
nous a permis d'exploiter la puissance du cloud computing pour renforcer les capacités de
nos robots, en leur permettant d'accéder à des ressources de calcul et de stockage
supplémentaires, ainsi qu'à des services en ligne tels que des bases de données et des services
de communication. Ce projet nous a également permis de comprendre les avantages et les
défis associés à l'utilisation du cloud dans le domaine de la robotique.
35