Drone autonome

De Wiki de Projets IMA


Vidéo HD


Présentation générale du projet

Contexte

Les drones sont déjà en phase de test pour la livraison de colis. Pour cela, il leur faut être autonome d'un point A à un point B en s'adaptant à leur environnement.

Objectif du projet

Le but est d'équiper un drone de type AR Drone de chez Parrot pour lui faire effectuer une tâche de façon autonome.

Description du projet

Les drones que nous possédons peuvent être télécommandés tant qu'ils sont à porté d'un point d'accès WiFi. Vous allez en équiper un d'un système embarqué de type pcDuino pour le rendre autonome et pouvoir naviguer hors de porté du WiFi.

Vous commencerez par installer un pcDuino sur un drone avec alimentation sur la batterie déjà disponible.

Un système avec deux interfaces WiFi doit ensuite être étudié, une première pour la connexion pcDuino/drone et la seconde pour la communication avec le pcDuino.

Implantez deux mode de fonctionnement : un premier permettant de contrôler le drone avec une interface Web simple et efficace, un second permettant de spécifier un trajet à plus longue distance. Vous pourriez tester le second mode par un vol circulaire autour des batiments de Polytech'Lille ou un vol à moyenne altitude aux dessus des bâtiments de Polytech'Lille.

Un plus serait de pouvoir reconstituer le vol par un graphique notant la position (système GPS) et l'altitude. Le graphique serait illustré par des images de la caméra embarquée.

Choix techniques : matériel et logiciel

Matériel
  • AR Drone 2.0 de Parrot [fourni le 26/1/2015][Récupéré le 18/05/2015]
  • pcDuino v1 [fourni le 26/1/2015][Récupéré le 18/05/2015]
  • pcDuino V3 nano [fourni le 4/2/2015][Récupéré le 18/05/2015]
  • diverses Clef WiFi [fournies le 28/1/2015]
  • Shield GPS pour pcDuino [fourni le 4/2/2015][Récupéré le 18/05/2015]
  • Matériel pour régulation 5v à partir de la batterie du drone [commandé le 4/2/2015]
  • 2 x Clef WiFi pcDuino [fourni le 9/2/2015][Récupéré le 18/05/2015]
Logiciel
  • Systéme UNIX
  • API ARDRONE lien

Etapes du projet

  • Rechercher une solution pour pouvoir envoyer des commandes au drone (voir le SDK fournit par Parrot)
  • Prévoir l'alimentation du pcDuino avec la batterie du drone
  • Réaliser une liaison entre le pcDuino et le drone via Wifi.
  • Faire communiquer les deux appareils.
  • Créer un serveur web léger sur le pcDuino
  • Utiliser le réseau Wifi de Polytech (PolytechLille)
  • Réaliser une interface web simple et efficace pour la gestion des déplacements du drone.
  • Mettre en place une mémoire de données sur la localisation voulue et réelle (avec le gyroscope pour obtenir un angle de vue)
  • Ajouter un module GPS au pcDuino pour obtenir les données de positionnement.
  • Conception d'un shield pour le GPS.
  • Réaliser le déplacement automatique en fonction de la différence de coordonnées.
  • Récupérer et enregistrer le flux vidéo, le flux de données (positions GPS, angle, …)
  • Réaliser le suivi de déplacement sur une carte.
  • Réaliser un système de commande en cas d’urgence (ex : l’appareil ce pose a un certain point, ou prise du contrôle par manette, …)
  • Réalisation d'une coque adaptée au drone avec le pcDuino

Avancement du Projet

Semaine 1 (26 janvier 2015)

  • prise en main du drone via application existante sous androïd
  • prise en main de la clé wi-fi
  • gestion de l'alimentation du pcDuino via le port USB sous l'arDrone (connecteur à faire) qui délivre du 5V
  • prémices de l'interface Web
Page d'accueil du site

Semaine 2 (2 février 2015)

  • conception shield pour le GPS
Shield GPS pour pcDuino et Arduino
  • réception pcDuino v3 nano donc reconfiguration
  • prise en main des clés wi-fi sans succès
  • schéma du site web réalisé et conception en cours
Plan du site

Semaine 3 (9 février 2015)

  • réception nouvelles clés wi-fi pour pcDuino
  • connection réussie avec les deux clés sur les arDrone
root@ubuntu:~# iwlist wlan0 scan | grep 'ESSID'
                   ESSID:"PolytechGuests"
                   ESSID:""
                   ESSID:""
                   ESSID:""
                   ESSID:"ardrone_105754"
                   ESSID:"PolytechLille"
                   ESSID:"eduroam"
                   ESSID:"LILLE1"
                   ESSID:"PolytechLilleStaff"
root@ubuntu:~# iwconfig wlan0 essid ardrone_105754                                                                                                                                  
root@ubuntu:~# iwconfig wlan0
wlan0     Ralink STA  ESSID:"ardrone_105754"  Nickname:"RT2870STA"
          Mode:Managed  Frequency=2.437 GHz  Access Point: 00:26:7E:4F:F9:80  
          Bit Rate=48 Mb/s  
          RTS thr:off   Fragment thr:off
          Encryption key:off
          Link Quality=90/100  Signal level:-72 dBm  Noise level:-72 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
  • Réalisation de la page de contrôle manuel avec les boutons de commande de base et avec une fonction javascript de test pour vérifier l'envoi d'une donnée
Page php du mode manuel avec
  • apprentissage API google maps pour le mode automatique (marqueurs sur la carte et récupération coordonnées GPS)
  • utilisation de la librairie node-ar-drone (node.js)

Semaine 4 (16 février 2015)

travaux fonctionnels :

  • Connection série entre le GPS et le pcDuino
$GPGGA,000311.800,,,,,0,00,,,M,,M,,*73
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,000311.800,V,,,,,0.00,0.00,060180,,,N*49
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
  • Prise en main de nodejs
  • page php intégrant une Google maps avec possibilité de récupérer les coordonnées d'un marqueur via le déplacement de celui-ci ou via une adresse
Page php pour le mode automatique
  • alimentation du pcDuino avec la batterie du drone
Convertisseur pour le pcDuino

Semaine 5 (23 février 2015)

  • Mesure de consommation électrique
Point de mesure Convertisseur 12V/5V pcDuino GPS WiFi (x1) Drone
Documentation  ??? 700mA 20mA  ???  ???
"Repos" 16,3mA 110mA 10 - 15mA 13mA 220 mA
  • Réalisation d'un code en C pour gérer les trames GPS et faire un traitement sur les données
  • Prise en main du SDK pour utiliser un programme C pour le contrôle du drone
  • Liste des services a retirer du démarrage de Linux
liste via : service --status-all
alsa-restore
alsa-store
anacron
cron
lightdm
plymouth
plymouth-log
plymouth-splash
plymouth-stop
plymouth-upstart-bridge
x11-common

Semaine de vacances de février.

  • Finalisation du programme C pour le GPS
  • Test de vol via un programme C qui envoie des requêtes UDP : tous les arguments sont donnés dans la console (port, commande(s), délai ...) => fonctionnel
  • Programme C avec commande au clavier : reprise de l'ancien code + ajout des commande AT spécifiques à l'ARDrone + switch case pour gérer les entrées clavier => en cours

Semaine 6 (09 mars 2015)

  • Test du GPS
Time:
       Hour : 14 
       Minute : 25 
       Seconds : 9 
       Milliseconds : 0 
Date:
       Day : 11 
       Month : 3 
       Year : 15 
Fix : 1 
Quality : 1 
Location :
       Latitude : 50.607395 N
       Longitude : 3.135820 E
Other:
       Speed (knots) : 0.840000 
       Angle : 210.619995 
       Altitude : 70.099998 
       Satellites : 5

Carte

  • Test de vol du drone à partir du pcDuino. A l’atterrissage le drone se met en mode défaut ce qui empêche un redécollage immédiat.
  • Résolution des problèmes de connections ( dhcp dans le fichier rc.local )
  • Test des deux codes C avec le PCDuino : premier fonctionnel, mais pas le deuxième
  • Débogage du deuxième code

Semaine 7 (16 mars 2015)

  • Débogage du programme C de l'envoie des commandes AT terminé, code fonctionnel au clavier avec une interface dans le terminal
  • Création d'un cgi-bin pour que la page php envoie une commande ( sous forme d'un simple caractère ) au programme C
  • Débogage du programme C du GPS terminé

Semaine 8 (23 mars 2015)

  • Reprise du site web pour le mode manuel
  • Test d'un cgi-bin qui récupère un caractère envoyé via un "button" avec un "post"
  • Création d'une fonction Javascript "envoyer" qui envoie via "Ajax" de type "post" la lettre correspondant à sa définition dans le programme c
  • Intégration de cgi-bin dans le programme c pour récupérer le "post"
  • Test de la fonction a priori correcte mais le drone ne réagit pas
  • Test de la partie GPS sur le Pcduino 1
  • Mise à jour du Pcduino nano 3 vers ubuntu 14 pour palier à des problèmes de communications série

Semaine 9 (30 mars 2015)

  • Débogage du programme c
  • Le drone décolle puis s'arrête après 2s => SDK
  • Le drone décolle mais ne répond à aucune autre commande => problème de statut du drone utilisé lors des premiers tests
  • Le drone réagit entièrement à toutes les commandes
  • Intégration des événements clavier dans la page Web pour plus de confort avec une fonction JavaScript "traitement"
  • Reprise de la page Web du mode automatique pour récupérer des coordonnées GPS de Maps et les envoyer via la même méthode => en cours
  • Recherche de solutions aux problèmes du port Ethernet (perte du proxy). La solution a été de passer par une connexion Wi-fi afin de coller au cahier des charges
  • Réalisation d'une coque pour faire voler le drone avec l'équipement nécessaire

Semaine 10 (6 avril 2015)

  • Finalisation de la coque du drone
Coque
  • Abandon de l'utilisation du cgi-bin pour faire voler le drone en autonomie. Le programme ne peut tourner en continu.
  • Nouvelle organisation : le programme de gestion de déplacement attend que le cgi-bin mettent les coordonnées dans un fichier et vient ensuite lire sa position pour décider de ou partir.

Semaine 11 (13 avril 2015)

  • Mise en place d'un partage des informations du positionnement GPS entre les différentes applications.
  • Test du drone en extérieur, peu concluant dû à l'utilisation d'un téléphone portable comme routeur
  • Réalisation d'un nouveau Shield GPS.
Shield GPS pour pcDuino et Arduino
Shield GPS pour pcDuino et Arduino
Shield GPS pour pcDuino et Arduino

Semaine 12 (20 avril 2015)

  • Test du drone dans les différents modes de fonctionnement : peu concluant.

-> Un problème survient a chaque vol. Le drone n'arrive pas à gérer le poids supplémentaire ainsi que le changement de centre de gravité et l'aérodynamisme.

    • Changement de la carte-mère du drone et de sa carte de gestion ultrasons : Pas concluant, le drone ne réagis plus a nos commandes.
    • Modifications du programme de gestion du mode autonome : Aucun changement visible.
    • Test du mode manuel avec le pcDuino hors du drone : Fonctionnel.
    • Test du mode autonome sans drone en déplacent le matériel et en exécutant ces commandes : Fonctionnel.
  • Modifications interne au pcDuino pour faciliter le fonctionnement du projet.
  • Réalisation d'un nouveau site web de gestion du drone.
Site web accueil
Site web mode manuel
Site web mode automatiqe

Fichiers Rendus

Fichier:P17 drone autonome LEFORT COLAUTTI.pdf
Fichier:Code source.zip