We are trying to debug encoders to get an accurate reading, and determined that some sort of lag spikes happen randomly. I stripped the loop so that it only checks for a raw value (for debugging purposes), and stops the motor when the value is >=1440 (360 deg rotation using k4X encoding type) and prints the number of milliseconds it took. Most of the time it runs for ~630 ms, but when the random lag spike hits, it runs for anywhere between 700 ms to 800 ms.
Our loop:
t1.set(0.15);
t2.set(0.15);
while(isAutonomous() && isEnabled()){
if(encoder.getRaw())>=1440-56){ // it overshoots everytime, so -56 to compensate
t1.set(0.0);
t2.set(0.0);
clock.stop();
SmartDashboard.putNumber("Timer: ", clock.get());
}
}
the logs just read “Warning” and “WARNING” messages and nothing else
Edit: The warning are just for events like Driver station loosing communication, and other network communication events probably from reloading the code.
When I put in the timer delay, it’s not updating fast enough and overshoots inconsistently.
**EDIT: I tried the 0.005 timer delay. It’s more consistent, but still hiccups. Every 6-12 times we test it, it overshoots by a lot, somewhere from 100 ms to a second longer overshoot. **
I don’t see any reason in the code for that to happen. I would ensure the encoder is providing proper feedback, maybe adjust oversampling rates, etc. You should also try using a PID loop and see if smarter code can compensate for the lag.