Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   NI LabVIEW (http://www.chiefdelphi.com/forums/forumdisplay.php?f=182)
-   -   Auto trimming using the gyro (http://www.chiefdelphi.com/forums/showthread.php?t=86673)

baronep 25-08-2010 19:04

Auto trimming using the gyro
 
So this summer I have decided to work on programming challenges that would make our team more competitive during the FIRST season but that wouldn't necessarily have time to do during the first season.

One problem I'm trying to tackle is how can I use the gyro deg/sec output to calibrate a realtime auto trim for out robot. We have a mechanum system btw. I think I really only need to trim the z axis (rotation) so the accelerometer wouldn't be used. I need to figure out the correct formula to modify the z joystick value based on the gyro input and the current z axis joystick input (as if I were turning).

Does anyone have any ideas as to how to do this?

Ether 25-08-2010 19:55

Re: Auto trimming using the gyro
 
Quote:

Originally Posted by baronep (Post 972509)
So this summer I have decided to work on programming challenges that would make our team more competitive during the FIRST season but that wouldn't necessarily have time to do during the first season.

One problem I'm trying to tackle is how can I use the gyro deg/sec output to calibrate a realtime auto trim for out robot. We have a mechanum system btw. I think I really only need to trim the z axis (rotation) so the accelerometer wouldn't be used. I need to figure out the correct formula to modify the z joystick value based on the gyro input and the current z axis joystick input (as if I were turning).

Does anyone have any ideas as to how to do this?

what I hear you saying is this:

a) you want the vehicle to rotate at a speed proportional to the z-axis command when the z axis command is non-zero, and

b) when the z-axis command is zero, you want to use the gyro to hold the vehicle's rotational orientation fixed regardless of X and Y motion.

is that correct? If not, please explain in more detail what you are trying to accomplish.


~

Alan Anderson 26-08-2010 00:32

Re: Auto trimming using the gyro
 
Quote:

Originally Posted by baronep (Post 972509)
Does anyone have any ideas as to how to do this?

The basic idea is pretty simple. Use the yaw rate sensor to derive a "current heading" measurement value; the gyro support in the library does that for you. Maintain a "desired heading" control value, using joystick input to change the desired value. Tie the two of them together as the feedback and control parameters of a PID system, using the output of the PID as the "rotation" input of the mecanum drive.

I hope enough of that makes sense to give you a place to start.

Ether 26-08-2010 10:11

Re: Auto trimming using the gyro
 
Quote:

Originally Posted by baronep (Post 972509)
I need to figure out the correct formula to modify the z joystick value based on the gyro input and the current z axis joystick input (as if I were turning).

Does anyone have any ideas as to how to do this?


You could try the following simple approach, which is similar to what Team 341 (Miss Daisy) used successfully:


Code:

if (Z!=0) Z'=Z else Z'=-K*gyro_rate;

Z is the joystick value from its "rotate" command axis

Z' is the modified value of Z

gyro_rate is the rotation speed reading from the gyro

K is a tuning constant, which you can adjust experimentally.



what the code does is this:

a) when you are commanding rotation (Z is not zero), your rotate command (Z) is passed through unmodified as an open-loop command

b) when you are commanding zero rotation (ie Z is zero), the gyro's rotation signal is used instead of Z=0 to create a Z command to cancel out the rotation.


A slightly different approach might be:

Code:

Z' = K*(Z-gyro_rate);
... which is a "P" (proportional) controller which uses your joystick Z value and the gyro signal to create the modified Z' command. This controller acts to make the robot's sensed rotational velocity match the joystick command regardless of whether it is zero or non-zero.

~


All times are GMT -5. The time now is 11:08.

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