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

wboayue / stable-flight / 38612077553
92%

Build:
DEFAULT BRANCH: main
Ran 14 Oct 2026 06:11PM UTC
Jobs 1
Files 137
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

14 Oct 2026 06:04PM UTC coverage: 90.94% (+0.4%) from 90.501%
38612077553

push

github

web-flow
Sim: tailsitter model and nose-up hover (#349) (#386)

Adds `SimTailsitter` to `stable-flight-sim`: ArduPilot's
`plane-tailsitter` (the default plane with 1.5× thrust,
`SIM_Plane.cpp:78-81`) on two motors and elevons
(`TableMixer::tailsitter_2p`). It takes off from its tail and holds a
nose-up hover on `TailsitterGuidance`/`TailsitterStabilizer`. First of
two PRs for #349; transitions come next.

Refs #349

## Model
- `SimTailsitter` + `TailsitterModel { wing: FixedWingModel,
motor_arm_m, prop_wash: PropWash }`. `SimPlane` and the tailsitter share
one crate-private `FixedWing` dynamics (`wing.rs`); `FixedWingModel` and
`SimPlane` are unchanged in shape.
- **Differential thrust:** each motor thrusts along body x. A mixer yaw
factor acts through `motor_arm_m`.
- **Prop wash:** uses momentum theory along the thrust axis.
- Nose first, the surface terms see `surface_fraction · thrust / disc
area` on top of the free stream, so the elevons have authority in a
hover.
- Sinking tail first, they see the static jet less the sink, so
authority fades with the sink (none at the jet's speed). This is what
the eXplora showed in RealFlight (#123), and it matters for the back
transition (#343).
- ArduPilot instead adds 20 m/s × throttle to the airspeed of every
moment (`SIM_Plane.cpp:154-162`), whatever the direction.
- **Fixed-wing dynamics:** `FixedWing` takes the rotor layout
(`Rotors::airplane`/`Rotors::tailsitter`: arm, wash) and the rest
attitude separately. Surface terms are their own `aero::surface_wrench`.
- **Resting on the tail:** ground contact holds the body at a rest
attitude with its heading kept (ArduPilot `SIM_Aircraft.cpp:745-765`).
The rest attitude is `View::tailsitter`'s rotation undone, so a nose-up
hover reads level in the view. The copter's rest is identity.
- **Aero bounded at any α (affects both fixed-wing vehicles):**
- Drag blends with the lift sigmoid into a flat plate's `c_drag_0 +
2·sin²α`. Before, broadside drag was ≈6 and reversed-flow... (continued)

271 of 282 new or added lines in 14 files covered. (96.1%)

6233 of 6854 relevant lines covered (90.94%)

6.49 hits per line

Uncovered Changes

Lines Coverage ∆ File
4
89.74
crates/stable-flight-sim/tests/common/tailsitter.rs
4
93.44
crates/stable-flight-sim/tests/tailsitter_hover.rs
2
93.55
-6.45% crates/stable-flight-sim/src/airframes/plane.rs
1
96.67
crates/stable-flight-sim/src/tailsitter.rs
Jobs
ID Job ID Ran Files Coverage
1 38612077553.1 14 Oct 2026 06:11PM UTC 137
90.94
GitHub Action Run
Source Files on build 38612077553
  • Tree
  • List 137
  • Changed 17
  • Source Changed 11
  • Coverage Changed 17
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #38612077553
  • c6182058 on github
  • Prev Build on main (#38573515281)
  • Next Build on main (#38644215217)
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