Merge pull request #1227 from PX4/mission_fb

Improve user feedback on mission load fails
This commit is contained in:
Lorenz Meier
2014-07-29 02:24:44 -07:00
+21 -15
View File
@@ -314,30 +314,36 @@ Mission::set_mission_items()
/* set previous position setpoint to current */ /* set previous position setpoint to current */
set_previous_pos_setpoint(); set_previous_pos_setpoint();
/* get home distance state */
bool home_dist_ok = check_dist_1wp();
/* the home dist check provides user feedback, so we initialize it to this */
bool user_feedback_done = !home_dist_ok;
/* try setting onboard mission item */ /* try setting onboard mission item */
if (_param_onboard_enabled.get() && read_mission_item(true, true, &_mission_item)) { if (_param_onboard_enabled.get() && read_mission_item(true, true, &_mission_item)) {
/* if mission type changed, notify */ /* if mission type changed, notify */
if (_mission_type != MISSION_TYPE_ONBOARD) { if (_mission_type != MISSION_TYPE_ONBOARD) {
mavlink_log_info(_navigator->get_mavlink_fd(), "#audio: onboard mission running"); mavlink_log_critical(_navigator->get_mavlink_fd(), "onboard mission now running");
} }
_mission_type = MISSION_TYPE_ONBOARD; _mission_type = MISSION_TYPE_ONBOARD;
/* try setting offboard mission item */ /* try setting offboard mission item */
} else if (check_dist_1wp() && read_mission_item(false, true, &_mission_item)) { } else if (home_dist_ok && read_mission_item(false, true, &_mission_item)) {
/* if mission type changed, notify */ /* if mission type changed, notify */
if (_mission_type != MISSION_TYPE_OFFBOARD) { if (_mission_type != MISSION_TYPE_OFFBOARD) {
mavlink_log_info(_navigator->get_mavlink_fd(), "#audio: offboard mission running"); mavlink_log_critical(_navigator->get_mavlink_fd(), "offboard mission now running");
} }
_mission_type = MISSION_TYPE_OFFBOARD; _mission_type = MISSION_TYPE_OFFBOARD;
} else { } else {
/* no mission available, switch to loiter */ /* no mission available or mission finished, switch to loiter */
if (_mission_type != MISSION_TYPE_NONE) { if (_mission_type != MISSION_TYPE_NONE) {
mavlink_log_info(_navigator->get_mavlink_fd(), mavlink_log_critical(_navigator->get_mavlink_fd(), "mission finished, loitering");
"#audio: mission finished"); } else if (!user_feedback_done) {
} else { /* only tell users that we got no mission if there has not been any
mavlink_log_info(_navigator->get_mavlink_fd(), * better, more specific feedback yet
"#audio: no mission available"); */
mavlink_log_critical(_navigator->get_mavlink_fd(), "no valid mission available");
} }
_mission_type = MISSION_TYPE_NONE; _mission_type = MISSION_TYPE_NONE;
@@ -397,7 +403,7 @@ Mission::set_mission_items()
takeoff_alt = fmaxf(takeoff_alt, _navigator->get_home_position()->alt + _param_takeoff_alt.get()); takeoff_alt = fmaxf(takeoff_alt, _navigator->get_home_position()->alt + _param_takeoff_alt.get());
} }
mavlink_log_info(_navigator->get_mavlink_fd(), "#audio: takeoff to %.1fm above home", (double)(takeoff_alt - _navigator->get_home_position()->alt)); mavlink_log_critical(_navigator->get_mavlink_fd(), "takeoff to %.1f meters above home", (double)(takeoff_alt - _navigator->get_home_position()->alt));
_mission_item.lat = _navigator->get_global_position()->lat; _mission_item.lat = _navigator->get_global_position()->lat;
_mission_item.lon = _navigator->get_global_position()->lon; _mission_item.lon = _navigator->get_global_position()->lon;
@@ -483,7 +489,7 @@ Mission::read_mission_item(bool onboard, bool is_current, struct mission_item_s
if (dm_read(dm_item, *mission_index_ptr, &mission_item_tmp, len) != len) { if (dm_read(dm_item, *mission_index_ptr, &mission_item_tmp, len) != len) {
/* not supposed to happen unless the datamanager can't access the SD card, etc. */ /* not supposed to happen unless the datamanager can't access the SD card, etc. */
mavlink_log_critical(_navigator->get_mavlink_fd(), mavlink_log_critical(_navigator->get_mavlink_fd(),
"#audio: ERROR waypoint could not be read"); "ERROR waypoint could not be read");
return false; return false;
} }
@@ -502,7 +508,7 @@ Mission::read_mission_item(bool onboard, bool is_current, struct mission_item_s
/* not supposed to happen unless the datamanager can't access the /* not supposed to happen unless the datamanager can't access the
* dataman */ * dataman */
mavlink_log_critical(_navigator->get_mavlink_fd(), mavlink_log_critical(_navigator->get_mavlink_fd(),
"#audio: ERROR DO JUMP waypoint could not be written"); "ERROR DO JUMP waypoint could not be written");
return false; return false;
} }
} }
@@ -511,8 +517,8 @@ Mission::read_mission_item(bool onboard, bool is_current, struct mission_item_s
*mission_index_ptr = mission_item_tmp.do_jump_mission_index; *mission_index_ptr = mission_item_tmp.do_jump_mission_index;
} else { } else {
mavlink_log_info(_navigator->get_mavlink_fd(), mavlink_log_critical(_navigator->get_mavlink_fd(),
"#audio: DO JUMP repetitions completed"); "DO JUMP repetitions completed");
/* no more DO_JUMPS, therefore just try to continue with next mission item */ /* no more DO_JUMPS, therefore just try to continue with next mission item */
(*mission_index_ptr)++; (*mission_index_ptr)++;
} }
@@ -526,7 +532,7 @@ Mission::read_mission_item(bool onboard, bool is_current, struct mission_item_s
/* we have given up, we don't want to cycle forever */ /* we have given up, we don't want to cycle forever */
mavlink_log_critical(_navigator->get_mavlink_fd(), mavlink_log_critical(_navigator->get_mavlink_fd(),
"#audio: ERROR DO JUMP is cycling, giving up"); "ERROR DO JUMP is cycling, giving up");
return false; return false;
} }