![]() |
Driving Straight
One of my off season projects it to try and get are robot to drive straight. I know you can do this with a gyro but i was wondering if there was any other methods people have used.
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
Quote:
I would only use distance from an encoder in autonomous, when you need to travel to a specific point as part of your routine. |
Re: Driving Straight
I was trying the encoder and PID method over the weekend. I was not sure if i should have a PID controller for both sides or have a slave masters configuration. Which have you used
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
With the slave and master configuration how do you deal with turning? Would you mind drawing a flowchart?
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
Drive straight in what portion of the game? It is much easier in autonomous since you know what path the robot will be taking and can plan acordingly. Not so during teleop. Regarding the softaare side, a gyro would be your best bet, as it was designed to measure the heading of the robot. During auto, you can get away with just an encoder on each side of the drivetrain and work towards mathing speeds.
If you do not have any sensors, you can try applying a proportionally different power value to each side (e.g. after you get the final motor values from the joysticks,run the left motors at 80% and the right ones at 100%). You could try to figure out the function that each side of the drivetrain is following (speed of wheels based on motor value) and compensate that way. The function method would be the more complicated form of a simple power scaling factor, but an underlying issue exists. Since you are trying to compensate for a mechanical problem in software, without a closed loop system (sensor and PID), the robot will only drive straight as long as the drive train does not change (including gear bindings or re-greaseing). You could get it "close enough", but it would be suseptable to the quality of repairs, the weather that day, and the mechanical sub-team. That doesn't sound fun does it. |
Re: Driving Straight
You can use the encoders to emulate a gyro for driving straight. Here is some psuedo-code for how to do it:
Code:
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
This discussion reminded me of something I posted a couple of years ago. For any students interested in some math: http://www.chiefdelphi.com/forums/sh...5&postcount=26 |
Re: Driving Straight
Quote:
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
Quote:
I am only going to be using this outside of auto. During auto we use a gyro. The method i am trying now is to use a velocity control PID for each side. however it would be nice to have a slave/master configuration but i am not sure hot to deal with turning |
Re: Driving Straight
Quote:
|
Re: Driving Straight
We've found LabView compensates fairly well for the drift. We usually see a few degrees per minute, which has been more than accurate enough for our matches. If you need more than that, you can extend the duration it uses to measure the drift.
|
Re: Driving Straight
I believe that the CAN bus library has built in PID. All we had to do last year was set it to speed control mode and to read off the encoder.
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
We used the gyro for driving straight for Auto and during the matches this year. The gyro is the easiest way to make sure you are going in a certain direction. We used the drive straight to drive to the step and drive straight to back up from the step. This way we did not knock over a stack of totes. We had a lance sticking out that we used for auto to move the recycle bins out of the way. If the driver turned while backing up it would move the stack. This function to drive straight back was a huge hit with the drivers.
The NavMXP had very little drift. We left it running for 20 minutes one time and had no drift. Way better than the old kit gyro. If you are trying to drive straight and you have a gyro why would you do it any other way? Tim |
Re: Driving Straight
Quote:
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
Quote:
|
Re: Driving Straight
1 Attachment(s)
Here is a comparison based "drive straight" code example that doesn't use PIDs. It is handy for demonstrations, programming practice, etc. where you need to be able to follow along without getting wrapped up in more advanced functions (such as PIDs) useful, like it was said before, if the user hasn't taken basic calculus. Works like a charm, it may be a little sparsely commented, but just PM me if you have any questions.
FYI: Top encoder is left side, bottom is right side. This code makes the robot REVERSE at 50% speed. (I just pulled it out of one of our autonomous routines). The .06125 constant is "inches traveled/encoder tick" (you will need to update this to accommodate for your drive train reduction between the encoder shaft and the wheels). The 85 constant is the desired distance in inches. You can import this vi code snippet into Labview. Cheers, Skye |
Re: Driving Straight
1 Attachment(s)
I've seen a number of FLL teams use an approach similar to what I attached. They will have three to five cases where they tune the coefficients or return hard-coded numbers. Sometimes the sensor is an ultrasonic sensor to follow a wall instead of two encoders. Sometimes they reset the sensors inside the loop instead of accumulating.
These approaches work pretty well if the loop runs fast enough. It gives them a piece to tune and once they gain a sense of how the control works, you can add storage and have both integrated and term-to-term error, and pretty soon you have a simple PID, or at least the portion of it that you need for that problem. Since FRC robots take lots of space and infrastructure to run, you may find it useful to use a smaller robot to structure the code, then try it out on an FRC bot. Greg McKaskle |
| All times are GMT -5. The time now is 17:48. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi