Hi guys,
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.
Cheers,
Dave
Replies
I've been looking and reading documents about sensor fusion gps/imu. Your approach about getting velocity has one problem or so I think. Imagine your flying against wind. If you measure velocity with the help of imu sensors, it will give you a "false" reading, since it's struglling against the wind, so that would only work in a non wind environment. One thing would come out good from this. Position hold inside buildings for instance, would be possible.
I am working on just the z-accel alt-hold piece right now but I haven't written anything but test code for it, still fleshing out my ideas. I like how your thinking about how loiter should work though, using the GPS to attain a position and the IMU to hold it. I'll let you know when I get something usable, it should be relatively easy to implement into the other axi's...