Difference between revisions of "Subsystem/imu"

From PaparazziUAV
Jump to: navigation, search
m
(syntaxhighlight)
Line 13: Line 13:
 
Other IMUs can be used through modules or you can just add a subsystem makefile for your own. Also see the [[ImuCalibration|IMU calibration]] page.
 
Other IMUs can be used through modules or you can just add a subsystem makefile for your own. Also see the [[ImuCalibration|IMU calibration]] page.
 
{{Box Code|conf/airframes/myplane.xml|
 
{{Box Code|conf/airframes/myplane.xml|
<pre>
+
<source lang="xml">
 
   <firmware name="fixedwing or rotorcraft">
 
   <firmware name="fixedwing or rotorcraft">
 
     ...
 
     ...
 
     <subsystem name="imu"      type="aspirin_v1.5"/>
 
     <subsystem name="imu"      type="aspirin_v1.5"/>
 
   </firmware>
 
   </firmware>
</pre>
+
</source>
 
}}
 
}}
  
Line 24: Line 24:
 
In the IMU section the [[ImuCalibration|IMU calibration]] is defined and looks something like this:
 
In the IMU section the [[ImuCalibration|IMU calibration]] is defined and looks something like this:
 
{{Box Code|conf/airframes/myplane.xml|
 
{{Box Code|conf/airframes/myplane.xml|
<pre>
+
<source lang="xml">
 
   <section name="IMU" prefix="IMU_">
 
   <section name="IMU" prefix="IMU_">
 
     <define name="GYRO_P_NEUTRAL" value="32362" />
 
     <define name="GYRO_P_NEUTRAL" value="32362" />
Line 50: Line 50:
 
     <define name="MAG_Z_NEUTRAL" value="2099"/>
 
     <define name="MAG_Z_NEUTRAL" value="2099"/>
 
   </section>
 
   </section>
</pre>
+
</source>
 
}}
 
}}
  
Line 58: Line 58:
 
If your magnetometer axes are rotated by 45deg around z. (e.g. with external mag on booz imu v1.0)
 
If your magnetometer axes are rotated by 45deg around z. (e.g. with external mag on booz imu v1.0)
 
{{Box Code|conf/airframes/myplane.xml|
 
{{Box Code|conf/airframes/myplane.xml|
<pre>
+
<source lang="xml">
 
   <section name="IMU" prefix="IMU_">
 
   <section name="IMU" prefix="IMU_">
 
     ...
 
     ...
Line 68: Line 68:
 
     <define name="MAG_Z_SENS" value="5.07618333556" integer="16"/>
 
     <define name="MAG_Z_SENS" value="5.07618333556" integer="16"/>
 
   </section>
 
   </section>
</pre>
+
</source>
 
}}
 
}}
  
Line 79: Line 79:
 
Not defining these values is the same as setting them to zero:
 
Not defining these values is the same as setting them to zero:
 
{{Box Code|conf/airframes/myplane.xml|
 
{{Box Code|conf/airframes/myplane.xml|
<pre>
+
<source lang="xml">
 
   <section name="IMU" prefix="IMU_">
 
   <section name="IMU" prefix="IMU_">
 
     ...
 
     ...
Line 86: Line 86:
 
     <define name="BODY_TO_IMU_PSI"  value="RadOfDeg(0.0)"/>
 
     <define name="BODY_TO_IMU_PSI"  value="RadOfDeg(0.0)"/>
 
   </section>
 
   </section>
</pre>
+
</source>
 
}}
 
}}
  
  
 
[[Category:User_Documentation]] [[Category:Subsystems]]
 
[[Category:User_Documentation]] [[Category:Subsystems]]

Revision as of 15:57, 4 March 2012

Currently possible IMU subsystems are

Other IMUs can be used through modules or you can just add a subsystem makefile for your own. Also see the IMU calibration page.

File: conf/airframes/myplane.xml
  <firmware name="fixedwing or rotorcraft">
     ...
    <subsystem name="imu"       type="aspirin_v1.5"/>
  </firmware>

Defining the calibration

In the IMU section the IMU calibration is defined and looks something like this:

File: conf/airframes/myplane.xml
  <section name="IMU" prefix="IMU_">
    <define name="GYRO_P_NEUTRAL" value="32362" />
    <define name="GYRO_Q_NEUTRAL" value="32080" />
    <define name="GYRO_R_NEUTRAL" value="32096" />

    <define name="GYRO_P_SENS" value="1.1032765" integer="16" />
    <define name="GYRO_Q_SENS" value="1.1360802599" integer="16" />
    <define name="GYRO_R_SENS" value="1.1249874614" integer="16" />

    <define name="ACCEL_X_SENS" value="2.45932966" integer="16"/>
    <define name="ACCEL_Y_SENS" value="2.45106376" integer="16"/>
    <define name="ACCEL_Z_SENS" value="2.47825717" integer="16"/>

    <define name="ACCEL_X_NEUTRAL" value="31886"/>
    <define name="ACCEL_Y_NEUTRAL" value="32162"/>
    <define name="ACCEL_Z_NEUTRAL" value="32941"/>

    <define name="MAG_X_SENS" value="3.17378921476" integer="16"/>
    <define name="MAG_Y_SENS" value="3.14663275967" integer="16"/>
    <define name="MAG_Z_SENS" value="3.26531022727" integer="16"/>

    <define name="MAG_X_NEUTRAL" value="2059"/>
    <define name="MAG_Y_NEUTRAL" value="1944"/>
    <define name="MAG_Z_NEUTRAL" value="2099"/>
  </section>

See the IMU calibration page for the actual calibration instructions.

45deg Mag hack

If your magnetometer axes are rotated by 45deg around z. (e.g. with external mag on booz imu v1.0)

File: conf/airframes/myplane.xml
  <section name="IMU" prefix="IMU_">
    ...
    <define name="MAG_45_HACK" value="1" />
    <!--define name="MAG_X_SENS" value="5.14821844457 * sqrt(2)/2" integer="16"/-->
    <!--define name="MAG_Y_SENS" value="5.11810156597 * sqrt(2)/2" integer="16"/-->
    <define name="MAG_X_SENS" value="3.640340173" integer="16"/>
    <define name="MAG_Y_SENS" value="3.619044324" integer="16"/>
    <define name="MAG_Z_SENS" value="5.07618333556" integer="16"/>
  </section>

Defining the orientation of the IMU

Paparazzi has a parameter 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. Currently 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:

File: conf/airframes/myplane.xml
  <section name="IMU" prefix="IMU_">
    ...
    <define name="BODY_TO_IMU_PHI"   value="RadOfDeg(0.0)"/>
    <define name="BODY_TO_IMU_THETA" value="RadOfDeg(0.0)"/>
    <define name="BODY_TO_IMU_PSI"   value="RadOfDeg(0.0)"/>
  </section>