ImuCalibration/Gyroscopes

From PaparazziUAV
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Turntable Procedure

Hardware

Pictures

Components

  • audio-technica AT-LP120_USB Direct Drive Professional Turntable
  • Olimex LPC H2148
  • Omron rotary encoder
  • Lisa/L+IMU, Xbee 2.4Ghz modem set, fibreglass mounting plates and general wiring components
  • Encoder mount hoop - engineering shop?

Wiring

Encoder to LPC

  • Black (common) to EXT2 GND
  • Red 5~12 VDC to EXT2 Vin(5v)
  • White OUTA to EXT1 PO.22

LPC to LPC

  • EXT2 3.3v to EXT1 PO.22 (pull up resistor)

Software

LPC Code Modifications

In case of USB 2.0 A-B cable operation, ~/conf/airframes/Poine/turntable.xml has to be amended, as follows, and saved as ~/turntable_dev_usb.xml:

File: conf/airframes/Poine/turntable_dev_usb.xml
 main.CFLAGS += -DUSE_USB_SERIAL
 main.srcs += $(SRC_ARCH)/usb_ser_hw.c
 main.srcs += $(SRC_ARCH)/lpcusb/usbhw_lpc.c $(SRC_ARCH)/lpcusb/usbinit.c
 main.srcs += $(SRC_ARCH)/lpcusb/usbcontrol.c $(SRC_ARCH)/lpcusb/usbstdreq.c
 main.CFLAGS += -DDOWNLINK -DDOWNLINK_TRANSPORT=PprzTransport -DDOWNLINK_DEVICE=UsbS

 #main.CFLAGS += -DUSE_UART0 -DUART0_BAUD=B115200
 #main.srcs += mcu_periph/uart.c
 #main.srcs += $(SRC_ARCH)/mcu_periph/uart_arch.c
 #main.CFLAGS += -DDOWNLINK -DDOWNLINK_TRANSPORT=PprzTransport -DDOWNLINK_DEVICE=Uart0

 main.srcs += subsystems/datalink/downlink.c subsystems/datalink/pprz_transport.c

 #main.CFLAGS += -DMB_TACHO
 #main.srcs += $(MB)/mb_tacho.c

   </makefile>

 </airframe>


A new turntable session has to be added to ~/conf/control_panel.xml:

File: conf/control_panel.xml
   <session name="Flight with USB-serial_TT modem">
      <program name="Data Link">
        <arg flag="-d" constant="/dev/ttyACM0"/>
        <arg flag="-nouplink" constant=""/>          
        <arg flag="-s" constant="115200"/> 
      </program>
      <program name="Server"/>
      <program name="GCS"/>
    </session>


A new aircraft (A/C) named "TT" has to be built using the paparazzi centre:

File: conf/conf.xml
   <aircraft
   name="TT"
   ac_id="3"
   airframe="airframes/Poine/turntable_dev_usb.xml"
   radio="radios/cockpitSX.xml"
   telemetry="telemetry/default_rotorcraft.xml"
   flight_plan="flight_plans/dummy.xml"
   settings=" settings/rotorcraft_basic.xml"
   gui_color="blue"
  />
  <aircraft

IMU Code Modifications

Similar files have to be created for the IMU cradle unit:

File: conf/control_panel.xml
   <session name="Flight USB-serial_TT @57600">
      <program name="Data Link">
        <arg flag="-d" constant="/dev/ttyUSB0"/>
        <arg flag="-s" constant="57600"/>
      </program>
    </session>


The airframe is a standard rotorcraft file with the appropriate IMU defined.

File: conf/conf.xml
   <aircraft
   name="TTIMU"
   ac_id="4"
   airframe="airframes/Audax/slh_lisa_mkk_i2c_indoor_tt_asp1.0.xml"
   radio="radios/cockpitSX.xml"
   telemetry="telemetry/default_rotorcraft.xml"
   flight_plan="flight_plans/rotorcraft_basic.xml"
   settings=" settings/rotorcraft_basic.xml"
   gui_color="blue"
  />
  <aircraft

Encoder Code Modifications

Line 43 in ~/sw/airborne/firmwares/motor_bench/main_turntable.c has to be amended to reflect the encoder's factory pulses per revolution (P/R) setting from default "#define NB_STEP 256". The encoder above has a factory resolution set at "300" (P/R). The resolution setting has to reflect turntable velocity message outputs of ~200deg/s (3.49065rad/s) and ~270deg/s (4.71239rad/s) for 33rpm and 45rpm respectively.

File: sw/airborne/firmwares/motor_bench/main_turntable.c
 #define NB_STEP 300

Calibration Session

Data Collection Setup

In Paparazzi Centre:

  • Build A/C "TT" using "main" target and the USB A-B lead detached from PC.
  • Attach USB A-B lead to both LPC & PC and upload code.
  • Start "Flight with USB-serial_TT modem" "Session".
  • Open default "Message" box and "Real-time Plotter" from the "Tools" menu. Choose "IMU_TURNTABLE" readout.
  • Switch to A/C "TTIMU" in same "Paparazzi Centre" window. Build and upload code.
  • Start "Flight USB-serial_TT @57600" "Session".
  • In original "GCS" window change "Telemetry" to "raw_sensors".
  • Open a new "Message" box and choose "IMU_GYRO_RAW" readout.
  • Arrange placement of IMU cradle, for the chosen axis (p, q, r), on the side which reports the highest or positive reading.
  • Start turntable @ 33rpm and drag "IMU_TURNTABLE" data from "Message" box to "Real-time Plotter".
  • Restart "Server" 1 second before a full minute readout and record for four minutes.
  • Halt "Data Link" for both A/Cs "TT" and "TTIMU" and change turntable speed to 45rpm.
  • Restart - click both "Data Link" boxes and record for a further four minutes.
  • Stop "Server".

IMU gyro calibration, Paparazzi Centre

Data Analysis

  • The captured turntable velocity and gyro axis data can be found date and time stamped at:
File: var/logs/xx_xx_xx__xx_xx_xx.data
   ~/var/logs/12_06_05__18_11_00.data
  • Right click the file and open with "LibreOfficeCalc". Click column D and elect "Sort Ascending".
  • Choose "Extend selection" box. Note the time stamps of the IMU_TURNTABLE outlier data in column A.
  • Insert them in the search box of a separate open editor version of the log file and delete the offending prints.
  • Save the file and run the following:
File: ~/paparazzi/sw/tools/calibration$
    ./calibrate_gyro.py --id 4 --tt_id 3 --axis r /home/stephen/paparazzi/var/logs/12_06_05__18_11_00.data
     
     Linear regression using stats.linregress
     regression: a=824.56 b=16.03, std error= 0.048
     <define name="GYRO_X_NEUTRAL" value="16"/>
     <define name="GYRO_X_SENS" value="4.967519" integer="16"/>
  • These accompanying plots are also generated:
Gyro calibration Plots