I've been playing with a 9dof board I was using for some custom control work I had on and was wondering if it's possible to extend the standard attitude [pitch,roll,yaw] vector we get to have current velocities in X,Y,Z.
The obvious solution is to build up a velocity simply by multiplying the time interval by the accel's and summing them over time. This will clearly mount up with lots of error, though, and we need some way of continuously correcting this in the same way a kalman filter does for the attitude.
My thinking is that a well architected flight dynamics controller (the APM in this case) will be an event based system with the primary event consisting of this full state vector, also annotated with GPS state (gps velocity != IMU velocity and need to be kept seperate) so that any consumer nevre has to do anything with the numbers, simply compare where it is to where it wants to be (a delta on each field in the state vector) and pass the errors to the suitable PIDs for control.
With a system like that, loiter would become rock solid without GPS.
Has anyone had a go at that? I'll probably try and code it up over the next days/weeks.