Code: Select all
public Run() {
LocalEV3.get().getLED().setPattern(2);
long start = System.currentTimeMillis();
setup = new Setup();
chassis = setup.getChassis();
lf = setup.getLineFollowerDouble();
System.out.println("Outside: " + ((System.currentTimeMillis()-start)) + "ms");
LocalEV3.get().getLED().setPattern(0);
}
Code: Select all
public Setup() {
long start = System.currentTimeMillis();
/* Chassis */
Wheel leftWheel = WheeledChassis.modelWheel(Motor.B, 6.225).offset(7.275).invert(true);
Wheel rightWheel = WheeledChassis.modelWheel(Motor.C, 6.225).offset(-7.275).invert(true);
chassis = new WheeledChassis( new Wheel[] {leftWheel, rightWheel}, WheeledChassis.TYPE_DIFFERENTIAL);
chassis.setSpeed(15, 60); // cm/s deg/s
chassis.setAcceleration(100, 900); // cm/s^2 deg/s^2
System.out.println("Chassis: " + ((System.currentTimeMillis()-start)) + "ms");
/* Sensor 2 :: Inside Left */
Port port2 = LocalEV3.get().getPort("S2");
System.out.println("Port: " + ((System.currentTimeMillis()-start)) + "ms");
sensor2 = new EV3ColorSensor(port2);
System.out.println("Sensor: " + ((System.currentTimeMillis()-start)) + "ms");
SampleProvider light2 = sensor2.getRedMode();
System.out.println("SampleProvider: " + ((System.currentTimeMillis()-start)) + "ms");
caliLight2 = new LinearCalibrationFilter(light2, caliFile2);
System.out.println("Filter: " + ((System.currentTimeMillis()-start)) + "ms");
System.out.println("Sensor 2: " + ((System.currentTimeMillis()-start)) + "ms");
/* Sensor 3 :: Inside Right */
Port port3 = LocalEV3.get().getPort("S3");
sensor3 = new EV3ColorSensor(port3);
SampleProvider light3 = sensor3.getRedMode();
caliLight3 = new LinearCalibrationFilter(light3, caliFile3);
System.out.println("Sensor 3: " + ((System.currentTimeMillis()-start)) + "ms");
/** Sensor 2 :: Inside Left */
// Port port2 = LocalEV3.get().getPort("S2");
// sensor2 = new NXTLightSensor(port2);
// SampleProvider light2 = sensor2.getRedMode();
// caliLight2 = new LinearCalibrationFilter(light2, caliFile2);
/** Sensor 3 :: Inside Right */
// Port port3 = LocalEV3.get().getPort("S3");
// sensor3 = new NXTLightSensor(port3);
// SampleProvider light3 = sensor3.getRedMode();
// caliLight3 = new LinearCalibrationFilter(light3, caliFile3);
/* Sensor 1 :: Outside Right */
Port port1 = LocalEV3.get().getPort("S1");
sensor1 = new EV3ColorSensor(port1);
color1 = sensor1.getColorIDMode();
// SampleProvider light1 = sensor1.getRedMode();
// caliLight1 = new LinearCalibrationFilter(light1, caliFile1);
System.out.println("Sensor 1: " + ((System.currentTimeMillis()-start)) + "ms");
/* Sensor 4 :: Outside Left */
Port port4 = LocalEV3.get().getPort("S4");
sensor4 = new EV3ColorSensor(port4);
color4 = sensor4.getColorIDMode();
// SampleProvider light4 = sensor4.getRedMode();
// caliLight4 = new LinearCalibrationFilter(light4, caliFile4);
System.out.println("Sensor 4: " + ((System.currentTimeMillis()-start)) + "ms");
/* Linefollower Double */
SimplePID pid = new SimplePID(25, 0, 0);
lfDouble = new DoubleLF(chassis, pid, getInsideLeft(), getInsideRight(), 15);
System.out.println("LFDouble: " + ((System.currentTimeMillis()-start)) + "ms");
System.out.println("Inside: " + ((System.currentTimeMillis()-start)) + "ms");
}
public WheeledChassis getChassis() {
return chassis;
}
public LineFollower getLineFollowerDouble() {
return lfDouble;
}
The output was:
- Chassis: 908ms
- Port: 981ms
- Sensor: 4761ms
- SampleProvider: 4770ms
- Filter: 5177ms
- Sensor 2: 5190ms
- Sensor 3: 8907ms
- Sensor 1: 12325ms
- Sensor 4: 16470ms
- LFDouble: 16833ms
- Inside: 16858ms
- Outside: 17083ms
The total time was 17 sec! From these results one can get the time difference in ms:
- Chassis: 908
- Port: 73
- Sensor: 3780
- SampleProvider: 9
- Filter: 407
- Sensor 2: 13
- Sensor 3: 3717
- Sensor 1: 3418
- Sensor 4: 4145
- LFDouble: 363
- Inside: 25
- Outside: 225
As I can confirm from other tests, each sensor takes about 2.5 - 4.5 seconds to get initialized (see the last 3 sensors).
I broke up the measurement for the first sensor (=sensor 2) even more, and it revealed, that the ca. 3 second wait is due to this line:
Code: Select all
sensor2 = new EV3ColorSensor(port2);
My Robot is built for a timed robot-competition (WRO to be exact) where I'm allowed to start the program beforehand, but it is still a nuisance to wait so long on test runs etc.
Is there a way to initializes the sensors faster, or to parallelize the setup to get a faster setup?