Robot Centaure 2013 : Différence entre versions

De Wiki d'activités IMA
(Semaine 3)
(Résultat)
 
(59 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
<include nopre noesc src="/home/pedago/pimasc/include/video-Centaure2013-iframe.html" />
 +
__TOC__
 +
<br style="clear: both;">
 
==  Présentation ==  
 
==  Présentation ==  
  
Ligne 20 : Ligne 23 :
 
* Affichage de messages sur l'écran du robot afin de le rendre plus "sympathique" pour le grand public. (ex: smiley, photo, ...)
 
* Affichage de messages sur l'écran du robot afin de le rendre plus "sympathique" pour le grand public. (ex: smiley, photo, ...)
  
[[Fichier:120202_kinect_windows2.jpg]]
+
[[Fichier:120202_kinect_windows2.jpg|500px|thumb|center|Vue Eclatée]]
  
 
''' Partie Robot: '''
 
''' Partie Robot: '''
Ligne 28 : Ligne 31 :
 
* Réglage du problème lié à la présence d'une roue folle à l'avant du robot qui entraîne des déviations de trajectoire lors de la remise en marche de celui-ci.
 
* Réglage du problème lié à la présence d'une roue folle à l'avant du robot qui entraîne des déviations de trajectoire lors de la remise en marche de celui-ci.
 
          
 
          
[[Fichier:200px-Robot_centaure.jpg|200px|thumb|center|Vue Eclatée]]
+
[[Fichier:200px-Robot_centaure.jpg|400px|thumb|center|Vue Eclatée]]
  
 
== Avancement du projet ==
 
== Avancement du projet ==
Ligne 34 : Ligne 37 :
 
=== Semaine 1 ===
 
=== Semaine 1 ===
  
Lors de cette première semaine, nous avons effectué des recherches sur le Robot Centaure en testant et en étudiant le rapport édité précédemment, afin de mieux comprendre son fonctionnement:
+
 
*Installantion touts les outils nécessaires pour executer le programme. ex. IDE, GTK 2++, Video.h etc.   
+
Lors de cette première semaine, nous avons effectué des recherches sur le Robot Centaure en étudiant le rapport édité précédemment, afin de mieux comprendre son fonctionnement:
 +
*Installation de tous les outils nécessaires pour executer le programme. ex. IDE, GTK 2++, Video.h etc.   
 
*Lien pour télécharger la bonne version des libraries et le logiciel IDE:
 
*Lien pour télécharger la bonne version des libraries et le logiciel IDE:
 
  > IDE : http://arduino.cc/en/main/software ou utilisez sudo apt-get install arduino
 
  > IDE : http://arduino.cc/en/main/software ou utilisez sudo apt-get install arduino
 
  > GTK 2++ : sudo apt-get install gtk2
 
  > GTK 2++ : sudo apt-get install gtk2
Sachant que l'on a besoin de créer et réparer l'application GUI, il faut écrire un programme ainsi qu'un makefile en dehor des répertoires existants pour tester. Pour compiler executer le code qui utilise la package GTK2++, voir lien :  
+
Sachant que l'on a besoin de créer et réparer l'application GUI, il faut écrire un programme ainsi qu'un makefile en dehors des répertoires existants pour tester. Pour compiler executer le code qui utilise la package GTK2++, voir lien :  
 
  > http://gtk.developpez.com/cours/gtk2/
 
  > http://gtk.developpez.com/cours/gtk2/
Prise en main d'utilisation du logiciel IDE:
+
Prise en main du logiciel IDE:
  
[[Fichier:ide.png|400px|thumb|center|Vue Eclatée]]
+
[[Fichier:ide.png|300px|thumb|center|Vue Eclatée]]
  
Pendant la première semaine, nous avons trouvé que les codes sont étoitement liés ensemble, et que la compréhension des codes est très importante pour démarrer le robot. Pour la semaine 2, nous allons étudier le code pour Arduino ainsi que le code pour la partie Informatique.
+
Pendant la première semaine, nous avons trouvé que les codes sont étroitement liés, et que la compréhension des codes est très importante pour démarrer le robot. Pour la semaine 2, nous allons étudier le code Arduino ainsi que le code pour la partie Informatique.
 +
 
 +
Afin de comprendre le fonctionnement du robot et de pouvoir mener a bien le projet une longue phase d'analyse du robot a été nécessaire. Pour cela l'aide des IMA5 ayant travailler sur ce projet l'an dernier c'est révélé très utile.
 +
 
 +
Le robot est composé de nombreuse partie reliées électriquement entre elle: Batterie, Moteur et roue, Arduino, PC, Capteur IR, Boite à fusible, Kinect. Apres une rapide phase de vérification tous les parties semble correctement branchées et reliées entre elles.
  
 
=== Semaine 2 ===
 
=== Semaine 2 ===
  
Pendant cette semaine, nous avons étudié les fonnctionnements du Robot Centaure. Nous avons compris que :  
+
Pendant cette semaine, nous avons étudié le fonctionnement du Robot Centaure. Nous avons compris que :  
 
Pour lancer la fenêtre de kinect, il faut ajouter  
 
Pour lancer la fenêtre de kinect, il faut ajouter  
 
  > make -video  
 
  > make -video  
 
pour la compilation.
 
pour la compilation.
  
[[Fichier:fenetrekinect.png]]
+
[[Fichier:fenetrekinect.png|400px|thumb|center|Vue Eclatée]]
  
Pour arrêter le Robot dans le cas d'urgence, il faut tirer le boutton rouge
+
Pour arrêter le Robot dans le cas d'urgence, il faut appuyer sur le bouton rouge
  
[[Fichier:bouttonrouge.jpg]]
+
[[Fichier:bouttonrouge.jpg|400px|thumb|center|Vue Eclatée]]
  
Pour alimenter le Robot il faut
+
Pour alimenter le Robot il faut brancher la pince rouge a droite et la pince noire a gauche, une inversion des deux pinces peut endommager les batteries
  
[[Fichier:batterie.jpg]]
+
[[Fichier:batterie1.jpg|400px|thumb|center|Vue Eclatée]]
 +
[[Fichier:batterie2.jpg|400px|thumb|center|Vue Eclatée]]
  
''Limit:''
+
''Limite:''
Sachant que la carte de mère de l'ordinateur de ce robot est cassée le semestre précédent, nous travaillons sur notre PC pour tester le code. Mais notre PC n'est pas assez puissant pour lancer le Kinect, c'est à dire que le programme s'arrête brutalement quelque fois, nous devons attendre l'arrivée d'une nouvelle carte de mère pour tester la partie Kinect.
+
Sachant que la carte mère de l'ordinateur de ce robot a été cassé le semestre précédent, nous travaillons sur notre PC pour tester le code. Mais notre PC n'est pas assez puissant pour lancer le Kinect, c'est à dire que le programme s'arrête brutalement quelque fois, nous devons attendre l'arrivée d'une nouvelle carte mère pour tester la partie Kinect.
Il prendra 36 heures pour charger le Robot en batterie pleine, en vue de cela, nous avons décidé de travailler sur le code avant de tester le Robot, pour que l'on ne gaspiller pas trop de battrie pour rien faire.
+
Le robot prend 36 heures pour etre chargé totalement, nous avons donc décidé de travailler sur le code avant de tester le Robot, pendant chaque séance le robot est mis en charge jusqu'à ce que les batteries soient totalement pleines.
  
 
=== Semaine 3 ===
 
=== Semaine 3 ===
Pendant cette semaine, nous avons travaillé pour réparer le fonctionnement de télécommande de ce Robot. Après avoir effectué plusieurs tests , nous avons trouvé que:
+
Pendant cette semaine, nous avons travaillé sur le fonctionnement du robot par télécommande. Après avoir effectué plusieurs tests , nous avons trouvé que:
  
 
*La communication entre la carte Arduino et le Robot  
 
*La communication entre la carte Arduino et le Robot  
 
  > PROBLÈME DE TIMEOUT  
 
  > PROBLÈME DE TIMEOUT  
  
*La communication entre le télécommande et le PC :
+
*La communication entre la télécommande et le PC :
La communication entre le télécommande et le PC se divise en deux parties:
+
La communication entre la télécommande et le PC se divise en deux parties:
 
Dans le fichier gestionIrc.c :
 
Dans le fichier gestionIrc.c :
Cette partie de code sert à récupérer les commandes envoyés par le télécommande. Le problème est que le programme n'affiche pas les commandes qu'il a reçu, cela veut dire que les commandes ne sont pas pris en compte.
+
Cette partie de code sert à récupérer les commandes envoyés par la télécommande. Le problème est que le programme n'affiche pas les commandes qu'il a reçu, cela veut dire que les commandes ne sont pas prises en compte.
  
> switch(commande){
+
<pre>
> case 9 : printf("\ngestionIrc : stop");write(tubeSIHM[1],ARRET,ARRET_SIZE);strcpy(cmdPipe, CMD_PIPE_STOP); break;
+
  switch(commande){
> case 201 : printf("\ngestionIrc : avance"); write(tubeSIHM[1],AVANCER,AVANCER_SIZE);strcpy(cmdPipe, CMD_PIPE_AVANCER);break;
+
  case 9 : printf("\ngestionIrc : stop");write(tubeSIHM[1],ARRET,ARRET_SIZE);strcpy(cmdPipe, CMD_PIPE_STOP); break;
> case 73 : printf("\ngestionIrc : reculer"); write(tubeSIHM[1],RECULER,RECULER_SIZE);strcpy(cmdPipe, CMD_PIPE_RECULER);break;
+
  case 201 : printf("\ngestionIrc : avance"); write(tubeSIHM[1],AVANCER,AVANCER_SIZE);strcpy(cmdPipe, CMD_PIPE_AVANCER);break;
> case 169 : printf("\ngestionIrc : droite 45"); strcpy(cmdPipe, CMD_PIPE_DROITE_45);break;
+
  case 73 : printf("\ngestionIrc : reculer"); write(tubeSIHM[1],RECULER,RECULER_SIZE);strcpy(cmdPipe, CMD_PIPE_RECULER);break;
> case 41 : printf("\ngestionIrc : gauche 45"); strcpy(cmdPipe, CMD_PIPE_GAUCHE_45);break;
+
  case 169 : printf("\ngestionIrc : droite 45"); strcpy(cmdPipe, CMD_PIPE_DROITE_45);break;
> ...
+
  case 41 : printf("\ngestionIrc : gauche 45"); strcpy(cmdPipe, CMD_PIPE_GAUCHE_45);break;
 +
  ...
 +
</pre>
  
 
Dans le fichier gestionSerie.c :
 
Dans le fichier gestionSerie.c :
Cette partie de code sert à récupérer les commande envoyés par l'un des quatres tubes, et puis les envoient vers la carte Arduino. Le problèm est que, quand on lance le programme, il n'a rien reçu.  
+
Cette partie de code sert à récupérer les commande envoyés par l'un des quatre tubes, et puis les envoi vers la carte Arduino. Le problème est que, quand on lance le programme, il ne recoit rien.  
  
[[Fichier:image_fonc_1.png]]
+
[[Fichier:image_fonc_1.png|800px|thumb|center|Vue Eclatée]]
  
 
''Objectif de semaine 4:''  
 
''Objectif de semaine 4:''  
Ligne 99 : Ligne 110 :
 
Pendant cette semaine, nous avons travaillé sur les probmèmes que l'on a trouvé pendant la semaine précédente.  
 
Pendant cette semaine, nous avons travaillé sur les probmèmes que l'on a trouvé pendant la semaine précédente.  
  
D'abord, nous avons touvé que les ports définies ne correspondent pas à notre PC, nous avons changé le port  de télécommande , et puis le programme a pu recevoir les commandes envoyés par le télécommande.
+
D'abord, nous avons trouvé que les ports définis ne correspondent pas à notre PC, nous avons changé le port  de télécommande , et puis le programme a pu recevoir les commandes envoyés par le télécommande.
  
  > #define PORTCOMM1 "dev/ttyUSB0"  
+
<pre>
 +
  #define PORTCOMM1 "dev/ttyUSB0"  
 +
</pre>
  
 
''Dans le fichier gestionIrc.c''
 
''Dans le fichier gestionIrc.c''
  
[[Fichier:image_exec_irc.png]]
+
[[Fichier:image_exec_irc.png|800px|thumb|center|Vue Eclatée]]
  
 
Ensuite, nous avons changé le port de Arduino:
 
Ensuite, nous avons changé le port de Arduino:
  
> #define PORTCOMM2 "dev/ttyACM0"  
+
<pre>
 +
  #define PORTCOMM2 "dev/ttyACM0"  
 +
</pre>
  
Il n'y a plus de problème de TIMEOUT.Nous avons essayé d'envoyer des commandes directement en utilisant le minicom, et nous avons trouvé que le Robot reçoit les commandes mais son comportement ne correspond au code de Arduino.  
+
Il n'y a plus de problème de TIMEOUT. Nous avons essayé d'envoyer des commandes directement en utilisant le minicom, et nous avons trouvé que le Robot reçoit les commandes mais son comportement ne correspond pas aux touches de la télécommande tel qu'elles sont définies dans le rapport précédent.  
  
> EXPLICATION DES PROBS TROUVÉS PAR CLÉMENT(CE QUI MARCHE ET CE QUI NE MARCHE PAS)
+
En effet les commandes envoyées par le PC jusqu'à l'arduino ne sont pas les même que celles définies dans le programme arduino. Il a donc été nécessaire de modifier le programme arduino pour obtenir le comportement voulu. De plus le code Arduino contient des fonctions liées à l'utilisation d'une boussole pour corriger la trajectoire du robot. Hors cette boussole n'est plus présente sur le robot. Certaine partie du programme tel "avancer" ou "tourner de 90 degré" ne sont donc plus fonctionnelles. Nous avons supprimer les partie de code en question et les avons réécrites, certaines autres partie du code ont été simplifiées au passage
  
Mais le programme gestionSerie.c ne reçoit toujours rien, cela veut dire que il n'y a toujours rien dans le tube.  
+
Cependant le programme gestionSerie.c ne reçoit toujours rien, cela veut dire que il n'y a toujours rien dans le tube.  
  
[[Fichier:code_tubeIS.png]]
+
[[Fichier:code_tubeIS.png|800px|thumb|center|Vue Eclatée]]
  
 
'Le programme n'execute pas cette partie de code'
 
'Le programme n'execute pas cette partie de code'
  
Après avoir étudié l'ensemble de codes, nous avons trovué que les commandes ne sont pas écrits dans le tube ''tubeIS[0]''. Pour résoudre ce problème, nous avons modifié le code dans le fichiers gestionIrc.c pour que les commandes soient écrits dans le tube:
+
Après avoir étudié l'ensemble de codes, nous avons trouvé que les commandes ne sont pas écrites dans le tube ''tubeIS[0]''. Pour résoudre ce problème, nous avons modifié le code dans le fichier gestionIrc.c pour que les commandes soient écrites dans le tube:
  
[[Fichier:code_ecrit_tubeIS.png]]
+
[[Fichier:code_ecrit_tubeIS.png|800px|thumb|center|Vue Eclatée]]
  
Nous avons aussi modifié le fichier gesitonSerie.c , pour que le programme puisse choisir entres les quatres tubes correctement:
+
Nous avons aussi modifié le fichier gesitonSerie.c , pour que le programme puisse choisir entres les quatre tubes correctement:
  
 
[[Fichier:code_select.png]]
 
[[Fichier:code_select.png]]
  
Il y a trois façpon de communiquer avec le robot:  
+
Il y a trois façons de communiquer avec le robot:
  *Par Kinect
+
   
  *Par Télécommande
+
1) Par la tube Kinect
  *Par Une application Android  
+
  2) Par la tube Télécommande
 
+
  3) Par la tube WS,en utilisant une application Android  
[[Fichier:image_fonc_2.png]]
 
 
 
Nous avons aussi modifié le code de la partie Arduino:
 
  
> EXPLIQUATION DES MODIFICATIONS FAIT PAR CLÉMENT
+
[[Fichier:image_fonc_2.png|800px|thumb|center|Vue Eclatée]]
  
Après les modifications, nous avons réussit à faire contrôler le Robot en utilisant le télécommande.
+
Après les modifications, nous avons réussit à contrôler le Robot en utilisant la télécommande.
Mais nous avons trouvé que …
 
> EXPLIQUATION DES PROBLÈMES DU ROBOT QUAND IL BOUGE...
 
 
 
[[Fichier:exec_global.png]]
 
  
 +
Nous avons effectué des tests sur le robot, le comportement global du robot est satisfaisant, cependant les problèmes d'adhérences des roues sur le sol de l'école et la présence de la roue folle à l'avant l’empêche de se déplacer de façon totalement rectiligne ou entraîne une légère déviation au départ. Une solution doit être trouvée pour régler ce défaut.
  
 
=== Semaine 5 ===
 
=== Semaine 5 ===
  
Pendant cette semaine, nous avons travaillé sur la partie IHM de code, pour que le robot puisse afficher les images correspondents quands il avance, tourner à droite, à gauche...etc.
+
Pendant cette semaine, nous avons travaillé sur la partie IHM du code, pour que le robot puisse afficher les images correspondantes quand il avance, tourne à droite, à gauche...
  
 
Nous avons travaillé principalement sur deux fichiers, gestionIhm.c et gestionEcouteIhm.c . Les codes sont déjà écrit mais ils ne fonctionnent pas correctement, le programme ne charge pas d'image.  
 
Nous avons travaillé principalement sur deux fichiers, gestionIhm.c et gestionEcouteIhm.c . Les codes sont déjà écrit mais ils ne fonctionnent pas correctement, le programme ne charge pas d'image.  
Pour résoudre ce problème, nous avons pris connaissance d'utilisation l'outil GTK 2++. Voir lien pour le tuto:       
+
Pour résoudre ce problème, nous avons pris connaissance de l'utilisation de l'outil GTK 2++. Voir lien pour le tuto:       
  
 
  > http://gtk.developpez.com/cours/gtk2/
 
  > http://gtk.developpez.com/cours/gtk2/
  
En gros , GTK est un outil pour créer des interfaces graphics. Après les modifications, le programme charge une image en acceuillant l'utilisateur.
+
En gros , GTK est un outil pour créer des interfaces graphiques. Après les modifications, le programme charge une image lors du lancement du robot par l'utilisateur.
  
[[Fichier:200px-robot_ready.jpg]]
+
[[Fichier:robot_ready.jpg|400px|thumb|center|Vue Eclatée]]
  
''Objectif de Semaine 6 :'' Ecrire des codes pour qu'il puisse charger plusieurs images.
+
Nous avons aussi étudié plusieurs solution pour régler les problemes de déplacement du robot. Plusieurs solutions ont été envisagé mais la seule réalisable est l'utilisation d'une boussole dans le robot qui détecte les modifications de trajectoire du robot lors d'un déplacement en ligne droite. Le programme arduino va ensuite modifier la vitesse de rotation des roues pour corriger cette erreur de trajectoire. La boussole utilisée l'an dernier n'est pas assez précise il faut donc en chercher une nouvelle.
 +
 
 +
''Objectif de Semaine 6 :'' Ecrire des codes pour qu'il puisse charger plusieurs images, trouver une boussole assez précise.
  
 
=== Semaine 6 ===
 
=== Semaine 6 ===
  
Pendant cette semaine, nous avons travaillé sur la partie de GTK.  
+
Pendant cette semaine, nous avons travaillé sur la partie GTK.  
  
Nous avons créer une image de dépannage pour que l'utilisateur puisse facilemment résoudre les problèmes rencontré.  
+
Nous avons créer une image de dépannage pour que l'utilisateur puisse facilement résoudre les problèmes rencontrés.  
  
[[Fichier:tuotuo.jpg|400px|thumb|center|Vue Eclatée]]
+
[[Fichier:depannage1.jpg|800px|thumb|center|Vue Eclatée]]
 +
[[Fichier:depannage2.jpg|800px|thumb|center|Vue Eclatée]]
  
Dans le programme gestionEcouteIhm, le programme 'Ecoute' les commandes viennent de télécommande, et charge les images correpondants. Touts les images sont chargées dans le vecteur images au début de programme principale. Voir fichier centaure.c
+
Dans le programme gestionEcouteIhm, le programme 'Ecoute' les commandes venant de la télécommande, et charge les images correpondantes. Touts les images sont chargées dans le vecteur images au début du programme principale. Voir fichier centaure.c
  
 
[[Fichier:code_charge_avancer.png]]
 
[[Fichier:code_charge_avancer.png]]
  
'Une partie de code dans le fichier  gestionEcouteIhm.c'
+
'Une partie du code dans le fichier  gestionEcouteIhm.c'
  
  
Nous avons voulu de charger l'image de dépannage quand il y a une appuie sur le clé D, mais l'image de dépannage sont décalée et nous somme en train de résoudre ce problème.
+
Nous avons voulu charger l'image de dépannage quand il y a un appui sur le clé D, mais l'image de dépannage est décalée et nous sommes en train de résoudre ce problème.
 +
 
 +
Nous avons aussi décidé d'utiliser le modèle de boussole HMC6352 pour ce projet, sa résolution est d’environ 1 degré ce qui est largement suffisant pour ce projet (la résolution de l'ancienne boussole était de 3 degrés). Maintenant que la boussole est choisie il faut s'occuper de la régulation de la trajectoire du robot a l'aide de celle-ci.Il a été décidé que l'utilisation d'une commande floue serait le meilleur moyen d'assurer la précision des trajectoires du robot.
  
 
=== Semaine 7 ===
 
=== Semaine 7 ===
  
Pendant cette semaine, nous avons installé la carte de mère d'un nouveau ordinateur.  
+
Pendant cette semaine, nous nous sommes occupé de l'installation de l'ordinateur définitif pour le projet. L'espace dans le robot étant très limité et deja bien occupé nous avons récupéré la carte mère de l'ordinateur de l'an dernier et l'avons installé dans un nouveau boitier plus petit. L'alimentation en 12V du PC a aussi était refaites car l'ancienne carte n'était plus en état de fonctionnement. Une fois le PC testé nous l'avons installé sur le robot pour la fin du projet.
 +
 
 +
[[Fichier:nouveauordi.jpg|400px|thumb|center|Vue Eclatée]] (''l'intérieur de l'ordinateur'')
 +
 
 +
Nous avons installé tous les outils pour exécuter le programme sur ce nouvel ordinateur. Le robot gagne grandement en autonomie et la partie Kinect peut enfin être testé. Il a aussi fallu changer un fusible du robot car l'alimentation du PC consomme 5A et le fusible ne pouvait en supporter que 3. Lors du test de la partie Kinect on s'est aperçu que l'écran du robot centaure s'éteignait aléatoirement, après remplacement du câble de l'écran ce problème est en grande partie résolu.
 +
 
 +
La commande floue pour la gestion de la trajectoire a aussi été réalisé, l'absence de boussole ne nous permet pas de la tester.
 +
 
 +
=== Semaine 8 ===
 +
 
 +
La dernière semaine de projet à été consacré a la réalisation de nombreux tests sur le robot afin de s'assurer de son bon fonctionnement. Le comportement global du robot est satisfaisant, mais certains détails sont encore à améliorer.
 +
 
 +
Nous avons aussi réussit à récupérer les informations renvoyées par le robot sur le niveau des batteries:
  
[[Fichier:nouveauordi.jpg]]
+
[[Fichier:niveau de batterie.png|400px|thumb|center|Vue Eclatée]]
  
Nous avons pu installé touts les outils pour exécuter le programme sur ce nouveau ordinateur. Après avoir installé ce nouveau ordinateur, nous avons améliorer la mobilité du Robot, car l'ordinateur est alimenté par les battries dans le Robot.
+
== Résultat ==
  
> DETAILLE À AJOUTER...
+
==== Compte Rendu ====
 +
Rapport Robot Centaure:
 +
[[Fichier:Rapport_Robot_Centaure.pdf]]
  
 +
==== Code de la partie Logiciel====
 +
 +
Code Source Partie Communiquante:
 +
> [[Fichier:Partie Communiquante.zip]]
 +
 +
==== Code de la partie Arduino ====
  
=== Semaine 8 ===
 
  
INSTALLATION D'UN NOUVEAU
+
Code Source Partie Arduino:
+
  > [[Fichier:Partie Arduino.zip]]
  > DETAILLE À AJOUTER...
 

Version actuelle datée du 4 juin 2014 à 06:06


Vidéo HD


Présentation

Cahier des charges

Le robot de grande taille ou robot centaure est un projet qui a été reprit l'an dernier après plusieurs années d'abandon, à l'heure actuelle il est dans un état de fonctionnement correct mais des améliorations doivent lui être apportées afin qu'il puisse remplir sa tache de manière sure et autonome: à savoir se déplacer dans le hall sans danger pour le matériel et les personnes présentes dans celui-ci.


Objectifs principaux

  • Permettre au robot de se déplacer de manière autonome dans le hall de l'école (ou ailleurs) de manière autonome et "fluide".
  • Assurer la fiabilité de fonctionnement du robot d'un point de vue électrique.


Travail à réaliser

Partie Kinect:

  • Améliorer le système de détection des distances à l'aide de la Kinect: Meilleur gestion des "zones d'ombres", augmentation du champ de vision (si possible).
  • Création d'une application afin de faciliter le dépannage du robot en cas de problème.
  • Affichage de messages sur l'écran du robot afin de le rendre plus "sympathique" pour le grand public. (ex: smiley, photo, ...)
Vue Eclatée

Partie Robot:

  • Optimiser le calcul de trajectoire afin que le robot se déplace de manière plus fluide.
  • Optimiser la gestion des capteurs afin que ceux ci soit plus fiable (problème dut a la lumière du jour sur les capteurs infrarouges).
  • Réglage du problème lié à la présence d'une roue folle à l'avant du robot qui entraîne des déviations de trajectoire lors de la remise en marche de celui-ci.
Vue Eclatée

Avancement du projet

Semaine 1

Lors de cette première semaine, nous avons effectué des recherches sur le Robot Centaure en étudiant le rapport édité précédemment, afin de mieux comprendre son fonctionnement:

  • Installation de tous les outils nécessaires pour executer le programme. ex. IDE, GTK 2++, Video.h etc.
  • Lien pour télécharger la bonne version des libraries et le logiciel IDE:
> IDE : http://arduino.cc/en/main/software ou utilisez sudo apt-get install arduino
> GTK 2++ : sudo apt-get install gtk2

Sachant que l'on a besoin de créer et réparer l'application GUI, il faut écrire un programme ainsi qu'un makefile en dehors des répertoires existants pour tester. Pour compiler executer le code qui utilise la package GTK2++, voir lien :

> http://gtk.developpez.com/cours/gtk2/

Prise en main du logiciel IDE:

Vue Eclatée

Pendant la première semaine, nous avons trouvé que les codes sont étroitement liés, et que la compréhension des codes est très importante pour démarrer le robot. Pour la semaine 2, nous allons étudier le code Arduino ainsi que le code pour la partie Informatique.

Afin de comprendre le fonctionnement du robot et de pouvoir mener a bien le projet une longue phase d'analyse du robot a été nécessaire. Pour cela l'aide des IMA5 ayant travailler sur ce projet l'an dernier c'est révélé très utile.

Le robot est composé de nombreuse partie reliées électriquement entre elle: Batterie, Moteur et roue, Arduino, PC, Capteur IR, Boite à fusible, Kinect. Apres une rapide phase de vérification tous les parties semble correctement branchées et reliées entre elles.

Semaine 2

Pendant cette semaine, nous avons étudié le fonctionnement du Robot Centaure. Nous avons compris que : Pour lancer la fenêtre de kinect, il faut ajouter

> make -video 

pour la compilation.

Vue Eclatée

Pour arrêter le Robot dans le cas d'urgence, il faut appuyer sur le bouton rouge

Vue Eclatée

Pour alimenter le Robot il faut brancher la pince rouge a droite et la pince noire a gauche, une inversion des deux pinces peut endommager les batteries

Vue Eclatée
Vue Eclatée

Limite: Sachant que la carte mère de l'ordinateur de ce robot a été cassé le semestre précédent, nous travaillons sur notre PC pour tester le code. Mais notre PC n'est pas assez puissant pour lancer le Kinect, c'est à dire que le programme s'arrête brutalement quelque fois, nous devons attendre l'arrivée d'une nouvelle carte mère pour tester la partie Kinect. Le robot prend 36 heures pour etre chargé totalement, nous avons donc décidé de travailler sur le code avant de tester le Robot, pendant chaque séance le robot est mis en charge jusqu'à ce que les batteries soient totalement pleines.

Semaine 3

Pendant cette semaine, nous avons travaillé sur le fonctionnement du robot par télécommande. Après avoir effectué plusieurs tests , nous avons trouvé que:

  • La communication entre la carte Arduino et le Robot
> PROBLÈME DE TIMEOUT 
  • La communication entre la télécommande et le PC :

La communication entre la télécommande et le PC se divise en deux parties: Dans le fichier gestionIrc.c : Cette partie de code sert à récupérer les commandes envoyés par la télécommande. Le problème est que le programme n'affiche pas les commandes qu'il a reçu, cela veut dire que les commandes ne sont pas prises en compte.

  switch(commande){
  case 9 : printf("\ngestionIrc : stop");write(tubeSIHM[1],ARRET,ARRET_SIZE);strcpy(cmdPipe, CMD_PIPE_STOP); break;
  case 201 : printf("\ngestionIrc : avance"); write(tubeSIHM[1],AVANCER,AVANCER_SIZE);strcpy(cmdPipe, CMD_PIPE_AVANCER);break;
  case 73 : printf("\ngestionIrc : reculer"); write(tubeSIHM[1],RECULER,RECULER_SIZE);strcpy(cmdPipe, CMD_PIPE_RECULER);break;
  case 169 : printf("\ngestionIrc : droite 45"); strcpy(cmdPipe, CMD_PIPE_DROITE_45);break;
  case 41 : printf("\ngestionIrc : gauche 45"); strcpy(cmdPipe, CMD_PIPE_GAUCHE_45);break;
  ...

Dans le fichier gestionSerie.c : Cette partie de code sert à récupérer les commande envoyés par l'un des quatre tubes, et puis les envoi vers la carte Arduino. Le problème est que, quand on lance le programme, il ne recoit rien.

Vue Eclatée

Objectif de semaine 4: Résoudre les problèmes trouvé pendant la troisième semaine. Essayer de contrôler le Robot avec le télécommande.

Semaine 4

Pendant cette semaine, nous avons travaillé sur les probmèmes que l'on a trouvé pendant la semaine précédente.

D'abord, nous avons trouvé que les ports définis ne correspondent pas à notre PC, nous avons changé le port de télécommande , et puis le programme a pu recevoir les commandes envoyés par le télécommande.

 #define PORTCOMM1 "dev/ttyUSB0" 

Dans le fichier gestionIrc.c

Vue Eclatée

Ensuite, nous avons changé le port de Arduino:

  #define PORTCOMM2 "dev/ttyACM0" 

Il n'y a plus de problème de TIMEOUT. Nous avons essayé d'envoyer des commandes directement en utilisant le minicom, et nous avons trouvé que le Robot reçoit les commandes mais son comportement ne correspond pas aux touches de la télécommande tel qu'elles sont définies dans le rapport précédent.

En effet les commandes envoyées par le PC jusqu'à l'arduino ne sont pas les même que celles définies dans le programme arduino. Il a donc été nécessaire de modifier le programme arduino pour obtenir le comportement voulu. De plus le code Arduino contient des fonctions liées à l'utilisation d'une boussole pour corriger la trajectoire du robot. Hors cette boussole n'est plus présente sur le robot. Certaine partie du programme tel "avancer" ou "tourner de 90 degré" ne sont donc plus fonctionnelles. Nous avons supprimer les partie de code en question et les avons réécrites, certaines autres partie du code ont été simplifiées au passage

Cependant le programme gestionSerie.c ne reçoit toujours rien, cela veut dire que il n'y a toujours rien dans le tube.

Vue Eclatée

'Le programme n'execute pas cette partie de code'

Après avoir étudié l'ensemble de codes, nous avons trouvé que les commandes ne sont pas écrites dans le tube tubeIS[0]. Pour résoudre ce problème, nous avons modifié le code dans le fichier gestionIrc.c pour que les commandes soient écrites dans le tube:

Vue Eclatée

Nous avons aussi modifié le fichier gesitonSerie.c , pour que le programme puisse choisir entres les quatre tubes correctement:

Code select.png

Il y a trois façons de communiquer avec le robot:

1) Par la tube Kinect
2) Par la tube Télécommande
3) Par la tube WS,en utilisant une application Android 
Vue Eclatée

Après les modifications, nous avons réussit à contrôler le Robot en utilisant la télécommande.

Nous avons effectué des tests sur le robot, le comportement global du robot est satisfaisant, cependant les problèmes d'adhérences des roues sur le sol de l'école et la présence de la roue folle à l'avant l’empêche de se déplacer de façon totalement rectiligne ou entraîne une légère déviation au départ. Une solution doit être trouvée pour régler ce défaut.

Semaine 5

Pendant cette semaine, nous avons travaillé sur la partie IHM du code, pour que le robot puisse afficher les images correspondantes quand il avance, tourne à droite, à gauche...

Nous avons travaillé principalement sur deux fichiers, gestionIhm.c et gestionEcouteIhm.c . Les codes sont déjà écrit mais ils ne fonctionnent pas correctement, le programme ne charge pas d'image. Pour résoudre ce problème, nous avons pris connaissance de l'utilisation de l'outil GTK 2++. Voir lien pour le tuto:

> http://gtk.developpez.com/cours/gtk2/

En gros , GTK est un outil pour créer des interfaces graphiques. Après les modifications, le programme charge une image lors du lancement du robot par l'utilisateur.

Vue Eclatée

Nous avons aussi étudié plusieurs solution pour régler les problemes de déplacement du robot. Plusieurs solutions ont été envisagé mais la seule réalisable est l'utilisation d'une boussole dans le robot qui détecte les modifications de trajectoire du robot lors d'un déplacement en ligne droite. Le programme arduino va ensuite modifier la vitesse de rotation des roues pour corriger cette erreur de trajectoire. La boussole utilisée l'an dernier n'est pas assez précise il faut donc en chercher une nouvelle.

Objectif de Semaine 6 : Ecrire des codes pour qu'il puisse charger plusieurs images, trouver une boussole assez précise.

Semaine 6

Pendant cette semaine, nous avons travaillé sur la partie GTK.

Nous avons créer une image de dépannage pour que l'utilisateur puisse facilement résoudre les problèmes rencontrés.

Vue Eclatée
Vue Eclatée

Dans le programme gestionEcouteIhm, le programme 'Ecoute' les commandes venant de la télécommande, et charge les images correpondantes. Touts les images sont chargées dans le vecteur images au début du programme principale. Voir fichier centaure.c

Code charge avancer.png

'Une partie du code dans le fichier gestionEcouteIhm.c'


Nous avons voulu charger l'image de dépannage quand il y a un appui sur le clé D, mais l'image de dépannage est décalée et nous sommes en train de résoudre ce problème.

Nous avons aussi décidé d'utiliser le modèle de boussole HMC6352 pour ce projet, sa résolution est d’environ 1 degré ce qui est largement suffisant pour ce projet (la résolution de l'ancienne boussole était de 3 degrés). Maintenant que la boussole est choisie il faut s'occuper de la régulation de la trajectoire du robot a l'aide de celle-ci.Il a été décidé que l'utilisation d'une commande floue serait le meilleur moyen d'assurer la précision des trajectoires du robot.

Semaine 7

Pendant cette semaine, nous nous sommes occupé de l'installation de l'ordinateur définitif pour le projet. L'espace dans le robot étant très limité et deja bien occupé nous avons récupéré la carte mère de l'ordinateur de l'an dernier et l'avons installé dans un nouveau boitier plus petit. L'alimentation en 12V du PC a aussi était refaites car l'ancienne carte n'était plus en état de fonctionnement. Une fois le PC testé nous l'avons installé sur le robot pour la fin du projet.

Vue Eclatée
(l'intérieur de l'ordinateur)

Nous avons installé tous les outils pour exécuter le programme sur ce nouvel ordinateur. Le robot gagne grandement en autonomie et la partie Kinect peut enfin être testé. Il a aussi fallu changer un fusible du robot car l'alimentation du PC consomme 5A et le fusible ne pouvait en supporter que 3. Lors du test de la partie Kinect on s'est aperçu que l'écran du robot centaure s'éteignait aléatoirement, après remplacement du câble de l'écran ce problème est en grande partie résolu.

La commande floue pour la gestion de la trajectoire a aussi été réalisé, l'absence de boussole ne nous permet pas de la tester.

Semaine 8

La dernière semaine de projet à été consacré a la réalisation de nombreux tests sur le robot afin de s'assurer de son bon fonctionnement. Le comportement global du robot est satisfaisant, mais certains détails sont encore à améliorer.

Nous avons aussi réussit à récupérer les informations renvoyées par le robot sur le niveau des batteries:

Vue Eclatée

Résultat

Compte Rendu

Rapport Robot Centaure: Fichier:Rapport Robot Centaure.pdf

Code de la partie Logiciel

Code Source Partie Communiquante:

> Fichier:Partie Communiquante.zip

Code de la partie Arduino

Code Source Partie Arduino:

> Fichier:Partie Arduino.zip