Commit Graph

63 Commits

Author SHA1 Message Date
Andrew Tridgell
d7996acdf7 AP_InertialSensor: added set_board_orientation() method 2013-01-13 17:32:48 +11:00
Andrew Tridgell
6142eac4b4 AP_InertialSensor: simplify get_delta_time() API
use a single float return rather than two APIs.

This also changes the MPU6k driver to match the new 2.9 behaviour of
using the MPU6k sample timing instead of micros()
2013-01-11 21:17:21 +11:00
Pat Hickey
910e09fc96 AP_InertialSensor_MPU6000: fix sync/async semaphore usage with new scheduler 2013-01-10 14:12:19 -08:00
James Bielman
8e38ef6567 MPU6000: Flip Y and Z axes for SMACCM_HAL.
- The accelerometer is upside-down on the PX4FMU vs the APM2.
2013-01-09 11:19:51 -08:00
James Bielman
1309b7332a MPU6000: Use signed addition when accumulating readings.
- Fixes very erratic accel readings on the PX4 board.
2013-01-09 11:19:51 -08:00
Andrew Tridgell
f48790a56e AP_InertialSensor: poll for new data in num_samples_available()
this lowers the latency for new data
2013-01-09 20:31:09 +11:00
Andrew Tridgell
4ab1cddd15 AP_InertialSensor: ensure we always have the SPI semaphore for MPU6k 2013-01-09 20:30:20 +11:00
Andrew Tridgell
b39166b71a MPU6000: fixed minor timing bug
if we miss a sample due to SPI contention we shouldn't update last
sample time
2013-01-07 11:07:29 +11:00
James Bielman
d84ba8ef59 Use HAL suspend/resume timer procs rather than atomic.
- Preparation for removing begin/end atomic.
2013-01-03 17:33:13 -08:00
Pat Hickey
d808c19c10 AP_InertialSensor_MPU6000: uses new semaphores
* some refactoring to fix differences between timerprocess
  and non-timerprocess usage
2013-01-03 13:48:07 -08:00
James Bielman
acf05a29ee AP_InertialSensor_MPU6000: Poll status register if there is no data ready pin. 2013-01-03 13:48:06 -08:00
Andrew Tridgell
212728be34 InertialSensor: ensure MPU6000 is out of sleep mode before configuring
the MPU6000 starts in sleep mode, and can take a while to wakeup
2012-12-27 21:28:41 +11:00
Andrew Tridgell
122b8716a7 InertialSensor: added auto reset of MPU6000 on startup failure
this works around the problem of the MPU6000 failing to come up on DTR
reset or warm reboot
2012-12-24 07:17:03 +11:00
Andrew Tridgell
44ad850542 InertialSensor: latch the data ready pin high on new data
this ensures we don't miss a sample due to another source of delay
2012-12-23 17:46:36 +11:00
Andrew Tridgell
e2edad8a3f InertialSensor: fixed last sample time in MPU6000
we lost this in the final work on the DTR bug
2012-12-23 08:59:35 +11:00
Andrew Tridgell
1a53bc783c InertialSensor: poll data ready pin instead of an interrupt for MPU6k 2012-12-22 09:16:31 +11:00
Andrew Tridgell
9548e7e79e InertialSensor: simplify the data_ready interrupt handling
this avoids using the defer process code, and fixes a nasty bug that
caused the APM to lockup on reset
2012-12-21 20:01:19 +11:00
Andrew Tridgell
44f860e102 InertialSensor: fixed some compiler warnings 2012-12-20 14:52:35 +11:00
Pat Hickey
b502732249 AP_InertialSensor: rewrite basic code for spi device transactions
* I'm not touching that DMP stuff because I'm pretty convinced it should
  instead be deprecated
2012-12-20 14:52:32 +11:00
Pat Hickey
a4f41c1d29 AP_InertialSensor: MPU6000 uses scheduler panic 2012-12-20 14:52:31 +11:00
Andrew Tridgell
2c1682f310 InertialSensor: use AP_HAL progmem 2012-12-20 14:51:39 +11:00
Andrew Tridgell
c9a81d7de6 AP_InertialSensor: fixed sign of 16 bit SPI transfer
this gets accels and gyros working again
2012-12-20 14:51:36 +11:00
Pat Hickey
9aca19415a AP_InertialSensor: robust semaphores 2012-12-20 14:51:36 +11:00
Pat Hickey
1019fb45e7 AP_InertialSensor: remove sei in data interrupt handler 2012-12-20 14:51:36 +11:00
Pat Hickey
4acf2c8591 AP_InertialSensor: ported to AP_HAL 2012-12-20 14:51:26 +11:00
rmackay9
b4e5176e2a ArduCopter, AP_InertialSensor: restore mpu6k sample rate to 200hz but keep default filtering at 42hz. 2012-12-09 14:27:33 +09:00
Andrew Tridgell
3b18c57691 AP_InertialSensor: removed axis getters for accel/gyro
these were only being used in one place, and in that place were used
incorrectly!
2012-12-04 09:11:55 +11:00
Andrew Tridgell
b237c0583d AP_InertialSensor: Added INS_MPU6K_FILTER option
this allows the user to select the MPU6000 filtering frequency
2012-11-30 07:15:19 +11:00
Andrew Tridgell
089ae0f9f3 AP_InertialSensor: allow specification of sample rate in init() call
this lets the caller not need to know the underlying sample rate. They
just ask for what rate updates happen. 

This also changes the MPU6k filtering to be less than half the sample
rate
2012-11-30 07:15:18 +11:00
Andrew Tridgell
f843705da3 INS: switch to SREG = oldSREG pattern for interrupt mask/restore 2012-11-20 22:31:23 +11:00
Andrew Tridgell
3776e6108f INS: use vector subtraction to make code clearer 2012-11-20 18:32:27 +11:00
rmackay9
8ccac5da3d AP_InertialSensor: correct typo to datasheet's filename 2012-11-20 00:37:42 +09:00
rmackay9
d9b4407e64 AP_InertialSensor: changes after review with Tridge.
sanity checking added to accelerometer calibration routine.
user feedback is sent using gcs_send_text_fmt instead of Serial.printf.
moved ins parameters to new eeprom number to avoid conflicts with older parameters.
other small changes including renaming of functions and parameters.
2012-11-07 19:21:15 +09:00
rmackay9
49de46a548 AP_InertialSensor: merge in calibration features from IMU library
add gauss-newton method of accelerometer calibration
2012-11-07 19:20:27 +09:00
rmackay9
8c6fd340d7 AP_AHRS: added scheduler parameter to init
Required by the AP_AHRS_MPU6000 class which needs to disable timed processes that could interfere with it's communication with the mpu6000
2012-09-29 13:51:21 +09:00
rmackay9
41fbb19cf5 AP_InertialSensor_MPU6000: replaced _cs_pin parameter with #define and saved 1 byte of memory
Updated ArduCopter, ArduPlane and example sketches in AP_InertialSensor, AP_IMU and AP_AHRS libraries because they no longer need to pass in cs_pin to the constructor
2012-09-28 19:21:59 +09:00
rmackay9
921ab3fe12 ArduCopter: bug fix to DMP initialisation (it was freezing due to SPI bus conflicts) 2012-09-28 18:34:23 +09:00
Andrew Tridgell
7e544e8ead MPU6k: save 72 bytes of memory
the buffer can be on the stack
2012-09-18 13:58:50 +10:00
rmackay9
130f3b0030 AP_InertialSensor_MPU6000: move _last_sample_time_micros to capture time data_interrupt was called 2012-09-10 11:38:08 +09:00
rmackay9
7a265dbf61 AP_InertialSensor: use AP_TimerProcess's queue_process to run read from MPU6000 after any currently running processes complete 2012-09-10 11:38:03 +09:00
rmackay9
0a6219695b AP_InertialSensor: changed read of sensor from MPU6000 to happen immediately
This reduces the delay between when data arrives and when it is used
by up to 1ms.

Added num_samples_available method to all InertialSensors to allow
main loop timing to be synced with sensors.
2012-09-10 11:37:33 +09:00
rmackay9
c965963d7b AP_InertialSensor_MPU6000: bug fix. DMP was being enabled by default so although the results were not being used, this caused a delay in the main loop 2012-08-28 17:02:07 +09:00
uncrustify
e6c2616769 uncrustify libraries/AP_InertialSensor/AP_InertialSensor_MPU6000.cpp 2012-08-21 19:03:14 -07:00
Andrew Tridgell
0763bbd1af MPU6000: fixed some build warnings 2012-08-09 16:19:21 +10:00
rmackay9
5077674043 AP_InertialSensor_MPU6000: another attempt at fixing the SITL build 2012-07-28 17:19:19 +09:00
rmackay9
7683e9d870 AP_InertialSensor_MPU6000: changed DMP memory definition (dmpMem) to const uint8_t to remove SITL compile errors (hopefully)
Removed unused 'dump' variable from dmp_load_mem to reduce compiler warnings
2012-07-28 16:33:04 +09:00
rmackay9
6cd0918134 AP_InertialSensor: methods added to access DMP functionality 2012-07-28 14:14:43 +09:00
Craig Elder
69bf5700cd IMU: expose IMU_PRODUCT_ID as EEPROM Variable
this will allow us to log the Product ID in tlogs
2012-05-09 18:30:36 -07:00
Craig Elder
4a1d8b0875 AP_InertialSensor: Return product ID from sensor initialization
this exposes the product ID to the IMU Layer
2012-05-09 18:30:36 -07:00
Craig Elder
ed99940bee MPU6000: Fixed Scaling on Accelerometers Rev C vs Rev D
Rev C have non standard scaling factor that is 1/2 of the data sheet
Rev D chips conform to the specification
2012-05-09 18:30:35 -07:00