Michael Day's Posts (4)

Sort by


ArduPlane Rally Point Landing Proposal: Version 2

Based on some more field testing as well as some great comments on my previous post about Rally Landing, I'm proud to propose a "version 2" for Rally Landings (implemented for ArduPlane).  This post is meant to be an update of the first one, so see the other post for details about the preexisting features.  If this feature is incorporated into the master branches, I plan to write a wiki page with documentation combining all this information.

Changes in this version:

  1. Tangential exit from Rally Loiter now possible when landing.  See LAND_BREAK_PATH parameter.
  2. Ground speed replaces airspeed as a criterion for exiting loiter.  During field testing we sometimes had winds that were causing the airspeed sensor to read high and it took forever to exit loiter.
  3. A new parameter LAND_MAX_TURNS is introduced that allows you to limit the number of loops the plane goes through in loiter after reaching break altitude.
  4. A new MAVLink message, MAV_CMD_DO_GO_AROUND, and a corresponding MAVProxy command "rally land abort" are introduced.  This is to increase safety in case of a wave-off or go-around.

Setup tangential or non-tangental break n MAVProxy:

Set your Rally Point as usual.  Default is now for tangential exit to the closest landing waypoint (remember that you must have a landing point in the mission for a line to be draw from the rally loiter to a landing point).  This example has rally point near the bottom center of the rectangular mission.  The yellow line is the predicted approach of the plane:

3689595678?profile=originalNote that the side of the circle the plane will exit from is dictated by the loiter direction (the above picture has a counter-clockwise loiter).  Loiter direction can be changed by changing the sign of the WP_LOITER_RAD parameter.  In this example here is what happens when changing that parameter from -50 to 50:

3689595596?profile=originalThe above image has a clockwise loiter.  You'd probably want to move the Rally Point southwest to line the approach up with the runway.

If you want to use a non-tangential exit for some reason then change the LAND_BREAK_PATH parameter from 0 to 1 and you'll end up with:

For this approach it doesn't matter so much which direction the plane is loitering.  Again, you'd want to move the Rally Point southwest to line the approach up with the runway.

Safer Rally Land Abort

During later field testing we thought about the need to wave-off of a landing from time to time.  Since simply switching away from the landing waypoint back to the Rally Point could result in the plane veering towards people on the ground (when turning around to go to the Rally Point behind the plane) we thought there must be a better way. 

A go-around method is our answer.  Our solution is: if the plane is on final approach (has broken out of loiter) and has not yet flared it is now possible use the "rally land abort" command in MAVProxy will result in the plane gaining altitude while maintaining it's approach course (which is likely along the runway).  After recovering enough altitude (a setting in MAVProxy currently is used to decide how much altitude is enough), the plane will return to the Rally Point and loiter until told to do something else.

Note that it is also possible to abort a landing by switching modes or changing waypoints.  This is OK with a switch to MANUAL or FBWA if you don't like how the plane is landing and watch to switch to manual control.  However, changing waypoints or switching to RTL or GUIDED with the plane close to the ground during a rally landing could result in the plane veering where you don't want it.

A Note About Our Plane, Landing Gears, Rudders, and Flaps

The plane we use has no landing gear -- it is a foamy flying wing that lands on its belly on skids.  If your plane has a landing gear note that we haven't done any development or testing for maintaining heading with the rudder after touchdown.  We also don't have any support for automatically dropping a retractable landing gear or using flaps to slow down.

Safe Landing Practices

This feature make an autonomous landing from a Rally Point _possible_ but it doesn't do everything for you.  You will need to ensure you have a good glide slope for your airframe and that your speed settings on approach avoid a stall.


The patches for Rally Landing are here:




If anybody has questions/comments/concerns please post them here.


Michael Day

Read more…

Landing from Rally Points


Howdy devs,

I've been working on this for a few months now and I think it is finally ready for evaluation for a possible merge into master. My team has been wanting to simplify planning for autonomous landings so that mission planning for autonomous landing is less complex. Our motivation is that if we need to change a planned landing approach in flight all we have to do is change one waypoint.  In this proposal, we just change a Rally Point.  I have made 3 patches to ardupilot, mavlink, and MAVProxy:




What these "ral_landing" branches do is introduce a new DO command (MAV_CMD_DO_RALLY_LAND) to mavlink, and then support that command in MAVProxy by allowing a user to type "rally land" at the prompt (the mission must have been setup properly for this to work ... keep reading).  The ardupilot patch introduces an AP_Land library that is designed to allow a landing to be performed from a Rally Point.  The L1 controller is used to get the plane to find the line between a rally point and the nearest landing point in the mission, providing sufficient path planning to reliably arrive at the landing point at the desired heading.  To ensure the plane does not do a 180 degree turn should it fly past the waypoint (unlikely considering the LAND_FLARE_SEC parameter ... but possible if somebody disables flaring), the L1 controller uses a Location extrapolated out 1km beyond the landing waypoint (similar to what is done continuously in CRUISE mode).

What happens during a Rally Landing is that the plane transits to the Rally Point at its loiter altitude. When it begins loitering it will then begin slowing and descending.  Three conditions must be met before the plane will break out of the loiter and head for the landing point.

  1. The plane is within 5 meters of a desired "break" altitude (for "breaking out" of loiter).
  2. The plane is within 2 m/s of the desired landing speed.
  3. The plane's heading is within 3 degrees of the heading required to transit towards the landing waypoint.

Note that if the plane should reach the break altitude and either of the other two conditions are not yet met then it will continue to loiter until they are (plane will not continue descending).  Also, if the plane reaches the target landing speed it will not continue slowing.

I have tested this extensively in SITL and a bit in the field and it appears to function as desired.  To setup a SITL or field test you need to be aware of the following parameters:

  1. TECS_LAND_ARSPD -- the speed that the plane will seek during landing approach.  I use 15 in SITL and for my airframe at the field.
  2. TECS_LAND_SPDWGT -- this can be tweaked to favor height or speed error as you desired for your airframe (gliders might not care so much about height and may want to favor speed).  For my setup 1.0 (use height and speed error equally) works fine.
  3. TECS_LAND_THR -- throttle to seek during landing approach if the plane doesn't have an airspeed sensor.  For now, if doing a Rally Landing then use an airspeed sensor. I haven't tested without one. :)
  4. LAND_FLARE_ALT -- Altitude at which the plane will flare; meaning: hold heading and pitch (see LAND_PITCH_CD) and kill throttle.  I've used 10 in my tests.
  5. LAND_FLARE_SEC -- When the plane is this number of seconds before reaching the landing waypoint the plane will flare.  Note that this is an either/or situation with LAND_FLARE_ALT.  If the plane reaches LAND_FLARE_ALT before reaching the point defined by this parameter it will flare.  Conversely, if the plane reaches this point before reaching LAND_FLARE_ALT it will flare.  Either way, it only flares once.  I'm using 2 for this value.
  6. LAND_PITCH_CD -- Pitch angle the plane will hold in centidegrees after flaring.  I'm using -500 for my plane.
  7. LEVEL_ROLL_LIMIT -- During the flare phase of landing, the plane is constrained to roll only a bit (to keep from scraping wings on the ground).  I'm using 5.

If need be, see the Parameters Page for more detail on those parameters. There is also a new parameter introduced by the patch:

  • LAND_WING_LEVEL -- If set to 0: During final phase (flare phase) of landing allow ailerons to control heading.  If set to 1: Only the rudder controls heading.  I added this parameter after field testing; my plane (flying wing) has no rudder and even after flare I want those elevons to continue to navigate (on one test the plane was landing beautifully and after flare it started drifting away from the runway -- haven't had that problem since introducing this parameter).  The default value is 1, but I set it to 0.

When setting up a mission to utilize a Rally Landing with MAVProxy, setup the above parameters as desired.  Then create a mission with a landing waypoint in it.  Then add a rally point as follows:

"rally add <loiter_alt> <break_alt>"

I usually set as follows:

"rally add 100 40"

The loiter_alt sets the altitude at which the plane will transit to the Rally Point and loiter in RTL.  The break_alt sets the altitude at which the plane will break out of the loiter.

The approach that the plane will take is completely user-defined.  You're completely free to setup a rally point that is going to give the plane a difficult approach to the landing point, but I wouldn't recommend it (e.g., don't put the rally point right on top of the landing point -- give your plane a nice gentle glide slope). :) With flexibility comes responsibility.  I've added a GUI element to MAVProxy that will hopefully help you line up your plane with a runway.  If a mission with a landing waypoint has been loaded into MAVProxy ("wp load" or "wp list" commands), then a line will be drawn between each rally point and the nearest landing point after rally points are loaded ("rally list").  See this figure:


This initial patch proposal does not support flaps or any other kind of air braking.  Maybe in the future.... :)

I hope you all find this proposed change to your liking.  Please let me know if you have comments / questions / concerns.



Read more…