Go to Post Be realistic in your goals, and relentless in hitting them. - IKE [more]
Home
Go Back   Chief Delphi > Technical > Technical Discussion
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
  #1   Spotlight this post!  
Unread 17-03-2016, 00:12
Oblarg Oblarg is online now
Registered User
AKA: Eli Barnett
FRC #0449 (The Blair Robot Project)
Team Role: Mentor
 
Join Date: Mar 2009
Rookie Year: 2008
Location: Philadelphia, PA
Posts: 1,079
Oblarg has a reputation beyond reputeOblarg has a reputation beyond reputeOblarg has a reputation beyond reputeOblarg has a reputation beyond reputeOblarg has a reputation beyond reputeOblarg has a reputation beyond reputeOblarg has a reputation beyond reputeOblarg has a reputation beyond reputeOblarg has a reputation beyond reputeOblarg has a reputation beyond reputeOblarg has a reputation beyond repute
Turn-to-angle PID tuning

So, we're currently using a cascading PID control to implement a turn-to-angle function. That is, we're running a position PID using the output of our gyro, whose outputs feed to our wheel velocity PID.

On the whole, it's working fine, but there are some fine-tuning issues we'd like to address.

Currently, we are only using P.

Namely, if we make P high enough to get within 1-2 degrees of the setpoint in a reasonable amount of time, the robot builds up enough inertia while turning to overshoot the setpoint. Setting P just high enough to not overshoot the setpoint, we can get to ~5 degree accuracy reasonably quickly, but it takes quite a few seconds more to zero in.

There are two solutions I can think of for this - introducing a bit of I to provide some extra "push," or setting a "minimum output" around 0 that small output values get raised to.

I've done the latter to overcome friction in an elevator control loop before, and it worked wonderfully. But my intuition is that it should not be needed for a cascading loop where the task of overcoming friction at small values *should* be handled by the inner velocity loop.

Any suggestions?

Addendum: We're also using a similar P loop to keep the robot driving straight while a button is held, by adding the output as a difference term to our linear velocity. The output is scaled between -1 and 1, where 1 represents max robot speed. We were struggling to find a value of P that worked optimally - if anyone who has done similar things could share what values they have used in the past (with offset being measured in degrees), it'd be appreciated.

We would do further testing to answer these questions ourselves, but we have exhausted our 6 hour window to toy with the robot.

Thanks!
__________________
"Mmmmm, chain grease and aluminum shavings..."
"The breakfast of champions!"

Member, FRC Team 449: 2007-2010
Drive Mechanics Lead, FRC Team 449: 2009-2010
Alumnus/Technical Mentor, FRC Team 449: 2010-Present
Lead Technical Mentor, FRC Team 4464: 2012-2015
Technical Mentor, FRC Team 5830: 2015-2016

Last edited by Oblarg : 17-03-2016 at 00:14.
 


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 17:35.

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