TP IN4R21

Programmation temps réel d'un véhicule Lego Mindstorms

R. Hamouche, D. Masson, Département ISYS, ESIEE 

2012-2013

    

L'objectif de ce TP est de mettre en oeuvre les concepts temps réel et la programmation Java/RTSJ à travers un exemple de système temps réel embarqué : un véhicule Lego Mindstorms suiveur de ligne.

line_follower_fig

                                                                                                                                      

0. Construction du véhicule


Pour construire le véhicule, suivre ces instructions  (à partir de la page 5).

1. Suivi de trajectoire

LineLeader

Pour suivre une trajectoire au sol, le véhicule s'appuie sur un capteur de lignes (NXTLineLeader). Ce capteur optique composé de 9 sources ponctuelles (leds rouges) et 8 capteurs photosensibles est capables de distinguer les zones noires des zones blanches. La lecture du capteur (voir code ci-dessous) retourne l'état de chaque capteur photosensibles (0: zone blanche, 1 : zone noire).

Importer dans votre workspace ce projet eclipse et compléter l'application pour réaliser un suivi de trajectoire en temps réel basé sur l'algorithme ci-dessous. Penser à réaliser en amont un calibrage du capteur à l'aide du programme Calibrage.java.

// déclaration       
        int result;
        int vm = 200; int a = vm;
        int v1 = vm + a;
        int v2 = vm - a/3;
        int v3 = vm + 3*a;
        int v4 = vm - (4/5)*a;

// un algorithme de suivi de ligne

            result = suiveur.getResult();
            switch(result & 0x3C) 
            {
            case 0x30 : A.setSpeed(v4);C.setSpeed(v3); A.forward();C.forward();break;
            case 0x38 : A.setSpeed(v4);C.setSpeed(v3); A.forward();C.forward();break;
            case 0x20 : A.setSpeed(v2);C.setSpeed(v1); A.forward();C.forward();break;
            case 0x0C : A.setSpeed(v3);C.setSpeed(v4); A.forward();C.forward();break;
            case 0x1C : A.setSpeed(v3);C.setSpeed(v4); A.forward();C.forward();break;
            case 0x04 : A.setSpeed(v1);C.setSpeed(v2); A.forward();C.forward();break;               
            case 0 : A.setSpeed(0); A.stop(); C.setSpeed(0); C.stop(); break;
            default:A.setSpeed(vm);C.setSpeed(vm); A.forward();C.forward();break;   
           }


2. Véhicule réactif à son environnement 

Comme tout système temps réel, le véhicule doit réagir à son environnement. Il doit pouvoir détecter sur le circuit la présence d'éventuels obstacles, et aussi répondre aux consignes de l'utilisateur.

2.1 Détection d'obstacles / suspension du suivi de trajectoire



Pour détecter un obstacle, le véhicule sera équipé d'un capteur ultrason (Ultrasonic sensor) qui fonctionne comme suit : 


// declaration du capteur

        UltrasonicSensor ultraSonicSensor = new UltrasonicSensor(SensorPort.S2);

// utilisation : lecture de la distance de l'obstacle

        int distance = us.getDistance();
        if (distance < 20)
        {
            System.out.println("un obstacle détecté !");
        }




Proposer une solution afin d'intégrer la détection d'obstacle. Cette détection qui arrive de manière asynncrhone implique une suspension immédiat du suivi de trajectoire.

2.2 Consigne utilisateur / reprise du suivi de trajectoire

L'utlisateur peut maintenant envoyer  une consigne de démarage ou de reprise du suivi de trajectoire via un capteur de contact (TouchSensor) qui fonctionne comme suit :

//Déclaration 

TouchSensor touchSensor = new TouchSensor(SensorPort.S3);

// Utilisation  :  détenction d'un appui.

if (touchSensor.isPressed())  System.out.println("un appui  sur le capteur de contact !");


Modifier votre programme pour intégrer cette nouvelle fonctionnalité dans le véhicule.