doublerangev_1
23 février 2013

Projet : Virtual Guitar Hero

binary-worldL’idée de base des élèves est de réaliser une guitare ou un clavier virtuel, de générer les sons soit à la souris soit au clavier.

Après s’être documentés, ils ont dégagé plusieurs pistes et différentes technologies :

  • Flash et Actionscript :
    Actionscript est un langage Opensource mais le logiciel Flash est un logiciel propriétaire d’Adobe dont nous ne possédons pas de licence.
  • Python avec Tkinter d’après un tuto de l’excellent  siteduzero
    from Tkinter import *
    # création d'une instance de la classe TK, que l'on affecte à l'objet "root"
    root = Tk()
    # Quelques exemples de touches
    root.bind("<UP>", maFonction) # Flèche haut
    root.bind("<DOWN>", maFonction2) # Bas
    root.bind("<LEFT>", maFonction3) # Gauche
    root.bind("<RIGHT>", maFonction4) # Droite>
  • HTLM5 et javascript : l’avantage avec HTML5 est que le navigateur va gérer l’interface graphique et les évènements Clavier et Souris. De plus il permet une version en ligne, ce qui n’est a priori pas le cas avec python.

Le xylophone HTMl5 & Javascript

Dans une page HTML :
1) On charge les différents sons avec la balise audio HTML5. On donne un identifiant à chacun de ces sons :

<audio id="son1" preload="auto" >
<source src="http://www.isnlab.fr/wp-content/uploads/2013/02/xylo_01.mp3" type="audio/mp3" />
<source src="http://www.isnlab.fr/wp-content/uploads/2013/02/xylo_01.ogg" type="audio/ogg" />
</audio>

2) On affiche une image et on déclenche une fonction (javascript) au survol de l’image onmouseover

<img onmouseover="click1(); return false" alt="" src="images/touche1.png" />

3) Dans la partie javascript, déclaration et récupération des sons

var audio1 = document.getElementById("son1");
//la fonction click1 déclenche le son
function click1() {
      audio1.play();
}

4) Évènement clavier

On récupère les évènements clavier avec la commande :

window.document.onkeydown = checkKey;

Puis lorsque la touche A code ASCII 65  est préssée on déclenche la fonction click1()

function checkKey(e) {
  if (e.keyCode == 65) click1() ;
}

Pour Aller plus loin

5) BUZZ une Bibliothèque JS dédiée au son

buzz

http://buzz.jaysalvat.com/

Connexion en wifi (client serveur)
21 février 2013

Projet : AR.Drone open API

image009L’ARdrone est un hélicoptère autonome que l’on peut diriger avec une tablette ou d’un smartphone à l’aide d’application iOS et  android.

À côté de ça il existe plusieurs projets libres permettant d’accéder au drone.

Après avoir téléchargé et décompressé l’archive ARDrone_SDK_2_0_1.tar.gz sur la page du https://projects.ardrone.org/

pour compiler les sources, il faut :

  • éditer le fichier ARDroneLib/Soft/Build/custom.makefile avant de compiler.
    il faut modifier la ligne 17 et préciser l’ OS en passant de no à yes

     USE_LINUX = yes
  • un script très pratique qui teste les dépendances :
    ARDrone_SDK_Versionxxxxx/ARDroneLib/Soft/Build/check_dependencies.sh
  • ensuite on exécute ./ardrone_navigation dans le répertoire
    /Examples/Linux/Build/Release/
  • puis on peut piloter son ARDrone à l’aide d’une manette de PS2

 

Lecture de Trames Réseau :

En utilisant Wireshark on peut étudier les requêtes clients serveur entre le drone et l’ordinateur qui le pilote.

This is a file from the Wikimedia Commons.Capture d

Capture d’écran de Wireshark 1.0 on ubuntu

Programmation  en Python à l’aide de la bibliothèque python-ardrone

En fait ce drone est aussi un robot qui peut être programmé pour réaliser automatiquement des tâches préprogrammées. Le drone reçoit des ordres via wifi sous forme de commandes AT  comme on a pu l’analyser grâce aux lectures des trames avec Wireshark. La bibliothèque python-ardrone met à disposition du développeur des méthodes  qui déclenche les commandes AT correspondantes.

À télécharger ici : https://github.com/venthur/python-ardrone

On se connecte au drone en wifi. Puis l’utilisation de la bibliothèque est très simple voici un exemple :

#!/usr/bin/env python
import time, libardrone

#declaration de l'objet drone
drone = libardrone.ARDrone()

# decollage 
drone.takeoff()
time.sleep(5)

#on avance droit devant pendant 2 secondes
drone.speed = 0.2
drone.move_forward()
time.sleep(2)

#on tourne à gauche pendant 10 secondes
drone.turn_left()
time.sleep(10)

#puis on avance tout droit pendant 2 secondes
drone.move_forward()
time.sleep(2)

# pour finir on attérit
drone.land()

Voilà ce que cela donne en vidéo :