Browse Source

APM: added XTRK_MIN_DIST option

this allows you to disable crosstrack correction on short legs
mission-4.1.18
Andrew Tridgell 13 years ago
parent
commit
96ea350143
  1. 2
      ArduPlane/Parameters.h
  2. 11
      ArduPlane/Parameters.pde
  3. 3
      ArduPlane/navigation.pde

2
ArduPlane/Parameters.h

@ -73,6 +73,7 @@ public: @@ -73,6 +73,7 @@ public:
k_param_reset_mission_chan,
k_param_land_flare_alt,
k_param_land_flare_sec,
k_param_crosstrack_min_distance,
// 110: Telemetry control
//
@ -237,6 +238,7 @@ public: @@ -237,6 +238,7 @@ public:
AP_Float crosstrack_gain;
AP_Int16 crosstrack_entry_angle;
AP_Int8 crosstrack_use_wind;
AP_Int16 crosstrack_min_distance;
// Estimation
//

11
ArduPlane/Parameters.pde

@ -126,7 +126,16 @@ const AP_Param::Info var_info[] PROGMEM = { @@ -126,7 +126,16 @@ const AP_Param::Info var_info[] PROGMEM = {
// @Description: If enabled, use wind estimation for navigation crosstrack when using a compass for yaw
// @Values: 0:Disabled,1:Enabled
// @User: Standard
GSCALAR(crosstrack_use_wind, "XTRK_USE_WIND", 1),
GSCALAR(crosstrack_use_wind, "XTRK_USE_WIND", 1),
// @Param: XTRK_MIN_DIST
// @DisplayName: Crosstrack mininum distance
// @Description: Minimum distance in meters between waypoints to do crosstrack correction.
// @Units: Meters
// @Range: 0 32767
// @Increment: 1
// @User: Standard
GSCALAR(crosstrack_min_distance, "XTRK_MIN_DIST", 50),
// @Param: ALT_MIX
// @DisplayName: Gps to Baro Mix

3
ArduPlane/navigation.pde

@ -189,7 +189,8 @@ static void update_crosstrack(void) @@ -189,7 +189,8 @@ static void update_crosstrack(void)
// Crosstrack Error
// ----------------
// If we are too far off or too close we don't do track following
if (abs(wrap_180_cd(target_bearing_cd - crosstrack_bearing_cd)) < 4500) {
if (wp_totalDistance >= g.crosstrack_min_distance &&
abs(wrap_180_cd(target_bearing_cd - crosstrack_bearing_cd)) < 4500) {
// Meters we are off track line
crosstrack_error = sin(radians((target_bearing_cd - crosstrack_bearing_cd) * 0.01)) * wp_distance;
nav_bearing_cd += constrain(crosstrack_error * g.crosstrack_gain, -g.crosstrack_entry_angle.get(), g.crosstrack_entry_angle.get());

Loading…
Cancel
Save