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
900388a85a
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
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
eb71b26d3f
DCM: use the new use_for_yaw() compass method
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
f10097a6d5
AP_Param: added some comments on AP_Vector3f handling
2012-02-25 11:37:20 +11:00
Andrew Tridgell
5e2fbdb6cf
DCM: don't reset _have_initial_yaw for GPS heading unless very slow
...
wait till we reach 1m/s before we reset _have_initial_yaw. This
prevents us continually resetting the DCM matrix if our ground speed
is close to 3m/s.
2012-02-25 11:37:20 +11:00
Andrew Tridgell
2e9105c68a
AP_Param: added special handling for Vector3f
...
We would like to be able to use Vector3f as a parameter while exposing
the individual elements of the vector as MAVLink parameters. This
change to AP_Param makes that possible, by giving AP_Vector3f a dual
personality
2012-02-25 11:37:20 +11:00
Andrew Tridgell
d6bfceef7c
SITL: added -C option to desktop mode
...
this allows running APM to stdout, which is useful for test sketches
2012-02-25 11:37:20 +11:00
Andrew Tridgell
54aa8297af
libs: removed unused library GPS_IMU
2012-02-25 11:37:20 +11:00
Andrew Tridgell
185ab5aea9
libs: removed unusued library GCS_SIMPLE
2012-02-25 11:37:20 +11:00
Andrew Tridgell
55e33c3359
DCM: tidy up use of error_course and in_motion
...
in_motion is not a good name now it is also used for the compass
The error_course and heading component values don't need to be part of
the DCM object, they can be on the stack to reduce the memory usage a bit
2012-02-25 11:37:20 +11:00
Andrew Tridgell
ab8cc3d478
DCM: use rotation_matrix_from_euler() to calculate initial yaw
...
When we first get a compass reading or we first start motion we need
to setup the DCM matrix with the right yaw. This uses
rotation_matrix_from_euler() to get a DCM matrix corresponding to our
current roll/pitch, but with the correct yaw
2012-02-25 11:37:20 +11:00
Andrew Tridgell
ddeda1c367
DCM: use rotation_matrix_from_euler() in matrix reset
...
this makes the code a bit easier to read
2012-02-24 11:54:11 +11:00
Andrew Tridgell
06f37aad75
DCM: use calculate_euler_angles() to get eulers from DCM
...
this makes the code a bit easier to understand
2012-02-24 11:52:55 +11:00
Andrew Tridgell
16ed8bc8f6
AP_Math: added rotmat <-> euler functions
...
these will make the dcm matrix manipulation easier to understand
2012-02-24 11:52:55 +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
17d16bc8c6
AP_Math: added safe_sqrt() function
...
this function will never return NAN. It will return zero for negative
numbers.
2012-02-24 11:52:55 +11:00
Andrew Tridgell
bad653f230
DCM: tidy up the nan checking in DCM
...
use is_nan() on the matrix rather than just on c.x, and add
safe_asin() to the (unused) OUTPUTMODE==2 code.
2012-02-24 11:52:55 +11:00
Andrew Tridgell
c8e6d03c67
DCM: added matrix recovery on reset
...
when we get a bad DCM error we can recover a matrix corresponding to
the current attitude, making it more likely that the aircraft will be
able to recover
2012-02-24 11:52:55 +11:00
Andrew Tridgell
502fbf6e17
AP_Math: added a safe_asin() function
...
this adds range checking to asin()
2012-02-24 11:52:55 +11:00
Andrew Tridgell
17170da96e
AP_Math: added is_nan() methods to vector3f and matrix3f
2012-02-24 11:52:55 +11:00
Jason Short
b094f6ce52
added set integrator
2012-02-23 09:38:08 -08:00
Andrew Tridgell
ef90f336d3
DCM: changed the sense of floating point range comparison
...
This allows us to detect NaN, otherwise NaN values were considered
'in range'
2012-02-23 11:41:26 +11:00
Andrew Tridgell
57ffd00b69
DCM: range check the matrix before calculating pitch
...
The asin() in the pitch calculation can only take values between -1
and 1. This change ensures that the value is in range, and if it isn't
then we force a normalization. If that fails we reset the matrix
2012-02-23 08:16:08 +11:00
Andrew Tridgell
2bb58db3f7
DCM: reset more values on renorm blowup
...
when DCM blows up, we need to reset a lot more variables to ensure
that any NaN values don't persist
2012-02-23 08:16:08 +11:00
Andrew Tridgell
156d98cb9f
DCM: remove the taylor expansion optimisation for renormalisation
...
The sqrt() costs about 44usec on a 2560, which is small enough for us
not to worry about the speed.
This also changes the range of values where we declare a blowup to
much less likely, which means we can cope with larger delta_t glitches
2012-02-23 08:16:08 +11:00
Andrew Tridgell
53b87229ff
AP_Param: added ParamToken type for variable list traversal
2012-02-19 17:05:28 +11:00
Jason Short
1e37a0ec17
added a limit to range output
2012-02-18 21:08:17 -08:00
Randy Mackay
33aa6fe13b
Optflow - added reference to FastSerial to resolve compile error on Arduino 1.0.
...
also removed reference to DCM (no longer required) and removed some old code.
2012-02-18 18:09:40 +09:00
Andrew Tridgell
9793d04ed1
SITL: increase the amount of noise in the simulated ADC
...
this increases the noise to 2 bits, which actually can have the effect
of improving accuracy, as it leads to better averaging
2012-02-18 19:27:15 +11:00
Andrew Tridgell
d52cb7e574
DCM: only add in centripetal accel if we have GPS lock
...
if we don't have a GPS or the GPS doesn't have a good lock then we
can't rely on the ground speed for adjusting the acceleration vector
2012-02-18 19:27:15 +11:00
Andrew Tridgell
baac883eb1
IMU: move _sensor_cal to general IMU class
...
this makes it available both in shim and INS subclasses
2012-02-18 10:51:57 +11:00
Andrew Tridgell
882cd4ea83
AP_Param: moved AP_Vector3f and AP_Matrix3f declarations to AP_Math.h
...
this avoids us needing AP_Math.h in every utility sketch and example
2012-02-18 10:51:57 +11:00
Andrew Tridgell
4b15b63d21
AP_Param: fixed copy-assignment operators for AP_Param vectors
2012-02-18 10:51:57 +11:00
Andrew Tridgell
7f3858cb7f
AP_Param: added a set_and_save_ifchanged() method
...
this can be used to avoid the scan() in more frequenctly saved
variables, such as the MAVLink stream rates in APM
2012-02-18 10:51:57 +11:00
Andrew Tridgell
80a6773b8b
AP_Param: added an initialised() method
...
this will be used by the compass code
2012-02-18 10:51:57 +11:00
justinbeech
62b104cbfa
Found free extra 256 bytes of RAM eliminate _clz use from libgcc
...
Believe it or not, changing / 2^31 to >>31 saved 256 bytes in the "d" segment.
The reason is that GCC version prior to 4.3.5 does not have a count_leading_zeros (clz) assembler macro, so it uses a 256 byte lookup table called _clz
The _clz table gets pulled in if you do 64 bit division.
This tiny change is the only place that we do long long division.
Changing to a shift saves 256 bytes of ram.
2012-02-17 09:46:05 +00:00
Jason Short
24ce02c6a4
made I term return in same pattern as D term
2012-02-16 22:09:22 -08:00
Andrew Tridgell
79d622939a
ADC: on channel overflow we should not zero last_ch6_micros
...
this happens every 64 seconds because of unused channels on the
ADC. Zeroing this creates a bad delta_t value for the DCM code.
2012-02-16 17:48:36 +11:00
Jason Short
026e4a6567
change constant to float 44330.0
2012-02-15 09:10:14 -08:00
Michael Oborne
2f81776b0d
eedump ap param in perl
2012-02-15 21:31:58 +08:00
Andrew Tridgell
a48a118128
SITL: adjust the SITL compass code to have saner z values
2012-02-15 22:34:16 +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
048aed5427
fixed dump size
2012-02-15 10:44:09 +11:00
Andrew Tridgell
089db43183
show group_element too
2012-02-15 10:42:21 +11:00
Andrew Tridgell
ea6a46fc9b
AP_Param: added eeprom_aaparam.c dump utility
2012-02-15 10:41:06 +11:00
Andrew Tridgell
4398171374
SITL: catch floating point errors
...
if we get a FPE then log a message and exit
2012-02-15 08:50:45 +11:00
Andrew Tridgell
245d265c6a
DCM: added a SITL_debug() for DCM normalisation errors
...
I have seen normalisation errors during simulation runs, but have not
yet tracked down the cause. This log message may help track things
down.
2012-02-15 08:50:45 +11:00
Andrew Tridgell
601a991a46
added SITL_debug() macro
...
this can be used to print a message into the logs in the SITL
simulator. This will be used for critical conditions.
2012-02-15 08:50:45 +11:00
Andrew Tridgell
085cc00c33
RC_Channel_aux: fixed a uninitialied variable error, and save a bit of stack space
2012-02-15 08:50:45 +11:00
Andrew Tridgell
43c56be70c
SITL: add some magnetometer offsets
...
this ensures the compass null_offset algorithm has some work to do in
autotest
2012-02-14 11:26:42 +11:00
Andrew Tridgell
f95d7cadc5
fixed SITL GPS heading to be 0..360
2012-02-14 11:26:42 +11:00
Andrew Tridgell
6a42598ade
use stdint types in the compass code
2012-02-14 08:35:03 +11:00
Andrew Tridgell
be5ffdedbb
AP_Param: allow dumping of AP_Vector3f
...
this means the 'show' command in the CLI shows the compass offsets now
2012-02-14 08:34:50 +11:00
Andrew Tridgell
d90dc4d893
GPS: change back to 4Hz for MTK GPS
...
this will hopefully fix the NO_GPS problems that have been regularly
happening in recent months. I will watch the logs carefully to see if
the problem recurs
2012-02-13 22:50:20 +11:00
Andrew Tridgell
804332c340
AP_Baro: fixed some signed/unsigned warnings
...
and a potential bug on timer wrap
2012-02-13 21:39:18 +11:00
Andrew Tridgell
74bbc72b11
move AP_Var code and example into libraries/AP_Var
...
you can use AP_Var by defining USE_AP_VAR
2012-02-13 16:22:53 +11:00
Andrew Tridgell
23ed5c2cee
fixed imax load/save in PID
2012-02-13 16:22:53 +11:00
Andrew Tridgell
37cabb4cfa
fixed dead zone load/save
2012-02-13 16:22:53 +11:00
Andrew Tridgell
150a67c262
fixed PID initialisation
2012-02-13 16:22:53 +11:00
Andrew Tridgell
47807ec68d
RC_Channel_aux: catch invalid function settings
...
a bad function setting would overwrite the heap
2012-02-13 16:22:53 +11:00
Andrew Tridgell
1f05e7dafb
fixed types in GPS detect code
...
using int everywhere is wasteful and non-portable
2012-02-13 16:22:53 +11:00
Andrew Tridgell
d55a0c3a71
added AP_Param::show_all()
...
this moves the logic into common code
2012-02-13 16:22:52 +11:00
Andrew Tridgell
9175ebe33a
change back to 256 max variables in _var_info[]
...
this keeps the header to 24 bits, and allows the token to be 16
bits. If we need more variables we can put them in a nested group.
2012-02-13 16:22:52 +11:00
Andrew Tridgell
9c5a5473ab
added indexes to group info structures
2012-02-13 16:22:52 +11:00
Andrew Tridgell
f2a6a31645
AP_Param: added group idx, and change packing of header elements
...
adding a idx element to the GroupInfo will make it less likely that a
developer will change the IDs of group elements, and make it easier to
see that these IDs are important for identifying a variable in EEPROM
The header packing has changed to make it 24 bits on all platforms,
which allows us to lower the EEPROM variable max size to 1024 bytes
again
2012-02-13 16:22:52 +11:00
Andrew Tridgell
678a1df3be
fixed support for AP_PARAM_SPARE
...
spare group elements are needed if we remove a group parameter
2012-02-13 16:22:52 +11:00
Andrew Tridgell
accaf9bb30
fixed build on arduino 1.0
2012-02-13 16:22:52 +11:00
Andrew Tridgell
db96303fa0
convert APM_PI library to AP_Param
2012-02-13 16:22:52 +11:00
Andrew Tridgell
452749149f
convert AC_PID library to AP_Param
2012-02-13 16:22:52 +11:00
Andrew Tridgell
f9eed9bd9e
fixed missing return in D value
2012-02-13 16:22:52 +11:00
Andrew Tridgell
f760b3c717
restore _fCut that was lost in AP_Param development
2012-02-13 16:22:51 +11:00
Andrew Tridgell
84aef17bb0
fixed initialisation of RC_Channel class
2012-02-13 16:22:51 +11:00
Andrew Tridgell
5418302b38
AP_Param: fixed desktop build
2012-02-13 16:22:51 +11:00
Andrew Tridgell
d658bc6f9d
desktop: more progmem string functions
2012-02-13 16:22:51 +11:00
Andrew Tridgell
95e107ab75
AP_Param: added generic cast_to_float
2012-02-13 16:22:51 +11:00
Andrew Tridgell
9509c69f42
AP_Param: disable debug ready for production
2012-02-13 16:22:51 +11:00
Andrew Tridgell
5d03f13aa5
AP_Param: make ptype in first() and next() optional
2012-02-13 16:22:51 +11:00
Andrew Tridgell
e01af5885f
adapt Mavlink_compat.h to AP_Param
2012-02-13 16:22:51 +11:00
Andrew Tridgell
bf4a77da81
convert libraries to new typesafe macros
2012-02-13 16:22:51 +11:00
Andrew Tridgell
e8c4ecf9fa
added nested group support and validation
2012-02-13 16:22:51 +11:00
Andrew Tridgell
94a86204ee
added size of Vector6f
2012-02-13 16:22:51 +11:00
Andrew Tridgell
12dac42174
modify RC_Channel for AP_Param
2012-02-13 16:22:51 +11:00
Andrew Tridgell
e5a0074312
modify the PID library for AP_Param
2012-02-13 16:22:51 +11:00
Andrew Tridgell
e5f3864f81
modify the IMU code for AP_Param
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
Andrew Tridgell
497a400841
hacks to get AP_Param to compile
2012-02-13 16:22:50 +11:00
Andrew Tridgell
5b842a447f
new AP_Param subsystem
2012-02-13 16:22:50 +11:00
justinbeech
69f1613f2c
Uncommented cold temp compensation after testing. Fixed read throttle so read rate ends up nailing 100hz, not 90hz. minor commenting improvements.
2012-02-13 00:00:06 +00:00
analoguedevices
0ea6ecf8d1
Removed outdated comment:
...
" // deadzone moved to
//control_in = (abs(control_in) < _dead_zone) ? 0 : control_in;"
2012-02-11 16:51:02 +00:00
Michael Oborne
8ec192cf45
fix uint > int issue - for hil
2012-02-11 11:35:59 +08:00
Pat Hickey
83326a9d62
APM_RC_APM2: Add support for CH_10 and CH_11
...
* CH_10 is on APM2 pin A10 (based on A1..A8 convention)
* CH_11 is on APM2 pin A11
* Only the code in enable_out, disable_out, and OutputCh needed to change.
* CH_10 and CH_11 always have an output period of 20ms (50Hz).
2012-02-06 22:11:01 -08:00
Randy Mackay
6877b8b3d6
AC_PID Library - added example sketch
2012-02-05 17:35:15 +09:00
Randy Mackay
90b39609c6
APM_PerfMon - removed because it's too big to use with our limited memory now anyway! I have a backup in case we need to resurrect it in the future.
2012-02-05 11:11:59 +09:00
Jason Short
af79eb273f
Added D term to APM_PI - need to refactor this as a parent class and two child classes to save code space, remove dupes
2012-01-28 21:21:43 -08:00
Randy Mackay
9c26e2369e
Arduino 1.0 - GPS_IMU - small fix to make it compile. Does anyone use this lib?!
2012-01-28 17:56:56 +09:00
Randy Mackay
8533aaf5d9
AP_PID, AP_RC_Channel, FastSerial - small changes to make example sketches compile again
2012-01-28 17:54:20 +09:00
Randy Mackay
b7ce7bfe18
Arduino 1.0 - small fix to make AP_Baro_MS5611_test.pde compile under Arduino 1.0
2012-01-28 13:21:35 +09:00
Randy Mackay
cf25bbfa74
AP_ADC library - tiny fix to make example sketch work after some changes to AP_PeriodicProcess library
2012-01-28 13:12:19 +09:00