Subsystem/imu

Subsystems
Currently possible InertialMeasurementUnit subsystems are
__TOC__
type 	architectures	firmwares	defaults1	notes
analog 	all 	all 	no 	
apogee 	stm32f4 	all 	yes 	mounted on the Apogee autpilot board
aspirin_v1.0 	all 	all 	yes 	AspirinIMU via SPI with DMA
aspirin_v1.5 	all 	all 	yes 	AspirinIMU via SPI with DMA
aspirin_v2.1 	all 	all 	yes 	AspirinIMU via SPI with DMA
aspirin_v2.2 	all 	all 	yes 	AspirinIMU via SPI with DMA
aspirin_i2c_v1.0	all 	all 	yes 	AspirinIMU via I2C
aspirin_i2c_v1.5	all 	all 	yes 	AspirinIMU via I2C
aspirin2_i2c 	all 	all 	no 	AspirinIMU v2 via I2C
b2_v1.0 	all 	all 	no 	
b2_v1.1 	all 	all 	no 	
b2_v1.2 	all 	all 	no 	
drotek_10dof_v2 	all 	all 	yes 	Drotek IMU board with MPU6050, HMC5883 (MS5611 not used in this driver)
elle0 	stm32f4 	all 	yes 	mounted on the Elle0 autpilot board
gl1 	all 	all 	yes 	I2C IMU with L3G4200, ADXL345, HMC5883 and BMP085 from GoodLuckBuy
yai 	all 	all 	yes 	
krooz_sd 	stm32f4 	all 	yes 	mounted on the KroozSD autopilot board
navgo 	lpc21 	all 	yes 	mounted on the NavGo autpilot board
umarim 	lpc21 	all 	yes 	mounted on the Umarim autpilot board
crista 	 	 	no 	
crista_hmc5843 	 	 	no 	
ppzuav 	lpc21 	fw 	no 	
vectornav 	all 	all 	no 	Vectornav INS module used as IMU only (measures rates and acceleration), connected over UART
1. Has default GYRO_x and ACCEL_x values from datasheet.
Add the imu subsystem with the appropriate type to your firmware section:
Other IMUs can be used through modules or you can just add a subsystem makefile for your own.
== Defining the calibration ==
In the IMU section the IMU calibration is defined.
Some IMUs (see table above) have defaults defined. You may leave out the GYRO_x and ACCEL_x defines to use the datasheet values.
=== Magnetometer ===
The magnetometer always needs to be calibrated (Unless you want to disable it).
Here is a resulting minimal example:
==== 45deg Mag hack ====
If your magnetometer axes are rotated by 45deg around z. (e.g. with external mag on booz imu v1.0)
=== Gyro and Accel ===
Defining these values will override any defaults that most IMUs already have (see table at top for which drivers provide defaults that work unless you want to change the cofiguration).See the ImuCalibration page for the actual calibration instructions.
== Defining the orientation of the IMU ==
Paparazzi has parameters to define the orientation of the IMU with respect to the body of the vehicle.
Important Not all algorithms properly deal with any BODY_TO_IMU orientation. See the notes for the respective implementation at Subsystem/ahrs and the issue on github.
For the algorithms not supporting that, the only way to properly deal with 90deg rotations is to just change the sensors channels (e.g. so that what are normally the x-axis gyros and accels become the y-axis sensors, etc.)
 
Not defining these values is the same as setting them to zero.
Note: Angles are always defined in radians, but by setting unit="deg" you can define them in degrees and they are automatically converted to rad. 
* The positive 90 degree offset, parallel mount example:
Configured as:
 
===In Flight Tuning===
* Switch to AHRS telemetry mode and look for the fields that are prefixed with imu_
 
90 degree positive offset example
* Open a Real_time plotter from the paparazzi console tools tab and drag int32 body_phi and int32 body_theta into the plotter box.
* Hover rotorcraft (preferably indoors) to record data.
* Copy the (best fit) recorded values into the airframe BODY_TO_IMU defines:
 
* Ignore 'on the ground' resting values as depicted in the above image. They will change once the vehicle is in flight. The aim is to get the 'in flight' values of "int32 body_phi" & "int32 body_theta" as close to zero as possible. 
Category:User_Documentation Category:Subsystems