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
noticible 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!
