For my final year project at university, I made a suspension kinematics simulator to help with design of the FSAE car. It’s about time I put a post up here about this so I can link people to it instead of having to describe it. So here’s a bit of a how-to:
The basic underlying principle is that a linkage that has a constrained origin (ie, a suspension link bolted to the chassis) has an infinite number of possible locations where the other end of the link can end up. All these solutions must be a distance apart from the constrained point equal to the length of the link… so basically, if you were to put a dot at every possible point the free end of the link could end up, you’d get a hollow sphere of possible locations.
So let’s get started. Below is a simplified diagram of one corner of a double wishbone system.
We obviously know where all our chassis points are. They’re permanently fixed to the chassis and so (hopefully) won’t be moving anywhere. We then make up an imaginary virtual link from the lower balljoint to the contact patch. We can vary the length of this virtual link and that will simulate the wheel moving up and down.
So, we want to find out where the lower balljoint, upper balljoint and steering links are based on the chassis points and link lengths. If we know these, we know “everything” about the upright.
So first we find the position of the lower balljoint.
To do this, we visualise spheres on the two lower wishbone links and our virtual link.
Now we have three spheres, one for each link.
As you can see, the intersection point of these three spheres is the lower balljoint. Too easy, right?
Oh, by the way, there’s a second intersection point. You’ll need to determine which one is correct and which one is bullsh- er… erroneous.
Once you have the lower balljoint, you can use that and the two upper wishbone links to determine the upper balljoint’s position.
…and once you have those, you can find the steering link, at which point, you have all the information you need.
So, it all sounds pretty easy in theory, but how do we actually calculate the intersection of the spheres? The most direct solution is to solve the equations for the three spheres (which you can find here here… I could copypasta, but why pretend I remember it? ) analytically. I tried this first and it didn’t work out so well. The equations are hefty to say the least and once you do manage to solve them, you get div/0 errors constantly. It doesn’t work out well.
Instead, I found this method on the internet. Basically, you reorient your system so that all three spheres are co-planar on z=0, your first sphere is on the origin and your second sphere is on the x-axis.
Now we’re going to just focus on intersecting two spheres for now. We know that the solution two the intersection of the first two spheres is a circle (well, if you didn’t, you do now). The resultant circle is perpendicular to the line joining the two spheres. Thinking ahead, we don’t really care about *much* of this circle. We only really need the points of the circle that are on our origin plane, which is handy, because that makes it a 2-d problem.
Try to visualise the spheres on the diagram below. Sphere one’s origin is on (0,0,0) and has radius R1. Sphere 2’s origin is on (x1,0,0) and it has radius R2. Solving for C yields the radius of the resultant circle. A and b give the respective distance from the centre point of spheres 1 and 2 to the resultant circle.
Now we can introduce the third sphere again. Set x=a and it’s the same problem as above again.
This method of finding the intersection of spheres is particularly useful in this application for its robustness. Non-real answers only occur if the spheres do not intersect. In the rare case that the spheres are perfectly placed such that there is one solution rather than two, both answer yielded by the calculation will be the same.
You can get a .xls file with a bunch of intersection math examples, including a three-sphere intsersection from http://newtonexcelbach.wordpress.com/downloads/. This guy really knows his excel.
A couple of random points:
-If you want to do pushrods, pullrods and antirollbars, you’ll need to intersect a few circles with spheres. I’ll leave this as an exercise for the reader.
-To simulate roll, I found the roll centre and then rotated the chassis points about that. Or rather, I found the front and rear roll centre, joined them with a line, and rotated about that line.
-I visualised the whole thing with autoshapes. It’s surprising what you can achieve with autoshapes and some vba.
That’s it for now. Hope I didn’t put you to sleep. Click the thumbnail below for an animation of my autoshape visualiser. 🙂