IMA5 2018/2019 P22

De Wiki de Projets IMA
Révision datée du 9 novembre 2018 à 18:20 par Lzhang3 (discussion | contributions) (Semaine 7)


Présentation générale

Parrot bebop 2.png


Description

Le but de notre projet est réaliser le commande en position d'un drone Parrot Bebop 2.

Pour réaliser ce projet, nous avons à notre disposition le drone Parrot Bebop 2. Nous testons donc d'abord le drone volant, nous utilisons la manette de pilotage ou de l'application smartphone FreeFlight Pro pour le contrôler.La fonctionnalité cible étant une application payante, afin de mieux comprendre le thème de notre projet, nous avons regardé une vidéo sur le Web qui présentait la fonctionnalité ‘follow me’ de bebop.

Notre projet se concentre sur la détection d'images et l'analyse de l'environnement à l'aide d'un capteur d'image situé au bas du drone (à cause de la perte du signal de GPS dans la salle), permettant au drone d'atteindre un vol stable et de suivre la cible, avec rejet de perturbations.Le développement des applications pourra se faire sous Linux en passant par ROS, Robot Operating System, grâce à Matlab Simulink ou une application sous le langage Python.

Une démarche de prospection et de recherche bibliographique doit être entreprise sur tous ces outils en début de projet.

Afin de mettre en œuvre ce projet, nous soumettons un rapport à monsieur Komi Midzodzi PEKPE après avoir terminé nos travaux chaque jour, où nous montrons nos progrès et choisissons les mesures à prendre en conséquence.

Objectifs

Les objectifs peuvent être divisés en trois phases:

  • D'abord nous devons assurer que le perroquet peut voler de façon stable.
  • Nous concevons l'itinéraire de vol et le réaliser.
  • Utiliser la technologie de traitement d'image pour effectuer le suivi des objets spécifiés. Peut-être nous pouvons mettre en œuvre une variété de fonctions de suivi.

Préparation du projet

Cahier des charges

Choix techniques : matériel et logiciel

  • Parrot Bobop 2
  • Un PC linux avec une installation de ROS Kinetic

- ROS Kinetic Kame vise principalement la version Ubuntu 16.04 (Xenial), bien que d'autres systèmes Linux, ainsi que Mac OS X, Android et Windows, soient pris en charge à des degrés divers.

  • Driver ROS <<Bebop_autonomy>>:

- Bebop_autonomy est un pilote ROS pour drone Parrot Bebop, basé sur l’ARDroneSDK3 officiel de Parrot.

  • SDK Parrot:

- Le SDK Parrot nous aide à connecter, contrôler, recevoir des flux vidéo, enregistrer et télécharger des fichiers multimédias (photos et vidéos), envoyer et lire des plans de vol, des mises à jour et plus encore. Le SDK est principalement écrit en C, qui fournit une base de données pour les systèmes UNIX, ANDROID et IOS. Il est également livré avec un simulateur de drone appelé SPHINX qui nous aide à tester votre application avant de piloter le drone pour garantir la sécurité du vol.

  • SIMULINK®

- Le pack de support Simulink® pour PARROT® Minidrones nous permet de concevoir et de construire des algorithmes de contrôle de vol pour les minidrones PARROT. Nous pouvons déployer des algorithmes sans fil via Bluetooth® Low Energy. Les algorithmes peuvent accéder aux capteurs embarqués, tels que les capteurs à ultrasons, les accéléromètres, les gyroscopes et les capteurs de pression d'air, ainsi qu'à la caméra orientée vers le bas.

  • PYTHON

Liste des tâches à effectuer

  • Découverte, prise en main et pilotage du drone
  • Recherche/Documentation sur les différents composants du drone
  • Recherche/Documentation pour définir quels outils nous allons choisir
  • Stabilisation du drone
  • Gérer le traitement d'images
  • Suivre la cible
  • Réalisation d'un rapport final exploitable afin que les personnes souhaitant travailler sur ce projet puissent ajouter eux même ce qu'ils souhaitent, et mettre en avant leurs connaissances et compétences

Calendrier prévisionnel

Réalisation du Projet

Semaine 1

Durant la première semaine, nous nous sommes entretenues avec monsieur Komi Midzodzi PEKPE à mieux définir le contexte du projet et leurs attentes quant à ce projet. Nous avons ensuite effectué des recherches générales sur le drone pour connaître ses capacités et être plus familier avec les différents capteurs qu'il possède ainsi que des recherches sur les différentes technologies/logiciels utilisables avec le drone pour préparer le développement futur.

L'opération du drone

  • Nous avons commencé à prendre en main le drone en effectuant des premiers vols en utilisant FlightFree Pro (une application iOS/Android) proposée par Parrot et de la manette pilotage.

Recherche du drone

  • Une caméra verticale qui permet le maintien d’un point fixe.
  • Un capteur ultrason qui analyse l'altitude de vol jusqu'à 5 mètres.
  • Un gyroscope 3 axes qui permet de calculer l’angle d’inclinaison de l’appareil.
  • Un magnétomètre 3 axes qui donne la possibilité de définir la position du drone, à l’image d’une boussole.
  • Un GPS et un GLONASS pour la géolocalisation du drone et aide à mesurer la vitesse de drone pour plus de stabilité à haute altitude.
  • Un capteur de pression qui permet de mesurer la pression et de calculer l'altitude de vol lorsque celle-ci dépasse les 5 mètres.
  • Un accéléromètre qui permet de mesurer l’orientation du drone sur 3 axes et sa vitesse linéaire.

Recherche des technologies/logiciels

ROS

ROS (Robot Operating System) fournit des bibliothèques et des outils pour aider les développeurs de logiciels à créer des applications robotiques. Il fournit une abstraction matérielle, des pilotes de périphérique, des bibliothèques, des visualiseurs, la transmission de messages, la gestion des packages, etc. ROS est sous licence Open Source, BSD.

Nous avons choisi ROS Kinetic comme l’environnement pour développer notre projet. Et puis nous l’avons installé sur mon PC, comme l’ordinateur dans la salle C303 a une version d’Ubuntu 14.04, ce n’est pas possible d’installer ROS Kinetic sur lui.

Après nous l’avons installé, nous faisions de test.

Nous avons exécuté la commande suivante dans terminal:

$ roscore

Et puis nous avons ouvert un nouveau terminal et avons exécuté la commande suivante pour ouvrir la petite fenêtre tortue :

$ rosrun turtlesim turtlesim_node

Et en suite nous avons ouvert un nouveau terminal, exécuté la commande suivante pour ouvrir la fenêtre de contrôle de la tortue, utilisez les touches fléchées pour contrôler le mouvement de la tortue :

$ rosrun turtlesim turtle_teleop_key

A la fin, nous avons sélectionné la fenêtre de contrôle et appuyez sur les touches fléchées pour voir la tortue dans la petite fenêtre de la tortue.

Et puis nous avons ouvert un nouveau terminal, exécuté la commande suivante, nous pouvons voir l'interface graphique de ROS, montrant la relation entre les nœuds

$ rosrun rqt_graph rqt_graph
Ros-turtl.jpg

À ce stade, le test est terminé, indiquant que l'installation de ROS ne pose aucun problème.

Vous pouvez trouver de plus d'information ici : http://wiki.ros.org/


Driver ROS <<Bebop_autonomy>>

Bebop_autonomy est un pilote ROS pour les drones Parrot Bebop 1.0 et 2.0 (quadricoptères), basé sur ARDroneSDK3 officiel de Parrot . Ça peut être utilisé pour lancer le pilote, envoyer de commandes à Bebop, lecture de Bebop, configuration de Bebop et du pilote.

Pour l'installation, des conditions pré-requis sont comme ci-dessous:

  • ROS Indigo , Jade ou Kinetic (uniquement testé sur Ubuntu )
  • Paquets Ubuntu: build-esstential, python-rosdep,python-catkin-tools
  • Connaissance élémentaire de la création de packages ROS


Et puis on utilise ce commande pour l'installer:

$ sudo apt-get install build-essential python-rosdep python-catkin-tools


Pour compiler à partir de la source, vous devez cloner le code source dans un catkin espace de travail nouveau ou existant , utiliser rosdep pour installer des dépendances et enfin compiler l'espace de travail à l'aide de catkin . Les commandes suivantes illustrent cette procédure dans un catkin espace de travail nouvellement créé .

# Create and initialize the workspace
$ mkdir -p ~/bebop_ws/src && cd ~/bebop_ws
$ catkin init
$ git clone https://github.com/AutonomyLab/bebop_autonomy.git src/bebop_autonomy
# Update rosdep database and install dependencies (including parrot_arsdk)
$ rosdep update
$ rosdep install --from-paths src -i
# Build the workspace
$ catkin build


Pour plus d'information : https://bebop-autonomy.readthedocs.io/en/latest/index.html

Semaine 2

SDK Parrot

Le SDK vous aidera à vous connecter, à piloter, à recevoir des flux, à enregistrer et à télécharger des médias (photo et vidéo), à envoyer et à lire des plans de vol sur pilote automatique et à mettre à jour votre drone. Vous pouvez l'utiliser sur les Spider Rolling, Cargos, Mambo, Swing, Sumo Jumping, Evo Sumo, Bebop Drone, Bebop 2, Bebop 2 Power, Disco, Bluegrass, SkyController et SkyController 2.

FreeFlight Pro utilise ce SDK.

Ce SDK est principalement écrit en C, il fournit des bibliothèques pour le système Unix, Android et iOS.

Il est également livré avec un simulateur de drone appelé Sphinx, conçu pour vous aider à tester votre application avant de voler avec votre drone actuel.

UNIX BUILD Linux: testé sur Ubuntu 14.04

La commande permettant de créer la plate-forme SDK pour Unix est la suivante:

$ ./build.sh -p arsdk-native -t build-sdk -j

La sortie sera dans <SDK>/out/Unix-base/staging/usr/

Les tâches disponibles sont:

$ build-sdk (Construire un sdk natif)
$ build-sample (Construire tous les échantillons natifs)
$ build-sample-SAMPLE_NAME (exemple de compilation d'und sdk pour SAMPLE_NAME)

Lancer les échantillons:

Pour exécuter les exemples, vous devez ajouter le dossier <SDK>/out/arsdk-native/staging/usr/lib à la variable d'environnement LD_LIBRARY_PATH. Cela peut être effectué à l'aide du script <SDK> /out/Unix-base/staging/native-wrapper.sh.

Ce script peut être utilisé des deux manières suivantes:

  • En tant que script shell pour appeler un seul échantillon:
$ ./out/arsdk-native/staging/native-wrapper.sh ./out/arsdk-native/staging/usr/bin/BebopSample

Ou si vous avez un ordinateur MacOs:

$ ./out/arsdk-native/staging/native-darwin-wrapper.sh ./out/arsdk-native/staging/usr/bin/BebopSample
  • En tant que script source permettant de définir les variables d'environnement PATH et LD_LIBRARY_PATH:
$ source ./out/arsdk-native/staging/native-wrapper.sh. 

Après avoir recherché ce script, vous pouvez appeler directement les échantillons par leur nom sans indiquer de chemin complet, car le dossier <SDK>/out/arsdk-native/staging/usr/bin sera ajouté à votre chemin.

Pour plus d'informqtion : https://developer.parrot.com/docs/SDK3/#general-information


SIMULINK®

PARROT Minidrones Support de Simulink pour concevoir, simuler et déployer des algorithmes pour piloter PARROT Minidrones.

Le pack d'assistance Simulink ® pour PARROT ® Minidrones vous permet de concevoir et de construire des algorithmes de contrôle de vol pour les minidrones PARROT. Vous pouvez déployer des algorithmes sans fil via Bluetooth ® Low Energy. Les algorithmes peuvent accéder aux capteurs intégrés, tels que les capteurs à ultrasons, accéléromètre, gyroscope et pression atmosphérique, ainsi qu'à la caméra orientée vers le bas.

Les outils complémentaires Simulink offrent des fonctionnalités supplémentaires. Aerospace Blockset ™ comprend un exemple utilisant les minidrones PARROT. L'exemple vous permet de modéliser des équations de mouvement à 6 DOF et de simuler le comportement d'un aéronef dans diverses conditions de vol et environnementales. Simulink Coder ™ vous permet d’enregistrer des données de vol sur le minidrone et d’accéder au code C généré à partir de modèles Simulink.

Vous pouvez ajouter des exemples de modèles et d'algorithmes existants pour améliorer les contrôleurs de vol prédéfinis ou commencer à partir de zéro et développer de nouveaux algorithmes de contrôle de vol.

Pour plus d'information : https://ww2.mathworks.cn/hardware-support/parrot-minidrones.html

Semaine 3

Pyparrot

Pyparrot est conçu pour programmer les drones Parrot Minidrone et Parrot Bebop (1 ou 2) à l’aide de Python. Cette interface a été développée pour enseigner aux enfants de tous âges (K-20) les concepts STEM (programmation, mathématiques, etc.) en leur permettant de programmer un drone pour qu'il vole de manière autonome.

Installation, démarrage rapide, documentation, FAQ ou plus d'information : https://pyparrot.readthedocs.io/en/latest/

Des problèmes

Il y avait un problème de la connexion entre l'ordinateur et le drone, la machine virtuelle ne pouvait pas appeler le wifi. Parce que la carte réseau sans fil ne peut pas être ajoutée dans la machine virtuelle VMware. Le lien d'internet entre la machine virtuelle et le windows est par la méthode NAT. En faite, il y a trois méthode pour accéder à l'internet pour la machine virtuelle :

  • NAT
  • Host-only
  • Bridge

Mais seulement la méthode Bridge permet à la machine virtuelle d’avoir différentes adresses IP indépendantes de l’hôte, tout en conservant le même segment de réseau que l’hôte, ce qui permet d’ajouter toutes les machines virtuelles au réseau local de l’hôte local, qui fait partie du réseau local. L'ajout à d'autres hôtes n'est pas différent. Du point de vue de la technologie réseau, cela revient à ajouter un commutateur virtuel à l’hôte frontal, puis à ce que l’hôte et toutes les machines virtuelles partagent le commutateur ou tout simplement à comprendre qu’il est amélioré sur l’hôte pour lui faire passer un commutateur (bien sûr, un commutateur virtuel). ) pour l'hôte hôte et les autres machines virtuelles du segment de réseau.

Après une configuration difficile, la connexion réseau de la machine virtuelle est devenue Bridge, mais la connection entre le drone et le Linux n'a pas encore réussi. Donc nous avons donc décidé d'installer le système d'ubuntu 16.04 et tous les logiciels/travaux environnements sur la base de Windows 10.

Après, on va essayer à faire la connexion et puis contrôler le drone.

Semaine 4

Après une semaine d’installation et de débogage fastidieux, nous avons finalement terminé la connexion entre drone et linux.

Ils peuvent communiquer normalement et transmettre certains flux d'informations.

P22 connection.png
P22 connection2.png

Semaine 5

Ces dernières semaines, nous avons travaillé à la construction de l'environnement de travail, à l'installation et aux tests du logiciel, à la connexion entre le drone et la console (ordinateur), à la recherche de méthode possible pouvant être appelées et lues sur capteur d'image du fond du drone, mais n'a pas réussi à appeler le capteur d'image au fond du drone. Qu'il s'agisse de l'outil de développement officiel SDK ou de tout autre outil de développement secondaire open source sur Internet, il n'y a aucun moyen d'appeler le capteur.

Après avoir discuté avec professeur, nous avons appris que le drone dispose de deux Linux, la caméra frontale est sous le premier Linux mais tous les capteurs appartiennent au deuxième système Linux. L'instructeur a suggéré que nous ne devrions pas envisager d'appeler la caméra inférieure pour le moment, en commençant par la tâche consistant à utiliser l'ordinateur pour contrôler le décollage / l'atterrissage / la stabilité du drone.

Pour atteindre cet objectif, nous avons utilisé python comme langage de programmation.

Tout d'abord, nous avons utilisé le Python3 (Nous avons utilisé le https://www.anaconda.com/download/ installer et le gestionnaire de paquets pour python) et Untangle Package (utilisé pour analyser les fichiers xml dans le SDK parrot)

Et ensuite, pour la connexion Wifi, nous avons installé le logiciel zeroconf.

A la fin, nous avons installé une bibliothèque https://github.com/amymcgovern/pyparrot pour les drones de python.

Logiciels requis:

  • Python 3: Nous avons utilisé le https://www.anaconda.com/download/ :: installer et le gestionnaire de paquets pour python. Notez que lorsque nous installons anaconda, installez également l’option Visual Studio.
  • Démêler le paquet: Utilisé pour analyser les fichiers XML dans le SDK de Parrot
pip install untangle
  • Vision: Si vous avez l'intention de traiter les fichiers de la caméra, vous devez installer opencv, puis ffmpeg ou VLC. J'ai installé ffmpeg en utilisant brew pour le mac mais apt-get sur linux devrait également fonctionner. Pour VLC, vous DEVEZ installer le programme `VLC <https://www.videolan.org/vlc/index.html`_ (et pas seulement la bibliothèque en python). Il doit être à la version 3.0.1 ou supérieure. (Pas encore finir cette étape )
  • Connexion Wifi: zeroconf Pour installer le logiciel zeroconf, procédez comme suit:
pip install zeroconf
  • Connexion BLE: pybluez (notez que ceci est UNIQUEMENT pour le support sans caméra!) Ceci est UNIQUEMENT supporté sur Linux. Pour installer le logiciel BLE, procédez comme suit:
sudo apt-get install bluetooth
sudo apt-get install bluez
sudo apt-get install python-bluez
  • Notez qu'il est également possible que vous deviez installer bluepy (si ce n’est pas déjà fait). Ces commandes devraient le faire:
sudo apt-get install python-pip libglib2.0-dev
sudo pip install bluepy
sudo apt-get update

Installation à partir de la source:

git clone https://github.com/amymcgovern/pyparrot
cd pyparrot

Assurez-vous d'installer les autres packages nécessaires (wifi ou BLE, vision, etc.) comme spécifié ci-dessus.

Installation à partir de Pip:

pip install pyparrot

Assurez-vous d'installer les autres packages nécessaires (wifi ou BLE, vision, etc.) comme spécifié ci-dessus.

Quelques commandes Bebop:

 Bebop (drone_type = "Bebop2") 

Crée un objet Bebop avec un argument optionnel drone_type pouvant être utilisé pour créer un objet bebop one ou bebop 2. La valeur par défaut est Bebop 2.

 connect (num_retries) 

Connectez-vous aux services wifi du Bebop. Cela effectue une poignée de main. Cela peut prendre plusieurs secondes pour s'assurer que la connexion fonctionne. Vous pouvez spécifier un nombre maximal de nouvelles tentatives. Retourne true si la connexion est réussie ou False sinon.

 disconnect () 

Déconnecte de la connexion wifi.

safe_takeoff (timeout) 

C'est la méthode recommandée pour le décollage. Il envoie une commande puis vérifie les capteurs (via l'état de vol) pour s'assurer que le bebop est en train de décoller. Ensuite, il attend que le bebop vole ou flotte pour revenir. Il expirera et reviendra si le temps dépasse les secondes.

 safe_land (timeout)

C'est la méthode recommandée pour atterrir le bebop. Envoie des commandes jusqu'à ce que le bebop ait réellement atteint l'état atterri. Il expirera et reviendra si le temps dépasse les secondes.

 smart_sleep (secondes) 

Ceci dort le nombre de secondes (qui peut être une virgule flottante) mais est activé pour toutes les notifications wifi.

 ask_for_state_update () 

Ceci envoie une demande au bebop pour renvoyer TOUS les états. Les données sont renvoyées assez rapidement mais pas instantanément. Le bebop a déjà une fréquence de rafraîchissement du capteur de 10Hz, mais tous les capteurs ne sont pas envoyés automatiquement. Si vous recherchez un capteur spécifique qui n’est pas envoyé automatiquement, vous pouvez l’appeler, mais je ne recommande pas de l’envoyer encore et encore. La plupart des capteurs dont vous avez besoin doivent être envoyés à la fréquence 10Hz ou comme un événement appelé déclenchant ce capteur.

 fly_direct(roll, pitch, yaw, vertical_movement, duration) 

Faites voler le bebop directement en utilisant les mouvements de roulis, de tangage, de lacet et de verticalité spécifiés. Les commandes sont répétées pendant des secondes. Chaque valeur va de -100 à 100 et correspond essentiellement à un pourcentage et à une direction de max_tilt (pour le roulis / la hauteur) ou de max_vertical_speed (pour le mouvement vertical).

Ensuite, nous avons créé un fichier de type python(test.py) pour tester quelques commandes pour contrôler le drone.

Ts1.png


Nous avons constaté que l'exécution des instructions n'était pas toujours bonne, bien qu'il n'y eût aucun problème de décollage et d'atterrissage.

Par exemple, en supposant que nous ayons fermé les portes et les fenêtres de la salle C305 pour nous assurer que le vent ne soit pas dérangé, nous voulons que le drone décolle et puis vole droit à une distance défini, et puis atterrit, il ne peut pas le faire. Il va altérer lui-même (on peut le voit clairement dans le vidéo après, il vole droit et puis il rentre, enfin, il a atterri le long de la barre oblique et n'a pas atterri en ligne droite), plutôt que de pouvoir se stabiliser sur une coordonnée. Une vidéo du test est enregistrée ici:

Et puis on a testé le même code pour deuxième fois, il vole comme ça : il vole pour une distance plus longe qu’on l’a définie.

Et les résultats montrent que le capteur est problématique aussi. Pour ce résultat, nous voulons le tester dans un autre environnement. Comme le vol du bebop2 est causé par le vent descendant de quatre hélices, le sol n’est pas plat ou les objets environnants peuvent avoir un impact. Nous pensons toujours qu'il peut y avoir des facteurs d'interférence inconnus dans la zone de test. Dans cette salle, le drone est également difficile à contrôler/stabiliser même si on utilise APP FreeFlight Pro (Lorsque nous ne faisons rien, le drone volera librement et sera incontrôlé).

Semaine 6

Afin de comprendre la cause de ce problème, nous avons effectué une recherche sur Internet. Nous pensons que le champ magnétique de la classe C305 interfère avec certaines performances du capteur du drone. Comme il y a beaucoup de robots et d'ordinateurs dans la salle C305 et qu'il y a des correctifs métalliques sur le site expérimental, ceux-ci peuvent avoir un impact sur l'étalonnage géomagnétique du bebop2, ce qui empêche le bebop2 de planer ou de voler comme prévu.

Afin de vérifier notre hypothèse, nous avons exécuté notre code dans le hall d'entrée de Polytech (environnement intérieur) et sur l'herbe à l'extérieur de Polytech (environnement extérieur).

On peut voir clairement dans ce vidéo, sur l'herbe à l'extérieur de Polytech (environnement extérieur), notre drone peut décoller, et puis voler droit à une distance défini, enfin atterrir, il peut régulièrement effectuer cette série de tâches sans autre action que l'exécution de code.

Et ensuite, on a testé le code pour le décoller, faire une pause et atterrir dans le hall d’entrée de Polytech, le drone marche bien, sans arrêté sans action surprenante.

Semaine 7

Nous avons installé opencv pour le traitement des images. (partie des travaux non terminée de semaine5)

Cv2err.png

Pourquoi ce problème se produit-il? Parce que quand compiler opencv, l’interface de python est ouvert. Si la compilation réussit, le fichier de bibliothèque partagée cv2.so sera généré sous Linux. Pour l'importer correctement, il faut mettre cv2.so dans le chemin ou python peut trouver le package ou modifier la variable d'environnement PYTHONPATH pour inclure le chemin où cv2.so existe. Pour résoudre ce problème, nous avons recherché les informations pertinentes, puis ajouté la ligne suivante à la fin du fichier .bashrc ouvert: export PYTHONPATH = "/home/parrotbebop2/anaconda3/lib/python3.5/site-packages:$PYTHONPATH"

Bashrcerr.png

Après, on va le rester:

Cv2tester.png

Mais pour ffmpeg, bien que ce soit déjà la dernière version de ubuntu16.04, cela ne semble pas être suffisant.

Versionffmpeg.png

Maintenant, c'est la version 2.8

Ffmpeg.png

Peut-être je dois mettre à niveau ffmpeg vers la version 3.4, nous allons l'essayer ensuite.

Documents Rendus