As previously mentioned I'm using the OS4000 tilt compensated compass from Ocean Server. It is not really suitable for our purpose because it is inaccurate during movement.
There are companies offering more suitable equipment in the order of £1500 ($2000) but my budget doesn't stretch quite that far. Fortunately there are other groups of hobbyists looking into this problem and it is only quite recently that the cost of such equipment is falling to sensible levels.
Mobile phone companies are driving down the cost of the sensors as they require more functionality from their handsets, and model plane users are using these devices to control their aircraft.
Initially the magnetic sensor was used alone but it suffers from pitch and roll inaccuracies. Adding a 3D accelerometer limits this effect but introduces more errors due to acceleration when moving. To counteract this, a 3D gyroscope is needed to analyse the dynamic rotation.
The performance, size and price of all these sensors is now only £10's.
The problem is effectively combining all the information from the sensors to provide a stable, useful, accurate output.
My first attempt was to experiment with a 9 degrees of freedom (9DOF) IMU board from Sparkfun. It supplies 3D magnetic, acceleration and gyroscopic data.
Unfortunately I seemed to fail at almost the first hurdle. I couldn't get it to work effectively as a tilt compensated compass. It would almost be correct but not quite. I'm not sure if I had offset problems or the sensors were not quite aligned with each other but I spent a lot of time and got a little frustrated.
Only a couple of months ago I found this. It's from Yost Engineering in the States. I powered it up and experimented with some settings. It seemed to be giving a very stable output despite movement and it would stabilise to a change in heading well.
This is a particularly useful board because it contains not only the sensors but also a micro and the program to do everything. Just set it up and read the information you need.
All good things must come to an end! In the process of performing a firmware update the unit refused to communicate. Yost were very good and shipped out a replacement the next day. UK customs weren't as co-operative, I only received it a few days ago after a long wait.
In the interim I looked around and came across this from Pololu. It's a MinIMU-9.
This is a 9DOF board but offers no processing, my scruffy PIC is in the background chugging away at 44MHz to handle all the floating point number crunching.
The board interfaces via I2C and delivers raw sensor information. My PIC processor estimates a Direction Cosine Matrix (DCM) which is a set of numbers that compares one 3D axis set with another. It defines the rotation of the sensor board relative to the earth. The heading can be derived from the DCM.
The accelerometers still cause an issue but the solution is to concentrate on the gyro information during movement and the magnetic/accelerometers during more stable conditions. Gyro's tend to give an output when not rotating so it is important to cancel any gyro offsets and trim the gains such that during movement the reliance on the gyros is a feasible proposition. Of course, if severe movement is very prolonged then errors are bound to creep in.
Click on any of the images for more information.
I have not yet had time to finalise the development with the minIMU board. It's going in the right direction (pun intended) and I have quite a stable output however I've yet to carry out any real testing except shaking the sensor board. As I write this I've only had it for a week or so.
Since I now have the Yost PCB as well I don't know which board will suit me best. I have another intended application that would be best suited to the minIMU as it's cheaper but I have to complete and succeed with the processing firmware.
I think I'll concentrate on the minIMU until I reach a point where I complete it or I get stuck. At least I have the option to fall back to the Yost PCB if all else fails.