libdrone — The Radio Controller
About¶
From gimbal history to flying libdrone. Everything you need to understand the TX16S MKII radio controller — how it works, how it is configured for libdrone, and how to fly with it. Covers the physics of radio control, ExpressLRS 2.4GHz, EdgeTX model setup, switch assignments, failsafe, and rate profiles.
About¶
From Gimbal History to Flying libdrone
Why This Chapter Exists¶
Every interaction you have with libdrone in the air passes through two small sticks. Understanding what those sticks actually do — mechanically, electrically, and in terms of the signal they produce — makes you a better pilot, a better tuner, and a better builder. It also means that when something goes wrong in the air, you know whether the problem originates with your hands, your transmitter, your link, or your flight controller.
This chapter covers:
- The physical construction of the RadioMaster TX16S gimbal and why it is built the way it is
- What each control surface does and why the assignment is what it is
- The ELRS link that carries your inputs to libdrone
- EdgeTX — the open-source firmware that runs the transmitter
- Practical configuration for libdrone specifically
- How to read the transmitter's feedback and what it means
- Pre-flight habits that prevent avoidable accidents
Part 1 — A Brief History of How We Arrived Here¶
Skip this if you have read the full Principles chapter. It is summarised here for readers who came directly to this chapter.
The first radio-controlled aircraft flew in 1932. The pilot had one button. Press it: rudder deflects left. Release it: spring returns to center. There was no proportional control, no throttle management, no elevator. You applied an input and hoped.
The journey from one button to two precision gimbals took approximately 40 years and passed through some genuinely peculiar intermediate stages — clockwork escapement mechanisms borrowed from watchmaking, transmitter boxes operated simultaneously with both hands and elbows, banks of tuned metal reeds vibrating at audio frequencies inside model aircraft. Each step solved one problem while revealing the next.
Proportional control arrived commercially in the early 1960s. For the first time, the servo in the aircraft moved proportionally with the stick position — not just "left or nothing" but a smooth, continuous range. The cross gimbal — two pivot axes at right angles, each spring-loaded to center — became the standard input device because it most closely matched what human hands can do naturally: push in any direction with graduated force and receive a restoring force that communicates "this is center."
The Mode 1 / Mode 2 split happened in the late 1960s and early 1970s, apparently by accident. American pilots, many with full-scale aviation background, placed throttle on the left (mirroring the throttle lever in a real cockpit) and pitch/roll on the right (mirroring the control stick). British and European pilots developed a different assignment. Both became cultural convention. Both calcified into deep muscle memory. Both persist today.
Mode 2 — throttle and yaw on the left stick, pitch and roll on the right — is the global standard for FPV flying, multirotor operation, and libdrone. If you learned Mode 1 on fixed-wing aircraft, you will need to consciously choose which mode you use for libdrone and be disciplined about never mixing them.
The Hall effect sensor replaced the carbon potentiometer in quality gimbals during the 2010s. Contactless magnetic sensing: a small magnet moves with the stick shaft, a fixed sensor measures field strength, no wear, no dead spots, essentially indefinite mechanical life. The RadioMaster TX16S ships with Hall effect gimbals as standard — a specification that cost extra on most transmitters five years before the TX16S launched.
Part 2 — The RadioMaster TX16S: Physical Tour¶
The TX16S is the transmitter used throughout the libdrone platform. It is a full-size "box-style" transmitter — large enough to hold comfortably with both hands and reach all controls with thumbs without repositioning. It runs EdgeTX, an open-source firmware. The gimbal mechanisms use Hall effect sensors. The RF module is internal and supports multiple protocols; for libdrone, ELRS 2.4 GHz is used throughout.
The Front Face¶
Left gimbal (throttle and yaw): The left stick controls throttle on the vertical axis and yaw on the horizontal axis. The vertical axis — throttle — has no spring return. When you release the stick it stays where you left it. This is intentional: an aircraft or drone at zero throttle falls. You do not want throttle to spring back to zero if you momentarily release. Instead, a friction brake resists movement and holds position. The friction is adjustable — a small grub screw accessible through the base of the gimbal housing. For libdrone, the default friction is appropriate. Increase it if the stick creeps during transport; decrease it if fine throttle adjustments feel too heavy.
The horizontal axis — yaw — has a spring return to centre, like all other axes except throttle. Centre means "stop rotating." Left of centre rotates the drone counterclockwise (viewed from above). Right of centre rotates clockwise. Release and the drone holds its current heading.
Right gimbal (pitch and roll): Both axes spring-return to centre. Centre is "hold attitude." The vertical axis (elevator/pitch) pushed forward tilts the nose down and accelerates the drone forward. Pulled back raises the nose and decelerates or reverses. The horizontal axis (aileron/roll) pushed right banks the drone right and translates it right; left banks left.
Both gimbals have adjustable spring tension — a grub screw on each axis. Stiffer springs give more resistance and more precise control for pilots who fly with deliberate, large inputs. Looser springs give lighter feel and suit pilots who make small, fast corrections. libdrone's default Betaflight rates assume moderate spring tension. Very loose springs with high rates feel chaotic; very stiff springs with low rates feel dead.
The stick ends (the plastic tips your thumbs rest on): These are replaceable. The TX16S ships with standard convex thumb ends. Alternative options include concave (cup-shaped, grips the thumb more positively, popular for precise flying), tall extended ends (raise the pivot point for different leverage), and rubberised ends (reduce slipping in wet conditions). For outdoor scientific missions, rubberised extended ends are worth considering.
Switch bank (left side, top to bottom): Six switches in two columns. Their labels (SA, SB, SC, SD, SE, SF) have no inherent meaning — they are just identifiers. In EdgeTX, you map each switch to a function. For libdrone, the typical assignment is:
| Switch | Position | Function |
|---|---|---|
| SA | 2-pos | Arm / Disarm |
| SB | 3-pos | Flight mode (Angle / Horizon / GPS Hold) |
| SC | 2-pos | GPS Rescue enable |
| SD | 3-pos | VTX power level (25mW / 200mW / 800mW) |
| SE | 2-pos | Payload enable (GX12 AUX GPIO 1) |
| SF | 2-pos | Payload trigger (GX12 AUX GPIO 2) |
The two-position switches are spring-momentary or latching depending on the TX16S variant. Arm switches should always be latching — a spring-return arm switch is a disarm hazard.
Scroll wheel (left of left gimbal): A clickable rotary encoder. In EdgeTX it navigates menus when on the home screen and can be assigned to adjust a channel value in flight. For libdrone, leave it unassigned until you are comfortable with the full control layout — it is easy to accidentally scroll during a flight and change a setting you didn't intend to change.
Switch bank (right side, top to bottom): Mirrors the left side. SG and SH are the primary right-side switches. SE is a spring momentary by default on most TX16S variants — useful for one-shot actions like triggering a photo. SF is typically 2-position latching.
Sliders (both sides, vertical): Two sliders, one on each side of the transmitter. These are linear potentiometers that travel vertically. By default they output on channels 7 and 8. For libdrone they can be assigned to camera tilt (if a gimbal is fitted) or left unassigned. Sliders are particularly useful for functions that need gradual adjustment rather than on/off — neutral density filter control, payload sensitivity adjustment, or future functions.
LCD touchscreen (centre, main display): A colour touchscreen showing the EdgeTX home screen: model name, battery voltage, timer, RSSI, link quality, and the channel monitor. During flight the most useful information is the RSSI bar (signal strength from the drone to your goggles, if configured for telemetry) and the LQ number (link quality percentage — should be 100% in normal conditions). The screen can be read in bright sunlight but is easier to see in shade. Tapping the screen opens menus; long press opens context options.
USB-C port (left side): Used for charging the TX16S internal battery, connecting to a PC for EdgeTX Companion (configuration software), and simulator use via Joystick HID mode. This port is how you update EdgeTX firmware and how you copy model files.
The Back and Sides¶
Antenna housing (top): The internal ELRS 2.4 GHz antenna is inside the transmitter body. The orientation of the transmitter affects the antenna's radiation pattern — holding the transmitter flat (face up) points the antenna's main beam sideways, which is good when the drone is at a distance but poor when it is directly overhead. Normal flying posture (transmitter angled at roughly 45°, facing roughly toward the drone) gives good link geometry for most flight scenarios.
Battery bay (rear): The TX16S accepts either a 2S LiPo pack in the proprietary bay, or 18650 Li-ion cells in an adapter. The 2S LiPo option is preferred for libdrone use: it provides consistent voltage through the discharge cycle and recharges via the USB-C port without removal. The transmitter displays battery percentage. Land and recharge the transmitter when it drops below 20% — do not fly libdrone with a transmitter battery below this threshold. The transmitter will warn you at configurable percentages.
Trainer port (3.5mm jack, right side): Allows a second transmitter to be connected as a student controller. The instructor's transmitter remains in control; pressing a switch on the instructor's transmitter passes control to the student. For supervised learning with libdrone Core, this is valuable. The student can feel the sticks responding in their hands before they take control.
Part 3 — What the Sticks Actually Command¶
Understanding the chain from stick movement to aircraft response is the foundation of good piloting. The chain has five links, and knowing each link tells you where to look when something is wrong.
Physical stick movement
│
▼
Hall sensor reads position (0–65535 counts, 16-bit)
│
▼
EdgeTX applies expo, rates, and channel mapping
│
▼
ELRS encodes 11-bit value (0–2047) into CRSF packet, transmits 250/s
│
▼
RP2 receiver decodes, sends CRSF to FC via UART3 at 420,000 baud
│
▼
Betaflight reads channel value, applies flight mode logic, runs PID
│
▼
Motor speeds change → drone moves
The Four Primary Channels¶
Channel 1 — Roll (right stick horizontal): Centre (1500 µs equivalent) = hold current roll attitude. Right of centre commands roll right — in GPS mode, this translates to rightward horizontal movement. In angle mode, commands a roll angle. In rate mode, commands a roll rate (degrees per second). For libdrone mapping missions, GPS hold mode is standard: roll commands lateral translation, drone remains level.
Channel 2 — Pitch (right stick vertical): Centre = hold current pitch attitude. Forward commands nose-down pitch — in GPS mode, this translates to forward movement. Back commands nose-up — rearward movement or deceleration. The coupling between pitch and altitude that exists in manual mode is handled by the flight controller in GPS mode.
Channel 3 — Throttle (left stick vertical): The only channel with no spring return. Controls total thrust. In GPS mode with altitude hold, the FC manages altitude automatically; the throttle stick in this mode typically controls vertical velocity rather than absolute thrust — centre = hold altitude, up = climb, down = descend. In manual mode, throttle directly controls motor speed.
Channel 4 — Yaw (left stick horizontal): Centre = hold current heading. Left commands counterclockwise rotation. Right commands clockwise. In GPS mode with heading hold, the drone rotates about its vertical axis without translating. In GPS mode without heading hold, the drone will drift during yaw.
Mode 2 Visualised¶
LEFT STICK RIGHT STICK
┌─────────────────┐ ┌─────────────────┐
│ ↑ │ │ ↑ │
│ Throttle + │ │ Pitch Fwd │
│ │ │ │
│ ← → │ │ ← → │
│ Yaw L Yaw R │ │ Roll L Roll R │
│ │ │ │
│ Throttle – │ │ Pitch Back │
│ ↓ │ │ ↓ │
└─────────────────┘ └─────────────────┘
No spring return Spring return
on vertical axis on both axes
The Hidden Channels: Switches and Sliders¶
Channels 5 and above carry switch and slider states, not gimbal positions. In Betaflight, these are "AUX" channels. The flight controller reads them and makes mode decisions:
- Channel 5 (AUX1): Arm switch. The FC arms only when this channel is above a configured threshold. This is the most safety-critical channel in the system.
- Channel 6 (AUX2): Flight mode switch. Betaflight maps specific channel ranges to flight modes. A 3-position switch gives three flight modes: typically Angle (self-levelling, GPS hold), GPS Rescue (manual trigger), and Horizon (partial stabilisation for training).
- Channel 7 (AUX3): GPS Rescue. Dedicated switch for manual RTH trigger.
- Channel 8+ (AUX4+): Payload functions, VTX power, camera controls.
Part 4 — EdgeTX: The Open-Source Brain¶
EdgeTX is the firmware that runs the TX16S. It was forked from OpenTX in 2021 when the community felt OpenTX's development pace was insufficient for the evolving needs of the FPV and drone community. This is FOSS in action: when the upstream project did not serve the community's needs, the community forked it, improved it, and released it openly.
EdgeTX source code is on GitHub. Any programmer can read it, modify it, and submit improvements. Any manufacturer can build EdgeTX-compatible hardware. If RadioMaster ceased to exist tomorrow, EdgeTX would continue to be maintained and would run on other hardware.
Key EdgeTX concepts¶
Model: A complete configuration for one aircraft. Every switch assignment, channel mapping, rate setting, and mixer is stored in a model. The TX16S can store many models. libdrone Core and libdrone Pro are separate models — their switch assignments and rates differ. Switching between them is a menu selection at power-on.
Mixer: The engine of EdgeTX's signal processing. Each output channel is defined by a mix of inputs: stick positions, switch states, mathematical operations, and logical conditions. The default mixer for libdrone is straightforward — stick axis directly to channel, switch directly to channel — but mixers can implement complex logic. Example: a mixer can calculate the average of two stick axes, or produce a channel value that is high only when two switches are simultaneously in specific positions.
Curves: Modify the relationship between stick physical position and channel output. A linear curve (default) means stick at 50% position = channel at 50% value. An exponential curve means stick at 50% position = channel at roughly 25–30% value — more stick travel for the same output near centre, improving fine control. For libdrone mapping missions, slight expo on pitch and roll (15–20%) makes precise station-keeping easier. Too much expo makes the drone unresponsive to small corrections.
Rates: Scale the maximum channel output. If pitch rate is set to 80%, full stick deflection commands 80% of the FC's maximum rate or angle. Lower rates give more precision from the same stick travel. For libdrone Pro in mapping mode, rates of 50–60% on pitch and roll are appropriate — the drone never needs aggressive manoeuvres during a survey transect, and lower rates give the pilot more control authority over small corrections.
Logical switches: Conditions that evaluate to true or false and can trigger other functions. Example: "logical switch L1 = true when SA is down AND SB is in position 2." L1 can then enable the payload, ensuring it only activates when both the drone is armed (SA) and in GPS hold mode (SB position 2). This prevents accidental payload activation during takeoff.
Special functions: Actions triggered by logical switches or physical switches. Common uses: starting a timer when armed, playing a sound when GPS fix is acquired, announcing battery percentage aloud at defined intervals.
Global functions: Like special functions, but active across all models. Useful for universal announcements — "battery critical" alert set once in global functions applies to every model.
EdgeTX Companion¶
EdgeTX Companion is the desktop software (Windows, macOS, Linux) for configuring the TX16S from a computer. It connects via USB-C and displays the full model configuration in a graphical interface. More importantly, it provides a simulator: you can run a virtual model on your computer, move the sticks on the physical TX16S, and see the channel outputs in real time — without the aircraft, without ELRS, without risk.
This simulator capability is valuable during initial configuration. Before flying a new model for the first time:
- Connect TX16S to computer via USB-C
- Open EdgeTX Companion, load the model
- Arm the virtual model using the arm switch
- Move each stick and verify each channel moves in the correct direction
- Toggle each switch and verify the correct channels respond
- Verify failsafe: turn off ELRS on the transmitter while the drone is connected to Betaflight — channels should move to their failsafe positions within 1 second
Part 5 — ELRS: The Link Between Hands and Aircraft¶
ExpressLRS (ELRS) is the radio link that carries the transmitter's output to libdrone's receiver. It runs on 2.4 GHz using chirp spread spectrum (LoRa modulation) — the same physics as the long-range LoRa sensors used in IoT networks, adapted for the sub-10-millisecond latency requirements of RC flight.
What ELRS carries¶
At 250 Hz (libdrone's standard configuration), the TX16S sends 250 CRSF packets per second to the RP2 receiver. Each packet contains:
- 8 RC channels at 11-bit resolution (2048 positions per channel, approximately 0.05% resolution per step — far finer than any pilot can detect)
- Link statistics: RSSI (received signal strength), SNR (signal-to-noise ratio), packet loss rate
- Optional telemetry request
The packet is 64 bytes. At 250 Hz, this is 16,000 bytes per second — a very modest data rate for a 2.4 GHz radio. The low data rate, combined with LoRa's spread spectrum processing gain, gives ELRS its range advantage: 10–30 km reliable link at 100–250 mW transmit power, in conditions where traditional FHSS systems would fail at 2 km.
For libdrone's operating distances (typically under 500 m for legal VLOS operation), the link margin is enormous. ELRS will be the last system to fail in degraded conditions. If you are losing link at 200 m, the problem is almost certainly interference, antenna failure, or receiver wiring — not ELRS range.
Reading the link quality numbers¶
The TX16S displays two numbers that tell you the health of the radio link:
LQ (Link Quality): The percentage of transmitted packets that were successfully received by the aircraft in the last second. At close range in clean RF conditions: 100%. If this drops below 100% you are receiving RF interference or your antennas are poorly oriented. If it drops below 70% you are in the early stages of range problems. If it approaches 0% the link is about to fail. Land immediately if LQ drops below 50% at normal operating distance.
RSSI (Received Signal Strength Indicator): The power level of the signal received by the drone's RP2 receiver, in dBm (decibels relative to 1 milliwatt). A larger negative number means weaker signal. At close range: typically –60 to –75 dBm. At 500 m in open sky: typically –80 to –90 dBm. ELRS reliably operates to around –105 dBm. Values below –95 dBm at normal operating distances should be investigated.
These numbers appear in the TX16S header bar and can be spoken aloud by EdgeTX's audio system — configure an alert to announce "signal weak" when LQ drops below 90% and "land now" when it drops below 70%. This keeps your eyes outside rather than on the screen during flight.
Binding¶
Binding is the process of associating one specific transmitter with one specific receiver. An unbound receiver will not respond to any transmitter. A bound receiver will only respond to its paired transmitter (and any transmitter in the same "binding phrase" if using ELRS's binding phrase system, which is the recommended approach for libdrone).
ELRS 3.x introduced the binding phrase — a text phrase entered in both the transmitter firmware and the receiver firmware. Any transmitter and receiver with the same binding phrase are automatically paired without physical button-press binding. This means:
- If your RP2 receiver is replaced (crash damage), the new receiver programmed with the same binding phrase binds automatically on first power-on
- You can have a backup transmitter that binds to your aircraft without rebinding
- You can update receiver firmware over-the-air (OTA) from the transmitter
For libdrone, choose a unique binding phrase and document it. Write it in the model notes in EdgeTX and on a label inside the drone's Platform layer. A lost binding phrase means rebinding by button press — not fatal, but inconvenient in the field.
Part 6 — Betaflight Channel Mapping¶
The ELRS receiver delivers 8 channels to Betaflight via CRSF on UART3. Betaflight maps these channels to flight functions in the Receiver tab and the Modes tab.
Standard libdrone channel assignment¶
| Channel | EdgeTX source | Betaflight function | Notes |
|---|---|---|---|
| CH1 | Right stick H | Roll | Right = roll right |
| CH2 | Right stick V | Pitch | Forward = pitch forward |
| CH3 | Left stick V | Throttle | Up = throttle up |
| CH4 | Left stick H | Yaw | Right = yaw right |
| CH5 | SA switch | ARM | Up = armed. Never re-assign. |
| CH6 | SB switch | Flight mode | 3-position |
| CH7 | SC switch | GPS Rescue | 2-position |
| CH8 | SD switch | VTX power | Via Betaflight VTX tables |
| CH9 | SE switch | Payload enable | AUX GPIO 1 |
| CH10 | SF switch | Payload trigger | AUX GPIO 2 |
Channel direction verification¶
Before the first flight, verify every channel moves in the correct direction in Betaflight's Receiver tab:
- Push right stick right → CH1 bar moves right (above centre)
- Push right stick forward → CH2 bar moves up (for "pitch forward = positive")
- Push left stick up → CH3 bar moves up
- Push left stick right → CH4 bar moves right
- Toggle SA to arm position → CH5 bar moves above the arm threshold line
If any channel moves in the wrong direction, reverse it in EdgeTX (in the channel output settings, tick "reverse") rather than in Betaflight. Reversing in EdgeTX means the channel is correct throughout the entire signal chain. Reversing in Betaflight only corrects it at the FC — any telemetry or other system reading the raw channel will still see the wrong direction.
Arm switch configuration¶
The arm switch is the most safety-critical configuration in the system. Get it wrong and the drone can arm unexpectedly or fail to disarm when required.
Correct configuration: * SA switch (or whichever physical switch is designated for arm) mapped to CH5 * In Betaflight Modes tab, ARM mode activated when CH5 is above 1800 µs * SA in the "down" position (away from pilot) = armed. SA "up" (toward pilot) = disarmed. * The "away from pilot" convention for arm is universal: you never accidentally arm by dropping the transmitter, and you never accidentally disarm by flinching toward the aircraft
This also means: always land with the aircraft in front of you and below eye level, then flip SA toward you to disarm. Never reach for the arm switch while the aircraft is still in the air except in emergency. The flight controller manages the landing — your job is to command the landing, then disarm when it is on the ground.
Part 7 — Pre-Flight Habits¶
The following sequence is not a bureaucratic checklist. Each item exists because its absence has caused accidents. Read the reasoning, not just the steps.
Before you arrive at the flying site¶
Transmitter battery: Check percentage in the TX16S header. Should be above 50%. A transmitter battery failure in flight is an immediate lost-link condition. The aircraft will activate GPS Rescue and return home, but you have lost direct control.
Model selected: Is the correct model active on the TX16S? Core and Pro have different switch assignments and rates. Flying Pro with Core's rates (or vice versa) changes the aircraft's response in ways that can cause a crash.
EdgeTX version: Check that the TX16S firmware version and the RP2 firmware version are compatible. ELRS compatibility between TX and RX firmware is documented on the ELRS GitHub. Major version mismatches can cause binding failures or unexpected behaviour.
At the flying site, before powering on the aircraft¶
Transmitter ON first: Always power on the transmitter before connecting the drone battery. The ELRS failsafe triggers when the receiver loses link — if the aircraft powers on before the transmitter is active, it immediately sees a lost link and activates failsafe. In most configurations this holds all channels at their safe values, but it is bad practice and should never be a habit.
Site survey: Look up. Are there overhead wires? Look around. Is there anyone within the crash radius (approximately 50 m for libdrone)? Look at the wind. From which direction? How strong? libdrone Pro should not be flown in sustained winds above 8 m/s (28 km/h) at standard configuration — the GPS position hold will fight the wind but efficiency and control authority both degrade.
After connecting the battery¶
Do not move the drone for 3 seconds: Betaflight performs gyro calibration on power-on. Any movement during this window produces a calibration error that will be present for the entire flight. Set the drone down, connect the battery, step back, wait for the calibration beeps to finish.
Wait for GPS fix: The OSD will show satellite count climbing. Do not arm until GPS shows at least 8 satellites and a 3D fix. GPS Rescue requires a recorded home position, which is set at arm time. Arming without GPS fix means GPS Rescue has no home to return to.
Check OSD telemetry: Battery voltage should read the pack's state of charge — a fully charged 6S reads 25.2V. If voltage reads significantly lower, the pack is not fully charged or the voltage sense wiring has an issue. Flight time is proportional to energy available; always fly fresh packs for any mission that requires full endurance.
Check LQ and RSSI on transmitter: Both should read normal at close range (LQ 100%, RSSI –60 to –75 dBm). Anomalous values before flight indicate a receiver wiring issue or RF interference at the site that warrants investigation before flying.
Arm in a safe orientation: Arm with the drone's nose pointing away from you, in an open area, with no people within the crash radius. On arm, all four motors begin idling. If any motor sounds different from the others (rattling, grinding, or a tone that suggests imbalance), disarm immediately and investigate. Do not take off with a questionable motor.
During flight¶
Maintain visual line of sight: You must be able to see the drone's orientation at all times to correct unexpected attitude changes. The drone's LED indicators (and the OSD feed in your goggles) help, but they do not replace being able to see the physical aircraft.
Monitor battery voltage: The OSD displays battery voltage continuously. As the pack discharges, voltage sags. The voltage at which you land is configurable; for libdrone a 3.5V/cell landing threshold (21.0V for 6S) is standard. Land before the threshold is reached — the threshold is a hard limit, not a target.
Monitor LQ: Should remain 100% throughout normal operations. Any LQ drop below 100% during flight warrants investigation after landing. Consistent LQ drops at specific orientations suggest an antenna issue. Consistent LQ drops at specific locations suggest RF interference at that position.
After landing¶
Disarm before anything else: Land the aircraft, confirm it is on the ground and stable, flip the arm switch to disarmed, then approach. Never approach a running aircraft — even a grounded, armed drone can throttle up unexpectedly if the flight controller receives a bad sensor reading. Disarm first, always.
Transmitter OFF last: Mirror the power-on sequence in reverse. Disarm the aircraft (FC receives disarm command via live link), wait for motors to stop, disconnect battery, then power off transmitter.
Post-flight inspection: Check propellers for chips, cracks, or bent tips. Check arm T-lock engagement — a hard landing can partially unseat a tab. Check motor temperatures (warm is normal; hot is a sign of imbalance or an electrical issue). Check the battery for swelling or unusual warmth.
Part 8 — Simulator Practice¶
Before flying libdrone for the first time, spend time in a simulator. This is not optional for new pilots; it is how you avoid a preventable crash on the first flight.
Why simulators work¶
Flying a drone requires building procedural memory — the ability to make stick inputs without conscious thought, the same way a driver steers a car without thinking about which hand to move. This memory is built through repetition. A simulator provides repetition without consequence: every crash is free, every restart is instant, and the learning rate is far higher than real-world practice where a crash means a repair delay of hours or days.
The specific skill that a simulator builds before any other: orientation. When the drone is flying toward you, all horizontal inputs are reversed relative to your perspective. This inversion is deeply counterintuitive and takes many hours of practice to internalise. In a simulator you can crash through this barrier safely. On a real drone, a disorientation crash is expensive.
Recommended simulators¶
FPV.SkyDive is a browser-based and downloadable FPV simulator with models that can be configured to match libdrone's flight characteristics. It supports ELRS controllers connected via USB HID. The libdrone-specific SkyDive configuration adjusts rates, expo, and physics model to match the 6" Pro platform's actual flight characteristics.
Liftoff and Velocidrone are standalone simulators (paid) with larger physics model libraries and more realistic environmental simulation. Useful once basic orientation is established and you are practising more complex flight patterns.
Betaflight's own simulator mode: Not a flight simulator, but the ability to connect the FC to Betaflight Configurator via USB and see all sensor outputs in real time while moving the aircraft by hand. Useful for verifying that all axes respond correctly and that the PID loops are responding to manual attitude changes before the first flight.
Skills to practise before first libdrone flight¶
-
Stable hover: Hold a fixed position for 60 seconds without significant drift. In GPS hold mode this is easy — the FC does the work. In attitude mode it requires constant small corrections. Practise both.
-
Forward flight and return: Fly a straight line away from you, stop, turn 180°, fly back to start. This introduces the orientation reversal when flying toward you.
-
Box pattern: Fly the four sides of a square at constant altitude, returning to start. Requires managing speed, inertia, and position simultaneously.
-
Emergency descent: Practice descending at an angle (never straight down — VRS risk) from altitude to a landing. The habit of angled descent must be automatic before real-world flight.
-
Disorientation recovery: Deliberately disorient yourself by doing a fast yaw rotation, then fly back to a landing point. The ability to recover from disorientation without panic is a critical safety skill.
Part 9 — Understanding What You Cannot Control¶
Two sticks provide four channels of control. A drone in free space has six degrees of freedom. This means two things that every libdrone pilot should understand clearly.
In GPS hold mode: The flight controller provides the two missing dimensions. "Roll right" becomes "translate right while maintaining altitude and heading." The coupling between roll and vertical height that exists in manual flight is handled invisibly. The pilot experiences apparently full 3D control.
In manual or attitude mode: The coupling is present and must be managed by the pilot. Banking right to translate right also reduces the vertical thrust component, causing the drone to descend. The pilot must simultaneously add throttle to compensate. This coupling is why manual quadcopter flight is significantly harder than GPS-assisted flight, and why it should be practised in a simulator before attempting with libdrone.
What neither mode provides: Truly independent control of all six degrees of freedom simultaneously. You cannot command "move right, nose left, climb, without rolling" with a standard quadcopter in any flight mode. The flight controller manages the coupling constraints, but the underlying physics of a quadcopter means some combinations of position change and heading are only achievable sequentially, not simultaneously.
For libdrone's primary mission — systematic survey transects at constant altitude, speed, and heading — none of these limitations matter. The flight controller manages everything and the pilot's role is waypoint management and emergency override. For freestyle or fast FPV flight, the limitations matter enormously and require years of practice to manage intuitively.
Quick Reference Card¶
Print this and keep it in your field kit.
╔═══════════════════════════════════════════════════════════════╗
║ LIBDRONE TRANSMITTER QUICK REFERENCE ║
╠═══════════════════════════════════════════════════════════════╣
║ LEFT STICK │ RIGHT STICK ║
║ ↑ Throttle + │ ↑ Pitch forward ║
║ ↓ Throttle – │ ↓ Pitch back ║
║ ← Yaw left │ ← Roll left ║
║ → Yaw right │ → Roll right ║
║ (no spring return) │ (spring return both axes) ║
╠═══════════════════════════════════════════════════════════════╣
║ SA ↓ = ARMED │ SB = Flight mode (3-pos) ║
║ SA ↑ = DISARMED │ SC = GPS Rescue (up = active) ║
║ SE = Payload on │ SF = Payload trigger ║
╠═══════════════════════════════════════════════════════════════╣
║ GOOD │ INVESTIGATE ║
║ LQ = 100% │ LQ < 100% during flight ║
║ RSSI > –85 dBm │ RSSI < –95 dBm ║
║ Battery > 22V (6S) │ Battery < 21V — LAND NOW ║
╠═══════════════════════════════════════════════════════════════╣
║ POWER ON: TX first, then drone battery ║
║ POWER OFF: Disarm, disconnect battery, TX off ║
║ ARM: Nose away from you, clear area, SA down ║
║ LAND: Angled descent, land, SA up, then approach ║
╚═══════════════════════════════════════════════════════════════╝
Glossary¶
CRSF — Crossfire Serial Format. The serial protocol carrying RC channel data from the RP2 receiver to the FC. 64 bytes per packet, 250 packets per second, 420,000 baud.
EdgeTX — Open-source transmitter firmware running on the TX16S. Forked from OpenTX in 2021. Source code on GitHub.
ELRS — ExpressLRS. Open-source long-range RC link protocol using chirp spread spectrum at 2.4 GHz. Implemented in the TX16S internal module and RadioMaster RP2 receiver.
Expo — Exponential curve applied to stick inputs. Reduces sensitivity near centre for finer control without reducing maximum authority at full deflection.
Failsafe — The behaviour of the aircraft when the RC link is lost. For libdrone, GPS Rescue activates after 1 second of lost link.
Hall effect sensor — Contactless magnetic position sensor used in quality RC gimbals. No wear, no dead spots, essentially infinite mechanical life.
LQ — Link Quality. Percentage of ELRS packets successfully received in the last second. Should be 100% in normal conditions.
Mode 2 — Control assignment: throttle/yaw on left stick, pitch/roll on right stick. The standard for FPV and multirotor flight globally.
RSSI — Received Signal Strength Indicator. Signal power at the receiver in dBm. More negative = weaker signal.
Rates — Scaling factor for maximum stick authority. Lower rates give more precision from the same stick travel.
TX16S — RadioMaster TX16S MKII. The transmitter used with libdrone. Runs EdgeTX, Hall effect gimbals, internal ELRS module.
libdrone — The Radio Controller Part of the libdrone Textbook Series Version 1.0
Revision History¶
| Version | Date | Author | Summary |
|---|---|---|---|
| 3.4.3 | 2026-03-27 | JS | Version alignment with platform release. |
| 1.0 | 2026-03 | JS | Initial radio controller reference. |