PDA

View Full Version : [Question(s)] 6 Leg 3DOF Walker Kinematics

lunarnexus
03-30-2008, 06:14 PM
I'm building a walker with a round body, six legs with 3 DOF each. I've got the hardware almost ready and now I'm working on the software side. I'm using C#, a Lynxmotion SSC-32 servo controller and a Phidgets 8/8/8 interface. So far I can make it stand up ....... now the hard part.

I've been looking at Kinematics for the legs, so I can specify that I want a leg X centimeters this way and Y centimeters that way and Z centimeters some other way. To say the least it's confusing. I've taken Trig in college and know how to solve for an angle given some triangle sides, but the stuff I'm seeing on the web is way over my head.

I've looked at several Excel spreadsheets that calculate Kinematics and Inverse Kinematics, including the ones on Lynxmotion's web site and the (way way over my head) spreadsheet for the Phoenix walker project here on Trossen's forums (very cool bot BTW).

Can anyone point me to some how-to's, tutorials or something that might explain some of this stuff?

mdenton
03-31-2008, 05:40 PM
I struggled with IK.. I still do! but I can tell you that I taught myself what I needed to know from one book:

http://www.micromagicsystems.com/#/inversekinematics/4517055386

I should point out that I studied the book and went through examples & simulations for about 3 months before I had my first hexapod running, but then I'm not that bright :happy:

Matt.

Dave
04-01-2008, 11:03 AM
I wrote a bunch of 3dof IK algorithms a few years ago. I'll try to track them down for you.

On a semi-related note, a quick google search turned this up:

http://www.brandspankingnew.net/specials/fl_inversekinematics/

Grab the little bastard and fling him around. As good a use of mathematics as ever I've seen.

LinuxGuy
04-01-2008, 11:24 AM
http://www.micromagicsystems.com/#/inversekinematics/4517055386

I should point out that I studied the book and went through examples & simulations for about 3 months before I had my first hexapod running, but then I'm not that bright :happy:
Hi Matt, good to see you over here! :happy:

I have been dreading having to learn IK, but to do what I want to eventually do I will have to at some point. It's good to hear that this book will help a lot when I get into this (after I have a hexapod or octapod built, probably a long time from now).

8-Dale

mdenton
04-01-2008, 11:33 AM
Hi Matt, good to see you over here! :happy:

I have been dreading having to learn IK, but to do what I want to eventually do I will have to at some point. It's good to hear that this book will help a lot when I get into this (after I have a hexapod or octapod built, probably a long time from now).

8-Dale

Hi!

Yes if your maths is rusty (as was mine then and now) then it can be a big hill to climb, but when you get something working.. and you understand how.. its well worth it. :)

[email protected]

tom_chang79
04-01-2008, 08:40 PM
Are you playing with the H3R-series of bots from Lynxmotion? No matter, we discuss this quite a bit on Lynxmotion's forums (www.lynxmotion.net): (http://www.lynxmotion.net&#37;29:)

http://www.lynxmotion.net/viewtopic.php?t=2534

http://www.lynxmotion.net/viewtopic.php?t=3361

Best way to learn with those topic is to download the PowerPod program from Lynxmotion's shopsite:

http://www.lynxmotion.com/images/files/firmware/ppod102.zip

Generate a basic code, and try to follow the code line by line and understand what its doing (not necessarily focusing on how), then once you figure out the flow of the code, you can go back into the details of the how by following some basic trig.

It took quite a while for me to figure out what it's doing. Laurent G. and Matt D. are quite the experts on these.

The code is basically doing inverse-kinematics. Kinematics is giving the servo an angle and calculating where it's supposed to land given the length of the arm/apendage. Inverse is giving it a target location and figuring out the angle the servo needs to move in order to accomplish the movement [of the tip of the appendage] to that location. But that's a very high level understanding.

For me, I printed out the awesome explanation of the code by Luis Hidalgo, the code generated by Powerpod, and also the IK-diagram, and just kept studying it over and over until it started to click.

I'm no expert at it, but I'm still on the path to getting to know it more. You should do some google search on this topic (inverse kinematics) and there are several websites out that explains this quite readily. Some useful ones I found are:

http://freespace.virgin.net/hugo.elias/models/m_ik.htm

http://freespace.virgin.net/hugo.elias/models/m_ik2.htm

Good luck and welcome to the world of IK application on round Hexapods! I find the hexapods to be one of the most versatile and stable walkers out of all the legged...

lunarnexus
04-04-2008, 10:54 AM
So, I've spent the past week studying, checking out websites and even got out my college Trig book. I have forward kinematics working in 2D and 3D (x,y,z) and reverse working in 2D (x,y) using the law of cosines. Thanks for the pointers!

Now I'm stuck... I can't figure out how to do IK in 3D. I've checked out sample code, formulas and web sites, but nothing is clicking. Does anyone have a C# method for calculating the angles for a 3DOF spider leg, given x,y and z?

I've found one that does 4DOF in the Lynxmotion arm source code, but have no idea how to change it to only be 3DOF. It would be sweet if Lynxmotion would just put something like that in their code examples (hint hint).

So far I've written a C# class that holds specifications for a 3DOF leg complete with properties that allow tweaking and methods for calculating angles/pulse widths, FK and (soon) IK. I'll post it when it's complete.

Thanks,
James

Matt
04-04-2008, 01:48 PM
We have been talking internally here about how we can host a public repository for IK code. We've long talked about an algorithm library (http://www.trossenrobotics.com/tutorials/TRS5.aspx) that would essentially be a big pile of blackbox IK functions that people could reuse how and where they want. Now I'm thinking that maybe the first step is to just collect what is out there to get started. If we host a spot where anyone who wants to can upload their functions in any language then we could start building a pretty good resource. In this day and age where we are sending robots to Mars people shouldn't have to write IK formulas from scratch just to do basic robotics at home. Trigonometry has been around for thousands of years, all this stuff should be free public knowledge.

What say you people? :) If we build it will people help populate it?

Zenta
04-04-2008, 02:45 PM
We have been talking internally here about how we can host a public repository for IK code. We've long talked about an algorithm library (http://www.trossenrobotics.com/tutorials/TRS5.aspx) that would essentially be a big pile of blackbox IK functions that people could reuse how and where they want. Now I'm thinking that maybe the first step is to just collect what is out there to get started. If we host a spot where anyone who wants to can upload their functions in any language then we could start building a pretty good resource. In this day and age where we are sending robots to Mars people shouldn't have to write IK formulas from scratch just to do basic robotics at home. Trigonometry has been around for thousands of years, all this stuff should be free public knowledge.

What say you people? :) If we build it will people help populate it?

Hi,

Sounds like a very good idea!
To many times are people trying to "re-invent the gunpowder".
What would be really interesting was a IK tool where you could define number of joints, not limited to the 3 DOF, but maybe up to 6 or 7 DOF.

Matt
04-04-2008, 04:07 PM
What would be really interesting was a IK tool where you could define number of joints, not limited to the 3 DOF, but maybe up to 6 or 7 DOF.

Indeed, the idea is to eventually build up a library that has all kinds of DOFs and types of results. Not limited to just single leg/arm positioning either. If you look at the link in my last post you can see how you can create black box functions that use IK to export array values for full gates even.

I just found an old write up I did explaining exactly this theory. I called it the Step Path Function. I attached it in PDF.

Wouldn't it be wonderful to have these basic IK functions, gates, and motions for crawlers ready to go for all new robot builders out there? People could get to working on more advanced stuff FAR faster, like adding vision based navigation or behavioral intelligence instead of spending 6 months just trying to get their robot to walk.

tom_chang79
04-05-2008, 05:31 PM
Well-said Matt! I too can attest to this frustration. When you have sensors and telemetry on your bot, the last thing you want to do is spend time on just to get it to do some basic walks. All I want to focus on is "decision" making portion of the code, which is probably the main event of any autonomous robots...

A repository of "algorithms" would be awesome. One that's written so grey that one can translate and shoe-horn in syntaxes easily no matter what language...

:D

LinuxGuy
04-05-2008, 06:04 PM
Hi!

Yes if your maths is rusty (as was mine then and now) then it can be a big hill to climb, but when you get something working.. and you understand how.. its well worth it. :)
I always did well in math, all the way through math for electronics, which is parts of several different things, including some calculus and imaginary numbers (I wrote software do do calculations with these). I wonder how hard it would be to get back into it.

8-Dale

mdenton
04-06-2008, 04:06 PM
I always did well in math, all the way through math for electronics, which is parts of several different things, including some calculus and imaginary numbers (I wrote software do do calculations with these). I wonder how hard it would be to get back into it.

8-Dale

Go for it!! :)

lunarnexus
04-08-2008, 09:10 AM
LOL, I'm on 1 month to make mine walk.

So....... I've consulted a friend of mine from way back who is a math genious.... and he confused me. But what I did get out of him is that, you can't really put a generic algorithm out there without explaining the values. For instance, I have my elbow servo set to be 0 degrees, when it's at a 90 degree angle from the femur, for extra range of motion. This threw off my IK calculations. I'll post what I've got and an explanation of what's going on in my next post. It's not perfected yet, so it might be a bit, but I can throw in my 2 cents on the algorithm library.

Matt
04-08-2008, 01:25 PM
You are right about people using different "home positions" for their degrees. You also have some people doing +90 to -90 or counting clockwise or counterclockwise and so on. Everyone tends to have their own style. But you can still use a generic IK function. You just need to run a conversion on the output to map it to your method. It can be just a matter of adding or subtracting degrees or flipping the number like so:
MyJointValue = 180 - IK_Function_Output

middelbh
04-10-2008, 12:54 PM
I'm new here, but interested in the topic of IK algorithms. I just finished (in Visual Basic 6) my first attempt for my hexapod i.s.n. (in statu nascendi..)
I would like to share the source and .exe and then have your comments. Where can I put this??:confused:
I started with 2D and just 2DOF, but already expanded this for the hexapod.
The most important subs are here:

Sub CalcAngles(XStart, YStart, Length1, Length2, XEnd, YEnd)
OutOfRange = False
If XEnd < 0 Then XEnd = 0
On Error GoTo verder
BSquare = (XEnd - XStart) ^ 2 + (YEnd - YStart) ^ 2
B = Sqr(BSquare)
If B > Length1 + Length2 Then Print "Out of reach": GoTo verder
Q1 = Atn((YEnd - YStart) / (XEnd - XStart)) + Pi / 2
Q2 = ACos((Length1 ^ 2 - Length2 ^ 2 + BSquare) / (2 * Length1 * B))
Phi1 = Q1 + Q2
Angle1 = Int(Phi1 * 180 / Pi + 0.5)
Phi2 = ACos((Length1 ^ 2 + Length2 ^ 2 - BSquare) / (2 * Length1 * Length2))
Angle2 = Int(Phi2 * 180 / Pi + 0.5)
If Angle2 = 0 Then Print "Angle 2 = 0": GoTo verder
If Angle1 > 180 Then Print "Angle 1 >180": GoTo verder
Exit Sub
verder:
OutOfRange = True
End Sub

Function ACos(number)
On Error GoTo nogmaals
If Abs(number) <> 1 Then
ACos = Pi / 2 - Atn(number / Sqr(1 - number * number))

' ACos = 1.5707963267949 - Atn(number / Sqr(1 - number * number))
ElseIf number = -1 Then
ACos = Pi
End If
nogmaals:
Exit Function
End Function

middelbh
04-10-2008, 01:17 PM
Back again!

the test is at http://rapidshare.com/files/106436497/InvKinX.exe.html
simply have mousedown in the green area and the angles are calculated. Changing the length of the two segments (not possible in this exe) also changes the range of the green area. I'm interested in your remarks!

LinuxGuy
04-10-2008, 01:51 PM
Wouldn't it be wonderful to have these basic IK functions, gates, and motions for crawlers ready to go for all new robot builders out there? People could get to working on more advanced stuff FAR faster, like adding vision based navigation or behavioral intelligence instead of spending 6 months just trying to get their robot to walk.
This would be fine, as long as there is some understanding required in order to use such modules. Nobody will learn by just using some standard building blocks unless they have to actually understand at least a little of the theory behind it to use it properly.

8-Dale

mdenton
04-10-2008, 03:56 PM
This would be fine, as long as there is some understanding required in order to use such modules. Nobody will learn by just using some standard building blocks unless they have to actually understand at least a little of the theory behind it to use it properly.

8-Dale

I agree, but it seems many people don't want to put the effort in, they just want the answer.

Matt
04-10-2008, 08:48 PM
Oh, I think having a library of IK functions will leave people with looooots of learning to do. To me thats just giving them blueprints and some tools. There is still a whole bunch of building and sorting and planning and architecture and hardware and config..........

Matt, I agree that there are those that just want people to hand them all the answers, but I think for every one of those people there are 5 that like the whole part about figuring out a challenge. Most robotics nerds are ALL about the challenge of problem solving. Hell, none of our bots ready DO anything. It's the fun of the challenge 99% of us like.

04-10-2008, 10:23 PM
Middlebh,

Great start! I think we'll find though that simple trig isn't the way to go when you get into N-joints of 6DOF in three-space

IK is inherently non-linear and non-deterministic. We can iteratively get an ok approximation (especially in 2D and/or a limited number of segments) using trig, but if we want to see the be-all-end-all of kinematics (especially if we want to embed them where processing power and RAM isn't "free"), we need to start looking at faster and more advanced methods of function minimization.

Where I'm contemplating now is the value of 0th order search optimization vs 1st order search strategies - where optimization time trades off against just doing more searches. If our 'bots were all tethered to dual core 7800's, I would care a lot less. ;)

One of my favorite books on the subject is Nonlinear Programming: Theory and Algorithms by Mokhtar S Bazaraa, Hanif D. Sherali, C.M. Shetti (spellings may be off - doing the "from memory" thing...

04-10-2008, 10:29 PM
Matt,

If you guys set it up, I'll contribute as time allows. My Masters was in math (and another in CS), and I've worked for twenty years as a numerical recipist and algorithm designer/inventor (video/audio compression and in encryption), so my emphasis would obviously largely learn towards the math of robotics side of the house...

It's like chocolate and peanut butter, and you guys are an obvious choice to mix 'em together... :)

Alex
04-10-2008, 10:33 PM
If you guys set it up, I'll contribute as time allows. My Masters was in math (and another in CS), and I've worked for twenty years as a numerical recipist and algorithm designer/inventor (video/audio compression and in encryption), so my emphasis would obviously largely learn towards the math of robotics side of the house...It's already on my list and after reading all the incredible posts lately, it just got bumped up much higher on the list:) Right now, it's just a matter of finding the right plugin that fits seamlessly into the TRC.

I would love to see examples of how all of these inverse kinematics work. I was always pretty decent at Math in school. It always took me a little longer than everyone else to solve problems, but I always loved the challenge of figuring out answers.

04-10-2008, 10:42 PM
Doh - I edited with another request and it went south. Grrr.

In summary: How about a knowledgebase too? I've had to search high and low to "discover" glovepie (still haven't found a definitive scripting reference), ppjoy, best methods of stabilizing an accelerometer, the inexpensive freespace encoders like TrackIR, whacking a wiimote onto an embedded processor, inexpensive telemetry radio modules, .... I've starting my own kb at this point to keep track of everything I've learned. It seems like there's an easy opportunity for Trossen to make a destination point for a well organized, community maintained, base of knowledge. A forum is one method, but it's not conducive to whacking into an indexed one-stop shop of everything everyone has learned.

There's some tremendously creative and smart people here! I'd love to download their brains. ;)

lunarnexus
04-11-2008, 10:41 AM
Well here's my 2 cent math lesson:

I did all this in C# since MS Robotics Studio is heavily biased towards it. I've been using C# for a month now, so it's probably not "good OO programming", but it works.

These methods are part of a "Leg" class that holds properties for the leg(s), so I'll explain those as I go.

There's a class called 'Coordinate' that simply holds variables and makes it easy to pass a bunch of them back and forth:

class Coordinate
{ // A place to hold x/y/z coordinates
public double x;
public double y;
public double z;
public double coxaAngle;
public double shoulderAngle;
public double elbowAngle;
}

First Forward Kinematics. This takes some angles and tells you where your foot is in (x,y,z).

public Coordinate FootPosition()
{
//Calculate 2D Elbow Position. ( X, Y )
double x;
double y;
// "this.ShoulderAngle" is the angle of the Shoulder currently
// "ShoulderAngle" is where I store that value.
double ShoulderAngle = Convert.ToDouble(this.ShoulderAngle);
// Create a place to store some values
Coordinate ElbowPos2D = new Coordinate();
// The math functions are done in radians, so convert degrees to rads
double radShoulderAngle = Math.PI / 180 * ShoulderAngle;
// I'm doing simple 'right triangle' trig here to find the elbow position
// Store the x,y of the elbow in our coordinate holder
ElbowPos2D.x = x;
ElbowPos2D.y = y;

// Calculate 2D Foot Position.
// The next 2 lines should look familiar from above
double ElbowAngle = Convert.ToDouble(this.ElbowAngle);
Coordinate FootPos2D = new Coordinate();
// Instead of 0 degrees being a straight line parallel to the Femur, my servo
// has 0 degrees being perpendicular to the femur for a wide movement angle
// hence the +90. I'm simply finding the angle at an imaginary triangle by subtracting
// from 180 degrees
double theta3 = 180 - (ShoulderAngle + 90);
double theta = ElbowAngle - theta3;
double radTheta = Math.PI / 180 * theta;
// This will give us the foot position
x = (this._tibiaLength * Math.Cos(radTheta)) + ElbowPos2D.x;
y = (this._tibiaLength * Math.Sin(radTheta)) + ElbowPos2D.y;
// Store it in a "coordinate"
FootPos2D.x = x;
FootPos2D.y = y;
// Calculate 3D Foot Position
// This is simple single triangle math. At this point the X value from the 2D math becomes
// the hypotenuse of the X/Z triangle. X is the distance from the body now.
Coordinate FootPos3D = new Coordinate();
// All previous triangles were from the Shoulder joint. Now I'll be calculating from the
// Coxa joint. The distance from the Coxa to the Shouler is "this._shoulderDistanceOffset"
FootPos2D.x += Convert.ToDouble(this._shoulderDistanceOffset);
double CoxaAngle = Convert.ToDouble(this.CoxaAngle);
double radCoxaAngle = Math.PI / 180 * CoxaAngle;
// Notice I used the X length as the hypotenuse
double z = FootPos2D.x * Math.Sin(radCoxaAngle);
// This is the REAL X coordinate
// Store it and return it.
FootPos3D.x = x;
FootPos3D.y = y;
FootPos3D.z = z;
return FootPos3D;
}

Now, reverse kinematics. This takes an (x,y,z) coordinate and tells you what angles are needed to achieve that:

public Coordinate SetFootPosition(double x, double y, double z)
{
// This starts with the x,z plane and works backwards
// LegStretch is simply the length of the leg from the top perspective. It will
// Be used as the X value in the 2D math
// Find LegStretch and Coxa angle
double l;
double CoxaAngle;
// This function craps on a 0 degree angle, but we know what the answer is anyway
if (z != 0.0)
{ // atan2 takes 2 sides of a right triangle and gives back an angle
// Like saying "Tan theta = opposite / adjacent "
CoxaAngle = Math.Atan(z / x);
// l = Leg Stretch
l = z / Math.Sin(CoxaAngle);
}
else
{ // This is if we have a zero degree coxa angle
l = x;
CoxaAngle = 0.0;
}
// 2D math (x,y)
// I'm not going to go through this line by line, but it's basically
// the law of cosines. I used the "distance formula" to find the distance from the
// Shoulder joint to the foot to make a triangle ( "i" is the variable for that)
// Make sure you account for a zero degree angle in the tan function
if (y == 0.0) { y = 0.00001; }
l -= Convert.ToDouble(this._shoulderDistanceOffset);
double i = Math.Sqrt((l * l) + (y * y));
double theta1 = Math.Atan2(y, l);
double theta2 = Math.Acos(((_femurLength * _femurLength)
- (_tibiaLength * _tibiaLength)
+ (i * i))
/ (2 * _femurLength * i)
);
double ShoulderAngle = theta1 + theta2;
double ElbowAngle = Math.Acos(((_femurLength * _femurLength)
+ (_tibiaLength * _tibiaLength)
- (i * i))
/ (2 * _femurLength * _tibiaLength)
);

// Store all of the angle info in a "coordinate" as degrees
Coordinate Angles = new Coordinate();
Angles.coxaAngle = (CoxaAngle * 180 / Math.PI);
Angles.shoulderAngle = (ShoulderAngle * 180 / Math.PI);
Angles.elbowAngle = (ElbowAngle * 180 / Math.PI);
// My elbow servos are 90 degrees offset for increased movement range
Angles.elbowAngle -= 90;
return Angles;
}

It took me a week to come up with all of this. I hope it helps someone.

With this you can do almost anything. The next step is to alter the Coxa angle to match the body of your robot. Mine is the Phoenix from Lynxmotion, so my legs are 60 degrees offset. I do that calculation in another class called "Body", which creates 6 leg objects. I'll put up some videos of my bot's first steps when it gets to that point.

I have some other ideas about actually walking, but i think I'll probably start a new thread on it.

lunarnexus
04-11-2008, 10:48 AM
I was going to attach a picture, but it seems I have to link to another site and I don't want to host the picture so here's a picture of what the legs look like.

http://www.lynxmotion.com/images/Products/Full/3dofcblk.jpg
The Coxa is the right-most servo, the shoulder is the up/down next to is, and the elbow is the left most servo. The tibia is the leg segment on the left and the femur is the leg segment on the right.

04-11-2008, 01:25 PM
Great stuff! Thank you for sharing! If you don't mind, I'll port it to pure ANSI C and post that as well, and then we can look at optimizations.

Have you profiled the execution to see how much accuracy vs speed (computing resources) you're seeing using basic trig to estimate and iterate for your IK?

My personal goal is to work on a pure ANSI solution so we can all start thinking about getting our kinematics off the desktop and onto the 'bot. Then maybe optimize further to a few embedded assemblers.

Again - thank you for sharing your code!

P.S. I'd be happy to host any photos you want to host - I'll even make an account for you. I have a couple servers in a couple datacenters on a 34 gigabit fabric...

middelbh
04-11-2008, 03:22 PM
Middlebh,

Great start! I think we'll find though that simple trig isn't the way to go when you get into N-joints of 6DOF in three-space

Thouht we were talking about 3DOF and 6 Legs, not N-joints 6DOF :D...................

04-11-2008, 04:10 PM
Well, if we're looking at developing a library, wouldn't we want to library to have the flexibility to support "reasonably complex" designs?

04-11-2008, 04:15 PM
I don't know what the darned edit seems to croak on me...

Even the simplest arms seem to be 5-6DOF. And we need to grasp stuff in three-space.

Don't these seem like things a community architected/developed library would want to support?

Sienna
04-12-2008, 11:09 AM
I would love to see an ANSI C knowledge base. (Sorry C# programmers, but I don't hold to single source solutions.)

I have a pretty immediate need for my bot of something at is at least a 4 DOF leg calculation for my next generation tripod.

Plus, I would hope the library comes in at least two flavors, one for speed and one for accuracy. Because my robot will have to balance on two legs, I personally will be looking at speed to factor in all the balance shifts that I will need. I imagine that an arm however would want accuracy.

Plus a knowledge base that covered things like khalman filters and such would be useful for me too, as I do have to get a IMU type device on my bot.

LinuxGuy
04-12-2008, 01:58 PM
I would love to see an ANSI C knowledge base. (Sorry C# programmers, but I don't hold to single source solutions.)[
I am the same way, which is why I hesitate to tinker with MSRS. I have looked at it, but I think PyRo (http://pyrorobotics.org) (Python Robotics) or Myro (http://wiki.roboteducation.org/Myro) is where I will be doing my work. I'm in the process of seeing if I can work PyRo, PySerial, and a few other Python modules into buildroot. However, it may just be easier to upload the modules to Hammer (http://www.tincantools.com/product.php?productid=16133&cat=0&page=1&featured) and install them locally - this worked great for PySerial.

I have a pretty immediate need for my bot of something at is at least a 4 DOF leg calculation for my next generation tripod.
But, but, you haven't really completed the 3DOF version yet. Have you got the 3DOF software set the way you want it?

Plus, I would hope the library comes in at least two flavors, one for speed and one for accuracy. Because my robot will have to balance on two legs, I personally will be looking at speed to factor in all the balance shifts that I will need. I imagine that an arm however would want accuracy.
I suspect the library will mostly be just code others have use for various robots, and you'll have to massage into what you need and repost your version so others can do the same to your code. You might be able to start out with biped code and add a leg or quadraped code and take a leg away.:veryhappy::veryhappy: Add or subtract joints as required!

Plus a knowledge base that covered things like khalman filters and such would be useful for me too, as I do have to get a IMU type device on my bot.
There was a talk at our last PARTS (http://www.portlandrobotics.org) meeting about Baysian Partical Filters. That makes my head hurt! This is supposed to be better than the Khalman filters as it takes more stuff into account. From what I understood at the meeting, it should be more accurate.

8-Dale