ArduPilot / ardupilot

ArduPlane, ArduCopter, ArduRover, ArduSub source
http://ardupilot.org/
GNU General Public License v3.0
10.98k stars 17.51k forks source link

Plane: Landing glideslope offset #9934

Open Naterater opened 5 years ago

Naterater commented 5 years ago

Feature request

Is your feature request related to a problem? Please describe. Plane's traditional landing sequence is fundamentally flawed to achieve smooth flares and touchdowns at the landing waypoint. For a proper final approach, pre-flare, and landing, the landing will always be overshot, often based on the wind speed. The current approach is designed as more of a guided controlled crash sequence.

Quite simply, this is because the glideslope is calculated on a line directly to the land waypoint. Pre-flares and flares only cause a reduction in descent rate, but they do not necessarily slow the forward speed by a proportional amount. For a properly configured landing, the glideslope must be targeted at a point before the touchdown point so that the pre-flare and flare can arrest the descent rate.

This shows itself the most in reverse-thrust enabled landings. The glide slope is achieved with reverse thrust during the final approach to the land waypoint. Once the flare point is hit, the plane's throttle is reduced to zero, and that causes one of two things.

1 - The glideslope is continued to the touchdown point, and the plane is effectively crashed because of the increase in airspeed at the end of the landing in order to keep the steep descent.

2 - The plane flares properly, increases its pitch in order to slow the rate of descent, but lands well beyond the LAND waypoint.

Describe the solution you'd like Add a parameter for the offset of the glideslope calculation that makes the glide target point in front of the touchdown point (land waypoint). Theoretically it could be a fake waypoint between the last waypoint and the LAND waypoint.

Parameter should be named LAND_FLARE_DIST with a description: distance the glide slope is offset to achieve the landings that are not short or long.

This would be much easier than changing TECS and other parameters in order to achieve consistent spot landings.

Describe alternatives you've considered Offsetting the landing waypoint manually

Platform [ ] All [ ] AntennaTracker [ ] Copter [X] Plane [ ] Rover [ ] Submarine

Additional context Add any other context or screenshots about the feature request here.

samuelctabor commented 5 years ago

Hi Nate,

I've recently dug into the autolanding feature as I was also seeing some unexpected behaviour. The documentation is very thin unfortunately.

Based on my review I believe the glide slope offset you mention is actually already implemented. During the approach, the glide slope is actually calculated to pass through a point in front of the LAND waypoint. The distance in front is calculated as groundspeed * flare_alt / TECS_LAND_SINK, where flare_alt is LAND_FLARE_ALT, or LAND_FLARE_SEC times glide slope sink rate.

Could you upload a parameter file and .BIN log to diagnose your specific issue?

Sam

Naterater commented 5 years ago

I'll look in to the logs more, but this may explain one reason why users are having very inconsistent landings -- mission planner and other GCS calculate a glideslope using altitudes and waypoints, however the vertical navigation controller under your logic is also using parameters to change that initial glide slope.

Would you be able to look into that math a bit more... That distance should be flare_alt TECS_LAND_SINK TECS_LAND_ARSPD. I hope it's multiplied by airspeed

samuelctabor commented 5 years ago

Yes I agree, it would be pretty natural for a user to set the mission to give an acceptable gradient between the two waypoint, but the actual approach might need to be much steeper depending on FLARE_ALT, FLARE_SEC and LAND_SINK.

Another potential pitfall is that the aircraft approach will be lower farther out than the user might expect, if he/she assumed the glidepath went through the waypoint. If there are trees or other obstructions to clear on approach this could be interesting.

You are right, the distance is actually multiplied by groundspeed, I'll edit my original post. If you're interested the code is here https://github.com/ArduPilot/ardupilot/blob/master/libraries/AP_Landing/AP_Landing_Slope.cpp#L313