Back when I was in university, I did my Final Year Project on a suspension kinematics simulator I (oh so humbly) called “JRodSIM.” It calculated the suspension movement over a range of wheel bump and chassis roll by visualising each suspension link as a sphere and finding the sphere intersection points.
While it was very good at analysing double wishbone suspension setups, it couldn’t do anything else, like struts, multi-link, etc. I’ll do another post on JRodSIM later.
I’ve recently become interested in making a new sim that will do struts and multilink, as now that I’m no longer in F-SAE (the subject of many future posts, I assure you), these will be suspension types of much more use to me that double wishbone. The process, however, is very different, as I cannot use intersecting spheres for this kind of thing. Fortunately, I’ve found a paper (http://archimedes.ing.unibs.it/papers/documenti/Isata_mk.pdf) that has an iterative method of determining multilink sytems. Permit me to put the paper into my own words, for the sake of my understanding (I did NOT invent this process!!)
From my understanding thus far, the technique seems to be a variation of inverse kinematics- a process that is used to by robots with multiple articulating limbs to decide how to move its limbs in such a way to have the last link reach a goal. The first step is to make a parameter matrix that defines the attitude of the upright/wheel in its 6 degrees of freedom (X, Y, Z, Toe, Camber, Castor). The chassis pickup points are defined in a matrix in global coordinates and the upright is described in another matrix, but in local coordinates. The global coordinates of the upright can be determined by multiplying the upright matrix by a roto-translation matrix. The lengths of all the suspension links are stored in yet another matrix, the last item being the shock length, which can be varied to simulate bump. If the parameter matrix is changed, the link lengths matrix changes.
So the challenges are:
1) How do I calculate the change in link lengths given a new set of parameters?
2) For what parameter matrix are the link lengths all as they should be?
The paper addressed (1) by using the first term of the Taylor approximation. If you’re like me, you’ll need a refresher on this, so look at the diagram below.
The whole of the Taylor’s series is not really needed. We can just use the first term (according to the paper… I’m not quite there yet). The first term is dead simple. If you know a base point f(S0)=A (design suspension geometry) and you know the gradient at that point, then, you can approximate a point not too far away- f(S1) = f(S0) + f'(S0).(S1-S0). Pretty simple, right?
Well, kinda. That’s all well and good for simple 2D stuff with only one independent variable…. but what if you have 6 variables? And 6 degrees of freedom? This is where the Jacobian comes into play. A Jacobian matrix (in this context at least) describes how each link length varies according to each parameter. Since we have 6 degrees of freedom and 6 links, J is a 6×6 matrix… an UBERGRADIENT, if you will. In theory, it is generated by deriving each length equation with respect to each degree of freedom, but this is way too unwieldy, as the equations boil down to a very unfriendly sqrt(God^2 + Help^2 + Me^2) format… I puzzled over this for a day or two. In the end, I realised that it’s approximated. Again, we’re iterating here. So rather than deriving crazy equations, we fall back on Rise/Run… or f’x = ( f(f+h) -f(x) ) / h Simple as that!
The next step was to make a basic prototype in MS Excel in order to understand the maths and test the process. The basic structure took 30 minutes to write and several evenings to troubleshoot. I was getting pretty demotivated, but at the time of this particular edit, the magic formula appears to be 1 x Sangria, 1 x Whiskey on the rocks and 1 x Mohito. These three beverages together seemed to stimulate the correct part of my brain and I got the damn thing working.
I’ve knocked up a simple system in MS Excel, the results of which can be seen below. Note the logarithmic scale of the graph. By the 4th iteration, the error is already below 0.001mm, which is far less than the compliance you’d expect in a suspension setup due to joints, deflection, etc.
Now this is all well and good for a direct acting shock, but the challenge now is to figure out how to add a pushrod or pullrod as this introduces another link in the system with a moving point of origin. My hunch is that it will increase the Jacobian to a larger matrix as it will effectively ad another degree of freedom and another constraint- so maybe a 7X7 matrix?
Time will tell.