Implement auto vtol smooth transition state#11553
Conversation
mission WP auto transmision available
…speed-first logic and dynamic scaling - Introduce a common VTOL transition controller path used by: - manual MIXER TRANSITION (edge-triggered mode, optional via manual_vtol_transition_controller) - mission-authorized VTOL transition via nav_vtol_mission_transition_user_action - Keep profile hot-switch safety boundaries intact: - no broad manual mixer switching in active waypoint navigation - switching remains authorized only through transition state handling - Add airspeed-first completion behavior: - MC->FW threshold via vtol_transition_to_fw_min_airspeed_cm_s - FW->MC threshold via vtol_transition_to_mc_max_airspeed_cm_s - timer fallback only when pitot is unavailable/unhealthy - timeout/abort support via vtol_transition_airspeed_timeout_ms - Add optional dynamic mixer scaling (vtol_transition_dynamic_mixer): - pusher contribution ramping - lift throttle scaling (vtol_transition_lift_end_percent) - MC authority scaling (vtol_transition_mc_authority_end_percent) - FW authority blend scaling (vtol_transition_fw_authority_start_percent) - Fix transition scaling/progress details: - pusher ramp uses idle-to-target interpolation - FW->MC progress uses captured transition start airspeed for smooth deceleration-based ramp - Improve transition abort/reset robustness: - clear transition/nav mission transition state on disarm/failsafe/abort paths - avoid blind mission resume after half-complete transition - Add mission VTOL settings and behavior: - nav_vtol_mission_transition_user_action - nav_vtol_mission_transition_min_altitude_cm - nav_vtol_mission_transition_track_distance_cm - mission pause/resume around transition, straight-line MC->FW transition segment - Update documentation: - MixerProfile.md, Navigation.md, VTOL.md - document unified controller, manual semantics, mission semantics, airspeed precedence, dynamic scaling, and CLI usage
…orm target (0=MC, 1=FW) - document dependency on existing mixer profile switching infrastructure (two profiles + MIXER PROFILE 2 mode condition) - update docs: MixerProfile.md, Navigation.md, VTOL.md with behavior, safety boundaries, tuning examples, and CLI reference
|
Thanks for your VTOL contribution to INAV. They will be welcome improvements I have a couple of questions. I noticed you have an edge trigger for the transition switch, along with the legacy 3Pos manual method. I also noticed your addition of Dynamic Scaling. Of which I like the idea. |
|
Great feedback, thank you. On the 3-position manual method question: I agree this can be confusing if not documented clearly, so I should clarify it better in the PR/docs. The intent is not to replace legacy behaviour. The edge-triggered manual controller is optional (manual_vtol_transition_controller), and legacy 3-position/manual behaviour remains available when that setting is OFF. my intention is still to support practical 3-position switch workflow when manual_vtol_transition_controller = ON, not to remove it. Position 1: MC So the goal is to keep familiar switch ergonomics, while making transition execution more deterministic and safer. On the dynamic scaling timer point: I agree this is a good observation. I propose an optional separate setting: vtol_transition_scale_ramp_time_ms with behavior: 0 (default): keep current behavior (backward compatible)
mixer_switch_trans_timer = 5000 ms scaling reaches target levels in about 1.2s (smoother motor startup / less torque step), When pitot is healthy/available, transition progress is airspeed-driven (not timer-driven).
Dynamic mixer scaling (
For transition/pusher motors (
where:
|
Yes I agree with both changes you have proposed. Do you happen to have the RealFlight simulator software to test this with the SITL before an actual flight? I unfortunately don't have it. |
…y/3-pos switch behavior - add new mixer setting `vtol_transition_scale_ramp_time_ms` (default 0) - keep backward compatibility: - `0` => scaling stays coupled to transition progress (existing behavior) - `>0` => pusher/lift/authority scaling uses time-based ramp - keep transition completion logic unchanged: - airspeed-first when pitot is healthy/available - timer fallback via `mixer_switch_trans_timer` when pitot is unavailable/unhealthy - wire new setting into mixer profile config/reset path - update VTOL and MixerProfile docs: - explicitly state intent is not to replace legacy manual behavior - document 3-position workflow with edge-trigger controller - document new ramp timer semantics with practical examples
|
Changes pushed and PR updated. No I do not have RealFlight on my site right now but while ago I tested some scenarios with X-Plane and Alia 250 eVTOL. One more question: Currently I'm using one of User Actions in WP (configurable) for target selection in mission. Do you think this is good approach or is it better to use bit 5 (which is currently reserved) from WP's p3 instead? |
Using the configurable USER actions sounds fine. It allows users to configure them in the IPF to suit their requirements. |
|
Test firmware build ready — commit Download firmware for PR #11553 234 targets built. Find your board's
|
No description provided.