PX4 supports global navigation satellite systems (GNSS) (including GPS, GLONASS, Galileo, BeiDou, QZSS and SBAS) using receivers that communicate via the u-blox, MTK Ashtech or Emlid protocols, or via UAVCAN. It also supports Real Time Kinematic (RTK) and Post-Processing Kinematic (PPK) GPS Receivers, which extend GPS systems to centimetre-level precision.
PX4 can be used with the following compass parts (magnetometers): Bosch BMM 150 MEMS (via I2C bus), HMC5883 / HMC5983 (I2C or SPI), IST8310 (I2C) and LIS3MDL (I2C or SPI). Up to 4 internal or external magnetometers can be connected, though only one will actually be used as a heading source.
The system automatically chooses the best available compass based on their priority (external magnetometers have a higher priority than internal magnetometers). If the primary compass fails in-flight, it will failover to the next one. If it fails before flight, arming will be denied.
:::tip When using Pixhawk-series flight controllers, we recommend using a combined GPS + Compass mounted as far away from the motor/ESC power supply lines as possible - typically on a pedestal or wing (for fixed-wing). The internal compass may be useful on larger vehicles (e.g. VTOL) where it is possible to reduce electromagnetic interference by mounting the Pixhawk a long way from power supply lines. On small vehicles an external compass is almost always required. :::
PX4 should work with any unit that communicates via the u-blox, MTK Ashtech or Emlid protocols, or via UAVCAN. This list contains GNSS/Compass units that have been tested by the PX4 dev team, or which are popular within the PX4 community.
:::note
- ✓ or a specific part number indicate that a features is supported, while ✗ or empty show that the feature is not supported. "?" indicates "unknown".
- Where possible and relevant the part name is used (i.e. ✓ in the GPS column indicates that a GPS module is present but the part is not known).
- Avionics Anonymous UAVCAN Magnetometer is a compass (not a GPS).
- Some RTK modules can only be used in a particular role (base or rover), while others can be used interchangeably.
- The list may omit some discontinued hardware that is still supported. For example CubePilot Here+ RTK GPS is discontinued and may be removed from the list in a future release. The original Here has already been removed. Check earlier versions if a discontinued module is not mentioned here. :::
Instructions for connecting the GPS (and compass, if present) are usually provided by the manufacturer (at least for more common Autopilot Hardware).
Pixhawk Series controllers typically have a clearly labeled port for connecting the GPS, and the compass is connected to either the I2C or SPI port/bus (depending on the device).
The ARK GPS, ARK RTK GPS, Zubax GNSS 2, CUAV C-RTK2, CubePilot Here3 CAN GNSS GPS (M8N), and Avionics Anonymous GNSS/Mag can also be connected via DroneCAN.
:::warning Pay attention to pinout when connecting the GPS module. While these are all software-compatible, there are several different pin orderings. :::
The "standard" GPS configuration is provided below. Additional device-specific configuration may be provided in PX4 or manufacturer device documentation (e.g. Trimble MB-Two > Configuration).
:::warning The GPS protocol expected by PX4 defaults to u-blox (by default other GPS types like Trimble, Emlid, MTK, will not be detected) The protocol can be configured with GPS_x_PROTOCOL. :::
GPS configuration on Pixhawk is handled transparently for the user - simply connect the GPS module to the port labeled GPS and everything should work.
:::note The default Serial Port Configuration works for most devices. If you are using the Trimble MB-Two you will need to modify the configuration to explicitly set the rate to 115200 baud. :::
To use a secondary GPS, attach it to any free port, and then perform a Serial Port Configuration to assign GPS_2_CONFIG to the selected port.
The following steps show how to configure a secondary GPS on the TELEM 2
port in QGroundControl:
- Find and set the parameter GPS_2_CONFIG to TELEM 2.
- Open QGroundControl and navigate to the Vehicle Setup > Parameters section.
- Select the GPS tab (1), then open the GPS_2_CONFIG parameter (2) and select TELEM 2 from the dropdown list (3).
- Reboot the vehicle in order to make the other parameters visible.
- Select the Serial tab, and open the SER_TEL2_BAUD parameter (
TELEM 2
port baud rate): set it to Auto.
After setting up the second GPS port:
- Configure the ECL/EKF2 estimator to blend data from both GPS systems. For detailed instructions see: Using the ECL EKF > Dual Receivers.
GPS can be used as a source for yaw fusion when using modules where yaw output is supported by the device (e.g. Trimble MB-Two) or when using some RTK GPS Setups with Dual u-blox F9P.
When using GPS for yaw fusion you will need to configure the following parameters:
Parameter | Setting |
---|---|
GPS_YAW_OFFSET | The angle made by the baseline (the line between the two GPS antennas) relative to the vehicle x-axis (front/back axis, as shown here). |
EKF2_GPS_CTRL | Set bit position 3 "Dual antenna heading" to 1 (i.e. add 8 to the parameter value). |
:::tip If using this feature, all other configuration should be setup up as normal (e.g. RTK Positioning). :::
Compass calibration is covered in: Compass Configuration. The process is straightforward and will autodetect, set default rotations, calibrate, and prioritise, all connected magnetometers.
Further compass configuration should generally not be required.
:::note All external compasses are given the same priority by default, which is higher than the priority shared by all internal compasses. :::
As stated above, generally no further configuration should be required.
That said, developers can disable internal compasses if desired using the compass parameters. These are prefixed with CAL_MAGx_ (where x=0-3
).
To disable an internal compass:
- Use CAL_MAGn_ROT to determine which compasses are internal. A compass is internal if
CAL_MAGn_ROT==1
. - Then use CAL_MAGx_PRIO to disable the compass. This can also be used to change the relative priority of a compass.
- GPS/RTK-GPS
- Compass
- Driver source code (Compasses)