Go to Post Mentors are the guardrails: Show the students how to do what they need to do, Step back and let the students do what they need to do, Nudge them back on course when they need a nudge, Insist, when necessary, that no one tries to juggle the chainsaws - gblake [more]
Home
Go Back   Chief Delphi > Technical > Control System
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
 
 
Thread Tools Rate Thread Display Modes
Prev Previous Post   Next Post Next
  #6   Spotlight this post!  
Unread 01-01-2017, 18:18
AustinSchuh AustinSchuh is offline
Registered User
FRC #0971 (Spartan Robotics) #254 (The Cheesy Poofs)
Team Role: Engineer
 
Join Date: Feb 2005
Rookie Year: 1999
Location: Los Altos, CA
Posts: 800
AustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond repute
Re: Full State Feedback Question

Quote:
Originally Posted by Jared View Post
How do you use integral control?

The standard way of achieving integral control that I've seen commonly used in practice is to add an additional state that's the integral of error of the variable you want to have zero steady-state error.

There are two drawbacks to this method:
-there's integral windup on a unit step

-previously, if I had a position/velocity trajectory, I could calculate what I wanted Kx to be, and used this as my reference input. As a result of using both desired position and velocity, I got really good reference tracking. With the integral control added, my reference is always the desired position, and I have no way to tell the controller my desired velocity.

Is there an easy way to be able to specify all the desired states and have the integral control like I described?

Is there a better way to add integral?
To start with, I'll first caution you to actually see if you need integral first. You can get pretty close without integral control, and integral adds all the issues that you've listed above. Below, I'm going to assume that you've made that assessment and integral *is* going to be worth the pain.

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.
Reply With Quote
 


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 02:01.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi