Commit Graph

185 Commits

Author SHA1 Message Date
Andrew Tridgell
81b933d9d0 AP_InertialSensor: use int32_t summation for fast sampling
very slightly faster
2016-11-09 17:08:13 +11:00
Andrew Tridgell
af1c5fd6d3 AP_InertialSensor: always use FIFO on MPU6000
and enable fast sampling on ICM20608 if on SPI
2016-11-09 17:08:12 +11:00
Andrew Tridgell
a9a5e50bd1 AP_InertialSensor: removed timer callback for MPU6000
Thanks to Lucas for pointing out this is not needed
2016-11-09 17:08:11 +11:00
Andrew Tridgell
bd84e592f8 AP_InertialSensor: check for NULL device pointer in probe()
handle missing devices
2016-11-09 17:08:10 +11:00
Andrew Tridgell
3d7d773883 AP_InertialSensor: added support for ICM20608 on Pixracer 2016-11-09 17:08:08 +11:00
Andrew Tridgell
aa4025bdf9 AP_InertialSensor: make INS sensor IDs match for PX4
in-tree driver IDs now match PX4Firmware driver IDs on Pixhawk2
2016-11-09 17:08:06 +11:00
Andrew Tridgell
9e7e1b2f01 AP_InertialSensor: fixed merge conflicts with patches from Lucas 2016-11-09 17:08:06 +11:00
Lucas De Marchi
104e29acf2 AP_InertialSensor: MPU6000: change accel scale to 16G
Also change the ID of MPU6000 so previous calibration values are not
considered valid.
2016-11-09 17:08:06 +11:00
Lucas De Marchi
dc09661b9e AP_InertialSensor: MPU6000: save driver version
When registering accel and gyro we use the upper 16bits of the id to
store the driver version. When changing the driver behavior in
non-compatible ways, changing this version will trigger a request for
calibration.
2016-11-09 17:08:06 +11:00
Lucas De Marchi
0d3adef8b2 AP_InertialSensor: MPU6000: remove TODO leftover
This will never be done as blindly changing speed is not the way to fix
communication issues.
2016-11-09 17:08:05 +11:00
Lucas De Marchi
469efb00f6 AP_InertialSensor: save id for gyro and accel instances
This allows each sensor to be uniquely identified in the system by using
either the index inside the backend or for those that use the Device
interface, to use the bus type, location, and device id.

We leave 16-bit for each sensor to be able to change its own
identification in future, which allows them to be changed in an
incompatible manner forcing a re-calibration.
2016-11-09 17:08:05 +11:00
Lucas De Marchi
ace61087a1 AP_InertialSensor: remove product_id
We only leave the parameter there for backward-compatibility. However
product id on the inertial sensor is not much useful since it's only
kept for the first instance.

A better implementation per-gyro and per-accel is needed in order to
avoid problems with sensors taking the offsets configured for another
sensor.
2016-11-09 17:08:05 +11:00
Andrew Tridgell
64a5d3938c AP_InertialSensor: implement device IDs for MPU6000 and MPU9250 AuxilaryBus 2016-11-09 17:08:04 +11:00
Andrew Tridgell
a5c5e033d2 AP_InertialSensor: fixed threading and locking in remaining backends
use a backend semaphore for shared data and use thread per bus where
available
2016-11-09 17:08:01 +11:00
Andrew Tridgell
2df6ed08c2 AP_InertialSensor: added optional per-instance orientation
this is needed for multi-sensor boards to get orientation right for
each sensor
2016-11-09 17:08:00 +11:00
Andrew Tridgell
919aa61918 AP_InertialSensor: support AuxiliaryBus without register_periodic_callback() 2016-11-09 17:07:57 +11:00
Andrew Tridgell
2b66df68a1 AP_InertialSensor: use thread-per-bus for lsm303d and mpu6000 2016-11-09 17:07:56 +11:00
Mathieu OTHACEHE
152edf7189 Global: remove mode line from headers
Using a global .dir-locals.el file is a better alternative than
reincluding the same emacs header in every file of the project.
2016-10-24 09:42:01 -02:00
Julien Beraud
714c8fd318 AP_InertialSensor_MPU6000: Add support for fsync bit for Bebop
Already present on Disco
2016-10-03 12:20:03 -03:00
Andrew Tridgell
6f9530ebaa AP_InertialSensor: added optional FSYNC external sync bit
used to synchronise with image sensor on Disco
2016-09-05 12:55:32 +10:00
Murilo Belluzzo
36bdd7f1f1 AP_InertialSensor: MPU6000: Add missing read() check 2016-08-03 00:18:20 -03:00
Andrew Tridgell
d30e55fa44 AP_InertialSensor: initial support for Disco
setup right orientation
2016-07-20 13:38:17 +10:00
Andrew Tridgell
834acaffee AP_InertialSensor: provide IMU temperature to HAL for all boards 2016-07-01 15:29:52 +10:00
Lucas De Marchi
1f96336f7c Global: rename bus type enum entries 2016-06-27 17:51:41 -03:00
Gustavo Jose de Sousa
a6e5eb9e14 AP_InertialSensor: MPU6000: remove _bus_type field
Use _dev->bus_type instead.
2016-06-27 17:20:51 -03:00
Gustavo Jose de Sousa
0718649c8b AP_InertialSensor: MPU6000: let Device handle read flag
There's no need to handle that in MPU6000 anymore.
2016-06-27 17:20:51 -03:00
Gustavo Jose de Sousa
309fe4a88c AP_InertialSensor: MPU6000: remove _register_write_check()
That function isn't used in the code base and there should be a better way to
debug writes on registers.
2016-06-27 17:20:51 -03:00
Lucas De Marchi
057822b51c AP_InertialSensor: AuxiliaryBus: fix return value
We should return the number of bytes written/read, not 0 on success.
This number may be useful in some cases so return it.

While at it fix a simple wrong space in the header.
2016-03-17 02:55:39 -03:00
Lucas De Marchi
af846636e4 AP_InertialSensor: MPU60x0: use AP_HAL::Device abstraction 2016-02-16 19:49:09 -02:00
Lucas De Marchi
5088dca072 AP_InertialSensor: MPU60x0: coding style fixes 2016-02-01 14:18:51 -02:00
Lucas De Marchi
ed653f8dbb AP_InertialSensor: MPU60x0: add comment about 8G/16G 2016-02-01 14:18:51 -02:00
Aaron Wang Shi
3a31970056 AP_InertialSensor: add support to BH hat
- MPU6050 I2C for BH v0.1
    - MPU9250 SPI for BH v0.2
2015-12-21 15:54:30 +11:00
Julien BERAUD
a27d7f8a93 AP_InertialSensor_MPU6000: Fix FIFO reset
Change the sequence. Previous sequence was sometimes causing failure
to initialize the IMU.
2015-12-16 08:16:10 +11:00
Caio Marcelo de Oliveira Filho
d7601095fa AP_InertialSensor: use millis/micros/panic functions 2015-11-20 12:31:41 +09:00
Andrew Tridgell
75ea8f3dc0 AP_InertialSensor: removed "have sample" logic from drivers
the frontend has all the information it needs, so we can simplify the
drivers some more
2015-11-16 17:57:35 +11:00
Andrew Tridgell
0e4bab74ba AP_InertialSensor: simplify sensor backends
use common code for filtering and update, allowing each sensor driver
to be simpler and more consistent
2015-11-16 17:57:35 +11:00
Lucas De Marchi
3142f21363 AP_InertialSensor: remove checks for HAL_BOARD_APM2 and HAL_BOARD_APM1 2015-11-04 12:14:12 +11:00
Gustavo Jose de Sousa
8e351a058d AP_InertialSensor: MPU6000: enable data-ready pin for minlure
Data-ready pin wasn't being used before due to a bug in the Kernel with
concurrent accesses to GPIO in Intel Baytrail platforms. That has been fixed in
Kernel version 4.2.
2015-11-04 12:12:47 +11:00
Lucas De Marchi
20c6ffc5e3 Replace use of UARTDriver::printf_P() with UARTDriver::printf()
This also starts to show warnings on places that were already using
wrong printf format strings.
2015-10-30 14:35:25 +09:00
Lucas De Marchi
6f4904189b Replace use of println_P() with println() 2015-10-30 14:35:22 +09:00
Lucas De Marchi
2c38e31c93 Remove use of PSTR
The PSTR is already define as a NOP for all supported platforms. It's
only needed for AVR so here we remove all the uses throughout the
codebase.

This was automated with a simple python script so it also converts
places which spans to multiple lines, removing the matching parentheses.

AVR-specific places were not changed.
2015-10-30 14:35:04 +09:00
Gustavo Jose de Sousa
887f81274d AP_InertialSensor: MPU6000: publish gyro raw sample rate
So that delta angle calculation is enabled.
2015-10-22 16:53:11 +11:00
Gustavo Jose de Sousa
25a499a41f AP_InertialSensor: use raw sample rate terminology
In order to avoid confusion between sample rate from sensor and sample rate
from the frontend class (AP_InertialSensor), use "raw sample rate" to refer to
the former.

The changes in the code were basically done with the following commands:

git grep -wl _accel_sample_rates | xargs sed -i "s,\<_accel_sample_rates\>,_accel_raw_sample_rates,g"
git grep -wl _set_accel_sample_rate | xargs sed -i "s,\<_set_accel_sample_rate\>,_set_accel_raw_sample_rate,g"
git grep -wl _accel_sample_rate | xargs sed -i "s,\<_accel_sample_rate\>,_accel_raw_sample_rate,g"

git grep -wl _gyro_sample_rates | xargs sed -i "s,\<_gyro_sample_rates\>,_gyro_raw_sample_rates,g"
git grep -wl _set_gyro_sample_rate | xargs sed -i "s,\<_set_gyro_sample_rate\>,_set_gyro_raw_sample_rate,g"
git grep -wl _gyro_sample_rate | xargs sed -i "s,\<_gyro_sample_rate\>,_gyro_raw_sample_rate,g"

And also with minor changes on indentation and comments.
2015-10-22 16:53:11 +11:00
Gustavo Jose de Sousa
dfd671c54e AP_InertialSensor: Backend: add hook for new gyro sample arrival
That hook will do common tasks for when new gyro raw sample is available.
2015-10-22 16:53:10 +11:00
Lucas De Marchi
ed36ae9ef7 AP_InertialSensor: MPU6000: add rotation for minlure 2015-10-22 12:04:52 +11:00
Lucas De Marchi
4480956c68 AP_InertialSensor: MPU6000: remove dead code for !FAST_SAMPLING
The code with ifdef for !FAST_SAMPLING is bit rotting and the example
for AP_InertialSensor is currently broken for this case. Instead of
adding more ifdefs, remove the legacy implementation for !FAST_SAMPLING
since we don't support it anymore.

Reported by Grant:

	/home/grant/3dr/ardupilot/libraries/AP_InertialSensor/AP_InertialSensor_MPU6000.cpp:
	In member function 'void AP_InertialSensor_MPU6000::_accumulate(uint8_t*,
	uint8_t)':
	/home/grant/3dr/ardupilot/libraries/AP_InertialSensor/AP_InertialSensor_MPU6000.cpp:776:20:
	error: no match for 'operator+=' (operand types are 'Vector3l {aka
	Vector3<long int>}' and 'Vector3f {aka Vector3<float>}')
		 _accel_sum += accel;

	/home/grant/3dr/ardupilot/libraries/AP_InertialSensor/AP_InertialSensor_MPU6000.cpp:777:19:
	error: no match for 'operator+=' (operand types are 'Vector3l {aka
	Vector3<long int>}' and 'Vector3f {aka Vector3<float>}')
		 _gyro_sum += gyro;
2015-10-21 10:05:17 +11:00
José Roberto de Souza
daa32725ac AP_InertialSensor: Fix typo: auxiliar to auxiliary 2015-10-16 10:16:24 +11:00
Julien BERAUD
b37c52f7a3 AP_InertialSensor_MPU6000: Add heat support
Send current tempertaure to the Heater so the control loop sets the correct
temperature to the imu
2015-10-06 15:21:39 +11:00
Julien BERAUD
1aadcdf538 AP_InertialSensor_MPU6000: read temperature
Read temperature as part of the normal burst. This is not very costly since it
is part of the burst read in i2c and already read in spi.
It is meant to be used for imu heating.
The filter is set to 1Hz on temperature because of the inherent inertia of
heating systems.
2015-10-06 15:21:39 +11:00
Lucas De Marchi
a58bb0fc32 AP_InertialSensor: MPU6000: Fix using copy instead of reference
In 294298e ("AP_InertialSensor: use method for downcast") I was too eager
to use "auto" and ended up using the implicit copy constructor instead
of actually getting a reference to the object.
2015-10-01 20:57:22 -03:00