Difference between revisions of "User:Earthpatrol"
Earthpatrol (talk | contribs) |
Earthpatrol (talk | contribs) |
||
Line 1,740: | Line 1,740: | ||
The flying robot commander is a collection of RESTful web based applications for managing robotic flight using PaparazziUAV. It currently in beta development that includes live flight tests. | The flying robot commander is a collection of RESTful web based applications for managing robotic flight using PaparazziUAV. It currently in beta development that includes live flight tests. | ||
Currently the code base relies on the python RESTful framework | Currently the code base relies on the python RESTful framework [http://flask.pocoo.org/ Flask] as well as the [https://www.nginx.com/ nginx] web server. '''TODO:''' create a git repository under the Paparazz github for FRC related code. Here's a directory listing for the current set of files that constitute the FRC: | ||
<nowiki> | <nowiki> |
Revision as of 20:23, 18 January 2016
Overview
Developing autonomous capabilities for HooperFly using the Lisa MX and Elle0 autopilots from 1BitSquared in tandem with PaparazziUAV.
Frames & Components
The collection of HooperFly frames configured to fly with Paparazzi.
HooperFly RacerPEX Quad : Azul
- Frame: HooperFly RacerPEX
- Autopilot: 1BitSquared Lisa/MX
- GPS: UBLOX LEA-6H GPS Module w/Built-in Antenna
- ESCs: HobbyKing 30A Blue Series (flashed with SimonK Firmware)
- Motors: RCTimer 2830-14 750k Brushless
- Props: HobbyKing 10x4.5 Green SlowFly
- Receiver: OrangeRx R110XL 2.4Ghz DSMX Satellite Receiver (long antenna version)
- Telemetry Radios: Xbee 802.15.4 Low-Power Module w/ Wire Antenna
HooperFly RacerPEX Quad : Verde
- Frame: HooperFly RacerPEX
- Autopilot: 1BitSquared Lisa/MX
- GPS: UBLOX LEA-6H GPS Module w/Built-in Antenna
- ESCs: HobbyKing 30A Afro Series (default with SimonK Firmware)
- Motors: RCTimer 2830-14 750k Brushless
- Props: HobbyKing 10x4.5 Blue SlowFly
- Receiver: OrangeRx R110XL 2.4Ghz DSMX Satellite Receiver (long antenna version)
- Telemetry Radios: Xbee 802.15.4 Low-Power Module w/ Wire Antenna
HooperFly RacerPEX Quad : Neon
- Frame: HooperFly RacerPEX
- Autopilot: 1BitSquared Lisa/MX
- GPS: UBLOX LEA-6H GPS Module w/Built-in Antenna
- ESCs: HobbyKing 30A Afro Series (default with SimonK Firmware)
- Motors: RCTimer 2830-14 750k Brushless
- Props: HobbyKing 10x4.5 Blue SlowFly
- Receiver: OrangeRx R110XL 2.4Ghz DSMX Satellite Receiver (long antenna version)
- Telemetry Radios: 915Mhz Radio Telemetry Kit
HooperFly RacerPEX Hexa : Neon
- Frame: HooperFly RacerPEX
- Autopilot: 1BitSquared Lisa/MX
- GPS: UBLOX LEA-6H GPS Module w/Built-in Antenna
- ESCs: HobbyKing 30A Afro Series (default with SimonK Firmware)
- Motors: RCTimer 2830-14 750k Brushless
- Props: HobbyKing 10x4.5 Blue SlowFly
- Receiver: OrangeRx R110XL 2.4Ghz DSMX Satellite Receiver (long antenna version)
- Telemetry Radios: 915Mhz Radio Telemetry Kit
HooperFly TeensyFly Quad Lisa
- Frame: HooperFly TeensyFly Quad
- Autopilot: 1BitSquared Lisa/MX
- GPS: UBLOX LEA-6H GPS Module w/Built-in Antenna
- ESCs: RCTimer ESC12A SimonK Firmware
- UBEC: TURNIGY 3A UBEC w/ Noise Reduction
- Motors: T-Motor MN1804 2400kv Brushless
- Props: GemFan 5x3 Propellers
- Receiver: OrangeRx R110XL 2.4Ghz DSMX Satellite Receiver (long antenna version)
- Telemetry Radios: 915Mhz Radio Telemetry Kit
HooperFly TeensyFly Quad Elle
- Frame: HooperFly TeensyFly Quad
- Autopilot: 1BitSquared Elle0
- GPS: UBLOX LEA-7 GPS Module w/Built-in Antenna
- ESCs: RCTimer ESC12A SimonK Firmware
- UBEC: TURNIGY 3A UBEC w/ Noise Reduction
- Motors: RCTimer HP1806-2300kv Brushless
- Props: GemFan 5x3 Propellers
- Receiver: OrangeRx R110XL 2.4Ghz DSMX Satellite Receiver (long antenna version)
- Telemetry Radios: 915Mhz Radio Telemetry Kit
HooperFly TeensyFly Hexa
- Frame: HooperFly TeensyFly Hexa
- Autopilot: 1BitSquared Lisa/MX
- GPS: UBLOX LEA-6H GPS Module w/Built-in Antenna
- ESCs: RCTimer ESC12A SimonK Firmware
- UBEC: TURNIGY 3A UBEC w/ Noise Reduction
- Motors: RCTimer SL1806/2300KV CW CCW Brushless
- Props: GemFan 5x3 Propellers
- Receiver: OrangeRx R110XL 2.4Ghz DSMX Satellite Receiver (long antenna version)
- Telemetry Radios: 915Mhz Radio Telemetry Kit
Frame/Component Test Bench : MultiWii FC & DSM2 Receiver
Each frame and associated components(motors/escs/wiring harness) are tested for functionality using a MultiWii FC and DSM2 receiver prior to the Lisa/MX autopilot integration.
Flight Preparation
Airframes: HooperFly TeensyFly and RacerPEX
Attempting to use PaparazziUAV to fly four HooperFly frames in a synchronized autonomous fashion.
Airframe Configuration
Motor Layout Diagrams: Quad, Hexa, Octo
Motor position and rotation diagrams for "x" and "+" configurations of HooperFly quads, hexa, and octocopters. The top row consists of the "x" configuration frames and the bottom row contains the "+" configurations. Odd numbered motors(1, 3, 5, 7), blue in color, rotate clockwise. Even numbered motors(2, 4, 6, 8), green in color, rotate counter-clockwise.
All HooperFly airframe configuration files are located in the directory:
$PAPARAZZI_HOME/conf/airframes/HooperFly
Airframe | File |
---|---|
TeensyFly Quad | teensyfly_quad_lisa_mx_20.xml |
TeensyFly Hexa | teensyfly_hexa_lisa_mx_20.xml |
RacerPEX Quad | racerpex_quad_lisa_mx_20.xml |
RacerPEX Hexa | racerpex_hexa_lisa_mx_20.xml |
RacerPEX Octo | racerpex_octo_lisa_mx_20.xml |
JSBSim Aircraft Configuration
JSBSim defines a "BODY" frame with the following cartesian coordinate system to quantify propulsion forces:
- Top Left Quadrant (e.g.: NW, FL) -, -
- Top Right Quadrant (e.g.: NE, FR) -, +
- Bottom Right Quadrant (e.g.: SE, BR) +, +
- Bottom Left Quadrant (e.g.: SW, BL) +, -
Reference the JSBSim Documentation for a discussion about the STRUCTURAL vs. BODY frame as well as details related to each section of a jsbsim configuration file.
All HooperFly JSBSim aircraft configuration files are located in the directory:
$PAPARAZZI_HOME/conf/simulator/jsbsim/aircraft/HooperFly
Airframe | File |
---|---|
TeensyFly Quad | teensyfly_quad.xml |
TeensyFly Hexa | teensyfly_hexa.xml |
RacerPEX Quad | racerpex_quad.xml |
RacerPEX Hexa | racerpex_hexa.xml |
RacerPEX Octo | racerpex_octo.xml |
AHRS/Stabilization Settings
This is a placeholder for rotorcraft flight research as it relates to Stablization/AHRS pairs.
Reference Pages:
Stabilization | ||||
---|---|---|---|---|
AHRS | int_quat | float_quat | int_euler | float_euler |
int_cmpl_quat | yaw wobble | |||
float_cmpl | ||||
int_cmpl_euler | ||||
float_mlkf |
Power System
Wiring Harness
- If possible, braid esc-to-battery connection wiring, or at a minimum, twist them as a group to minimize magnetic interference.
ESC Wiring/Layout
- If possible, braid motor-to-esc wiring, or at a minimum, twist them as a group to minimize magnetic interference.
Autopilot UBEC
- Describe Autopilot UBEC layout/mounting
Electromagnetic Interference Considerations
- Address issues related to reducing electromagnetic interference
Telemetry Radios
2.4Ghz Xbee
Radio Setup
- Dowloaded and installed XCTU - Next generation configuration platform for XBee
- Solder instructions for the XBee modem adapter boards
- Telemetry radios configuration instructions
- Telemetry configuration definition
- Data sheet
Links
Recovering a Bricked Xbee
There are some signal/power dynamics associated with Xbee radios that can sometimes result in a non-operational radio. The following links are useful when looking to un-brick an Xbee radio:
915 Mhz SiK/HopeRF
Firmware Link: Firmware Github
Authentic 3DR Telemetry
Authentic 3DR Telemetry modules use the FTDI chip.
Links
Cloned 3DR Telemetry
3DR telemetry clones available on Ebay use the SiLabs chip.
Links
Air/Ground Pairs in Support of Multiple Aircraft
Based on some simple initial testing, it looks like each aircraft will need an air/ground telemetry radio pair(i.e. point-to-point connection). Each air/ground pair should be assigned their own unique NET_ID. Programming the air radio requires the use of an FTDI-to-USB board for changing the NET_ID. The ground radio has a built-in USB connection and does not require an adapter for programming. The telemetry radios are shipped with a default NET_ID = 25. Picking a NET_ID other than 25 is advised to reduce the chance of NET_ID collision due to other aircraft using default radio settings( valid NET_ID values: 0-499).
The ground station antennas should be vertically spaced a minimum of two wavelengths from each other to reduce interference related issues. Applicable wavelengths for commonly used telemetry radio frequencies:
- 400 mhz =75 cm
- 900 mhz = 33.3 cm
- 2.4 ghz = 12.5 cm
Recommended ground station antenna spacing:
- 400 mhz : 75 cm * 2 = 150 cm (59 inches)
- 900 mhz : 33.3 cm * 2 = 66.6 cm (27 inches)
- 2.4 ghz : 12.5 cm * 2 = 25 cm (10 inches)
Transmitter - 2.4Ghz DSM2/DSMX Compatible
Spektrum DX6i
Using the Spektrum DX6i transmitter as an RC link.
Airframe Radio Section
Define the roles of the "flap" and "gear" switch for the transmitter. In this example, the "flap" toggle is used for the radio mode and the "gear" toggle as the kill switch.
<subsystem name="radio_control" type="spektrum"> <define name="RADIO_MODE" value="RADIO_FLAP"/> <define name="RADIO_KILL_SWITCH" value="RADIO_GEAR"/> <configure name="USE_SECONDARY_SPEKTRUM_RECEIVER" value="1"/> </subsystem>
Deriving 3-State Behavior with Two Toggle Switches
The Spektrum DX6i does not have a 3-state toggle switch. A little bit of "mixing magic" between two toggle switches is needed to express 3-state toggle switch behavior. Use the following setup for "Mix 1" to emulate a 3-state toggle switch using ELEV D/R & FLAP switches.
FLAP-> FLAP ACT RATE D -100% U 0% SW ELE D/R TRIM INH
DX6i Toggle Switch Flight Mode Verification
Given the following autopilot flight mode settings:
File: conf/airframes/HooperFly/teensyfly_hexa_lisa_mx_20.xml |
<section name="AUTOPILOT">
<define name="MODE_STARTUP" value="AP_MODE_NAV"/>
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_HOVER_Z_HOLD"/>
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
</section>
|
- Power up the autopilot outfitted with a GPS module as well as a working telemetry connection.
- Turn on your TX configured to the aircraft under test.
- Start Paparazzi and open the appropriate session for your given telemetry link along with the GCS.
- Wait for the GPS to get lock and verify the TX is connected as well.
Now that you have your GPS enabled autopilot connect to the GCS, verify the following toggle switch/autopilot states:
ELEV D/R | FLAPS | MODE | VALUE |
---|---|---|---|
0 | 1 | MODE_MANUAL | ATT -- AP_MODE_ATTITUDE_DIRECT |
1 | 1 | MODE_AUTO1 | H_ZH -- AP_MODE_HOVER_Z_HOLD |
1 | 0 | MODE_AUTO2 | NAV -- AP_MODE_NAV |
Channel Mapping for Spektrum Revised
As of November 2015, the channel assignments for Spektrum radios were modified to reflect a Paparazzi centric view of channel assignments. There are two options for dealing with the change. One is to reverse the appropriate channels on a previously programmed spektrum transmitter; the other is to compile the airborne code with RADIO_CONTROL_SPEKTRUM_OLD_SIGNS defined.
Configuration | Throttle/0 | Aileron/1 | Elevator/2 | Rudder/3 | Gear/4 | Flap-Aux1/5 | Aux2/6 | Aux3/7 | Aux4/8 | Aux5/9 | Aux6/10 | Aux7/11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Spektrum Factory | 1 | -1 | -1 | -1 | 1 | -1 | 1 | 1 | 1 | 1 | 1 | 1 |
PPRZ Convention | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Given the above mapping, it is expected that the Aileron/1, Elevator/2, Rudder/3, and Flap-Aux1/5 channels would need to be reversed.
2015-11-30: Verified that the Aileron - ch 1, Elevator - ch 2, Rudder - ch 3, and the Flap-Aux1 - ch 5 need to be set to reverse (i.e. R). All other channels are still set to neutral (i.e. N).
See spektrum_arch.h and spektrum_arch.c for details.
Devo 10
Using the Walkera Devo 10 transmitter running Deviation firmwareas an RC link.
Receiver - 2.4Ghz DSM2/DSMX Satellite
Wiring/Binding
Flash the firmware with the latest Paparazzi that includes patch related to binding DSM2 receivers with LisaMX in spektrum_arch.c:
#define MASTER_RECEIVER_PULSES 4
The transmitter must bind using the DSM2 protocol only. Note: The DSMX protocol is not currently support in Paparazzi.
Links
Verify TX/RX Connection
- Lisa MX led 4 light on: red
- Select the PPM settings and display the TX/RX related messages using the message tool.
Autopilot - Lisa/MX
- Autopilot documentation
- Autopilot rotorcraft documentation
- Rotorcraft configuration definition blocks
- Mount to HooperFly RacerPEX along with GPS, Telemetry, and Receiver
Lisa MX Mounting Orientation
The default "front" of the Lisa MX controller is dependent on the placement of the IMU on the autopilot pcb board. This can differ between revisions of the autopilot. The PHI/THETA/PSI parameters, in the IMU section of the airframe definition file, are used to normalize the body to IMU placement.
File: conf/airframes/HooperFly/teensyfly_quad_lisa_mx_20.xml |
<section name="IMU" prefix="IMU_">
...
<define name="BODY_TO_IMU_PHI" value="0." unit="deg"/>
<define name="BODY_TO_IMU_THETA" value="0." unit="deg"/>
<define name="BODY_TO_IMU_PSI" value="0." unit="deg"/>
...
</section>
|
Black Magic Probe(BMP)
The BMP is used to load the appropriate firmware for a given aircraft.
Command Line Loader Using the BMP
The following command will upload firmware to the autopilot using the JTAG connected Black Magic Probe:
Syntax: make AIRCRAFT=<aircraft_name> ap.upload BMP_PORT=<bmp_device_id> Examples: make AIRCRAFT=Teensy_Fly_Quad ap.upload BMP_PORT=/dev/cu.usbmodemE2B9BDC1 make AIRCRAFT=Teensy_Fly_Hexa ap.upload BMP_PORT=/dev/cu.usbmodemE2B9BDC1
Add the clean_ac target prior to the ap.upload target to force a clean build and load:
Syntax: make AIRCRAFT=<aircraft_name> clean_ac ap.upload BMP_PORT=<bmp_device_id> Examples: make AIRCRAFT=Teensy_Fly_Quad clean_ac ap.upload BMP_PORT=/dev/cu.usbmodemE2B9BDC1 make AIRCRAFT=Teensy_Fly_Hexa clean_ac ap.upload BMP_PORT=/dev/cu.usbmodemE2B9BDC1
Paparazzi Center Upload Using the BMP
The appropriate device id for the BMP needs to be set in each airframe file for the upload feature to work correctly. In the firmware section of the airframe file, under the target named ap, add a <configure name="BMP_PORT" value="/dev/id_of_bmp_device"/> line. See the example below:
File: conf/airframes/HooperFly/teensyfly_quad_lisa_mx_20.xml |
<firmware name="rotorcraft">
<target name="ap" board="lisa_mx_2.0">
<configure name="BMP_PORT" value="/dev/cu.usbmodemE2B9BDC1"/>
</target>
</firmware>
|
Update BMP Firmware for MacOS X
Install pyUSB Updates
brew install libyaml
brew install libusb
sudo easy_install pyusb
sudo easy_install pyyaml</nowiki>
Install BMP Updates
<nowiki>
git clone https://github.com/blacksphere/blackmagic
cd blackmagic
git submodule init
git submodule update
make
cd src
make
Now unplug the Black Magic Probe, then HOLD THE BUTTON DOWN WHILE PLUGGING IT AGAIN.
../scripts/stm32_mem.py blackmagic.bin
Now unplug the Black Magic Probe, then replug it WITHOUT holding the button down.
Update BMP Firmware for Ubuntu Linux
Install pyUSB Updates
sudo apt-get install python-yaml python-usb
Install BMP Updates
git clone https://github.com/blacksphere/blackmagic
cd blackmagic
git submodule init
git submodule update
make
Now unplug the Black Magic Probe, then HOLD THE BUTTON DOWN WHILE PLUGGING IT AGAIN.
sudo scripts/stm32_mem.py src/blackmagic.bin
TeensyFly Hexa - Mounting Strategies
Simple Double Sided Tape Mount
- Display Vibration Data with/without Props
Vibration Isolator Mount
- For comparison purposes, do not alter frame dynamics. The current vibration profile/dynamics are used as baseline to evaluate various autopilot vibration damping techniques.
- Develop a vibration testing process to measure the permutations/combinations of various vibration damping techniques.
- Use new tool: report_imu_scaled.py (need to integrate tool into github)
- Capture and display test results
First flights using the vibration isolator mount resulted in a considerable reduction in the X and Y accelerometer data. The Z-axis was reduced to about 0.4g or 3.9m/s^2.
RacerPEX Quad - Mounting Strategies
Vibration Isolator Mount
Using the same vibration isolator that is used on the TeensyFly Hexa aircraft. Initial inflight vibration measurements exceeded acceptable levels. Observed that props were way out of balance at near hover harmonics. Captured baseline motor vibrations without props, balanced the props and captured new inflight vibration data. Balanced props reduced the vibration levels to acceptable levels.
RacerPEX Hexa - Mounting Strategies
Vibration Isolator Mount
Balanced propellers and profiled sensors for vibration related characteristics.
$ ./sw/tools/calibration/report_imu_scaled.py -p ./var/logs/15_08_14__17_15_15.data
ACCEL : Time Range(84.253 : 418.182)
ax ay az
Min [-10.022 -9.322 -41.947] m/s2
Max [ 7.730 7.728 19.852] m/s2
Mean [ -0.137 -0.165 -9.662] m/s2
StDev [ 2.575 2.273 8.418] m/s2
GYRO : Time Range(84.253 : 418.182)
gp gq gr
Min [-180.909 -198.646 -50.302] deg/s
Max [174.069 279.009 57.981] deg/s
Mean [ 1.762 -0.095 0.256] deg/s
StDev [ 40.902 38.000 13.893] deg/s
MAG : Time Range(84.261 : 418.182)
mx my mz
Min [ -0.302 -0.540 0.707] unit
Max [ 0.873 0.568 1.090] unit
Mean [ 0.269 -0.174 0.916] unit
StDev [ 0.193 0.247 0.054] unit
TeensyFly Quad - Mounting Strategies
Simple Double Sided Tape Mount
Balanced propellers and profiled sensors for vibration related characteristics.
$ ./sw/tools/calibration/report_imu_scaled.py -p -s 50 -e 225 ./var/logs/15_08_19__16_37_42.data ACCEL : Time Range(50.165 : 225.853) ax ay az Min [-19.483 -21.083 -29.329] m/s2 Max [ 19.075 22.015 7.724] m/s2 Mean [ -0.162 0.428 -9.790] m/s2 StDev [ 6.747 8.123 5.874] m/s2 GYRO : Time Range(50.165 : 225.896) gp gq gr Min [-58.037 -43.839 -28.592] deg/s Max [ 52.680 67.129 33.474] deg/s Mean [ 0.033 0.943 -0.311] deg/s StDev [ 11.733 8.796 9.428] deg/s MAG : Time Range(50.165 : 225.853) mx my mz Min [ -0.354 -1.221 -0.235] unit Max [ 0.313 -0.178 0.678] unit Mean [ -0.007 -0.772 0.346] unit StDev [ 0.123 0.142 0.121] unit
Vibration Isolator Mount
The addition of a vibration isolator mount greatly improved stability of the aircraft when in H_ZH and NAV mode. Here are the vibration results:
$ python ./sw/tools/calibration/report_imu_scaled.py -p -s 43 -e 113 ./var/logs/15_08_28__15_39_51.data ACCEL : Time Range(43.075 : 113.813) ax ay az Min [ -1.971 -1.079 -15.983] m/s2 Max [ 1.733 2.068 -3.909] m/s2 Mean [ -0.023 0.381 -9.747] m/s2 StDev [ 0.680 0.602 2.657] m/s2 GYRO : Time Range(43.075 : 113.876) gp gq gr Min [-17.793 -14.869 -9.806] deg/s Max [ 15.779 15.597 8.281] deg/s Mean [ -0.624 0.822 -0.051] deg/s StDev [ 4.919 5.428 2.774] deg/s MAG : Time Range(43.075 : 113.876) mx my mz Min [ -0.128 -0.487 0.758] unit Max [ 0.390 -0.271 0.983] unit Mean [ 0.278 -0.386 0.866] unit StDev [ 0.046 0.034 0.043] unit
Autopilot - Elle0
Elle0 Mounting Orientation
Using the 1bitsquared recommended mounting orientation for the Elle0( servo pins facing the back of the aircraft and the power/rx ports facing the front of the aircraft.)
Flashing with USB
Install DFU-UTIL
The dfu-util tool, version 0.8 or newer, is required for flashing the Elle0.
For Mac OS X, install it with brew:
brew install dfu-util
For Ubuntu Linux, install the Vivid version. Click the link to get the package: DFU-UTIL AMD64 Link
Once installed, verify the version:
$ dfu-util -V
dfu-util 0.8
Using Paparazzi Center
Build the ap target and upload using the USB DFU-UTIL flash mode option.
Using the Command Line
Build the ap target and upload using the DFU-UTIL flash mode option.
make AIRCRAFT=Teensy_Fly_Quad_Elle0 clean_ac FLASH_MODE=DFU-UTIL ap.upload
TeensyFly Quad - Mounting Strategies
Based on previous testing with the Lisa/MX, it was decided to use the vibration isolator mount on this frame in tandem with the Elle0.
Vibration Isolator Mount
Binding Spektrum RX
A step-by-step for binding Spektrum receivers to the ELLE0:
- Unpower and switch off the TX
- Hold down the bind button on ELLE0
- Plug in the power using the battery or BEC to ELLE0 (do not use USB cable) as a result, the Spektrum satellite RX(s) should be blinking rapidly
- Turn on the TX in bind mode and hold until the RX lights go solid
- Turn off/unplug the battery to the ELLE0
The RX(s) are now bound to your TX.
Calibration
The processes used to calibrate the actuators and sensors for the Elle0 are nearly identical to the those used for the Lisa/MX.
Actuators
Reference the Lisa/MX ESC Actuator Setup section. Note that the setup_elle0 firmware is used for Elle0 actuator calibration.
Accelerometer
Reference the Accelerometer Setup section.
Magnetometer
Reference the Magnetometer Setup section.
Current
Reference the Current Calibration Setup section.
Vibration Profiles
NOTE ==>> ANTI-VIBRATION PLATE USES CHEAPER WHITE BUSHINGS, ALSO PRE-PROP BALANCE $ python ./sw/tools/calibration/report_imu_scaled.py -p -s 51 -e 195 ./var/logs/15_09_04__21_25_14.data ACCEL : Time Range(51.126 : 195.951) ax ay az Min [ -4.210 -3.255 -20.111] m/s2 Max [ 5.402 2.655 -0.023] m/s2 Mean [ 0.389 -0.097 -9.748] m/s2 StDev [ 1.438 1.054 3.482] m/s2 GYRO : Time Range(51.126 : 195.914) gp gq gr Min [-33.809 -66.948 -23.836] deg/s Max [ 29.053 66.276 13.988] deg/s Mean [ -0.065 0.015 -0.276] deg/s StDev [ 6.215 23.490 3.939] deg/s MAG : Time Range(51.126 : 195.933) mx my mz Min [ -0.254 -0.518 0.824] unit Max [ 0.174 -0.266 0.992] unit Mean [ -0.023 -0.400 0.915] unit StDev [ 0.085 0.034 0.022] unit
GPS - UBLOX LEA-6H
Links
Verify GPS Connection
- Lisa MX led 3 light on: green
- GPS unit leds active
Touch Device Applications
PPRZONDROID
Wiki Page: PPRZonDroid
Repository: PPRZonDroid Github
Flight Testing
RC Transmitter Verification
With the propellers removed from the multirotor, verify throttle, roll, pitch and yaw functionality prior to initial flight tests as well as expected motor spin directions. The autopilot should be in manual flight mode during this verification process.
Airframe | Throttle | Yaw | Pitch | Roll | M1 | M2 | M3 | M4 | M5 | M6 |
---|---|---|---|---|---|---|---|---|---|---|
TeensyFly Quad | + | + | + | + | CW | CCW | CW | CCW | ||
TeensyFly Hexa | + | + | + | + | CW | CCW | CW | CCW | CW | CCW |
IMU Calibration
It is best to have a fully populated airframe with a working telemetry radio running on battery power for IMU calibration purposes. Be sure to remove the propellers from the motors before proceeding with IMU calibration. For a general overview reference: ImuCalibration.
Accelerometer
- Power up the flight controller/IMU circuitry on your aircraft with a functioning telemetry radio
- Start paparazzi
- Run the session that connects the ground station telemetry to the aircraft
- In the "Settings" tab for the aircraft select the "raw sensors" and commit
- Viewing sensor data in real-time (optional step)
- Open the "Messages" tool and select the "IMU_ACCEL_RAW"
- Open the "Real-Time Plotter" tool and reduce the "Update time" slider to the far left (smaller the value, the faster the update)
- Drag and drop the IMU_ACCEL_RAW fields "ax", "ay", and "az", from the Message window to the Real-Time Plotter window
- Stop the "server" process and restart to begin the capture of calibration related information
- Begin aircraft manipulations - "Flat/Flip/Edge Stepping Rotation"
- Place on a flat surface in the "normal" position, wait 10 seconds
- Flip aircraft top down on the flat surface, wait 10 seconds
- Hold aircraft on edge, perpendicular to the flat surface, wait 10 seconds
- Rotate craft 90 degrees on edge, still perpendicular to the flat surface, wait 10 seconds
- Rotate craft another 90 degrees on edge, still perpendicular to the flat surface, wait 10 seconds
- Rotate craft the final 90 degrees on edge, still perpendicular to the flat surface, wait 10 seconds
- Stop the "server" process to finish the data capture
From the command line, run the "calibrate.py" tool over the collected accelerometer sensor data
python ./sw/tools/calibration/calibrate.py -s ACCEL -p ./var/logs/15_02_18__18_19_04.data
Copy and paste the resulting displayed ACCEL values into the IMU section of the aircraft configuration file
File: conf/airframes/HooperFly/teensyfly_hexa_lisa_mx_20.xml |
<section name="IMU" prefix="IMU_">
...
<define name="ACCEL_X_NEUTRAL" value="36"/>
<define name="ACCEL_Y_NEUTRAL" value="15"/>
<define name="ACCEL_Z_NEUTRAL" value="-108"/>
<define name="ACCEL_X_SENS" value="4.86727226621" integer="16"/>
<define name="ACCEL_Y_SENS" value="4.87315360311" integer="16"/>
<define name="ACCEL_Z_SENS" value="4.85264051322" integer="16"/>
...
</section>
|
Save the aircraft configuration file and upload the new firmware
make AIRCRAFT=Teensy_Fly_Quad clean_ac ap.upload BMP_PORT=/dev/cu.usbmodemE2B9BDC1
Magnetometer
- Power up the flight controller/IMU circuitry on your aircraft with a functioning telemetry radio
- Start paparazzi
- Run the session that connects the ground station telemetry to the aircraft
- In the "Settings" tab for the aircraft select the "raw sensors" and commit
- Viewing sensor data in real-time (optional step)
- Open the "Messages" tool and select the "IMU_MAG_RAW"
- Open the "Real-Time Plotter" tool and reduce the "Update time" slider to the far left (smaller the value, the faster the update)
- Drag and drop the IMU_MAG_RAW fields "mx", "my", and "mz", from the Message window to the Real-Time Plotter window
- Stop the "server" process and restart to begin the capture of calibration related information
- Begin aircraft manipulation "Global Bee Dance"
- Hold craft out from body and rotate frame about axis parallel to the ground while rotating your body slower than the craft is spinning
- Continue this motion until your body has completed 360 degrees of rotation
- Turn the craft 90 degrees on edge and repeat the process
- Hold craft out from body and rotate frame about axis parallel to the ground while rotating your body slower than the craft is spinning
- Continue this motion until your body has completed 360 degrees of rotation
- Stop the "server" process to finish the data capture
From the command line, run the "calibrate.py" tool over the collected magnetometer sensor data
python ./sw/tools/calibration/calibrate.py -s MAG -p ./var/logs/15_02_18__18_26_49.data
Copy and paste the resulting displayed MAG values into the IMU section of the aircraft configuration file
File: conf/airframes/HooperFly/teensyfly_hexa_lisa_mx_20.xml |
<section name="IMU" prefix="IMU_">
...
<define name="MAG_X_NEUTRAL" value="262"/>
<define name="MAG_Y_NEUTRAL" value="-108"/>
<define name="MAG_Z_NEUTRAL" value="43"/>
<define name="MAG_X_SENS" value="3.26330433172" integer="16"/>
<define name="MAG_Y_SENS" value="3.22600231318" integer="16"/>
<define name="MAG_Z_SENS" value="3.76287398848" integer="16"/>
...
</section>
|
Save the aircraft configuration file and upload the new firmware
make AIRCRAFT=Teensy_Fly_Quad ap.upload BMP_PORT=/dev/cu.usbmodemE2B9BDC1
Notes
Calibrating the magnetometer of a RacerPEX Hexa class aircraft is difficult based on it's size. Rotating an aircraft of that size is awkward and, depending on your arm length, very challenging.
Current Calibration
IMPORTANT: Mounted propellers are needed when performing current calibration. The aircraft needs to be safely secured and stable to allow the propellers/motors to reach maximum throttle for this test. Strong straps, zip ties, etc... are useful for securing the copter to a flat, stable surface for testing.
References
Add send_imu_mag_current module to airframe file:
File: conf/airframes/HooperFly/teensyfly_hexa_lisa_mx_20.xml |
<modules>
<load name="send_imu_mag_current.xml"/>
...
</modules>
|
Add MILLIAMP_AT_IDLE_THROTTLE and MILLIAMP_AT_FULL_THROTTLE to battery section in airframe file. As an initial approximation, multiplied the MILLIAMP_AT_FULL_THROTTLE by 0.10 to derive the MILLIAMP_AT_IDLE_VALUE. The message tool along with the mag_calibration setting could also be used to measure this value:
File: conf/airframes/HooperFly/teensyfly_hexa_lisa_mx_20.xml |
<section name="BAT">
<define name="MILLIAMP_AT_IDLE_THROTTLE" value="5880" />
<define name="MILLIAMP_AT_FULL_THROTTLE" value="58800"/>
...
</section>
|
Make sure the telemetry configuration file contains the following:
File: conf/telemetry/default_rotorcraft.xml |
<mode name="mag_current_calibration">
<message name="ROTORCRAFT_STATUS" period="1.2"/>
<message name="DL_VALUE" period="0.5"/>
<message name="ALIVE" period="2.1"/>
<message name="IMU_MAG_CURRENT_CALIBRATION" period="0.05"/>
</mode>
|
Process
- Startup the paparazzi control center
- Start a session for the aircraft under test with propellers. Be sure that the craft is secured and safe to operate under full throttle.
- On the Telemetry tab in Settings, select 'mag_current_calibration' and commit
- On the Modules tab in Settings, select 'Start' button for the send_imu_mag line and commit
- On the TX, enable motors and slowly sweep the throttle up to maximum.
- On the Modules tab in Settings, select 'Stop' button for the IMU_MAG_CURRENT_CALIBRATION messages and commit
- Kill the motors
Contents of the IMU_MAG_CURRENT_CALIBRATION message as displayed in the Messages tool:
From the command line, run the "calibrate_mag_current.py" tool over the collected magnetometer sensor data
$ python ./sw/tools/calibration/calibrate_mag_current.py var/logs/mag_current_tune_15_03_11__16_50_58.data <define name= "MAG_X_CURRENT_COEF" value="-0.0140313409241"/> <define name= "MAG_Y_CURRENT_COEF" value="-0.00949491888244"/> <define name= "MAG_Z_CURRENT_COEF" value="-0.0151296129399"/>
Copy and paste the resulting displayed MAG_*_CURRENT_COEF values into the IMU section of the aircraft configuration file
File: conf/airframes/HooperFly/teensyfly_hexa_lisa_mx_20.xml |
<section name="IMU" prefix="IMU_">
...
<define name= "MAG_X_CURRENT_COEF" value="-0.0140313409241"/>
<define name= "MAG_Y_CURRENT_COEF" value="-0.00949491888244"/>
<define name= "MAG_Z_CURRENT_COEF" value="-0.0151296129399"/>
...
</section>
|
Save the aircraft configuration file and upload the new firmware
make AIRCRAFT=Teensy_Fly_Hexa clean_ac ap.upload BMP_PORT=/dev/cu.usbmodemE2B9BDC1
Hover - In Flight Tuning
Reference
ESC/Actuator Setup
IMPORTANT: Remove propellers before proceeding with ESC/Actuator setup. Once the actuators are calibrated, re-flash the autopilot with the appropriate firmware prior to mounting the propellers. Do some live testing of the motors with the newly calibrated actuators in combination with your transmitter before you add propellers.
Flash Lisa/MX with Setup Firmware
- Start the Paparazzi Center and choose "setup_lisamx_20" as the aircraft
- Compile the "setup_actuators" target
- Connect the BMP including the serial line to UART2
- On the command line, flash the firmware using the following command:
make AIRCRAFT=setup_lisamx_20 setup_actuators.upload BMP_PORT=/dev/cu.usbmodemE2B9BDC1
Setup - Unified Power System
For autopilots and ESCs that are powered from a unified/single connection use the following steps:
In the Paparazzi Center, execute the "Messages and Settings" session
- Unplug power
- Plug in power (the pwm outputs are not active until you commit a setting through the settings app)
- Set the first actuator output to 2000
- Submit with green check mark (you should hear all the esc beep)
- Set the first actuator output to 1000
- Submit with the green check mark (you will hear the first esc beep)
- Return to step 1 and repeat this procedure for each of the remaining actuators
Setup - Dual Power System
For autopilots and ESCs that are powered from separate connections use the following steps:
In the Paparazzi Center, execute the "Messages and Settings" session
- Unplug all power
- Plugin autopilot power
- Set all actuators in the settings app to 2000
- Submit all actuators settings using the green check mark
- Plugin ESC power (all esc should beep)
- Set all actuators in the settings app to 1000
- Submit all actuators settings using the green check mark (for each submitted value the corresponding esc should beep)
- Setup of the actuators is complete
PWM Parameters in Airframe File
After doing this the 0 value for the esc is 1000 and max is 2000. The motor should not turn on before you give it less than 1065 making the 1100 setting in the airframe file is a good value to use for neutral (motors running at idle), 1000 for minimum (motors off) and 1900 for maximum throttle.
File: conf/airframes/HooperFly/teensyfly_quad_lisa_mx_20.xml |
<servos driver="Pwm">
<servo name="FRONT_LEFT" no="0" min="1000" neutral="1100" max="1900"/>
<servo name="FRONT_RIGHT" no="1" min="1000" neutral="1100" max="1900"/>
<servo name="BACK_RIGHT" no="2" min="1000" neutral="1100" max="1900"/>
<servo name="BACK_LEFT" no="3" min="1000" neutral="1100" max="1900"/>
</servos>
|
IMPORTANT: Once the actuators are calibrated, re-flash the autopilot with the appropriate firmware prior to mounting the propellers. Do some live testing of the motors with the newly calibrated actuators in combination with your transmitter before you add propellers.
PID Tuning
Real-Time Tuning with Attitude Stabilization Sliders
Update and Save Changes to Airframe File
File: conf/airframes/HooperFly/teensyfly_quad_lisa_mx_20.xml |
<section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
<!-- setpoints -->
<define name="SP_MAX_PHI" value="45." unit="deg"/>
<define name="SP_MAX_THETA" value="45." unit="deg"/>
<define name="SP_MAX_R" value="90." unit="deg/s"/>
<define name="DEADBAND_A" value="0"/>
<define name="DEADBAND_E" value="0"/>
<define name="DEADBAND_R" value="250"/>
<!-- reference -->
<define name="REF_OMEGA_P" value="400" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.85"/>
<define name="REF_MAX_P" value="400." unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_Q" value="400" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.85"/>
<define name="REF_MAX_Q" value="400." unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_R" value="250" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.85"/>
<define name="REF_MAX_R" value="180." unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)"/>
<!-- feedback -->
<define name="PHI_PGAIN" value="500"/>
<define name="PHI_DGAIN" value="200"/>
<define name="PHI_IGAIN" value="200"/>
<define name="THETA_PGAIN" value="500"/>
<define name="THETA_DGAIN" value="200"/>
<define name="THETA_IGAIN" value="200"/>
<define name="PSI_PGAIN" value="1350"/>
<define name="PSI_DGAIN" value="500"/>
<define name="PSI_IGAIN" value="10"/>
<!-- feedforward -->
<define name="PHI_DDGAIN" value="300"/>
<define name="THETA_DDGAIN" value="300"/>
<define name="PSI_DDGAIN" value="300"/>
</section>
|
NOTE: Compile and re-flash firmware to persist PID modifications
Sensor Analysis: Accel/Gyro/Mag
- Collect/capture scaled IMU messages during flight testing
- Use the "report_imu_scaled" tool to quickly analyze and generate metrics related to the captured flight data
./sw/tools/calibration/report_imu_scaled.py -p -s 100 -e 220 ../../paparazzi/var/logs/15_04_04__16_50_40.data
Accel (vibration)
ACCEL : Time Range(100.006 : 220.982) ax ay az Min [ -2.413 -2.507 -24.158] m/s2 Max [ 2.170 2.066 7.477] m/s2 Mean [ -0.019 -0.580 -9.549] m/s2 StDev [ 0.731 0.758 5.936] m/s2
Gyro
GYRO : Time Range(100.342 : 220.998) gp gq gr Min [-50.358 -47.924 -38.048] deg/s Max [ 51.574 47.000 25.668] deg/s Mean [ 0.661 0.019 -0.849] deg/s StDev [ 17.431 15.366 5.136] deg/s
Mag (EMI)
MAG : Time Range(100.022 : 220.934) mx my mz Min [ -0.534 -0.594 0.953] unit Max [ 0.089 0.000 1.079] unit Mean [ -0.201 -0.405 1.019] unit StDev [ 0.163 0.083 0.019] unit
Manual Flight (ATT)
First flights are conducted using RC control only. Any issues related to normal/manual flight should be addressed before attempting more autonomous forms of flight.
- Program Lisa MX manual flight mode: ATT -- AP_MODE_ATTITUDE_DIRECT
- GPS and Xbee Telemetry not required but are useful if mounted for monitoring flight characteristics with Paparazzi
- Note telemetry and GPS data while running manual test flights as a correlation exercise with respect to expected vs. observed data
- Verify all flight systems are stable, reliable and behaving as expected before attempting more advanced flight modes
Test Plan
- Prior to flight:
- Verify TX correctly enters ATT flight mode when the FLAP switch is toggled from 0 --> 1 and the ELEV D/R switch is 0
- Verify the idle arming of the motors using the throttle/yaw stick
- Verify the KILL mode assigned to the GEAR toggle switch. Toggling the GEAR switch from 1 (live) --> 0 (kill)
- Verify responsive throttle, pitch, roll and yaw behavior
Flight Log
- Saturday, 2015-02-21 : (Sunny/Calm) Flew both the LisaMX TeensyFly Quad and Hexa at the test field. Both aircraft are stable and responsive in manual flight mode.
- Monday, 2015-02-23 : (Sunny/Calm) Flew both the LisaMX TeensyFly Quad and Hexa at the test field. Once again, both aircraft flew stable and responsive in manual flight mode.
Hybrid Flight (HOVER)
- Program Lisa MX auto1 flight mode: H_ZH -- AP_MODE_HOVER_Z_HOLD
- Mount GPS and Xbee Telemetry for monitoring flight characteristics with Paparazzi
- Verify all flight systems are stable, reliable and behaving as expected before attempting fully autonomous flight modes
Test Plan
Reference Rotorcraft Control Loops
- Prior to flight:
- Verify TX correctly enters ATT flight mode when the FLAP switch is toggled from 0 --> 1 and the ELEV D/R switch is 0
- Verify TX correctly enters H_ZH flight mode when the FLAP switch is 1 and the ELEV D/R switch is toggled from 0 --> 1
- Wait for GEO_INIT to complete
- Switch to ATT mode, take off
- Establish a hover position about 5 meters above deck
- Switch from ATT mode to H_ZH mode (hover)
- Move throttle to 100% while in H_ZH mode
- Aircraft should now be in a 3D locked hover
- Verify flight characteristics based on the hover mode. Evaluate roll, yaw and pitch RC inputs.
Flight Log
- Saturday, 2015-02-28 : (Sunny/Wind 10mph) Flew the LisaMX TeensyFly Hexa at the test field and tried the above test plan. Test went as planned but the H_ZH behavior was not as expected. When switching from ATT to H_ZH, I had the throttle set to approx. 60%. The craft would stay stable for about 2-3 seconds and then deviate off axis and begin to accelerate in the direction of deviation. I could quickly recover the craft by switching back to ATT mode and to a more predictable response from the craft.
- Log/Data File: $PAPARAZZI_HOME/var/logs/zhz_t1_15_02_28__17_02_29
- Cover barometer sensor with foam/tape being sure not to plug either of the two holes
- Review flight log files (See Log Replay tool)
- Verify the hover throttle level and update the vertical guidance value in the airframe to reflect that value in decimal form. (i.e. 50% throttle = .5)
- NOTE: The CLIMB rate specified in the flight plan should also be reviewed to verify an appropriate throttle level
- Move HOME point more north in the field to allow for more flight buffer along the south side of the flight perimeter
- Move waypoints: CAM and 2 a little closer to HOME
- Re-flash LisaMX with updates
- Sunday, 2015-03-01 : (Sunny-Overcast/Calm) Flew the LisaMX TeensyFly Hexa at the test field. Successfully managed to fly in 3D Hover(H_ZH) for an extended period of time. Flew three batteries for an average of about 7 minutes each for a total in air time of about 21 minutes. Also attempted to switch into NAV mode from H_ZH to see how the aircraft would react. It looks like the vertical guidance parameter related to throttle still needs to be increased a bit. New target is .61 = 61% throttle for a nominal hover value; today's mission was at .58 = 58% throttle. The xbee telemetry module on the aircraft stopped functioning after the third flight putting an end to the days flight tests.
- Log/Data File: $PAPARAZZI_HOME/var/logs/zhz_t2_15_03_01__15_57_36
- Review flight log files (See Log Replay tool)
- Update nominal throttle value from .58 to .61 in the airframe file.
- Check xbee telemetry radio on the aircraft to understand why it is non-functioning.
- Used this process to un-brick the failed Xbee
- Elevate the GPS RX off of the aircraft deck to see if that improves the 3D lock characteristics of the flights.
- Review the vertical and horizontal guidance loops and the various inputs/behaviors.
- Investigate using real-time loop tuning of the vertical and horizontal guidance values from the Settings tool
- Re-flash LisaMX with updates
- Tuesday, 2015-03-03 : (Sunny/Calm) Measured IMU data for the purposes of vibration analysis. Monitor scaled_sensors using the Settings tool.
- Flight 1:
- Procedure: TeensyFly Hexa in ATT and H_ZH
- Log/Data File: $PAPARAZZI_HOME/var/logs/vibe_t1__15_03_03__13_13_42
- Flight 2:
- Procedure: Removed propellers from TeensyFly Hexa and suspended it in a stable string harness.
- Log/Data File: $PAPARAZZI_HOME/var/logs/vibe_t2_15_03_03__15_39_00
- Profile frame vibrations using the IMU scaled_sensor parameters in the log and real-time plotter tools: plot & plotter
- Look at the full spectrum of flight modes: takeoff, hover, climb, descend, pitch variants, roll variants, yaw variants
- Anything greater than 9.9m/s on the accelerometer is over the limit
- Balance props
- Re-flash LisaMX with updates
- Flight 1:
- Wed/Thur, 2015-03-04/05 : (Sunny/Calm) Two days devoted to understanding how the aircraft/TX/GCS interact when transitioning from Z_HZ to NAV mode.
- Observe how the aircraft behaves during the start engine/takeoff/standby NAV sequence
- Attempt multiple NAV takeoffs to become familiar with TX/GCS interaction
- Need to increase the climb rate on takeoff in NAV mode( change from .65 to .75). A little too slow/minimal based on observations.
- Increase the initial ground_alt from 45m to 46m
- Compile and Re-flash LisaMX with updates
- Work on fine tuning the hover in Z_HZ by capturing the tune_hover telemetry during the next set of flights
- Saturday, 2015-03-07 : (Sunny/Calm) Two flights to capture tune_hover telemetry. First flight in ATT and the second in H_ZH.
- Analyzed data based on pitch, yaw and roll for the respective RC/Command/Body parameters
- As expected, the H_ZH mode is less stable and requires more RC stick to maintain hover.
- Log/Data File: $PAPARAZZI_HOME/var/logs/hover_tune_15_03_07__10_55_42
- Plot: Hover Tune Data 2015-03-07 at 1.07.32 PM
- Sunday, 2015-03-08 : (Sunny/Calm) One flight with Piotr to get his thoughts on how well the craft is flying in ATT and H_ZH mode.
- In H_ZH, the copter is "toilet bowling" a bit probably due to magnetometer interference related to DC currents/motors on craft.
- Profile current using the mag_current_calibration process. Update the firmware and see if it performs better.
- In H_ZH, the copter is "toilet bowling" a bit probably due to magnetometer interference related to DC currents/motors on craft.
- Tuesday, 2015-03-10 : (Sunny/Calm) Successfully achieved an autonomous hover in H_ZH mode. Three flights, averaging about 7 minutes in stable H_ZH mode.
- Monday, 2015-03-16 : (Sunny/Calm) Attempted a take-off in NAV mode. The aircraft did not rise up with any authority and seemed to "wallow" around. Decided to try and fly a hover flight to make sure that aircraft was stable. Experienced drift in the hover flights and, ultimately, had to stop testing due to an Xbee telemetry module bricking.
- Recovered the bricked Xbee at home
- Considering developing improved vibration damping autopilot mounts
- Considering better/improve wiring/electronics placement to reduce magnetic interference
- Investigate vibration and electromagnetic interference mitigation strategies/solutions
- Rebuild the TeensyFly Hexa using vibration/electromagnetic mitigation techniques and repeat all the necessary calibration and test completed up to this point.
- NOTE: Archive the existing airframe configuration and assign it a revision number (i.e. teensyfly_hexa_lisa_mx_20.xml --> teensyfly_hexa_lisa_mx_20_v001.xml)
- Wednesday, 2015-04-15 : (Sunny/Calm) Autonomous hover in H_ZH mode is now reliable. Two flights, at about 8 minutes each in stable H_ZH mode. Time to move on to NAV testing.
Autonomous Flight (NAV)
- Define a thoughtful flight plan with the appropriate safety features for limiting flyaway risk
- Identify and take GPS measurements of the area to be used for testing. Also see Maps
- Incorporate GPS measurements/data into a flight plan and simulate until satisfied with behaviors
- Program Lisa MX to include a full navigation flight mode: AP_MODE_NAV (a.k.a. NAV)
- TBD: Establish a set of pre-flight system checks
Test Plan
- Prior to flight:
- Verify TX correctly enters ATT flight mode when the FLAP switch is toggled from 0 --> 1 and the ELEV D/R switch is 0
- Verify TX correctly enters H_ZH flight mode when the FLAP switch is 1 and the ELEV D/R switch is toggled from 0 --> 1
- Verify TX correctly enters NAV flight mode when the FLAP switch is toggled from 1 --> 0 and the ELEV D/R switch is 1
- Take off in ATT mode and fly to STDBY waypoint altitude and GPS coordinate
- Switch from ATT mode to H_ZH mode (hover). Verify that aircraft is maintaining the STDBY position.
- Switch to NAV (position hold). Verify that the aircraft is maintaining the STDBY position.
- In GCS, select Stay_s1 (stay and hold position at point S1). Verify that aircraft is holding at waypoint s1.
- Fly a line S1 -> S2 -> S1 and hold
- Switch over to ATT mode again and land
The flight plan only needs to have the geo init part, hold position S1 and the line blocks for this test.
Once comfortable, expand this test to include autonomous takeoff and landing and start to improve the flight plan.
Flight Log
- Thursday, 2015-04-16 : (Sunny/Winds: 6 mph) Flew a successful NAV flight that included an autonomous take-off as well. Full NAV take-off, STDBY, Hold S1, Line S1->S2->. Switched to ATT mode and landed. Flight was flow in a small area approximately 40' in diameter. Next step is to repeat this flight at the flying field and begin exploring other waypoint sets.
- Friday, 2015-04-17 : (Sunny/Winds: 15 mph) Successful NAV flight start-to-finish: take-off, stay at STDBY for 2 minutes, land at TD waypoint. Flight went really well.
- Monday, 2015-04-20 : (Sunny/Calm) Worked with Piotr to put TeensyFly through the complete set of flight blocks contained in the sample flight plan. Flew multiple flights. Discovered that the GPS unit has a tendency to wonder at times and took a "long time" to converge to an acceptable resolution <10m. Also added 10m of elevation to the waypoints to avoid any "Z drift" related GPS inaccuracies. Another anomaly related to initiating the circle CAM action was observed. It successfully completed the CAM nav block but upon entry the craft became unstable and seemed to be seeking to catchup with the carrot. The craft did recover on its own and complete the CAM nav action. See graph of carrot_psi vs. psi.
- Review of the flight replay is consistent with observed behavior as well as why it occurred; reference logged data for flight 15_04_20__16_23_52.
- Investigate GPS performance issues including checking the software init/config of the device as well as ground plane shielding.
- Friday, 2015-04-24 : (Overcast/Showers) Flew two separate flights exercising all the NAV blocks. Worked perfect.
- Monday, 2015-04-27 : (Sunny/Calm) Flew three separate flights exercising all the NAV blocks. Worked as expected. Grey and Esme were in attendance.
- Wednesday, 2015-04-29 : (Sunny/Calm) Testing survey_rectangle NAV blocks. Flew four flights: first flight had issues related to GPS wandering, remaining three flights worked well. The aircraft successfully navigated both survey_rectangle NS and LO blocks.
- May, 2015: Averaged about 20 flights a week during May. Focused on testing and refining flight plans as they relate to NAV flight. Tested survey and poly-survey as well as experiment with NIR aerial photography. The main focus was on refining the TeensyFly Hexa flights and behavior.
- Saturday, 2015-05-30 : (Sunny/Calm) Built up a new RacerPEX Quad for LisaMX testing and started the tuning process. Based on inflight early sensor analysis, vibration is an issue at this point with respect to flying reliably in NAV.
./report_imu_scaled.py -p -s 390 -e 580 ../../paparazzi/var/logs/15_05_30__20_39_39.data ACCEL : Time Range(390.069 : 580.945) ax ay az Min [-28.800 -19.145 -114.258] m/s2 Max [ 27.211 15.464 71.604] m/s2 Mean [ -0.008 0.187 -9.315] m/s2 StDev [ 9.117 4.667 32.285] m/s2 GYRO : Time Range(390.021 : 580.977) gp gq gr Min [-233.827 -204.256 -78.656] deg/s Max [261.635 187.917 79.621] deg/s Mean [ 0.405 0.885 1.340] deg/s StDev [ 79.282 57.455 27.960] deg/s MAG : Time Range(390.037 : 580.976) mx my mz Min [ -0.001 -0.504 -0.593] unit Max [ 0.717 0.250 0.676] unit Mean [ 0.306 -0.150 0.207] unit StDev [ 0.073 0.094 0.156] unit
- Sunday, 2015-05-31 : (Sunny/Calm) Removed props from motors on the RacerPEX to capture baseline vibration numbers. Based on the numbers it looks like unbalance props may be a large contributor to the vibration. Balanced the props and did a quick test flight. The aircraft is much more stable. Next up, a magnetic current calibration and collection of inflight vibration data post prop balancing. Completed current calibration and collected new inflight vibration data.
./report_imu_scaled.py -p -s 300 -e 570 ../../paparazzi/var/logs/15_05_31__19_59_59.data ACCEL : Time Range(300.055 : 570.945) ax ay az Min [-12.620 -6.953 -50.022] m/s2 Max [ 9.855 7.456 30.894] m/s2 Mean [ -0.108 0.315 -9.835] m/s2 StDev [ 2.890 1.880 10.825] m/s2 GYRO : Time Range(300.007 : 570.961) gp gq gr Min [-155.661 -117.739 -40.482] deg/s Max [140.973 104.506 45.238] deg/s Mean [ -0.621 1.782 0.382] deg/s StDev [ 34.829 32.607 15.166] deg/s MAG : Time Range(300.039 : 570.961) mx my mz Min [ 0.000 -0.705 0.250] unit Max [ 0.313 -0.042 0.982] unit Mean [ 0.165 -0.362 0.713] unit StDev [ 0.036 0.063 0.085] unit
- Sunday, 2015-07-05 : (Sunny/Calm) SiK radios testing for multiple aircraft flights. Initial tests with only two aircraft, TeensyFly Hexa and a RacerPEX Quad. Verify ground station interaction as well as simple arm/disarm capabilities. Currently both aircraft are bound to a single TX for non-flight testing that includes motors on/off. Interaction with the aircraft was non-deterministic and the radio configuration is probably the issue. Used two air telemetry radios and one ground telemetry radio all set to the same NET_ID. Guessing that the frequency hopping features were in contention between the two air radios as the ground radio tried to match. Plan of action is to create air/ground telemetry pairs, where each radio pair shares a unique NET_ID.
- Thursday, 2015-07-09 : (Sunny/Calm) Flashed latest SiK firmware (v1.9) to two of the telemetry radios. Set the NET_ID's for each air/ground telemetry pair to a unique IDs. Tested two air/ground pairs with respect to arming/disarming motors. All tests successful.
- Saturday, 2015-07-11 : (Cloudy/2-3mph winds) Reprogrammed and flew Neon RacerPEX Quad in the cul-de-sac in full NAV. Surprisingly good flight. Clean take-off, exercised waypoints and pano blocks, smooth landing. The best autonomous flight of the Neon RacerPEX Quad to date. Latest releases of PaparazziUAV seem to be more stable with respect to yaw behavior.
- Sunday, 2015-07-12 : (Partly Cloud/4-5mph winds) Successfully flew a single autonomous NAV mission with two aircraft: the Neon RacerPEX Quad and TeensyFly Hexa. Take-off, waypoint goals and landing all in NAV mode for both aircraft. Telemetry radios worked well and the aircraft were stable.
- Thursday, 2015-07-16 : (Sunny/4-5mph winds) Loaded the latest paparazzi/master firmware to test HooperFly branch integrations. Flew a TeensyFly Hexa and the Neon RacerPEX in ATT, HZ_H, and NAV. All systems are go.
- Thursday, 2015-07-19 : (Sunny/Calm) Flew RP-Quad and TF-Hexa combined NAV missions using the latest paparazzi/master firmware. All aircraft performed exceptionally well. Shot some video of the flights and hope to edit for display at OSCON 2015.
- Monday, 2015-09-07 : (Sunny/Calm) Flew TF-Quad and TF-Quad Elle in NAV, each on their own. Followed up with a tandem flight with both of them. Noticed a few GPS glitches in the flights. Based on these flights, it's a go to fly four aircraft.
- Tuesday, 2015-09-08 : (Sunny/Calm) Flew TF-Quad, TF-Quad Elle, TF-Hexa, and RP-Quad in NAV. Simple take-off, hover, land sequences. Flew four repetitions of the sequence on a single battery per aircraft. A few GPS issues occurred during the flights but nothing catastrophic where the mission had to be aborted. Simply switched to H_ZH mode for all craft and back to NAV to complete the sequence.
- Tuesday, 2015-09-09 : (Sunny/Calm) Spent some 1-on-1 time with the TF-Quad Elle. Initial NAV flight takeoff resulted in a hard enough impact to decouple the flight controller. That set the tone for the rest of the session. The aircraft was not consistent in it's flight. Decided to take it back to the shop and recalibrate all the sensors. Subsequent flight after calibration was much improved and the aircraft is very stable once again.
- Tuesday, 2015-09-10 : (Sunny/Calm) Two flight sessions at the test field. First session was focused on NAV flight of each aircraft that included TF-Quad, TF-Quad Elle, TF-Hexa, and RP-Quad. Noticed the TF-Quads losing altitude between set points. Need to up the vertical gains possibly. The second session was focused on a pair flight with TF-Quad Elle and TF-Hexa as well as testing vertical guidance changes for RP-Quad. Both flights went really well and managed to complete their missions without any major anomalies. The TF-Quad Elle needs to have it's vertical gains increased to reduce the sag between set points.
Mode Flight Rating
This is a simple rating system for the various HooperFly aircraft based on actual flights in ATT, H_ZH, and NAV mode. The goal is to develop a method for evaluating and minimizing risk when flying each aircraft in a multi-aircraft scenario. A grade is given to each flight mode for each aircraft based on observed flight and the ability to complete a set of flight blocks as defined in conf/flight_plans/HooperFly/rotorcraft_multiflight.xml
Mode Flight Ratings | |||
---|---|---|---|
Frame | ATT | H_ZH | NAV |
TeensyFly Quad | A | A | A- |
TeensyFly Quad Elle | A | A | A- |
TeensyFly Hexa | A | A | A- |
RacerPEX Quad | A- | A- | B+ |
RacerPEX Hexa | A | C | ? |
Notes
- 2015-08-25: Based on multiple flight tests and trying different AHRS settings, I've decide to use a vibration mount on the TeensyFly Quad as well as redesign the center plate for the RacerPEX Hexa. With respect to the TeensyFly Quad, the vibration mount should result in A grade flight ratings across all flight modes. The RacerPEX Hexa design is fine for ATT flying, it's actually quite a good flyer in that mode. The real issue is related to lower frequencies not dampening enough to allow the AHRS to work effectively. The gravity heuristic set to 0 improved it's stability but not enough to pursue NAV flight.
- 2015-08-26: Went to the field to fly the TeensyFly Quad to verify flight characteristics prior to the overhaul to add a vibration plate. Completed the tear-down and rebuild with the new vibration plate. Initial test flight in ATT and H_ZH look very promising(no GPS installed). Still need to run through the re-calibration of the acc, mag, and mag current. The expectation is that the aircraft will be much more stable in H_ZH and NAV modes.
- 2015-08-27: Flew the rebuilt TeensyFly Quad in ATT and H_ZH modes with the GPS installed. Very stable and predictable even before recalibration of the acc, mag, and mag current. Need to run through calibration and repeat field testing. Began the teardown of the RacerPEX Hexa in prep for center plate/mass redesign. Promote the ATT and H_ZH grades to A and A- respectively.
- 2015-08-28: Calibrated acc, mag and mag current for new TeensyFly Quad vibration mount rebuild. Really stable. Promoted H_ZH mode grade from A- to A. Still need to test the NAV functionality at the field. Expect it to perform at least as good as the TeensyFly Hexa.
Goals
- Autonomous hover (First Success: 2015-03-01, Stable/repeatable behavior: 2015-04-15)
- Autonomous takeoff (First Success: 2015-04-16, Stable/repeatable behavior: 2015-04-20)
- Autonomous landing (First Success: 2015-04-17, Stable/repeatable behavior: 2015-04-20)
- Fully autonomous execution and verification of the rotorcraft_basic flight plan (First Success: 2015-04-20)
- Includes routes, CAM nav, take-off, landing
- Survey flights (First Success: 2015-04-29)
- Integrated a nav_survey_rectangle_rotorcraft module supplied by Eduardo.(2015-04-28)
- Successfully simulated the module behaviors (2015-04-28)
- Flew both NS and LO patterns over 3 different flights (2015-04-29)
- Multiple aircraft flights
- Flew a two aircraft(Neon RacerPEX Quad/TeensyFly Hexa), fully autonomous mission (2015-07-12)
- Flew four aircraft(TF Elle, Quad, Hexa, RP Hexa), fully autonomous mission(2015-09-07)
- MultiUAV
- Formation/follower flights
Technical Explorations
- BBB Paparazzi Ground Station
- BBB OpenCV + Lisa/MX
- Potential Blender/Bullet Integrations
Paparazzi UAV Project Development and Compilation
Project Related
- Project Flow: Github Project Flow
- Project Pull Process: Creating Effective Pull Requests
- Project Software: Github
- Wiki: This Wiki
- Project Discussion: Gitter
Environment
OPAM
$ opam list Installed packages for 4.01.0: base-bigarray base Bigarray library distributed with the OCaml compiler base-threads base Threads library distributed with the OCaml compiler base-unix base Unix library distributed with the OCaml compiler camlp4 4.01.0 Camlp4 is a system for writing extensible parsers for programming language ivy 1.2.2 This OCaml-library interfaces the Ivy software bus C-library. lablgtk 2.18.2 OCaml interface to GTK+ ocamlfind 1.5.3 A library manager for OCaml ocamlnet 3.7.6 Internet protocols (http, cgi, email etc.) and helper data structures (mai xml-light 2.4 Xml-Light is a minimal XML parser & printer for OCaml $ opam switch system I system System compiler (4.02.0) 4.02.0 I 4.02.0 Official 4.02.0 release 4.01.0 C 4.01.0 Official 4.01.0 release -- -- 3.11.2 Official 3.11.2 release -- -- 3.12.1 Official 3.12.1 release -- -- 4.00.0 Official 4.00.0 release -- -- 4.00.1 Official 4.00.1 release $ opam switch 4.01.0 # To complete the configuration of OPAM, you need to run: eval `opam config env` $ eval `opam config env`
Command Line Tools
Ivyprobe
With the command line tool ivyprobe, you can see what is being sent over the IVY bus.
$ ivyprobe -help ivyprobe: illegal option -- h usage: ivyprobe [options] [regexps] -b bus defines the Ivy bus to which to connect to, defaults to 127:2010 -t triggers the timer test -n name changes the name of the agent, defaults to IVYPROBE -v prints the ivy relase number regexp is a Perl5 compatible regular expression (see ivyprobe(1) and pcrepattern(3) for more info use .help within ivyprobe -s bindcall active the interception of regexp's subscribing or unscribing -f regexfile read list of regexp's from file one by line -c msg1,msg2,msg3,... filter the regexp's not beginning with words
The following command will display all packages with all their content:
ivyprobe "(.*)"
You can constrain what ivyprobe displays by extending the regular expression for example, the following command will display raw accelerometer data that is being sent over the IVY bus
ivyprobe “[\d]+ IMU_ACCEL_RAW (.*)”
ivyprobe takes that regular expression and prints the match inside the (), by default it is only showing telemetry:*
Note: The packages/class names returned by ivyprobe can be used as input to the messages tool.
Messages
$ ./messages -help Usage: -b <ivy bus> Default is 224.255.255.255:2010 -c class name -help Display this list of options --help Display this list of options
GCS
$ ./gcs -help Usage: -auto_ortho IGN tiles path -b <ivy bus> Default is 224.255.255.255:2010 -center Initial map center (e.g. 'WGS84 43.605 1.443') -center_ac Centers the map on any new A/C -edit Flight plan editor -fullscreen Fullscreen window -maps_fill Automatically start loading background maps -maps_zoom Background maps zoomlevel (default: 20, min: 18, max: 22) -ign IGN tiles path -lambertIIe Switch to LambertIIe projection -layout <XML layout specification> GUI layout. Default: horizontal.xml -m Map XML description file -maximize Maximize window -mercator Switch to Mercator projection, default -mplayer Launch mplayer with the given argument as X plugin -no_alarm Disables alarm page -maps_no_http Switch off downloading of maps, always use cached maps -ortho IGN tiles path -osm Use OpenStreetMap database (default is Google) -ms Use Microsoft maps database (default is Google) -particules Display particules -plugin External X application (launched with the id of the plugin window as argument) -ref Geographic ref (e.g. 'WGS84 43.605 1.443') -speech Enable vocal messages -srtm Enable SRTM elevation display -track_size Default track length (500) -utm Switch to UTM local projection -wid <window id> Id of an existing window to be attached to -zoom Initial zoom -auto_hide_fp Automatically hide flight plans of unselected aircraft -help Display this list of options --help Display this list of options
Link
$ ./link --help Usage: -aerocomm Set serial Aerocomm data mode -audio Listen a modulated audio signal on <port>. Sets <port> to /dev/dsp (the -d option must used after this one if needed) -b <ivy bus> Default is 224.255.255.255:2010 -d <port> Default is /dev/ttyUSB0 -dtr Set serial DTR to false (deprecated) -fg Enable trafic statistics on standard output -noac_info Disables AC traffic info (uplink). -nouplink Disables the uplink (from the ground to the aircraft). -s <baudrate> Default is 9600 -hfc Enable UART hardware flow control (CTS/RTS) -local_timestamp Add local timestamp to messages sent over ivy -transport <transport> Available protocols are modem,pprz,pprz2 and xbee. Default is pprz -udp Listen a UDP connection on <udp_port> -udp_port <UDP port> Default is 4242 -udp_uplink_port <UDP uplink port> Default is 4243 -udp_port <UDP port> Default is 4242 -uplink Deprecated (now default) -xbee_addr <my_addr> (256) -xbee_retries <nb retries> (10) -xbee_868 Enables the 868 protocol -redlink Sets whether the link is a redundant link. Set this flag and the id flag to use multiple links -id Sets the link id. If multiple links are used, each must have a unique id. Default is 0 -help Display this list of options --help Display this list of options
Server
$ ./server --help Usage: -b Bus Default is 224.255.255.255:2010 -hostname <hostname> Set the address for the http server -http Send http: URLs (default is file:) -kml Enable KML file updating -kml_no_http KML without web server (local files only) -kml_port Port for KML files (default is 8889) -n Disable log -no_md5_check Disable safety matching of live and current configurations -replay_old_log Enable aircraft registering on PPRZ_MODE messages -help Display this list of options --help Display this list of options
Settings
$ ./settings --help Usage: -b <ivy bus> Default is 224.255.255.255:2010 -ac A/C name -help Display this list of options --help Display this list of options
Calibrate
$ python ./sw/tools/calibration/calibrate.py -help Usage: calibrate.py [options] log_filename.data Run calibrate.py --help to list the options. Options: -h, --help show this help message and exit -i AC_ID, --id=AC_ID aircraft id to use -s SENSOR, --sensor=SENSOR sensor to calibrate (ACCEL, MAG) -p, --plot Show resulting plots -a, --auto_threshold Try to automatically determine noise threshold -v, --verbose
Magnetometer Current Calibration
$ python ./sw/tools/calibration/calibrate_mag_current.py -help Usage: calibrate_mag_current.py [options] log_filename.data Run calibrate_mag_current.py --help to list the options. Options: -h, --help show this help message and exit -i AC_ID, --id=AC_ID aircraft id to use -p, --plot Show resulting plots -v, --verbose
Play
$ python ./sw/logalizer/play -help Usage: -b <ivy bus> Default is 224.255.255.255:2010 -d <port> Default is /dev/ttyUSB0 -o Output binary messages on serial port -s <baudrate> Default is 9600 -shfc Enable UART hardware flow control (CTS/RTS) -help Display this list of options --help Display this list of options
Plot/Logplotter
$ ./sw/logalizer/plot -help Usage: plot <log files> -export_csv Export in CSV in batch mode according to saved preferences (conf/%gconf.xml) -v Verbose -help Display this list of options --help Display this list of options $ ./sw/logalizer/logplotter -help Usage: logplotter <log files> -export_csv Export in CSV in batch mode according to saved preferences (conf/%gconf.xml) -v Verbose -help Display this list of options --help Display this list of options
Plotter
$ ./sw/logalizer/plotter -help Usage: -b <ivy bus> Default is 224.255.255.255:2010 -c <curve> Add a curve (e.g. '*:telemetry:BAT:voltage'). The curve is inserted into the last open window (cf -n option) -t <title> Set the last opened window title (cf -n option) -g <geometry> Set the last opened window geometry ( '500x500+100+100' ) -n Open another window for the next curves -m <size> Memory size (default 500) -u <time> Update time in s (default 0.50) -help Display this list of options --help Display this list of options
Report IMU Scaled
$ ./sw/tools/calibration/report_imu_scaled.py -h Usage: report_imu_scaled.py [options] log_filename.data Run report_imu_scaled.py --help to list the options. Options: -h, --help show this help message and exit -i AC_ID, --id=AC_ID aircraft id to use -p, --plot Show resulting plots -s START, --start=START start time in seconds -e END, --end=END end time in seconds -v, --verbose
Flying Robot Commander
The flying robot commander is a collection of RESTful web based applications for managing robotic flight using PaparazziUAV. It currently in beta development that includes live flight tests.
Currently the code base relies on the python RESTful framework Flask as well as the nginx web server. TODO: create a git repository under the Paparazz github for FRC related code. Here's a directory listing for the current set of files that constitute the FRC:
├── flightblock.py ├── frc.py ├── guidance.py ├── img │ ├── aircraft-landing.png │ ├── aircraft-take-off.png │ ├── arrow-with-circle-down.png │ ├── arrow-with-circle-left.png │ ├── arrow-with-circle-right.png │ ├── arrow-with-circle-up.png │ ├── arrows-rotate-clockwise.png │ ├── arrows-rotate-counterclockwise.png │ └── propeller.png ├── index.html ├── index_flightblock.html ├── index_guided.html ├── index_waypoint.html ├── url_test.sh └── waypoint.py
Architecture Overview
The current implementation is highly decoupled to facilitate research and rapid prototyping. As a common set of use cases/models/scenarios are identified, the ability to optimize/collapse behavior is easily achieved. The Flying Robot Commander(FRC) leverages a RESTful web based architecture along with a simple messaging passing protocol. One of the benefits of using a web based architecture is the ability to deliver the UI to any device that runs a modern browser.
The current UI consists of a set of html files: index.html, index_flightblock.html, index_guided.html, and index_waypoint.html along with image icons(contained in the img folder). The current implementation leverages javascript that submits http get requests to our flying robot commander request server.
Each http request is serviced by the request server: frc.py, currently implemented using a python Flask framework. Subsequently, the server spawns a related process: flightblock.py, guidance.py, or waypoint.py that publishes the appropriate message/messages to the ivy bus for consumption by PaparazziUAV aircraft and ground systems. Also included in the file system is a test file: url_test.sh that interacts directly with the http request server via curl commands for testing purposes.