IMA5 2018/2019 P22 : Différence entre versions

De Wiki de Projets IMA
(Semaine 5)
(Semaine 5)
Ligne 268 : Ligne 268 :
 
* 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.
 
* 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.
 
* 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.
  
  

Version du 22 octobre 2018 à 22:00


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

Tester pyparrot - Installation:

Logiciels requis:

  • Python 3: J'utilise 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.


Ensuite, nous avons créé un fichier de type typhon(test.py) pour tester quelque 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 avait aucun problème de décollage et d'atterrissage, par exemple, si nous voulons que le drone vole(rester) en l'air pendant quelques secondes, il ne peut pas le faire. Il va altérer lui-même, plutôt que de pouvoir se stabiliser sur une coordonnée.

Une vidéo du test est enregistrée ici:Média:dronets1.mp4

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 même si on utilise APP FreeFlight Pro.

Documents Rendus