Commit Graph

1500 Commits

Author SHA1 Message Date
Andrew Tridgell 1170893aaa MAVLink: rename DCM message to AHRS 2012-03-19 17:29:01 +11:00
rmackay9 f3eb15167c AP_Baro - removed unnecessary 2 element average filtering of pressure (there is a 4 or 5 element average filter in arducopter code itself, two places is messy)
- also removed unused _offset_press variable
2012-03-18 15:18:05 +09:00
rmackay9 ed0d1da4f5 AP_Baro - added average filter for temperature to replace broken filter
- added average filter (for last two values) for raw pressure
        - changed some "long" to int32_t and "unsigned long" to uint32_t
2012-03-18 01:06:02 +09:00
Michael Oborne 42960efe80 sitl cygwin mods 2012-03-15 08:16:50 +08:00
Andrew Tridgell adcc20e4d3 Quaternion: credit Justin with the initial idea of using Madgwick
thanks Justin!
2012-03-13 13:27:45 +11:00
Andrew Tridgell 9a6adb9990 DCM: adjust yaw kp constant down to 0.4
this makes the time constant for compass errors closely match the
timing of the older releases - about 10 seconds for a 1 radian change
in heading
2012-03-12 17:49:26 +11:00
Andrew Tridgell aa408655f8 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
Andrew Tridgell 0e6037322a AP_Declination: fixed build of test sketch 2012-03-12 17:33:15 +11:00
Amilcar Lucas a203282779 correct small typos in comments 2012-03-11 21:30:09 +01:00
Andrew Tridgell 42a29169f0 SITL: added pgm_read_byte_far() 2012-03-11 20:59:47 +11:00
Andrew Tridgell b4d69ef473 AP_Declination: fixed usage of headers 2012-03-11 20:59:47 +11:00
Adam M Rivera ad3a20b6a3 AP_Declination: Updated comment.
Signed-off-by: Andrew Tridgell <tridge@samba.org>
2012-03-11 20:59:47 +11:00
Adam M Rivera c390db5d92 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
Adam M Rivera 94d1c48544 AP_Declination: Increased range of supported latitude coordinates.
Fixed incorrect type usage to save stack space.

Signed-off-by: Andrew Tridgell <tridge@samba.org>
2012-03-11 20:59:47 +11:00
Adam M Rivera 1709403b87 Added AP_Declination test sketch. I will be improving the test sketch soon.
Signed-off-by: Andrew Tridgell <tridge@samba.org>
2012-03-11 20:59:47 +11:00
Adam M Rivera 3f28184cb0 Added AP_Declination library. It contains the lookup table (lat/lng -> declination) as well as a method that performs the lookup.
Signed-off-by: Andrew Tridgell <tridge@samba.org>
2012-03-11 20:59:47 +11:00
Andrew Tridgell d4aa0a4879 Compass: removed an incorrect comment 2012-03-11 20:07:38 +11:00
Andrew Tridgell a20f57c59e 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 cc1961b1e8 Math: any euler angle with pitch > 90 is invalid
both DCM and quaternion always return pitch in the range -90 to 90
2012-03-11 15:37:07 +11:00
Andrew Tridgell 36e92bf4ba Quaternion: update for new Quaternion interface 2012-03-11 15:37:07 +11:00
Andrew Tridgell eea63ecd6e DCM: update for new Matrix3f interface 2012-03-11 15:37:07 +11:00
Andrew Tridgell 01535a7a21 AP_Math: update the test suite 2012-03-11 15:37:07 +11:00
Andrew Tridgell 6d08e38d5d AP_Math: made rotation matrices more C++
thanks to Adam for the suggestion
2012-03-11 15:37:07 +11:00
Andrew Tridgell 92ada85f49 AP_Math: allow null pointers in Quaternion::to_euler()
this matches the Matrix3f method
2012-03-11 15:37:07 +11:00
Andrew Tridgell 18fcb14335 Quaternion: use the new quaternion API 2012-03-11 15:37:07 +11:00
Andrew Tridgell a9b8c4dd82 AP_Math: re-work quaternion functions to be more C++ like
thanks to Adam for the suggestion!
2012-03-11 15:37:07 +11:00
Andrew Tridgell ea0fb311af I2C: fixed cr/lf mess 2012-03-11 15:37:07 +11:00
Andrew Tridgell 5203df2cf8 OpticalFlow: adapt optical flow library to new rotation system 2012-03-11 15:37:07 +11:00
Andrew Tridgell 7aa6ba2c86 OpticalFlow: fixed line endings
this library was a mixture of dos and unix line endings, which makes
for very messy editing
2012-03-11 15:37:07 +11:00
Andrew Tridgell 3c145ab61c Compass: update the compass driver to use the new vector.rotate() method 2012-03-11 15:37:07 +11:00
Andrew Tridgell 24a9fe8827 Math: added a test suite for the new rotation methods 2012-03-11 15:37:07 +11:00
Andrew Tridgell 85c3c1d2ea Math: added vector3.rotate() and matrix3.rotation() methods
these operate on a "enum Rotation" which defines a set of standard
rotations. These are much faster than our previous method, plus use
less memory
2012-03-11 15:37:07 +11:00
Andrew Tridgell a30b03cd0a SITL: lower the noise and drift levels for general autotest usage 2012-03-10 10:34:34 +11:00
Andrew Tridgell 07e8360970 InertialSensor: fixed HIL build 2012-03-10 10:34:34 +11:00
Andrew Tridgell 6d06d9d070 MAVLink: bring the v1.0 MAVLink in sync with 0.9 2012-03-10 10:34:34 +11:00
Andrew Tridgell fed5426274 DCM: after some experimentation, raise the ki values a bit
this tracks the max gyro drift more accurately
2012-03-10 10:34:34 +11:00
Andrew Tridgell 89b4a9f4ed Quaternion: use gyro drift value from sensor driver 2012-03-10 10:34:34 +11:00
Andrew Tridgell fd74414884 Quaternion: go back to the full update_MARG()
the separate drift controller is too erratic on yaw hold to be usable
at the moment
2012-03-10 10:34:34 +11:00
Andrew Tridgell 1002bbcbfe SITL: cleanup the gyro drift calculations
use units that are more easily understood
2012-03-10 10:34:34 +11:00
Andrew Tridgell ad21913605 Quaternion: make the quaternion test more generic
works with DCM too
2012-03-10 10:34:33 +11:00
Andrew Tridgell a889135e78 Quaternion: update to get_gyro_drift() interface 2012-03-10 10:34:33 +11:00
Andrew Tridgell e0cc9c93a1 Quaternion: removed some unused variables 2012-03-10 10:34:33 +11:00
Andrew Tridgell b67b0afd10 DCM: separate out the omega_yaw_P from omega_P
this cleans up the separation of drift rates and proportional
correction from yaw source and accelerometers, allow the yaw
to run at a different rate to the accel correction
2012-03-10 10:34:33 +11:00
Andrew Tridgell f4b1dae7cf IMU: added get_gyro_drift_rate() interface
this just calls down to the InertialSensor layer
2012-03-10 10:34:33 +11:00
Andrew Tridgell f46fba54dc AP_InertialSensor: added a get_gyro_drift_rate() interface
this returns the expected max drift rate for the particular type of
gyro being used
2012-03-10 10:34:33 +11:00
Andrew Tridgell 9e07fa3af6 DCM: removed the limit on linear acceleration
we get linear accelerations of more than 1g when turning corners
2012-03-10 10:34:33 +11:00
Andrew Tridgell ab1aec0f77 Quaternion: minor tuning 2012-03-10 10:34:33 +11:00
Andrew Tridgell e470bf2354 DCM: minor tuning based on testing my quad 2012-03-10 10:34:33 +11:00
Andrew Tridgell 97faa47ba6 SITL: make the yaw match the APM conventions 2012-03-10 10:34:33 +11:00
Andrew Tridgell d1713bd2fb SITL: fixed the pwm output on startup 2012-03-10 10:34:33 +11:00
Andrew Tridgell 8b37790bd1 Quaternion: code cleanups and added comments 2012-03-10 10:34:32 +11:00
Andrew Tridgell f5e5ccff6a DCM: code cleanup and added more comments 2012-03-10 10:34:32 +11:00
Andrew Tridgell e2b2c9181e Quaternion: bumb up gyro drift limit to match DCM 2012-03-10 10:34:32 +11:00
Andrew Tridgell 2b6fae6e16 ADC: removed the ADC level accel smoothing
the quaternion code does a better job of handling this noise than this
filter does
2012-03-10 10:34:32 +11:00
Andrew Tridgell 8ad6b5f4d1 Quaternion: separate out drift correction from main updates 2012-03-10 10:34:32 +11:00
Andrew Tridgell ff4f7ccc65 InertionSensor: update for new Ch6() interface 2012-03-10 10:34:32 +11:00
Andrew Tridgell d1976449fd IMU: fixed a warning 2012-03-10 10:34:32 +11:00
Andrew Tridgell e9f35bfa7f GPS: expose last_fix_time 2012-03-10 10:34:32 +11:00
Andrew Tridgell 17daa2f31c Compass: change last_update to be in microseconds 2012-03-10 10:34:32 +11:00
Andrew Tridgell 404a4e4896 ADC: use floats for ADC averaging
this costs almost nothing and improved accel/gyro calibration
2012-03-10 10:34:32 +11:00
Andrew Tridgell 4c6afa36cb DCM: removed update_DCM_fast
this combines the functionality of the 'fast' DCM with the normal one,
and also speeds up both the yaw drift correction and the matrix update
code
2012-03-10 10:34:31 +11:00
Andrew Tridgell 2c279639a3 AP_IMU: fixed led flashing in gyro cal
thanks Pat!
2012-03-10 10:34:31 +11:00
Andrew Tridgell b39323bf1b AP_Math: expanded the math test suite 2012-03-10 10:34:31 +11:00
Andrew Tridgell a8fd31a5e1 AP_Math: added quaternion->matrix and earth frame routines
this will be used for 3d acceleration
2012-03-10 10:34:31 +11:00
Andrew Tridgell d3dc5bd751 AP_Math: better way of handling safe_sqrt()
better to test the result, than predict it
2012-03-10 10:34:31 +11:00
Andrew Tridgell b273df0725 SITL: avoid parent pid code on cygwin
this causes problems on windows
2012-03-10 10:34:31 +11:00
Andrew Tridgell e1ff9a641b SITL: prevent nested timer interrupts 2012-03-10 10:34:31 +11:00
Andrew Tridgell d11aab610d Quat: test patch for michael 2012-03-10 10:34:31 +11:00
Andrew Tridgell a954f68f27 Quaternion: added NaN paranoid checking
this is for Michael to run
2012-03-10 10:34:30 +11:00
Andrew Tridgell d24b055b66 Math: added comment on quaternion constructor 2012-03-10 10:34:30 +11:00
Andrew Tridgell 1f5095e722 Math: added is_inf() on vector3f 2012-03-10 10:34:30 +11:00
Andrew Tridgell 89a10c584d Quaternion: added more numerical safety in the quaternion code
prevent infinities from creeping in and prevent large drift changes
2012-03-10 10:34:30 +11:00
Andrew Tridgell f2e6714598 AP_Math: added quaternion helper functions and a test suite 2012-03-10 10:34:30 +11:00
Andrew Tridgell f71311fdc0 Quaternion: fix the gyro bias in centripetal and remove smoothing
the centripetal code needs to take account of the current gyro
bias.

It turned out that the accel and gyro smoothing was causing
significant control lag, and we're better off just letting the
quaternion code handle it via its own smoothing parameters
2012-03-10 10:34:30 +11:00
Andrew Tridgell 76736792f8 SITL: disable interrupts during register updates
this may prevent bogus mode channel reads
2012-03-10 10:34:30 +11:00
Andrew Tridgell e445a455d0 Quaternion: use GPS to correct for linear acceleration
this gives much better pitch estimates. We should do this with the
airspeed sensor if available.
2012-03-10 10:34:30 +11:00
Andrew Tridgell 1ea1b500a6 Quaternion: don't update if we have a very long deltat
this can be caused by stopping the system in a debugger
2012-03-10 10:34:30 +11:00
Andrew Tridgell 8b73166605 Compass: fixed last_update time for HIL compass 2012-03-10 10:34:30 +11:00
Andrew Tridgell 2969e16f7d RC: disable interrupts when reading the RC registers
this prevents getting bogus values which could cause a flight mode
change
2012-03-10 10:34:30 +11:00
Andrew Tridgell efe2686b33 GPS: added an acceleration estimate to the GPS driver
This uses the GPS ground speed to estimate acceleration
2012-03-10 10:34:30 +11:00
Andrew Tridgell 02ae5358d5 GPS: fixed some stdint types 2012-03-10 10:34:29 +11:00
Andrew Tridgell 2f5a4cdc4a Quaternion: added in reporting of gyro drift and rp/yaw errors 2012-03-10 10:34:29 +11:00
Andrew Tridgell 934a05bbc6 fixed comment 2012-03-10 10:34:29 +11:00
Andrew Tridgell a60cf111c5 DCM: fixed an uninitialised variable warning 2012-03-10 10:34:29 +11:00
Andrew Tridgell 7d9c4094a2 Quaternion: tweak the quaternion gains a bit 2012-03-10 10:34:29 +11:00
Andrew Tridgell e33bb217bc AP_IMU: improved the gyro calibration code
this should give a much more accurate result
2012-03-10 10:34:29 +11:00
Andrew Tridgell de1cfc8e34 Quaternion: drop the gyro drift rates down
this should allow us to cope with noise more readily
2012-03-10 10:34:29 +11:00
Andrew Tridgell 2d6680f144 DCM: fixed bug in accel averaging
sorry Randy!
2012-03-10 10:34:29 +11:00
Andrew Tridgell 73594199c8 AP_Quaternion: fixed build on Arduino 1.0 2012-03-10 10:34:29 +11:00
Andrew Tridgell a85ba80246 AP_Quaternion: added DCM compatibility interfaces
useful for getting the code going quickly
2012-03-10 10:34:29 +11:00
Andrew Tridgell 626f8598ed AP_IMU: added new_data_available() interface 2012-03-10 10:34:29 +11:00
Andrew Tridgell a052aa8435 AP_InertialSensor: added new_data_available() interface 2012-03-10 10:34:28 +11:00
Andrew Tridgell 61d649e7ac AP_ADC: added new_data_available() interface
returns true if more samples are available
2012-03-10 10:34:28 +11:00
Andrew Tridgell 4a277f9871 fixed deltat in quaternion 2012-03-10 10:34:28 +11:00
Andrew Tridgell 353f9e613f SITL: make SITL not depend on DCM 2012-03-10 10:34:28 +11:00
Andrew Tridgell fb23c617fa Quaternion: added an AP_Quaternion library
this is for experimenting with the Madgwick quaternion system, to see
if it is more or less noise sensitive than DCM
2012-03-10 10:34:28 +11:00
Andrew Tridgell a05eeab55e SITL: reduce the simulated compass offsets
this was causing us problems in getting DCM right
2012-03-10 10:34:28 +11:00
Andrew Tridgell d03b11092b SITL: separate out drift speed and drift level 2012-03-10 10:34:28 +11:00
Andrew Tridgell 71d3847bfc SITL: added a drift_level multiplier
this makes it easier to experiment with different gyro drift levels
2012-03-10 10:34:28 +11:00
Andrew Tridgell 61ebcfe9fe DCM: fixed the averaging of accel values for update_DCM_fast()
this should improve drift correction for ArduCopter
2012-03-10 10:34:28 +11:00
Andrew Tridgell de32c3bc31 AP_Math: added a .zero() method to Vector3f 2012-03-10 10:34:28 +11:00
Andrew Tridgell a0e2e69431 SITL: fixed delay() to account for signal interrupions
when a timer went off we stopped the delay() code
2012-03-10 10:34:28 +11:00
Andrew Tridgell 37ab76c9e6 DCM_Test: fixed example code to work with SITL
this also fixes the compass setup
2012-03-10 10:34:27 +11:00
Andrew Tridgell d2a969ee95 SITL: push noise level to 2.0 for DCM testing 2012-03-10 10:34:27 +11:00
Andrew Tridgell 79b8ddc236 DCM: added a small amount of accel smoothing to update_DCM_fast() 2012-03-10 10:34:27 +11:00
Andrew Tridgell 55413bfcc1 DCM: don't use the z accel sensor for drift correction
the z accel is the noisest, and seems to do more harm than good. Using
just x and y is sufficient for drift correction by assuming the vector
length
2012-03-10 10:34:27 +11:00
Andrew Tridgell a78b00513b DCM: added a small amount of gyro and accel smoothing
possibly not needed, but convenient to be able to test with different
values
2012-03-10 10:34:27 +11:00
Andrew Tridgell 82032b17a9 DCM: added reporting interfaces for DCM state 2012-03-10 10:34:27 +11:00
Andrew Tridgell ae6a94a933 SITL: added sitl_simstate_send()
used to report simulator state in logs
2012-03-10 10:34:27 +11:00
Andrew Tridgell d106e3a970 MAVLink: import new message types DCM, HWSTATUS and SIMSTATE 2012-03-10 10:34:27 +11:00
Andrew Tridgell 4e354a9731 DCM: got rid of _error_roll_pitch from object state
this can be a local error variable in common with the yaw code. This
saves 12 bytes in the object.
2012-03-10 10:34:27 +11:00
Jason Short 13e9608fb8 Consolidated Barometer pressure sensing to a single filter based on Randy's new filter class. 2012-03-08 23:13:04 -08:00
Jason Short 34cf1e8fb3 Updated on Barometer - increased the Temp filtering and decreased the pressure filtering to and get less temp noise, faster response from pressure. I'm filtering the Climb rate differently now, so this higher pressure noise should not hurt the derivative calcs at all now. 2012-03-06 20:55:35 -08:00
rmackay9 6c1299fe7e AP_RC - removed unused library 2012-03-04 18:21:52 +09:00
Andrew Tridgell dd9065123c SITL: use the new noise model
use the new noise model at a low level for master until we sort out
DCM noise handling
2012-03-02 18:31:07 +11:00
Andrew Tridgell 63ea5dfb49 APM_RC: allow the fast RC speed to be passed as a parameter
this will allow users to test different speeds
2012-03-02 17:57:08 +11:00
Andrew Tridgell f1a389fe19 AP_Param: ensure we can't have duplicate keys in Parameters.h
this is O(n^2), but only at startup, and takes less than 1ms to run.
It catches a very nasty coding error
2012-03-02 15:48:28 +11:00
Andrew Tridgell 1476f044e6 I2C: added lockup_count() interface
used for reporting I2C problems
2012-03-02 15:48:27 +11:00
Andrew Tridgell c9031f1d36 SITL: implement cli()/sei() properly for desktop build
this disables simulated hardware interrupts during critical sections
2012-03-02 15:48:27 +11:00
Jason Short 59e1d43f60 Updated fastPWM to 490Hz 2012-02-29 22:17:38 -08:00
Pat Hickey 8fa559930f AP_Param: nested group recursion into next_group disableable by macro
* c.f. 0251932c81fe7eb, e5515bb6ef82
2012-02-29 19:48:43 -08:00
Pat Hickey 8b3d013294 AP_Param: One more nexted group recursion disableable by macro
* c.f. e5515bb6ef82
2012-02-29 18:48:54 -08:00
rmackay9 9832ac879e AP_Compass - fixed compile warning 2012-02-29 22:57:35 +09:00
rmackay9 0311b70004 AP_Baro - fixed small compiler warning to do with order of parameters in constructor 2012-02-29 22:46:29 +09:00
rmackay9 64f9f1d92e AP_Compass - fixed small compiler warning to do with order of parameters in constructor 2012-02-29 22:45:49 +09:00
rmackay9 7c1d1b45a7 AP_DCM - fixed small compiler warning to do with order of parameters in constructor 2012-02-29 22:45:26 +09:00
rmackay9 3cbd172ea9 RC_Channel - fixed small compiler warning 2012-02-29 22:44:29 +09:00
rmackay9 ced49f7d01 AP_ADC - removed small compiler warning 2012-02-29 22:43:46 +09:00
Pat Hickey 42078f2794 AP_Param: Make nested group recursion disableable by macro
* Eliminates recursive calls inside AP_Param.
  This is important to Pat @ Galois, but not the project in general.
  Recursion depth on these functions is bounded structurally using
  existing nested group constructors (can't create loops in finite space)
  and checked at init time
2012-02-28 16:28:27 -08:00
rmackay9 400a4b0bdb AP_RangeFinder - changed example sketch to work with new Filter library 2012-02-28 21:02:10 +09:00
rmackay9 5b89c65d9c Filter - updated example sketch to use modified library 2012-02-28 21:01:35 +09:00
rmackay9 d17a015df1 Filter - added AverageFilter, removed SumFilter
added FilterWithBuffer to allow removal of malloc/free without losing ability to pass around filter objects
2012-02-28 21:01:11 +09:00
Andrew Tridgell 078268528e AP_Param: show numerical value in eeprom dump utility 2012-02-28 09:43:49 +11:00
Andrew Tridgell 701da6c30f AP_Param: fixed v.load() on a sub-element of a AP_Vector3f
this isn't actually used at the moment in APM, but we should get it
right in case someone does try to load a single element of a vector
2012-02-28 09:43:49 +11:00
Andrew Tridgell 34f1ebcfb4 SITL: simulate noise on each ADC channel separately
scale the noise based on the period of the motors
2012-02-28 09:43:49 +11:00
Andrew Tridgell 4cdc0a8c11 SITL: raise the ADC noise level to 8 bits when flying
this is about the level of noise of a aircraft that has a lot of
vibration
2012-02-28 09:43:49 +11:00
Andrew Tridgell b32701e008 IMU: removed unused accel_filtered code 2012-02-28 09:43:49 +11:00
Andrew Tridgell ac44b73951 AP_Param: fixed setting of CAM_P_G in ArduCopter
the variable CAM_P_G has the same prefix as the CAM_P group. We want
to allow for parameters having a common prefix with a group, so we
need to keep searching after we've found a group that matches the
prefix
2012-02-27 10:54:33 +11:00
Andrew Tridgell 7fe4a41c31 AP_Param: make the templating code a bit clearer
add comments on the arguments, and name them in a clearer way
2012-02-27 10:54:33 +11:00
Andrew Tridgell 5bf138fb38 DCM: fixed the sense of the compass GPS test in initial yaw
we were only disabling null offsets when we didn't have a compass,
which doesn't make much sense!
2012-02-26 22:24:45 +11:00
rmackay9 747e045193 ModeFilter - corrected shadowed variable compiler warning for drop_high_sample 2012-02-26 17:57:28 +09:00
rmackay9 e01477a7a8 Filter - added AverageFilter - this will be used in place of SumFilter because it removes the possibility of overflows 2012-02-26 17:34:36 +09:00
rmackay9 b345529241 Filter - removed shadowing of variables in constructors for Filter, ModeFilter and SumFilter (sorry tridge!)
increased maximum sample buffer size from 6 to 10
2012-02-26 17:17:46 +09:00
rmackay9 3f0d27ec87 ModeFilter - remove older ModeFilter library (new library is now in Filter directory) 2012-02-26 15:36:23 +09:00
rmackay9 00a1b5cd53 AP_RangeFinder - cut over to use new ModeFilter from Filter library 2012-02-26 15:34:50 +09:00
rmackay9 ae8fd43335 Filter - first version of filter library include ModeFilter 2012-02-26 15:34:05 +09:00
rmackay9 f6f05755d9 AP_Mount - #include FastSerial first to allow it to compile under Arduino 1.0 2012-02-26 15:31:56 +09:00
Andrew Tridgell bd2776aedd 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 56bb74ef36 DCM: disable compass null offsets when setting initial yaw
we need to ensure the compass null offsets code doesn't see a sudden
yaw change, or it will change the offsets by a large amount very
suddenly
2012-02-25 16:02:24 +11:00
Andrew Tridgell f50f4357ca 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