Skip to main content

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.

Some receivers are labelled from the wrong point of view

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.

How PX4 assigns serial ports, and why two drivers on one port breaks RC input

There are two different mechanisms with confusingly similar names:

ParameterWhat it isDefault
RC_PORT_CONFIGthe serial port for the RC input driver — the one RC_INPUT_PROTO configuresRadio Controller
RC_SBUS_PRT_CFG, RC_CRSF_PRT_CFG, RC_GHST_PRT_CFG, RC_DSM_PRT_CFGseparate standalone drivers, one per protocol, for running that protocol on a port of its ownDisabled

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:

  1. 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.
  2. Is the receiver bound? Solid LED, and the transmitter showing a link.
  3. Are TX and RX crossed? And if the labelling is at all ambiguous, swap them once to find out.
  4. Is exactly one driver claiming the port? RC_PORT_CONFIG at the connector, every RC_*_PRT_CFG Disabled.
  5. 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:

  1. Set MAV_0_CONFIG to TELEM 1.
  2. Reboot.
  3. SER_TEL1_BAUD now exists — set it to whatever the radio is using.
  4. 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:

ParameterWhat it isDefault
BAT1_N_CELLShow many cells the pack has0 — Unknown
BAT1_V_DIVconverts the measured analogue voltage into pack voltage−1, meaning use the board's figure
BAT1_A_PER_Vconverts 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.


Written and maintained by the Robofusion engineering team.