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: 2663

Reply to This

Replies to This Discussion

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.

The only difference I can see is that one is using a global coordinate system, and one local.
Hey everyone. A few have asked me to post my MatLab SIMULINK DCM algorithm, so here it is:

This was created in Matlab r2009b.
I will plan to do more indept post for you guy within a few months, so in the meantime if you have any questions post back here.

Best Regards

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:




and Paul's "Matlab/Simulink/AVL simulator" forum discussion

Ah thanks, I'll take a look! 


DIY Drones Monthly


Season Two of the Trust Time Trial (T3) Contest 
A list of all T3 contests is here. The current round, the Vertical Horizontal one, is here

© 2016   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service