[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Paparazzi-devel] ArduIMU
From: |
Steve Joyce |
Subject: |
[Paparazzi-devel] ArduIMU |
Date: |
Tue, 1 Feb 2011 00:08:45 +0100 |
I wanted to report a few things I discovered about this ArduIMU and the
module code in the paparazzi repository.
When I first tried it out I thought it worked quite well at least in auto1,
but it seemed to drift a bit in auto2 especially with extended circling. I
also noticed that the blue LED (gps lock) flickers on and off and the
reported yaw was very noisy (or almost garbage).
After a closer look at the code, I found a couple of significant bugs:
In ins_arduimu.c line 156, the second GPS block transfers 13 bytes, but the
buffer size is 14 bytes. The sol_Flags byte is missed and interpreted as
whatever was left in the buffer from the first block. This is checked on
the arduimu side for a valid gps fix, hence the flickering gps lock LED.
This actually doesn't make any difference because the ardu code uses the gps
data whether the flags are good or not.
similarly, line 135, the first GPS block transfers 28 bytes of a 29-byte
buffer, missing the last byte of ground speed.
But the most significant bug is line 88 ground_course: The units on the
paparazzi side are decidegrees, but it is interpreted as degrees on the
arduimu side. It is converted to radians and used directly for yaw drift
correction, hence the random yaw estimate. I'm surprised it doesn't totally
foul up the attitude estimation.
Unfortunately after fixing these things, it performed even WORSE. But at
least the yaw estimate follows the gps course now.
I also looked at the timing: The main loop on the arduIMU side runs at
50Hz, but I couldn't quite read it that fast over I2c. I have a feeling
that the I2c interrupts are wreaking havoc with the timing in the main loop
but I'm not sure. That's why I asked about using I2c in slave mode so the
arduIMU could push the estimate at the end of the main loop. It could also
be a vibration issue, but as I said it seems to work ok in auto1 without GPS
compensation.
In my code I trimmed down the GPS data package to one block with only the
ground_speed and ground_course and a few fix flags. As far as I can tell
this is all that is used on the arduIMU for centripetal acceleration and yaw
drift correction.
any ideas welcome, I'm almost ready to give up.
Cheers,
Steve
- [Paparazzi-devel] Default targets for modules, Andreas Gaeb, 2011/01/03
- Re: [Paparazzi-devel] Default targets for modules, Christophe De Wagter, 2011/01/03
- Re: [Paparazzi-devel] Default targets for modules, Andreas Gaeb, 2011/01/04
- Re: [Paparazzi-devel] Default targets for modules, Christophe De Wagter, 2011/01/04
- Re: [Paparazzi-devel] Default targets for modules, Gautier Hattenberger, 2011/01/04
- Re: [Paparazzi-devel] Default targets for modules, Andreas Gaeb, 2011/01/04
- Re: [Paparazzi-devel] Default targets for modules, Gautier Hattenberger, 2011/01/31
- [Paparazzi-devel] I2C slave mode, Steve Joyce, 2011/01/31
- [Paparazzi-devel] ArduIMU,
Steve Joyce <=