Hi there,
I've been beavering away for quite some time now developing my own inertial navigation algorithms from scratch. I'm trying to do dead reckoning with 3 accelerometers and 3 gyros, with no aiding from GPS or elsewhere.
It's working reasonably well but I'm confused about whether I need to compensate for centrifugal or centripetal forces caused by rotation of the body. This sort of thing:
Formulas to calculate centripetal acceleration (when there is no speed along the y-axis; v = 0):
Along x = q * w
Along y = r * u - p * w
Along z = q * u
I can see that if you want to get a gravity vector from just the accelerometers, then you'd have to subtract centripetal accelerations from the measured accelerations. But I'm mainly depending on the gyros to get the gravity vector. I then subtract the gravity from the measured accelerations and feed that into the double integration to get position (that makes it sound so much simpler than it is...). My intuition tells me centripetal forces should be included in what's fed in to the integration.
But I can see compensation in other people's code, e.g. line 237 in this file from arducopter:
On the other hand, I just spent >$100 on "Strapdown Inertial Navigation Technology, Second Edition", and despite covering lots of fascinating esoteric compensations that are probably only needed for ICBMs, there's not a mention of centrifugal or centripetal compensation other than in relation to the rotation of the earth.
I think the conclusion is that compensation is needed for some applications, but not what I'm doing. Perhaps I haven't explained what I'm doing clearly enough for anyone to answer, but any pointers would be greatly appreciated.
Cheers,
Max
Replies
Centripetal accelerations can be determined by the gyros in a discrete fashion:
α = (ω[n+1] - ω[n] ) / Ts;
Where α is the angular acceleration, ω[n] is the current angular velocity, and ω[n -1] is the previous angular velocity.
You may then use a physics equation to relate the angular acceleration with the linear acceleration felt by the accelerometer... I think it's a = α * l; where l is the distance from the center of rotation along the same axis as a.
Whether or not you need to account for centripetal accelerations is dependant on the resolution of your accelerometer as well as the l distance. Obviously, if l is really small, then the centripetal acceleration felt by the accelerometers would be trivial for some systems.
Special note: dead reckoning using only inertial measurements is not such a great idea. :)