• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wboayue / stable-flight / 38476884695
92%

Build:
DEFAULT BRANCH: main
Ran 13 Oct 2026 10:21PM UTC
Jobs 1
Files 111
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

13 Oct 2026 10:18PM UTC coverage: 89.952% (+0.03%) from 89.925%
38476884695

push

github

web-flow
Lateral velocity I with tilt-cap anti-windup (#357) (#368)

Copter waypoint hold now trims a steady wind with a lateral velocity I,
instead of settling downwind. The integral doesn't grow along a
tilt-capped acceleration, so it can't wind up against the tilt limit.

## Changes

- `LateralControllerConfig::default()`: velocity `i` 0.4 (was 0) and
`max_integral` 12.5 m (was 100). That caps the I term at ±5 m/s², which
equals g·tan 27°, the default tilt cap.
- **Breaking:** `LateralController::control` takes `limit_mps2`: the
acceleration the caller last capped. A step whose I term pushes along it
can't lengthen the integral. It can still shrink or turn. This mirrors
ArduPilot `libraries/AC_PID/AC_PID_2D.cpp:127-146`, described and
implemented in our own words.
- `CopterGuidance` keeps the lateral loop's last raw acceleration
request. While `tilt_capped` is set, it passes that request as
`limit_mps2` on the next run. This includes a tilt cap lowered by
`set_config`.
- Docs: the `architecture.md` integrator policy, the controllers README,
and the core CHANGELOG.

## Gain choice

- ArduPilot Copter's horizontal velocity loop uses I = P/2 (P 2.0, I
1.0, IMAX 10 m/s²;
`libraries/AC_AttitudeControl/AC_PosControl.cpp:44,74-78`).
- Our P is 1.26 and `position_p` is 0.5. For a 1 m step on an ideal
double integrator:

  | I | Overshoot | Settle to 5% | Slow pole |
  |---|---|---|---|
  | 0 (before) | 2% | 4.2 s | none |
  | 0.4 | 1% | 3.5 s | 0.26 /s |
  | 0.63 (ArduPilot's I/P ratio) | slow creep | 7.9 s | — |

## Test bands

- **Changed: `holds_a_steady_offset_in_steady_wind` →
`holds_the_waypoint_in_steady_wind`.** `quad_x` in a 5 m/s wind, band
0.3 m (from #357). Measured worst offset: 0.03 m. On main it's 2.38 m,
so the test fails without this change.
- **Widened, because of the I's slow tail.** After a long leg or a gust,
the integral holds leftover error that decays at about 0.26 /s. The new
bands are the measured values plus margin:

  | Test | Old band |... (continued)

23 of 23 new or added lines in 4 files covered. (100.0%)

5058 of 5623 relevant lines covered (89.95%)

4.47 hits per line

Jobs
ID Job ID Ran Files Coverage
1 38476884695.1 13 Oct 2026 10:21PM UTC 111
89.95
GitHub Action Run
Source Files on build 38476884695
  • Tree
  • List 111
  • Changed 4
  • Source Changed 4
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #38476884695
  • 1db74785 on github
  • Prev Build on main (#38467150755)
  • Next Build on main (#38482244415)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc