Release 4.0.3, 21st January 2020
--------------------------------

This is a minor release with a few bug fixes and enhancements. The
changes since beta1 are:

 - fixed 3 missing semaphore waits
 - fixed checking for bouncebuffer allocation on microSD card IO
 - fixed incorrect param count
 - prevent failsafe action from overriding a VTOL land
 - fixed compass calibration failures with auto-rotation detection
 - fixed errors on STM32H7 I2C (affects CubeOrange and Durandal)
 - fixed a race condition in FrSky passthrough telemetry
 - fixed DSM/Spektrum parsing for 22ms protocols
 - added fixed yaw compass calibration method
 - re-generated magnetic field tables
 - ensure SERIAL0_PROTOCOL is mavlink on boot

The most important fix is for FrSky pass-through telemetry. Pass
through telemetry support had a race condition which could lead to the
flight controller generating a fault and rebooting. Until you are
running a firmware with the fix you should disable FrSky pass-through
telemetry by changing SERIALn_PROTOCOL from 10 to 0 on the where you
have SPort enabled.

Happy flying!

Release 4.0.2, 30th December 2019
---------------------------------

This is a minor release with a few bug fixes and enhancements. Changes
are:

 - fixed voltage scaling on CUAVv5Nano
 - fixed 10Hz NMEA output
 - fixed range check on RC channel selection
 - scale UART RX size with baudrate
 - default fast sampling enabled on first IMU for all capable boards
 - fixed bootloader flash alignment bug
 - fixed PWM 5 and 6 for MatekF765-Wing
 - support RM3100 compass on I2C
 - fixed error on AHRS level trim in preflight calibration
 - fixed handling of SB without BUSY on I2Cv1 devices
 - update bootloaders to be more robust to unexpected data
 - added new COMPASS_SCALE parameters and estimator to fix issue with
   compass in Here2 GPS
 - fixed issue with millis wrap on boards with 16 bit system timer
   (MatekF405, MatekF765, speedybeef4 and KakuteF4)
 - fixed i2c internal masks for several boards
 - fixed scaling of Blheli32 RPM conversion
 - changed to WFQ FrSky telemetry scheduler
 - enable LED pin on MatekF765
 - added params for Durandal battery monitor pins to param docs
 - updated bootloaders to reduce change of line noise stopping boot
 - fixed DMA error causing memory corruption in ChibiOS I2C driver
 - fixed param conversion from plane 3.9.x to plane 4.0.x for rangefinders
 - cope with UAVCAN GPS that doesn't provide AUX messages (Here2 GPS)
 - send temperatures for IMUs on mavlink
 - fixed I2C clock speed error on STM32H7
 - fixed CR/LF output error for NMEA output

Happy flying!

Release 4.0.1, 22nd November 2019
---------------------------------

This is a minor release with a few bug fixes and enhancements. Changes
are:

 - Added Q_ASSIST_ALT parameter which offers a way for VTOL assistance
   at low altitudes

 - fixed channels 5 and 6 on the MatekF765-Wing

 - fixed a bug with sending data on a full UART in mavlink parameter
   download

 - fixed use of UAVCAN primary GPS with UART secondary GPS

 - fixed failover between rangefinders of same orientation

 - added RC option for TAKEOFF mode

 - fixed logging of current on secondary battery monitors

 - fixed register checking on DPS280 for mRoControlZeroF7

 - added clock panel to OSD

 - fixed B/E led brightness on Pixhawk4

 - support RTCM injection to UAVCAN GPS for RTK support

 - fixed an RC failsafe bug that could cause the geofence to disable

 - fixed a bug in the SDP33 airspeed driver

Happy flying!


Release 4.0.1beta1, 17th November 2019
--------------------------------------

This is a minor release with a few bug fixes and enhancements for the
4.0 stable version.

Changes are:

 - Added Q_ASSIST_ALT parameter which offers a way for VTOL assistance
   at low altitudes

 - fixed channels 5 and 6 on the MatekF765-Wing

 - fixed a bug with sending data on a full UART in mavlink parameter
   download

 - added TECS_LAND_PMIN for constraining pitch minimum during landing

 - fixed use of UAVCAN primary GPS with UART secondary GPS

 - fixed failover between rangefinders of same orientation

 - added RC option for TAKEOFF mode

 - fixed logging of current on secondary battery monitors

 - fixed register checking on DPS280 for mRoControlZeroF7

 - added clock panel to OSD

 - fixed B/E led brightness on Pixhawk4

 - support RTCM injection to UAVCAN GPS for RTK support

Happy flying!

Release 4.0.0, 28th October 2019
--------------------------------

The final release of stable 4.0.0 has just one change from beta4,
which is to fix a bug in the new TAKEOFF flight mode.

Many thanks to everyone who has been testing the 4.0 release, and
special thanks to Henry for his fantastic work in bringing the wiki up
to date for this release!

Happy flying!

Release 4.0.0beta4, 19th October 2019
------------------------------------

A small set of improvements over beta3:

 - fixed time race in airspeed driver (thanks to liang)
 - fixed uninitialsed bytes in send_named_float()
 - added TAKEOFF flight mode

Happy flying!

Release 4.0.0beta3, 7th October 2019
------------------------------------

A small set of improvements over beta2:

 - added Pixhawk1-1M build (for Pixhawk1 with 1M flash bug)
 - fixed a bug handling UART corruption for u-blox driver
 - fixed a CAN ISR latency bug for STM32H7 boards
 - fixed FMU channel mask to correctly obey SERVO_RATE
 - fixed use of DMA on Pixracer WiFi UART
 - reduced flash size and memory usage with EKF optimisation changes
 - fixed a BLHeli bug when no motors enabled
 - raise default LOG_FILE_BUFSIZE on boards with more memory
 - fixed units of custom AHRS orientations
 - fixed LOG_FILE_DSRMROT with delayed log stop on disarm
 - fixed block flash logging
 - fixed SLCAN bug on Pixhawk1 and fmuv2
 - added check for airspeed and Z controller active for hover throttle learning
 - enable hover learning by default in quadplanes

Happy flying!

Release 4.0.0beta2, 24th September 2019
---------------------------------------

A small set of improvements over beta1:

 - Added autoranging to current and voltage in OSD
 - fixed issue with motors spinning up in quadplane landing when below min lidar range
 - fixed empty pre-arm warning string in EKF
 - added code to cope with SCHED_LOOP_RATE being above max achievable rate
 - fixed delay on oneshot125 channels which was limiting loop rate
 - fixed use of uninitialised variable in mag fusion in EKF3

Happy flying!

Release 4.0.0beta1, 16th September 2019
---------------------------------------

The 4.0.0 release of ArduPilot plane is a major release. It contains
thousands of changes, some large and some small, developed over the
last year. Key changes include:

 - support STM32H7 MCUs (Durandal and CubeOrange currently)
 - QAUTOTUNE mode
 - in-flight compass calibration
 - support for dynamic node allocation server in UAVCAN
 - support for SLCAN pass-through
 - support for up to 10 battery backends
 - support for MAVLink message intervals
 - initial support for onboard Lua scripting
 - automatic remount of microSD cards
 - support for additional RC input on any UART
 - support for WS2812 LEDs
 - new simulators: Morse, Webots, SilentWings, Scrimmage
 - added AFS_MAX_RANGE for limiting vehicle range
 - added support for @READONLY in embedded parameter lists
 - added SERIALn_OPTIONS for inversion, half-duplex and swap
 - added support for reversible blheli32 ESCs
 - added GPS timing jitter correction
 - added Sum battery backend type
 - added fuel flow battery battery types
 - support landing gear control based on altitude
 - added loiter-to-alt approach for quadplane landing
 - added REVERSE_THROTTLE RCn_OPTION
 - added crow brakes for differential spoilers
 - support newer versions of JSBSim in SITL
 - added RObotis servo support
 - added UAVCAN servo support
 - added failure timer for quadplane forward transitions
 - added KDECAN and ToshibaCAN support
 - added RM3100 compass support
 - support new Invensense IMUs
 - many small improvements to tailsitter support
 - added QACRO mode
 - improved watchdog logging
 - improved EKF compass handling based on WMM data
 - added AP_Perip CAN peripheral firmware system
 - added IBUS R/C input support
 - support yaw from GPS
 - support DLVR I2C airspeed sensors
 - fixed FrSky telem packet loss
 - fixed SUMD for 16 channels via pulse input
 - support UAVCAN buzzers, safety switch, safety LED and airspeed
 - added NTF_BUZZ_VOLUME parameter

There are hundreds of other changes as well. I expect the beta period
for this release to be quite long, and I would greatly appreciate as
many test reports as possible. Please submit test results both for
successful and unsuccessful tests!

Happy flying!


Release 3.9.11, 15th September 2019
-----------------------------------

This release fixes two bugs:

 - fixed an uninitialised byte in UAVCAN compass device IDs that
   caused users to need to re-calibrate UAVCAN compasses

 - fixed an I2C interrupt storm that could potentially cause a
   crash. This crash has never been shown to happen in our stable
   releases, but is being fixed as a preventative measure

Release 3.9.10, 26th August 2019
-------------------------------------

This releases includes an important fix to IOMCU handling that fixes a
problem where motors attached on the AUX channels can stop momentarily
due to an error in the UART handling to the IOMCU.

Release 3.9.9, 4th August 2019
------------------------------

New plane stable release with two fixes over beta4:

 - fixed setting file timestamps with u-blox F9 GPS (thanks to Martin Sollie)
 - fixed return value of LightWare serial rangefinder driver when out of range

Release 3.9.9beta4, 31st July 2019
----------------------------------

Minor update over beta3:

 - fixed an issue with handling baro failure on CubeBlack
 - forced INS_USE3=1 on CubeBlack when first two IMUs are enabled

Release 3.9.9beta3, 28th July 2019
----------------------------------

Minor update over beta2:

 - fixed issue with setting of EKF origin in GPS modes
 - added support for MS4525 on 4th I2C bus
 - added delay on LW20 I2C probe


Release 3.9.9beta2, 11th July 2019
----------------------------------

Minor update over beta1:

 - added mRoControlZeroF7 support
 - enabled IO pass-thru on FMU failure on ChibiOS builds

Release 3.9.9beta1, 8th July 2019
---------------------------------

This is a minor release with some important safety and flight
improvement fixes.

Key changes are:

 - learn EKF biases even for inactive IMUs, making IMU failover much  more robust

 - EKF uses earth magnetic field model to reduce in-flight compass errors

 - EKF switches to first healthy IMU when disarmed

 - IMU fix for dropped samples during high CPU usage

 - added support for Ublox F9 GPS

 - switched to ChibiOS I/O firmware for ChibiOS builds to support Spektrum bind

 - CUAVv5 Nano LED fix

 - fixed watchdog trigger on simple accelcal

 - fixed drift of AMSL estimate when disarmed

 - fixed rate integrator buildup when rate control disabled

Happy flying!

Release 3.9.8, 26th April 2019
------------------------------

This is a minor release with some important safety fixes. The fixes
relate to two issues:

 - implement hardware support to reset the CPU if a software or hardware
   failure causes the main loop to stop running

 - fixed a bug in the handling of a failure of the primary IMU in a
   multi-IMU system

The first fix relates to a flyaway that happened on a RadioLink
mini-pix flight controller. The mini-pix suffered a major hardware
failure that led to the main loop stopping. As the mini-pix does not
have an IO co-processor this resulted in fixed control surface outputs
and fixed motor output, which led to a flyaway. The plane was found,
but we want to ensure that if this ever happens again that the motor
will stop and that the pilot will regain control of the aircraft.

The fix is to enable an option in the STM32 processor called
"Independent Watchdog" (IWDG). The IWDG provides a mechanism to
automatically reset the CPU on software or hardware failure resulting
in the main loop stopping. When this happens the hardware also
provides a mechanism for ArduPilot to know that it is booting after a
watchdog reset, in which case it does the following:

 - if the ChibiOS bootloader has been updated then it skips the normal
   5 second delay in the bootloader

 - it skips baromoter, gyro and airspeed calibration, allowing for
   very fast boot

 - the home position and attitude estimate of the vehicle is restored
   to a point less than 0.3 seconds before the lockup

 - the pilot regains full control, and if the pilot requests arming
   then arming checks are automatically bypassed

We have tested this on an aircraft with a deliberately induced full
CPU lockup. The aircraft recovered and flew normally within 3 seconds
of lockup, with the pilot having full control. This was with a board
with no IOMCU. A board that does have an IOMCU (such as a Hex cube)
would have had full manual control on FMU lockup without the changes
in this new release. For those boards with IOMCU the advantage of the
new release is that the pilot will regain the ability to use
stabilised and auto modes (including RTL) after a full CPU lockup.

The additional protections of the IWDG support only apply to the
ChibiOS builds. The IWDG is not supported in NuttX builds.

The second key fix in this release relates to IMU failure on multi-IMU
systems. If the IMU that is associated with the currently active EKF
lane failed then the fixed wing attitude controller would lose
attitude control and the aircraft will crash unless the pilot takes
manual control. This has been fixed to ensure that IMU failover
operates correctly.

Other changes in this release:

 - added support for the CUAVv5Nano board

 - added retries to flash storage of parameters

 - fixed pullups on some fmuv3 based boards that lack hardware pullups
   on sdcard data lines

 - fixed fallback to microSD for parameter storage if a board with
   FRAM storage has a failed FRAM device

 - added a specific check for hw failure regarding the recent
   CubeBlack safety bulletin

 - fixed the power flags for brick2 on fmuv5

Happy flying!


Release 3.9.7, 1st April 2019
-----------------------------

This is a minor release to fix a single important bug in speed/height
handling. The bug was in the TECS (total energy control system) and
could cause a sustained pitch down due to a transient glitch in
airspeed demand resulting in a large negative pitch integrator.

The log that found the bug was of a quadplane in CRUISE mode, and
resulted in the aircraft forcing nose down for long enough to crash.

The fix includes both protections for the pitch integrator and a fix
for the cause of the transient in airspeed demand affecting the TECS
demanded airspeed.

Happy flying!


Release 3.9.6, 4th March 2019
-----------------------------

This is a minor release with some important fixes for VTOL landings
and EKF handling of compass switching.

 - fixed throttle slew on dual-motor planes

 - handle VTOL landings with incorrect height (or failed rangefinder)

 - fixed EKF alt datum reset on barometer reset

 - probe all I2C buses for rangefinders (fixes I2C lidar on boards
   with more than 2 I2C buses)

 - fixed lightware serial detection for newer lidars such as LW20

 - fixed motor relax code on VTOL landing to prevent motors powering
   up after touchdown

 - fixed forward motor in quadplane landing transition to allow motors
   when landing at a height lower than takeoff height

 - fixed throttle mix handling for VTOL planes on descent

 - use WP altitude for height of ground in VTOL landing, allowing for
   good landings at heights well above or below takeoff height

 - fixed EKF compass switching with 3 compasses

 - fixed mini-pix UART order to match case markings

 - added generated git hash to apj file

 - fixed apj generation to not change based on time of build

 - fixed thread creation to use any heap, fixing a bug on
   MatekF405-Wing with a compass

Happy flying!


Release 3.9.5, 27th January 2019
--------------------------------

This is a minor update over the 3.9.4 release. This release includes
the following changes:

 - fixed orientation of 2nd IMU for OmnibusF7V2

 - fixed LEDs on Pixhawk4 and Pixhawk4-mini

 - fixed safety switch on Pixhawk4-mini

 - improved robustness of microSD support under ChibiOS

 - support insert of a microSD after boot but before logging starts
   under ChibiOS

 - added BRD_SD_SLOWDOWN parameter to allow microSD cards to be run at
   a lower clock to improve reliability

 - fixed VTOL takeoff in quadplanes to ignore latitude/longitude in
   the mission item and always takeoff vertically

 - added CubePurple (also known as PH2Slim) builds

 - added DrotekP3Pro builds

 - RC protocol decoding for SRXL, SUMD and ST24 extended to all boards
   including pixracer and ChibiOS-only boards

 - fixed CAN on Pixhawk4

 - fixed EKF yaw reset in quadplanes

 - fixed bug handling corruption of DSM RC protocols

 - fixed internal amber LED on CubeBlack

Happy flying!


Release 3.9.4, 10th December 2018
---------------------------------

This is a minor update over the 3.9.3 release. Changes are:

 - fixed a critical bug in SBUS handling on the Pixhawk4

 - fixed bugs in benewake rangefinder driver

 - added support for garmin LidarLite-V3HP

 - improved error handling for TeraRanger Lidar

 - fixed a bug in DSM handling for more than 7 channels on some boards

 - fixed default voltage and current scaling for Pixhawk4 and PH4-mini

Happy flying!

Release 3.9.3, 10th November 2018
---------------------------------

The ArduPilot development team are delighted to announce the 3.9.3
stable release of the ArduPilot plane code. This release includes a
number of small but important fixes over 3.9.2:

 - fixed error handling for corrupt RC input that could lead to a
   crash in unusual circumstances

 - fixed a race condition in IOMCU event startup that could lead to
   the safety not being disabled on boot with BRD_SAFETYENABLE=0

 - ensure surface speed scaling covers full range of configured
   airspeeds

 - added builds for new boards F35Lightning, omnibusf4v6, mRoX21-777

 - updated GPIO numbers on AUX pins on all boards to be consistent
   with docs

 - updated KakuteF7 UARTs and buzzer

 - added ESC sensor uart on OmnibusNanoV6

 - fix for Benewake rangefinder at long ranges

 - prevent attempts to erase dataflash logs while armed

Many thanks to the people who tested this release!

Happy flying!


Release 3.9.3beta1, 6th November 2018
-------------------------------------

This is the first beta release for the 3.9.3 firmware. This release
has the following changes over 3.9.2:

 - fixed error handling for corrupt RC input that could lead to a
   crash in unusual circumstances

 - fixed a race condition in IOMCU event startup that could lead to
   the safety not being disabled on boot with BRD_SAFETYENABLE=0

 - ensure surface speed scaling covers full range of configured
   airspeeds

 - added builds for new boards F35Lightning, omnibusf4v6, mRoX21-777

 - updated GPIO numbers on AUX pins on all boards to be consistent
   with docs

 - updated KakuteF7 UARTs and buzzer

 - added ESC sensor uart on OmnibusNanoV6

Happy flying!


Release 3.9.2, 10th October 2018
--------------------------------

The ArduPilot development team are delighted to announce the 3.9.2
stable release of the ArduPilot plane code. This release includes a
number of small but important fixes over 3.9.1.

The changes since the 3.9.2beta3 release are:

 - fixed a DShot send bug that could lead to board lockup

 - fixed RGB LED display on Pixracer under both NuttX and ChibiOS

 - fixed safety switch option handling bug

Thanks for the bug reports and testing by all users for the 3.9.2beta
series!

Happy flying!


>>>>>>> a9d5581378... Plane: updated release notes for 3.9.8-beta1
Release 3.9.2beta3, 20th September 2018
---------------------------------------

The is the third beta release of the plane 3.9.2 stable release. It
contains a small number of fixes:

 - fixed clearing of loiter pilot acceleration targets for quadplanes

 - fixed handling of duplicate rotations for COMPASS_AUTO_ROT

I expect this will be the last beta release before 3.9.2

Happy flying!

Release 3.9.2beta2, 15th September 2018
---------------------------------------

The is the second beta release of the plane 3.9.2 stable release. It
contains a number of important bug fixes.

 - implement failsafe PWM in IOMCU, for AFS failsafe when FMU dies

 - handle reversed channels correctly in AFS failsafe

 - fixed twin motor plane handling in AFS failsafe

 - fixed a bug in Q_ASSIST_SPEED support for tiltrotors that could
   lead to zero throttle when assistance triggers.

 - lower default PTCH2SRV_D to 0.04 after reports of oscillation on
   small flying wings

 - added speed scaler reduction in Q modes when at low airspeed

 - fixed synthetic airspeed estimation to be along +ve X axis

 - fixed relaxing of VTOL attitude controller on transition (thanks to
   Leonard Hall)

 - default COMPASS_AUTO_ROT to 2 on all boards

 - fixed UART speed rounding bug that caused failure at high board
   rates

 - fixed a short glitch in position control on quadplane transition
   (many thanks to Leonard for lots of help with this)

 - fixed RSSI voltage from IOMCU

Thanks to everyone who has contributed, and please report all test
results with this beta.

Happy flying!

Release 3.9.2beta1, 12th September 2018
---------------------------------------

The is the first beta release of the plane 3.9.2 stable release. It
contains a number of important bug fixes.

 - fixed a quadplane bug that could cause large attitude instability
   during takeoff if the aircraft does not have enough power to climb
   to its target height. Thanks to Leonard for the fix.

 - fixed a bug that prevented dead-reckoning working on GPS loss.

 - fixed an ADC bug that prevented some boards from using all of their
   analog input. Thanks to vierfuffzig for reporting!

 - fixed a bug in advanced failsafe support that left RC input to
   throttle active after termination. Thanks to Michael Thomas for
   finding this bug.

 - fixed use of OLED displays on the first I2C bus on systems with two
   I2C buses

Thanks to everyone who has contributed, and please report all test
results with this beta.

Happy flying!


Release 3.9.1, 31st August 2018
-------------------------------

The ArduPilot dev team are delighted to announce a new stable plane
release. This is a minor release, but does include some important
fixes.

The only change over the 3.9.1beta3 release is an increase in the USB
buffer size to give faster log download over USB.

Other important changes from the 3.9.1beta releases include:

 - updated to default values for some tuning parameters

 - fixed a critical safety issue found by Oliver Volkmann, and fixed
   by Michael du Breuil. The problem could lead to quadplane motors
   starting on reboot

 - fixed a bug where RC failsafe could lead rudder input stuck at the
   last rudder input value in some modes. Thanks to Michael du Breuil
   for the fix

 - improved DShot and BLHeli-passthrough support, fixing errors
   reported by BLHeli32 ESCs and making using BLHeliSuite32 much more
   reliable

 - new tonealarm system, bringing the tones produced under ChibiOS and
   Linux HALs in line with tones produced under the HAL_PX4 HAL.

 - added a new LED driver for the NCP5623 LED

 - fixed delay caused by parameter writes in AP_Stats

 - fixed default RSSI input pin on some boards

 - fixed the incorrect display of "no io thread heartbeat" message

 - fixed microSD support on some boards due to running out of DMA
   capable memory

Many thanks to everyone who has been testing the beta releases.

Happy flying!


Release 3.9.1beta3, 23rd August 2018
------------------------------------

This is the third beta for the 3.9.1 release, which is a minor
update over 3.9.0. This release includes the following changes:

 - fixed a critical safety issue found by Oliver Volkmann, and fixed
   by Michael du Breuil. The problem could lead to quadplane motors
   starting on reboot

 - fixed a bug where RC failsafe could lead rudder input stuck at the
   last rudder input value in some modes. Thanks to Michael du Breuil
   for the fix

 - raised OSD thread stack size to 1024 (needed for new OSD items)

Thanks to everyone who is testing the 3.9.1beta series!

Release 3.9.1beta2, 17th August 2018
------------------------------------

This is a the second beta for the 3.9.1 release, which is a minor
update over 3.9.0. This release includes the following changes:

 - increased default buffer sizes in dataflash for some boards

 - fixed a bug with small dataflash buffers

 - updated OSD with new items: hdop, temperature, waypoint, xtrack,
   flight distance, flighttime, efficiency (thanks to Hwurzburg,
   vierfuffzig and sh83).

 - reduced memory usage in serial buffers

 - adjusted some default parameters to give a better first flight
   experience for more users.

The default parameter changes are:

 - RLL2SRV_P from 0.6 to 1.0
 - RLL2SRV_I from 0.1 to 0.3
 - RLL2SRV_D from 0.02 to 0.08
 - PTCH2SRV_P from 0.6 to 1.0
 - PTCH2SRV_I from 0.1 to 0.3
 - PTCH2SRV_D from 0.02 to 0.08
 - TECS_PITCH_MAX from 0 to 15
 - NAVL1_PERIOD from 20 to 17

The PID parameter changes won't affect anyone who has done some
tuning, but will make the first flight experience for a new user be a
lot better for nearly all aircraft. Paul and I decided on the values
based on experience with users flight logs, plus the experience users
have had with AUTOTUNE mode.

Please report testing results!

Happy flying

Release 3.9.1beta1, 15th August 2018
------------------------------------

This is a the first beta for the 3.9.1 release, which is a minor
update over 3.9.0. This release includes the following changes:

 - improved DShot and BLHeli-passthrough support, fixing errors
   reported by BLHeli32 ESCs and making using BLHeliSuite32 much more
   reliable

 - new tonealarm system, bringing the tones produced under ChibiOS and
   Linux HALs in line with tones produced under the HAL_PX4 HAL.

 - added a new LED driver for the NCP5623 LED

 - fixed delay caused by parameter writes in AP_Stats

 - fixed default RSSI input pin on some boards

 - fixed the incorrect display of "no io thread heartbeat" message

 - fixed microSD support on some boards due to running out of DMA
   capable memory

Given the changes are quite small, I hope to make this a fairly short
beta cycle. Please test it and report both success and failure.

Happy flying!

Release 3.9.0, 6th August 2018
------------------------------

The ArduPilot development team is delighted to announce a new stable
release of plane, version 3.9.0.

For those of you who have been testing the 3.9.0beta releases then you
won't see any surprises here. That are no changes since
3.9.0beta6. Also, many thanks for testing the betas!

For those of you coming from the last stable 3.8.5 release there are a
lot of changes. For a start, this is the first release to support both
the ChibiOS RTOS on STM32 boards and the NuttX RTOS. Previously stable
releases only used the NuttX RTOS. The ArduPilot project is moving to
ChibiOS for future releases, and we expect to drop support for the
NuttX builds for the next major stable release (which will probably be
called 3.10.0).

When you install the 3.9.0 release on board such as a Pixhawk1, Cube
or Pixracer you have a choice of which build to use. Choosing ChibiOS
will give you better performance and some very nice new
features. Choosing the NuttX (also known as "PX4" builds) will get you
the same base that we have been using for years.

There are a few features that are in the NuttX build but not yet in
the ChibiOS build, in particular the ChibiOS build does not yet
support PWM based rangefinders. That will be fixed in a future
release.

This release has a lot of new features. Some of the most important
ones are:

 - DShot support for controlling ESCs
 - BLHeli pass-thru support for ESC configuration
 - automatic compass orientation on calibrating compasses
 - improved VTOL flight code, with improved transition support and loiter
 - support for Devo telemetry output
 - new battery monitoring system, with more flexible failsafes
 - built-in OSD support for boards with a MAX7456 OSD device

In addition, this release supports a lot of new flight boards,
including:

 - AirbotF4
 - F4BY
 - KakuteF4
 - KakuteF7
 - MatekF405
 - MatekF405-Wing
 - mindpx-v2
 - mini-pix
 - Omnibusf4pro
 - Omnibusf7V2
 - Pixhawk4 and Pixhawk4-mini
 - CUAVv5
 - revo and revo-mini
 - sparky2

We also now have custom ChibiOS based builds for some existing boards,
including:

 - CubeBlack
 - mRoX21
 - Pixhawk1
 - Pixracer

This means you now have a lot more choice in selecting a flight board
to use with ArduPilot.

This release was made possible thanks to contributions from dozens of
volunteer developers in the dev team. In total there are over 5
thousand changes since the 3.8.5 release. Special thanks to:

 - Siddharth Purohit
 - Tom Pittenger
 - Randy Mackay
 - Michael du Breuil
 - Peter Barker
 - Mark Whitehorn
 - Paul Riseborough
 - Francisco Ferreira
 - Jonathan Challinger
 - Leonard Hall
 - Alexander Malishev
 - Nathan E
 - Marco Robustini
 - Luis Vale Gonçalves
 - night-ghost
 - Patrick José Pereira
 - Lucas De Marchi
 - Eugene Shamaev
 - Philip Rowse
 - Amilcar Lucas
 - Kelly Foster
 - Fnoop
 - Pierre Kancir
 - Stephen Dade
 - Jaime Machuca
 - vierfuffzig
 - Henry Wwurzburg
 - Malcolm Churn
 - Holger Steinhaus

We hope you enjoy flying this release as much as we enjoyed making
it. Happy flying!

Release 3.9.0beta6, 30th July 2018
----------------------------------

This is the sixth in a series of beta releases for plane 3.9.0. I aims
to be the final beta.

Changes in this release are:

 - added Q_TAILSIT_THSCMX parameter for tailsitters (thanks to IamPete)
 - added KakuteF7 bootloader
 - fixed arming error with trim on unusued RC channels
 - fixed microSD support on KakureF7 and OmnibusF7V2 (thanks sh83)
 - fixed VL53L0X rangefinder driver
 - added Pixhawk1 ChibiOS build
 - fixed update rate for servos in tailsitters
 - set COMPASS_AUTO_ROT to 2 for most boards
 - improved OmnibusF7V2 support
 - support all external compasses on mini-pix
 - clear COMPASS_DEV_ID for unused compasses

Happy flying!

Release 3.9.0beta5, 19th July 2018
----------------------------------

This is the fifth in a series of beta releases for plane 3.9.0. It
fixes two important bugs over 3.9.0beta4

 - fixed RC failsafe on IOMCU when a SBUS receiver is set to "hold" mode
 - allowed for RC override failsafe to support holding override value
   on timeout

Thanks to Jon and Michael for the failsafe fixes!

It also includes two smaller changes:

 - updated F4BY board id, and added F4BY to autobuild list
 - fixed UARTD for px4-v1 build

Release 3.9.0beta4, 18th July 2018
----------------------------------

This is the fourth in a series of beta releases for plane 3.9.0. It is
a major release, with a lot of changes.

 - fixed compass detection on pixracer
 - greatly improved OSD support
 - fixed ARMING_REQUIRE=2 support (thanks Marco!)
 - added automatic compass orientation support
 - added probe for all external compasses on new ChibiOS boards
 - fixed arming with compass disabled
 - fixed flow control on F7 based boards
 - fixed prealloc of DMA bouncebuffers
 - added board specific builds for mRoX21 and Pixracer
 - fixed mRoX21 IMU detection
 
Many thanks to all who contributed to this release, and our beta testers!

Release 3.9.0beta3, 11th July 2018
----------------------------------

This is the third in a series of beta releases for plane 3.9.0. It is
a minor update to beta2

Changes are:

- fixed nul termination of system ID on ChibiOS
- added PH4-mini support
- fixed compass orientation on fmuv5
- matched BRD_PWM_COUNT between px4-v3 and fmuv3
- fixed MatekF405-Wing compass orientation
- backup storage to microSD if possible


Release 3.9.0beta2, 6th July 2018
---------------------------------

This is the second in a series of beta releases for plane 3.9.0. It is
a major release, with a lot of changes.

 - Builtin OSD support on boards with MAX7456 OSD device
 - fixed throttle display on twin-engine planes
 - improved timing in mavlink remote sensors
 - added many more board types to autobuild
 - fixed airspeed reporting for unhealthy sensors
 - fixed log timestamps on ChibiOS
 - added force arm option
 - added fmuv5 support
 - added CubeBlack build
 - added ESC telemetry virtual battery
 - added SERIAL6 on fmuv4 and fmuv5
 - added MatekF405-Wing support
 - added AP_Bootloader
 - support bootloader update over MAVLink
 - enable sdcard on several F4 boards
 - fixed serial number logging on ChibiOS boards
 - fixed revo-mini compass orientation

Many thanks to all who contributed to this release, and our beta testers!

Release 3.9.0beta1, 21st May 2018
---------------------------------

This is the first in a series of beta releases for plane 3.9.0. It is
a major release, with a lot of changes.

The main changes are for supporting two new HALs (hardware abstraction
layers). One is the port to ChibiOS and the second is the F4Light HAL.

These ports bring a host of new flight board options, and a lot of new
features. Some highlights include:

 - support for many inexpensive STM32F4 based flight boards

 - support for DShot output for BLHeli ESCs, including ESC telemetry
   feedback

 - new battery monitoring system with more flexible failsafe options

 - support for Devo telemetry output

 - a new position hold library for multicopters which improves
   quadplane VTOL support

This release is fully compatible with previous releases, and users
should not notice a significant difference in flight. The focus of the
beta testing will be on ensuring that the new flight board support is
stable.

Happy flying!

Release 3.8.5, 25th April 2018
------------------------------

This release includes small bug fixes and one safety fix. The changes
are:

 - fixed an issue where the external safety button can activate in
   flight on some boards, causing them to crash. A new parameter
   BRD_SAFETYOPTION is added which controls the behaviour of the
   safety button. The default is to de-activate the safety button when
   armed.

 - fixed default orientation of ICM-20948 compass for Here GPS

 - added support for dual airspeed sensors

 - added support for the SDP33 airspeed sensor. This is still
   considered experimental. There are reports of it underestimating
   the aircrafts speed at higher altitudes.

 - add support for the MS5525 airspeed sensor on multiple I2C
   addresses. Two new values of the ARSDP_TYPE are introduced (4 and
   5) for specific I2C addresses. This allows you to deconflict the
   MS5525 from a MS5611 barometer on the same bus.

Release 3.8.4, 9th January 2018
-------------------------------

This is a minor release with just two small changes.

The first change is to fix a timing bug in the MS5525 airspeed sensor
driver. That bug was causing unreliable airspeed sensing. Thanks to
David Ingraham for providing logs that helped find the issue.

The second change is to fix transitions in AUTO mode in
tailsitter. The transition for tailsitters was causing instability on
transition from vertical takeoff to forward flight.


Release 3.8.3, 13th November 2017
---------------------------------

This is a minor release with a number of important bug fixes and some
small feature additions.

The most important general fixes are for an I2C device detection bug
and fixing the implementation of MANUAL_RCMASK.

There are quite a number of small fixes in lots of areas, plus big
improvements to the handling of tailsitter transitions.

Another significant change is to the handling of transitions from RTL
to QRTL when Q_RTL_MODE=1. We now transition to QRTL at a distance
which is the maximum of RTL_RADIUS and a distance calculated based on
a new Q_TRANS_DECEL "transition deceleration" parameter. That allows
you to tune the amount of deceleration you want in the transition
according to how much drag your quadplane has. This also means it
automatically accounts for wind speed and approach speed in
calculating the transition point.

We have also added a new Q_OPTIONS parameter which is a bitmask of
option flags to control quadplane behaviour. We have three options so
far. The first is to allow for keeping the wings within
LEVEL_ROLL_LIMIT degrees during transitions, for users that prefer
transitions to be kept level. The 2nd and 3rd options are to treat
NAV_TAKEOFF as NAV_VTOL_TAKEOFF and NAV_LAND as NAV_VTOL_LAND in
quadplane missions, so that you can use GCS software that doesn't know
about the VTOL takeoff and land commands.

 - allow vertical takeoffs in GUIDED mode with Q_GUIDED_MODE=0

 - fixed a bug in implementation of MANUAL_RCMASK

 - eliminate airspeed positive bias after offset zero

 - prevent quadplane controller windup on the ground

 - added Q_MAV_TYPE for setup of VTOL vehicle type for QGC

 - improved performance of FlightAxis SITL

 - support LOITER_TO_ALT in quadplanes

 - fixed a bug in TECS related to descending quadplane transitions

 - added Q_OPTIONS for controlling roll during transitions and
   allowing for fixed wing takeoff and landing

 - fixed a race condition in IMU logging

 - fixed a race in i2c device probing

 - log critical messages while disarmed

 - added IST8310 compass on FMUv3 I2C

 - probe for QMC5883 by default

 - avoid double detection of AK09916 compass

 - smooth out tailsitter transitions in both directions

 - fixed use of RTL_RADIUS for QRTL threshold and added Q_TRANS_DECEL

 - fixed course unlocking with rudder in CRUISE mode

We hope you have as much fun flying this release as we had producing
it. Happy flying!

Release 3.8.2, 11th September 2017
----------------------------------

This is a minor release, with a few small fixes and one important
crash bug fix.

The crash bug is in the Septentrio (SBF) GPS driver. Anyone flying
with an SBF GPS should update to this release. The driver had a bug
that could cause a in-flight crash under some circumstances.

Other changes in this release are:

 - support takeoff in GUIDED mode for quadplanes

 - support changing target altitude while hovering in GUIDED mode for
   quadplanes

 - improved descent rate control in QRTL and QLAND modes. This fixes
   an issue with higher than configured descent rates, and smoothes
   out the change in descent rate for the change to the final landing
   stage

 - smooth out the transition to QLOITER or QLAND when transitioning
   from fixed wing mode. This prevents the sudden nose up when
   changing to QLOITER or QLAND mode while flying at high speed.

 - added MANUAL_CONTROL support, allowing for joystick control from QGroundControl

Happy flying!

Release 3.8.1, 3rd September 2017
---------------------------------

This is a bugfix release for 3.8.0, with just a few small changes, and
only one new feature.

The bug fixes are:

 - removed TRIM_RC_AT_START option, as this was causing significant
   issues

 - fixed bug in TRIM_AUTO support with differential spoilers

 - fixed bug with RCn_TRIM == RCn_MIN in MANUAL mode

 - fixed combination of TKOFF_THR_MINACC and TKOFF_THR_DELAY

 - fixed a bug in sending STATUSTEXT messages on all MAVLink channels

The new feature is that you can set the protocol for the debug UART on
FMUv2 or FMUv3 board (such as a Pixhawk or Cube) to allow allow UART5
to be used for arbitrary protocols. To use this fetaure just set
SERIAL5_PROTOCOL to the desired serial protocol. This should be useful
to users who have multiple serial devices (such as rangefinders) they
want to connect and have run out of UARTs.

Happy flying!


Release 3.8.0, 5th August 2017
------------------------------

The ArduPilot development team is very proud to announce the release
of APM:Plane 3.8.0. This is a major release, with a lot of new
features and improvements. The release has been a long time coming,
and the dev team would like to thank everyone who has contributed,
in terms of code and documentation as well as the many testers of beta
versions of the code.

To help with migration from the 3.7.1 release to 3.8.0 there is a
migration guide here:

  http://ardupilot.org/plane/docs/plane-3-7-to-3-8-migration.html

All users should read the migration guide carefully. While the
firmware will try to auto-migrate most settings, please do very
careful ground tests before your first flight with 3.8.

In total there have been over 4 thousand changes in the ArduPilot git
tree since the 3.7.1 release, with over four hundred of those specific
to fixed wing aircraft. Listing all of them in these release notes is
not practical, but the following list will give some of the larger
changes:

 - addition of EKF3 support (disabled by default)
 - new SERVO parameter system for servo output configuration
 - support for MS5525 airspeed sensor
 - support for a wide range of tiltrotor quadplanes
 - support for tailsitter aircraft (including vectored tailsitters)
 - support for twin-motor aircraft, with differential thrust
 - new system for elevon, vtail, flaperon and differential spoiler setup
 - support for deep stall landings
 - support for dual-gps blending
 - support for masking compass types for driver loading
 - completely new DMA based and high sample rate IMU drivers
 - support for px4pro board from Drotek
 - several new compass drivers, new IMU drivers and new GPS drivers
 - new MANUAL_RCMASK system for fine-grained MANUAL flight setup
 - support for log rotation on disarm
 - numerous quadplane improvements
 - fixed loiter behaviour with Q_GUIDED_MODE=1
 - allow rudder arming in CRUISE and FBWB modes
 - fixed bug in transmitter tuning support
 - fixed bug in attitude integrator zero on mode change
 - added SYSID_ENFORCE parameter
 - fixed support for vtail rudder-only planes
 - greatly improved automatic landing accuracy
 - support for high update rates on all servos with SERVO_RATE parameter
 - greatly improved UAVCAN support, with parameters now in CAN_ parameter space
 - support for prop-hang on 3D aircraft
 - improved quadplane PID logging
 - smoother takeoffs for quadplanes
 - logging of side-slip and angle-of-attack estimates
 - added AETR, pre-mixer logging
 - automatic thermalling support

Release 3.8.0beta5, 1st May 2017
--------------------------------

The ArduPilot development team is proud to announce the release of
version 3.8.0beta of APM:Plane. This is a major release. All users
should carefully check their setup when upgrading.

Major changes include:

 - new SRV_Channel system for setting up of output servos separately
   from input RC channels
 - new elevon and vtail support system
 - new EKF3 state estimator (not enabled by default yet)
 - support for tailsitter aircraft
 - greatly improved support for tilt-rotor quadplanes
 - greatly improved quadplane transition code
 - support for deepstall landing
 - large improvements in airspeed noise handling
 - much improved RTK GPS support
 - support automatic servo trimming
 - greatly improved automatic landing accuracy
 - significant improvements in altitude handling
 - significant improvement in sensor drivers, with higher sample rates
   and improved vibration resistance

On top of that there have been hundreds of smaller improvements and
bug fixes.

From the users point of view the most significant change in setup is
moving of RCn_FUNCTION parameters into new SERVOn_FUNCTION parameters,
and the creation of separate output MIN/MAX/TRIM values for all servo
outputs. This allows for much more flxible output setup that is
independent of RC input setup.

Release 3.7.1, 21st October 2016
--------------------------------

The ArduPilot development team is proud to announce the release of
version 3.7.1 of APM:Plane. This is a minor bug fix release. A major
release of 3.8.0 is also being prepared now and will be in beta soon.

Changes in this release:

 - fixed arming check error on FMUv4 (pixracer)
 - fixed pilot throttle based motor test for quadplane
 - fixed use of multicopter mix_max in quadplane
 - fixed AFS termination bugs for quadplanes
 - added automatic ICE engine cut in QLAND
 - fixed loiter mode with Q_GUIDED_MODE=1
 - fixed navigation at lattitude of exactly zero
 - fixed quadplane transition without airspeed sensor
 - fixed rudder arming in CRUISE and FBWB modes
 - fixed throttle slew rate in MANUAL mode for quadplanes
 - fixed multiple bugs in transmitter tuning for quadplane rates
 - fixed mavlink system ID in early startup on USB
 - slow down update of home position
 - update Disco battery lookup table
 - improved compass calibration code for larger offsets

Many thanks to everyone who contributed to this release!

Release 3.7.0, 9th September 2016
---------------------------------

The ArduPilot development team is proud to announce the release of
version 3.7.0 of APM:Plane. This is a major update so please read the
notes carefully.

The biggest changes in this release are:

 - more reliable recovery from inverted flight
 - automatic IC engine support
 - Q_ASSIST_ANGLE for stall recovery on quadplanes
 - Pixhawk2 IMU heater support
 - PH2SLIM support
 - AP_Module support
 - Parrot Disco support
 - major VRBrain support merge
 - much faster boot time on Pixhawk

I'll give a bit of detail on each of these changes before giving the
more detailed list of changes.

More reliable recovery from inverted flight

Marc Merlin discovered that on some types of gliders that ArduPilot
would not reliably recover from inverted flight. The problem turned
out to be the use of the elevator at high bank angles preventing the
ailerons from fully recovering attitude. The fix in this release
prevent excessive elevator use when the aircraft is beyond
LIM_ROLL_CD. This should help a lot for people using ArduPilot as a
recovery system for manual FPV flight.

Automatic IC engine support

ArduPilot has supported internal combustion engines for a long time,
but until now the pilot has had to control the ignition and starter
manually using transmitter pass throughs. A new "ICE" module in
ArduPilot now allows for fully automatic internal combustion engine
support.

Coupled with an RPM sensor you can setup your aircraft to
automatically control the ignition and starter motor, allowing for one
touch start of the motor on the ground and automatic restart of the
motor in flight if needed.

The IC engine support is also integrated into the quadplane code,
allowing for automatic engine start at a specified altitude above the
ground. This is useful for tractor engine quadplanes where the
propeller could strike the ground on takeoff. The engine can also be
automatically stopped in the final stage of a quadplane landing.

Q_ASSIST_ANGLE for stall recovery

Another new quadplane feature is automatic recovery from fixed wing
stall. Previously the VTOL motors would only provide assistance in
fixed wing modes when the aircraft airspeed dropped below
Q_ASSIST_SPEED. Some stalls can occur with higher airspeed however,
and this can result in the aircraft losing attitude control without
triggering a Q_ASSIST_SPEED recovery. A new parameter Q_ASSIST_ANGLE
allows for automatic assistance when attitude control is lost,
triggering when the attitude goes outside the defined roll and pitch
limits and is more than Q_ASSIST_ANGLE degrees from the desired
attitude. Many thanks to Iskess for the suggestion and good discussion
around this feature.

Pixhawk2 heated IMU support

This release adds support for the IMU heater in the upcoming Pixhawk2,
allowing for more stable IMU temperatures. The Pixhawk2 is
automatically detected and the heater enabled at boot, with the target
IMU temperature controllable via BRD_IMU_TARGTEMP.

Using an IMU heater should improve IMU stability in environments with
significant temperature changes.

PH2SLIM Support

This release adds support for the PH2SLIM variant of the Pixhawk2,
which is a Pixhawk2 cube without the isolated sensor top board. This
makes for a very compact autopilot for small aircraft. To enable
PH2SLIM support set the BRD_TYPE parameter to 6 using a GCS connected
on USB.

AP_Module Support

This is the first release of ArduPilot with loadable module support
for Linux based boards. The AP_Module system allows for externally
compiled modules to access sensor data from ArduPilot controlled
sensors. The initial AP_Module support is aimed at vendors integrating
high-rate digital image stabilisation using IMU data, but it is
expected this will be expanded to other use cases in future releases.

Parrot Disco Support

This release adds support for the Parrot C.H.U.C.K autopilot in the
new Disco airframe. The Disco is a very lightweight flying wing with
a nicely integrated Linux based autopilot. The Disco flies very nicely
with ArduPilot, bringing the full set of mission capabilities of
ArduPilot to this airframe.

Major VRBrain Support Update

This release includes a major merge of support for the VRBrain family
of autopilots. Many thanks to the great work by Luke Mike in putting
together this merge!

Much Faster Boot Time

Boot times on Pixhawk are now much faster due to a restructuring of
the driver startup code, with slow starting drivers not started unless
they are enabled with the appropriate parameters. The restructuring
also allows for support of a wide variety of board types, including
the PH2SLIM above.

This release includes many other updates right across the flight
stack, including several new features. Some of the changes include:

 - improved quadplane auto-landing
 - limit roll and pitch by Q_ANGLE_MAX in Q modes
 - improved ADSB avoidance and MAVLink streaming
 - smoother throttle control on fixed-wing to VTOL transition
 - removed "demo servos" movement on boot
 - fixed a problem with spurious throttle output during boot (thanks
   to Marco for finding this)
 - support MAVLink SET_ATTITUDE_TARGET message
 - log all rally points on startup
 - fixed use of stick mixing for rudder with STICK_MIXING=0
 - fixed incorrect tuning warnings when vtol not active
 - support MAVLink based external GPS device
 - support LED_CONTROL MAVLink message
 - prevent baro update while disarmed for large height change
 - support PLAY_TUNE MAVLink message
 - added AP_Button support for remote button input reporting
 - support Ping2020 ADSB transceiver
 - fixed disarm by rudder in quadplanes
 - support 16 channel SERVO_OUTPUT_RAW in MAVLink2
 - added automatic internal combustion engine support
 - support DO_ENGINE_CONTROL MAVLink message
 - added ground throttle suppression for quadplanes
 - added MAVLink reporting of logging subsystem health
 - prevent motor startup on reboot in quadplanes
 - added quadplane support for Advanced Failsafe
 - added support for a 2nd throttle channel
 - fixed bug in crash detection during auto-land flare
 - lowered is_flying groundspeed threshold to 1.5m/s
 - added support for new FrSky telemetry protocol variant
 - added support for fence auto-enable on takeoff in quadplanes
 - added Q_ASSIST_ANGLE for using quadplane to catch stalls in fixed wing flight
 - added BRD_SAFETY_MASK to allow for channel movement for selected channels with safety on
 - numerous improvements to multicopter stability control for quadplanes
 - support X-Plane10 as SITL backend
 - lots of HAL_Linux improvements to bus and thread handling
 - fixed problem with elevator use at high roll angles that could
   prevent attitude recovery from inverted flight
 - improved yaw handling in EKF2 near ground
 - added IMU heater support on Pixhawk2
 - allow for faster accel bias learning in EKF2
 - fixed in-flight yaw reset bug in EKF2
 - added AP_Module support for loadable modules
 - support Disco airframe from Parrot
 - use full throttle in initial takeoff in TECS
 - added NTF_LED_OVERRIDE support
 - added terrain based simulation in SITL
 - merged support for wide range of VRBrain boards
 - added support for PH2SLIM and PHMINI boards with BRD_TYPE
 - greatly reduced boot time on Pixhawk and similar boards
 - fixed magic check for signing key in MAVLink2
 - fixed averaging of gyros for EKF2 gyro bias estimate
 

Release 3.6.0, 6th June 2016
----------------------------

The ArduPilot development team is proud to announce the release of
version 3.6.0 of APM:Plane. This is a major update so please read the
notes carefully.

The biggest changes in this release are:

 - major update to PX4Firmware code
 - major update to QuadPlane code
 - addition of MAVLink2 support

The updated PX4Firmware tree greatly improves support for the new
Pixracer boards as well as improving scheduling performance and UAVCAN
support.

The QuadPlane changes are very extensive in this release. A lot of new
features have been added, including:

 - improved automatic weathervaning
 - greatly improved support for mixed fixed wing and VTOL missions
 - automatic RTL with VTOL land
 - VTOL GUIDED mode support
 - greatly improved transition code
 - new tuning system for VTOL motors
 - extensive upgrade to logging system for much better flight analysis
 
The new QuadPlane features are documented at:

  http://ardupilot.org/plane/docs/quadplane-support.html

There is also a prototype implementation supporting tiltrotors and
tiltwings, but so far it has only been flown in simulations and it
should be considered very experimental.

Detailed changes include:

 - added motortest for all quad motors in sequence
 - merge upstream PX4Firmware changes
 - new AC_AttitudeControl library from copter for quadplane
 - modified default gains for quadplanes
 - new velocity controller for initial quadplane landing
 - smooth out final descent for VTOL landing
 - changed default loop rate for quadplanes to 300Hz
 - support up to 16 output channels (two via SBUS output only)
 - fixed bug with landing flare for high values of LAND_FLARE_SEC
 - improved crash detection logic
 - added in-flight transmitter tuning
 - fix handling of SET_HOME_POSITION
 - added Q_VFWD_GAIN for forward motor in VTOL modes
 - added Q_WVANE_GAIN for active weathervaning
 - log the number of lost log messages
 - Move position update to 50hz loop rather then the 10hz
 - Suppress throttle when parachute release initiated, not after release.
 - support Y6 frame class in quadplane
 - log L1 xtrack error integrator and remove extra yaw logging
 - limit roll before calculating load factor
 - simplify landing flare logic
 - smooth-out the end of takeoff pitch by reducing takeoff pitch min via TKOFF_PLIM_SEC
 - added support for DO_VTOL_TRANSITION as a mission item
 - fixed is_flying() for VTOL flight
 - added Q_ENABLE=2 for starting AUTO in VTOL
 - reload airspeed after VTOL landing
 - lower default VTOL ANGLE_MAX to 30 degrees
 - Change mode to RTL on end of mission rather then staying in auto
 - implemented QRTL for quadplane RTL
 - added Q_RTL_MODE parameter for QRTL after RTL approach
 - reduced the rate of EKF and attitude logging to 25Hz
 - added CHUTE_DELAY_MS parameter
 - allow remapping of any input channel to any output channel
 - numerous waf build improvements
 - support fast timer capture for camera trigger feedback
 - numerous improvements for Pixracer support
 - added more general tiltrotor support to SITL
 - only save learned compass offsets when disarmed
 - support MISSION_ITEM_INT for more accurate waypoint positions
 - change parachute deployment altitude to above ground not home
 - added AP_Tuning system for QuadPlane tuning
 - added initial support for tiltrotors and tiltwings
 - added LOG_REPLAY and LOG_DISARMED parameters
 - added Q_GUIDED_MODE parameter
 - major update to QuadPlane documentation
 - added MAVLink2 support
 - fixed origin vs home altitude discrepancy
 - improved Lidar based landing glide slope
 - fixed throttle failsafe with THR_PASS_STAB=1
 - prevent EKF blocking during baro and airspeed cal
 - allow for ground testing of parachutes with CHUTE_MINALT=0
 - fixed elevator stick mixing for above 50% input
 - added QuadPlane ESC calibration
 


Release 3.6.0beta1, 30th April 2016
-----------------------------------

The ArduPilot development team is proud to announce the release of
version 3.6.0beta1 of APM:Plane. This is the first beta version of a
major release.

The biggest changes in this release is the major update of the
PX4Firmware tree which greatly improves support for the Pixracer
board, and a lot of QuadPlane improvements and new features.

Detailed changes include:

 - added motortest for all quad motors in sequence
 - merge upstream PX4Firmware changes
 - new AC_AttitudeControl library from copter for quadplane
 - modified default gains for quadplanes
 - new velocity controller for initial quadplane landing
 - smooth out final descent for VTOL landing
 - changed default loop rate for quadplanes to 300Hz
 - support up to 16 output channels (two via SBUS output only)
 - fixed bug with landing flare for high values of LAND_FLARE_SEC
 - improved crash detection logic
 - added in-flight transmitter tuning
 - fix handling of SET_HOME_POSITION
 - added Q_VFWD_GAIN for forward motor in VTOL modes
 - added Q_WVANE_GAIN for active weathervaning
 - log the number of lost log messages
 - Move position update to 50hz loop rather then the 10hz
 - Suppress throttle when parachute release initiated, not after release.
 - support Y6 frame class in quadplane
 - log L1 xtrack error integrator and remove extra yaw logging
 - limit roll before calculating load factor
 - simplify landing flare logic
 - smooth-out the end of takeoff pitch by reducing takeoff pitch min via TKOFF_PLIM_SEC
 - added support for DO_VTOL_TRANSITION as a mission item
 - fixed is_flying() for VTOL flight
 - added Q_ENABLE=2 for starting AUTO in VTOL
 - reload airspeed after VTOL landing
 - lower default VTOL ANGLE_MAX to 30 degrees
 - Change mode to RTL on end of mission rather then staying in auto
 - implemented QRTL for quadplane RTL
 - added Q_RTL_MODE parameter for QRTL after RTL approach
 - reduced the rate of EKF and attitude logging to 25Hz
 - added CHUTE_DELAY_MS parameter
 - allow remapping of any input channel to any output channel
 - numerous waf build improvements
 - support fast timer capture for camera trigger feedback
 - numerous improvements for Pixracer support
 - added more general tiltrotor support to SITL


Release 3.5.3, 30th April 2016
------------------------------

The ArduPilot development team is proud to announce the release of
version 3.5.3 of APM:Plane. This is a minor release with only small
bugfix changes.

The main motivation for the release is a problem with flying without a
compass enabled. If you fly 3.5.2 with MAG_ENABLE=0 or no compass
attached then there is a risk that the EKF2 attitude estimator may
become unstable before takeoff. This can cause the aircraft to crash.

The other changes in this release are:

 - fixed loiter radius for counter-clockwise loiter
 - fixed the loiter radius when doing a RTL at the end of a mission
 - provide reasons to the GCS when a uBlox GPS fails to properly configure
 - support a wider variety of NMEA GPS receivers
 - use EKF1 by default if no compass is enabled

Happy flying!

Release 3.5.2, 26th March 2016
------------------------------

The ArduPilot development team is proud to announce the release of
version 3.5.2 of APM:Plane. This is a minor release with small
changes.

The main reason for this release over 3.5.1 is a fix for a bug where
the px4io co-processor on a Pixhawk can run out of memory while
booting. This causes the board to be unresponsive on boot. It only
happens if you have a more complex servo setup and is caused by too
much memory used by the IO failsafe mixer.

The second motivation for this release is to fix an issue where during
a geofence altitude failsafe that happens at low speed an aircraft may
dive much further than it should to gain speed. This only happened if
the thrust line of the aircraft combined with low pitch integrator
gain led to the aircraft not compensating sufficiently with elevator
at full throttle in a TECS underspeed state. To fix this two changes
have been made:

 - a minimum level of integrator in the pitch controller has been
   added. This level has a sufficiently small time constant to avoid
   the problem with the TECS controller in an underspeed state.

 - the underspeed state in TECS has been modified so that underspeed
   can end before the full target altitude has been reached, as long
   as the airspeed has risen sufficiently past the minimum airspeed
   for a sufficient period of time (by 15% above minimum airspeed for
   3 seconds).

The default P gains for both roll and pitch have also been raised from
0.4 to 0.6. This is to help for users that fly with the default
parameters. A value of 0.6 is safe for all aircraft that I have
analysed logs for.

The default gains and filter frequencies of the QuadPlane code have
also been adjusted to better reflect the types of aircraft users have
been building.

Other changes include:

 - improved QuadPlane logging for better analysis and tuning (adding
   RATE and QTUN messages)
 - fixed a bug introduced in 3.5.1 in rangefinder landing
 - added TECS logging of speed_weight and flags
 - improvements to the lsm303d driver for Linux
 - improvements to the waf build system


Release 3.5.1, 21st March 2016
------------------------------

The ArduPilot development team is proud to announce the release of
version 3.5.1 of APM:Plane. This is a minor release with primarily
small changes.

The changes in this release are:

 - update uavcan to new protocol
 - always exit loiter in AUTO towards next waypoint
 - support more multicopter types in quadplane
 - added support for reverse thrust landings
 - added LAND_THR_SLEW parameter
 - added LAND_THEN_NEUTRL parameter
 - fixed reporting of armed state with safety switch
 - added optional arming check for minimum voltage
 - support motor test for quadplanes
 - added QLAND flight mode (quadplane land mode)
 - added TECS_LAND_SRC (land sink rate change)
 - use throttle slew in quadplane transition
 - added PID tuning for quadplane
 - improved text message queueing to ground stations
 - added LAND_THR_SLEW parameter
 - re-organisation of HAL_Linux bus API
 - improved NMEA parsing in GPS driver
 - changed TECS_LAND_SPDWGT default to -1
 - improved autoconfig of uBlox GPS driver
 - support a wider range of Lightware serial Lidars
 - improved non-GPS performance of EKF2
 - allow for indoor flight of quadplanes
 - improved compass fusion in EKF2
 - improved support for Pixracer board
 - improved NavIO2 support
 - added BATT_WATT_MAX parameter

The reverse thrust landing is particularly exciting as that adds a
whole new range of possibilities for landing in restricted areas. Many
thanks to Tom for the great work on getting this done.

The uavcan change to the new protocol has been a long time coming, and
I'd like to thank Holger for both his great work on this and his
patience given how long it has taken to be in a release. This adds
support for automatic canbus node assignment which makes setup much
easier, and also supports the latest versions of the Zubax canbus GPS.

My apologies if your favourite feature didn't make it into this
release! There are a lot more changes pending but we needed to call a
halt for the release eventually. This release has had a lot of flight
testing and I'm confident it will be a great release.

Happy flying!


Release 3.5.0, 30th January 2016
--------------------------------

The ArduPilot development team is proud to announce the release of
version 3.5.0 of APM:Plane. This is a major release with a lot of
changes so please read the notes carefully!

The biggest changes in this release are:

 - switch to new EKF2 kalman filter for attitude and position estimation
 - added support for parachutes
 - added support for QuadPlanes
 - support for 4 new flight boards, the QualComm Flight, the BHAT,
   the PXFmini and the Pixracer
 - support for arming on moving platforms
 - support for better camera trigger logging

New Kalman Filter

The 3.4 release series was the first where APM:Plane used a Kalman
Filter by default for attitude and position estimation. It works very
well, but Paul Riseborough has been working hard recently on a new
EKF variant which fixes many issues seen with the old estimator. The
key improvements are:

  - support for separate filters on each IMU for multi-IMU boards
    (such as the Pixhawk), giving a high degree of redundency
  - much better handling of gyro drift estimation, especially on
    startup
  - much faster recovery from attitude estimation errors

After extensive testing of the new EKF code we decided to make it the
default for this release. You can still use the old EKF if you want to
by setting AHRS_EKF_TYPE to 1, although it is recommended that the new
EKF be used for all aircraft.

Parachute Support

This is the first release with support for parachute landings on
plane. The configuration and use of a parachute is the same as the
existing copter parachute support. See
http://copter.ardupilot.org/wiki/parachute/

Note that parachute support is considered experimental in planes.

QuadPlane Support

This release includes support for hybrid plane/multi-rotors called
QuadPlanes. More details are available in this blog post:
http://diydrones.com/profiles/blogs/quadplane-support-in-apm-plane-3-5-0

Support for 4 new Flight Boards

The porting of ArduPilot to more flight boards continues, with support
for 3 new flight boards in this release. They are:

 - the BHAT board
 - the PXFmini
 - the QualComm Flight
 - the Pixracer

More information about the list of supported boards is available here:
http://dev.ardupilot.org/wiki/supported-autopilot-controller-boards/

Startup on a moving platform

One of the benefits of the new EKF2 estimator is that it allows for
rapid estimation of gyro offset without doing a gyro calibration on
startup. This makes it possible to startup and arm on a moving
platform by setting the INS_GYR_CAL parameter to zero (to disable gyro
calibration on boot). This should be a big help when flying off boats.

Improved Camera Trigger Logging

This release adds new CAM_FEEDBACK_PIN and CAM_FEEDBACK_POL
parameters. These add support for separate CAM and TRIG log messages,
where TRIG is logged when the camera is triggered and the CAM message
is logged when an external pin indicates the camera has actually
fired. This pin is typically based on the flash hotshoe of a camera
and provides a way to log the exact time of camera triggering more
accurately. Many thanks to Dario Andres and Jaime Machuca for their
work on this feature.

That is just a taste of all of the improvements in this release. In
total the release includes over 1500 patches. Some of the other more
significant changes include:

- RPM logging
- new waf build system
- new async accel calibrator
- SITL support for quadplanes
- improved land approach logic
- better rangefinder power control
- ADSB adapter support
- dataflash over mavlink support
- settable main loop rate
- hideable parameters
- improved crash detection logic
- added optional smooth speed weighting for landing
- improved logging for dual-GPS setups
- improvements to multiple RTK GPS drivers
- numerous HAL_Linux improvements
- improved logging of CAM messages
- added support for IMU heaters in HAL_Linux
- support for RCInput over UDP in HAL_Linux
- improved EKF startup checks for GPS accuracy
- added raw IMU logging for all platforms
- added BRD_CAN_ENABLE parameter
- support FlightGear visualisation in SITL
- configurable RGB LED brightness
- added RTL_RADIUS parameter
- improvements to the OVERRIDE_CHAN handling, fixing a race condition
- added OVERRIDE_SAFETY parameter

Many thanks to everyone who contributed to this release! The
development team is growing at a fast pace, with 57 people
contributing changes over this release cycle.

I'd like to make special mention of Tom Pittenger and Michael du
Breuil who have been doing extensive testing of the plane development
code, and also contributing a great deal of their own
improvements. Thanks!


Release 3.4.0, 24th September 2015
----------------------------------

The ArduPilot development team is proud to announce the release of
version 3.4.0 of APM:Plane. This is a major release with a lot of
changes so please read the notes carefully!

First release with EKF by default

This is the also the first release that enables the EKF (Extended
Kalman Filter) for attitude and position estimation by default. This
has been in development for a long time, and significantly improves
flight performance. You can still disable the EKF if you want to using
the AHRS_EKF_USE parameter, but it is strongly recommended that you
use the EKF. Note that if an issue is discovered with the EKF in
flight it will automatically be disabled and the older DCM system will
be used instead. That should be very rare.

In order to use the EKF we need to be a bit more careful about the
setup of the aircraft. That is why in the last release we enabled
arming and pre-arm checks by default. Please don't disable the arming
checks, they are there for very good reasons.

Last release with APM1/APM2 support

This will be the last major release that supports the old APM1/APM2
AVR based boards. We have finally run out of flash space and
memory. In the last few releases we spent quite a bit of time trying
to squeeze more and more into the small flash space of the APM1/APM2,
but it had to end someday if ArduPilot is to continue to develop. I am
open to the idea of someone else volunteering to keep doing
development of APM1/APM2 so if you have the skills and inclination do
please get in touch. Otherwise I will only do small point release
changes for major bugs.

Even to get this release onto the APM1/APM2 we had to make sacrifices
in terms of functionality. The APM1/APM2 release is missing quite a
few features that are on the Pixhawk and other boards. For example:

  - no rangefinder support for landing
  - no terrain following
  - no EKF support
  - no camera control
  - no CLI support
  - no advanced failsafe support
  - no HIL support (sorry!)
  - support for far fewer GPS types

that is just the most obvious major features that are missing on
APM1/APM2. There are also numerous other smaller things where we need
to take shortcuts on the APM1/APM2. Some of these features were
available on older APM1/APM2 releases but needed to be removed to
allow us to squeeze the new release onto the board. So if you are
happy with a previous release on your APM2 and want a feature that is
in that older release and not in this one then perhaps you shouldn't
upgrade.

PID Tuning

While most people are happy with autotune to tune the PIDs for their
planes, it is nice also to be able to do fine tuning by hand. This
release includes new dataflash and mavlink messages to help with that
tuning. You can now see the individual contributions of the P, I and D
components of each PID in the logs, allowing you to get a much better
picture of the performance.

A simple application of this new tuning is you can easily see if your
trim is off. If the Pitch I term is constantly contributing a
signifcant positive factor then you know that ArduPilot is having to
constantly apply up elevator, which means your plane is nose
heavy. The same goes for roll, and can also be used to help tune your
ground steering.

Vibration Logging

This release includes a lot more options for diagnosing vibration
issues. You will notice new VIBRATION messages in MAVLink and VIBE
messages in the dataflash logs. Those give you a good idea of your
(unfiltered) vibration levels. For really detailed analysis you can
setup your LOG_BITMASK to include raw logging, which gives you every
accel and gyro sample on your Pixhawk. You can then do a FFT on the
result and plot the distribution of vibration level with
frequency. That is great for finding the cause of vibration
issues. Note that you need a very fast microSD card for that to work!

Rudder Disarm

This is the first release that allows you to disarm using the rudder
if you want to. It isn't enabled by default (due to the slight risk of
accidentially disarming while doing aerobatics). You can enable it
with the ARMING_RUDDER parameter by setting it to 2. It will only
allow you to disarm if the autopilot thinks you are not flying at the
time (thanks to the "is_flying" heuristics from Tom Pittenger).

More Sensors

This release includes support for a bunch more sensors. It now supports
3 different interfaces for the LightWare range of Lidars (serial, I2C
and analog), and also supports the very nice Septentrio RTK
dual-frequency GPS (the first dual-frequency GPS we have support
for). It also supports the new "blue label" Lidar from Pulsed Light
(both on I2C and PWM).

For the uBlox GPS, we now have a lot more configurability of the
driver, with the ability to set the GNSS mode for different
constellations. Also in the uBlox driver we support logging of the raw
carrier phase and pseudo range data, which allows for post-flight RTK
analysis with raw-capable receivers for really accurate photo
missions.

Better Linux support

This release includes a lot of improvements to the Linux based
autopilot boards, including the NavIO+, the PXF and ERLE boards and
the BBBMini and the new RasPilot board. If you like the idea of flying
with Linux then please try it out!

On-board compass calibrator

We also have a new on-board compass calibrator, which also adds calibration
for soft iron effects, allowing for much more accurate compass
calibration. Support for starting the compass calibration in the
various ground stations is still under development, but it looks like
this will be a big improvement to compass calibration.

Lots of other changes!

The above list is just a taste of the changes that have gone into this
release. Thousands of small changes have gone into this release with
dozens of people contributing. Many thanks to everyone who helped!

Other key changes include:

  - fixed return point on geofence breach
  - enable messages for MAVLink gimbal support
  - use 64 bit timestamps in dataflash logs
  - added realtime PID tuning messages and PID logging
  - fixed a failure case for the px4 failsafe mixer
  - added DSM binding support on Pixhawk
  - added ALTITUDE_WAIT mission command
  - added vibration level logging
  - ignore low voltage failsafe while disarmed
  - added delta velocity and delta angle logging
  - fix LOITER_TO_ALT to verify headings towards waypoints within the loiter radius
  - allow rudder disarm based on ARMING_RUDDER parameter
  - fix default behaviour of flaps
  - prevent mode switch changes changing WP tracking
  - make TRAINING mode obey stall prevention roll limits
  - disable TRIM_RC_AT_START by default
  - fixed parameter documentation spelling errors
  - send MISSION_ITEM_REACHED messages on waypoint completion
  - fixed airspeed handling in SITL simulators
  - enable EKF by default on plane
  - Improve gyro bias learning rate for plane and rover
  - Allow switching primary GPS instance with 1 sat difference
  - added NSH over MAVLink support
  - added support for mpu9250 on pixhawk and pixhawk2
  - Add support for logging ublox RXM-RAWX messages
  - lots of updates to improve support for Linux based boards
  - added ORGN message in dataflash
  - added support for new "blue label" Lidar
  - switched to real hdop in uBlox driver
  - improved auto-config of uBlox
  - raise accel discrepancy arming threshold to 0.75
  - improved support for tcp and udp connections on Linux
  - switched to delta-velocity and delta-angles in DCM
  - improved detection of which accel to use in EKF
  - improved auto-detections of flow control on pixhawk UARTs
  - Failsafe actions are not executed if already on final approach or land.
  - Option to trigger GCS failsafe only in AUTO mode.
  - added climb/descend parameter to CONTINUE_AND_CHANGE_ALT
  - added HDOP to uavcan GPS driver
  - improved sending of autopilot version
  - prevent motor startup with bad throttle trim on reboot
  - log zero rangefinder distance when unhealthy
  - added PRU firmware files for BeagleBoneBlack port
  - fix for recent STORM32 gimbal support
  - changed sending of STATUSTEXT severity to use correct values
  - added new RSSI library with PWM input support
  - fixed MAVLink heading report for UAVCAN GPS
  - support LightWare I2C rangefinder on Linux
  - improved staging of parameters and formats on startup to dataflash
  - added new on-board compass calibrator
  - improved RCOutput code for NavIO port
  - added support for Septentrio GPS receiver
  - support DO_MOUNT_CONTROl via command-long interface
  - added CAM_RELAY_ON parameter
  - moved SKIP_GYRO_CAL functionality to INS_GYR_CAL
  - added detection of bad lidar settings for landing

Note that the documentation hasn't yet caught up with all the changes
in this release. We are still working on that, but meanwhile if you
see a feature that interests you and it isn't documented yet then
please ask.



Release 3.3.0, 20th May 2015
----------------------------

The ardupilot development team is proud to announce the release of
version 3.3.0 of APM:Plane. This is a major release with a lot of
changes. Please read the release notes carefully!

The last stable release was 3 months ago, and since that time we have
applied over 1200 changes to the code. It has been a period of very
rapid development for ArduPilot. Explaining all of the changes that
have been made would take far too long, so I've chosen some key
changes to explain in detail, and listed the most important secondary
changes in a short form. Please ask for details if there is a change
you see listed that you want some more information on.

Arming Changes
--------------

This is the first release of APM:Plane where ARMING_CHECK and
ARMING_REQUIRE both default to enabled. That means when you upgrade if
you didn't previously have arming enabled you will need to learn about
arming your plane.

Please see this page for more information on arming:

  http://plane.ardupilot.com/wiki/arming-your-plane/

I know many users will be tempted to disable the arming checks, but
please don't do that without careful thought. The arming checks are an
important part of ensuring the aircraft is ready to fly, and a common
cause of flight problems is to takeoff before ArduPilot is ready.

Re-do Accelerometer Calibration
-------------------------------

Due to a change in the maximum accelerometer range on the Pixhawk all
users must re-do their accelerometer calibration for this release. If
you don't then your plane will fail to arm with a message saying that
you have not calibrated the accelerometers.

Only 3D accel calibration
-------------------------

The old "1D" accelerometer calibration method has now been removed, so
you must use the 3D accelerometer calibration method. The old method
was removed because a significant number of users had poor flights due
to scaling and offset errors on their accelerometers when they used
the 1D method. My apologies for people with very large aircraft who
find the 3D method difficult.

Note that you can do the accelerometer calibration with the autopilot
outside the aircraft which can make things easier for large aircraft.

Auto-disarm
-----------

After an auto-landing the autopilot will now by default disarm after
LAND_DISARMDELAY seconds (with a default of 20 seconds). This feature
is to prevent the motor from spinning up unexpectedly on the ground
after a landing.

HIL_MODE parameter
------------------

It is now possible to configure your autopilot for hardware in the
loop simulation without loading a special firmware. Just set the
parameter HIL_MODE to 1 and this will enable HIL for any
autopilot. This is designed to make it easier for users to try HIL
without having to find a HIL firmware.

SITL on Windows
---------------

The SITL software in the loop simulation system has been completely
rewritten for this release. A major change is to make it possible to
run SITL on native windows without needing a Linux virtual
machine. There should be a release of MissionPlanner for Windows soon
which will make it easy to launch a SITL instance.

The SITL changes also include new backends, including the CRRCSim
flight simulator. This gives us a much wider range of aircraft we can
use for SITL. See http://dev.ardupilot.com/wiki/simulation-2/ for more
information.

Throttle control on takeoff
---------------------------

A number of users had problems with pitch control on auto-takeoff, and
with the aircraft exceeding its target speed during takeoff. The
auto-takeoff code has now been changed to use the normal TECS throttle
control which should solve this problem.

Rudder only support
-------------------

There is a new RUDDER_ONLY parameter for aircraft without ailerons,
where roll is controlled by the rudder. Please see the documentation
for more information on flying with a rudder only aircraft:

  http://plane.ardupilot.com/wiki/arduplane-parameters/#rudder_only_aircraft_arduplanerudder_only

APM1/APM2 Support
-----------------

We have managed to keep support for the APM1 and APM2 in this release,
but in order to fit it in the limited flash space we had to disable
some more features when building for those boards. For this release
the AP_Mount code for controlling camera mounts is disabled on
APM1/APM2.

At some point soon it will become impractical to keep supporting the
APM1/APM2 for planes. Please consider moving to a 32 bit autopilot
soon if you are still using an APM1 or APM2.

New INS code
------------

There have been a lot of changes to the gyro and accelerometer
handling for this release. The accelerometer range on the Pixhawk has
been changed to 16g from 8g to prevent clipping on high vibration
aircraft, and the sampling rate on the lsm303d has been increased to
1600Hz. 

An important bug has also been fixed which caused aliasing in the
sampling process from the accelerometers. That bug could cause 
attitude errors in high vibration environments.

Numerous Landing Changes
------------------------

Once again there have been a lot of improvements to the automatic
landing support. Perhaps most important is the introduction of a
smooth transition from landing approach to the flare, which reduces
the tendency to pitch up too much on flare. 

There is also a new parameter TECS_LAND_PMAX which controls the
maximum pitch during landing. This defaults to 10 degrees, but for
many aircraft a smaller value may be appropriate. Reduce it to 5
degrees if you find you still get too much pitch up during the flare.

Other secondary changes in this release include:

 - a new SerialManager library which gives much more flexible management of serial port assignment
 - changed the default FS_LONG_TIMEOUT to 5 seconds
 - raised default IMAX for roll/pitch to 3000
 - lowered default L1 navigation period to 20
 - new BRD_SBUS_OUT parameter to enable SBUS output on Pixhawk
 - large improvements to the internals of PX4Firmware/PX4NuttX for better performance
 - auto-formatting of microSD cards if they can't be mounted on boot (PX4/Pixhawk only)
 - a new PWM based driver for the PulsedLight Lidar to avoid issues with the I2C interface
 - fixed throttle forcing to zero when disarmed
 - only reset mission on disarm if not in AUTO mode
 - much better handling of steep landings
 - added smooth transition in landing flare
 - added HIL_MODE parameter for HIL without a special firmware
 - lowered default FS_LONG_TIMEOUT to 5 seconds
 - mark old ELEVON_MIXING mode as deprecated
 - fixed 50Hz MAVLink support
 - support DO_SET_HOME MAVLink command
 - fixed larger values of TKOFF_THR_DELAY
 - allow PulsedLight Lidar to be disabled at a given height
 - fixed bungee launch (long throttle delay)
 - fixed a bug handling entering AUTO mode before we have GPS lock
 - added CLI_ENABLED parameter
 - removed 1D accel calibration
 - added EKF_STATUS_REPORT MAVLink message
 - added INITIAL_MODE parameter
 - added TRIM_RC_AT_START parameter
 - added auto-disarm after landing (LAND_DISARMDELAY)
 - added LOCAL_POSITION_NED MAVLink message
 - avoid triggering a fence breach in final stage of landing
 - rebuild glide slope if we are above it and climbing
 - use TECS to control throttle on takeoff
 - added RUDDER_ONLY parameter to better support planes with no ailerons
 - updated Piksi RTK GPS driver
 - improved support for GPS data injection (for Piksi RTK GPS)
 - added NAV_LOITER_TO_ALT mission item
 - fixed landing approach without an airspeed sensor
 - support RTL_AUTOLAND=2 for landing without coming to home first
 - disabled camera mount support on APM1/APM2
 - added support for SToRM32 and Alexmos camera gimbals
 - added support for Jaimes mavlink enabled gimbal
 - improved EKF default tuning for planes
 - updated support for NavIO and NavIO+ boards
 - updated support for VRBrain boards
 - fixes for realtime threads on Linux
 - added simulated sensor lag for baro and mag in SITL
 - made it possible to build SITL for native Windows
 - switched to faster accel sampling on Pixhawk
 - added coning corrections on Pixhawk
 - set ARMING_CHECK to 1 by default
 - disable NMEA and SiRF GPS on APM1/APM2
 - support MPU9255 IMU on Linux
 - updates to BBBMINI port for Linux
 - added TECS_LAND_PMAX parameter
 - switched to synthetic clock in SITL
 - support CRRCSim FDM backend in SITL
 - new general purpose replay parsing code
 - switched to 16g accel range in Pixhawk
 - added FENCE_AUTOENABLE=2 for disabling just fence floor
 - added POS dataflash log message
 - changed GUIDED behaviour to match copter
 - added support for a 4th MAVLink channel
 - support setting AHRS_TRIM in preflight calibration
 - fixed a PX4 mixer out of range error

Best wishes to all APM:Plane users from the dev team, and happy
flying!


Release 3.2.2, February 10th 2015
---------------------------------

The ardupilot development team has released version 3.2.2 of
APM:Plane. This is a bugfix release for some important bugs found by
users of the 3.2.1 release.

The changes in this release are:

  - fixed a bug that could cause short term loss of RC control with
    some receiver systems and configurations

  - allowed for shorter sync pulse widths for PPM-SUM receivers on
    APM1 and APM2

  - fixed HIL mode altitude

The most important bug fix is the one for short term loss of RC
control. This is a very long standing bug which didn't have a
noticeable impact for most people, but could cause loss of RC control
for around 1 or 2 seconds for some people in certain circumstances.

The bug was in the the AP_HAL RCInput API. Each HAL backend has a flag
that says whether there is a new RC input frame available. That flag
was cleared by the read() method (typically hal.rcin->read()). Callers
would check for new input by checking the boolean
hal.rcin->new_input() function.

The problem was that read() was called from multiple places. Normally
this is fine as reads from other than the main radio input loop happen
before the other reads, but if the timing of the new radio frame
exactly matched the loop frequency then a read from another place
could clear the new_input flag and we would not see the new RC input
frame. If that happened enough times we would go into a short term RC
failsafe and ignore RC inputs, even in manual mode.

The fix was very simple - it is the new_input() function itself that
should clear the flag, not read(). 

Many thanks to MarkM for helping us track down this bug by providing
us with sufficient detail on how to reproduce it. In Marks case his
OpenLRSng configuration happened to produce exactly the worst case
timing needed to reproduce the issue. Once I copied his OpenLRS
settings to my TX/RX I was able to reproduce the problem and it was
easy to find and fix.

A number of users have reported occasional glitches in manual control
where servos pause for short periods in past releases. It is likely
that some of those issues were caused by this bug. The dev team would
like to apologise for taking so long to track down this bug!

The other main change was also related to RC input. Some receivers use
a PPM-SUM sync pulse width shorter than what the APM1/APM2 code was
setup to handle. The OpenLRSng default sync pulse width is 3000
microseconds, but the APM1/APM2 code was written for a mininum sync
pulse width of 4000 microseconds. For this release I have changed the
APM1/APM2 driver to accept a sync pulse width down to 2700
microseconds.


Release 3.2.1, February 5th 2015
--------------------------------

The ardupilot development team is proud to announce the release of
version 3.2.1 of APM:Plane. This is primarily a bugfix release, but
does have some new features.

The major changes in this release are:

  - fixed a mission handling bug that could cause a crash if jump
    commands form an infinite loop (thanks to Dellarb for reporting
    this bug)
  - improved support for in-kernel SPI handling on Linux (thanks to John Williams)
  - support UAVCAN based ESCs and GPS modules on Pixhawk (thanks to
    Pavel, Holger and and PX4 dev team)
  - Multiple updates for the NavIO+ cape on RaspberryPi (thanks to
    Emlid)
  - multiple automatic landing fixes, including improvements in flare
    detection, glide slope calculation and lag handling
  - fixed a bug that could cause a change altitude MAVLink command
    from causing a sudden descent
  - re-enable CLI on non-APM1/APM2 boards
  - Lots of EKF changes, including reducing impact of ground magnetic
    interference, reducing the impact of a GPS outage and integrating
    optical flow support
  - added initial support for the PX4 optical flow sensor. Just
    logging for this release.
  - added support for MAVLink packet routing
  - added detection and recovery from faulty gyro and accel sensors
  - improved arming checks code to detect a lot more error conditions,
    and change the ARMING_CHECK default value to check all error
    conditions.
  - added support for BBBMini Linux port
  - increased number of AVR input channels from 8 to 11
  - auto-set system clock based on GPS in Linux ports
  - added SBUS FrSky telemetry support (thanks to Mathias)

Release 3.2.0, November 25th 2014
---------------------------------

The ardupilot development team is proud to announce the release of
version 3.2.0 of APM:Plane. This is a major release with a lot of 
new features.

The changes span a lot of different areas of the code, but arguably
the most important changes are:

  - automatic stall prevention code
  - PX4IO based RC override code on FMU failure
  - I2C crash bugfix
  - new autoland code from Michael Day
  - compass independent auto takeoff

I'll go into each of these changes in a bit more detail.

Automatic Stall Prevention
--------------------------

The automatic stall prevention code is code that uses the aerodynamic
load factor (calculated from demanded bank angle) to adjust both the
maximum roll angle and the minimum airspeed. You can enable/disable
this code with the STALL_PREVENTION parameter which defaults to
enabled. 

When in stabilised manual throttle modes this option has the effect of
limiting how much bank angle you can demand when close to the
configured minimum airspeed (from ARSPD_FBW_MIN). That means when in
FBWA mode if you try to turn hard while close to ARSPD_FBW_MIN it will
limit the bank angle to an amount that will keep the speed above
ARSPD_FBW_MIN times the aerodynamic load factor. It will always allow
you at bank at least 25 degrees however, to ensure you keep some
maneuverability if the airspeed estimate is incorrect.

When in auto-throttle modes (such as AUTO, RTL, CRUISE etc) it will
additionally raise the minimum airspeed in proportion to the
aerodynamic load factor. That means if a mission demands a sharp turn
at low speed then initially the turn will be less sharp, and the TECS
controller will add power to bring the airspeed up to a level that can
handle the demanded turn. After the turn is complete the minimum
airspeed will drop back to the normal level.

This change won't completely eliminate stalls of course, but it should
make them less likely if you properly configure ARSPD_FBW_MIN for your
aircraft.

PX4IO based RC override code
----------------------------

This releases adds support for PX4IO based RC override. This is a
safety feature where the stm32 IO co-processor on the PX4 and Pixhawk
will give the pilot manual control if the main ArduPilot
micro-controller fails (or the autopilot code crashes). This is
particularly useful when testing new code that may not be stable.

As part of this new RC override support we also have a new
OVERRIDE_CHAN parameter, which allows you to specify a RC input
channel which can be used to test the RC override support. See the
documentation on OVERRIDE_CHAN for details.

I2C bugfix
----------

This release fixes another I2C bug in NuttX which could cause the
Pixhawk to lock up under high I2C load with noise on I2C cables. This
bug has caused at least two aircraft to crash, so it is an important
fix. I hope this will be the last I2C crash bug we find in NuttX! An
audit of the code was done to try to confirm that no more bugs of this
type are present.

New Autoland code
-----------------

This release incorporates some new autoland capabilities contributed
by Michael Day. The key new feature is the ability to trigger an
automatic landing when a RTL completes, which for the first time
allows a user to setup their aircraft to land using only transmitter
control. 

The way it works is there is a new parameter RTL_AUTOLAND. If that is
set to 1 and the aircraft reaches its target location in an RTL it
will look for DO_LAND_START mission item in the mission. If that is
found then the aircraft will switch to AUTO starting at that section
of the mission. The user sets up their land mission commands starting
with a DO_LAND_START mission item.

There is more to do in this autoland support. We have been discussing
more advanced go-around capabilities and also better path planning for
landing. The code in this release is an important first step though,
and will be a good basis for future work.

Compass independent takeoff code
--------------------------------

The auto-takeoff code has been changed to make it more independent of
compass settings, allowing for reliable takeoff down a runway with
poor compass offsets. The new takeoff code uses the gyroscope as the
primary heading control for the first part of the takeoff, until the
aircraft gains enough speed for a GPS heading to be reliable.

Many thanks to all the contributors, especially:

  - Paul and Jon for EKF and TECS updates
  - Bret and Grant for stall prevention testing
  - Michael for all his autoland work
  - all the work on NavIO, PXF and Zynq by John, Victor, George and Siddarth
  - The PX4 team for all the PX4 updates

More complete list of changes:

 - allow GCS to enable/disable PX4 safety switch
 - make auto-takeoff independent of compass errors
 - report gyro unhealthy if calibration failed
 - added support for MAV_CMD_DO_LAND_START
 - added RTL_AUTOLAND parameter
 - disable CLI by default in build
 - new InertialSensor implementation
 - added landing go around support
 - enable PX4 failsafe RC override
 - added OVERRIDE_CHAN parameter
 - changed default AUTOTUNE level to 6
 - changed default I value for roll/pitch controllers
 - added CAMERA_FEEDBACK mavlink messages
 - use airspeed temperature for baro calibration if possible
 - added STALL_PREVENTION parameter 
 - fixed handling of TKOFF_THR_MAX parameter
 - added ARSPD_SKIP_CAL parameter
 - fixed flaperon trim handling (WARNING: may need to retrim flaperons)
 - EKF robustness improvements, especially for MAG handling
 - lots of HAL_Linux updates
 - support wider range of I2C Lidars
 - fixed fallback to DCM in AHRS
 - fixed I2C crash bug in NuttX
 - TECS prevent throttle undershoot after a climb
 - AP_Mount: added lead filter to improve servo gimbals
 - Zynq and NavIO updates
 - fixed preflight calibration to prevent losing 3D accel cal
 - perform a gyro calibration when doing 3D accel cal
 - added DO_CONTINUE_AND_CHANGE_ALT mission command
 - added support for DO_FENCE_ENABLE mission command
 - allow gyro calibration to take up to 30 seconds
 - improved health checks in the EKF for DCM fallback

Note: If you use flaperons you may need to re-trim them before you
fly due to the change in flaperon trim handling.

I hope that everyone enjoys flying this new APM:Plane release as much
as we enjoyed producing it! It is a major milestone in the development
of the fixed wing code for APM, and I think puts us in a great
position for future development.

Happy flying!



Release 3.1.1, September 12th 2014
----------------------------------

The ardupilot development team is proud to announce the release of
version 3.1.1 of APM:Plane. This is primarily a bugfix release with a
small number of new features.

The main bug fixed in this release is a bug that could affect saving
parameters and mission items in the FRAM/eeprom storage of
PX4v1/Pixhawk/VRBrain. The bug has been in the code since January 2013
and did not cause problems very often (which is why it hasn't been
noticed till now), but when it does happen it causes changes to
parameters or mission items not to be saved on a reboot.

Other changes in this release:

  - support for using a Lidar for landing for terrain altitude (see
    the RNGFND_LANDING parameter)

  - improvements in the landing approach code, especially the glide
    slope calculation

  - added LAND_FLAP_PERCENT and TKOFF_FLAP_PCNT parameters, to control
    the amount of flaps to use on takeoff and landing

  - the default WP_RADIUS has been raised from 30 to 90. Note that the
    L1 controller may choose to turn after the WP_RADIUS is
    reached. The WP_RADIUS only controls the earliest point at which
    the turn can happen, so a larger WP_RADIUS usually leads to better
    flight paths, especially for faster aircraft.

  - send gyro and accel status separately to the GCS (thanks to Randy)

  - support setting the acceptance radius in mission waypoints (in
    parameter 2), which allows for better control of waypoints where
    actions such as servo release will happen

  - fixed GPS time offset in HIL

  - added RELAY_DEFAULT parameter, allowing control of relay state on
    boot

  - fixed sdcard logging on PX4v1

  - added GPS_SBAS_MODE and GPS_MIN_ELEV parameters for better control
    of the use of SBAS and the GPS elevation mask for advanced users

Happy flying!


Release 3.1.0, August 26th 2014
-------------------------------

The ardupilot development team is proud to announce the release of
version 3.1.0 of APM:Plane. This is a major release with a lot of new
features and bug fixes.

The biggest change in this release is the addition of automatic
terrain following. Terrain following allows the autopilot to guide the
aircraft over varying terrain at a constant height above the ground
using an on-board terrain database.

Changes in this release:

  - added terrain following support. See
    http://plane.ardupilot.com/wiki/common-terrain-following/

  - added support for higher baudrates on telemetry ports, to make it
    easier to use high rate telemetry to companion boards. Rates of up
    to 1.5MBit are now supported to companion boards.

  - added new takeoff code, including new parameters:
      TKOFF_TDRAG_ELEV, TKOFF_TDRAG_SPD1, TKOFF_ROTATE_SPD,
      TKOFF_THR_SLEW and TKOFF_THR_MAX. 
    This gives fine grained control of auto takeoff for tail dragger aircraft.

  - overhauled glide slope code to fix glide slope handling in many
    situations. This makes transitions between different altitudes
    much smoother.

  - prevent early waypoint completion for straight ahead
    waypoints. This makes for more accurate servo release at specific
    locations, for applications such as dropping water bottles.

  - added MAV_CMD_DO_INVERTED_FLIGHT command in missions, to change
    from normal to inverted flight in AUTO (thanks to Philip Rowse for
    testing of this feature).

  - new Rangefinder code with support for a wider range of rangefinder
    types including a range of Lidars (thanks to Allyson Kreft)

  - added support for FrSky telemetry via SERIAL2_PROTOCOL parameter
    (thanks to Matthias Badaire)

  - added new STAB_PITCH_DOWN parameter to improve low throttle
    behaviour in FBWA mode, making a stall less likely in FBWA mode
    (thanks to Jack Pittar for the idea).

  - added GLIDE_SLOPE_MIN parameter for better handling of small
    altitude deviations in AUTO. This makes for more accurate altitude
    tracking in AUTO.

  - added support for Linux based autopilots, initially with the PXF
    BeagleBoneBlack cape and the Erle robotics board. Support for more
    boards is expected in future releases. Thanks to Victor, Sid and
    Anuj for their great work on the Linux port. See
    http://diydrones.com/profiles/blogs/first-flight-of-ardupilot-on-linux
    for details.

  - prevent cross-tracking on some waypoint types, such as when
    initially entering AUTO or when the user commands a change of
    target waypoint.

  - fixed servo demo on startup (thanks to Klrill-ka)

  - added AFS (Advanced Failsafe) support on 32 bit boards by
    default. See
    http://plane.ardupilot.com/wiki/advanced-failsafe-configuration/

  - added support for monitoring voltage of a 2nd battery via BATTERY2
    MAVLink message

  - added airspeed sensor support in HIL

  - fixed HIL on APM2. HIL should now work again on all boards.

  - added StorageManager library, which expands available FRAM storage
    on Pixhawk to 16 kByte. This allows for 724 waypoints, 50 rally
    points and 84 fence points on Pixhawk.

  - improved steering on landing, so the plane is actively steered
    right through the landing.

  - improved reporting of magnetometer and barometer errors to the GCS

  - added FBWA_TDRAG_CHAN parameter, for easier FBWA takeoffs of tail
    draggers, and better testing of steering tuning for auto takeoff.

  - fixed failsafe pass through with no RC input (thanks to Klrill-ka)

  - fixed a bug in automatic flow control detection for serial ports
    in Pixhawk

  - fixed use of FMU servo pins as digital inputs on Pixhawk

  - imported latest updates for VRBrain boards (thanks to Emile
    Castelnuovo and Luca Micheletti)

  - updates to the Piksi GPS support (thanks to Niels Joubert)

  - improved gyro estimate in DCM (thanks to Jon Challinger)

  - improved position projection in DCM in wind (thanks to Przemek
    Lekston)

  - several updates to AP_NavEKF for more robust handling of errors
    (thanks to Paul Riseborough)

  - improved simulation of rangefinders in SITL

  - lots of small code cleanups thanks to Daniel Frenzel

  - initial support for NavIO board from Mikhail Avkhimenia

  - fixed logging of RCOU for up to 12 channels (thanks to Emile
    Castelnuovo)

  - code cleanups from Silvia Nunezrivero

  - improved parameter download speed on radio links with no flow
    control

Many thanks to everyone who contributed to this release, especially
our beta testers Marco, Paul, Philip and Iam.

Happy flying!


Release 3.0.3, May 19th 2014
----------------------------

The ardupilot development team is proud to announce the release of
version 3.0.3 of APM:Plane. This release contains some important bug
fixes for all supported boards.

The key bug fixes in this release are:

 - fixed handling of filter divergance in the EKF filter
 - fixed a glide slope calculation bug when entering AUTO mode

The EKF fixes are the main focus of this release. During testing of
APM:Plane with the AHRS_EKF_USE enabled it was found that under some
circumstances the EKF could diverge, resulting in loss of attitude
estimate. Unless the pilot quickly took control in MANUAL this could
result in the aircraft crashing.

The fix for this problem was in several parts. The main fix was to
prevent the divergance, but as a precuation against future bugs of
this type additional numerical checks were added to allow the EKF to
automatically reset in flight when the internal state shows
large gyro bias changes, which are the first sign of something going
wrong in the filter. If this happens again the EKF will automatically
disable itself for 10 seconds, allowing APM:Plane to fall back to the
old DCM code. The EKF will then reset itself using initial state based
on the DCM state. The aircraft will report the failure using the AHRS
health bit in the SYS_STATUS MAVLink message.

The default EKF tuning parameters were also updated based on a number
of user supplied flight logs to increase the robustness of the filter.

The second bug fixed in this release relates to the glide slope
calculation when the aircraft enters AUTO mode for the first time when
at an altitude above the altitude of the first waypoint in the
mission. The starting point for the glide slope was incorrectly
calculated using the home altitude, which resulted in the aircraft
descending below the first waypoint altitude before climbing again. In
some circumstances this could lead to a crash due to local terrain.

Many thanks to everyone who tested this release. Special thanks to
Dellarb for reporting the glide slope bug and to Paul Riseborough for
all his work on the EKF code over the last few weeks.

Happy flying!


Release 3.0.2, May 4th 2014
---------------------------

The ardupilot development team is proud to announce the release of
version 3.0.2 of APM:Plane. This release combines some important bug
fixes with some new features.

I2C bug fix
-----------

The most important change for this release is a bug fix for an I2C bug
in the NuttX I2C driver code that could (under some rare
circumstances) cause a Pixhawk to crash. This bug fix is the primary
reason for doing a new release now.

This bug was able to be reproduced by creating a 1.3m GPS cable
carrying both the I2C signals for a magnetometer and the UART signals
for the GPS. Interference between these two signals could cause the
I2C controller to give spurious data to the I2C driver. The I2C driver
did not have sufficient protection against these errors and could
crash the board.

While we have not been able to reproduce this error with the normal
cables that come with a Pixhawk we cannot rule out the bug triggering
with shorter cables, so we are doing a fast release to fix the bug.

Autotune
--------

This release also includes an important new feature - automatic
roll/pitch tuning. While this feature is still considered experimental
we have had very positive feedback from beta testers and have decided
to include it in the release.

Full documentation for how to use automatic tuning is available here:

  http://plane.ardupilot.com/wiki/automatic-tuning-with-autotune/

we hope that the automatic tuning will help users who have had
difficulty with the standard APM:Plane manual tuning procedure. We
plan on extending autotune to other aspects of fixed wing tuning in
future releases.

Other changes
-------------

 - fixed a glide slope calculation error when very close to waypoints
 - fixed a bug when swithing to another auto-throttle mode during auto
   takeoff (thanks to Marco for finding this bug!)
 - added MIS_AUTORESET parameter (thanks to Andrew Chapman)
 - support compassmot calibration by supplying current measurments to the
   compass driver (thanks to Jon Challinger)
 - fixed a GPS driver bug that could cause GPS lag in case of lost GPS
   samples (thanks to Jon Challinger)
 - fixed a LOITER_TURNS bug in missions for counter-clockwise loiter
   (thanks to Iskess for finding this bug)
 - added support for OBC termination requirements to PX4IO
 - added support for pressure altitude termination to OBC module
 - fixed EKF wind estimation with no airspeed sensor (thanks to Paul
   Riseborough)
 - improved tuning of EKF for fixed wing aircraft (thanks to Paul
   Riseborough)
 - Converted rally point code to library AP_Rally (thanks to Andrew
   Chapman)
 - added SITL checking for numerical errors

Thanks to testers!

Many thanks to everyone who tested the beta versions of this release!
Special thanks to Marco, Paul, Jon, Iam, JNJO, sonicdahousecat and
Keeyen for providing testing of both existing features and the new
autotune code.


Release 3.0.1, April 9th 2014
-----------------------------

I've just released APM:Plane 3.0.1, a bug fix release for the 3.0.0 release.
This release fixes two bugs:

    throttle failsafe for aircraft using PWM level for failsafe detection
    wind reporting with EKF enabled and no airspeed sensor

The throttle failsafe fix is a critical bugfix, which is why I am
doing a new release so soon. The bug was found by Sam Tabor, and he
posted the bug report before the 3.0.0 release, but I didn't notice it
in the release preparations.  The bug only affects systems using PWM
value as the sole method of detecting loss of RC control. I hadn't
noticed it myself as my planes all use receivers which stop sending
value PWM frames when the RC link is lost. In that case failsafe
worked correctly. Receivers that keep sending PWM frames but with low
throttle levels are common though, so this is a very important fix.
Many thanks to Sam for reporting the bug, and my apologies for not
noticing it in time for the 3.0.0 release.


Release 3.0.0, April 8th 2014
-----------------------------

The ardupilot development team is proud to announce the release of
version 3.0.0 of APM:Plane. This is a major release with a lot of new
features.

For each release I try to highlight the two or 3 key new features that
have gone in since the last release. That is a more difficult task
this time around because there are just so many new things. Still, I
think the most important ones are the new Extended Kalman Filter (EKF)
for attitude/position estimation, the extensive dual sensors support
and the new AP_Mission library.

We have also managed to still keep support for the APM1 and APM2,
although quite a few of the new features are not available on those
boards. We don't yet know for how long we'll be able to keep going on
supporting these old boards, so if you are thinking of getting a new
board then you should get a Pixhawk, and if you want the best
performance from the APM:Plane code then you should swap to a
Pixhawk now. It really is a big improvement.

New Extended Kalman Filter
--------------------------

The biggest change for the 3.0.0 release (and in fact the major reason
why we are calling it 3.0.0) is the new Extended Kalman Filter from
Paul Riseborough. Using an EKF for attitude and position estimation
was never an option on the APM2 as it didn't have the CPU power or
memory to handle it. The Pixhawk does have plenty of floating point
performance, and Paul has done a fantastic job of taking full
advantage of the faster board.

As this is the first stable release with the EKF code we have decided
to not enable it by default. It does however run all the time in
parallel with the existing DCM code, and both attitude/position
solutions are logged both to the on-board SD card and over
MAVLink. You can enable the EKF code using the parameter
AHRS_EKF_USE=1, which can be set and unset while flying, allowing you
to experiment with using the EKF either by examining your logs with
the EKF disabled to see how it would have done or by enabling it while
flying.

The main thing you will notice with the EKF enabled is more accurate
attitude estimation and better handling of sensor glitches. A Kalman
filter has an internal estimate of the reliability of each of its
sensor inputs, and is able to weight them accordingly. This means that
if your accelerometers start giving data that is inconsistent with
your other sensors then it can cope in a much more graceful way than
our old DCM code.

The result is more accurate flying, particularly in turns. It also
makes it possible to use higher tuning gains, as the increased
accuracy of the attitude estimation means that you can push the
airframe harder without it becoming unstable. You may find you can use
a smaller value for NAVL1_PERIOD, giving tighter turns, and higher
gains on your roll and pitch attitude controllers.

Paul has written up a more technical description of the new EKF code
here:

  http://plane.ardupilot.com/wiki/common-apm-navigation-extended-kalman-filter-overview/


Dual Sensors
------------

The second really big change for this release is support for
dual-sensors. We now take full advantage of the dual accelerometers
and dual gyros in the Pixhawk, and can use dual-GPS for GPS
failover. We already had dual compass support, so the only main
sensors we don't support two of now are the barometer and the airspeed
sensor. I fully expect we will support dual baro and dual airspeed in
a future release.

You might wonder why dual sensors is useful, so let me give you an
example. I fly a lot of nitro and petrol planes, and one of my planes
(a BigStik 60) had a strange problem where it would be flying
perfectly in AUTO mode, then when the throttle reached a very specific
level the pitch solution would go crazy (sometimes off by 90
degrees). I managed to recover in MANUAL each time, but it certainly
was exciting!

A careful analysis of the logs showed that the culprit was
accelerometer aliasing. At a very specific throttle level the Z
accelerometer got a DC offset of 11 m/s/s. So when the plane was
flying along nice and level the Z accelerometer would change from -10
m/s/s to +1 m/s/s. That resulted in massive errors in the attitude
solution.

This sort of error happens because of the way the accelerometer is
sampled. In the APM code the MPU6000 (used on both the APM2 and
Pixhawk) samples the acceleration at 1kHz. So if you have a strong
vibrational mode that is right on 1kHz then you are sampling the "top
of the sine wave", and get a DC offset.

The normal way to fix this issue is to improve the physical
anti-vibration mounting in the aircraft, but I don't like to fix
problems like this by making changes to my aircraft, as if I fix my
aircraft it does nothing for the thousands of other people running the
same code. As the lead APM developer I instead like to fix things in
software, so that everyone benefits.

The solution was to take advantage of the fact that the Pixhawk has
two accelerometers, one is a MPU6000, and the 2nd is a LSM303D. The
LSM303D is sampled at 800Hz, whereas the MPU6000 is sampled at
1kHz. It would be extremely unusual to have a vibration mode with
aliasing at both frequencies at once, which means that all we needed
to do was work out which accelerometer is accurate at any point in
time. For the DCM code that involved matching each accelerometer at
each time step to the combination of the GPS velocity vector and
current attitude, and for the EKF it was a matter of producing a
weighting for the two accelerometers based on the covariance matrix.

The result is that the plane flew perfectly with the new dual
accelerometer code, automatically switching between accelerometers as
aliasing occurred.

Since adding that code I have been on the lookout for signs of
aliasing in other logs that people send me, and it looks like it is
more common than we expected. It is rarely so dramatic as seen on my
BigStik, but often results in some pitch error in turns. I am hopeful
that with a Pixhawk and the 3.0 release of APM:Plane that these types
of problems will now be greatly reduced.

For the dual gyro support we went with a much simpler solution and
just average the two gyros when both are healthy. That reduces noise,
and works well, but doesn't produce the dramatic improvements that the
dual accelerometer code resulted in.

Dual GPS was also quite a large development effort. We now support
connecting a 2nd GPS to the serial4/5 port on the Pixhawk. This allows
you to protect against GPS glitches, and has also allowed us to get a
lot of logs showing that even with two identical GPS modules it is
quite common for one of the GPS modules to get a significant error
during a flight. The new code currently switches between the two GPS
modules based on the lock status and number of satellites, but we are
working on a more sophisticated switching mechanism.

Supporting dual GPS has also made it easier to test new GPS
modules. This has enabled us to do more direct comparisons between the
Lea6 and the Neo7 for example, and found the Neo7 performs very
well. It also helps with developing completely new GPS drivers, such
as the Piksi driver (see notes below).

New AP_Mission library
----------------------

Many months ago Brandon Jones re-worked our mission handling code to
be a library, making it much cleaner and fixing a number of long term
annoyances with the behaviour. For this release Randy built upon the
work that Brandon did and created the new AP_Mission library.

The main feature of this library from the point of view of the
developers is that it has a much cleaner interface, but it also has
some new user-visible features. The one that many users will be glad
to hear is that it no longer needs a "dummy waypoint" after a
jump. That was always an annoyance when creating complex missions.

The real advantage of AP_Mission will come in future releases though,
as it has the ability to look ahead in the mission to see what is
coming, allowing for more sophisticated navigation. The copter code
already takes advantage of this with the new spline waypoint feature,
and we expect to take similar advantage of this in APM:Plane in future
releases.

New Piksi GPS driver
--------------------

One of the most exciting things to happen in the world of GPS modules
in the last couple of years is the announcement by SwiftNav that they
would be producing a RTK capable GPS module called the Piksi at a
price that (while certainly expensive!) is within reach of more
dedicated hobbyists. It offers the possibility of decimeter and
possibly even centimetre level relative positioning, which has a lot
of potential for small aircraft, particularly for landing control and
more precise aerial mapping.

This release of APM:Plane has the first driver for the Piksi. The new
driver is written by Niels Joubert, and he has done a great job. It is
only a start though, as this is a single point positioning driver. It
will allow you to use your new Piksi if you were part of the
kickstarter, but it doesn't yet let you use it in RTK mode. Niels and
the SwiftNav team are working on a full RTK driver which we hope will
be in the next release.

Support for more RC channels
----------------------------

This release is the first to allow use of more than 8 RC input
channels. We now support up to 18 input channels on SBus on Pixhawk,
with up to 14 of them able to be assigned to functions using the
RCn_FUNCTION settings. For my own flying I now use a FrSky Taranis
with X8R and X6R receivers and they work very nicely. Many thanks to
the PX4 team, and especially to Holger and Lorenz for their great work
on improving the SBus code.

Flaperon Support
----------------

This release is the first to have integrated flaperon support, and
also includes much improved flaps support in general. You can now set
a FLAP_IN_CHANNEL parameter to give an RC channel for manual flap
control, and setup a FLAPERON_OUTPUT to allow you to setup your
ailerons for both manual and automatic flaperon control.

We don't yet have a full wiki page on setting up flaperons, but you
can read about the parameters here:

  http://plane.ardupilot.com/wiki/arduplane-parameters/#Flap_input_channel_ArduPlaneFLAP_IN_CHANNEL

Geofence improvements
---------------------

Michael Day has made an number of significant improvements to the
geo-fencing support for this release. It is now possible to
enable/disable the geofence via MAVLink, allowing ground stations to
control the fence. 

There are also three new fence control parameters. One is
FENCE_RET_RALLY which when enabled tells APM to fly back to the
closest rally point on a fence breach, instead of flying to the center
of the fence area. That can be very useful for more precise control of
fence breach handling.

The second new parameter is FENCE_AUTOENABLE, which allows you to
automatically enable a geofence on takeoff, and disable when doing an
automatic landing. That is very useful for fully automated missions.

The third new geofence parameter is FENCE_RETALT, which allows you to
specify a return altitude on fence breach. This can be used to
override the default (half way between min and max fence altitude).

Automatic Landing improvements
------------------------------

Michael has also been busy on the automatic landing code, with
improvements to the TECS speed/height control when landing and new
TECS_LAND_ARSPD and TECS_LAND_THR parameters to control airspeed and
throttle when landing. This is much simpler to setup than
DO_CHANGE_SPEED commands in a mission.

Michael is also working on automatic path planning for landing, based
on the rally points code. We hope that will get into a release soon.

Detailed Pixhawk Power Logging
------------------------------

One of the most common causes of issues with autopilots is power
handling, with poor power supplies leading to brownouts or sensor
malfunction. For this release we have enabled detailed logging of the
information available from the on-board power management system of the
Pixhawk, allowing us to log the status of 3 different power sources
(brick input, servo rail and USB) and log the voltage level of the
servo rail separately from the 5v peripheral rail on the FMU.

This new logging should make it much easier for us to diagnose power
issues that users may run into.

New SERIAL_CONTROL protocol
---------------------------

This release adds a new SERIAL_CONTROL MAVLink message which makes it
possible to remotely control a serial port on a Pixhawk from a ground
station. This makes it possible to do things like upgrade the firmware
on a 3DR radio without removing it from an aircraft, and will also
make it possible to attach to and control a GPS without removing it
from the plane.

There is still work to be done in the ground station code to take full
advantage of this new feature and we hope to provide documentation
soon on how to use u-Blox uCenter to talk to and configure a GPS in an
aircraft and to offer an easy 3DR radio upgrade button via the Pixhawk
USB port.

Lots of other changes!
----------------------

There have been a lot of other improvements in the code, but to stop
this turning into a book instead of a set of release notes I'll stop
the detailed description there. Instead here is a list of the more
important changes not mentioned above:

  - added LOG_WHEN_DISARMED flag in LOG_BITMASK
  - raised default LIM_PITCH_MAX to 20 degrees
  - support a separate steering channel from the rudder channel
  - faster mission upload on USB
  - new mavlink API for reduced memory usage
  - fixes for the APM_OBC Outback Challenge module
  - fixed accelerometer launch detection with no airspeed sensor
  - greatly improved UART flow control on Pixhawk
  - added BRD_SAFETYENABLE option to auto-enable the safety
    switch on PX4 and Pixhawk on boot
  - fixed pitot tube ordering bug and added ARSPD_TUBE_ORDER parameter
  - fixed log corruption bug on PX4 and Pixhawk
  - fixed repeated log download bug on PX4 and Pixhawk
  - new Replay tool for detailed log replay and analysis
  - flymaple updates from Mike McCauley
  - fixed zero logs display in MAVLink log download
  - fixed norm_input for cruise mode attitude control
  - added RADIO_STATUS logging in aircraft logs
  - added UBX monitor messages for detailed hardware logging of u-Blox status
  - added MS4525 I2C airspeed sensor voltage compensation


I hope that everyone enjoys flying this new APM:Plane release as much
as we enjoyed producing it! It is a major milestone in the development
of the fixed wing code for APM, and I think puts us in a great
position for future development.


Happy flying!
