PX4 FAQ
The problems that come up most often on a PX4 build. If nothing has gone wrong yet and you are setting an aircraft up for the first time, the PX4 Build & Configuration Walkthrough is the place to start.
How do I set up an ELRS receiver on PX4?
ExpressLRS receivers speak CRSF, which is a two-way protocol — the aircraft sends telemetry back up to the transmitter. That shapes the wiring.
Wiring
Four wires, not three: GND, 5 V, TX and RX, from the receiver to the flight controller's RC connector.
TX and RX cross over. Receiver TX goes to flight controller RX; receiver RX goes to flight controller TX. This is the single most common mistake, and it produces exactly the same symptom as no wiring at all.
A receiver's own manual or silkscreen sometimes labels the pads from the perspective of the other device, so its "TX" is really the pin you should connect to the flight controller's TX. If everything else checks out and there is still nothing, swap the two wires and try again — it costs a minute and it is a genuinely common cause.
Two practical notes on the connectors themselves: pull and push plugs straight, because a pin bent inside a housing is nearly invisible, and heat-shrink any soldered joint so a loose strand cannot bridge to its neighbour.
Binding
Bind the receiver to the transmitter following their own instructions. When it has worked, the receiver's LED goes solid and the transmitter shows a link back from the aircraft.
Get this working before touching PX4. A receiver that is not bound cannot be distinguished from one that is misconfigured.
Parameters
RC_INPUT_PROTO = CRSF # what the receiver speaks
RC_PORT_CONFIG = Radio Controller # which port the RC driver listens on (the default)
RC_SBUS_PRT_CFG = Disabled
RC_CRSF_PRT_CFG = Disabled # yes, Disabled — see below
RC_GHST_PRT_CFG = Disabled
RC_DSM_PRT_CFG = Disabled
Reboot. The Radio page should now show channel values moving, and you can run the calibration.
Should I set RC_CRSF_PRT_CFG for a CRSF receiver?
No. This is the one that catches nearly everybody, because the parameter name looks exactly like the thing you are trying to do.
There are two different mechanisms with confusingly similar names:
| Parameter | What it is | Default |
|---|---|---|
RC_PORT_CONFIG | the serial port for the RC input driver — the one RC_INPUT_PROTO configures | Radio Controller |
RC_SBUS_PRT_CFG, RC_CRSF_PRT_CFG, RC_GHST_PRT_CFG, RC_DSM_PRT_CFG | separate standalone drivers, one per protocol, for running that protocol on a port of its own | Disabled |
RC_INPUT_PROTO and RC_PORT_CONFIG are a pair and between them they are the whole configuration. The per-protocol parameters are an alternative, not a second step.
Point one of them at the port RC_PORT_CONFIG already holds and two drivers are competing for the same UART — the result is no RC input at all, including in the case where you set RC_CRSF_PRT_CFG because you are genuinely running CRSF.
My receiver is wired right and still nothing moves
In order, because each is cheaper to check than the next:
- Is the flight battery connected? USB powers the flight controller. It does not power the 5 V rail that the receiver runs on, so a receiver configured over USB alone is simply not switched on.
- Is the receiver bound? Solid LED, and the transmitter showing a link.
- Are TX and RX crossed? And if the labelling is at all ambiguous, swap them once to find out.
- Is exactly one driver claiming the port?
RC_PORT_CONFIGat the connector, everyRC_*_PRT_CFGDisabled. - Has the board been rebooted? All of these parameters require it.
Why can I not find SER_TEL1_BAUD?
Because nothing has claimed TELEM 1 yet.
PX4 creates a port's baud-rate parameter only once a feature has been assigned to that port, and only after a reboot. So the order is:
- Set
MAV_0_CONFIGto TELEM 1. - Reboot.
SER_TEL1_BAUDnow exists — set it to whatever the radio is using.- Reboot again.
Searching for the parameter before the first reboot and concluding it does not exist is a well-travelled half-hour. The same applies to every port on the board.
My battery percentage is wrong
Three parameters, in the order they are likely to be the problem:
| Parameter | What it is | Default |
|---|---|---|
BAT1_N_CELLS | how many cells the pack has | 0 — Unknown |
BAT1_V_DIV | converts the measured analogue voltage into pack voltage | −1, meaning use the board's figure |
BAT1_A_PER_V | converts the measured analogue voltage into current | −1, meaning use the board's figure |
Cell count first. It defaults to Unknown, and without it every percentage and remaining-time estimate is meaningless. Set it to match the pack — 6 for a 6S.
Then the voltage divider, if the reported pack voltage does not match a multimeter.
Then amps per volt, which is the one most likely to be out, because current is usually measured by a shunt on the ESC rather than on the flight controller — so the flight controller's built-in default was never going to be right for your particular ESC.
QGroundControl has a calculate button beside each: measure the real value, type it in, and it derives the coefficient for you.
How do I back up my parameters?
In QGroundControl's vehicle setup, open the Parameters page and use the Tools menu — it saves every parameter to a file, and loads one back.
Do it when an aircraft is flying the way you want, and again before any session of serious experimentation. A parameter file is the only fast way back from a configuration you can no longer reconstruct.
Does PX4 need ESC calibration?
Only with analogue PWM output. DShot sends the throttle as a number rather than as a pulse length, so there is nothing for the ESC to learn about your endpoints and the step does not exist. Any instruction to calibrate ESCs on a DShot build is out of date.
It flies fine manually but drifts or circles in Position mode
Compass orientation, nearly every time.
In Stabilized and Acro nothing uses the heading, so a compass mounted at a rotation PX4 has not been told about causes no visible symptom whatsoever. The moment a position mode starts steering towards a point, the heading PX4 believes and the heading the aircraft has diverge, and it circles the target or slides steadily away from it.
Set CAL_MAG0_ROT to match how the module is physically mounted and recalibrate — orientation first, calibration after. External Compass Orientation covers how to work the value out rather than guess.
Related guides
- PX4 Build & Configuration Walkthrough
- NxtPX4 V2 — User Manual
- PX4 — Telemetry Setup Guide
- Flight Controller Firmware Flashing Guide
- External Compass Orientation
- Optical Flow Setup Guide
Written and maintained by the Robofusion engineering team.