Go to Post Hyper, I want to marry your robot. - Keys [more]
Home
Go Back   Chief Delphi > FIRST > General Forum
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 22-11-2011, 23:34
Joe Johnson's Avatar Unsung FIRST Hero
Joe Johnson Joe Johnson is offline
Engineer at Medrobotics
AKA: Dr. Joe
FRC #0088 (TJ2)
Team Role: Engineer
 
Join Date: May 2001
Rookie Year: 1996
Location: Raynham, MA
Posts: 2,644
Joe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond reputeJoe Johnson has a reputation beyond repute
[DFTF] Closing the loop on Wheel Velocity...

This is part of a series of posts called Drinking From The Firehose on getting Dr Joe back up to speed on All Things FIRST.

Which led to this post: Jags v. Vics

Which led to this post: We eat what we CAN, and what we can't, we CAN...

Which led to today's topic:
Closing the loop on Wheel Velocity...

I have never done this in a FIRST robot, but my background in controls, everything I have read, and my gut tells me that wheels should be driven in closed loop mode (not open loop mode, i.e. set a PWM value) AND that the closed loop should be based on velocity not position (well, I lied. It should use position but only in autonomous mode and even then a fast acting velocity loop should be then wrapped in a relatively slow acting position loop).

Drivers should command wheel velocities not motor voltages.

So... ...has anyone done this?

Barello.net has some great info on the subject (read here)

Here are my questions:
If you read the reference Barello likes (Mobile Robots, from Inspiration to Implementation) they basically only have a P (Proportional) control on velocity. They use an I (Integral) term but it is only integrating (i.e. adding up) the relative error between the right and left sides. Which I think is probably better implemented using a gyro (i.e. an angular rate sensor).

Comments welcome.

Has anyone used a Jaguar to close the velocity loop? The standard PID modes do not support this which is a shame (you can input an encoder but the PID loop is then based on position of the encoders not speed). This should be a relatively easy code change to implement but I don't think we are allowed to muck with the firmware for the Jaguars and still be FIRST legal so...

...I have another idea. I think that the performance of the velocity control would be much enhanced by a fast PID such as the 1000hz loop time that I have heard that the Jaguars use in PID mode. So... here is my scheme....

What if I had an Arduino (or any micro, pick your favorite) monitor encoders from the RH & LH wheels and then generated with an ADC corresponding RH and LH voltages for each side that ranged between 0-3V (top speed in rev = 0 volts, top speed in fwd = 3 volts). THEN we fed these voltages to the analog input of the RH and LH Jaguars. THEN we put the Jaguar in PID mode.

In effect, as long as the Arduino provided fast enough and faithful enough updates to the Jaguars, we would be able to take advantage of that 1000hz update rate -- this is a big if because we would need velocity updates at over 1000hz which rule out encoders I think because at slow robot speeds (<1 fps), you would still need over 1000 pulses per second or more than 100 pulses per inch. Not impossible but tough. I think it may be better to use a continuous rotation magnetic encoder. I think it would be possible to get updates fast enough.

The next problem I worry about if I tried this is that the Jaguars would fight each other. If each Jaguar is doing its own PID loop internal, then I can envision a world in which the Jaguars are fighting each other (imagine if the integral error terms start going in different directions - cancelling each other out in the net, but wasting energy and heating my motors all the while).

So... ...after all that, I don't really think independent PIDs are a viable solution for multimotor drive systems. Unless you can go with a PD control (leaving out the I, which has the most potential to get you into trouble -- and really to we care about driving steady state error in velocity to zero? Maybe not. We would want to make corrections to go straight but that could be done by mucking with the set points without having to have an integral term... )

Thoughts?

The other option is to do things the old fashion way, inside the cRio. With one coordinated output to multiple Jaguars (or Victors) the fighting problem is solved, but not I don't have my 1000hz feedback loop.

From what I hear, you can get a 200hz update rate via PWMs using the cRio.

Is that fast enough? I don't know. Do you?

Joe J.
__________________
Joseph M. Johnson, Ph.D., P.E.
Mentor
Team #88, TJ2

Last edited by Joe Johnson : 22-11-2011 at 23:40.
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 16:39.

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