Go to Post But really, FIRST attracts all kinds of people; nerds, geeks, dorks, preps, techies, PR people, financial persons, etc. - Dorienne [more]
Home
Go Back   Chief Delphi > ChiefDelphi.com Website > Extra Discussion
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
Reply
 
Thread Tools Rating: Thread Rating: 2 votes, 5.00 average. Display Modes
  #1   Spotlight this post!  
Unread 07-11-2011, 18:17
JohnGilb JohnGilb is offline
Programming Mentor, Drive Mentor
FRC #0488
 
Join Date: Mar 2011
Rookie Year: 2003
Location: Redmond, WA
Posts: 114
JohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura about
Re: pic: FRC488's Octocanum Ver 2.0

Quote:
Originally Posted by Ether View Post
Mecanum is not hard to program. It is very straightforward. The same is true of field-oriented drive.

If your robot had superior control, I suspect the reasons are probably:

1) superior craftsmanship and attention to detail of the mechanical design (wheel and frame alignment, leveling, weight distribution, minimal and consistent drivetrain friction, carefully assembled and adjusted mecanum wheels)

2) attention to detail of the electrical design (proper wiring to motors and gyro, selection of gyro with minimal drift, etc)

3) well-designed driver interface (match the driver interface to the driver)

4) skilled drivers with lots of practice


Granted, the 488's 2011 machine was built quite well, but there were still all sorts of mechanical inconsistencies. The center of gravity moved around significantly as the arm moved, generally there was more weight in the back (and slightly more on the left side, I believe), not to mention occasionally getting rammed around or crashing into objects.

The base aspect of converting a desired vector/rotation into wheel speeds is pretty easy (it's even included in the WPI libraries), but we did a lot of additional work so the robot would _actually_ move the way you intended. There were many PID operations that more or less worked in concert to allow smooth robot control. It was essentially a solved problem from a theory perspective, but still required a lot of code in order to operate well.
Reply With Quote
  #2   Spotlight this post!  
Unread 07-11-2011, 18:36
Ether's Avatar
Ether Ether is offline
systems engineer (retired)
no team
 
Join Date: Nov 2009
Rookie Year: 1969
Location: US
Posts: 8,044
Ether has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond repute
Re: pic: FRC488's Octocanum Ver 2.0

Quote:
Originally Posted by JohnGilb View Post
There were many PID operations that more or less worked in concert to allow smooth robot control.
Other than closed-loop speed control of the 4 wheels (did you do that?), what other closed loop controllers did you use for controlling the drivetrain?


Reply With Quote
  #3   Spotlight this post!  
Unread 07-11-2011, 18:59
JohnGilb JohnGilb is offline
Programming Mentor, Drive Mentor
FRC #0488
 
Join Date: Mar 2011
Rookie Year: 2003
Location: Redmond, WA
Posts: 114
JohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura about
Re: pic: FRC488's Octocanum Ver 2.0

Initially, we had 3 closed-loop systems:

Rotational - used a gyro to keep the robot on target heading
Translational - used encoders on "follow wheels" (unpowered wheels) to gauge ground speed and keep the robot translating on a target vector
Wheel Speed - used encoders on the drive wheels themselves to achieve precise wheel speed control

After a while, we actually disabled the wheel speed, as we didn't appear to get much performance improvement from it and we were looking to save on some CPU cycles.
Reply With Quote
  #4   Spotlight this post!  
Unread 07-11-2011, 19:20
Ether's Avatar
Ether Ether is offline
systems engineer (retired)
no team
 
Join Date: Nov 2009
Rookie Year: 1969
Location: US
Posts: 8,044
Ether has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond repute
Re: pic: FRC488's Octocanum Ver 2.0

Quote:
Originally Posted by JohnGilb View Post
Rotational - used a gyro to keep the robot on target heading
Translational - used encoders on "follow wheels" (unpowered wheels) to gauge ground speed and keep the robot translating on a target vector
Were these controls presented to the driver as the interface? i.e., did the driver interface allow the driver to command for example "Translate in direction A with the vehicle pointing in Direction B" ?

Reply With Quote
  #5   Spotlight this post!  
Unread 07-11-2011, 20:45
JohnGilb JohnGilb is offline
Programming Mentor, Drive Mentor
FRC #0488
 
Join Date: Mar 2011
Rookie Year: 2003
Location: Redmond, WA
Posts: 114
JohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura about
Re: pic: FRC488's Octocanum Ver 2.0

The driver had two joysticks:

1st: X/Y joystick movement controlled X/Y direction & magnitude of the robot relative to the field
2nd: X joystick movement controlled rotational rate relative to the robot

So, not exactly what you described, but fairly close.
Reply With Quote
  #6   Spotlight this post!  
Unread 07-11-2011, 21:15
Ether's Avatar
Ether Ether is offline
systems engineer (retired)
no team
 
Join Date: Nov 2009
Rookie Year: 1969
Location: US
Posts: 8,044
Ether has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond repute
Re: pic: FRC488's Octocanum Ver 2.0

Quote:
Originally Posted by JohnGilb View Post
The driver had two joysticks:
1st: X/Y joystick movement controlled X/Y direction & magnitude of the robot relative to the field
2nd: X joystick movement controlled rotational rate relative to the robot
OK, so let me read back to you what I hear you saying:
- You do closed-loop control of the vehicle speed as commanded by the radius1 of joystick #1

- You do closed-loop control of vehicle heading as commanded by the angle2 of joystick #1

- You do open-loop command of rotation rate as commanded by joystick #2 (X, Y, or Z axis?)

Am I understanding you correctly?

How many follower wheels did you use, and how are they mounted?


1 Do you use sqrt(X^2+Y^2) or max(abs(X),abs(Y))?

2 Do you use atan2(X,-Y) to calculate angle, or something else?


Reply With Quote
  #7   Spotlight this post!  
Unread 08-11-2011, 03:08
JohnGilb JohnGilb is offline
Programming Mentor, Drive Mentor
FRC #0488
 
Join Date: Mar 2011
Rookie Year: 2003
Location: Redmond, WA
Posts: 114
JohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura about
Re: pic: FRC488's Octocanum Ver 2.0

Sorry, I think something got lost in my description.

-We perform closed loop control of X translation as commanded by the X axis of Joystick1

-We perform closed loop control of Y translation as commanded by the Y axis of Joystick1

-We perform open loop control of Robot rotation rate as commanded by the X axis of Joystick2 (however, when desired rotation rate is 0, we perform closed-loop control of robot angle as commanded by the heading we were at when we stopped rotating)

This was accomplished with 3 follow wheels and a gyro. Two of the follow wheels were used to track the robot moving forward/backward, and one was placed directly under the center of rotation and used to track the robot strafing.
Reply With Quote
  #8   Spotlight this post!  
Unread 08-11-2011, 08:48
pfreivald's Avatar
pfreivald pfreivald is offline
Registered User
AKA: Patrick Freivald
FRC #1551 (The Grapes of Wrath)
Team Role: Mentor
 
Join Date: Jan 2007
Rookie Year: 2001
Location: Naples, NY
Posts: 2,295
pfreivald has a reputation beyond reputepfreivald has a reputation beyond reputepfreivald has a reputation beyond reputepfreivald has a reputation beyond reputepfreivald has a reputation beyond reputepfreivald has a reputation beyond reputepfreivald has a reputation beyond reputepfreivald has a reputation beyond reputepfreivald has a reputation beyond reputepfreivald has a reputation beyond reputepfreivald has a reputation beyond repute
Re: pic: FRC488's Octocanum Ver 2.0

An interesting design! We've used mecanum for the past two years and were very satisfied with it in many respects, but know that it needs some push to really up our competition level. Thus, we've been working on our own drive (though I didn't know it had a cool name like 'octocanum') which is similar in idea to this.

Thanks for sharing! (And great questions everyone. This is a good thread to follow for anyone considering such shenanigans like we are!)
__________________
Patrick Freivald -- Mentor
Team 1551
"The Grapes of Wrath"
Bausch & Lomb, PTC Corporation, and Naples High School

I write books, too!
Reply With Quote
  #9   Spotlight this post!  
Unread 08-11-2011, 10:56
Ether's Avatar
Ether Ether is offline
systems engineer (retired)
no team
 
Join Date: Nov 2009
Rookie Year: 1969
Location: US
Posts: 8,044
Ether has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond repute
Re: pic: FRC488's Octocanum Ver 2.0

Quote:
Originally Posted by JohnGilb View Post
Sorry, I think something got lost in my description.

-We perform closed loop control of X translation as commanded by the X axis of Joystick1

-We perform closed loop control of Y translation as commanded by the Y axis of Joystick1

-We perform open loop control of Robot rotation rate as commanded by the X axis of Joystick2 (however, when desired rotation rate is 0, we perform closed-loop control of robot angle as commanded by the heading we were at when we stopped rotating)

This was accomplished with 3 follow wheels and a gyro. Two of the follow wheels were used to track the robot moving forward/backward, and one was placed directly under the center of rotation and used to track the robot strafing.
OK that's pretty clear, thanks.

Were the forward/backward follower wheels mounted like this? And, I assume they were omni, correct?

Did you ever consider, or try, using the data from the follower wheels to compute rotation rate?


Reply With Quote
  #10   Spotlight this post!  
Unread 08-11-2011, 13:17
JohnGilb JohnGilb is offline
Programming Mentor, Drive Mentor
FRC #0488
 
Join Date: Mar 2011
Rookie Year: 2003
Location: Redmond, WA
Posts: 114
JohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura about
Re: pic: FRC488's Octocanum Ver 2.0

Ether, your follow wheel mounting assumption is correct. They were positioned as in your diagram, and they were omniwheels.

We did use them to calculate a rotation rate, let's call that Rotation_Follow. We also had rotation from the gyro, let's call that Rotation_Gyro.

We found that Rotation_Follow wasn't as good as the Rotation_Gyro, we suspect due to minute wheel scrub and small errors accumulating, but it did not suffer from drift. Consequently, we used Rotation_Gyro exclusively, but ignored any change in rotation while Rotation_Follow was 0 (typically at the start of the match before the robot was moving anywhere, or during testing when the robot spent a lot of time on a bench or disabled). This eliminated a large part of our gyro drift.
Reply With Quote
  #11   Spotlight this post!  
Unread 08-11-2011, 13:55
Ether's Avatar
Ether Ether is offline
systems engineer (retired)
no team
 
Join Date: Nov 2009
Rookie Year: 1969
Location: US
Posts: 8,044
Ether has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond repute
Re: pic: FRC488's Octocanum Ver 2.0

Quote:
Originally Posted by JohnGilb View Post
we used Rotation_Gyro exclusively, but ignored any change in rotation while Rotation_Follow was 0 (typically at the start of the match before the robot was moving anywhere, or during testing when the robot spent a lot of time on a bench or disabled). This eliminated a large part of our gyro drift.
I like it. Nicely done.


Reply With Quote
  #12   Spotlight this post!  
Unread 08-11-2011, 14:19
Jared Russell's Avatar
Jared Russell Jared Russell is offline
Taking a year (mostly) off
FRC #0254 (The Cheesy Poofs), FRC #0341 (Miss Daisy)
Team Role: Engineer
 
Join Date: Nov 2002
Rookie Year: 2001
Location: San Francisco, CA
Posts: 3,077
Jared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond reputeJared Russell has a reputation beyond repute
Re: pic: FRC488's Octocanum Ver 2.0

Quote:
Originally Posted by JohnGilb View Post
Ether, your follow wheel mounting assumption is correct. They were positioned as in your diagram, and they were omniwheels.

We did use them to calculate a rotation rate, let's call that Rotation_Follow. We also had rotation from the gyro, let's call that Rotation_Gyro.

We found that Rotation_Follow wasn't as good as the Rotation_Gyro, we suspect due to minute wheel scrub and small errors accumulating, but it did not suffer from drift. Consequently, we used Rotation_Gyro exclusively, but ignored any change in rotation while Rotation_Follow was 0 (typically at the start of the match before the robot was moving anywhere, or during testing when the robot spent a lot of time on a bench or disabled). This eliminated a large part of our gyro drift.
This is a clever solution. A Kalman Filter would be another good way to combine accurate (but drift-prone) gyro measurements with less precise (but stable) odometry measurements.
Reply With Quote
  #13   Spotlight this post!  
Unread 08-11-2011, 14:48
JohnGilb JohnGilb is offline
Programming Mentor, Drive Mentor
FRC #0488
 
Join Date: Mar 2011
Rookie Year: 2003
Location: Redmond, WA
Posts: 114
JohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura aboutJohnGilb has a spectacular aura about
Re: pic: FRC488's Octocanum Ver 2.0

We tried a number of filters (Kalman was unfortunately beyond my reach, never had a strong grasp on linear algebra), but they turned out to be unnecessary - the gyro we used (don't have the model # on me) was incredibly accurate - it usually only drifted ~3 degrees over the course of each match, even through collisions.

The "stationary detection" we did was only necessary when the robot was put on the field but the start of the match was delayed several minutes (yeah, we've all been there).
Reply With Quote
  #14   Spotlight this post!  
Unread 08-11-2011, 14:52
AdamHeard's Avatar
AdamHeard AdamHeard is offline
Lead Mentor
FRC #0973 (Greybots)
Team Role: Mentor
 
Join Date: Oct 2004
Rookie Year: 2004
Location: Atascadero
Posts: 5,499
AdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond repute
Send a message via AIM to AdamHeard
Re: pic: FRC488's Octocanum Ver 2.0

Quote:
Originally Posted by JohnGilb View Post
We tried a number of filters (Kalman was unfortunately beyond my reach, never had a strong grasp on linear algebra), but they turned out to be unnecessary - the gyro we used (don't have the model # on me) was incredibly accurate - it usually only drifted ~3 degrees over the course of each match, even through collisions.

The "stationary detection" we did was only necessary when the robot was put on the field but the start of the match was delayed several minutes (yeah, we've all been there).
Mind sharing the model number of that gyro?

Also, you didn't use the pair of follower wheels to try to determine rotation rate while translating, you just used it to detect the complete absence of velocity, correct?
Reply With Quote
  #15   Spotlight this post!  
Unread 07-11-2011, 19:15
AdamHeard's Avatar
AdamHeard AdamHeard is offline
Lead Mentor
FRC #0973 (Greybots)
Team Role: Mentor
 
Join Date: Oct 2004
Rookie Year: 2004
Location: Atascadero
Posts: 5,499
AdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond reputeAdamHeard has a reputation beyond repute
Send a message via AIM to AdamHeard
Re: pic: FRC488's Octocanum Ver 2.0

Quote:
Originally Posted by Ether View Post
Other than closed-loop speed control of the 4 wheels (did you do that?), what other closed loop controllers did you use for controlling the drivetrain?

Wouldn't measuring the vehicle's actual velocity be more useful? After all, the drive has no care as to what wheel speed is (especially if that wheel is slipping).
Reply With Quote
Reply


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 00:23.

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