EV3 Line Follower in leJOS (Java)

Modelle zum Nachbauen oder wo gibt es etwas interessantes oder Projekte?

Moderator: Moderatoren

weakIntelligence
Mindstormsfreund
Mindstormsfreund
Beiträge: 4
Registriert: 30. Mai 2016 15:39

EV3 Line Follower in leJOS (Java)

Beitragvon weakIntelligence » 3. Jun 2016 22:31

Ich möchte euch hier mein erstes kleines Mindstorms Projekt vorstellen:
Es handelt sich dabei um einen simplen Line Follower, ausgestattet mit zwei Farbsensoren, zwei Motoren die jeweils ein Rad antreiben und einem Kugelrad.
Die Logik der Programmierung besteht darin, dass die beiden Farbsensoren nebeneinander sind und testen ob die Fläche unter ihnen weiß ist.
Ist dies der Fall, so drehen sich beide Räder nach vorne.
Ist z.B. jedoch der rechte Farbsensor nicht mehr über weiß, so dreht sich das rechte Rad weiter nach vorne und das linke Rad dreht sich rückwärts, bis wieder beide Farbsensoren über der weißen Fläche sind.
Wenn beide Farbsensoren gleichzeitig die weiße Fläche verlassen, ist der Roboter so programmiert, dass er einfach rückwärts fährt,
aber in diesem Fall tut er nicht unbedingt was er tun soll, da gibts wahrscheinlich noch etwas dass ich nicht beachtet habe.
Ansonsten funktioniert der Line Follower schon ganz gut, in gedrosselter Geschwindigkeit :wink:

Ich musste das Programm in zwei Klassen aufsplitten, da ich eine Klasse von der Threadklasse habe erben lassen,
damit man das Programm mit der Escape-Taste unterbrechen kann.
Ansonsten müsste der Code eigentlich recht verständlich sein, sind ja auch nur ein paar Zeilen :D


Code: Alles auswählen

import lejos.hardware.Button;
import lejos.hardware.sensor.EV3ColorSensor;
import lejos.hardware.motor.EV3LargeRegulatedMotor;
import lejos.hardware.port.*;

public class Programm {

   public static void main(String[] args) {
      Routine lauf = new Routine();
      lauf.run();
      Button.ESCAPE.waitForPress();
      lauf.interrupt();
   }
}

class Routine extends Thread {
   public void run() {
      EV3ColorSensor sLinks = new EV3ColorSensor(SensorPort.S1);
      EV3ColorSensor sRechts = new EV3ColorSensor(SensorPort.S4);
      EV3LargeRegulatedMotor mLinks = new EV3LargeRegulatedMotor(MotorPort.A);
      EV3LargeRegulatedMotor mRechts = new EV3LargeRegulatedMotor(MotorPort.D);
      mLinks.setSpeed(150);
      mRechts.setSpeed(150);
      float[] colorLinks = new float[sLinks.sampleSize()];
      float[] colorRechts = new float[sRechts.sampleSize()];
      sLinks.getColorIDMode();
      sRechts.getColorIDMode();
      boolean linksChecken = true, rechtsChecken = true;
      
      while(!Thread.currentThread().isInterrupted()) {
         sLinks.fetchSample(colorLinks, 0);
         sRechts.fetchSample(colorRechts, 0);
         if(!linksChecken || !rechtsChecken) {
            if(colorLinks[0] == 6 && colorRechts[0] == 6) {
               linksChecken = true;
               rechtsChecken = true;
            }
         }
         
         if(colorLinks[0] == 6 && linksChecken == true) {
            mLinks.forward();
         }
         else if (colorLinks[0] != 6 && colorRechts[0] == 6){
            mRechts.backward();
            rechtsChecken = false;
         }
         if(colorRechts[0] == 6 && rechtsChecken == true) {
            mRechts.forward();
         }
         else if (colorRechts[0] != 6 && colorLinks[0] == 6) {
            mLinks.backward();
            linksChecken = false;
         }
         if(Button.ESCAPE.isDown()) {
            this.interrupt();
            break;
         }
         if(colorRechts[0] != 6 && colorLinks[0] != 6) {
            mLinks.backward();
            mRechts.backward();
         }
         
         try {
            Thread.sleep(100);
         }
         catch (InterruptedException e) {
            this.interrupt();
            break;
         }
      }
   }
}
Zuletzt geändert von weakIntelligence am 11. Jun 2016 17:26, insgesamt 1-mal geändert.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5351
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: EV3 Line Follower in leJOS (Java)

Beitragvon HaWe » 4. Jun 2016 13:04

sehr schön, danke für deinen Code!
:prima:
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E


Zurück zu „Projekte, Showcase, Bauanleitungen“

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 16 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss