Hi Everyone.
I am new to this forum... long time reader, first time poster. I hope to contribute to the community.

My question is regarding the DCM algorithm:
I have simulated Bill's DCM algorithm in MatLAB/Simulink, and it seems, that direct integration always meets or exceeds the DCM integration/multiplication. See results below:

It seems while simply integrating the said non-linear differentials, I find the results to be of better accuracy and MUCH LESS processing power!! So why even use the DCM orientation integration? What are the advantages?

Please note: In this simulation, I have intentionally not yet taken into account the PI drift correction (because, no matter what pre-algorithm you use, in the long run, post PI correction will always give you the correct orientation).


Views: 3013

Reply to This

Replies to This Discussion

Ah thanks, I'll take a look! 

I've just come across this thread and I'm still not clear on what the original poster means by "direct integration." What do you mean by direct integration?


DCM just directly integrates the differential equation:

dr/dt=w x r.


Also, that's a system of three linear ODEs. There isn't anything nonlinear about the differential equation for rotational kinematics.


Perhaps he is applying the rotation matrices sequentially?


If you express w as a skew symmetric matrix, you can solve the differential equation for the kinematics by taking the matrix exponential of the matrix version of w (\Omega). The integrating factor approach to solving the first order ODE is related to the exponential map that takes the Lie algebra so(3) to the Lie group SO(3). You end up with an exact matrix that you can multiply the DCM by at each time step. Since this matrix (exp(\Omega)) is a member of SO(3), there is no need to renormalize at each time step. This is mostly of pedagogical value, however, since the use of the infinitesimal rotation matrix along with renormalization is faster.


So what do people mean by "direct integration?" 

Also, I'm puzzled by people referring to the ODE for rotational kinematics as nonlinear.





The OP was just assuming that omega = d theta / dt (where theta is pitch, roll, or yaw attitude), as opposed to your correct coupled formulation. Since the cross product can be parameterized as a matrix, I think you are correct that the equation is linear. I just never thought of it that way before.


- Roy

So he was applying finite rotation matrices sequentially, using \theta_x=wx*dt, \theta+y=wy*dt, \theta_z=wz*dt? It wasn't clear what he was doing and I currently don't have Simulink so I couldn't load up his models.


Applying a single rotation matrix given by exponentiating the skew-symmetric representation of w does work. You form the finite rotation matrix that rotates about the instantaneous axis of rotation.


Yeah, the kinematics are linear. They have the form

L(r)=0 where L is the operator D=d/dt+w x.


Written in matrix form, you just get a linear system of ODEs:

dr/dt=\Omega r, where \Omega is the skew-symmetric matrix.


It's linear, just non-abelian.


Solving the ODE in closed form and using that to update the DCM is more accurate, but much more computationally expensive. It's not worth it unless you have tons of processing power to spare. I've implemented it in Matlab just for completeness. 


It is fun to see the deep connection between Lie groups, Lie algebras, and differential equations in action.












I've seen some papers that discuss "invariant observers" that I believe are based on the idea of keeping the product in SO(3). Do you have a reference that describes what you mean, or can you at least type out the equation? I think you mean somethinng like this:




where m is for Matrix, and A is the skew-symmetric matrix form of omega

       0             -omegaz   omegay

A = omegaz        0            -omegax

      -omegay        omegax      0           


Does expm(A) have a closed form solution? Is the first order approximation any different than multiplying by I + A dt then renormalizing? Actually, I think that would be identical, from a Taylor series approach. How about if we add the next term - something like A^2/2?


- Roy

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:



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.



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.

Reply to Discussion


© 2019   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service