Mini Projet ROBOT
Mini Projet ROBOT
Réalisé par :
BOULAKOUCH Yousra
ANTAR Aya
ELGOURT Salma
Sous le thème :
2
b) Moteurs DC ............................................................................................................................................. 24
c) Contrôleur de moteur L298N .................................................................................................................. 25
2. Carte microcontrôleur Arduino UNO ................................................................................................................................ 26
3. Capteurs ...................................................................................................................................................................................... 26
Capteur à ultrasons (HC-SR04) pour détecter les obstacles. ........................................................................... 26
4. Module de communication..................................................................................................................................................... 27
Module Bluetooth (HC-05 ou HC-06) ............................................................................................................ 27
5. Source d'énergie ....................................................................................................................................................................... 28
6. Divers ........................................................................................................................................................................................... 28
7. Schéma électrique du robot ................................................................................................................................................... 28
Conclusion ................................................................................................................................................................................................ 29
Annexe ....................................................................................................................................................................................................... 30
Liens utiles et références.................................................................................................................................................................. 30
Codes de projet ................................................................................................................................................................................... 30
Commandes pour la communication du Bluetooth et le démarrage du robot ................................................................. 34
3
Introduction
Ce projet a pour objectif de concevoir et développer un robot mobile détecteur d'obstacles, contrôlable
via une application mobile créée avec MIT App Inventor. Le robot repose sur une architecture
combinant Arduino, ROS (Robot Operating System) et Node-RED, permettant une gestion optimisée
des commandes et des capteurs.
Le robot est équipé d'un capteur ultrason HC-SR04 pour détecter les obstacles et d'un module Bluetooth
HC-05 pour la communication avec l’application mobile. Lorsqu’un obstacle est détecté, un message
d’alerte accompagné d’une image s’affiche directement sur l’application, offrant ainsi un retour visuel
instantané à l’utilisateur.
L’intégration de ROS et Code-RED dans ce projet permet une gestion modulaire des données en
facilitant la communication entre les différents composants du robot. ROS est utilisé pour structurer et
traiter les informations des capteurs, tandis que Code-RED automatise certaines actions et simplifie
l’interface de gestion des commandes.
Ce rapport détaille les différentes étapes du projet, allant du choix du matériel et de l’assemblage du
robot jusqu’à la programmation sous Arduino, l’intégration de ROS et la configuration de Code-RED.
Les tests réalisés permettront d’évaluer les performances du système et d’identifier les améliorations
possibles.
4
Objectif du projet :
Un robot détecte les obstacles grâce à un capteur à ultrasons et envoie ces données au cloud pour
affichage ou analyse en temps réel via une application mobile. L'utilisateur peut également surveiller les
données à distance et contrôler le robot.
Fonctionnalité principale :
Créer un robot autonome capable de détecter des obstacles dans son environnement grâce à un capteur à
ultrasons et de réagir en conséquence (par exemple, s'arrêter, changer de direction, ou envoyer des alertes).
Connectivité au cloud :
Les données capturées par le robot (comme la distance des obstacles, l'état des moteurs, ou la localisation
éventuelle) sont envoyées au cloud (Firebase). Cela permet de :
Contrôle à distance :
L'utilisateur peut surveiller en temps réel les données (distance des obstacles, statut du robot).
Il peut aussi envoyer des commandes à distance pour contrôler le robot via Bluetooth ou via le
cloud (Firebase).
Automatisation et intégration :
Une automatisation des tâches (par exemple, si un obstacle est détecté, le robot peut
automatiquement arrêter ses moteurs).
Une communication fluide entre les différents systèmes (Arduino, ROS, Firebase, application
mobile).
o Apprendre les bases de la robotique, des systèmes embarqués, et des technologies cloud.
o Comprendre l’intégration des capteurs, la communication Bluetooth, et les API cloud.
5
Recherche :
Applications réelles :
o Montrer comment intégrer des dispositifs physiques (robot) avec des services cloud pour
un contrôle et une surveillance en temps réel.
I. ROS
1. Introduction
Le système d'exploitation ROS (Robot Operating System) est une plateforme de développement
largement utilisée pour la programmation de robots. C’est un ensemble d'outils, de bibliothèques et de
conventions permettant de simplifier la création d’applications robotiques complexes. ROS n’est pas un
système d’exploitation en tant que tel, mais plutôt une couche d'abstraction entre le matériel du robot et
les logiciels. Il facilite la communication entre les différents composants du robot, comme les capteurs,
les moteurs, les algorithmes de contrôle, etc.
6
2. Définition et concept
Robot Operating System (ROS), est un ensemble d'outils informatiques sous forme de logiciels libres (le
système est sous licence BSD) open source, permettant de développer des logiciels pour la robotique.
C’est un middleware qui fournit des services comme la gestion des communications interprocessus, la
gestion des périphériques, des bibliothèques logicielles pour la manipulation de capteurs, et des outils
pour la visualisation des données et des résultats.
3. Fonctionnalités
ROS regroupe plusieurs fonctionnalités qui facilitent le développement d'applications souples et
modulables pour la robotique.
7
Actions : Une abstraction plus avancée pour gérer des tâches longue durée où le nœud peut recevoir
des retours intermédiaires tout en continuant à exécuter une tâche.
5. Architecture de communication
ROS offre une architecture souple de communication interprocessus et inter-machine. Les processus ROS
sont appelés des nœuds et chaque nœud peut communiquer avec d'autres via des topics. La connexion
entre les nœuds est gérée par un master et suit le processus suivant :
Un nœud qui publie des données est appelé un Publisher et un nœud qui souscrit à des données est appelé
un subscriber. Un nœud peut être à la fois publisher et subscriber. Les messages envoyés sur les topics
sont pour la plupart standardisés ce qui rend le système extrêmement flexible.
ROS permet une communication inter-machine, des nœuds s'exécutant sur des machines distinctes, mais
ayant connaissance du même master peuvent communiquer de manière transparente pour l'utilisateur.
Modularité : ROS est connu pour sa conception modulaire, qui permet aux développeurs d’intégrer
facilement divers composants logiciels et matériels. Cette modularité facilite la réutilisation du code
dans différents projets, ce qui accélère considérablement le processus de développement.
Outils et bibliothèques : ROS offre de nombreux outils et bibliothèques qui aident à construire et à
simuler des applications robotiques complexes. Ces outils permettent d’effectuer des tâches allant de
la visualisation, de la simulation et de la navigation à la perception, qui sont cruciales pour développer
le comportement des robots intelligents.
Communauté et soutien : L’une des plus grandes forces du ROS est sa communauté dynamique. Des
milliers de développeurs à travers le monde contribuent à ROS, créant un riche référentiel de
8
bibliothèques, d’outils et de tutoriels. Ce soutien communautaire fait de ROS une ressource
inestimable pour les ingénieurs en robotique, qu’ils soient débutants ou expérimentés.
7. ROS et la robotique
ROS facilite la gestion des capteurs (lidar, caméra, IMU), des actionneurs (moteurs, bras robotiques)
et des algorithmes complexes nécessaires pour les robots.
ROS est largement utilisé dans la recherche académique, mais aussi dans l'industrie, notamment dans
les robots mobiles, la robotique industrielle, les drones, et les véhicules autonomes.
ROS1 était la version initiale de ROS, largement adoptée dans la recherche et l'industrie. Cependant, il
présente certaines limitations majeures, telles que la gestion des ressources, l'absence de support natif pour
les communications en tem temps réel et un modèle de communication peu flexible pour les applications
distribuées.
ROS2 a été conçu pour répondre à ces limitations. Il est basé sur le DDS (Data Distribution Service),
un standard pour la communication distribuée qui offre des avantages en termes de scalabilité, sécurité,
et gestion des délais.
Conclusion : ROS2 est désormais la version recommandée pour les nouveaux projets, car il est plus
moderne, plus performant et mieux adapté aux applications industrielles
9
9. Composants principaux de ROS en détail
Roscore
C’est le processus maître de ROS, indispensable pour faire fonctionner un système ROS. Il initialise le
système de communication entre nœuds et gère les services essentiels (par exemple, le gestionnaire de
paramètres et la gestion des nœuds).
bash
roscore
Rqt
Un ensemble d'outils graphiques pour ROS, rqt permet de visualiser des topics, des services, de configurer
des paramètres et de déboguer des applications robotiques.
bash
Rviz
Outil de visualisation 3D pour afficher des informations sur l'état du robot, comme les données de capteurs
(caméras, lidar, etc.) ou les trajectoires planifiées. C’est un outil très utilisé pour l'inspection et le
débogage.
bash
Gazebo
Simulateur de robot en 3D qui permet de tester des algorithmes et des comportements robotiques dans un
environnement virtuel avant de les déployer sur du matériel réel.
bash
Catkin (ROS1) et colcon (ROS2) sont des outils de construction et de gestion de workspace (espace de
travail). Ces outils permettent de compiler et d'installer des paquets ROS.
bash
colcon build
source install/[Link]
10
Rosdep
Outil de gestion des dépendances pour ROS. Il permet d'installer automatiquement les bibliothèques
nécessaires pour vos projets ROS.
bash
rosdep update
rosdep install --from-paths src --ignore-src -r -y
Les étapes pour installer ROS2 Fox sur une distribution Ubuntu 20.04. Vous pouvez adapter selon votre
version d'Ubuntu ou d'autres systèmes (Windows, macOS).
a. Prérequis
1. Installer les outils nécessaires :
bash
bash
bash
b. Installation de ROS2
1. Mettre à jour les dépôts :
bash
bash
11
c. Configurer l'environnement ROS2
Ajouter la configuration à votre fichier. bashrc pour que ROS2 soit initialisé à chaque fois que vous
ouvrez un terminal :
bash
bash
Pour vérifier si ROS2 a été correctement installé, vous pouvez exécuter la commande suivante pour voir
les nœuds et topics actifs :
bash
bash
7. Conclusion
ROS est un puissant middleware pour la robotique qui vous permet de développer des applications
robotiques complexes tout en vous offrant une abstraction du matériel. Que vous soyez un chercheur, un
ingénieur en robotique ou un amateur, ROS vous offre un environnement flexible et robuste pour
développer, tester et déployer vos applications robotiques.
12
II. Node-Red
1. Présentation du Node-Red
Node-RED, c'est comme une boîte à outils numérique qui permet de créer des applications simplement
en connectant des blocs appelés nœuds. Développé par IBM, cet outil open source offre une interface
intuitive où il suffit de glisser-déposer ces blocs pour créer des flux d'informations.
2. Fonctionnalités principales :
Programmation par flux : Plutôt que d'écrire des lignes de code, on construit des chemins logiques
où chaque bloc représente une action (réception, traitement, ou envoi de données).
Connectivité IoT : Node-RED excelle dans l'intégration d'appareils connectés, permettant de piloter
ou surveiller des systèmes physiques.
Compatibilité large : Il prend en charge de nombreux protocoles comme MQTT, HTTP, ou
WebSocket et communique facilement avec des bases de données.
Extensible : Des milliers de nœuds additionnels sont disponibles pour s’adapter à des besoins
spécifiques.
Interface simple : Même sans grande expérience technique, on peut rapidement créer des flux grâce
à son système en glisser-déposer.
Node-RED fonctionne partout, des petits ordinateurs comme le Raspberry Pi aux serveurs en cloud, en
passant par les PC traditionnels.
Nœuds d'entrée : Ils récupèrent des données (capteurs, fichiers, API externes).
Nœuds de traitement : Ils transforment ou analysent les données (filtres, conversions, calculs).
13
Nœuds de sortie : Ils envoient les résultats vers des cibles comme une base de données, un écran ou
un appareil connecté.
Nœuds de contrôle : Ils permettent de créer des logiques conditionnelles (boucles, déclencheurs).
Tableau de bord interactif : Grâce à des graphiques et jauges, on peut visualiser et piloter les données
en temps réel.
Exemple :
3. Node-RED et ROS
Échange de données : Avec des modules comme node-red-contrib-ros, Node-RED peut envoyer ou
recevoir des messages ROS.
Visualisation et Contrôle : Node-RED offre des interfaces interactives pour surveiller les données
de ROS ou envoyer des commandes (par exemple, diriger un robot via le topic Twist).
Automatisation : En reliant ROS à des outils IoT ou cloud via Node-RED, on peut automatiser les
décisions d'un robot.
Exemple concret : Node-RED reçoit des données de capteurs ROS, traite ces informations, et commande
le mouvement d’un robot en envoyant les instructions nécessaires.
Exemple :
14
4. Node-RED dans un Projet Robotique
En associant Node-RED, ROS et Arduino, on peut concevoir des systèmes robotiques flexibles et
puissants.
Node-RED Dashboard : Interface utilisateur pour surveiller le robot et interagir avec lui en
temps réel.
Exemple :
15
6. Conclusion
1. Node-RED simplifie l’intégration des systèmes complexes en robotique. Il permet de relier
facilement ROS, Arduino, et d’autres outils en utilisant une approche visuelle. Que ce soit pour
analyser des données, automatiser des flux, ou créer des interfaces de contrôle, Node-RED est un
maillon essentiel dans les projets robotiques modernes.
Grâce à sa flexibilité et sa simplicité, Node-RED devient le chef d'orchestre des systèmes Embarqués
intelligents.
III. Firebase
1. Définition
Firbose est une plateforme développée par Google pour faciliter le développement d'applications
mobiles et web. Elle propose une suite complète de services backend pour aider les développeurs à
créer, gérer et déployer des applications sans avoir à gérer l'infrastructure côté serveur et
utilise NoSQL pour héberger des bases de données.
16
Authentification
Firebase Authentication permet d'authentifier les utilisateurs via email, téléphone, Google,
Facebook, ou d'autres services tiers (OAuth).
Hébergement
Firebase Hosting offre un hébergement rapide et sécurisé pour les applications web et les fichiers
statiques (HTML, CSS, JavaScript).
Stockage
Cloud Storage permet de stocker et de servir des fichiers (images, vidéos, etc.) via Google Cloud.
Fonctions Cloud
Cloud Functions permet d'exécuter du code côté serveur en réponse à des événements déclenchés
par Firebase (ex. ajout de données, authentification, etc.).
Notifications et messagerie
Firebase Cloud Messaging (FCM) permet d'envoyer des notifications push vers les appareils
iOS, Android ou des applications web.
Analyse
Firebase Analytics offre des analyses détaillées sur l'utilisation de votre application et le
comportement des utilisateurs.
Tests et performances
Firebase Remote Config permet de modifier les paramètres de l'application sans la redéployer.
Firebase A/B Testing permet d'expérimenter et d'optimiser les fonctionnalités.
Avantages de Firebase :
Rapidité : Accès facile à une suite complète de services backend pour démarrer rapidement.
Scalabilité : Les services sont conçus pour gérer un grand nombre d'utilisateurs simultanément.
Intégration facile : Compatible avec les plateformes iOS, Android et Web.
17
Tarification flexible : Modèle "Pay-as-you-go" avec un niveau gratuit généreux.
18
IV. MIT App inventer
1. Définition
AppInventor est un logiciel développé par le MIT (le créateur de Scratch). Ce logiciel permet aux
débutants de créer des applications Android sans connaissance de codage. L'application transforme
l'assemblage de blocs graphiques en code Java pour un smartphone ou une tablette Android (comme pour
scratch). Ne fonctionne que pour Android. Ainsi, vous pourrez réaliser vos applications, mais aussi vos
objets connectés via une carte arduino, picaxe, LEGO NXT et maintenant le mBot par exemple.
AppInventor peut s'utiliser en ligne, c'est à dire que vous devrez vous connecter à votre compte Google
pour pouvoir l'utiliser, mais aussi en version logiciel portable sur votre ordinateur. Il existe 3 façons de
voir le rendu de votre application nouvellement créée, à l'aide de l'émulateur Android intégré, par Wi-fi
ou en connectant votre tablette ou smartphone Android via le port USB. Pour avoir un visuel en temps
réel des modifications apportées sur votre application, le mode wi-fi ou USB et donc à privilégier.
Il existe donc 3 mode pour gérer la vision de votre application sur votre tablette : par Wi-fi, par émulateur
intégré ou par USB.
Le plus simple étant par Wi-Fi, vous devez juste télécharger l'application AI2 Compagnon App sur votre
tablette (QR Code en bas de page). Vous pouvez également récupérer le fichier APK (fichier exécutable
sur Android) grâce au QR code.
Création d’application :
19
Cette interface d'application a été créée pour contrôler un robot et détecter des obstacles. Voici une
description de ses éléments :
1. Disposition et contrôle :
o L'écran est organisé en une disposition de type "croix directionnelle", avec des boutons
disposés autour d'un bouton central.
F (Forward) : Avancer.
B (Backward) : Reculer.
2. Éléments d'interface :
o Deux étiquettes (Label1 et Label2) affichent l'état du robot, par exemple "status" ou des
messages spécifiques (comme la détection d'obstacles).
o Les boutons sont colorés (jaune pour les directions, rouge pour le bouton d'arrêt) pour une
meilleure visibilité.
3. Propriétés visuelles :
o L'arrière-plan de l'application est noir, ce qui rend les éléments plus visibles.
o L'alignement horizontal et vertical est centré pour une interface symétrique et intuitive.
20
Ce schémas représente la logique de programmation pour contrôler un robot via l'application, en utilisant
App Inventor. Voici une description détaillée des blocs visibles :
o Chaque bouton (gauche, droite, avant, arrière, stop) est relié à un bloc "when [Button]
Click".
o Lorsque l'utilisateur clique sur un bouton, une valeur spécifique est enregistrée dans la
base de données FirebaseDB1 avec le tag "data" :
21
3. Interactions avec Firebase :
o FirebaseDB1 est utilisé pour envoyer les commandes du robot en fonction des actions de
l'utilisateur.
o FirebaseDB2 est utilisé pour surveiller les retours d'information en temps réel, comme la
détection d'obstacles.
o Les blocs sont bien structurés pour répondre aux interactions utilisateur (contrôles) et aux
retours de l'environnement (détection d'obstacles).
Cette interface met en place un système bidirectionnel : l'utilisateur contrôle le robot, et l'application
reçoit des informations sur l'environnement (obstacles) via la base de données Firebase, rendant le
système interactif et réactif.
V. ARDUINO IDE
1. Présentation du logiciel
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
Enfin, une console affichant les résultats de la compilation du code source, des opérations sur la carte,
etc.
22
2. Structure d’un programme
Dans chaque partie d'un programme sont utilisées différentes instructions issues de la syntaxe du
langage Arduino.
23
VI. Partie Materiel
1. Robot mobile
b) Moteurs DC
Un moteur à courant continu (DC) est un type de moteur électrique qui convertit l'énergie électrique (en
courant continu) en énergie mécanique. Il est couramment utilisé dans les applications de robotique pour
entraîner les roues ou d'autres éléments mobiles d'un robot.
Le moteur DC fonctionne grâce à l'interaction entre un champ magnétique généré par un aimant ou un
électroaimant et un courant électrique circulant dans l'enroulement du rotor. Cette interaction produit une
force de rotation, appelée couple.
24
1. Rotor (ou armature) : Partie mobile qui tourne.
2. Stator : Partie fixe contenant l'aimant ou l'électroaimant.
3. Balais et collecteur : Assurent la commutation et la transmission du courant électrique au rotor.
Idéal pour des applications nécessitant une force importante (comme déplacer un robot).
Pour contrôler un moteur DC dans un robot, on utilise souvent un module de contrôle des moteurs
comme le L298N ou le TB6612FNG.
Contrôle de base :
Le module L298N est un Double Pont-H destiné au contrôle de moteur (H-Bridge Motor Driver). Il est
basé sur le composant L298N. C'est un module extrêmement utile pour le contrôler de robots et
ensembles mécanisés. Il peut contrôler deux moteur courant continu ou un moteur pas-à-pas 4 fils 2
phases. Il est conçu pour supporter des tensions plus élevés, des courants importants tout en proposant
une commande logique TTL (basse tension, courant faibles, idéal donc pour un microcontrôleur).
25
2. Carte microcontrôleur Arduino UNO
Arduino est la marque d'une plateforme de prototypage open-source qui permet aux utilisateurs de créer
des objets électroniques interactifs à partir :
Cartes microcontrôleurs (matériel) : Utilisées pour lire des entrées (capteurs, boutons) et contrôler des
sorties (moteurs, LED).
IDE Arduino (logiciel) : Un environnement de programmation basé sur C/C++ permettant d'écrire,
compiler et télé verser des programmes sur la carte.
E/S analogiques : 6
Mémoire Flash : 32 Ko
Caractéristiques : Idéale pour les débutants. Compatible avec la plupart des shields. Port USB standard.
3. Capteurs
Dimensions : 45 mm x 20 mm x 15 mm
Broches de connexion
Vcc = Alimentation +5 V DC
4. Module de communication
27
5. Source d'énergie
6. Divers
28
Conclusion
Ce projet a permis de concevoir un robot mobile autonome et interactif, capable d’être piloté via une
application mobile et d'afficher des alertes en cas d'obstacles. L'utilisation combinée de ROS, Code-
RED et Arduino a facilité la gestion et la communication entre les différents modules du robot, rendant
son fonctionnement plus fluide et efficace.
Malgré ces succès, plusieurs pistes d’amélioration peuvent être envisagées. L’ajout d’un mode de
navigation autonome avec évitement intelligent des obstacles, une meilleure gestion des ressources
processeur via ROS, ou encore une connexion Wi-Fi pour un contrôle à distance plus avancé pourraient
être des évolutions intéressantes.
En conclusion, ce projet constitue une base solide pour l’exploration de systèmes robotiques
intelligents, combinant capteurs, communication sans fil et automatisation. Il ouvre la voie à des
développements futurs dans les domaines de la robotique embarquée et des systèmes autonomes.
29
Annexe
Forum ROS :
[Link]
GitHub de ROS :
[Link]
Simulateur Gazebo :
[Link]
[Link]
Reference
[Link]
Codes de projet
Code Arduino (Contrôle Robot)
#include <ros.h>
#include <std_msgs/Int32.h>
// Variables globales
30
int startFlag = 0;
ros::NodeHandle nh;
if (state == 2) {
Backward(); // Aller en arrière
startFlag = 1;
} else if (state == 3) {
turnLeft(); // Tourner à gauche
startFlag = 1;
} else if (state == 0) {
Forward(); // Aller en avant
startFlag = 1;
} else if (state == 4) {
turnRight(); // Tourner à droite
startFlag = 1;
} else if (statue == 1) {
stop(); // Arrêter
startFlag = 1;
}
}
std_msgs::Int32 CapteurROS;
ros::Publisher CapteurROSPublisher("Capteur", &CapteurROS);
ros::Subscriber<std_msgs::Int32> EtatROSsubscriber("Etat", &callBackFunctionEtat);
void setup() {
[Link]()->setBaud(9600);
[Link]();
[Link](EtatROSsubscriber);
[Link](CapteurROSPublisher);
31
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
[Link]();
delay(5);
if (startFlag == 1) {
long duration, distance;
32
// Moteur 2 recule (IN3 LOW, IN4 HIGH)
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
void Forward() {
// Moteur 1 avance (IN1 HIGH, IN2 LOW)
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
void turnLeft() {
// Tourner à gauche : Moteur 1 recule, Moteur 2 avance
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 200); // Appliquer une vitesse au moteur 2
}
void turnRight() {
// Tourner à droite : Moteur 1 avance, Moteur 2 recule
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, 200); // Appliquer une vitesse au moteur 1
33
}
void stop() {
// Arrêter tous les moteurs
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
34