IMA5 2018/2019 P21 : Pilotage automatique d'un drone

De Wiki de Projets IMA
Révision datée du 19 octobre 2018 à 10:22 par Jsenella (discussion | contributions) (Semaine 1)


Présentation générale

Drone Parrot Bebop 2

Description

Pour réaliser ce projet, nous avons à notre disposition le drone Parrot Bebop 2. Nous ferons donc initialement des essais de vols du drone de manière à le maitriser à l'aide de la manette de pilotage ou alors tout simplement de notre smartphone avec l'application FreeFlight Pro.

Notre projet portera principalement sur l'aspect détection d'objets et analyse de l'environnement en utilisant le traitement d'images. Le développement des applications pourra se faire sur MATLAB en passant par ROS (Robot Operating System) sous Linux, et/ou via une interface homme machine implémenté sur Python.

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

Pour mener au mieux ce projet, nous avons mis en place une réunion hebdomadaire avec nos encadrants, où nous leur présenterons nos avancées, et choisirons par la suite ce qu'il y a à faire.

Nous travaillerons la plupart du temps en C006 ou C008, mais aussi en C305, car la salle sera équipée prochainement de filet afin de manipuler et faire des tests avec le drone en tout sécurité.

Objectifs

L'objectif de ce projet est double :

  • Analyse de l'environnement à l'aide des différents capteurs disponibles, notamment le capteur image
  • Pilotage automatique du drone développé spécifiquement par les étudiants

Préparation du projet

Choix techniques : matériel et logiciel

Drone Parrot Bebop 2

Environnement Linux

ROS : Robot Operating System

Parrot SDK

Matlab Simulink avec en particulier, la boîte à outils Robotics System

Python pour créer une IHM (Interface Homme/Machine)

Liste des tâches à effectuer

  • Découverte, prise en main et pilotage du drone
  • Recherche/Documentation sur les différents composants du drone
  • Réalisation d'un schéma bloc pour identifier les différents organes du drone et connaitre les différentes interactions qu'il peut y avoir entre eux
  • Recherche/Documentation pour définir quels outils nous allons choisir
  • Stabilisation du drone
  • Gérer le traitement d'images
  • 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

En cours

Réalisation du Projet

Semaine 1

Durant la première semaine, nous nous sommes entretenues avec nos encadrants de manière à mieux définir le contexte du projet et leurs attentes quant à ce projet. Nous avons ensuite effectuer 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 un peu plus approfondies sur les différentes technologies utilisables avec le drone pour préparer le développement futur.

Cette première semaine a aussi été l'occasion de commencer à prendre en main le drone en effectuant des premiers vols en utilisant l'application Android proposée par Parrot.

Recherches sur le drone :

Inventaire des composants/capteurs

Une caméra verticale pour la stabilisation du drone qui prend une photo du sol toutes les 16 millisecondes et la compare avec la précédente pour déterminer la vitesse du drone.

Un capteur ultrason qui analyse l'altitude de vol jusqu'à 5 mètres.

Un capteur de pression qui mesure la pression de l'air et analyse l'altitude de vol au-delà de 5 mètres.

Un gyroscope 3 axes qui mesure l'angle d'inclinaison du drone.

Un accéléromètre qui mesure la position du drone sur 3 axes et sa vitesse linéaire.

Un magnétomètre 3 axes qui aide à définir la position d'un drone comme une boussole.

Un système mondial de navigation par satellite qui combine un GPS et un GLONASS (système de positionnement par satellite d'origine soviétique) pour la géolocalisation du drone et aide à mesurer la vitesse de drone pour plus de stabilité à haute altitude.


Boîte à outils MATLAB

Nous allons devoir utiliser MATLAB dans le cadre de ce projet pour communiquer avec ROS, mais nous ne savions pas s'il fallait une boîte à outils en particulier ou non. Après plusieurs recherches nous avons trouvé qu'il ne fallait pas de boîte à outils propre au drone à notre disposition. De ce fait, la seule boîte à outils dont nous aurons besoin est : Robotics System Toolbox™

Celle-ci fournit une interface entre MATLAB et Simulink et le système d'exploitation robotique (ROS) qui vous permet de communiquer avec un réseau ROS, d'explorer de manière interactive les capacités des robots et de visualiser les données des capteurs. Il permet de développer, tester et vérifier des algorithmes et applications robotiques. Robotics System Toolbox permet également de créer un réseau ROS autonome directement dans MATLAB et Simulink et importer des fichiers journaux ROS (rosbags) pour visualiser, analyser et post-traiter les données consignées. Ces fonctionnalités vont nous permettre de développer des algorithmes de robotique dans MATLAB et Simulink, tout en nous permettant d'échanger des messages avec d'autres nœuds du réseau ROS. Avec Embedded Coder, nous allons pouvoir générer du code C ++ à partir d'un modèle Simulink pour une application ROS autonome pouvant s'exécuter sur toute plate-forme Linux sur laquelle ROS est installé.

Semaine 2

Lors de la deuxième semaine, nous avons effectué des premiers tests de connexion du drone à un ordinateur. Pour cela, nous avons utilisé le SDK fourni par Parrot ARDroneSDK3 qui possède un code d'exemple permettant de contrôler le Bebop2. Une fois l'ordinateur connecté au wifi du drone, on peut exécuter le programme d'exemple pour faire décoller le drone.

Contrôle du drone avec SDK

Tutoriel d'utilisation de SDK : Fichier:Parrot pour développeurs.pdf

Une fois cette partie réalisée, nous intéressons à la manière de connecter le drone à Matlab. Pour cela nous avons besoin d'utiliser ROS qui est un ensemble d'outils informatique permettant de réaliser des logiciels pour la robotique. ROS permet de faire la passerelle entre Matlab et le drone.

SDK

Le SDK offre une couche d'abstraction sur le bas niveau du drone ainsi peu d'informations issues des capteurs et des actionneurs sont accessibles et il n'est pas possible de piloter directement les moteurs. Néanmoins, Parrot fournit une grande quantité de messages permettant de réaliser des actions complexes (déplacement d'un point A à un point B, retour à la maison, ...) ou des figures acrobatiques (parabole, flip, ...).

Liste des entrées accessibles :

• latitude (double): Position en latitude (en degré)

• longitude (double): Position en longitude (en degré)

• altitude (double): Altitude (en mètre)

• speedX (float): Vitesse relative au nord (en m/s)

• speedY (float): Vitesse relative à l'est (en m/s)

• speedZ (float): Vitesse selon l'axe z (en m/s)

• longitude_accuracy (i8): Erreur de localisation en longitude (en mètre)

• latitude_accuracy (i8): Erreur de localisation en latitude (en mètre)

• altitude_accuracy (i8): Erreur de localisation pour l'altitude (en mètre)

• picture (caméra avant)

• Etat de la batterie : Battery state => percent (u8): Pourcentage de batterie

Liste des commandes offertes par le SDK :

• flip: Le drone fait un flip

• horizontal_panorama: Le drone tourne horizontalement sur lui-même

• dronie: Le drone vole sur une distance donnée avec un angle calculé

• horizontal_reveal: Le drone commence à regarder vers le bas, puis avance tout en regardant lentement à l'horizon

• vertical_reveal: Le drone commence à regarder vers le bas, puis se déplace vers le haut tout en regardant lentement à l'horizon

• parabola: Le drone fait une parabole au-dessus de sa cible et se termine de l'autre côté de celui-ci.

• candle: Le drone vole horizontalement en direction de la cible puis s'envole.

• take off : Décollage

• land : Atterrissage

Le détail sur tous les états et toutes les commandes se trouve ici : https://developer.parrot.com/docs/reference/bebop_2/index.html#bebop-2-

Semaine 3

Pour cette semaine, nous venons d'avoir l'accès au git d'un groupe de chercheurs travaillant également sur le bebop 2, ce qui nous permet d'avoir des informations supplémentaires sur le drone, notamment de la documentation.

Sur ce git, il y a notamment un prototype d'une IHM (Interface Homme/Machine) que nous allons étudier afin de trouver comment nous pouvons récupérer les données du drone en temps réel. Malheureusement, après étude de l'IHM, nous nous sommes rendus compte que la personne n'avait réaliser que l'interface "visuelle" et donc, là où nous pensions trouver des commandes pour récupérer des données, ce n'est qu'en réalité une zone de texte, où la personne a mis des valeurs aléatoires. Nous sommes donc toujours à la recherche de commandes afin de récupérer des données, notamment via SDK.

ROS

De plus, nous avons profité de cette semaine pour nous intéresser à un autre moyen de communiquer avec le drone: ROS. ROS est une plateforme de développement logicielle pour les robots qui est compatible avec les drones Bebop 2 de Parrot. Nous voulons utiliser cette plateforme pour faire la passerelle wifi entre le drone et Matlab ou un autre langage de programmation.

La prise en main de ROS n'est pas forcément très évidente ce pourquoi nous avons commencé à suivre les tutoriels pour débutant proposé sur le site de ROS.

Qu’est ce que ROS?

ROS (Robot Operating System) est un système open source permettant à un utilisateur de contrôler un robot à partir d’un PC. il n’a pas de langage de programmation défini et peut être programmé via plusieurs langages. Un système ROS comprend un certain nombres de noeuds indépendants qui communiquent avec les autres noeuds via une messagerie de type publication/abonnement. Par exemple, le driver d’un capteur peut être implémenté comme un noeud qui publie les valeurs du capteur dans un flux de messages. Ces messages pourraient être utilisés par n'importe quel nombre d’autres noeuds, comme des filtres, des collecteurs de données ou des systèmes haut niveau comme des systèmes de guidage ou de recherche de chemin.

Pourquoi utiliser ROS?

Sans ROS, lire/écrire des ressources rapidement est compliqué avec un grand système multi-threadé. Il y a d’autre moyens de résoudre ce problème mais ROS simplifie le processus en s’assurant que les différents threads n’essaient pas de lire ou d’écrire des ressources partagés mais plutôt qu’il publie et s’abonnent à des messages. A développer

Comment fonctionne ROS?

Le calcul dans ROS est effectué à l'aide d'un réseau de processus appelé nœuds ROS. Ce réseau d'exécution peut être appelé graphe de calcul. Les principaux concepts du graphe sont les nodes ROS, le master, le parameter server, les messages, les topics, les services et les bags. Chaque concept du graphique contribue au réseau d'une manière qui lui est propre.


Graphique de calcul on de ROS
  • Nodes: Les nodes sont les processus qui effectuent les calculs. Chaque node ROS est écrit à l'aide d'une bibliothèque pour ROS tel que roscpp (pour le C++) et rospy (pour le python). Dans un robot il peut y avoir plusieurs nodes pour exécuter différents types de tâches. En utilisant la méthode de communication de ROS, les nodes peuvent communiquer entre eux et échanger des données. Un des buts des nodes ROS est de découper un grand processus avec toutes les fonctionnalités en plusieurs petit processus avec une fonctionnalité.
  • Master: Le Master ROS fournit un registre des noms ds nodes activés et surveille les changement au niveau des nodes. Les nodes ne sont pas capable de trouver les autres nodes, d'échanger des messages ou d'invoquer des services sans Master.
  • Parameter Server: Le parameter server permet à l'utilisateur de sauvegarder les données dans un endroit centralisé. Tous les nodes peuvent accéder à ses valeurs et les modifier.
  • Messages: Les nodes communiquent entre eux en utilisant des messages. Les messages sont de simple structures de données contenant des champs typés qui peuvent contenir un ensemble de données qui peuvent être envoyé à un autre node. Il y a des types standards de données (integer, floating point, boolean ...) et ces types sont supportés par les messages ROS. Il est aussi possible de créer des types personnalisés de messages à partir de ces types.
  • Topics: Chaque message dans ROS est transporté à l'aide de bus nommé appelé topics. Quand un node envoie un message au travers d'un topic, on dit qu'il publie (publish) un topic. Quand un node reçoit un message au travers d'un topic, on dit qu'il s'abonne (subscribe) à un topic. Le node qui envoie et celui qui s'abonne ne sont pas au courant de l’existence l'un de l'autre. Chaque topic à un nom unique et n'importe quel node y a accés et peut envoyer des données au travers de ce dernier tant qu'ils utilisent le bon type de message.
  • Services: Pour certains cas d’application, un modèle de communication publish/subscribe n'est pas suffisant il est alors nécessaire d'utiliser une interaction requête/réponse. Les services ROS permettent de mettre en place une interaction bi-directionnelle de type requête/réponse. On peut définir un service comme contenant deux parties: une pour la requête et l'autre pour la réponse. En utilisant les services ROS, il est possible de créer un node serveur et un node client. Le node serveur fournit le service sous un nom et le client envoie des message de requêtes à ce serveur qui répondra en envoyant le résultat au client.
  • Bags: Le Bag est un format de fichier permettant de sauvegarder et rejouer les données des messages ROS. le fichier Bag est un mécanisme important pour la sauvegarde de données tells que les données provenant des capteurs qui peuvent être difficiles à acquérir mais qui sont nécessaires pour développer et tester les algorithme.

source: Mastering ROS for Robotics Proramming de Lentin Joseph

Schéma du fonctionnement de ROS

Semaine 4

Au fil de nos recherches, nous avons pu remarquer que les technologies que nous souhaitons utiliser sont assez différentes. Nous avons d'un côté ROS, qui est très ouvert, où l'on peut trouver beaucoup d'informations, mais ça reste néanmoins un outil très généraliste dans la robotique. Alors que SDK de son côté, c'est un peu l'inverse, c'est-à-dire qu'il est très fermé, car nous avons du mal à trouver certaines informations, mais pour autant, c'est l'outil le plus proche du drone.

Cette semaine, nous avons donc focalisé nos recherches sur la récupération de données via SDK, car pour l'instant il n'y a qu'avec cet outil que nous avons réussi à le manipuler (hors smartphone et télécommande).

De plus, nous avons continué notre exploration de ROS en recherchant comment interagir avec cet outils avec un langage de programmation comme le Python par exemple.

Semaine 5

Concernant le SDK, nous avons profité de cette semaine pour chercher un moyen de récupérer les données des capteurs. Pour cela, nous avons repris l'exemple de programme proposé par Parrot pour le Bebop: dans ce programme on reçoit les valeurs des capteurs lorsqu'il y a un changement d'état cependant ces valeurs ne sont jamais affiché ou sauvegardé. Nous avons donc ajouté l'écriture de ces valeurs dans un fichier. Cependant, lors de la lecture du fichier les données ne sont pas cohérentes: toutes les valeurs proviennent du même capteur et elles ne changent jamais. De plus, les capteurs sont identifiés par un nombre et non par un nom on ne peut donc pas identifier quel capteur envoie des données.

Durant cette semaine, nous avons commencé à explorer la toolbox Matlab Robotics System qui permet d'interagir avec un environnement ROS déjà existant de manière à communiquer avec des systèmes robotiques ou de créer un environnement ROS sous Matlab.

Documents Rendus