Louis Legrand recently ported the direction-cosine-matrix firmware that Paul Bizard and I developed to the "IMUDOT", and made a video of a demo.Louis, thank you so much. Thank you.The video speaks for itself.Bill Premerlani
@William:
Hi William, is there a chance your code will work with GPS in binary mode (SIRF) in the near future ? I heard somewhere that binary is more accurate in general, and provides variometer data with greater accuracy. Is that correct?
Would the greater update rate and more advanced protocol compensate for the lack of magnetos?
My board uses the 1.5g setting. When I was designing it, I had sailplanes in mind. All I was really trying to do was to eliminate yaw-pitch cross coupling in my previous 2 gyro board by adding the third gyro, to improve the performance for saiplanes. Also, I thought that I would have to use the 1.5g accelerometer setting and the 75 degree per second gyros to achieve adequate signal to noise.
The performance of the board is much better than I ever imagined it could be. In hindsight, I wish that I had used the 6g setting and 300 degree per second gyros for use in aerobatic planes. I have a design for a new board with those specs, I am just trying to decide what GPS to use.
The filter technique I use is very simple, you can take a look at it in any of the demo firmware or MatrixNav. It is in the A/D code. Every time a new sample is ready at the 500 Hz rate, I subtract the filtered value from it, multiply it by a filter gain, and add the result to the filtered value, and that is the new filtered value.
Every 0.025 seconds, an interrupt causes the control firmware to run. Wherever gyro or accelerometer values are needed in the calculations, I use whatever the filtered value is at that instant. You can get away with the asynchronous nature of the data transfer because I store all gyro and accelerometer values as 16 bit integers.
I see the MMA7260 accelerometer has four g-selects: 1.5g, 2g, 4g, 6g. The UAV DevBoard is configured for 1.5g according to the Sparkfun schematic, did you keep the 1.5g setting on your board? I am looking at the accelerometers from Analog, Freescale, ST, and VTI, would you recommend stying with 1.5g based on your experience or possibly going with something higher?
Can you describe the digital filter technique you used to decimate the sample rate down to 40 Hz from 500 Hz?
I can give you some information relative to the UAV DevBoard, which gets similar performance. It uses 3 ADXRS401 gyros, and a 3 axis MMA7260 accelerometer. No magnetometer. ADC sampling rate is 500 samples per second for each channel. Samples are passed through a digital low pass filter with a time constant of around .020 seconds, and passed to the execution of the DCM algorithm at a rate of 40 samples and computation passes per second.
UFO-MAN made a video of a similar demo for the UAV DevBoard.
Louis, can I ask what model accelerometers, gyros, and magnetometers you use for your IMUDOT? Do you apply any analog or digital filtering (poles, cut off frequencies)? What ADC sample rate do you use for the sensors?
Let's put it that way. Truly Amazing IMU. But... From our point of view, it is as available as Procerus Kestrel. In fact not available at all. If we rank it among other IMUs not available for mortal being, I bet the one in Space Shuttle is more impressive as it is radproof and requires no acceleros.
"Regardless, it is nice to see Bill and Paul's effort in the hands of a giant like Intel. That speaks for itself!"
And now comes the lack of GPL. Soon Intel is going to announce the new processor that will be able to tell if it is being thrown into the thrash in order to start negotiating early.
I agree with OliverD, for the most part. The InertiaDot was not designed for UAV's. It is mostly designed to be worn by people. Further, it uses some pre-production parts from a company I cannot name (we signed a NDA). Bill's UAVDevboard is definitely the way to go for the diyDroner. Bill's code is first rate. As a point of reference, our previous generation IMU code used the majority of a 32 bit 400MHz XScale. The InertiaDot is running on a 16bit 8Mhz MSP430!
I agree with OliverD, for the most part. The InertiaDot was not designed for UAV's. It is mostly designed to be worn by people. Further, it uses some pre-production parts from a company I cannot name (we signed a NDA). Bill's UAVDevboard is definitely the way to go for the diyDroner. Bill's code is first rate. As a point of reference, our previous generation IMU code used the majority of a 32 bit 400MHz XScale. The InertiaDot is running on a 16bit 8Mhz MSP430!
@OlivierD,
Thank you for your kind words.
I basically agree with you, although magnetometers would improve performance when making turns in strong winds. The ideal combination is a GPS, 3 gyros, 3 accelerometers, and a 3 axis magnetometer, but it would be only a little bit better than GPS, 3 gyors, and 3 accelerometers, if the GPS responds quickly.
Sure. I appreciate the budget consideration. That said, for the helicopter I'm working on at school, a board like this (not with bluetooth, definitely a wired connection) combined with a Novatel GPS is actually pretty appropriate.
Comments
Hi William, is there a chance your code will work with GPS in binary mode (SIRF) in the near future ? I heard somewhere that binary is more accurate in general, and provides variometer data with greater accuracy. Is that correct?
Would the greater update rate and more advanced protocol compensate for the lack of magnetos?
My board uses the 1.5g setting. When I was designing it, I had sailplanes in mind. All I was really trying to do was to eliminate yaw-pitch cross coupling in my previous 2 gyro board by adding the third gyro, to improve the performance for saiplanes. Also, I thought that I would have to use the 1.5g accelerometer setting and the 75 degree per second gyros to achieve adequate signal to noise.
The performance of the board is much better than I ever imagined it could be. In hindsight, I wish that I had used the 6g setting and 300 degree per second gyros for use in aerobatic planes. I have a design for a new board with those specs, I am just trying to decide what GPS to use.
The filter technique I use is very simple, you can take a look at it in any of the demo firmware or MatrixNav. It is in the A/D code. Every time a new sample is ready at the 500 Hz rate, I subtract the filtered value from it, multiply it by a filter gain, and add the result to the filtered value, and that is the new filtered value.
Every 0.025 seconds, an interrupt causes the control firmware to run. Wherever gyro or accelerometer values are needed in the calculations, I use whatever the filtered value is at that instant. You can get away with the asynchronous nature of the data transfer because I store all gyro and accelerometer values as 16 bit integers.
Can you describe the digital filter technique you used to decimate the sample rate down to 40 Hz from 500 Hz?
I can give you some information relative to the UAV DevBoard, which gets similar performance. It uses 3 ADXRS401 gyros, and a 3 axis MMA7260 accelerometer. No magnetometer. ADC sampling rate is 500 samples per second for each channel. Samples are passed through a digital low pass filter with a time constant of around .020 seconds, and passed to the execution of the DCM algorithm at a rate of 40 samples and computation passes per second.
UFO-MAN made a video of a similar demo for the UAV DevBoard.
"Regardless, it is nice to see Bill and Paul's effort in the hands of a giant like Intel. That speaks for itself!"
And now comes the lack of GPL. Soon Intel is going to announce the new processor that will be able to tell if it is being thrown into the thrash in order to start negotiating early.
Thank you for your kind words.
I basically agree with you, although magnetometers would improve performance when making turns in strong winds. The ideal combination is a GPS, 3 gyros, 3 accelerometers, and a 3 axis magnetometer, but it would be only a little bit better than GPS, 3 gyors, and 3 accelerometers, if the GPS responds quickly.