Localisation des Nao
Abstract
Le projet de localisation des robots Nao a été réalisé par Mathieu GARDIN, apprenti en DUT Génie Electrique et Informatique Industrielle auprès de Endress-Hauser Flowtec AG.
Introduction
Les robots Nao sont une avancée innovante dans la robotique. Grâce à sa panoplie de capteurs et d’articulations mécaniques, il se rapproche des fonctionnalités de l’être humain. On y retrouve entre autre un moyen vocal de répondre à des injonctions, des capteurs pour pouvoir entendre la voix, une fonction « visuelle » pour observer son environnement à l’aide de caméras ainsi que des capteurs permettant aux Naos de marcher. La majorité des fonctionnalités du Nao le destinent à une interaction avec son environnement extérieur. Cependant, à l’heure actuelle, aucun système n’existe pour pouvoir créer une fonction de géo-localisation dans cet environnement. A travers cette présentation, nous allons chercher à développer cette fonctionnalité et ainsi élargir les possibilités du Nao.
Présentation du Sujet
Pouvoir localiser un Nao lors de ces déplacements dans une pièce, tels a été le projet qui nous a été confié par Mr CUDEL. L’intérêt de ce projet résidait de pouvoir localiser à l’aide d’une interface graphique doublé par un serveur de base de données. L’objectif est que le Robot Nao puisse écrire dans la base de donnée et que l’interface graphique située dans un navigateur internet puisse effectuer une demande auprès de la base de donnée et se mettre à jour automatiquement.
Pour la réalisation du projet, on utilisera un raspberry pi 2 model b qui hébergera la base de donnée et sera connecté à l’aide d’une clée 3G sur le routeur pour communiquer avec le robot Nao
Organisation du Projet
La réalisation de ce projet a suivis un ordre précis:
Phase de concept :
- Évaluation de la problématique actuelle et des solutions à mettre en place
- Réflexion sur les langages de programmation à utiliser
- Découverte et Apprentissage de l’utilisation des outils numériques (Raspberry pi 2 model b)
Analyse des fonctionnalités:
- Création d’une base de donnée
- Création d’une interface graphique
- Création d’un moyen de communication entre Raspberry et Nao
- Mise à jour automatique de l’interface graphique
- Intégration des données spatio-temporel du Robot
Création de la partie design :
- Réalisation d’un plan de la pièce
- Intégration des balises sur l’environnement graphique
Intégration des fonctionnalités :
- Mise en place de la base de donnée
- Intégration de l’interface graphique au navigateur Web
- Utilisation de la communication entre Robot et Raspberry
Phase de test:
- Test des fonctionnalités
- Correction des erreurs
Cahier des Charges
Base de donnée | |
La question de la base de donnée a surtout été conditionné par un choix technologique. MySQL ou SQlite. Dans un premier temps, il était prévu de partir sur une base de donnée en MySQL mais après quelques recherches, il a été montré que l’utilisation de SQlite économiserait les ressources du Raspberry | |
Interface / Gestion base de donnée | |
Pour pouvoir créer les bases de données et les organiser, le choix s’est porté sur l’interface Phpmyadmin. Un outil conçu en PHP permettant l’administration des bases de données. Travaillant sur un système Linux, il était plus facile d’utiliser cet outil que de passer par l’invite de commande. | |
Interface graphique | |
Pour la création du plan d’une salle de Tp, on a utilisé un logiciel d’architecture appelé Kozikaza, permettant de re-constituer la salle de travaux pratiques avec ces obstacles et ces dimensions | |
Langages de programmations | |
Concernant les langages de programmation, plusieurs solutions ont été proposés. On pouvait utiliser un langage python presque exclusivement ou se porter sur des langages de programmation de type Web => PHP, HTML, AJAX, et JAVASCRIPT. L’objectif de ce projet étant de travailler sur une interface graphique Web, il a été décidé d’utiliser PHP, HTML, AJAX, et JAVASCRIPT |
|
Communication |
|
La communication entre le robot Nao et le Raspberry se fera à l’aide d’un protocole de type UDP. Le robot enverra sa position dans une chaîne de caractère qui sera ensuite traduit par une table de transcodage au niveau du raspberry |
Développement
PHPmyadmin
L’utilisation de PHPmyadmin se fait en local sur le raspberry : 127.0.0.1
Sur les besoins de ce projet, il a été demandé 3 types de données:
- La première se base sur quel robot Nao envoie les données
- La deuxième concerne le jour et l’heure à laquelle les informations ont été envoyés
- La troisième nous renseignera sur la position du robot, si il se trouve à la balise 1, 2, 3 ou 4. Ces « balises » seront placés à différents endroits dans la pièce
Dans notre cas, on pouvait créer les tables de données manuellement, une pour chaque information ou programmer en SQL la création automatique de ces tables (visible ci-dessous en rouge). Pour les besoins du test, il a été décidé de créer une auto-incrémentation des données comme détaillés dans le document ci-dessous en bleu.
— phpMyAdmin SQL Dump — version 4.4.14 — http://www.phpmyadmin.net — — Client : 127.0.0.1 — Généré le : Ven 22 Avril 2016 à 08:51 — Version du serveur : 5.6.26 — Version de PHP : 5.5.28SET SQL_MODE = « NO_AUTO_VALUE_ON_ZERO »; SET time_zone = « +00:00 »; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */;– — Base de données : `projet` —- ———————————————————- — Structure de la table `event` —CREATE TABLE IF NOT EXISTS `event` ( `ID` int(11) NOT NULL, `robot` int(11) NOT NULL, `position` int(11) NOT NULL, `date` datetime NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=latin1;– — Index pour les tables exportées —- — Index pour la table `event` — ALTER TABLE `event` ADD PRIMARY KEY (`ID`);– — AUTO_INCREMENT pour les tables exportées —- — AUTO_INCREMENT pour la table `event` — ALTER TABLE `event` MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=82; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
- La table Robot identifie quel Nao a envoyé l’information
- La position correspond à quelle balise a été repéré le robot
- La date elle nous indique donc la position temporelle du robot
Plan de la salle de travaux pratiques
Le design de l’interface graphique réalisé à l’aide du logiciel d’architecture prend en compte une partie du mobilier de la salle ainsi que ces dimensions.
Dans le cadre du projet, il a été intégré de manière très simple 4 balises numérotés de 1 à 4 avec des couleurs différentes représentant les positions du robot Nao comme montré dans l’image ci-dessous :
Programmation PHP / HTML
La programmation de l’interface graphique et de sa communication avec le raspberry s’est effectué avec code en PHP. Le principe est d’initier la communication en lui donnant les « username » et « password » de PHPmyadmin pour aller lire ce qui est écrit dans la base de donnée
<?php // Create connection // Check connection
|
Une fois que la connexion est effectué, on utilise un code en Jquery pour rentrer dans notre table « event ».
else{ //QUERY if (isset($_POST[‘reset’])) { $query = ‘TRUNCATE TABLE event’; $mysqli->query($query); } $query = ‘SELECT * FROM event LIMIT 10’;//QUERY $result = $mysqli->query($query); $num = mysqli_num_rows($result);$array = array(); //TEST if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { array_push($array, $row); } } //print_r($array); } |
Le reste de la programmation s’effectue en HTML pour pouvoir donner « vie » à l’interface graphique et implémenter les données sur la plate-forme Web
Perspectives / Difficultés rencontrées
Une des premières difficultés a été l’installation et la mise à jour des logiciels sur le raspberry. L’intégration de PHPmyAdmin et du langage SQL à l’aide de la console linux intégrée a montré des réticences et a entraîné une perte de temps importante. La communication UDP qui devait s’ajouter comme partie finale du projet n’a finalement pas pu être réalisée par un manque de temps et une adaptation du code difficile à mettre en œuvre à notre niveau.
Les perspectives si la communication UDP était correctement installée et que le traitement des informations en provenance du Robot Nao se réalisait sans conflit, permettrait une étude de la localisation du robot sur une plus grande échelle. On pourrait travailler sur le bâtiment B en entier et pas juste au niveau de la salle de travaux pratiques.
Par la suite, l’intérêt du projet deviendrait plus prononcé si le raspberry émettrait des ordres de déplacements aux robots Nao. La localisation avec les capteurs du robot permettrait de créer un système d’acquisition quand le Nao arrive à destination.
Enfin en dernier lieu, transformer cette plate-forme Web pour l’intégrer dans une application Android permettant une utilisation mobile du projet.
Bilan
Par ce projet, j’ai eu la plaisir de pouvoir travailler sur des langages de programmation qui m’était jusqu’à lors inconnu. J’ai pu acquérir des compétences de programmation en base de données (SQL), langages Web (Ajax, Jquery, HTML, PHP, Javascript et CSS). Ce défi de travailler dans d’autres langages de programmation était une source de difficultés en plus mais m’a permis de créer un défi personnel pour la réalisation de ce projet.
Il est vrai qu’à l’heure actuelle, la localisation du robot Nao s’arrête à une simulation avec la plate-forme Web et il est toujours décevant d’un point de vue personnel de ne pouvoir mener à 100% la réalisation d’un projet. Mais les bases ont été crées et fonctionnent sans erreur. Pouvoir améliorer ces bases et en faire la naissance de nouveaux projets pour de futurs réalisations justifie le besoin d’un tels projet et surtout son importance dans l’enseignement du GEII.
A ce titre, je tiens à remercier Mr Cudel d’avoir autorisé la réalisation de ce projet même en étant seul dessus. Cela m’a permis de réaliser ce projet personnel de travailler avec des outils Web et pouvoir appréhender le croisement entre Robotique et environnement Web.