mirror of https://github.com/ArduPilot/ardupilot
APM: changed hold_course for landing to be based on yaw_sensor
when we are in the final stages of a landing (less than 2 seconds from landing waypoint, or less than 3m above landing altitude) we switch the navigation to use a fixed course. The code previously used the crosstrack_bearing for this, but this can lead to a large nav_roll in this final stage of the approach, which can put a wing into the runway. In autotest we were seeing a nav_roll value of -45 degrees as we crossed the transition point for the landing, which often led to a crash. This changes the code to use the current yaw_sensor value instead, which is much less likely to lead to large rolls in the final landing stages.
This commit is contained in:
parent
c6b6320b43
commit
2dcb594f4a
|
@ -314,13 +314,19 @@ static bool verify_land()
|
|||
if (((wp_distance > 0) && (wp_distance <= (2*g_gps->ground_speed/100)))
|
||||
|| (current_loc.alt <= next_WP.alt + 300)){
|
||||
|
||||
land_complete = 1; //Set land_complete if we are within 2 seconds distance or within 3 meters altitude
|
||||
land_complete = 1;
|
||||
|
||||
if(hold_course == -1){
|
||||
// save our current course to land
|
||||
//hold_course = yaw_sensor;
|
||||
// save the course line of the runway to land
|
||||
hold_course = crosstrack_bearing;
|
||||
if(hold_course == -1) {
|
||||
// we have just reached the threshold of 2 seconds or 3
|
||||
// meters to landing. We now don't want to do any radical
|
||||
// turns, as rolling could put the wings into the runway.
|
||||
// To prevent further turns we set hold_course to the
|
||||
// current heading. Previously we set this to
|
||||
// crosstrack_bearing, but the xtrack bearing can easily
|
||||
// be quite large at this point, and that could induce a
|
||||
// sudden large roll correction which is very nasty at
|
||||
// this point in the landing.
|
||||
hold_course = dcm.yaw_sensor;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue