Skip to main content
Version: Next

Fixed Wing Waypoint Turns

From INAV 10.0 a plane no longer has to react to a waypoint corner once it arrives there. In the coordinated turn modes it works out the corner in advance and flies a real, coordinated turn through it.

The autopilot knows the radius your plane actually needs at its current speed and bank angle, so it knows where the turn has to begin and when to roll out. The result is a turn that ends on the outbound leg instead of swinging past it, and a flight path that looks like the mission you planned. One of the coordinated modes is the default, and the reactive behaviour of INAV 9.x and earlier is still available as DIRECT.

note

This page describes fixed wing behaviour in NAV WP missions, in RTH trackback and during the automatic landing approach. Multicopters are not affected. The old nav_fw_wp_turn_smoothing setting has been replaced, see Upgrading from Turn Smoothing.

How a coordinated turn is flownโ€‹

Three things decide the shape of every turn:

  • Speed. The faster the plane, the wider the circle it can fly.
  • nav_fw_bank_angle. The bank the turn is planned for. More bank means a tighter circle.
  • The corner angle. A 90ยฐ corner needs a much earlier turn-in than a 30ยฐ corner.

The clearest case is the default COORD_FLYBY: the autopilot places a circle that touches both mission legs, starts banking early enough to reach it smoothly, holds that circle through the corner, and rolls out so that the wings are level exactly when the plane is aligned with the next leg. The other coordinated modes use the same radius and the same roll-in and roll-out shaping, but they place their arcs differently because they have to meet the waypoint rather than cut past it, see Turn modes.

Rolling in and rolling out is not instant, and the autopilot accounts for that too. It reads your roll rate, nav_fw_control_smoothness and the angle mode P gain to predict how long your plane takes to bank and to level again, and it shapes the turn around that. Retune the plane and the turns follow โ€” there is nothing to measure by hand.

Corners shallower than about 30ยฐ are left to normal navigation, which handles them better than a very short arc would.

The geometry behind it

The radius of a coordinated turn is fixed by physics: R = vยฒ / (g ยท tan ฯ†), with v the ground speed and ฯ† the planned bank angle. At 20 m/s and 35ยฐ of bank that is about 58 m; at 30 m/s it is already 131 m.

To cut a corner and join the outbound leg cleanly, the circle has to touch both legs, which puts the turn entry a distance R ยท tan(ฮ”/2) before the waypoint, where ฮ” is the course change. That factor is what makes sharp corners expensive: it is 0.41 ร— R at a 45ยฐ corner, 1.0 ร— R at 90ยฐ, and 2.4 ร— R at 135ยฐ. On top of that comes the roll-in distance, because the plane still flies almost straight while it is banking into the turn.

Everything above is recomputed continuously from the current ground speed, so a leg flown downwind starts its turn earlier than the same leg flown upwind.

Turn modesโ€‹

The mode is set with nav_fw_wp_turn_mode in the Advanced Tuning tab or in the CLI. It applies to the whole mission.

COORD_FLYBY โ€” cut the corner (default)โ€‹

FLY_BY turn

The plane turns before the waypoint and passes it to the side, rolling out already on the next leg. This is the smoothest and most predictable option and the right choice for almost every mission.

Use it when the waypoint marks a corner of your route rather than a place you have to be over.

COORD_FLYOVER โ€” fly over the waypoint, then turnโ€‹

FLY_OVER turn

The plane flies over the waypoint first and only then banks into the corner. Because nothing can be anticipated, the turn is instead flown so that it rolls out pointing exactly at the next waypoint.

Use it when the waypoint itself matters: a photo point, a gate between obstacles, or a corner where cutting inside is not acceptable.

With waypoint tracking enabled the mode does more, see Working with waypoint tracking.

COORD_FLYINTO โ€” cross the waypoint already alignedโ€‹

FLY_INTO turn

The plane eases away from the waypoint first, then curves back and crosses it already flying the bearing of the next leg.

Use it for survey, mapping and photogrammetry missions where each line has to be entered straight and on heading from the very first metre. The mode applies to mission legs only.

DIRECT โ€” the old behaviourโ€‹

No coordinated turns. The plane steers at the waypoint with the heading controller and turns when it gets there, exactly as INAV 9.x and earlier did with turn smoothing off.

This is an opt-out for anyone who wants the previous behaviour back. It is not recommended for new setups.

Choosing a modeโ€‹

You wantMode
A clean, smooth route โ€” general missions, corridors, RTH-style flyingCOORD_FLYBY
To actually pass over each waypointCOORD_FLYOVER
To enter every survey line straight and on headingCOORD_FLYINTO
The pre-10.0 behaviourDIRECT

Working with waypoint trackingโ€‹

nav_fw_wp_tracking_accuracy makes the plane fly on the line between two waypoints instead of merely heading toward the next one. It changes what the turn modes aim for:

Tracking off (default)Tracking on
COORD_FLYBYRolls out on the outbound courseRolls out on the outbound course, on the line
COORD_FLYOVERRolls out pointing at the next waypointFlies a short S after the corner and rolls out on the leg line itself
Very sharp cornersRolls out on the correct course, slightly offset to the sideThe offset is flown out as a curve back onto the line

If you fly corridors, survey grids or anything where being a few metres off the planned line matters, turn tracking on. nav_fw_wp_tracking_accuracy is a deadband in metres; 2 m works well for most planes.

FLY_OVER with tracking

What the S after a FLY_OVER corner actually does

Rolling out pointing at the next waypoint is not the same as rolling out on the leg. On a long leg the difference is small, but on a survey grid it means entering every line at an angle and letting the tracker pull you back onto it.

With tracking enabled the corner is therefore flown as two arcs. The first rolls out on a course that cuts toward the new leg at no more than 45ยฐ, a short straight gives the wings time to roll through level, and a second arc in the opposite direction rolls out tangentially on the leg itself. The turn coordinator stays in charge across the whole manoeuvre, so the path tracker never gets handed a plane that is sitting a turn diameter off its line.

Sharp corners and reversalsโ€‹

The tighter the corner and the faster the plane, the earlier a turn has to begin โ€” a 135ยฐ corner at speed can need several hundred metres of run-up. nav_fw_wp_turn_max_lead_time puts a ceiling on that so a fast model does not leave the leg absurdly early.

When a corner needs more anticipation than the ceiling allows, the plane flies a bounded maximum-effort turn instead. It cannot over-rotate, it always ends on the correct outbound course, and it may end slightly to the side of the planned line. With waypoint tracking on, that offset is flown out; without it, normal navigation converges toward the next waypoint.

Capped corner fallback

A course reversal (close to 180ยฐ) is a special case of the same thing. In COORD_FLYBY the plane rolls out on the reversed course and converges afterwards, COORD_FLYOVER flies the reversal as one continuous sweep, and COORD_FLYINTO flies it as a teardrop and crosses the waypoint on heading.

Why a reversal always ends beside the line

At 180ยฐ both legs lie on the same line. Any single circle that starts on that line and turns the plane around ends up a full turn diameter โ€” 2 ยท R โ€” to the side of it. No amount of tuning changes that; it is the geometry of a circle.

So a reversal is either flown as one arc and the offset is converged afterwards, or it is flown as a teardrop: turn away from the line first, then curve back onto it from the other side. That is exactly the difference between COORD_FLYBY and COORD_FLYINTO at a reversal.

Settingsโ€‹

Setting NameCLI NameDescription
WP Turn Modenav_fw_wp_turn_modeHow the plane turns at mission waypoints: DIRECT, COORD_FLYBY (default), COORD_FLYOVER, COORD_FLYINTO.
Max Turn Lead Timenav_fw_wp_turn_max_lead_timeCeiling on how early a turn may start, 3000-12000 ms, default 6000. Raise it for fast or sluggish models flying sharp corners, lower it to keep turns close to the waypoint. COORD_FLYBY only.
Turn Feed-Forward Gainnav_fw_turn_ff_gainHow much of the required bank is commanded directly instead of being built up by the PID, 0-200 %, default 100. Leave it at the default unless you are chasing a specific problem.
Turn Control Easenav_fw_wp_turn_control_easeExtra roll response lag of your servos and airframe, 0-500 ms, default 100. Increase it for large or slow-rolling planes.
Max navigation bank anglenav_fw_bank_angleThe bank all turn and loiter radii are planned for, default 35ยฐ. See below.
Waypoint Tracking Accuracynav_fw_wp_tracking_accuracyDeadband in metres for flying on the leg line. 0 disables line tracking.

Everything else the turn system needs is derived from tuning you already have.

What nav_fw_bank_angle means nowโ€‹

warning

nav_fw_bank_angle changed meaning in INAV 10.0. It used to be the hard limit for navigation bank. It is now the sustained bank the autopilot plans for โ€” every turn radius, every turn-in point and every loiter circle is sized for it.

While the plane is holding a planned turn or a loiter circle, the roll output may briefly go above that target to hold the geometry against wind, up to the real limit set by max_angle_inclination_rll. That reserve is what keeps a circle round in wind instead of letting it drift wide.

In practice: set nav_fw_bank_angle to the bank your plane can hold comfortably and continuously, not to the most it can survive. The default of 35ยฐ suits most models. Raise it carefully if your plane holds more bank without sinking, and lower it if it loses altitude in turns.

Loiter and position hold circlesโ€‹

The same turn machinery now flies loiter circles, and two things change for you:

  • The circle is held accurately. Once established, the autopilot regulates the radius itself instead of chasing a moving target point, so the circle stays round and centred in wind.
  • nav_fw_loiter_radius is a minimum, not a fixed value. If your plane is flying too fast to hold the configured radius at the planned bank, the circle widens instead of demanding a bank it cannot fly.

If your loiter looks bigger than configured, that is the plane telling you it is flying faster than the radius allows at nav_fw_bank_angle.

How the circle behaves in wind

Ground speed changes continuously as the plane goes around a circle in wind, and with it the radius the plane is physically able to hold. Commanding that raw requirement would make the circle pulse once per revolution and deform into the classic kidney shape.

Instead the radius floor is smoothed: it rises immediately when more radius is needed, holds that peak for one full revolution, and then eases back down slowly and never below what is currently flyable. The circle follows the slow trend of the wind rather than every upwind and downwind passage.

Energy protectionโ€‹

Banking costs lift. If the plane is already at the limit of what it can do โ€” climbing with full authority and not achieving the commanded climb rate โ€” the autopilot temporarily lowers the bank it is willing to use.

You will see this as wider circles and earlier turn-ins during a hard climb, and it returns to normal by itself. It is a safety behaviour, not something to tune.

Landing approachโ€‹

Turns between the legs of an automatic landing approach always fly as coordinated COORD_FLYBY corners, whatever nav_fw_wp_turn_mode is set to. Clean, aligned transitions between the downwind, base and final legs matter more there than the mode preference.

The approach turning points are calculated from the plane's real turn radius, so nav_wp_radius no longer shapes the approach corners.

Upgrading from Turn Smoothingโ€‹

nav_fw_wp_turn_smoothing no longer exists. Its replacement is nav_fw_wp_turn_mode:

INAV 9.xINAV 10.0
nav_fw_wp_turn_smoothing = OFFnav_fw_wp_turn_mode = DIRECTSame reactive turns as before
nav_fw_wp_turn_smoothing = ONnav_fw_wp_turn_mode = COORD_FLYOVERThe waypoint is still passed over, but the turn is planned instead of flown as a loiter arc
nav_fw_wp_turn_smoothing = ON-CUTnav_fw_wp_turn_mode = COORD_FLYBYThe corner is still cut, now on the plane's real turn radius

New installs default to COORD_FLYBY.

note

A CLI backup taken from INAV 9.x contains a set nav_fw_wp_turn_smoothing = ... line that INAV 10.0 does not know. Remove that line before restoring, or set the turn mode afterwards.

Troubleshootingโ€‹

What you seeWhat to do
The plane leaves the leg far too earlyLower nav_fw_wp_turn_max_lead_time. Check that the mission speed is not much higher than you expect.
It swings past the outbound leg in sharp cornersRaise nav_fw_wp_turn_max_lead_time, raise nav_fw_bank_angle, or fly the corner slower.
Turns are wide and lazyRaise nav_fw_bank_angle โ€” this is the value the radius is planned from.
Roll-in feels abrupt on a big planeRaise nav_fw_wp_turn_control_ease.
The plane rolls out on the right heading but beside the planned lineExpected in very tight corners. Enable nav_fw_wp_tracking_accuracy to have it flown out.
The loiter circle is larger than configuredExpected. See Loiter and position hold circles.

Further readingโ€‹