Suivi d’un drone par un autre 1. Sommaire  L’AR Drone  Objectif  Idées  Faire communiquer les drones  Comment programmer le drone?  Explication.

Slides:



Advertisements
Présentations similaires
Reconstitution de l’état d’un micro drone par fusion de données
Advertisements

Produit Gammes Nomenclatures Modules Techniques Prix de Revient Prix de Vente Modules Techniques Client Marges Mise en route Temps Unitaire Prix (Ex:
Classe : …………… Nom : …………………………………… Date : ………………..
Est Ouest Sud 11 1 Nord 1 Laval Du Breuil, Adstock, Québec I-17-17ACBLScore S0417 Allez à 1 Est Allez à 4 Sud Allez à 3 Est Allez à 2 Ouest RndNE
Est Ouest Sud 11 1 Nord 1 RondeNE SO
Sud Ouest Est Nord Individuel 36 joueurs
Les Prepositions.
1 V-Ingénierie… La compétence au service de lexigence… vous présente.
Formation Technique 6èmepartie.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Architecture de réseaux
Indicateurs de position
ASSERVISSEMENTS ET REGULATION
La diapo suivante pour faire des algorithmes (colorier les ampoules …à varier pour éviter le « copiage ») et dénombrer (Entoure dans la bande numérique.
Modélisation et commande hybrides d’un onduleur multiniveaux monophasé
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Réalité virtuelle et interactions avec un individu
wireless sensor networks
Le Concept. Régulation électronique LonWorks communicante pour application poutre froide.
Projet Drone/Android M2
Projet 2012 Tour à commandes numériques
ON SQUATTE AUSSI CODING4FUN LIKE A BOSS SQUATTEUR : RUDY HUYN.
1 Cours numéro 3 Graphes et informatique Définitions Exemple de modélisation Utilisation de ce document strictement réservée aux étudiants de l IFSIC.
Application des algorithmes génétiques
Gestion des Périphériques
Synchronisation et communication entre processus
Serveurs Partagés Oracle
Virtual Local Area Network
LES RESEAUX DE CAPTEURS SANS-FIL
1 Conduite du changement LA CONDUITE DU CHANGEMENT.
Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie.
Projet poker 1/56. Introduction Présentation de léquipe Cadre du projet Enjeux Choix du sujet 2.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Les Systèmes asservis.
Réseaux de neurones.
Développer en C avec Eclipse Introduction Création d'un projet Ajout de fichiers Compilation Exécution Utiliser le débogueur Département dinformatique.
Détection d’intrusions
Représentation des systèmes dynamiques dans l’espace d’état
Programmation concurrente
Projet d’Ingénierie du Logiciel - Prise en main du robot humanoïde NAO
Notre calendrier français MARS 2014
Pilotage de l’AR-Drone à l’aide d’une manette de PS3
C'est pour bientôt.....
Veuillez trouver ci-joint
1. Problème d’alignement
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
2 Industrialisation des développements sur SQL Server avec Visual Studio 2010 Mardi 8 Février – 17h30 Karim Zegour – Winwise Michel Perfetti – MVP VS.
Vue d'ensemble Configuration d'adresses IP
Adressage internet utilisé par le protocole IP (Internet Protocol)
‘‘Open Data base Connectivity‘‘
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
1 Modèle pédagogique d’un système d’apprentissage (SA)
Equation différentielle
Equation différentielle de 2ème ordre
CALENDRIER-PLAYBOY 2020.
1. Présentation générale du système
Outil de gestion des cartes grises
Médiathèque de Chauffailles du 3 au 28 mars 2009.
Jeu de Librairies Virtuelles « DLL » Windows pour la réalisation de programmes informatiques.
Projet Implémentation du protocole MMT sous Linux
Les réseaux locaux virtuels : VLAN
Partie II: Temps et évolution Energie et mouvements des particules
Etude cinématique sur l’axe R3 d’un robot fruitier
Etude des performances cinématiques de la plateforme 6 axes
Etude cinématique du mécanisme de direction de la DAE
Présentation Finale Spirit 07 / 03 / 2011 Groupe Vert 1 Equipe Verte.
Advisor Advanced IP Présentation Télémaintenance Télésurveillance.
Mesure en milieu hostile
Transcription de la présentation:

Suivi d’un drone par un autre 1

Sommaire  L’AR Drone  Objectif  Idées  Faire communiquer les drones  Comment programmer le drone?  Explication de la solution  Difficultés rencontrées 2

L’AR Drone 2.0  Quadrirotor  Connexion Wifi 3

L’AR Drone 2.0  6 capteurs inertiels Mesures des rotations et des accélérations (Centrale inertielle de type MEMS)  Capteur ultrasonore Mesures d’altitude  Caméra verticale Mesures de vitesse linéaire  Caméra frontale HD Utilisée pour la détection de tags 4

L’AR Drone 2.0  Détection de tags 5

L’objectif  Réaliser le suivi d’un drone par un autre  En translation et en rotation  En utilisant  La détection de tags  Les données du drone de tête 6

La commande du drone Comment envoyer et recevoir des données de plusieurs drones simultanément ? 7

 Création d’un réseau WiFi AdHoc géré par le drone  Drone : et DHCP pour les clients  Comment connecter plusieurs drones  Services disponibles  En UDP, port 5554 : retour d’informations des capteurs  « navdata » : Rotations, accélérations, détection de tags,…  En UDP, port 5555 : flux vidéo  Codec : MJPEG-like (DVD) ou H.264-like (TNT)  En UDP, port 5556 : contrôle et configuration  AT commands La communication « commerciale » du drone 8

Le protocole de communication  Principes d’AT Commands  Un très vieux protocole  Exemple pour une commande : AT*PCMD(2,.2,.3,0,0)  Cf. Guide du développeur du SDK 9

Communiquer avec 2 drones (1)  Utiliser le SDK ?  Oui mais…  Utiliser un node.js ?  Langage simple  Expérimental : Implémentation toujours de bas niveau, communication entre plusieurs drones douteuse  Utiliser ardrone_autonomy ?  Plateforme destinée à la robotique : ROS 10

 Plateforme ROS avec ardrone_autonomy  Simple d’utilisation, sous Linux  S’appuie évidement sur le SDK officiel  Permet utilisation de lignes de commande, de python ou de C pour commander  Les commandes AT deviennent de simples données dans une matrice, publiés vers le pilote  La double commande : possible théoriquement Communiquer avec 2 drones (2) 11

Connecter 2 drones au même point d’accès  Réseau de type infrastructure : Routeur  Non sécurisé, Masque réseau imposé  Configuration des drones (machine UNIX)  Création d’un script de configuration  Implémenté dans /data sur les drones et exécuté à distance par Telnet  Permet des changements non permanents  Exécution du pilote  En ajoutant un argument : -ip x 12

Avoir un processus différent pour chaque drone  Bug dans le SDK de Parrot corrigé partiellement par la communauté  Mais ressources partagées : impossible de commander séparément les drones  2 machines virtuelles 13

Idées d’algorithmes 14

Un premier algorithme  Bleu : vitesse du drone de tête 15

Un premier algorithme  Variables utilisées : distance entre les 2 drones et temps d’échantillonage  V=d/t  Avantage : simple, et efficace, mais peu précis 16

Architecture du programme En route vers l’inconnu 17

Architecture et fonctionnement du programme Fonctionnement d’un ROS : Nodes And master TopicMsgServices Parameter server Données globales Type de donnée BUS de communication Service disponible via d’autres nodes 18

Architecture du programme Les modules.py et les références Nodes de commande Ardrone_controle.py (Envoie commandes, PID vitesse) Drone_controller.py (synchronisation, Fichiers classes pid.py (définitions) status.py (définitions) Nodes de contrôle Ardrone_suivi.py (Suivi, synchronisation, animations, PID position) Keyboard_controller.py (contrôle clavier, mouvements et actions spéciales) Nodes spéciaux : subs_server (1 capteur) et ardrone_autonomy (driver/capteurs) Référence : Mike Hammer (Clavier) et Falkor (commande et contrôle) 19

Contrôle au clavier  Drone_controller : création des publishers et des subscribers  Drone_status : définition de statuts pour le drone  Keyboard_controller : définition du mapping des touches et réactions aux évènements  Drone_video_display : gestion de l’affichage de la vidéo 20

Drone_controller (extraits)  self.subNavdata = rospy.Subscriber('/ardrone/navdata',Navdata,self.ReceiveNavdata)  self.pubLand = rospy.Publisher('/ardrone/land',Empty)  self.pubCommand = rospy.Publisher('/cmd_vel',Twist)  self.commandTimer = rospy.Timer(rospy.Duration(COMMAND_PERIOD/1000.0),self.SendCommand)  def ReceiveNavdata(self,navdata): self.status = navdata.state  def SendTakeoff(self): if(self.status == DroneStatus.Landed): self.pubTakeoff.publish(Empty())  def SendCommand(self,event): if self.status == DroneStatus.Flying or self.status == DroneStatus.GotoHover or self.status == DroneStatus.Hovering: self.pubCommand.publish(self.command) 21

Drone_status class DroneStatus(object): Emergency = 0 Inited = 1 Landed = 2 Flying = 3 Hovering = 4 Test = 5 TakingOff = 6 GotoHover = 7 Landing = 8 Looping = 9 22

Keyboard_controller class KeyMapping(object): PitchForward = QtCore.Qt.Key.Key_E PitchBackward = QtCore.Qt.Key.Key_D RollLeft = QtCore.Qt.Key.Key_S RollRight = QtCore.Qt.Key.Key_F YawLeft = QtCore.Qt.Key.Key_W YawRight = QtCore.Qt.Key.Key_R IncreaseAltitude = QtCore.Qt.Key.Key_Q DecreaseAltitude = QtCore.Qt.Key.Key_A Takeoff = QtCore.Qt.Key.Key_Y Land = QtCore.Qt.Key.Key_H Emergency = QtCore.Qt.Key.Key_Space def keyPressEvent(self, event): key = event.key() if key == KeyMapping.Emergency: controller.SendEmergency() elif key == KeyMapping.Takeoff: controller.SendTakeoff() elif key == KeyMapping.Land: controller.SendLand() else: if key == KeyMapping.YawLeft: self.yaw_velocity += 1 elif key == KeyMapping.YawRight: self.yaw_velocity += -1 elif key == KeyMapping.PitchForward: self.pitch += 1 elif key == KeyMapping.PitchBackward: self.pitch += -1 23

Keyboard_controller def keyReleaseEvent(self,event): key = event.key() if key == KeyMapping.YawLeft: self.yaw_velocity -= 1 elif key == KeyMapping.YawRight: self.yaw_velocity -= -1 elif key == KeyMapping.PitchForward: self.pitch -= 1 elif key == KeyMapping.PitchBackward: self.pitch -= -1 24

Les transitions mode manuel/automatique  Problème : le code original de Falkor est conçu pour un contrôle avec une manette de PS3  1ère solution : implémenter la classe Keymapping dans le fichier, faire hériter la classe ardrone_follow de la classe Drone_video_display et y implémenter directement les réactions aux évènements  2ème solution : faire cohabiter les nodes de contrôle automatique et les nodes de contrôle manuel. On supprime alors le subscriber lié au topic joy/. Plusieurs nodes envoient alors des commandes de vitesse au drone.  3ème solution : faire cohabiter les nodes de contrôle automatique et les nodes de contrôle manuel, mais en faisant publier ces dernières dans un topic goal_vel_manual intermédiaire, auquel souscrit la node de contrôle automatique. 25

Explication de chaque programme  Explication du double asservissement : Pid.py et Ardrone_suivi.py Erreur et correcteur de Position Pid2.py et Ardrone_controle.py Erreur et Correcteur de Vitesse Ar Drone Processus Consigne et capteur (Ardrone_suivi.py) 26

Explication de chaque programme Ar-drone : pid.py class Pid2: def __init__( self, gain_p = 0.0, gain_i = 0.0, gain_d = 0.0, time_constant = 0.0, limite = -1.0 ): 1.def update( self, new_input, x, dx, dt ): 2. def reset( self ): Écrêtage par la limite Elaboration du dT et dconsigne Elaboration des erreurs (dérivées, intégrales et simples) Application du correcteur Remise à zéro des paramètres calculées 27

Explication de chaque programme Ar-drone : pid.py class Pid: def __init__( self, Kp = 0.0, Ti = 0.0, Td = 0.0, outputLimit = None ): 1.def get_output( self, pv, dt ): Intervalles Limites Erreur Stockage ancienne erreur Calcul 1/Ti Dérivées et intégrales Correction Limitation existante ? Sortie et Ecrétage 28

Explication de chaque programme Ar-drone : ardrone_suivi.py Imports, objets, paramètres Subscribers, Publishers, rospy.Timer Méthodes annexes (Navdata) Méthode Suivi (Timer/Synchronisée) Main + rospy.spin() def main(): rospy.init_node( ‘Ardrone_suivi' ) af = ArdroneSuivi() try: rospy.spin() except KeyboardInterrupt: print "Keyboard interrupted" af.usb_service() 29

Principe du suivi Centrage du tag par rapport à la caméra en un point déterminé (Asservissement par rapport à un point) Positionnement à une distance donnée (asservissement de distance, distance tag) Tag visible (derrière le drone suivi) On suppose que cela implique une rotation du robot adverse. Engendre une rotation de centre ancienne position du robot adverse, asservie en position angulaire par rapport aux données du drone suivi. Si Tag vu, reprise de l’asservissement ci- dessus, sinon mode « Hover() ». Tag absent 30

L’échange de la rotation entre les programmes Drone de tête Machine virtuelle de commande du drone de tete (client) Machine virtuelle de commande du drone suiveur (serveur) « topic » rotationZ navdata Connexion TCP/IP Echange de navdata.rotZ 31

Explication de chaque programme Ar-drone : ardrone_controle.py  Même structure que précédente.  MAIS réception et re-correction des commandes reçues : Ardrone_ autonomy Topic sub : « cmd_vel» Envoie commandes moteurs Ardrone_controle Topic sub : « cmd_vel_goal » « Correction » vitesse (PID2) Topic pub : « cmd_vel» Ardrone_suivi Elaboration de la commande « Correction » positionS Topic pub : « cmd_vel_goal » 32

Difficultés rencontrées  Implémentation de keyboard_controller (gestion des nodes et « cannibalisme », listening events)  Détection du tag (gestion de la luminosité, tremblements)  Apprentissage partiel du python et du ROS (types, syntaxe, indentation, nodes, sub et Pub, listening events)  Compréhension du SDK de base  Instabilité du drone en vol stationnaire 33

Conclusion  Puissance de l’environnement ROS  Contrôle des drones simple à effectuer  Améliorations  Cohabitation entre contrôle manuel et automatique  Réglage des PID 34