I’m finally able to post a video so you can see problems affecting my robot.
As you can see in the video it responds quickly but then it overshoots in a direction, then falls.
/* PID variables */ double Kp = 20; //30 seems too high 10is too low double Ki = 0.0001; // >0.1 makes wheels run forever double Kd = 100; //100 double targetAngle = 0;
I’ve read that in noisy reading situations you need to set D to zero and only use PI. It will make the robot respond faster but only if I is big enough. You also need to have a maximal I so you do not overshoot. BUT was very hard to turn an instable balancing system into stable control loop without a D part in your PID controller, so I used also D term.
What I’m expecting is the robot going against my finger when I softly touch with a finger, the motor should start immediately and counteract my finger. THAT IS NOT HAPPENING. maybe this is a deadband problem.
I use position control, 10Khz pwm, direct port reading/writing as you can see in the long .ino file attached.
I really want to balance it.
arnital.ino (12.5 KB)