Teleguide2012-2 : Différence entre versions

De Wiki de bureau d'études PeiP
(La construction du robot)
(Sources)
 
(19 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 2 : Ligne 2 :
 
Le but de ce Bureau d'études IMA est de nous faire découvrir une partie du programme, ainsi que la méthode de travail des étudiants de cette spécialité en nous plongeant directement dans la pratique.
 
Le but de ce Bureau d'études IMA est de nous faire découvrir une partie du programme, ainsi que la méthode de travail des étudiants de cette spécialité en nous plongeant directement dans la pratique.
  
Pour cela nous nous sommes attribués une série de mini-projets consistant à réaliser un robot totalement autonome. Tout nos robots sont basés sur une "voiture" à laquelle nous devons nous débrouiller pour y intégrer différentes fonctions.
+
Pour cela nous nous sommes attribués une série de mini-projets consistant à réaliser un robot totalement autonome. Tout nos robots sont basés sur une "voiture" à laquelle nous devons intégrer différentes fonctions.
  
 
La suite de cette page portera sur le robot téléguidé, qui repose sur une idée simple : commander un robot à moyenne distance à partir d'un appareil tel qu'un téléphone (à vrai dire la manipulation peut se faire depuis quelque appareil que ce soit dans la mesure où il est équipé d'un module Wi-Fi et d'un navigateur internet).
 
La suite de cette page portera sur le robot téléguidé, qui repose sur une idée simple : commander un robot à moyenne distance à partir d'un appareil tel qu'un téléphone (à vrai dire la manipulation peut se faire depuis quelque appareil que ce soit dans la mesure où il est équipé d'un module Wi-Fi et d'un navigateur internet).
 
  
 
== La construction du robot ==
 
== La construction du robot ==
 +
<include nopre noesc src="/home/pedago/ppeip/include/video-RobotTéléguidé2-2012-iframe.html" />
 +
<br style="clear: both;">
 
Comme la majorité d'entre nous, j'ai d'abord commencé par suivre le manuel LEGO MindStorms pour créer une première base de mon robot, qui s'avère être une bonne initiative étant donné que cette base est particulièrement adapté à la fonction première des robots qui est de se déplacer de façon autonome.  
 
Comme la majorité d'entre nous, j'ai d'abord commencé par suivre le manuel LEGO MindStorms pour créer une première base de mon robot, qui s'avère être une bonne initiative étant donné que cette base est particulièrement adapté à la fonction première des robots qui est de se déplacer de façon autonome.  
  
Par la suite il fut nécessaire d'adapter cette base en fonction du matériel nécessaire à utiliser et des fonctions secondaires à apporter. Pour ma part, le module de contrôle des moteurs (le NXT), ainsi qu'une FoxBoard (modèle G20), sont nécessaires à la réalisation du robot téléguidé. Bien sûr, il faut rajouter à cela les outils nécessaires à la communication entre les différents terminaux à savoir des dongles Bluetooth et Wi-Fi. Une Webcam est également embarquée, pas indispensable mais tout de même très utile pour le pilotage.  
+
Par la suite il fut nécessaire d'adapter cette base en fonction du matériel nécessaire à utiliser et des fonctions secondaires à apporter. Pour ma part, le module de contrôle des moteurs (le <tt>NXT</tt>), ainsi qu'une <tt>FoxBoard</tt> (modèle G20), sont nécessaires à la réalisation du robot téléguidé. Bien sûr, il faut rajouter à cela les outils nécessaires à la communication entre les différents terminaux à savoir des dongles Bluetooth et Wi-Fi. Une Webcam est également embarquée, pas indispensable mais tout de même très utile pour le pilotage.  
  
 
<gallery>
 
<gallery>
Ligne 16 : Ligne 17 :
 
file:RL_robotV1.jpg|Version 1 du robot
 
file:RL_robotV1.jpg|Version 1 du robot
 
file:RL_robotV1Piles.jpg|Le changement des piles n'est pas aisé
 
file:RL_robotV1Piles.jpg|Le changement des piles n'est pas aisé
file:RL_robotV1Vide.jpg|Le robot débarassé du NXT et FoxBoard
+
file:RL_robotV1Vide.jpg|Le robot débarrassé du NXT et FoxBoard
 
</gallery>
 
</gallery>
  
Ligne 29 : Ligne 30 :
 
'''Principe de fonctionnement'''
 
'''Principe de fonctionnement'''
  
Comme nous l'avons vu précédemment, plusieurs éléments sont intégrés au robot. Le premier est le NXT dont le rôle est d'actionner les moteurs pour déplacer le robot. Pour cela le NXT reçoit par Bluetooth des messages envoyés par la FoxBoard. Ces messages sont envoyés grâce grâce à une page internet qui est stockée dans la mémoire de la FoxBoard et accessible par Wi-Fi depuis un terminal quelconque.
+
Comme nous l'avons vu précédemment, plusieurs éléments sont intégrés au robot. Le premier est le <tt>NXT</tt> dont le rôle est d'actionner les moteurs pour déplacer le robot. Pour cela le <tt>NXT</tt> reçoit par Bluetooth des messages envoyés par la <tt>FoxBoard</tt>. Ces messages sont envoyés grâce grâce à une page internet qui est stockée dans la mémoire de la <tt>FoxBoard</tt> et accessible par Wi-Fi depuis un terminal quelconque.
  
  
 
'''Programmation du boîtier NXT'''
 
'''Programmation du boîtier NXT'''
  
Les fonctions de déplacement contenues dans le NXT s'articulent autour d'un algorithme simple. Ceci m'a permis d'utiliser le logiciel de programmation fourni avec le pack LEGO MindStorms, basé sur une programmation en LabView (langage de programmation graphique). Je peux d'ailleurs dire également que c'est un moyen de programmation qui est peu intuitif mais reste cependant efficace. D'autres solutions de programmation existent comme NXC qui est un langage basé sur le C et adapté pour fonctionner avec les boîtiers NXT.
+
Les fonctions de déplacement contenues dans le <tt>NXT</tt> s'articulent autour d'un algorithme simple. Ceci m'a permis d'utiliser le logiciel de programmation fourni avec le pack <tt>LEGO MindStorms</tt>, basé sur une programmation en <tt>LabView</tt> (langage de programmation graphique). Je peux d'ailleurs dire également que c'est un moyen de programmation qui est peu intuitif mais reste cependant efficace. D'autres solutions de programmation existent comme <tt>NXC</tt> qui est un langage basé sur le C et adapté pour fonctionner avec les boîtiers <tt>NXT</tt>.
  
Pour revenir à l'algorithme même, il se décompose comme suit :
+
Pour revenir à l'algorithme même, le mode basique se décompose comme suit :
  
[[Fichier:RL_progLego1.jpg|400px|thumb|right|Programme final v1]]
+
[[Fichier:RL_progLego1.jpg|400px|thumb|right|Programme final basique]]
  
  
Ligne 57 : Ligne 58 :
  
  
<br/><br/>
+
Pour ce qui est du mode total, il suffit simplement d'ajouter un cas n°5 qui récupérera les instructions pour contrôler la puissance à fournir par les moteurs :
 +
 
 +
[[Fichier:RL_progLego3.jpg|600px|thumb|center|Modèle d'instructions pour le moteur A pour le cas 5]]
 +
 
 +
 
 +
            5: Récupérer et envoyer les valeurs pour les moteurs
 +
 
 +
 
 +
Il faut cependant faire attention au fait que les blocs moteurs ne prennent que la valeur absolue du nombre envoyé pour la puissance. Par conséquent il faut vérifier le signe des valeurs reçues avant de les envoyer aux blocs moteurs qui seront alors programmés pour avancer ou reculer.
 +
 
 +
 
 
'''Programmation de la FoxBoard G20'''
 
'''Programmation de la FoxBoard G20'''
  
La FoxBoard est un 'mini' ordinateur fonctionnant sous Linux, il est donc possible de la configurer afin de lui faire faire ce que l'on souhaite. En se connectant à la FoxBoard (en ethernet ou par Wi-Fi), il est possible d'y enter des commandes dans un terminal depuis une machine classique sous Linux, grâce à la commande exécutée en mode Super Utilisateur (su) :
+
La <tt>FoxBoard</tt> est un 'mini' ordinateur fonctionnant sous <tt>Linux</tt>, il est donc possible de la configurer afin de lui faire faire ce que l'on souhaite. En se connectant à la <tt>FoxBoard</tt> (en Ethernet ou par Wi-Fi), il est possible d'y enter des commandes dans un terminal depuis une machine classique sous <tt>Linux</tt>, grâce à la commande exécutée en mode Super Utilisateur (su) :
 
   ssh root@192.168.100.1  ou  ssh root@192.168.1.1
 
   ssh root@192.168.100.1  ou  ssh root@192.168.1.1
 
La commande change selon le type de connexion (filaire ou non).
 
La commande change selon le type de connexion (filaire ou non).
A partir de la, nous sommes en mesure de naviguer dans l'arborescence de la FoxBoard, régler différents paramètres ou encore accéder à diverses informations.
+
A partir de , nous sommes en mesure de naviguer dans l'arborescence de la <tt>FoxBoard</tt>, régler différents paramètres ou encore accéder à diverses informations.
Par exemple, afin de pouvoir se connecter par Wi-Fi à notre robot, il est nécessaire de régler l'interface Wi-Fi en mode Master. Cependant l'intérêt principal que j'ai trouvé à me connecter en ssh à la FoxBoard aura été de pouvoir télécharger des fichier pour modifier son site de configuration. Je détaillerais la démarche un peu plus tard.  
+
Par exemple, afin de pouvoir se connecter par Wi-Fi à notre robot, il est nécessaire de régler l'interface Wi-Fi en mode Master. Cependant l'intérêt principal que j'ai trouvé à me connecter en SSH à la <tt>FoxBoard</tt> aura été de pouvoir télécharger des fichiers pour modifier son site de configuration. Je détaillerais la démarche un peu plus tard.  
  
A vrai dire, on ne peut pas vraiment parler de programmation de la FoxBoard, mais plutôt d'une configuration (du moins si on s'en tient à l'objectif de base). On accède à la page de configuration via un navigateur internet, depuis quelque machine que ce soit qui y est connectée, en tapant dans la barre d'adresse :
+
A vrai dire, on ne peut pas vraiment parler de programmation de la <tt>FoxBoard</tt>, mais plutôt d'une configuration (du moins si on s'en tient à l'objectif de base). On accède à la page de configuration via un navigateur internet, depuis quelque machine que ce soit qui y est connectée, en tapant dans la barre d'adresse :
 
   192.168.100.1  ou  192.168.1.1
 
   192.168.100.1  ou  192.168.1.1
 
Encore une fois, l'adresse diffère selon le type de connexion employée.
 
Encore une fois, l'adresse diffère selon le type de connexion employée.
  
C'est à partir de cette page que l'on lance les différents scripts préchargés pour contrôler le robot. C'est aussi là que se trouve la page de contrôle qui envoie les ordres au boitier NXT.
+
C'est à partir de cette page que l'on lance les différents scripts préchargés pour contrôler le robot. C'est aussi là que se trouve la page de contrôle qui envoie les ordres au boîtier <tt>NXT</tt>.
 +
 
 +
 
 +
'''Modification de l'interface web'''
 +
 
 +
Une fois la programmation du <tt>NXT</tt> terminée ainsi que la configuration de la <tt>FoxBoard</tt>, j'ai pu commencer à m'amuser avec mon robot en le contrôlant grâce à mon téléphone. Je me suis alors rendu compte que l'interface du site était très peu appréciable sur un tel appareil qui n'offre qu'un écran de quelque pouces. J'ai alors imaginé une interface plus épurée et mieux pensée pour un téléphone qui consiste simplement à superposer les boutons de contrôle du robot au dessus de l'image diffusée par la Webcam. J'ai pour cela utilisé les fichiers source qui sont disponibles ici [[https://peip-ima.polytech-lille.net:40001/archive/legowww-2012.tar]].
 +
 
 +
 
 +
[[Fichier:RL_screenMobile.png|400px|thumb|center|Interface revue pour les mobiles]]
 +
 
 +
 
 +
Pour utiliser les fichiers créés dans la <tt>FoxBoard</tt>, il faut les transférer. On y parvient grâce à <tt>SCP (Secure Copy Protocol)</tt> qui permet de transférer des fichiers entre des machines <tt>Linux</tt> des fichiers en SSH. La commande :
 +
  scp file.txt root@192.168.100.1:/home/folder
 +
Copiera le fichier <tt>file.txt</tt> dans le dossier <tt>/home/folder</tt> de la machine <tt>192.168.100.1</tt>.
 +
 
  
 +
'''Contrôle par accéléromètre'''
  
Une fois la programmation du NXT terminée ainsi que la configuration de la FoxBoard, j'ai pu commencer à m'amuser avec mon robot en le contrôlant grâce à mon téléphone. Je me suis alors rendu compte que l'interface du site était très peu appréciable sur un tel appareil qui n'offre qu'un écran de quelque pouces. J'ai alors imaginé une interface plus épurée et mieux pensée pour un téléphone qui consiste simplement à superposer les boutons de contrôle du robot au dessus de l'image diffusée par la WebCam.
+
Via l'interface mobile, la rose des vents du mode total est remplacée par un contrôle via l'accéléromètre. Il suffit de verrouiller l'orientation de l'écran du téléphone et pencher le téléphone afin de déplacer le robot. Ce mode a aussi l'avantage de débarrasser l'écran de toutes commandes pouvant gêner la vue de la Webcam. Ce mode fonctionne sur les appareils mobiles pourvus du système d'exploitation Android et fonctionne également sur iOS (cependant la vidéo ne semble pas fonctionner).
  
'''''Screenshot nécessaire'''''
+
Pour ce qui est de la partie technique, ce système de contrôle est réalisé simplement grâce à un eventListener utilisé dans un fichier JavaScript associé à la page de la version mobile. Pour faire simple, ce listener récupère les valeurs des angles selon 3 axes de l'espace qui informent sur l'orientation du téléphone. Ces valeurs sont ensuite converties pour donner un cap et une vitesse
 +
aux moteurs du robot.
  
Pour la suite, une amélioration est en cours de développement et permettrait de contrôler le robot grâce au gyroscope/accéléromètre (?) qui équipe maintenant la majorité des appareils mobiles.
+
== Sources ==
 +
Je recommande vivement lors de la réalisation des projets de consulter les wikis des autres groupes et aussi des projets réalisées lors des années précédentes.
 +
De plus je mets ici à disposition les fichiers sources écrits ou modifiés pour ce projet [[Fichier:Accelerometre.zip]].

Version actuelle datée du 3 juin 2013 à 08:38

Objectifs

Le but de ce Bureau d'études IMA est de nous faire découvrir une partie du programme, ainsi que la méthode de travail des étudiants de cette spécialité en nous plongeant directement dans la pratique.

Pour cela nous nous sommes attribués une série de mini-projets consistant à réaliser un robot totalement autonome. Tout nos robots sont basés sur une "voiture" à laquelle nous devons intégrer différentes fonctions.

La suite de cette page portera sur le robot téléguidé, qui repose sur une idée simple : commander un robot à moyenne distance à partir d'un appareil tel qu'un téléphone (à vrai dire la manipulation peut se faire depuis quelque appareil que ce soit dans la mesure où il est équipé d'un module Wi-Fi et d'un navigateur internet).

La construction du robot


Vidéo HD


Comme la majorité d'entre nous, j'ai d'abord commencé par suivre le manuel LEGO MindStorms pour créer une première base de mon robot, qui s'avère être une bonne initiative étant donné que cette base est particulièrement adapté à la fonction première des robots qui est de se déplacer de façon autonome.

Par la suite il fut nécessaire d'adapter cette base en fonction du matériel nécessaire à utiliser et des fonctions secondaires à apporter. Pour ma part, le module de contrôle des moteurs (le NXT), ainsi qu'une FoxBoard (modèle G20), sont nécessaires à la réalisation du robot téléguidé. Bien sûr, il faut rajouter à cela les outils nécessaires à la communication entre les différents terminaux à savoir des dongles Bluetooth et Wi-Fi. Une Webcam est également embarquée, pas indispensable mais tout de même très utile pour le pilotage.

Après avoir intégré sur le robot tout le matériel nécessaire, je me suis rendu compte à quel point l'ensemble était lourd et déséquilibré. De plus un 3ème moteur provenant du modèle de base de la documentation restait inutilisé. J'ai donc procédé à une révision du châssis pour aboutir à une version finale du robot (du moins au niveau matériel).

La programmation

Principe de fonctionnement

Comme nous l'avons vu précédemment, plusieurs éléments sont intégrés au robot. Le premier est le NXT dont le rôle est d'actionner les moteurs pour déplacer le robot. Pour cela le NXT reçoit par Bluetooth des messages envoyés par la FoxBoard. Ces messages sont envoyés grâce grâce à une page internet qui est stockée dans la mémoire de la FoxBoard et accessible par Wi-Fi depuis un terminal quelconque.


Programmation du boîtier NXT

Les fonctions de déplacement contenues dans le NXT s'articulent autour d'un algorithme simple. Ceci m'a permis d'utiliser le logiciel de programmation fourni avec le pack LEGO MindStorms, basé sur une programmation en LabView (langage de programmation graphique). Je peux d'ailleurs dire également que c'est un moyen de programmation qui est peu intuitif mais reste cependant efficace. D'autres solutions de programmation existent comme NXC qui est un langage basé sur le C et adapté pour fonctionner avec les boîtiers NXT.

Pour revenir à l'algorithme même, le mode basique se décompose comme suit :

Programme final basique


  Tant que vrai
     Recevoir message bluetooth
     Associer la valeur du message à une variable
     Si nouveau message
        Comparaison de la valeur du message
           0: Arrêt
           1: Avancer
           2: Reculer
           3: Tourner à gauche
           4: Tourner à droite
        Fin comparaison
     Fin si
     Envoi message de confirmation
  Fin tant que


Pour ce qui est du mode total, il suffit simplement d'ajouter un cas n°5 qui récupérera les instructions pour contrôler la puissance à fournir par les moteurs :

Modèle d'instructions pour le moteur A pour le cas 5


           5: Récupérer et envoyer les valeurs pour les moteurs


Il faut cependant faire attention au fait que les blocs moteurs ne prennent que la valeur absolue du nombre envoyé pour la puissance. Par conséquent il faut vérifier le signe des valeurs reçues avant de les envoyer aux blocs moteurs qui seront alors programmés pour avancer ou reculer.


Programmation de la FoxBoard G20

La FoxBoard est un 'mini' ordinateur fonctionnant sous Linux, il est donc possible de la configurer afin de lui faire faire ce que l'on souhaite. En se connectant à la FoxBoard (en Ethernet ou par Wi-Fi), il est possible d'y enter des commandes dans un terminal depuis une machine classique sous Linux, grâce à la commande exécutée en mode Super Utilisateur (su) :

  ssh root@192.168.100.1  ou  ssh root@192.168.1.1

La commande change selon le type de connexion (filaire ou non). A partir de là, nous sommes en mesure de naviguer dans l'arborescence de la FoxBoard, régler différents paramètres ou encore accéder à diverses informations. Par exemple, afin de pouvoir se connecter par Wi-Fi à notre robot, il est nécessaire de régler l'interface Wi-Fi en mode Master. Cependant l'intérêt principal que j'ai trouvé à me connecter en SSH à la FoxBoard aura été de pouvoir télécharger des fichiers pour modifier son site de configuration. Je détaillerais la démarche un peu plus tard.

A vrai dire, on ne peut pas vraiment parler de programmation de la FoxBoard, mais plutôt d'une configuration (du moins si on s'en tient à l'objectif de base). On accède à la page de configuration via un navigateur internet, depuis quelque machine que ce soit qui y est connectée, en tapant dans la barre d'adresse :

  192.168.100.1  ou  192.168.1.1

Encore une fois, l'adresse diffère selon le type de connexion employée.

C'est à partir de cette page que l'on lance les différents scripts préchargés pour contrôler le robot. C'est aussi là que se trouve la page de contrôle qui envoie les ordres au boîtier NXT.


Modification de l'interface web

Une fois la programmation du NXT terminée ainsi que la configuration de la FoxBoard, j'ai pu commencer à m'amuser avec mon robot en le contrôlant grâce à mon téléphone. Je me suis alors rendu compte que l'interface du site était très peu appréciable sur un tel appareil qui n'offre qu'un écran de quelque pouces. J'ai alors imaginé une interface plus épurée et mieux pensée pour un téléphone qui consiste simplement à superposer les boutons de contrôle du robot au dessus de l'image diffusée par la Webcam. J'ai pour cela utilisé les fichiers source qui sont disponibles ici [[1]].


Interface revue pour les mobiles


Pour utiliser les fichiers créés dans la FoxBoard, il faut les transférer. On y parvient grâce à SCP (Secure Copy Protocol) qui permet de transférer des fichiers entre des machines Linux des fichiers en SSH. La commande :

  scp file.txt root@192.168.100.1:/home/folder

Copiera le fichier file.txt dans le dossier /home/folder de la machine 192.168.100.1.


Contrôle par accéléromètre

Via l'interface mobile, la rose des vents du mode total est remplacée par un contrôle via l'accéléromètre. Il suffit de verrouiller l'orientation de l'écran du téléphone et pencher le téléphone afin de déplacer le robot. Ce mode a aussi l'avantage de débarrasser l'écran de toutes commandes pouvant gêner la vue de la Webcam. Ce mode fonctionne sur les appareils mobiles pourvus du système d'exploitation Android et fonctionne également sur iOS (cependant la vidéo ne semble pas fonctionner).

Pour ce qui est de la partie technique, ce système de contrôle est réalisé simplement grâce à un eventListener utilisé dans un fichier JavaScript associé à la page de la version mobile. Pour faire simple, ce listener récupère les valeurs des angles selon 3 axes de l'espace qui informent sur l'orientation du téléphone. Ces valeurs sont ensuite converties pour donner un cap et une vitesse aux moteurs du robot.

Sources

Je recommande vivement lors de la réalisation des projets de consulter les wikis des autres groupes et aussi des projets réalisées lors des années précédentes. De plus je mets ici à disposition les fichiers sources écrits ou modifiés pour ce projet Fichier:Accelerometre.zip.