Quote:
Originally Posted by Alan Anderson
Maybe you could do a "delay" in the other direction. Do a simple prediction of what the angle is likely be the next time through the loop, and use that as your feedback value instead of the current angle.
I didn't look closely enough at your code to be certain, but are you sure you have the right sign on your Kd term? It should act to reduce motor speed, but you describe it as causing more current to be drawn.
Also, are you using Victor speed controllers? They have a dead band around the neutral point that makes them a bit unsuited for applications requiring the motors to hold a given position. If you're very careful, you can account for the dead band in software, but you have to make sure everything is appropriately calibrated.
|
I think the strategy of modelling the response may not work since the time step is so small... and if you were to model it for too many timesteps you get problems with response.
maybe you can introduce a decay coefficient which basically says if the error hasn't changed significantly in the previous N iterations (where N is large enough to account for oscillation type behaviour), and the error is below some constant decay the output by a growing coefficient.