Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   NI LabVIEW (http://www.chiefdelphi.com/forums/forumdisplay.php?f=182)
-   -   Autonomous: Mixing Drive Distance PID's with Turn Angle PID's. (http://www.chiefdelphi.com/forums/showthread.php?t=98300)

Ether 17-11-2011 17:55

Re: Autonomous: Mixing Drive Distance PID's with Turn Angle PID's.
 
1 Attachment(s)
Quote:

Originally Posted by Joe Ross (Post 1085521)
Here's some data you can play with. http://forums.usfirst.org/showthread...ghlight=jaguar.

When I looked at it years ago, I wasn't happy with a 5th order polynomial approximation.


I got a pretty nice fit using just 2 cubics by splitting the curve into 2 sections.

See attached screenshot.

Cells A2-A21 and C2-C21 are pulse and volts data from the link you provided. I normalized that data to the range +/-1 for command and output in cells B2-B21 and D2-D21.

I copied the positive half of the curve to cells A27-B38, reversing the cmd & out to get the inverse function, and divided it into 2 sections: cells E27-F33 and E35-F41.

Then I fit a cubic to each section. The equations are in the two graphs at the bottom.

I spliced the 2 cubics together and you can see the net result at the top. It's a pretty nice fit, and for not much math.

To use it, test your desired (positive) command. If it's less than 0.842 use the first cubic, otherwise use the second. If it's zero, use zero.

You could use the same cubics for the negative half of the curve, or create new curves for that half.





Tom Line 17-11-2011 19:23

Re: Autonomous: Mixing Drive Distance PID's with Turn Angle PID's.
 
1 Attachment(s)
Thanks guys. It's been a long time since I've had one of those AH HA! moments.....

I guess I never realized how far from linear the Victors can be. We've used joystick input modification VI's in the past to make the bots easier to drive, but I never put 2 and 2 together and realized a huge portion of that issue is caused by the Victor's response.

We noticed last year that the logitech dual action game pad (at least one of them) had a hokey joystick that wasn't even close to linear. We threw that one away, but after modeling the cim response like this, I'm almost tempted to do the same to the game pad joysticks so I can linearize them too.

Here's my final result using a single 6th order polynomial.

Darn do I love learning.

(Note: The numbers between .08 and -.08 are not representative in this graph - those are our dead band and will be modified to zero output).

Jared Russell 17-11-2011 22:58

Re: Autonomous: Mixing Drive Distance PID's with Turn Angle PID's.
 
Pertinent response RE: 5th and 7th order polynomials here: http://www.chiefdelphi.com/forums/sh...t=98267&page=2

Ether 19-11-2011 01:19

Re: Autonomous: Mixing Drive Distance PID's with Turn Angle PID's.
 
1 Attachment(s)


The Victor data from the link Joe provided:
Code:

pulse                volts
1.04                -12
1.07                -11.99
1.12                -11.7
1.27                -11.27
1.36                -10.12
1.41                -8.52
1.46                -3.8
1.48                -0.8
1.49                0
1.55                0
1.56                0.8
1.58                2.8
1.6                5.4
1.65                8.9
1.7                10.1
1.75                10.87
1.8                11.25
1.85                11.55
1.9                11.8
2                12

...normalized to +/-1:
Code:

cmd                out
-1                -1
-0.9375                -0.999166667
-0.833333333        -0.975
-0.520833333        -0.939166667
-0.333333333        -0.843333333
-0.229166667        -0.71
-0.125                -0.316666667
-0.083333333        -0.066666667
-0.0625                0
0.0625                0
0.083333333        0.066666667
0.125                0.233333333
0.166666667        0.45
0.270833333        0.741666667
0.375                0.841666667
0.479166667        0.905833333
0.583333333        0.9375
0.6875                0.9625
0.791666667        0.983333333
1                1

Swap the command and the output
(to get inverse function for linearization)
and select only the positive commands:
Code:

out                cmd
0                0.0625
0.066666667        0.083333333
0.233333333        0.125
0.45                0.166666667
0.741666667        0.270833333
0.841666667        0.375
0.905833333        0.479166667
0.9375                0.583333333
0.9625                0.6875
0.983333333        0.791666667
1                1


Fit a rational function model to the data:
Code:

(p1*x^4+p2*x^3+p3*x^2+p4*x+p5) / (x^2+p6*x+p7)
Here are the p1..p7 model parameters:
Code:

-0.43231217703332, 1.136975493080563, -1.043577770662604, 0.26894582879701, 0.069994693624, -2.151432791900253,  1.151458861241842
Attached graph shows the actual data (blue), the model (red), and the error (green). The error is multiplied by 10 to make it visible. The maximum error is 0.01 (1% of full scale).




Jared Russell 21-11-2011 09:49

Re: Autonomous: Mixing Drive Distance PID's with Turn Angle PID's.
 
Here is an interesting post from the old IFI Robotics forum that describes what is going on "under the hood" of a Victor.

http://www.ifirobotics.com/forum/viewtopic.php?t=317

Note that there are only 94 discrete output states in each direction. This would make a look-up table a pretty attractive solution. Also, "Be aware that it may take 3 or 4 input steps before the Victor changes its Output."

EDIT: Although this post seems to contradict the last bit about latency: http://www.ifirobotics.com/forum/viewtopic.php?t=375

Tom Line 21-11-2011 19:14

Re: Autonomous: Mixing Drive Distance PID's with Turn Angle PID's.
 
Quote:

Originally Posted by Ether (Post 1085750)


The Victor data from the link Joe provided:
Code:

pulse                volts
1.04                -12
1.07                -11.99
1.12                -11.7
1.27                -11.27
1.36                -10.12
1.41                -8.52
1.46                -3.8
1.48                -0.8
1.49                0
1.55                0
1.56                0.8
1.58                2.8
1.6                5.4
1.65                8.9
1.7                10.1
1.75                10.87
1.8                11.25
1.85                11.55
1.9                11.8
2                12

...normalized to +/-1:
Code:

cmd                out
-1                -1
-0.9375                -0.999166667
-0.833333333        -0.975
-0.520833333        -0.939166667
-0.333333333        -0.843333333
-0.229166667        -0.71
-0.125                -0.316666667
-0.083333333        -0.066666667
-0.0625                0
0.0625                0
0.083333333        0.066666667
0.125                0.233333333
0.166666667        0.45
0.270833333        0.741666667
0.375                0.841666667
0.479166667        0.905833333
0.583333333        0.9375
0.6875                0.9625
0.791666667        0.983333333
1                1

Swap the command and the output
(to get inverse function for linearization)
and select only the positive commands:
Code:

out                cmd
0                0.0625
0.066666667        0.083333333
0.233333333        0.125
0.45                0.166666667
0.741666667        0.270833333
0.841666667        0.375
0.905833333        0.479166667
0.9375                0.583333333
0.9625                0.6875
0.983333333        0.791666667
1                1


Fit a rational function model to the data:
Code:

(p1*x^4+p2*x^3+p3*x^2+p4*x+p5) / (x^2+p6*x+p7)
Here are the p1..p7 model parameters:
Code:

-0.43231217703332, 1.136975493080563, -1.043577770662604, 0.26894582879701, 0.069994693624, -2.151432791900253,  1.151458861241842
Attached graph shows the actual data (blue), the model (red), and the error (green). The error is multiplied by 10 to make it visible. The maximum error is 0.01 (1% of full scale).

That's almost exactly what we did ether. Nice to know I was on the right track.


All times are GMT -5. The time now is 20:48.

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