Randy Mackay
d291594d7c
Compass: get_primary method made public
2014-07-22 22:01:09 +09:00
Randy Mackay
1f579563e6
Compass: set_motor_compensation takes instance as first parameter
...
Also get_motor_compensation uses primary compass
2014-07-22 21:59:04 +09:00
Randy Mackay
47801a6c4d
Compass: bug fix to init of device id
...
Also init members to reduce compiler warnings
2014-07-16 14:29:10 +09:00
Markus Koetter
701aa9ac4c
AP_Compass: DEVIOCGDEVICEID is (currently) not defined in VRNuttX
2014-07-15 11:42:37 +10:00
Andrew Tridgell
1e20f89f90
AP_Compass: use HAL_COMPASS_DEFAULT in example code
2014-07-14 09:44:36 +10:00
Randy Mackay
bbf4805b0e
Compass: update pixhawk expected device ids
2014-07-11 11:10:18 +09:00
Craig Elder
c9f3adcb5c
Compass: Updated COMPASS_PRIMARY parameter description
2014-07-10 15:32:06 -07:00
Craig Elder
0ecd12b1c6
AP_Compass: Corrected typo in parameter description
...
Corrected typo in parameter description
2014-07-10 14:19:19 -07:00
Randy Mackay
4995b9ada8
Compass: default device id to zero
2014-07-10 20:25:36 +09:00
Randy Mackay
16d4af8346
Compass: sanity check instance in set_and_save_offsets
2014-07-10 20:25:32 +09:00
Randy Mackay
cf7e1a6339
Compass: example sketch update for set_and_save_offsets
2014-07-10 20:25:13 +09:00
Randy Mackay
a778522cef
Compass: add learn_offsets_enabled accessor method
2014-07-10 20:25:11 +09:00
Randy Mackay
108c878b04
Compass: set_offsets modified to also save offsets
2014-07-10 20:25:08 +09:00
Randy Mackay
124bd4b489
Compass: save_offsets accepts compass instance
2014-07-10 20:25:05 +09:00
Randy Mackay
070f1c1bbb
Compass: add dev_id for VRBrain
2014-07-10 20:24:49 +09:00
Randy Mackay
f42c9579d7
Compass: add dev_id for PX4
...
dev_id is retrieved from PX4Firmware via ioctl call
2014-07-10 20:24:46 +09:00
Randy Mackay
b7f33d81ad
Compass: add DEV_ID param and configured method
...
These allow checking the offsets were created with the current compass
device.
2014-07-10 20:24:44 +09:00
Andrew Tridgell
c138244155
AP_Compass: support 3 mags on PX4
2014-07-04 12:07:47 +10:00
Emile Castelnuovo
8f3a4bc88b
VRBRAIN: correction to AP_Compass_VRBRAIN.cpp
2014-06-19 11:27:45 +02:00
LukeMike
8f552d5758
VRBRAIN: Changed the management of VirtualRobotix's boards.
2014-06-19 11:27:38 +02:00
Andrew Tridgell
e9e1799700
AP_Compass: fixed VRBrain build
2014-06-02 10:42:37 +10:00
Andrew Tridgell
2d9e9d9bc3
AP_Compass: added COMPASS_PRIMARY parameter
...
this allows selection of which compass is the primary. Useful if the
first compass starts giving spurious data (as happened in our plane)
2014-05-25 22:03:44 +10:00
Jonathan Challinger
e883b889b6
SITL: Add compassmot interference
2014-05-15 21:14:20 +10:00
Kevin Hester
b7bed437c2
Compass: fixup line endings
2014-04-15 15:56:57 +09:00
Emile Castelnuovo
1bc199c5bd
AP_Compass: new files and definition for VRBRAIN board
2014-04-08 16:19:19 +10:00
Andrew Tridgell
485ae596fc
AP_Compass: fixed last_update for secondary compass with primary failed
...
this ensures EKF and DCM will use a secondary compass if the primary
fails
2014-03-23 22:05:17 +11:00
Matthew Lloyd
60a4f74de6
AP_Compass: avoid division by zero if we haven't received any mag reports
...
Otherwise, get_field() will return NaNs after once every few calls to
read() during compassmot on PX4 platforms, which causes compassmot to fail.
This is a quick hack around the deeper issue, which could be something
like the PX4 mag driver experiencing starvation and skipping mag reports,
buffer overrun or something else that causes mag reports to be dropped.
Or perhaps we should never expect in the first place that we will always
receive at least one mag report between calls to read().
2014-03-23 21:22:32 +11:00
Andrew Tridgell
db48ed9218
AP_Compass: fixed showing of is_external for 2nd compass
2014-03-13 16:26:43 +11:00
Andrew Tridgell
cf148fa76c
AP_Compass: improved COMPASS_ORIENT and COMPASS_EXTERNAL for Pixhawk
2014-02-27 12:46:27 +11:00
Andrew Tridgell
189d635493
AP_Compass: constrain compass offsets to +/- 2000
...
this is prompted by a user log showing NaN compass offsets, resulting
in a crash. The patch ensures we never end up with NaN offsets, and
also constrains the offsets to a reasonable limit
2014-02-16 13:33:41 +11:00
Andrew Tridgell
9bb8f73d56
Compass: split compass learning out to its own C++ file
2014-02-16 13:21:06 +11:00
Andrew Tridgell
54562b0b9a
AP_Compass: prevent bad initial values from affecting HMC5883 calibration
...
the first couple of values after we enter strap mode may be low, but
just above our 0.7 threshold. We now discard the first two values to
prevent these affecting the average.
Also added some commented out debug code and a comment on the scaling
of the calibration code
2014-01-22 17:15:34 +11:00
Andrew Tridgell
bc2d17e76e
AP_Compass: added vector compass setHIL method
2013-12-30 14:35:24 +11:00
Andrew Tridgell
c44d8b45ce
AP_Compass: auto-select healthy compass
2013-12-09 20:01:42 +11:00
Andrew Tridgell
61f564d7c9
AP_Compass: support motor compensation for multiple compasses
...
Pair-Programmed-With: Randy Mackay <rmackay9@yahoo.com>
2013-12-09 19:45:31 +11:00
Andrew Tridgell
0a7a935f63
AP_Compass: fixup
2013-12-09 17:54:54 +11:00
Andrew Tridgell
c538816825
AP_Compass: support compass health status on multiple compasses
2013-12-09 17:46:41 +11:00
Andrew Tridgell
bde89fd4e2
AP_Compass: added compass offsets for 2nd compass
2013-12-09 17:34:07 +11:00
Andrew Tridgell
8a97042fb1
AP_Compass: updates to support multiple compasses
2013-12-09 17:34:07 +11:00
Andrew Tridgell
cb16733918
AP_Compass: switched to a vector based interface
...
this is more consistent with other APIs and makes multi-device support
easier
2013-12-09 17:34:06 +11:00
Randy Mackay
84fdff4cd6
Compass: slightly relax HMC5843 calibration limits
...
Some users have reported Z axis values as high as 1.33. Their compasses
seem otherwise health so extending the limits slightly.
2013-11-27 15:36:34 +09:00
Andrew Tridgell
1ccd6bb7ef
AP_Compass: don't wait more than 1ms for compass sample
...
this prevents 5ms delays in compass accumulate
2013-10-08 11:50:54 +11:00
Andrew Tridgell
f286369990
AP_Compass: fixed orientation on Linux
2013-10-08 11:50:54 +11:00
Andrew Tridgell
83c942a512
AP_Compass: prevent NULL deref on enable mag while running
2013-10-08 11:50:53 +11:00
Andrew Tridgell
da14ad2e2d
AP_Compass: neaten up HMC5883 debug
2013-09-28 21:24:02 +10:00
Andrew Tridgell
ce7d458855
AP_Compass: added Linux support to the compass test
2013-09-28 21:24:02 +10:00
Andrew Tridgell
6fc5b06043
AP_Compass: fixed some old Serial.print calls
2013-09-28 21:24:02 +10:00
Andrew Tridgell
1243ab9e63
AP_Compass: added HAL_Linux support
2013-09-28 21:24:02 +10:00
Andrew Tridgell
3f0f8dfa62
AP_Compass: removed SMACCM support
2013-09-26 22:38:31 +10:00
Mike McCauley
2fa0c39f3a
AP_Compass: added Flymaple orientation
2013-09-24 13:18:35 +10:00
Mike McCauley
4c65c42411
AP_Compass: fixed ARM 32 bit compatibility
2013-09-23 18:10:21 +10:00
Andrew Tridgell
229841052a
AP_Compass_PX4: removed MAGIOCSSAMPLERATE call
2013-09-09 18:04:41 +10:00
Andrew Tridgell
db14a85fc5
AP_Compass: added more debugging to AP_Compass_PX4 driver
...
this helps debug compass initialisation issues
2013-09-09 18:04:40 +10:00
Andrew Tridgell
b8b72819c1
AP_Compass: ignore COMPASS_ORIENT for internal compass
...
this means if COMPASS_ORIENT is not 0 and the external compass fails
to start on boot we don't end up with a bad compass orientation
2013-09-07 16:49:51 +10:00
Andrew Tridgell
9320e82ac2
AP_Compass: added in new orientations
2013-08-30 14:19:03 +10:00
Andrew Tridgell
fbf79c07f0
AP_Compass: added COMPASS_EXTERNAL option
...
this allows configuring of a compass as being externally attached
2013-08-30 14:02:09 +10:00
Andrew Tridgell
97b7130bb9
libraries: update license header to GPLv3
...
we switched to GPLv3 a long time ago, but neglected to update the
per-file license headers
2013-08-30 13:01:39 +10:00
Andrew Tridgell
1ff669eb97
AP_Compass: simplify PX4 compass driver
...
we can now rely on queueing in the NuttX driver
2013-08-30 13:01:34 +10:00
Andrew Tridgell
feac9d1306
AP_Compass: fixed a bug in the tilt compass calculation
...
The simplification applied a few months ago was incorrect
2013-08-18 21:08:52 +10:00
Tobias
ab311d1dd4
AP_Compass: removed comparison out of range compiler warning
...
uint_ >= 0 (-Wtype-limits)
2013-07-08 14:57:25 +10:00
Andrew Tridgell
a6c7bd3612
AP_Compass: fixed rotations for COMPASS_ORIENT
...
this matches AHRS_ORIENTATION again
2013-07-08 12:17:59 +10:00
Craig@3DR
1a3ed2d80b
AP_Compass: Corrected COMPASS_ORIENT Parameter Description
2013-06-26 19:14:24 -07:00
Andrew Tridgell
4007b7b1e9
AP_Compass: fixed indent-tabs-mode
2013-05-30 09:52:30 +10:00
Randy Mackay
80bd458f29
Compass: update parameter description
...
We do not want people modifying the COMPASS_MOTCT manually
2013-05-11 14:50:36 +09:00
Andrew Tridgell
9a87b3f3c1
AP_Compass: use const on more functions and remove old calculate_heading()
...
the calculate_heading() based on roll/pitch is not needed anywhere
2013-05-09 09:24:06 +10:00
Andrew Tridgell
f78de63a09
AP_Compass: more efficient calculate_heading() implementation
...
Thanks to piersh for this improvement. See
b5f0635455 (commitcomment-3171806)
2013-05-09 09:24:06 +10:00
Andrew Tridgell
c90d44c121
AP_Compass_HIL: fixed indentation
2013-05-02 21:31:17 +10:00
Andrew Tridgell
f72dd560cb
AP_Compass: fixed the HIL sensors compass
...
this sets up good compass values for HIL sensors
2013-05-02 14:59:33 +10:00
Andrew Tridgell
86027f6e0f
AP_Compass: fixed PX4 build
2013-05-02 13:00:52 +10:00
Andrew Tridgell
af50b652f8
AP_Compass: removed old orientation defines
...
we now use the rotations in libraries/AP_Math/rotations.h
2013-05-02 12:48:14 +10:00
Andrew Tridgell
217f34e155
AP_Compass: added COMPASS_ORIENT parameter, to support external compasses
...
this allows the user to configure the compass for any orientation
supported by our rotation library
2013-05-02 12:48:14 +10:00
Andrew Tridgell
ba83950fc4
libraries: replace constrain() with constrain_float()
...
this makes the type much more obvious. Thanks to Tobias for the
suggestion.
2013-05-02 10:25:40 +10:00
Andrew Tridgell
0fce0eb488
AP_Compass_PX4: fixed handling of a saturated compass
...
a saturated compass is now marked unhealthy, rather than causing the
code to spin waiting for a valid sample. This fixes a problem with
strong magnets causing the main flight loop to stop
2013-05-01 08:54:53 +10:00
Andrew Tridgell
26fa5c40f1
Compass: use const references for some functions
2013-04-22 13:26:49 +10:00
Randy Mackay
b8974dec99
Copter: compass learn off by default
2013-04-16 18:47:39 +09:00
Randy Mackay
b48864e1ad
Copter: allow CH6 tuning of compass declination
2013-04-15 21:50:44 +09:00
Christopher Hrabia
9760cdf2d7
Compass: corrected space
2013-03-18 14:27:49 +09:00
Randy Mackay
b8d492b504
Compass: current based compensation added
2013-03-03 23:02:12 +09:00
Randy Mackay
e113eb526b
Compass: add get_motor_compensation
...
Remove redundant set_motor_compensation call
2013-03-02 17:53:03 +09:00
Randy Mackay
bfb29ce22b
Compass: remove virtual functions to save RAM
2013-03-02 00:07:32 +09:00
Randy Mackay
886725291c
Compass: enable motor compensation for 1280
...
Expand motor compenstion vector's range limit
2013-03-02 00:03:29 +09:00
Randy Mackay
8093c98cd3
Compass: add motor compensation to HIL library
2013-03-02 00:03:24 +09:00
Randy Mackay
d8515ff85e
Compass: basic compensation for motor interference
2013-03-02 00:03:16 +09:00
Andrew Tridgell
80eaa52ed8
AP_Compass: use report timestamp on PX4 for accurate timing
2013-01-22 21:22:01 +11:00
James Bielman
4fa7bb1486
Add AVR compatibility header for missing math.h definitions.
...
- Define float versions of math functions to the double versions
on AVR (eg. #define sinf sin).
- These macros appear to be missing in older versions of avr-libs.
- Include AP_Math.h rather than math.h to get these definitions.
2013-01-16 13:52:17 +11:00
James Bielman
5631f865b2
Update floating point calculations to use floats instead of doubles.
...
- Allows use of hardware floating point on the Cortex-M4.
- Added "f" suffix to floating point literals.
- Call floating point versions of stdlib math functions.
2013-01-16 13:52:01 +11:00
Andrew Tridgell
60a4447a86
AP_Compass: added set_board_orientation() method
2013-01-13 17:32:48 +11:00
Andrew Tridgell
8f424cdf21
AP_Compass: ensure we check we got the semaphore
2013-01-09 20:42:20 +11:00
James Bielman
eca1417858
AP_HAL: Add semaphores to I2C driver.
...
- Guard I2C transactions with this semaphore in the MS5611 and
HMC5843 drivers.
2013-01-04 15:43:43 -08:00
Andrew Tridgell
26bc278181
AP_Compass: use queue length 10 in PX4 driver
...
and remove unnecessary poll() call
2013-01-04 20:12:03 +11:00
Andrew Tridgell
741174f5d5
AP_Compass: first cut at a PX4 compass driver
2013-01-04 16:21:24 +11:00
rmackay9
bf77a0f2e4
AP_Compass: added parameter descriptions
2013-01-02 16:08:44 +09:00
Andrew Tridgell
374af1cd14
build: change from Arduino.mk to apm.mk
2013-01-02 17:29:37 +11:00
Andrew Tridgell
a180437028
AP_Compass: disable auto-declination on 1280
...
this saves a few k of flash space
2012-12-20 14:53:23 +11:00
Andrew Tridgell
a1187519a8
AP_HAL: use AP_HAL_BOARD_DRIVER in remaining test sketches
2012-12-20 14:52:37 +11:00
Pat Hickey
eb530b86e8
move Arduino.mk to /mk/Arduino.mk
2012-12-20 14:52:35 +11:00
Andrew Tridgell
7d27e420ae
AP_HAL: remove unnecessary Arduino.h includes
2012-12-20 14:52:30 +11:00
Andrew Tridgell
c181498e36
Compass: updates for new AP_Param API
2012-12-20 14:51:38 +11:00
Pat Hickey
475da4eca4
CONFIG_HAL_BOARD - test sketches fixed up, build all passes
2012-12-20 14:51:37 +11:00
Andrew Tridgell
b70f7f57ba
AP_Compass: restore low speed change on register read failure
2012-12-20 14:51:37 +11:00
Pat Hickey
a4f1f6a5db
AP_Progmem: fix dependencies for all sketches touched by AP_HAL_AVR
2012-12-20 14:51:28 +11:00
Pat Hickey
53432a1101
AP_Compass: ported to AP_HAL
2012-12-20 14:51:26 +11:00
Pat Hickey
3f1d9d7f69
AP_Param: #include <AP_Param.h> fixups for libraries & sketches
...
* I mostly went through with grep and added an #include <AP_Param.h> below
every #include <AP_Common.h>. Not all of these example sketches might
strictly need AP_Param.
2012-12-20 14:51:19 +11:00
Andrew Tridgell
daa4712078
AP_Compass: force I2C speed low in a couple more situations
2012-11-12 11:26:20 +11:00
Andrew Tridgell
8c2dadc12f
AP_Compass: print I2C error count in test sketch
2012-11-12 10:28:26 +11:00
Andrew Tridgell
6922dcdea2
Compass: added compass.accumulate() API
...
this allows us to accumulate mag readings using spare CPU cycles
2012-09-08 10:05:54 +10:00
uncrustify
04e48ef878
uncrustify libraries/AP_Compass/Compass.h
2012-08-21 19:19:51 -07:00
uncrustify
6bc9c5707f
uncrustify libraries/AP_Compass/AP_Compass_HMC5843.h
2012-08-21 19:01:34 -07:00
uncrustify
f534730fab
uncrustify libraries/AP_Compass/AP_Compass_HIL.h
2012-08-21 19:01:21 -07:00
uncrustify
4f9c6bbb19
uncrustify libraries/AP_Compass/AP_Compass_HMC5843.cpp
2012-08-21 19:01:20 -07:00
uncrustify
7840eebaef
uncrustify libraries/AP_Compass/Compass.cpp
2012-08-21 19:01:20 -07:00
uncrustify
d1190e1ed4
uncrustify libraries/AP_Compass/AP_Compass_HIL.cpp
2012-08-21 19:01:20 -07:00
uncrustify
53ef9e8b9e
uncrustify libraries/AP_Compass/examples/AP_Compass_test/AP_Compass_test.pde
2012-08-21 19:01:20 -07:00
rmackay9
9b3ced93ee
AP_Compass: fix for mismatching set_initial_location parameters (forgot to change long to int32_t in .cpp file)
2012-08-18 20:41:38 +09:00
rmackay9
71f12fbc9b
AP_Compass: replace "long" with "int32_t"
2012-08-18 16:58:16 +09:00
Andrew Tridgell
518d6365ff
AP_Param: update remaining libraries for new constructor syntax
2012-08-08 12:11:57 +10:00
Andrew Tridgell
e4d28b12e5
Compass: remove the need to call calculate() on the compass object
...
the new AHRS code doesn't use calculate() and the compass.heading
attribute. Instead it works on the raw magnetometer vector. This
change removes the internal calculate state from the compass object
and instead adds calculate_heading() for use by older code that
doesn't go via AHRS.
This significantly reduces the calculation involved in compass updates
The null offsets enable/disable code is also removed, as it is not
needed now that compass offsets are not linked to the AHRS state.
2012-06-27 16:01:50 +10:00
rmackay9
ef43da9b92
AP_Compass - changed parameter initialisation order to remove compiler warning
2012-04-09 17:37:02 +09:00
Andrew Tridgell
504c53f746
Compass: added COMPASS_AUTODEC option
...
when this is 1 (which is the default), we will get the declination
automatically via the AP_Declination library
when it is 0 we will use the value configured by the user
2012-03-30 14:25:27 +11:00
Andrew Tridgell
16deefce31
Compass: fixed a comment
2012-03-29 12:39:53 +11:00
Andrew Tridgell
17290836ef
Compass: added some more comments
...
explain the algorithm a bit more
2012-03-29 12:39:53 +11:00
Andrew Tridgell
b2d6db9479
Compass: implement noise resistant varient of offset learning
...
This adds a large amount of noise robustness to the compass offset
learning algorithm, at a cost of 120 bytes of memory. The changes are
based on a long discussion with Bill Premerlani.
2012-03-28 20:55:27 +11:00
Andrew Tridgell
a72d4b46b3
Compass: implement Bills new offset nulling algorithm
...
this seems to work much better than the old algorithm, converging
faster and more accurately. Even better, it has no linkage to DCM, so
no possibility of nasty feedback effects
2012-03-27 15:37:24 +11:00
Andrew Tridgell
7daaadf776
Compass: fixed the order of rotations in the compass driver
...
this should fix the massive heading issues that people have been
reporting. Please test!
2012-03-12 17:33:15 +11:00
Adam M Rivera
fe8c896d69
AP_Declination: Added method set_initial_location
...
This will set the declination based on lat/lon if the user has
not yet saved one to the EEPROM, OR if they have specified via the
config parameter that they want it to overwrite the declination every
3D fix.
Signed-off-by: Andrew Tridgell <tridge@samba.org>
2012-03-11 20:59:47 +11:00
Andrew Tridgell
d10c4b76ad
Compass: removed an incorrect comment
2012-03-11 20:07:38 +11:00
Andrew Tridgell
0da64e98f8
Compass: don't save the orientation to EEPROM
...
there is no point in saving this, the value is only configurable at
compile time for now, and is always set
2012-03-11 15:37:07 +11:00
Andrew Tridgell
cb96dd975f
Compass: update the compass driver to use the new vector.rotate() method
2012-03-11 15:37:07 +11:00
Andrew Tridgell
6eff9107ea
Compass: change last_update to be in microseconds
2012-03-10 10:34:32 +11:00
Andrew Tridgell
6d356b6c6e
Compass: fixed last_update time for HIL compass
2012-03-10 10:34:30 +11:00
rmackay9
fa34ac076e
AP_Compass - fixed compile warning
2012-02-29 22:57:35 +09:00
rmackay9
c819a0f68a
AP_Compass - fixed small compiler warning to do with order of parameters in constructor
2012-02-29 22:45:49 +09:00
Andrew Tridgell
d0a6359b37
Compass: use constructor to set initial values for _learn and _use_for_yaw
...
this ensures they are set if you have MAG_ENABLE==0
2012-02-25 17:36:31 +11:00
Andrew Tridgell
f59297d7a7
Compass: catch the case of a user enabling a compass mid-flight
...
if a compass has not been initialised at startup we can't enable it
mid-flight, as we don't have the orientation
2012-02-25 14:51:09 +11:00
Andrew Tridgell
664622523d
Compass: added COMPASS_LEARN and COMPASS_USE parameters
...
these allow you to control if the compass should be used for yaw and
if it should learn its offsets. This is useful for locking in compass
offsets once they are confirmed to be good, and for learning offsets
without using them in flights.
The default is to behave the same as previously, which is
COMPASS_LEARN=1 and COMPASS_USE=1
2012-02-25 14:51:08 +11:00
Andrew Tridgell
c354879f1f
Compass: ensure we don't produce NAN values for compass heading
...
this leaves the previous heading values alone if we are at a pitch of
exactly 90 or -90, at which point we can't compute a meaningful
heading
2012-02-24 11:52:55 +11:00
Andrew Tridgell
62326c0f72
Compass: enable compass offsets for HIL compass
...
this makes the null_offsets algorithm have an effect for the HIL
compass that is used for SITL, which makes for easier testing of
compass calibration
2012-02-15 22:33:50 +11:00
Andrew Tridgell
6a42598ade
use stdint types in the compass code
2012-02-14 08:35:03 +11:00
Andrew Tridgell
9c5a5473ab
added indexes to group info structures
2012-02-13 16:22:52 +11:00
Andrew Tridgell
bf4a77da81
convert libraries to new typesafe macros
2012-02-13 16:22:51 +11:00
Andrew Tridgell
8c58d95187
modify the compass code for AP_Param
2012-02-13 16:22:51 +11:00
Randy Mackay
ed19c25a97
Arduino 1.0 - changed all #includes of "WProgram.h", "wiring.h" and "WConstants.h to "Arduino.h".
...
Modified FastSerial's write function to return size_t (number of bytes written).
2012-01-28 12:25:47 +09:00
Doug Weibel
e22a83eec0
Add a CLI setup action to reset the magnetometer offsets
...
Since the magnetometer offsets are not available through the MAVLink parameter interface (since they are an AP_Var vector) this little feature allows them to be reset from the CLI. Useful if you somehow get bad offsets or if you change magnetometer. If you have a bad set of large offset values I have seen issues with the nulling algorithm have trouble converging to the proper values. I have never seen it have trouble converging from 0/0/0, so this could be a useful feature from time to time.
2012-01-15 16:15:08 -07:00
Doug Weibel
9846822748
Bug fix for compass.
...
This is a fix for an interesting bug when a DCM matrix reset was added to the ground start. This bug only showed up if (A) a ground start were performed after an air start or due to use of the "Calibrate Gryo" action, (B) if the current orientation were sufficiently different from 0/0/0, and (C.) if the particular magnetometer had sufficiently large offsets. Why did resetting the DCM matrix to 0/0/0 pitch/roll/yaw at ground start cause a bug? The magnetometer offset nulling determines the proper offsets for the magnetometer by comparing the observed change in the magnetic field vector with the expected change due to rotation as calculated from the rotation in the DCM matrix. This comparison is made at 10Hz, and then filtered with a weight based on the amount of rotation to estimate the offsets. Normally it would take considerable time at normal in-flight rotation rates for the offset estimate to converge.
If a DCM matrix reset occurs when the offset nulling algorithm is up and running, the algorithm sees the DCM reset as a instantaneous rotation, however the magnetic field vector did not change at all. Under certain conditions the algorithm would interpret this as indicating that the offset(s) should be very large. Since the "rotation" could also have been large the filter weighting would be large and it was possible for a large erroneous estimate of the offset(s) to be made based on this single (bad) data point.
To fix this bug methods were added to the compass object to start and stop the offset nulling algorithm. Further, when the algorithm is started, it is set up to get fresh samples. The DCM matrix reset method now calls these new methods to stop the offset nulling before resetting the matrix, and resume after the matrix has been reset.
2012-01-12 14:44:24 -07:00
Andrew Tridgell
60185509f4
AP_Compass: when I2c fails, don't retry for 1s
2012-01-04 16:35:47 +11:00
Andrew Tridgell
820153d7ae
compass: show timing in compass test
2011-12-28 21:44:18 +11:00
Andrew Tridgell
acf4e9b61d
I2C: convert compass code to new I2C library
...
this also adds a healthy attribute, and error checking on all I2C
calls
2011-12-28 20:41:53 +11:00
Andrew Tridgell
6093db948b
compass: added AP_COMPASS_APM2_SHIELD
...
this makes the orientation clearer
2011-11-25 20:00:18 -08:00
James Goppert
0c7c508541
Optional recursion added.
2011-09-30 17:17:51 -04:00
James Goppert
5489b84f8e
Improvements to cmake.
2011-09-29 21:23:26 -04:00