Back to success stories

Sample of Defect

Project Name CID Checker Category Developer Description
niskyRobotics/javadeck 118707 INFINITE_LOOP Program hangs Detected an oversight while programming, that would have possibly caused severe hardware damage to a competition robot by not allowing the drivetrain to shut down.
File: /src/main/java/ftc/team6460/javadeck/api/motion/impl/PositionBasedDrivetrain.java
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
        double distDuringAccel = Math.max(0.5 * maxSpeed * maxSpeed / accel, distance / 2);
        double holdTime = (distDuringAccel * 2 - distance) / maxSpeed;
        double accelTime = Math.sqrt(2 * distDuringAccel / accel);
        assert (holdTime >= 0) : "holding speed for negative time";

        // 1/2 a t^2, but twice due to decel time as well
        assert (Math.abs(distance - (accel * accelTime * accelTime + holdTime * maxSpeed)) < ASSERTION_ALLOWED_ERROR);
        assert (accelTime * accel <= maxSpeed);


        try {
            long tStart = System.currentTimeMillis();
            // accelerate
            long millisNow = 0;
            double spd;
            while (millisNow < accelTime) {
                spd = millisNow * accel;
                assert (spd <= maxSpeed);
                millisNow = System.currentTimeMillis() - tStart;
                ((HolonomicDrivetrain) vd).set2DVelocity(spd * Math.cos(holonomicAngleOffset), spd * Math.sin(holonomicAngleOffset));
                // hardware writes occur every 50msec
                Thread.sleep(MSEC_PER_CONTROL_ITER);
            }
 << If "millisNow < accelTime + holdTime" is initially true then it will remain true.
229
230
231
232
233
            while (millisNow < (accelTime + holdTime)) {
                spd = maxSpeed;
                ((HolonomicDrivetrain) vd).set2DVelocity(spd * Math.cos(holonomicAngleOffset), spd * Math.sin(holonomicAngleOffset));

                Thread.sleep(MSEC_PER_CONTROL_ITER);
 << Bottom of the loop.
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
            }
            while (millisNow < (2 * accelTime + holdTime)) {
                spd = (2 * accelTime + holdTime - millisNow) * accel;
                assert (spd <= maxSpeed);
                assert (spd >= 0);
                millisNow = System.currentTimeMillis() - tStart;
                ((HolonomicDrivetrain) vd).set2DVelocity(spd * Math.cos(holonomicAngleOffset), spd * Math.sin(holonomicAngleOffset));
                // hardware writes occur every 50msec
                Thread.sleep(MSEC_PER_CONTROL_ITER);
            }
            vd.stopAll();
        } catch (InterruptedException | PeripheralInoperableException | PeripheralCommunicationException e) {
            throw new RobotHardwareException(e);
        }
    }

    @Override
    protected double calculateDrift(RelativePosition travel) {
        return 0;
    }

    @Override
    protected double calculateAngularDrift(RelativePosition travel) {
        return 0;
    }

    @Override
Events:
loop_condition PositionBasedDrivetrain.java:229
loop_bottom PositionBasedDrivetrain.java:234
loop_top PositionBasedDrivetrain.java:229