Réalité virtuelle et interaction wiimote

publicité
De Decker Claudine
Faure Julie
Gouit Benjamin
Helbling Allan
4ème année Informatique et Réseaux, INSA Toulouse
Tuteur : Thierry Monteil
jeudi 30 mai 2013





I. Présentation du projet
›
›
›
1. Définition du sujet
2. Conduite de projet
3. Scénarii
›
›
›
›
›
1. Présentation de Blender
2. Présentation de Morse
3. Capteurs/Actionneurs
4. Scénario mis en œuvre
5. Bilan sur les outils
›
›
›
›
›
›
1. Communication Morse-Frameself
2. Fonctionnement de Morse
3. Interface côté Morse
4. Problèmes rencontrés
5. Sensor
6. Collector/Dispatcher
›
›
›
›
›
1. Présentation
2. Fonctionnement
3. Règles Drools
4. Testeur Framself
5. Bilan
II .Morse/Blender
III. Interface
IV. FRAMESELF
V. Wiimotes
2
« Réalité virtuelle et interaction avec des
Wiimotes »
 Objectifs :

› Contruire, représenter et interagir avec un
monde virtuel

Sujet « Création de capteurs et
actionneurs dans l'appartement virtuel
du laas afin de mettre en oeuvre divers
scenarii »
3

ADREAM
4

Diagramme de Gantt
5
Objectif : Sécuriser un appartement
 Scenarii envisagés :

6
OU
7
Capteur
de
pression
au sol
8
9

Scenario retenu
10

Blender :
› Logiciel open source, performant, léger et
multiplateforme
11
12

Morse : Modular OpenRobots
Simulation Engine

Environnement : Blender

Intelligence : Scripts python
13

Robots :

Capteurs :
› Thermomètre, caméra, position

Actionneurs :
› Son, lumière, mouvement
14
15
16

Un actionneur : Son (On/Off)

Script morse appelle la fonction Sound
de Blender
17
18
19
20
21

Script du scenario
22
Simulation
du scenario
(carte de
l’appartement du
LAAS)

23

Données
envoyées par le
thermomètre
24

Données envoyées
à l’alarme
25

Bilan sur les outils utilisés :
› Blender : très puissant mais difficile à
prendre en main
› Morse : très bon outil pour simuler la
robotique mais encore en développement
› Python : Découverte du langage
26
1. Communication Morse - FRAMESELF
Pourquoi faire communiquer Morse et
FRAMESELF ?
 Quel intérêt ?
 Comment le faire ?

27
1. Communication Morse - FRAMESELF
Morse
Morse
Interface Java
FRAMESELF
FRAMESELF
28
Comment fonctionne Morse
Envoi de message : port 4000 - Tout ce
qui est relatif à la simulation
 60000, 60001, ... - Tout ce qui est relatif
aux capteurs et aux actionneurs
 Possibilité d'utiliser telnet

29
Interface côté Morse
Utilisation de sockets Java en entrée et
sortie
 Découpage du String reçu en
paramètre stockage de l’id et de sa
valeur dans une Hashmap

30
Problèmes rencontrés
Fermeture des sockets, mais non
bloquant à l'instar de telnet
 Format des messages :
{"x": 0.3566, "pitch": -0.0001023715}
 Utilisation d'expressions régulières

31
Sensor
 Création d'une classe Sensor
 Renvoie un Event interprété par
Collector
 Permet la traduction entre Morse et
Frameself
 Informations contenues :
› Nom du capteur › Valeur
› Emplacement
› Catégorie
32
Collector
 Transmet les Events reçus de la partie
morse à FRAMESELF sur 127.0.0.1:5000
Dispatcher
 Recoit les Actions de FRAMESELF sur
127.0.0.1:6000 et les transmet à la partie
morse sous forme textuelle
33
Présentation
Logiciel d'autonomic
computing
 Génère une IA pour un
système
 Compatible universellement :
OS et software, grâce au Java

34
Fonctionnement
35
Règles Drools
 Règles claires, i.e. non ambigües et
compréhensibles par tous
 Utilise le chainage avant (méthode de
déduction)
 Règles partant de prémisses pour en
déduire de nouvelles conclusions
 Pars de données disponibles pour
extraire davantage de données
36
Règles Drools
rule "add TemperatureHigh"
when
Event($id: id, category == "Temperature", $value:
value,
Integer.parseInt(value) >= 40, $location:
location)
then
Symptom symptom = new Symptom();
symptom.setCategory("TemperatureHigh");
symptom.setValue($value);
symptom.setLocation($location);
symptom.setTimestamp(new Date());
symptom.setExpiry(new Date
(System.currentTimeMillis()+4000));
insert(symptom);
end
37
Règles Drools
rule "add RingAlarm rfc"
when
Symptom(category == "TemperatureHigh",
$locationPres: location)
Symptom(category =="AlarmStateOff",location==$locationPres)
then
Rfc rfc = new Rfc();
rfc.setCategory("RingAlarm");
rfc.setValue("0");
rfc.setLocation($locationPres);
rfc.setTimestamp(new Date());
rfc.setExpiry(new
Date(System.currentTimeMillis()+4000));
insert(rfc);
end
38
Testeur FRAMESELF
39
Bilan
 Outil très puissant et très simple
d'utilisation
 Permet en quelques règles de créer une
IA complète
 Bonne découverte de l'autonomic
computing
40
Utilisation de wiimotes
 API wminput (utilisation la bibliothèque
cwiid)
 Possibilité d'utiliser wmgui (interface
graphique, plus précis)

41

wminput :
› mappage par défaut insuffisant
› fichier de configuration
› contrôle du robot avec la wiimote et le
nunch

Exemple de mappage
Plugin.nunchuk_stick2btn.Up = KEY_UP
Plugin.nunchuk_stick2btn.Down = KEY_DOWN
Plugin.nunchuk_stick2btn.Left = KEY_LEFT
Plugin.nunchuk_stick2btn.Right = KEY_RIGHT
42
Cadre : cahier des charges, partage des
tâches
 Aspects moins scolaires : Blender,
Wiimotes, ...
 Découverte de nouveaux langages nouveaux logiciels
 Contact avec les chercheurs

43

Axes de réflexion
› Approfondissement des notions
› Ecriture de jmorse (Java Morse)
› Création de capteurs/ actionneurs
› Réécriture du script wiimote
44

Remerciements
› Thierry Monteil, pour nous avoir guidé et
›
›
›
›
proposé un sujet réellement intéressant
Pierrick Koch, pour sa disponibilité
Mamoun Gharbi, pour ses conseils
Madhi Ben Alaya, pour sa réactivité
Sami Hamadouche, pour son ouverture
45
Téléchargement