Valeur de cette activité : 5 points
Compétence :
Compétence :
Compétence :
Programmation du robot NXT en langage python

A-Module 12 : ROBOTIQUE - NXT Python : 5 points - difficulté : 3

Programmation du robot NXT en langage Python

Description




De 3 à 5 points seront alloués pour chacune des tâches réalisées.

Utilisez au besoin les exemples offerts en bas de la page et
le guide des commandes nxc suivant



  1. Téléchargez dans le répertoire /home/cb/ le fichier pynxc-0.1.6.zip ou ici et décompactez-le (clic droit + extraire ici)

  2. Lisez la documentation et la liste des commandes utiles (voir au bas de cette page)

  3. OPTION 1 :En vous servant des exemples offertes dans le répertoire "tutorial_samples", écrivez un programme fonctionnel en langage python en utilisant le logiciel geany, pour chacune des tâches suivantes:
    1. Affichage d'un dessin :
      Tâche à réaliser : Dessiner un cercle de rayon 20 sur l'écran en position 50,30 pendant 3 secondes

    2. Utilisation d'un moteur
      Tâche à réaliser : Faire tourner les moteurs A et B à 100% de leur puissance maximale pour 3 tours et ensuite faire tourner les moteurs A et B à 50% de leur puissance maximale pendant 3 secondes en sens inverse

    3. Utilisation d'un détecteur de toucher
      Tâche à réaliser : Faire tourner les moteurs A et B à 50% de leur puissance maximale lorsque le détecteur de toucher n'est pas activé et arrêter les moteurs lorsque le détecteur de toucher est activé

    4. Utilisation d'un détecteur de son
      Tâche à réaliser : Afficher à l'écran le texte "Trop de bruit" pendant 3 secondes lorsque le niveau sonore dépasse 60 unités




    5. Utilisation d'un détecteur ultrason
      Tâche à réaliser : Faire tourner les moteurs A et B à 100% de leur puissance maximale et arrêter les moteurs lorsque le détecteur ultrason détecte la présence d'un objet à moins de 30 cm.

    6. Affichage d'un texte
      Tâche à réaliser : Afficher le texte "Allo toi!" en position 10,30 sur l'écran du robot

    7. Affichage de la valeur d'un capteur
      Tâche à réaliser : Afficher la valeur du capteur de lumière en position 10,30 sur l'écran du robot (Rafraîchir l'affichage à chaque seconde)

    8. Affichage d'une image :
      Tâche à réaliser : Afficher l'image stop.ric en position 20,20 sur l'écran du robot pendant 5 secondes

      Téléchargez l'ensemble des fichiers images au format .ric en tapant dans le terminal :
      wget http://ladifference.info/i/images//profPierreMorissette/robotique/nbc/fichiers.ric.zip && unzip ./fichiers.ric.zip && rm ./fichiers.ric.zip && cp ./Pictures/* ./

      Voici le liste des images additionnelles que vous pourrez utiliser
      Accept 03.ric         LEGO Brick.ric         Send.ric
      Aim.ric               LEGO Minifig Head.ric  Signal.ric
      Angry 01.ric          Letter.ric             Skeleton 02.ric
      Angry 02.ric          Light Bulb.ric         Sleeping.ric
      Angry 04.ric          Lightning Cloud.ric    Smile 01.ric
      Backward.ric          Lights 02.ric          Smile 02.ric
      Battery Electric.ric  List.ric               Smile 03.ric
      Bluetooth.ric         Lock Locked.ric        Snail.ric
      Bomb.ric              Lock Unlocked.ric      Sound.ric
      Boom.ric              Looking Left.ric       Stop 01.ric
      Camera.ric            Looking Right.ric      Stop 02.ric
      Crazy 01.ric          Map.ric                Stop.ric
      Crazy 02.ric          Microphone.ric         Sun.ric
      Dead.ric              Mobile.ric             Surprise.ric
      Decline 03.ric        Mountain 02.ric        Swearing.ric
      Dont Walk 02.ric      Note 03.ric            Talk 01.ric
      Dont Walk.ric         NXT.ric                Talk 02.ric
      Ear.ric               PC.ric                 Temperature C.ric
      Earth.ric             Point Left.ric         Think.ric
      Eye Closed.ric        Point Right.ric        Time 00.ric
      Eye Open.ric          Point Up.ric           Time 01.ric
      Eye.ric               Power.ric              Time 02.ric
      Floppy Disks.ric      Push Button.ric        Time 03.ric
      Flower.ric            Rabbit.ric             Time 04.ric
      Follow.ric            !.ric                  Timeglass.ric
      Forward.ric           Right 02.ric           Time.ric
      Gasoline.ric          Rotation.ric           Tired 01.ric
      Grey Bulb.ric         Run 01.ric             Trash Can.ric
      Hand.ric              Sad 02.ric             Two Arrows.ric
      Heart 01.ric          Sad.ric                Walk 02.ric
      Heart 02.ric          Satellite 03.ric       Zzzz.ric
      Left 02.ric           Search.ric


    9. Joueur un son
      Tâche à réaliser : jouer un son de votre choix au volume 10 en boucle)

      Téléchargez l'ensemble des sons au format .rso en tapant dans le terminal :
      wget http://ladifference.info/i/images//profPierreMorissette/robotique/nbc/fichiers.rso.zip && unzip ./fichiers.rso.zip && rm ./fichiers.rso.zip && cp ./Sounds/* ./


    10. Jouer une tonalité
      Tâche à réaliser :Composer une courte mélodie musicale de votre choix

    11. Utilisation d'une boucle de répétition while
      Tâche à réaliser : Faire avancer le robot d'une distance de votre choix et le faire reculer de la même distance en boucle

    12. Utilisation d'une boucle de répétition repeat
      Tâche à réaliser : Faire parcourir un carré à votre robot en utilisant une boucle "repeat"

    13. Utilisation d'une structure conditionnelle
      Tâche à réaliser : Faire avancer le robot si le détecteur de toucher est activé et arrêter les moteurs si le détecteur de toucher n'est pas activé.

    14. Utilisation d'une variable simple
      Tâche à réaliser : Utiliser une variable et l'incémentation de cette variable afin de faire accélérer le robot progressivement

    15. Utilisation d'une variable de type tableau
      Tâche à réaliser : Afficher à l'écran 3 marques de voitures en utilisant une variable de type tableau.

    16. Utilisation de la commande "pass"
      Tâche à réaliser : Utiliser la commande pass afin de faire avancer votre robot tant que le détecteur ultrason ne détecte la présence d'un objet à moins de 30 cm.

    17. Définir et utiliser une fonction sans paramètre
      Tâche à réaliser : Utiliser une fonction sans paramètre de votre choix.

    18. Définir et utiliser une fonction avec paramètres
      Tâche à réaliser : Utiliser une fonction avec paramètres de votre choix.

    19. Commandes combinées 1
      Tâche à réaliser : Programmer le robot afin qu'il avance et lorsque le détecteur ultrason branché dans le port 1 détecte une valeur inférieure à 30, alors le robot doit reculer pendant 1 seconde et tourner pendant une seconde.



  4. OPTION 2 : écrivez un programme fonctionnel en langage python en utilisant le logiciel geany, pour chacune des tâches (défis) disponibles dans l'activité 62110 : Étape 0 : Liste des programmes à écrire

  5. Enregistrez sous le nom a.py

  6. Compilez votre programme python en tapant dans le terminal (un fichier .nxc sera créé et un fichier compilé .rxe sera créé) :
    /home/cb/pynxc/pynxc.pyw --download a.py
    ou
    en utilisant le logiciel pynxc.pyw en tapant dans le terminal
    /home/cb/pynxc.pyw
    et en utilisant:
    1) le menu FILE + LOAD PROGRAM FILE
    2) PROGRAM CONVERT (pour convertir le fichier .py au format .nxc)
    3) PROGRAM COMPILE (pour compiler le fichier .nxc au format .rxe)

  7. Branchez et allumez votre robot

  8. Téléchargez le fichier .rxe dans votre robot en tapant dans le terminal :
    sudo t2n -put a.rxe


  9. Valider le fonctionnement de votre programme
  10. Ajoutez une page à votre portfolio en affichant l'assistant HTML ainsi que la directive 129314

  11. Inscrivez dans le champ titre : Programmation du robot NXT en langage Python

  12. Sélectionnez la section : MODULE ROBOTIQUE

  13. Sélectionnez la matière : informatique

  14. Inscrivez dans le champ no de la directive : 129314

  15. Inscrivez dans votre page le titre de niveau 1 : Programmation du robot NXT en langage Python

  16. Insérez le titre de votre tâche

  17. Copiez/collez le code de votre programme entre les balises <pre></pre>

  18. Visualisez votre page et apportez des modifications au besoin.

Liste des commandes utiles

  1. ATTENTION en langage python, on n'utilise pas d'accollades, les accollades sont remplacées par des indentations (espaces entre le coté gauche de la page et le début de la ligne)
    exemple : en langage python
    def main():
        OnFwd(OUT_B, 75)
        Wait(4000)
    
    en langage nxc
    task main(){
    OnFwd(OUT_B, 75);
    Wait(4000);
    }
    
  2. Les commandes principales du langage nxc ( OnFwd(OUT_A, 75); Wait(4000); OnRev(OUT_AB, 75); Off(OUT_AB); etc ) prennent un ; à la fin
    ces mêmes commandes ne prennent pas de ; à la fin avec le langage python
    OnFwd(OUT_A, 75)
    OnFwd(OUT_B, 75)
    Wait(4000)
    OnRev(OUT_AB, 75)
    Wait(4000)
    Off(OUT_AB)
    
  3. Programme principale :
    
    def main():
        OnFwd(OUT_B, 75)
        Wait(4000)
     

    Équivalent nxc :
    task main(){
    OnFwd(OUT_B, 75);
    Wait(4000);
    }
    
  4. Définir une variable numérique :
    def main():
    

    Équivalent nxc :
    DEFINE MOVE_TIME=500
    
  5. Utiliser une boucle de répétition for :
    def main():
        a=5
        for repeat in range(a):
            OnFwd(OUT_AC, 75)
            Wait(MOVE_TIME)
            OnRev(OUT_C, 75)
            Wait(TURN_TIME)
        Off(OUT_AC)
    

    Équivalent nxc :
    repeat(5)
    {
        
    }	
    
  6. Utiliser des boucles imbriquées :
    def main():
    
        for repeat in range(10):
            for repeat in range(4):
                
                OnFwd(OUT_AC, 75)
                Wait(MOVE_TIME)
                OnRev(OUT_C, 75)
                Wait(TURN_TIME)
    
        Off(OUT_AC)
    
    
    
    

    Équivalent nxc :
    repeat(5)
    {
    repeat(4)
    {
    }
       
    }	
    
  7. Utiliser des variables simples et des variables de type tableau (array) :
    bbb=ccc=5.0
    values=Integer([])
    
    def main():
        aaa = 10
        bbb = 20 
        ccc = 30
       
        ArrayInit(values, 0, 3) 
        values[0] = 10
        values[1] = 20
        values[2] = 30
     
    

    Équivalent nxc :
     int nombredepersonnes[] = {10,20, 30}; 
    
  8. Répéter pour toujours :
    
    def main():
        while True:
           OnFwd(OUT_AC, 75)
           Wait(MOVE_TIME)
            
     

    Équivalent nxc :
    while(true)
    {
    }
    
  9. Structure conditionnelle si... autrement
    
    def main():
        a = Random(100) 
            if a >50:
                OnRev(OUT_C, 75)
            else:
                OnRev(OUT_A, 75)
     

    Équivalent nxc :
    int a;   
    a = Random(100); 
    if(  a > 100 )
    {
    OnRev(OUT_C, 75)}
    else
    {
    OnRev(OUT_A, 75)
    }
    
  10. initialiser la communication avec les différents capteurs
    DefineSensors(PORT1,PORT2,PORT3,PORT4)
    Les valeurs acceptées sont :TOUCH, EYES, LIGHT, SOUND, and None.
    DefineSensors(TOUCH,PORT2,PORT3,PORT4)
     
     

    Équivalent nxc :
    SetSensorSound(IN_1); 		
    SetSensorLight(IN_1); 		
    SetSensorTouch(IN_1); 		
    SetSensorLowspeed(IN_1);
    SetSensor(IN_1,LOW_SPEED);
    
    SensorVal(2)
  11. Utiliser la valeur captée par les différents capteurs
    DefineSensors(PORT1,PORT2,PORT3,PORT4)
    Les valeurs acceptées sont :TOUCH, EYES, LIGHT, SOUND, and None.
    SensorVal(2) 
     
     

    Équivalent nxc :
    Sensor(IN_1)
    SENSOR_1 	 
    SensorUS(IN_1) 
    
  12. Insérer un commentaire dans un programme
    #commentaire
     
     

    Équivalent nxc :
    //commentaire
    
  13. Utilisation de la commande "pass" pour poursuivre l'exécution d'un programme sans lancer de commande
    DEFINE NEAR=15
    
    def main():
        DefineSensors(None,None,None,EYES)
        while True:
            OnFwd(OUT_AC,50)
            while SensorVal(4)>NEAR:
                pass
            
            Off(OUT_AC)
            OnRev(OUT_C,100)
            Wait(800)
    
     
     
  14. Définir une fonction sans paramètre
    DEFINE turn_around=OnRev(OUT_B, 75); Wait(3400); a=5; OnFwd(OUT_AB, 75);
    
    def main():
        a=0
        OnFwd(OUT_AB, 75)
        Wait(1000)
        turn_around
        Wait(2000)
        turn_around
        Wait(1000)
        turn_around
        Off(OUT_AB)
     
     

    Équivalent nxc :
     sub tourner(){}	
    
  15. Définir une fonction avec paramètres
    DEFINE turn_right(s,t)=OnFwd(OUT_A, s);OnRev(OUT_B, s);Wait(t);
    DEFINE turn_left(s,t)=OnRev(OUT_A, s);OnFwd(OUT_B, s);Wait(t);
    DEFINE forwards(s,t)=OnFwd(OUT_AB, s);Wait(t);
    DEFINE backwards(s,t)=OnRev(OUT_AB, s);Wait(t);
    
    def main():
    
        backwards(50,10000)
        forwards(50,10000)
        turn_left(75,750)
        forwards(75,1000)
        backwards(75,2000)
        forwards(75,1000)
        turn_right(75,750)
        forwards(30,2000)
        Off(OUT_AB)
     
     

    Équivalent nxc :
     sub tourner(int pwr){}	
    
  16. Définir une fonction méthode no 2
    def inline_turn_around():
        OnRev(OUT_C, 75) 
        Wait(900)
        OnFwd(OUT_AC, 75)
    
    def main():
    
        OnFwd(OUT_AC, 75)
        Wait(1000)
        inline_turn_around()
        Wait(2000)
        inline_turn_around()
        Wait(1000)
        inline_turn_around()
        Off(OUT_AC)
     
  17. Utiliser les outils de dessin et de texte
    
    def main():
    	CircleOut(50,50,20)
    	LineOut(0,0,50,20)
    	RectOut(50,50,80,80)
    	NumOut(30,30,1)
    	TextOut(20,50,"allo")
    	Wait(3000)