Mini-drones

De Wiki d'activités IMA
Révision datée du 20 avril 2016 à 14:09 par Acuadros (discussion | contributions) (Partie Programmation:)

Cahier des charges

Encadrant : Xavier Redon

Contexte

La robotique comme l'a prédit Isaac Asimov est présente dans tous les domaines, et à le pouvoir de regrouper la plupart des sciences humaines comme l'informatique et l'électronique, tout en restant un moyen ludo-éducatif. Dans notre cas la société Parrot a développé plusieurs drones, et nous avons la chance à travers ce projet d'en utiliser deux, un roulant et volant.

Présentation général du projet

L'objectif de ce projet est de coordonner deux drones.

  • Le drone roulant sera piloté à distance
  • Le drone volant suivra à une certaine altitude le drone roulant en utilisant une caméra embarquée.

Notre but sera de :

  • Contrôler le drone roulant à l’aide d’une interface Web. une interface web intuitive d’utilisation sera utilisé afin de faciliter la prise en main.
  • Déplacer le drone volant. Le kit de développement ARDroneSDK nous permettra de le contrôler à distance et de récupérer les informations telles que les images des caméras, l’altitude et son inclinaison
  • Apprendre à utiliser le tracking du drone volant avec ARDroneSDK
  • Paramétrer les conditions de vol pour le drone volant
  • Gérer la communication Wifi entre les drones et l’ordinateur
  • Délimiter un espace de travail et de test.
  • Synchroniser les drones entre eux

Matériel nécessaire:

Pour mener à bien ce projet, nous aurons besoin :

  • Kit de développement ARDroneSDK
  • Drones de la société Parrot


Amélioration possible:

  • Porter l’application sur tablette ou mobile Android

Schéma Drone (1).png



Avancement du Projet :

du 25 Janvier au 22 Février Installation du SDK Parrot sur les systèmes Linux et OSX
du 22 Février au 29 Février Test des deux drones et analyse des programmes téléchargés
du 29 Février au 7 Mars Recherche sur l'utilisation d'OpenCV (pour le suivit de la JumpingSumo) et différentes librairies permettant d'obtenir les images et les vidéos prisent par la RollingSpider.
du 7 Mars au 20 Mars Creation d'un site html afin de piloter les drones à l'aide d'une interface.

Réalisation d'un client/serveur.

du 20 Mars au 27 Mars Finalisation du site html afin de piloter les drones à l'aide d'une interface.

But du Projet :

le drône volant devra suivre le drone roulant : Pour ce faire, le drône volant analyse les images reçues en suivant le drône roulant de dessus, l'image devra être respectée, c'est à dire que la position de la JumpingSumo devra être identique, si ce n'est pas le cas, la rollingSpider interagira en fonction de la position du drône roulant sur l'image précédente et rectifiera l'image . Nous utiliserons dans ce cas la programmation en OpenCv.

Le SDK :

Tout d’abord, nous nous sommes occupé de l'installation du SDK en suivant le site :“http://developer.parrot.com/docs/bebop/?java#how-to-build-the-sdk”.


Build du SDK :

Pour cela, nous avons utilisé un système d’exploitation OSX Yosemite ainsi que Linux.

Après l’utilisation de cette commande, on télécharge tous les autres dépôts en exécutant la commande: repo sync

  • Télecharger toutes les sources du SDK en fonction du système d’exploitation utilisé.
  • une fois le build.sh créé, on l'exécute.

Si des bibliothèques sont manquantes, il suffit de les télécharger en s’aidant d’Internet pour obtenir les noms exacts.

Une fois toutes ces étapes effectuées, nous pouvons récupérer les programmes des drônes concernés dans notre répertoire : “/monrepertoire/out/Unix-base/staging/usr/bin” Une fois les programmes compilés, les drônes peuvent être contrôlés à l’aide du clavier.

Configuration du SDK :

Nous avons eu quelques problèmes concernant l’installation du SDK, principalement sur le système d’exploitation Linux. En effet, certaines bibliothèques étaient manquantes et des erreurs survenaient régulièrement. Ensuite, une fois le programme compilé, celui-ci n’arriveépas à obtenir le chemin de certaines librairies, il suffisait donc de rajouter le chemin suivant : LD_LIBRARY_PATH=/monrepertoire/out/Unix-base/staging/usr/lib:$LD_LIBRARY_PATH

Exécution du SDK :

Caractéristiques des drones :

Caractéristiques RollingSpider JumpingSumo
Portée Jusqu'à 20 mètres. Jusqu'à 50 mètres.
Connectivité Technologie Bluetooth Smart, V4.0 BLE (Bluetooth Low Energy). Génère son réseau WiFi® (AC) 2.4 ou 5 Ghz.
Stabilité Un capteur ultrasons,un gyroscope 3 axes et d’un accéléromètre 3 axes. Centrale inertielle avec un gyroscope et un accéléromètre.
Batterie Lithium-Polymer et amovible. Autonomie de 8 minutes et recharge complète en 90 minutes. Lithium-Polymer et amovible. Autonomie de 20 minutes et recharge complète en 90 minutes.
Indicateur Des LED bicolores indiquent le statut de la Rolling Spider. Des yeux lumineux indiquent le statut du Jumping Sumo.
Caméra Une caméra verticale et d’un capteur de pression. Le flux est retransmis, en streaming, sur l’écran du smartphone ou tablette de pilotage Résolution : 640 x 480 px, 15 images par seconde.
Vitesse Roule à 2 m/s (7 km/h).

Partie Programmation:

La rolling spider est complexe à programmer en langage C. Nous avons un problème avec la programmation du Bluetooth, parce que la rolling spider utilise le BLE (Bluetooth Low Energy) et parrot dans sa librairie ARNetwork n’a pas développer sur Linux.

Premier objectif : Récupérer les images et les vidéos de la RollingSpider à l'aide de la librairie : Node.js. Second objectif : Détection d'une forme spécifique sur la JumpingSumo à l'aide d'OpenCV. Une fois la détection effectuer,le drone volant pourra adapter sa position en fonction du déplacement du drone roulant.

Programmation de l'application :


Il faut installer 3 librairies:

-> npm install rolling-spider lien web #### https://github.com/voodootikigod/node-rolling-spider

-> npm install opencv lien web #### https://github.com/peterbraden/node-opencv

-> npm install git+https://github.com/forgeByAcision/node-sumo lien web #### https://github.com/forgeByAcision/node-sumo

La programmation se fait en Node.js (JavaScript). Nous avons dû se tourner vers le JavaScript parce que Parrot n'a pas développer de version BLE dans son API (lib ARNetwork) sur Standalone, nous ne disposons donc pas des protocoles BLE pour la rolling spider mais des développeurs on fait cela sur Node.js et ne voulant pas réinventer la roue (faute de temps) nous allons programmer l'application en Node.js

Il va falloir ajouter une "forme" spéciale afin que notre rolling spider détecte la jumping sumo. Un exemple est disponible en openCV à l'adresse : -> lien web #### https://github.com/peterbraden/node-opencv/blob/master/examples/detect-shapes.js

Mise à jour :

Après plusieurs recherches, La Rolling Spider doit être contrôler par bluetooth, mais lors de la conversion de l'app mode JS parr navigateur, la librairie "node_bluetooth_hci_socket" est introuvable. Donc l'idée est de créer un serveur-client entre la page web ( client ) et le Mac ( serveur):

Client serveur.jpg

Nous avons pu s'apercevoir que l'obtention de la vidéo ou voir même de la photo à l'aide de la caméra sur la RollingSpider n'était pas possible. En effet, le drone utilise la caméra comme fonction interne pour décoller et n'est donc pas utilisable. L'idée est donc d'utiliser la caméra de la JumpingSumo pour obtenir des informations afin d'avoir la possibilité de suivre la RollingSpider.

Pour cela nous avons la possibilité d'utiliser du langage Node.js pour obtenir les informations provenant de la caméra.


Création de la page web permettant le contrôle des drones :

Site.jpg

NodeJS:

Noble:

Noble permet de gérer le BLE ( = bluetooth low energy) et d'établir une connection avec notre rolling spider. L'installation se fait :

npm install noble

Initialisation:

var noble = require('noble');

//TODO explications

Rolling Spider:

RollingSpider.png

Deux méthodes seront présentées :

-> contrôler la Rolling Spider avec nodeJS
-> contrôler la Rolling Spider avec Noble et le Javascript, afin de comprendre les paquets envoyé à la Rolling Spider et la communication Bluetooth.


NodeJS + serveur + nodejs + noble:

//TODO images + explications

HTML + JS + socket :

//TODO images + explications

Bluetooth, BLE :

//TODO images + explications

Protocole rolling spider:

//TODO images + explications

Jumping Sumo:

JumpingSumo.jpeg

HTML

Contrôler la jumping sumo par navigateur web

NodeJS