|
|
|
![]() |
|
|||||||
|
||||||||
|
|
Thread Tools | Rate Thread | Display Modes |
|
#6
|
|||
|
|||
|
Re: Full State Feedback Question
Quote:
I've used 3 ways to do integral control over the years. 1) Augment the plant as you described. For an arm, you would add an "integral of position" state which would do that. 2) Add an integrator to the output of your controller, and then estimate the control effort being applied. I've called this Delta U control before. The up-side is that it doesn't have the windup issue you described above. The downside is that it is very confusing to work with. 3) Estimate a "voltage error" in your observer and compensate for it. This quantity is the difference between what you applied and what was observed to happen. To use it, you literally add it to your control output, and it'll converge. I'm currently using this as my primary method. The math to do that is as follows: dx/dt = A x(t) + B (u(t) + u_error) dx/dt = A x(t) + B u_error + B u(t) We can then augment x to be -> x' = [x.T, u_error].T This then can be rephrased as: dx'/dt = [A, B; 0, 0] x(t) + [B; 0] u(t) This then sets your observer up to estimate both your state and the u_error term (assuming a SISO, but you can generalize to N dimensions if you need to). I like to work out the physics in continuous time and then convert to discrete time. You can then augment your controller similarly. u = K (R - X) - u_error This can be re-written to be u = [K, 1] * (R' - X') where R is augmented with a 0 for the goal u_error term. We've now done 3 controllers this way this year (drivetrain, intake and superstructure), and the results are pretty impressive. I was able to grab our drive base in heading control mode and pull on a corner. The robot held the heading very well while sliding sideway. |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|