Browse Source

Plane: support acceptance radius for waypoints

master
Andrew Tridgell 11 years ago
parent
commit
bf80a2485f
  1. 14
      ArduPlane/commands_logic.pde

14
ArduPlane/commands_logic.pde

@ -12,6 +12,8 @@ static void do_within_distance(const AP_Mission::Mission_Command& cmd);
static void do_change_alt(const AP_Mission::Mission_Command& cmd); static void do_change_alt(const AP_Mission::Mission_Command& cmd);
static void do_change_speed(const AP_Mission::Mission_Command& cmd); static void do_change_speed(const AP_Mission::Mission_Command& cmd);
static void do_set_home(const AP_Mission::Mission_Command& cmd); static void do_set_home(const AP_Mission::Mission_Command& cmd);
static bool verify_nav_wp(const AP_Mission::Mission_Command& cmd);
/********************************************************************************/ /********************************************************************************/
// Command Event Handlers // Command Event Handlers
@ -188,7 +190,7 @@ static bool verify_command(const AP_Mission::Mission_Command& cmd) // Ret
return verify_land(); return verify_land();
case MAV_CMD_NAV_WAYPOINT: case MAV_CMD_NAV_WAYPOINT:
return verify_nav_wp(); return verify_nav_wp(cmd);
case MAV_CMD_NAV_LOITER_UNLIM: case MAV_CMD_NAV_LOITER_UNLIM:
return verify_loiter_unlim(); return verify_loiter_unlim();
@ -374,7 +376,7 @@ static bool verify_takeoff()
update navigation for normal mission waypoints. Return true when the update navigation for normal mission waypoints. Return true when the
waypoint is complete waypoint is complete
*/ */
static bool verify_nav_wp() static bool verify_nav_wp(const AP_Mission::Mission_Command& cmd)
{ {
steer_state.hold_course_cd = -1; steer_state.hold_course_cd = -1;
@ -392,8 +394,14 @@ static bool verify_nav_wp()
} }
return false; return false;
} }
float acceptance_distance = nav_controller->turn_distance(g.waypoint_radius, auto_state.next_turn_angle);
if (cmd.p1 > 0) {
// allow user to override acceptance radius
acceptance_distance = cmd.p1;
}
if (wp_distance <= nav_controller->turn_distance(g.waypoint_radius, auto_state.next_turn_angle)) { if (wp_distance <= acceptance_distance) {
gcs_send_text_fmt(PSTR("Reached Waypoint #%i dist %um"), gcs_send_text_fmt(PSTR("Reached Waypoint #%i dist %um"),
(unsigned)mission.get_current_nav_cmd().index, (unsigned)mission.get_current_nav_cmd().index,
(unsigned)get_distance(current_loc, next_WP_loc)); (unsigned)get_distance(current_loc, next_WP_loc));

Loading…
Cancel
Save