Tags: algorithm, dcm, integration, orientation
Yup. That's the idea. We know the DCM "lives in" SO(3), so the discrete integrator should preserve this. The Euler method doesn't preserve this symmetry, hence the need to renormalize.
The exponential of a matrix is just like the the exponential of a number:
exp(A)=1+A+A^2/2+...A^n/n!+...
What is going on in the Euler integrator is that the DCM is getting updated by multiplying by (1+\Omega). This is just the first two terms in the Taylor expansion for exp(\Omega). Unfortunately, the determinant of (1+\Omega) is not one, so the SO(3) symmetry is violated.
Adding more terms does beat the error down, but doesn't eliminate it. The trick is to get an approximate matrix that's fast to compute and conserves SO(3) from the get-go.
There is a closed form for exp(\Omega), but it is a bit messy with sinh and cosh terms. So from a practical point of view it's not the way to go on small processors, but I use it in Matlab.
However, there are better integrators that do preserve SO(3), I'm playing with them, but again, they may only be of pedagogical value in this application.
In the case of a free body, integrators have other problems like not conserving energy either. That's why nobody integrates the solar system with Euler. Things blow up. Euler's method is really only good as an example method, and it should almost never be used in practice.
I'll type up some notes soon.
Scott,
I am a big fan of pedagogy! I'm looking forward to reading your notes.
The invariant observer I was talking about is described in this thesis (and the referenced papers by Bonnabel, Martin, and Rouchon) http://cas.ensmp.fr/Publications/Publications/Dissertations_files/S..., if you are interested.
- Roy
Hi Bill,
I came across the discussions on this site with a great interest.
And would like to thank you for your great effort you have put on this subject.
I am just a learner and in one point it seems like I lost the track in some aspects
I have 2 questions (I know they are really stupid questions but still couldn't understand it properly).
Really do appreciate if you can help me out with this.
1. When we say body fixed frame we think that the aircraft is steady and the reference frame is rotating. right ?
According to the youtube video http://www.youtube.com/watch?v=E7XVvv8XHgI
after the first turn (2. Do a quick roll of 180 degrees.) instead of having a roll how the plane takes a 180 turn around the pitch axis. I just realized that this happens if we define roll, pitch and yaw in the inertial frame instead of the body frame. ( is that the way it considered ? ) if its so can you please explain why ( because aircraft pitch gyro always measure the rotation around the pitch axis ie the gyro is fixed to the body)
2. Regarding the non commutativeness how do you address this with DCM. When we measure some rotations on body frame at a time by changing the reference frame how can we overcome the problem.
add :Does it helps to convert the frame conversion when correcting the gyro drift which is measured in body fixed frame by the help of accelerometer inputs measured in inertial frame
Thanks a lot again in advance for your time and appreciate your help a lot.
The difference for what I'm understanding here is that DCM will compute with axis rotating along with the object and Direct Integration will use a reference static initial axis, is that correct ?
Yes, that's correct. Rotations are not commutative, but direct integration assumes they are - it takes many small rotations and simply adds them to a running total for each axis. Since the order of those rotations is important, the end result can be anywhere from "mostly right" to "grossly incorrect", depending on the set of rotations applied.
The DCM applies each small rotation sample and applies it to a rotating reference frame, so the order of operations is preserved.
Hey , do you still have this file?
It sounds very useful to have a Matlab implementation with graphical output.
Thanks in advance!
You may also find Paul Bizard's link on the UAVDevBoard Home page useful:
http://gentlenav.googlecode.com/files/SfunctionsPaulBizard.zip
and Paul's "Matlab/Simulink/AVL simulator" forum discussion
Ah thanks, I'll take a look!
2396 members
385 members
401 members
302 members
146 members
© 2015 Created by Chris Anderson.