MANUAL Mode (Plane)
Executive Summary
MANUAL Mode provides a direct pass-through connection between the pilot's RC sticks and the aircraft's control surfaces. It bypasses all stabilization, navigation, and fly-by-wire limiters. It is the only mode that allows the pilot to override the autopilot completely, making it critical for recovering from sensor failures or bad tunes.
Theory & Concepts
1. Direct Control Surface Authority
In Manual mode, you are the autopilot.
- The Physics: Every degree of stick movement corresponds to a degree of servo movement (or a specific PWM change).
- The Aerodynamics: You must manage the Stability Derivative of the plane. If you bank too much without adding elevator, the nose will drop (Spiral instability). If you pull up too much, the wings will stall.
2. The Fallback State
In computer science, this is the Fail-Safe or Limp Mode. By design, MANUAL mode is the simplest possible logic path. By minimizing the number of code lines between the RC receiver and the Servos, ArduPilot ensures that even if the CPU is under heavy load or the EKF has crashed, you can still steer the aircraft.
Hardware Dependency Matrix
This mode works even if the autopilot brain is partially failing.
| Sensor | Requirement | Code Implementation Notes |
|---|---|---|
| RC Receiver | CRITICAL | Required to read stick inputs. |
| Servo Output | CRITICAL | Required to drive the surfaces. |
| Gyro/Accel/GPS | NONE | Not used. If the AHRS tumbles or the EKF blows up, MANUAL mode will still fly perfectly fine (assuming the pilot is skilled). |
Control Architecture (Engineer's View)
The logic is a simple assignment loop.
- Input Conditioning:
- Pilot inputs are read and scaled (-1 to +1).
- Expo: ArduPlane applies specific exponential curves defined by
MAN_EXPO_ROLL,MAN_EXPO_PITCH, andMAN_EXPO_RUDDER. - Note: This allows you to soften the feel of the manual plane without changing the settings on your transmitter.
- Output Mapping:
- The conditioned input is sent directly to the
SRV_Channelslibrary (k_aileron,k_elevator,k_throttle,k_rudder). - Mixing: The Servo Output library handles the physical mixing (e.g., V-Tail, Elevon, Flaperon) downstream of the mode logic. So even in MANUAL, your V-Tail mixer works correctly.
- Code Path:
ModeManual::update().
- The conditioned input is sent directly to the
- Controller Reset:
- The code explicitly calls
reset_controllers()to ensure that when you switch back to a stabilized mode, the integrators (I-terms) are zeroed out, preventing a sudden "jump" or wind-up release.
- The code explicitly calls
Pilot Interaction
- Total Authority: You can stall, spin, or over-stress the airframe. The autopilot will not stop you.
- Trimming: You must mechanically trim the aircraft or use the transmitter trims. (Note: Transmitter trims should be reset/zeroed before switching back to FBWA/stabilized modes to avoid confusing the controller).
Failsafe Logic
- None: MANUAL mode is the failsafe.
Key Parameters
| Parameter | Default | Description |
|---|---|---|
MAN_EXPO_ROLL |
0 | (0-100%) Exponential curve for Roll stick. |
MAN_EXPO_PITCH |
0 | (0-100%) Exponential curve for Pitch stick. |
MAN_EXPO_RUDDER |
0 | (0-100%) Exponential curve for Rudder stick. |
Source Code Reference
- Mode Logic:
ardupilot/ArduPlane/mode_manual.cpp - Pass-Through:
ModeManual::run()