Browse Source

commander sets vstatus.condition_landed = false for fw systems (until we have a landing detector): solves multiple issues with the state machine in the navigator app

sbg
Thomas Gubler 11 years ago
parent
commit
48f777d071
  1. 8
      src/modules/commander/commander.cpp
  2. 9
      src/modules/navigator/navigator_main.cpp

8
src/modules/commander/commander.cpp

@ -926,10 +926,12 @@ int commander_thread_main(int argc, char *argv[]) @@ -926,10 +926,12 @@ int commander_thread_main(int argc, char *argv[])
check_valid(local_position.timestamp, POSITION_TIMEOUT, local_position.xy_valid, &(status.condition_local_position_valid), &status_changed);
check_valid(local_position.timestamp, POSITION_TIMEOUT, local_position.z_valid, &(status.condition_local_altitude_valid), &status_changed);
static bool published_condition_landed_fw = false;
if (status.is_rotary_wing && status.condition_local_altitude_valid) {
if (status.condition_landed != local_position.landed) {
status.condition_landed = local_position.landed;
status_changed = true;
published_condition_landed_fw = false; //make sure condition_landed is published again if the system type changes
if (status.condition_landed) {
mavlink_log_critical(mavlink_fd, "#audio: LANDED");
@ -938,6 +940,12 @@ int commander_thread_main(int argc, char *argv[]) @@ -938,6 +940,12 @@ int commander_thread_main(int argc, char *argv[])
mavlink_log_critical(mavlink_fd, "#audio: IN AIR");
}
}
} else {
if (!published_condition_landed_fw) {
status.condition_landed = false; // Fixedwing does not have a landing detector currently
published_condition_landed_fw = true;
status_changed = true;
}
}
/* update battery status */

9
src/modules/navigator/navigator_main.cpp

@ -1443,14 +1443,7 @@ Navigator::check_mission_item_reached() @@ -1443,14 +1443,7 @@ Navigator::check_mission_item_reached()
}
if (_mission_item.nav_cmd == NAV_CMD_LAND) {
if (_vstatus.is_rotary_wing) {
return _vstatus.condition_landed;
} else {
/* For fw there is currently no landing detector:
* make sure control is not stopped when overshooting the landing waypoint */
return false;
}
return _vstatus.condition_landed;
}
/* XXX TODO count turns */

Loading…
Cancel
Save