Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

AR.Drinect

Présentation du mini-projet AR.Drinect. Ecole Centrale de Lille, Intelligence Ambiante 2012-2013.
by

Nathan Gaberel

on 18 January 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of AR.Drinect

Ouverture d'un socket (DatagramSocket) vers le port de récupération des navadata sur le drone (5554) :
DatagramSocket socketNavdata = new DatagramSocket(5554);
Puis on envoie au drone :
AT*CONFIG=seq,"general:navdata_demo","TRUE"
AT*FTRIM=seq
{01,00,00,00} (tickle) Intelligence Ambiante 2012-2013 AR.Drinect Objectifs du mini-projet Utiliser une Kinect pour contrôler un AR.Drone. Pôle Kinect Pôle AR.Drone Contrôle du drone depuis un ordinateur en Java. ARDrinect Démonstration Un AR quoi ? Contrôles 1 3 5 Clément Buchart
Mathieu Dutour
Nathan Gaberel
Clément Pasteau AR.Drone :
Drone volant à 4 moteurs
Conçu pour être contrôlé par un terminal mobile (iOS, Android ...)
Communication WiFi
SDK disponible
2 caméras (360p ou 720p) Décollage / atterrissage / urgence
Déplacements en 3 dimensions
Rotation sur l'axe vertical
Flip
Configurations (alt_max, vit_max...) Angles et mouvements Interface de l'application mobile Commandes AT 4 AT : commandes utilisées dans les télécoms (téléphones, modems, sms, etc).
Exemple :
AT*CMD=param Les commandes AT pour l'AR.Drone Son fonctionnement Borne wi-fi ESSID "ardrone2_xxx"
capteurs (1.0) :
position angulaire du drone
altitude (ultrasons)
vitesses horizontales
capteurs (2.0) :
capteur magnétique (Absolut Control)
capteur pression (hautes altitudes) 2 Hardware Depth sensor RGB sensor Résolution spatiale (selon x et y) en millimètre

Flux VGA à 30Hz Microphones Commandes utilisées :
AT*REF (décollage / atterrissage)
AT*PCMD (déplacement)
AT*FTRIM (calibrage)
AT*CONFIG (configuration)
AT*COMWDG (watchdog) Les paquets wifi transmis au drone par l'application officielle contiennent des commandes AT. Récupération des NavDatas - Initialisation Récupération de la Vidéo Envoi de commandes Driver Il existe de multiples solutions :

OpenNI (& NITE)

OpenKinect

CLNUI

SDK officiel Microsoft OpenNI : Architecture Programme final : Kinect Objectif : Extraire de la position de l’utilisateur au moins 4 informations afin de les utiliser pour piloter le déplacement du Drone

Le pilotage doit être relativement intuitif, tout en limitant les risques de perte de contrôle Programme final : Kinect Solution : Extraire le squelette en 3 dimensions du joueur, et utiliser la position de ses mains L’obtention des coordonnées des membres de l’utilisateur est relativement simple avec OpenNI
-> Utilisation d’un UserGenerator Fonctionnement du SkelsManager Prend en argument l’UserGenerator et la Scene3D

Gère les squelettes des utilisateurs
Membres
Articulations

Dispose de nombreux listeners Programme final : Association Classe Contrôle
Les deux mains sont utilisées
La main gauche commande le drone en vitesse de translation sur les 3 directions
La main droite commande le drone en rotation autour de l’axe vertical, et permet le décollage ou l’atterrissage du drone 1) Démarrage

2) Wave

3) Initialisation

4) Décollage Etapes du décollage Pour résoudre les problèmes de sensibilité de la commande par rapport à la position initiale de l’utilisateur, on utilise des dimensions extraites de son corps comme unité de longueur
Distance entre les épaules en X
Double de la distance nuque-tête en Y
Longueur du bras (tendu à l’initialisation) en Z C'est l'écart horizontal de la main droite par rapport à la hanche droite qui défini la vitesse de rotation HandGenerator UserGenerator On ouvre un socket vers le port vidéo 5555:
socketVideo = new Socket(192.168.1.1, 5555);

puis on envoie :
AT*PMODE=seq,2"
AT*MISC=seq,20,2000,3000"
AT*FTRIM=seq
{01, 00, 00, 00} (tickle)
AT*CONFIG=seq,"general:video_enable","TRUE"
AT*CONFIG=seq,"video:bitrate_ctrl_mode","0" Récupération des navdatas - Thread 1. Hardware 3. Software On vient lire un paquet envoyé par le drone en boucle (toutes les 10ms) :
DatagramPacket packet = new DatagramPacket(buffer);
socketNavdata.receive(packet);
Puis on traite le paquet ... Celui-ci est divisé en plusieurs parties : Le drone retourne un flux d'image sur le port de la vidéo en udp.

On récupère les données que l'on traite pour obtenir une image.

Un nouveau Thread dédié à la récupération de ces paquets fourni alors la vidéo. Header identique pour tous les paquets : vérification de la validité du paquet 2. Middleware
Driver
OpenNI Toutes les informations envoyées au drone passent par des commandes AT.
Pour envoyer une commande AT de type CMD :

On écrit la commande : AT*CMD=truc
On la transforme en hexadécimal (table ASCII)
On stocke cette valeur dans un packet (type DatgramPacket)

Puis on l'envoie sur le socket commande (5556) ! Navdatas - Détails d'un paquet Header public void run() {
isRunning = true;
while (isRunning) {
try {
context.waitAnyUpdateAll();
}
catch(StatusException e) {
System.exit(1);
}
updateImage();
}
context.release();
System.exit(1);
} Contenu identique pour chaque paquet, vérification de la conformité Drone state imageGen = ImageGenerator.create(context);
MapOutputMode mapMode = new MapOutputMode(640, 480, 30); // xRes, yRes, FPS
imageGen.setMapOutputMode(mapMode);
imageGen.setPixelFormat(PixelFormat.RGB24); Contient beaucoup de données sur l'état du drone (en vol, mode urgence activé, ACK de commande). Décoller Option Plusieurs types d'options envoyés par le drone. L'option 0 contient entre autres le niveau de batterie, les angles de position du drone, son altitude, sa vitesse ... On envoie la commande permettant de passer le bit lié au décollage dans le drone à 1.
AT*REF=seq,290718208

On pause le thread pour ne pas surcharger le drone :
Thread.sleep(5)

On envoie cette commande en boucle jusqu'à ce que l'état du drone ait changé (1er bit du drone state passé à 1) Atterrir, Urgence De la même manière :

atterrir : AT*REF=seq,290717696
urgence : AT*REF=seq,290717952

Et on boucle jusqu'à arriver au résultat ! Récupération de la vidéo Déplacements La commande de déplacement comprend 5 arguments :
CombinedYaw, Psi, Theta, vSpeed, aSpeed.
Les valeurs sont des pourcentages (entre -1 et 1) des valeurs max de la configuration du drone.

AT*PCMD=seq, CombinedYaw, phi, theta, vspeed, aspeed

Cette commande appelée avec tous les paramètres de déplacement à 0 correspond au mode hovering (mode stationnaire). Créations des nodes context = new Context();
// add the NITE License
License license = new License("PrimeSense",
"0KOIk2JeIBYClPWVnMoRKn5cdY4="); // vendor, key
context.addLicense(license); Generator Software : OpenNI Nodes Update des nodes Software : NITE & OpenNI Context Démonstrations ImageGenerator & DepthGenerator Software : OpenNI L’ informatique affective (Affective computing) est l'étude et le développement de systèmes et d'appareils ayant les capacités de reconnaître, d’exprimer, de synthétiser et modéliser les émotions humaines.

Origine :  "Affective Computing" MIT Technical Report #321 (Abstract), 1995 Informatique Affective 3 principaux domaines de recherche :

Expression des émotions dans la voix
Expression faciale des émotions
Expression corporelles des émotions
Ce dernier domaine exploite entre autre les périphérique tels que la Kinect pour détecter puis analyser les mouvements et leur significations sur le plan émotionnel Informatique Affective IHM
E-learning
« Social Monitoring »
Publicité Applications Calcul Distribué Le calcul distribué ou réparti ou encore partagé, est l'action de répartir un calcul ou un traitement sur plusieurs microprocesseurs et plus généralement toute unité centrale informatique. * Système distribué Système distribué Extensibilité Hétérogénéité Accès aux ressources et partage Tolérance aux pannes * Projets de calcul distribué Démonstration Projets utilisant le calcul distribué Seti@Home Berkeley Open Infrastructure for Network Computing Quatre micros
canal de 16 bits à 16 KHz

Réduction du bruit ambiant Source de lumière infrarouge (laser) -> projection d'un quadrillage de points

Capteur CMOS infrarouge -> lecture du quadrillage
L'intensité lumineuse -> distance. Précision d'un centimètre (2048 niveaux)

Flux VGA à 30fps Captologie Principe d' étudier, concevoir et analyser des produits informatiques destinés à modifier les attitudes ou les comportements des individus

Un laboratoire à Stanford est spécialisé dans ce domaine L'informatique n'est plus considérée comme un gadget, un outil mais comme une technologie persuasive Jeux vidéos Ontologie Terme emprunté à la philosophie :
"(1) Etude de l'être en tant qu'être, de l'être en soi (2) Etude de l'existence en général, dans l'existentialisme"
Dans la cadre de la programmation orientée objet il s'agit de la réflexion sur les objets manipulés, les classes qui les regroupent, les relations entre ces objets, etc. Exemple Software : NITE SessionManager GestureDetector sessionMan = new SessionManager(context, "Wave", "RaiseHand");
// focus gesture(s), refocus gesture(s) setSessionEvents(sessionMan);
WaveDetector wd = initWaveDetector();
sessionMan.addListener(wd); Merci de votre attention ! La description de la scène nécessite :
1. un vocabulaire non ambigu
2. une énonciation des faits de la scène
Full transcript