Leash vs S-Curve navigation

This is a simple comparison of the path that Copter-4.0’s “leash” based navigation takes vs Copter-4.1’s “s-curve” navigation when the target speed is high (i.e. WPNAV_SPEED = 1500) and target maximum acceleration is left low (i.e. WPNAV_ACCEL = 100).

You’ll hopefully notice these three improvements:

  • the vehicle does not cut corners as much
  • the path in and out the corners is symmetrical
  • the vehicle’s heading more closely matches the path the vehicle is following

This enhancement should also reduce some issue that users reported with “do” command executing long before the vehicle reached the corners.

The algorithms and majority of the coding for this important enhancement come from AP’s control expert Leonard Hall (aka @Leonardthall)

In case anyone is interested in looking at the code, the “Pull Request” to include these changes into master ahead of the Copter-4.1 release can be found here: https://github.com/ArduPilot/ardupilot/pull/15896


This looks great! Currently we have to stop at each waypoint with a delay to make sure it doesn’t cut corners like with the “leash” based navigation. With this new “s-curve” navigation it looks like we won’t have to do that anymore!


Yes, that’s right. The WPNAV_RADIUS should give good control of how much corner cutting is acceptable and it will always follow the same path regardless of what the target speed is set to.

1 Like

Thank you so much! This was reallt really needed i will test tomorrow! :slight_smile:

1 Like

Can i get this update by updating through mission planner?

Im testing just now with mission planner SITL, its still doing the leash at the waypoints and skipping the photos after the waypoint, is there anything I should apply in the mission setup? THIS IS MY FIRMWARE SITL VERSION ArduCopter V4.1.0-dev


This code it is still being reviewed by other developers so it has not been merged to master yet. It will probably be a couple of weeks before it is complete.

Until it’s merged the only way to get it is to download it from my repo (the exact branch is in this PR: https://github.com/ArduPilot/ardupilot/pull/15896), compile it and then run it. I could produce a binary for you if you tell me which autopilot you are using but I need to warn you that the code has only been flown by two people so far and we know it has some problems still (terrain following doesn’t work properly for example).

That would be great, if you can do that, i can start flying one or two days after. Thanks!!

Is it possible to test it as SITL?

@ddomit, for SITL testing you’ll need to compile it yourself I’m afraid. Which autopilot are you using?

Awesome news, finally no more stopping at some wayponts and cutting corners at others.

1 Like

Let me see if i can compile it for sitl… Im using pixhawk 2.1 black cube

1 Like

This looks awesome. Thanks…

Hi @rmackay9 Im using a Pixhawk 2.1 flight controller Black Cube. Would it be possible to get a binary form the latest S-Curve code?

This is a nice addition!

Has this been added to master in recent official releases? How can I test it? Any new documentation about this?

Hi @ddomit,

S-Curves are still a work-in-progress but we are making progress. The Pull Request with the feature is here but it has not been merged into “latest” or a stable release yet.