FPV drones: a technological overview
Motivation
Many types of unmanned systems have been researched over the last decade. Lately I’ve been interested in fpv (first-person view) drone systems especially from an engineering perspective. There is a surprisingly lot to cover in these seemingly simple flying systems which are built on multiple engineering disciplines: hardware design, software design, RTOS and RF systems. I’ll share my findings in this post with a main focus on software components. After reading this post you should have a basic understanding of how pilots can fly drones over a span of several kilometers with precision, and what technology makes this possible.
I was surprised to see the amount of customizability and modularity in fpv drones and the available open-source embedded firmware. More on that later.
From pilot commands to motor movement
First, some terminology needs to be clarified. I guess that solely from a marketing stand point many abbreviations exist for different drone components like: FC, RC, ESC, ELRS, VTX etc. To have clarity on the names and functions of these components let’s go through them and explain each individual components role along the way.
Let’s look at the complete signal chain from remote controller to the UAV.
For the drone to be able to respond to pilots commands a radio link needs to be established. The link from pilot-to-drone is refered to as uplink and from drone-to-pilot as downlink. Control signals, such as joystick movements and switch presses, are transmitted trough the uplink. These control signals, implementing some control protocol, are processed by the on-board flight controller (FC) and then transmitted to on-board actuators, in this case, the propeller motors. The FC does not directly control the motors itself but instead uses an intermediate component, an electronic speed controller (ESC) to adjust individual motor rotation speeds.
There are many different types of FCs and ESCs that can serve different types of UAVs: quadcopters, octocopters and fixed-wing drones.
You’ll see fpv pilots wearing futuristic looking fpv goggles. In the occulars they see a transmitted video signal, either analog or digital, on small displays. The drone reports system diagnostics on an OSD (on-screen display) that is overlaid on the video feed. The OSD shows different metrics such as altitude, signal strength, battery level etc. The components responsible for the video downlink is the VTX, short for Video Transmitter (TX and RX are used to present transmit and receive channels).
These components working together ensures that the pilot can take-off, fly and land the drone with precision. Now what if for some reason the drone flies out-of-sight and the control link is lost? Many FCs support a GPS module which is used to return-to-base when the radio link is down. Some GPS modules broadcast the RemoteID, a remote drone identification message format, which makes it easier to locate a crashed drone.
The most common motors used on an fpv drone are by far brushless DC (BLDC) motors. Compared to DC motors with brushes they are more energy efficient and a lot more precise in RPM control.
So summarizing aforementioned systems and their purposes:
- Flight controller (FC): an SoC that contains a microcontroller and integrated circuits like a gyroscope and accelerometer. The FC interfaces to other devices such as GPS module, LEDs and antennas. Several manufacturers have similiar designs that are based on the SMT32 MCUS like F722 and F405 (see eBay search). The FC model name comes from the fact that they are based on STM32 MCUs of a corresponding microcontroller model type.
- Electronic speed controller (ESC): A controller for driving BLDC motors. It has an MCU that drives three MOSFETs. The FC sends one PWM signal to the ESC for one motor. A quadcopter thus needs four PWM signals.
- Radio link: (or control link) a transceiver pair that passes control signals between end-points like a radio controller and a receiver module. A common open-source protocol used in is the ExpressLRS (ELRS).
- Video trasmitter (VTX): namely the transmitter on-board the drone. It receives and processes the video feed from the camera and transmits the signal to pilots video receiver.
Instead of a flight controller a more sophisticated system can carry a flight computer which has more computational resources.
These are in my opinion the most relevant parts in an introduction. Let’s look at some example FCs, ESCs and connection diagrams.
Inspection of a complete fpv build
Drone frame sizes are noted by the size of the propellers used like 3″, 5″, 7″ and 10″. Racing and freestyle fpvs use the smaller 3″ and 5" frame sizes while long range fpvs use larger frames. Larger propellers are more efficient in creating thrust due to blade size. Consequently they can carry larger batteries which requires more thrust and so forth.
This Seeker 5 frame houses a complete fpv setup.
TBC
Flight controller firmware
When looking at the FC software I want to point out two key characteristics: autonomy and control.
When we have an autonomous drone, let’s say it is fully autonomous, then a pilot has no control over it during the drones operation time. Fully autonomous is a bit of a fuzzy term so let’s instead talk about partional autonomy with waypoints and missions. Here we give a drone a mission by defining a group of waypoints which the drone crosses in it’s flight path. A waypoint can be for example a GPS coordinate. When having this partial autonomy the control of motors is managed by the software alone.
Then on the other hand when a pilot wants full control of the drone the whole idea of autonomy looses it’s purpose. With full control other aspects become more relevant like minimal latency in radio transmission, control refresh rate and discharge rate.
Conveniently there exists three community driven FWs that have different levels of control and autonomy: betaflight, iNAV and ardupilot.
Betaflight
A fact that the Betaflight is open-source is particularily appealing. Because of the big community support betaflight supports a lot of different hardware. In theory a hobbyist could design their own hardware for this FW. The codebase for betaflight is rather large but very well structured. There is even a custom scheduler algorithm implemented on the system! A quick look shows that unit tests are in place as well. On GitHub author page a configuration software for new drone builds is provided. It supports all common drone configurations and goes through detailed calibration of all system components. A CLI mode is also available which is a big plus in my opinion.
If you are curios in learning an embedded system that is of semi-large scale then I suggest studying the betaflight repo in detail.
iNAV
iNAV and betaflight are both forked from the same ancestor called Cleanflight with betaflight focusing on FW for agility and iNAV more on navigation. iNAV supports very much the same hardware as betaflight and you can clearly see the common ancestor in the user interfaces. This means that it is relatively quick and easy to switch from betaflight to INAV and vice versa.
iNAV support waypoint based missions out of the box. During flgiht the pilot can activate a preloaded mission from their radio controller and the drone starts executing the mission. The implementation of the missions isn’t perfect but for the price tag it is excellent. It is very recommended that the drone has a GPS and compass for better navigation accuracy.
ArduPilot
Released in 2009 ArduPilot support a lot of different UAVs: multirotors, fixed-wings, even ROVs, boats and submarines. For longer distance operation there is an antenna tracker firmware included. Due to bigger complexity ArduPilot requires a flight computer and smaller FCs are no longer apt for the job. Common platforms like Raspberry Pi and BeagleBone are supported. 3D Robotics sells their own hardware called Pixhawk for custom ArduPilot builds. It is a bigger beast compared to small microcontrollers. Beginners can find the modular sensor mounts on Pixhawk helpful for first builds.
Being an ambitious project ArduPilot has it’s own Ground Control Station (GCS) software: APM planner where user can plan missions and monitor a drone midflight.
While at the same time betaflight, iNAV and ArduPilot are all community supported there is little overlap between ArduPilot and Cleanflight derivatives. This means that the platforms have to be studied individually and thus you kinda need to pick you preference. Maybe one day there will be an even more unified open source tech pool to choose from.
While I have least experince on the ArduPilot their copter wiki is something I browse regularily.
Other components
To conclude let’s still skim through other relevant components.
Battery
The controllers obviously need a power supply. Lithium-ions batteries are common because of their fast discharging capability. When looking at bifferent battery sizes you’ll see references to 18650 and 21700 li-ion battery types as well as cell counts like S1, S2, up to around S6. The number refers to the amount of li-ion cells in a single battery.
The battery is connected directly to the ESC. Commonly a XT60 connector with an AWG of 16 wire is used. ESCs can handle a current discharge rate of 20-65A. On larger ten inch drones ESCs of 80A current throughput are used.
BLDC motors and propellers
A quadcopter uses four BLDC motors that spin in different directions to hold altitude. The BLDC motors have a KV rating (not kilovolts) that responds to the number of RPM per volt. For larger drones >7″ a set of lower KV motors are used (1000-1600). Likewise smaller drones <5″ use higher KV value motors (1800-2500). As the KV values increased the motors provide more RPM but less torque. Some very small drones <2.5″ can use KV value of >3200.
Unlike the KV value the size of the drone propellers is proportional to the drone frame size.
Navigation
By convention in aviation when talking about vehicle direction the three dimentions of movement are commonly used: pitch, roll and yaw (wiki). The joysticks on radio controllers are in fact used to adjust the pitch, roll and yaw directly.
Video link formats
The analog format is either PAL or NTSC composite video format that is FM modulated and transmitter over 1.3GHz, 5.8GHz or some at 6.8-7.0GHz. The digital formats are often proprietary and thus only usable with manufacturers devices. The analog format provides lower latency but is subject to noise tearing. Digital formats implements a guard band that protects the transmission from adjecent band interference.
Common manufacturers for digital VTXs are DJI, ZeroHD and Walksnail. Analog systems have a more diverse supply because of the use of standardized NTSC and PAL video formats.
Conclusions
While the primary focus here was on fpvs the software mentioned here has been used on many other types of UAVs as well like rovers and RC planes. It goes to show how the ecosystem of both open source resources and community support have created a diverse playground for UAV experiments.
You should now be a bit more familiar on the state of the modern fpv drone systems. The system components discussed here are big topics on their own and would deserve their own posts. Luckily there is a blog by Oscar Liang with earliest DIY fpv posts from 2013.