Modifications

Sauter à la navigation Sauter à la recherche
aucun résumé de modification
Ligne 2 : Ligne 2 :     
== Senseur de mouvement ==
 
== Senseur de mouvement ==
{{traduction}}
  −
   
{{bloc-etroit|text=Le Sense HAT met en oeuvre de nombreux senseurs, l'un d'eux est un senseur de mouvement appelé IMU. L'IMU est capable de mesurer le type de mouvement qu'il subit.
 
{{bloc-etroit|text=Le Sense HAT met en oeuvre de nombreux senseurs, l'un d'eux est un senseur de mouvement appelé IMU. L'IMU est capable de mesurer le type de mouvement qu'il subit.
   Ligne 18 : Ligne 16 :  
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Mouvement.jpg]]
 
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Mouvement.jpg]]
   −
Why is a movement sensor important, though? When you're up in space there is one question of absolute importance to which you must always know the answer: which way am I pointing?
+
Pourquoi un senseur de mouvement est-il si important?  
   −
If you don't know your orientation you are in big trouble, so an IMU sensor like this one is used on all manned and unmanned spacecraft to track movements and maintain an understanding of orientation. Even the earliest spacecraft had them. Ask your grandparents if they remember the [http://en.wikipedia.org/wiki/Apollo_program Apollo missions] (''wikipedia, anglais'') that landed humans on the surface of the moon.
+
Quand vous êtes dans l'espace il y a une question d'importance absolue à laquelle vous devez {{underline|toujours}} être capable de répondre: dans quelle direction suis entrain de pointer?
   −
Above is a picture of the IMU sensor from the Apollo command module. You'll notice how big it is compared to the tiny black cube on the Astro Pi; that's the difference between 1975 and 2015 technology. Incidentally, the Astro Pi IMU is probably not as accurate as the Apollo one, however it is a million times cheaper!}}
+
Si vous ne connaissez pas votre orientation alors vous avez un énorme problème. Par conséquent, une centrale inertielle (senseur IMU) est utilisée dans tous les engins spatiaux habités et non habités. Ce senseur permet savoir quelle est l'orientation et fait en sorte de maintenir cette information "correcte". Même un ancien engin spatial dispose d'un IMU. Demandez à vos grand-parents s'ils se souvennent des [http://en.wikipedia.org/wiki/Apollo_program missions Apollo] (''wikipedia, anglais'') qui ont emmené des humains sur la surface de la lune.
 +
 
 +
La photo ci-dessus présente le senseur IMU de module de commande Apollo. Notez comme ce module est imposant comparé au petit cube noir qui équipe votre Sense-Hat; c'est la différence entre la technologie de 1975 et celle de 2015. Par ailleurs, l'IMU du Hat Sense n'est pas aussi précis que celui d'Appolo, mais il coûte aussi un million de fois moins cher!}}
    
== Comment l'orientation est elle représentée? ==
 
== Comment l'orientation est elle représentée? ==
Ligne 43 : Ligne 43 :     
== Démonstration Appolo Soyuz ==
 
== Démonstration Appolo Soyuz ==
The image below shows the Apollo Soyuz module that was used to take humans to the surface of the moon during the 1970s. The 3D demo we're going to play with shows this same spacecraft (but with less detail).
+
L'image ci-dessous présente le module Apollo Soyuz utilisé pour emporter des humain sur la surface de la lune durant les années 1970. La démontration 3D avec laquelle nous allons jouer montre le même vaisseau spatiale (mais avec moins de détails).
    
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Mouvement-10.jpg]]
 
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Mouvement-10.jpg]]
   −
You will need to have your Raspberry Pi and Sense HAT connected to the internet in order to download the required software.
+
Vous aurez besoin de votre Raspberry Pi et d'un Hat Sense connecté sur Internet de façon à pouvoir télécharger les logiciels nécessaires.
   −
Enter the commands below into a terminal window:
+
Entrez la commande suivante dans une fenêtre terminal:
    
  <nowiki>sudo apt-get install python3-pip
 
  <nowiki>sudo apt-get install python3-pip
Ligne 57 : Ligne 57 :  
sudo ./soyuz.py</nowiki>
 
sudo ./soyuz.py</nowiki>
   −
Pi 1 users will have to wait 3 to 4 minutes for this to load. For Pi 2 users it's about 30 seconds. When you see the spacecraft appear on the screen start moving the Raspberry Pi and Sense HAT around with your hands. The the main booster is where the SD card slot is on your Pi.
+
Les utilisateurs de Pi ancienne génération devrons attendre 3 ou 4 minutes pour achever le chargement.  
 +
 
 +
30 secondes de chargement seront nécessaires pour les utilisateurs de Pi 2.  
 +
 
 +
Commencez à bouger votre Raspberry-Pi lorsque vous verrez le vaisseau spatiale apparaître à l'écran. Le bruleur principal se trouve du côté du lecteur de carte SD de votre Pi.
 +
 
 +
Voyez si vous pouvez identifier les différents mouvement d'élévation ''pitch'', roulis/roulement ''roll'' et embardée ''yaw''.  
   −
See if you can get the spacecraft to do the pitch, roll and yaw movements. Refer back to the [https://www.youtube.com/watch?v=pQ24NtnaLl8 video] (''YouTube, anglais'') if you need to remind yourself which is which.
+
Le code derrière cette démo fait principalement appel à la fonction {{fname|get_orientation}} du sense hat (fonction qui accède au senseur IMU). Cette fonction retourne trois angles entre 0 et 360 degrés, une valeur pour chaque axe(''pitch'', ''roll'' et ''yaw''). Le modèle du vaisseau spatial subit alors une rotation de ces mêmes angles  de façon à pointer dans la même direction. Cette opération est répétée encore et encore de façon à maintenir ''rapidement'' l'orientation du modèle avec celle rapportée par le senseur IMU.
   −
The code behind this demo is basically calling the Sense HAT {{fname|get_orientation}} function which accesses the IMU sensor. This then returns three angles between 0 and 360 degrees, one for each axis (pitch, roll and yaw). The spacecraft model is then rotated by those angles so that it points in the same direction. This is all repeating over and over very quickly to maintain the orientation of the model with what the IMU is reporting.
+
Pour quitter la démo, pressé sur la touche {{fname|Esc}}.
   −
Press {{fname|Esc}} to exit the demo. Let's try a simpler version of this ourselves in code.
+
Essayons maintenant de réaliser une version simplifié de ce programme.
    
== Quelle direction est-elle pointée? ==
 
== Quelle direction est-elle pointée? ==
'''1.''' Open '''Python 3''' from a terminal window as sudo by typing:
+
'''1.''' Ouvrez '''Python 3''' dans une fenêtre terminal en utilisant {{fname|sudo}} avec la commande suivante:
    
  <nowiki>sudo idle3 &</nowiki>
 
  <nowiki>sudo idle3 &</nowiki>
      −
'''2.'''  Select {{fname|File > New Window}} (''Fichier > Nouvelle fenêtre'') and enter the following code:
+
'''2.'''  Selectionnez le menu {{fname|File > New Window}} (''Fichier > Nouvelle fenêtre'') et entrez le code suivant:
    
  <nowiki>from sense_hat import SenseHat
 
  <nowiki>from sense_hat import SenseHat
Ligne 83 : Ligne 89 :  
print("pitch %s roll %s yaw %s" % (pitch, roll, yaw))</nowiki>
 
print("pitch %s roll %s yaw %s" % (pitch, roll, yaw))</nowiki>
   −
'''3.''' Select {{fname|File > Save}} (''Fichier > Sauver sous'') and choose a file name for your program.
+
'''3.''' Sélectionnez le menu {{fname|File > Save}} (''Fichier > Sauver sous'') et choisissez une nom pour votre programme.
   −
'''4.'''  Select {{fname|Run > Run module}} (''Executer > Exécuter module'').
+
'''4.'''  Sélectionnez {{fname|Run > Run module}} (''Executer > Exécuter module'').
   −
'''5.''' If you see the error {{fname|IMU Init Failed, please run as root / use sudo}} on the last line in red, it means you haven't followed the instructions above. Close everything and go back to step 1.
+
'''5.''' Si vous voyez l'erreur {{fname|IMU Init Failed, please run as root / use sudo}} sur la dernière ligne en rouge, cela signifie que vous n'avez pas suivit les instructions ci-dessus. Fermez tout et reprenez à l'étape 1.
    
Le message "IMU Init Failed" signifie "''Echec d'initialisation de l'IMU''".
 
Le message "IMU Init Failed" signifie "''Echec d'initialisation de l'IMU''".
   −
'''6.''' You should now see something like this:
+
'''6.''' Vous devirez maintenant un résultat semblable à celui-ci:
    
  <nowiki>IMU Init Succeeded
 
  <nowiki>IMU Init Succeeded
Ligne 98 : Ligne 104 :  
La première ligne "IMU Init Succeeded" signifie que l'IMU à été initialisé avec succès.
 
La première ligne "IMU Init Succeeded" signifie que l'IMU à été initialisé avec succès.
   −
'''7.'''  We don't need all the numbers after the decimal point so let's round them off. Just before the print("pitch %s roll %s yaw %s" % (pitch, roll, yaw)) line, add these lines below:
+
Vous noterez également les 3 valeurs "pitch", "roll" et "yaw" dont nous avons expliqué la signification plus haut dans l'article.
 +
 
 +
'''7.'''  Nous n'avons pas besoin de toutes ces décimales derrière le point. Nous allons faire le nécessaire pour les arrondir juste avant l'instruction {{fname|print("pitch %s roll %s yaw %s" % (pitch, roll, yaw))}} avec les lignes suivantes:
   −
  <nowiki>pitch = round(pitch, 1)
+
  <nowiki>pitch = round(pitch, 1) # ne garder qu'un seul chiffre après le point décimal.
 
roll = round(roll, 1)
 
roll = round(roll, 1)
 
yaw = round(yaw, 1)</nowiki>
 
yaw = round(yaw, 1)</nowiki>
    
== Surveiller les mouvements ==
 
== Surveiller les mouvements ==
It would be good to monitor the axis values changing during movements, so let's put your code into a {{fname|while}} loop and run it again:
+
Ce serait bien de surveiller les valeurs sur les différents axes, plaçons notre code dans une boucle {{fname|while}} et exécutons le une nouvelle fois:
    
  <nowiki>while True:
 
  <nowiki>while True:
Ligne 119 : Ligne 127 :  
   print("pitch %s roll %s yaw %s" % (pitch, roll, yaw))</nowiki>
 
   print("pitch %s roll %s yaw %s" % (pitch, roll, yaw))</nowiki>
   −
Move the Pi around in your hand and you should see the numbers changing. See if you can just make one axis change by moving only in the pitch direction for example. Do this for all three axes. Press {{fname|Ctrl - C}} to stop the program.
+
Déplacez votre Pi dans votre main et vous deviez voir les numbres changer. Voyez si vous pouvez modifier la valeur d'un axe en bougeant votre Pi dans la direction "pitch" (élévation) comme indiqué dans les diagrammes.
 +
 
 +
Répéter l'opération pour les 3 axes. Pressez {{fname|Ctrl - C}} pour arrêter le programme.
    
== Afficher l'orientation sur la matrice LED ==
 
== Afficher l'orientation sur la matrice LED ==
'''1.'''  
+
'''1.''' Afficher quelque-chose provenant de l'univers 3D sur un afficheur 2D est toujours un challenge, plus spécialement si votre afficheur à une taille de 8 x 8 point. Une option qui fonctionnerait bien serait d'utiliser une LED pour chaque axe et de déplacer cette LED de différente façon. Par exemple:
 +
 
 +
* La LED pitch (''élévation'') pourrait monter et descendre
 +
* La LED roll (''roulis, roulement'') pourrait aller d'un côté à l'autre
 +
* La LED yaw (''embardée'') pourrait se déplacer le long des bordures
 +
 
 +
'''2.''' Voici une astuce intelligente que vous pouvez réaliser. La table ci-dessous affiche le numéro des LEDs (numérotation séquentielle) organisées en lignes horizontale.
 +
 
 +
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Mouvement-20.jpg]]
 +
 
 +
Pour chacun de ces numéros, il est possible des les convertir en coordonnées X Y en utilisant le code ci-dessous.
 +
 
 +
<nowiki>y = number // 8
 +
x = number % 8</nowiki>
 +
 
 +
Pour la valeur {{fname|y}} vous pouvez utiliser une division entière {{fname|//}} par le nombre 8. Dans division entière, la valeur décimale (et donc le "reste de la division") est simplement ignoré. Ensuite, la valeur de {{fname|x}} est le module {{fname|%}} par 8, ce qui donne '''uniquement''' le reste de la division par 8.
 +
 
 +
Voici un exemple basé sur le point/pixel 60 se trouvant sur la ligne du bas:
 +
 
 +
<nowiki>60 // 8 = 7
 +
60 % 8 = 4</nowiki>
 +
 
 +
Notez de '''7'' * 8 + '''4''' donne bien '''60''' :-)
 +
 
 +
'''3.''' Essayez le code suivant:
 +
 
 +
<nowiki>number = 60
 +
 
 +
y = number // 8
 +
x = number % 8
 +
 
 +
sense.set_pixel(x, y, 255, 255, 255)</nowiki>
 +
 
 +
'''4.''' La chose vraiment intelligente dans cet astuce est de réaliser une liste contenant les numéros de LEDs correspondantes à la directions souhaitée. Il suffira alors de se déplacer d'avant en arrière dans cette liste en fonction de la valeur de l'axe.
 +
 
 +
Disons maintenant que nous voulons créer une suite de LEDs à allumer le long des bords de la matrice. Nous allons construire notre liste sur la ligne du haut, puis descende le long du coté droit, aller de gauche à droite sur la ligne du bas et finalement remonter le coté gauche de la matrice.
 +
 
 +
Cela donnera la liste suivante:
 +
 
 +
<nowiki>edge = [0, 1, 2, 3, 4, 5, 6, 7, 15, 23, 31, 39, 47, 55, 63, 62, 61, 60, 59, 58, 57, 56, 48, 40, 32, 24, 16, 8]</nowiki>
 +
 
 +
En anglais, le mot ''edge'' signifie "bordure".
 +
 
 +
Nous pouvons alors trouver la longueur de cette liste en utilisant la fonction {{fname|len}}:
 +
 
 +
<nowiki>length = len(edge)</nowiki>
 +
 
 +
Donc la taille est 28. Si nous divisons 28 par 360 nous avons un rapport entre , disons, la mesure de "yaw" (embardée) et la position de la LED dans notre liste (la distance a parcourir le long de la bordure). Nous pouvons maintenant obtenir le numéro séquentiel du point/pixel directement depuis la liste. De cette valeur "séquentielle" nous pouvons obtenir les coordonnées x et Y de la LED et allumer cette LED (comme expliqué au début de cette section)!
 +
 
 +
Comme ceci:
 +
 
 +
<nowiki>from sense_hat import SenseHat
 +
 
 +
sense = SenseHat()
 +
sense.clear()
 +
 
 +
edge = [0, 1, 2, 3, 4, 5, 6, 7, 15, 23, 31, 39, 47, 55, 63, 62, 61, 60, 59, 58, 57, 56, 48, 40, 32, 24, 16, 8]
 +
length = len(edge)
 +
ratio = length / 360.0
   −
Displaying something which is 3D in a 2D way is always a challenge, especially when your screen is only 8 x 8 pixels in size. One way which might work well is to have one LED for each axis and then make them move in different ways. For example:
+
while True:
 +
    o = sense.get_orientation()
 +
    pitch = o["pitch"]
 +
    roll = o["roll"]
 +
    yaw = o["yaw"]
   −
* The pitch LED (''élévation'') could go up and down
+
    yaw_list_position = int(yaw * ratio) # Position dans la liste pour YAW
* The roll LED (''roulis, roulement'') could go side to side
  −
* The yaw LED (''embardée'') could chase around the edge
     −
'''2.''' Here is a clever trick you can do. The table below shows the sequential LED numbers laid out in horizontal rows.
+
    yaw_pixel_number = edge[yaw_list_position] # Numéro du pixel pour YAW
   −
[[Fichier:RASP-SENSE-HAT-ASTRO-PI-Mouvement-20.jpg]]
+
    y = yaw_pixel_number // 8  # Calcul de la position Y du pixel
 +
    x = yaw_pixel_number % 8  # Calcul de la position X du pixel
 +
 
 +
    sense.set_pixel(x, y, 255, 255, 255) # Allumer le pixel</nowiki>
 +
 
 +
'''5.''' Ce qui vous aurez certainement remarqué dans le code ci-dessus, c'est qu'il ne fait qu'allumer les LEDs. Nous vous laissons le soin de trouver, par vous même, le code à utiliser pour éteindre les LEDs.
 +
 
 +
Essayez d'avoir des variables pour la valeur de {{fname|x}} et {{fname|y}} lorsque la boucle à été exécutée la fois précédente. Si la nouvelle valeur de {{fname|x}} et {{fname|y}} (du pixel à allumer) est différente de l'ancienne valeur alors vous pouvez utiliser {{fname|set_pixel}} pour éteindre la LED (la mettre en noir).
    
{{RASP-SENSE-HAT-ASTRO-PI-TRAILER}}
 
{{RASP-SENSE-HAT-ASTRO-PI-TRAILER}}
29 917

modifications

Menu de navigation