mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-07-26 16:28:06 +08:00
* sensors: move GPS antenna offsets to per-receiver parameters
Move antenna position configuration from the single EKF2_GPS_POS_X/Y/Z
parameter set into per-receiver SENS_GPS{0,1}_OFF{X,Y,Z} parameters in
the sensors module. Each offset slot is matched to a physical receiver
by device ID (SENS_GPS{0,1}_ID), falling back to uORB instance index
when no IDs are configured.
The antenna offset is now carried through the SensorGps uORB message
and blended alongside other GPS states when multi-receiver blending is
active, so EKF2 receives the correct lever arm for whichever receiver
(or weighted combination) is selected.
- Add antenna_offset_{x,y,z} fields to SensorGps.msg
- Remove EKF2_GPS_POS_X/Y/Z params; EKF2 reads offset from gnssSample
- Add SENS_GPS{0,1}_ID and SENS_GPS{0,1}_OFF{X,Y,Z} params (module.yaml)
- Blend antenna offsets in GpsBlending (weighted average)
- Add unit tests for single, blended, and failover antenna offset cases
- Migrate params.c to module.yaml for the vehicle_gps_position module
* sensors: gps_blending: add asymmetric weight and fallthrough offset tests
Add two additional antenna offset test cases:
- dualReceiverAsymmetricWeightAntennaOffset: verify that unequal eph
values produce correctly skewed blend weights (0.8/0.2) and that the
output antenna offset reflects the weighted average
- blendingFallthroughAntennaOffset: verify that when blending is enabled
but can_do_blending evaluates false (eph=0), the non-blending path
correctly assigns the selected receiver's antenna offset
* feat(param_translation): translate EKF2_GPS_POS_ to SENS_GPS0_OFF_
* fix(msgs): proper formatting
* chore(msg): 0 if invalid/unknown
* fix(ROMFS): migrate EKF2_GPS_POS_ params
* fix(docs): migrate EKF2_GPS_POS_ params
* fix(blending): unsigned param
* Update msg/SensorGps.msg
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix(sensors/gps): remove 'values:' tag in module.yaml
* fix(sensors/gps): unsigned instance index
* fix(blending): restore const on gps_blend_states()
Move antenna offset blending into blend_gps_data() where the
weights are computed, keeping gps_blend_states() const.
* fix(sensors/gps): fix msg annotation and restore SENS_GPS_PRIME values
Remove incorrect @invalid NaN annotation from antenna offset fields
(0.0 default is correct, not a sentinel). Restore values tag for
SENS_GPS_PRIME so QGC shows a dropdown.
* fix(gps_blending): fix pre-existing bug to clear _gps_updated flags
The loop iterates over i but always clears gps_select_index. The intent is to clear
all updated flags, but only the selected one gets cleared (N times)
* test(gps_blending): add stale update flag regression test
98 lines
8.1 KiB
Markdown
98 lines
8.1 KiB
Markdown
# Holybro DroneCAN M8N GPS
|
||
|
||
The Holybro DroneCAN GPS has an UBLOX M8N module, BMM150 compass, tri-colored LED indicator.
|
||
|
||
The GPS module uses the [DroneCAN](index.md) protocol for communication.
|
||
DroneCAN connections are more resistant to electromagnetic interference compared to serial connection, making it more reliable.
|
||
In addition, using DroneCAN means that the GPS and compass do not occupy any flight controller serial ports (different/additional CAN devices can be connected to the same CAN bus via a CAN splitter board).
|
||
|
||
<img src="../../assets/hardware/gps/hb_dronecan_m8n/hb_dronecan_m8n_gps.jpg" width="400px" title="Hero diagram for the GPS module" />
|
||
|
||
## Where to Buy
|
||
|
||
Order this module from:
|
||
|
||
- [Holybro](https://holybro.com/products/dronecan-m8n-gps)
|
||
|
||
## Hardware Specifications
|
||
|
||
| | DroneCAN M8N |
|
||
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| GNSS Receiver | Ublox NEO M8N |
|
||
| Number of Concurrent GNSS | 2 (Default GPS + GLONASS) |
|
||
| Processor | STM32G4 (170MHz, 512K FLASH) |
|
||
| Compass | BMM150 |
|
||
| Frequency Band | <p>GPS: L1C/A<br>GLONASS: L10F<br>Beidou: B1I<br>Galileo: E1B/C</p> |
|
||
| GNSS Augmentation System | SBAS: WAAS, EGNOS, MSAS, QZSS |
|
||
| Navigation Update | 5Hz Default(10Hz MAX) |
|
||
| Navigation sensitivity | –167 dBm |
|
||
| Cold starts | \~ 26s |
|
||
| Accuracy | 2.5m |
|
||
| Speed Accuracy | 0.05 m/s |
|
||
| Max # of Satellites | 22+ |
|
||
| Default CAN BUS data rate | 1MHz |
|
||
| Communication Protocol | DroneCAN @ 1 Mbit/s |
|
||
| Supports Autopilot FW | PX4, Ardupilot |
|
||
| Port Type | GHR-04V-S |
|
||
| Antenna | 25 x 25 x 4 mm ceramic patch antenna |
|
||
| Voltage | 4.7-5.2V |
|
||
| Power consumption | Less than 200mA @ 5V |
|
||
| Temperature | -40\~80C |
|
||
| Size | <p>Diameter: 54mm<br>Thickness: 14.5mm</p> |
|
||
| Weight | 36g |
|
||
| Cable Length | 26cm |
|
||
| Other | <ul><li>LNA MAX2659ELT+ RF Amplifier</li><li>Rechargeable Farah capacitance</li><li>Low noise 3.3V regulator</li><li>26cm cable included</li></ul> |
|
||
|
||
## Hardware Setup
|
||
|
||
### Mounting
|
||
|
||
The recommended mounting orientation is with the arrow on the GPS pointing towards the **front of vehicle**.
|
||
|
||
The sensor can be mounted anywhere on the frame, but you will need to specify its position, relative to vehicle centre of gravity, during [PX4 configuration](#px4-configuration).
|
||
|
||
### Wiring
|
||
|
||
The Holybro DroneCAN GPS is connected to the CAN bus using a Pixhawk standard 4 pin JST GH cable.
|
||
For more information, refer to the [CAN Wiring](../can/index.md#wiring) instructions.
|
||
|
||
### Pinout
|
||
|
||

|
||
|
||
### Dimensions
|
||
|
||

|
||
|
||
## PX4 Configuration
|
||
|
||
You need to set necessary [DroneCAN](index.md) parameters and define offsets if the sensor is not centred within the vehicle.
|
||
The required settings are outlined below.
|
||
|
||
::: info
|
||
The GPS will not boot if there is no SD card in the flight controller when powered on.
|
||
:::
|
||
|
||
### Enable DroneCAN
|
||
|
||
In order to use the ARK GPS board, connect it to the Pixhawk CAN bus and enable the DroneCAN driver by setting parameter [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) to `2` for dynamic node allocation (or `3` if using [DroneCAN ESCs](../dronecan/escs.md)).
|
||
|
||
The steps are:
|
||
|
||
- In _QGroundControl_ set the parameter [UAVCAN_ENABLE](../advanced_config/parameter_reference.md#UAVCAN_ENABLE) to `2` or `3` and reboot (see [Finding/Updating Parameters](../advanced_config/parameters.md)).
|
||
- Connect GPS CAN to the Pixhawk CAN.
|
||
|
||
Once enabled, the module will be detected on boot.
|
||
GPS data should arrive at 5Hz.
|
||
|
||
DroneCAN configuration in PX4 is explained in more detail in [DroneCAN > Enabling DroneCAN](../dronecan/index.md#enabling-dronecan).
|
||
|
||
### Sensor Position Configuration
|
||
|
||
If the sensor is not centred within the vehicle you will also need to define sensor offsets:
|
||
|
||
- Enable GPS yaw fusion by setting bit 3 of [EKF2_GPS_CTRL](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true.
|
||
- Enable [UAVCAN_SUB_GPS](../advanced_config/parameter_reference.md#UAVCAN_SUB_GPS), [UAVCAN_SUB_MAG](../advanced_config/parameter_reference.md#UAVCAN_SUB_MAG), and [UAVCAN_SUB_BARO](../advanced_config/parameter_reference.md#UAVCAN_SUB_BARO).
|
||
- Set [CANNODE_TERM](../advanced_config/parameter_reference.md#CANNODE_TERM) to `1` if this is that last node on the CAN bus.
|
||
- The parameters [SENS_GPS0_OFFX](../advanced_config/parameter_reference.md#SENS_GPS0_OFFX), [SENS_GPS0_OFFY](../advanced_config/parameter_reference.md#SENS_GPS0_OFFY) and [SENS_GPS0_OFFZ](../advanced_config/parameter_reference.md#SENS_GPS0_OFFZ) can be set to account for the offset of the ARK GPS from the vehicles centre of gravity.
|