Advertisement
Guest User

LeJos autonomous robot not working properly

a guest
Apr 27th, 2015
352
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.30 KB | None | 0 0
  1. import lejos.nxt.*;
  2. import lejos.robotics.ColorDetector;
  3. import java.lang.*;
  4. public class BehaviorThread {
  5.   public static void main(String[] aArg)
  6.     throws Exception {
  7.     //KALIBRERING
  8.         LightSensor localLightSensor = new LightSensor(SensorPort.S1); //definerer lyssensor med navnet localLightSensor
  9.         localLightSensor.setFloodlight(true); //tænder lyset
  10.         int high = 0;
  11.         int low = 0;
  12.     LCD.drawString("Left to calibrate", 0, 0);
  13.         Button.LEFT.waitForPress();
  14.         localLightSensor.calibrateHigh();
  15.         high = localLightSensor.readValue();
  16.         LCD.clear();
  17.         LCD.drawString("White calibrated", 0, 0);
  18.     LCD.drawString("Right for black",0,2);
  19.         Button.RIGHT.waitForPress();
  20.         localLightSensor.calibrateLow();
  21.         low = localLightSensor.readValue();
  22.         LCD.clear();
  23.         LCD.drawString("Black calibrated", 0, 0);
  24.     LCD.drawString("Right to run!", 0, 2);
  25.     Button.RIGHT.waitForPress();
  26.    
  27.     //VARIABLER TIL ULTRALYD
  28.     UltrasonicSensor localUltrasonicSensor = new UltrasonicSensor(SensorPort.S3);
  29.         localUltrasonicSensor.continuous();
  30.         int dist = 0;
  31.    
  32.     //VARIABLER TIL FARVESENSOR
  33.     ColorSensor localColorSensor = new ColorSensor(SensorPort.S4);
  34.         int color = 0;
  35.         int RED = ColorSensor.Color.RED;
  36.         localColorSensor.setFloodlight(RED);
  37.         color = localColorSensor.getColorID();
  38.  
  39.        
  40.     //VARIABLER TIL LINEFOLLOWING
  41.       int offset = (high + low) / 2; //gennemsnit ml sort og hvid
  42.       int Tp = 35; //motor power når der køres ligeud
  43.       int Kp = 35000; //hældningskoefficienten for linjen, konstant til styring af power
  44.       //40000
  45.       int Ki = 42; //konstant til justering af integralet
  46.       int Kd = 600000; //konstant til justering af derivative
  47.      
  48.       int integral = 0;
  49.       int lastError = 0;
  50.       int derivative = 0;
  51.      
  52.       int LightValue = 0;
  53.       int error = 0;
  54.       int Turn = 0;
  55.       int PowerA = 0;
  56.       int PowerC = 0;
  57.      
  58.       NXTMotor mA = new NXTMotor(MotorPort.A);
  59.       NXTMotor mC = new NXTMotor(MotorPort.C);
  60.    
  61.       int i = 0;
  62.       int g = 0;
  63.       int positive = 0;
  64.    
  65.       while (!Button.ESCAPE.isDown())
  66.       {
  67.    
  68.         i = i + 1;
  69.         g = g + 1;
  70.        
  71.     //Følgende kode crasher robotten, når den har kørt i kort tid. Vi ved ikke, hvorfor.
  72.     /*  class ColorCheck extends Thread {
  73.             public void run()
  74.             {
  75.                 //ColorSensor localColorSensor = new ColorSensor(SensorPort.S4);
  76.                 int v = 0;
  77.                 int color = 0;
  78.                 while (v  <= 50) {
  79.                     v = v + 1;
  80.                     color = localColorSensor.getColorID();
  81.                     //LCD.clear();
  82.                     LCD.drawInt(color,0,4);
  83.                     Sound.beep();
  84.                 }
  85.             }
  86.                
  87.             }      
  88.         ColorCheck farve = new ColorCheck();
  89.         //farve.setDaemon(true);
  90.         farve.start();
  91.     */
  92.        
  93.         //LOOP TIL ULTRALYDSSENSOR 
  94.         if (i == 750) {
  95.         i = 0;
  96.         dist = localUltrasonicSensor.getDistance();
  97.        
  98.         while (dist < 30) {
  99.             mA.setPower(0);
  100.             mC.setPower(0);
  101.             mA.forward();
  102.             mC.forward();
  103.             dist = localUltrasonicSensor.getDistance();
  104.             LCD.drawInt(dist,7,2);
  105.                 if (dist > 30) {
  106.                 break;  }
  107.         }
  108.                
  109.         }
  110.        
  111.       //AKTIVERING AF FARVESENSOR
  112.         if (g == 750) {
  113.         g = 0;
  114.         color = localColorSensor.getColorID();
  115.             if (color == 0 || color == 2) {
  116.                 if (color == 0) {
  117.                     LCD.drawString("RED-RED-RED-RED-RED-RED",0,1);
  118.                 }
  119.                 if (color == 2) {
  120.                     LCD.drawString("BLUE-BLUE-BLUE-BLUE-BLUE",0,2);
  121.                 }
  122.                 //mA.setPower(0);
  123.                 //mC.setPower(0);
  124.                 //mA.forward();
  125.                 //mC.forward();
  126.             }
  127.        
  128.         }
  129.    
  130.       //LINEFOLLOW
  131.       LightValue = localLightSensor.readValue();
  132.       error = LightValue - offset;
  133.       integral = integral + error;
  134.       derivative = error - lastError;
  135.      
  136.      
  137.       LCD.clear();
  138.       LCD.drawString("Error",0,0);LCD.drawInt(error,7,0);
  139.       LCD.drawString("Light",0,1);LCD.drawInt(LightValue,7,1);
  140.       LCD.drawString("Turn",0,2);LCD.drawInt(Turn,7,2);
  141.       LCD.drawString("Dist",0,3);LCD.drawInt(dist,7,3);
  142.          
  143.      
  144.                 Turn = Kp * error + Ki * integral + Kd * derivative;
  145.                 Turn = Turn / 100000;
  146.                 PowerA = Tp + Turn;
  147.                 PowerC = Tp - Turn;
  148.        
  149.                
  150.                 if (PowerA > 0)
  151.                 {
  152.                   mA.setPower(PowerA);
  153.                   mA.forward();
  154.                 }
  155.                 else
  156.                 {
  157.                   PowerA = PowerA * -3;
  158.                   mA.setPower(PowerA);
  159.                   mA.backward();
  160.                 }
  161.                 if (PowerC > 0)
  162.                 {
  163.                   mC.setPower(PowerC);
  164.                   mC.forward();
  165.                 }
  166.                 else
  167.                 {
  168.                   PowerC = PowerC * -3;
  169.                   mC.setPower(PowerC);
  170.                   mC.backward();
  171.                 }
  172.              
  173.             lastError = error;
  174.         }
  175.    
  176.   }
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement