Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions docs/MixerProfile.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,17 @@ Transition input is disabled when navigation mode is activate

The use of Transition Mode is recommended to enable further features and future developments like fail-safe support. Mapping motor to servo output, or servo with logic conditions is **not** recommended

`MIXER TRANSITION` now behaves as a transition trigger/request (edge-triggered), not a continuous blend hold:

- A rising edge starts one transition (MC->FW or FW->MC depending on current profile).
- The transition state machine runs automatically to completion.
- Keeping the mode ON does not repeatedly restart transitions.
- A new transition requires mode OFF then ON again.
- If switched OFF before hot-switch completes, the manual transition request is aborted.

This edge-triggered behavior is enabled by `manual_vtol_transition_controller`.
When `manual_vtol_transition_controller = OFF`, manual transition keeps legacy behavior.

## Servo

`Mixer Transition` is the input source for transition input; use this to tilt motor to gain airspeed.
Expand Down Expand Up @@ -72,6 +83,100 @@ This feature is mainly for RTH in a failsafe event. When set properly, model wil
Set `mixer_automated_switch` to `ON` in mixer_profile for MC mode. Set `mixer_switch_trans_timer` in mixer_profile for MC mode for the time required to gain airspeed for your model before entering to FW mode.
When `mixer_automated_switch`:`OFF` is set for all mixer_profiles(defaults). Model will not perform automated transition at all.

### Unified VTOL transition controller

Manual `MIXER TRANSITION` and mission-authorized VTOL transition both use the same internal transition controller.
This controller always computes transition progress/completion and performs profile hot-switch only inside the authorized transition state.
When `vtol_transition_dynamic_mixer = ON`, pusher/lift/authority scaling is enabled and is driven by:
- transition progress (default), or
- `vtol_transition_scale_ramp_time_ms` when configured (>0).

### Airspeed-first completion

When pitot airspeed is healthy and available, transition completion uses pitot thresholds:

- `vtol_transition_to_fw_min_airspeed_cm_s` for MC->FW
- `vtol_transition_to_mc_max_airspeed_cm_s` for FW->MC
- If `vtol_transition_to_fw_min_airspeed_cm_s = 0`, MC->FW falls back to legacy `mixer_switch_trans_airspeed_cm_s`.

If pitot is unavailable/unhealthy (or threshold is `0`), timer fallback is used (`mixer_switch_trans_timer`).
Ground speed is not used for transition completion/progress.

Optional safety timeout:

- `vtol_transition_airspeed_timeout_ms` can abort transition if airspeed condition is not met in time.

### Dynamic scaling (optional)

When `vtol_transition_dynamic_mixer = ON`, transition progress scales:

- pusher contribution (`-2.0 < throttle < -1.0` motors) from configured max toward 0/100% depending on direction,
- lift motor throttle contribution (`vtol_transition_lift_end_percent`),
- MC stabilization authority (`vtol_transition_mc_authority_end_percent`),
- FW authority start level (`vtol_transition_fw_authority_start_percent`, servo transition input blend).

Default is OFF to preserve existing behavior.
With dynamic scaling enabled, `vtol_transition_fw_authority_start_percent = 100` preserves legacy FW authority handoff; lower values provide smoother ramp-in.

Optional scaling ramp timer:

- `vtol_transition_scale_ramp_time_ms = 0` (default): scaling remains coupled to transition progress (legacy-compatible behavior).
- `vtol_transition_scale_ramp_time_ms > 0`: scaling uses this timer, while transition completion stays airspeed-first (or timer fallback if pitot unavailable/unhealthy).

Example:

- `mixer_switch_trans_timer = 50` (5s fallback completion timer)
- `vtol_transition_scale_ramp_time_ms = 1200`

Result:
- scaling reaches target levels in ~1.2s,
- transition completion still follows airspeed threshold when pitot is healthy,
- timer fallback completion still uses 5s when pitot is unavailable/unhealthy.

### Mission-authorized VTOL transition (waypoint User Action)

INAV supports mission-requested VTOL transitions through the existing automated transition path. This is configured with:

- `nav_vtol_mission_transition_user_action` (`OFF`, `USER1`, `USER2`, `USER3`, `USER4`)
- `nav_vtol_mission_transition_min_altitude_cm` (optional, `0` disables minimum-altitude check)
- `vtol_transition_to_fw_min_airspeed_cm_s` (preferred MC->FW threshold)
- `mixer_switch_trans_airspeed_cm_s` (legacy MC->FW fallback when preferred threshold is `0`)

On each navigable mission waypoint (`WAYPOINT`, `POSHOLD_TIME`, `LAND`), the configured USER action bit is used as absolute target selector:

- selected USER bit = `0` -> transition to MC / MULTIROTOR profile
- selected USER bit = `1` -> transition to FW / AIRPLANE profile
- When `nav_vtol_mission_transition_user_action != OFF`, each navigable waypoint encodes a target state via that selected bit.
- This is a per-waypoint target-state declaration (not an event trigger). Users should intentionally set/clear the selected USER bit on each navigable waypoint.
- This is **not** a toggle command.
- If already in the requested profile type, the action is treated as complete (idempotent).

The mission pauses while transition is in progress and resumes after completion.

For MC -> FW mission transitions, navigation uses a straight acceleration segment (no loiter) to build speed before hot-switch.
Mission path uses the same controller and completion logic as manual transition (airspeed-first, timer fallback).

Manual RC switching (`MIXER PROFILE 2`, `MIXER TRANSITION`) remains blocked during normal active navigation. Mission VTOL transition does not bypass the hot-switch safety guard; it only authorizes switching inside the automated transition state.
Mission VTOL transition still relies on normal profile-switch infrastructure: configure two mixer profiles and a valid `MIXER PROFILE 2` mode activation condition.

Example smooth-start values (optional tuning baseline):
- `set vtol_transition_dynamic_mixer = ON`
- `set vtol_transition_lift_end_percent = 30`
- `set vtol_transition_mc_authority_end_percent = 20`
- `set vtol_transition_fw_authority_start_percent = 20`

### Validation Matrix (PR / SITL / HITL)

- MC->FW manual, pitot healthy/available.
- MC->FW manual, no pitot (timer fallback).
- FW->MC manual, pitot healthy/available.
- FW->MC manual, no pitot (timer fallback).
- `MIXER TRANSITION` held ON after completion (no repeated starts).
- `MIXER TRANSITION` OFF before hot-switch (safe abort).
- Mission transition with selected USER bit = `1` (TO_FW).
- Mission transition with selected USER bit = `0` (TO_MC).
- Failsafe/disarm during active transition (abort and no blind mission resume).

## TailSitter (planned for INAV 7.1)
TailSitter is supported by add a 90deg offset to the board alignment. Set the board aliment normally in the mixer_profile for FW mode(`set platform_type = AIRPLANE`), The motor trust axis should be same direction as the airplane nose. Then, in the mixer_profile for takeoff and landing set `tailsitter_orientation_offset = ON ` to apply orientation offset. orientation offset will also add a 45deg orientation offset.

Expand Down
39 changes: 39 additions & 0 deletions docs/Navigation.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,45 @@ Parameters:

* `<flag>` - Last waypoint must have `flag` set to 165 (0xA5).

### Mission VTOL transition using existing User Actions

Mission VTOL transition can be requested.

Configuration:

- `nav_vtol_mission_transition_user_action` selects which waypoint User Action (`USER1..USER4`) is used as the mission VTOL target selector.
- `nav_vtol_mission_transition_min_altitude_cm` optionally enforces a minimum altitude before transition start (`0` disables check).
- `nav_vtol_mission_transition_track_distance_cm` configures straight-line MC->FW transition guidance distance.
- VTOL transition completion logic is shared with manual MIXER TRANSITION and uses mixer transition settings:
- preferred MC->FW threshold: `vtol_transition_to_fw_min_airspeed_cm_s`
- legacy MC->FW fallback (when preferred threshold is `0`): `mixer_switch_trans_airspeed_cm_s`
- FW->MC threshold: `vtol_transition_to_mc_max_airspeed_cm_s`

Behavior on each navigable mission waypoint (`WAYPOINT`, `POSHOLD_TIME`, `LAND`):

- The configured USER bit is an **absolute target selector**:
- `0`: transition to MC / MULTIROTOR profile
- `1`: transition to FW / AIRPLANE profile
- When `nav_vtol_mission_transition_user_action != OFF`, each navigable waypoint always encodes target state via that selected USER bit.
- This means every navigable waypoint implicitly declares desired VTOL platform state when this feature is enabled; users must intentionally set/clear that bit on each waypoint.
- This command is **not** a toggle.
- The command is idempotent: if already in the requested target profile type, the mission continues immediately.
- If a transition is needed, mission progression pauses while automated transition runs, then resumes only after completion.

Transition behavior in this MVP:

- MC -> FW: straight-line acceleration segment (no loiter), heading from the next waypoint bearing when available, otherwise current heading.
- MC -> FW and FW -> MC completion uses pitot airspeed thresholds when healthy/available (`vtol_transition_to_fw_min_airspeed_cm_s`, `vtol_transition_to_mc_max_airspeed_cm_s`).
- If pitot is unavailable/unhealthy (or threshold disabled), timer fallback (`mixer_switch_trans_timer`) is used.
- Ground speed is not used for transition progress/completion.
- FW -> MC: mission pauses during automated transition, then resumes after switching back to MC profile.
- Strict altitude hold is not enforced during MC -> FW transition; natural climb is allowed.

Safety and scope:

- This path uses authorized automated transition state handling; it does not permit manual mixer profile switching during normal waypoint navigation.
- It still depends on valid mixer profile switching infrastructure (two configured mixer profiles and a valid `MIXER PROFILE 2` mode activation condition).

`wp save` - Checks list of waypoints and save from FC to EEPROM (warning: it also saves all unsaved CLI settings like normal `save`).

`wp reset` - Resets the list, sets the number of waypoints to 0 and marks the list as invalid (but doesn't delete the waypoint definitions).
Expand Down
134 changes: 134 additions & 0 deletions docs/Settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -2824,6 +2824,16 @@ Servo travel multiplier for the ROLL axis in `MANUAL` flight mode [0-100]%

---

### manual_vtol_transition_controller

Enables edge-triggered manual VTOL transition controller for `MIXER TRANSITION` when not in waypoint mission. OFF keeps legacy manual transition behavior.

| Default | Min | Max |
| --- | --- | --- |
| OFF | OFF | ON |

---

### manual_yaw_rate

Servo travel multiplier for the YAW axis in `MANUAL` flight mode [0-100]%
Expand Down Expand Up @@ -3199,6 +3209,16 @@ If enabled, control_profile_index will follow mixer_profile index. Set to OFF(de

---

### mixer_switch_trans_airspeed_cm_s

Legacy MC->FW airspeed threshold [cm/s] for automated profile switch. Used when `vtol_transition_to_fw_min_airspeed_cm_s = 0`. If airspeed is unavailable, timer-based fallback (`mixer_switch_trans_timer`) is used.

| Default | Min | Max |
| --- | --- | --- |
| 0 | 0 | 10000 |

---

### mixer_switch_trans_timer

If switch another mixer_profile is scheduled by mixer_automated_switch or mixer_automated_switch. Activate Mixertransion motor/servo mixing for this many decisecond(0.1s) before the actual mixer_profile switch.
Expand Down Expand Up @@ -4626,6 +4646,40 @@ Defines how Pitch/Roll input from RC receiver affects flight in POSHOLD mode: AT

---

### nav_vtol_mission_transition_min_altitude_cm

Minimum altitude [cm] required to start a mission-authorized VTOL transition. Set to 0 to disable the minimum-altitude check.

| Default | Min | Max |
| --- | --- | --- |
| 0 | 0 | 50000 |

---

### nav_vtol_mission_transition_track_distance_cm

Straight-line target distance [cm] used during mission-authorized MC->FW transition guidance. This controls how far ahead the transition heading target is placed.

| Default | Min | Max |
| --- | --- | --- |
| 100000 | 1000 | 500000 |

---

### nav_vtol_mission_transition_user_action

Selects which waypoint USER action bit (`USER1`..`USER4`) is used as mission VTOL target selector. OFF disables this feature. On navigable mission waypoints: selected USER bit = 1 requests FW profile, selected USER bit = 0 requests MC profile. This is an absolute per-waypoint target-state selector and relies on existing mixer profile switching infrastructure (two profiles and valid MIXER PROFILE 2 mode activation condition).

| Allowed Values | |
| --- | --- |
| OFF | Default |
| USER1 | |
| USER2 | |
| USER3 | |
| USER4 | |

---

### nav_wp_enforce_altitude

Forces craft to achieve the set WP altitude as well as position before moving to next WP. Position is held and altitude adjusted as required before moving on. 0 = disabled, otherwise setting defines altitude capture tolerance [cm], e.g. 100 means required altitude is achieved when within 100cm of waypoint altitude setting.
Expand Down Expand Up @@ -6974,6 +7028,86 @@ Warning voltage per cell, this triggers battery-warning alarms, in 0.01V units,

---

### vtol_transition_airspeed_timeout_ms

Safety timeout [ms] for airspeed-controlled transitions. If non-zero and required airspeed condition is not met in time, transition aborts instead of force-completing.

| Default | Min | Max |
| --- | --- | --- |
| 0 | 0 | 60000 |

---

### vtol_transition_dynamic_mixer

Enables dynamic VTOL transition progress/scaling controller shared by mission-authorized and manual MIXER TRANSITION paths.

| Default | Min | Max |
| --- | --- | --- |
| OFF | OFF | ON |

---

### vtol_transition_fw_authority_start_percent

Initial fixed-wing authority scale at transition start, in percent. Used only when `vtol_transition_dynamic_mixer` is ON.

| Default | Min | Max |
| --- | --- | --- |
| 100 | 0 | 100 |

---

### vtol_transition_lift_end_percent

Target vertical-lift throttle scale at transition end, in percent. Used only when `vtol_transition_dynamic_mixer` is ON.

| Default | Min | Max |
| --- | --- | --- |
| 100 | 0 | 100 |

---

### vtol_transition_mc_authority_end_percent

Target multicopter stabilization authority scale at transition end, in percent. Used only when `vtol_transition_dynamic_mixer` is ON.

| Default | Min | Max |
| --- | --- | --- |
| 100 | 0 | 100 |

---

### vtol_transition_scale_ramp_time_ms

Optional dynamic scaling ramp duration [ms]. When > 0 and `vtol_transition_dynamic_mixer` is ON, pusher/lift/authority scaling uses this timer instead of transition completion progress. Set to 0 to keep legacy progress-coupled scaling behavior.

| Default | Min | Max |
| --- | --- | --- |
| 0 | 0 | 60000 |

---

### vtol_transition_to_fw_min_airspeed_cm_s

Minimum pitot airspeed [cm/s] required to complete MC->FW transition when airspeed is healthy and available. Overrides `mixer_switch_trans_airspeed_cm_s` when > 0. If 0, legacy setting is used.

| Default | Min | Max |
| --- | --- | --- |
| 0 | 0 | 20000 |

---

### vtol_transition_to_mc_max_airspeed_cm_s

Maximum pitot airspeed [cm/s] allowed to complete FW->MC transition when airspeed is healthy and available. If 0, FW->MC uses timer fallback.

| Default | Min | Max |
| --- | --- | --- |
| 0 | 0 | 20000 |

---

### vtx_band

Configure the VTX band. Bands: 1: A, 2: B, 3: E, 4: F, 5: Race.
Expand Down
Loading