mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +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
118 lines
5.7 KiB
Markdown
118 lines
5.7 KiB
Markdown
# ARK GPS (DroneCAN)
|
|
|
|
ARK GPS is an open source [DroneCAN](index.md) [GNSS/GPS](../gps_compass/index.md), magnetometer, IMU, barometer, buzzer, and safety switch module.
|
|
|
|

|
|
|
|
## Where to Buy
|
|
|
|
Order this module from:
|
|
|
|
- [ARK Electronics](https://arkelectron.com/product/ark-gps/) (US)
|
|
|
|
## Hardware Specifications
|
|
|
|
- [Open Source Schematic and BOM](https://github.com/ARK-Electronics/ARK_GPS)
|
|
- Sensors
|
|
- Ublox M9N GPS
|
|
- Ultra-robust meter-level GNSS positioning
|
|
- Maximum position availability with concurrent reception of 4 GNSS
|
|
- Advanced spoofing and jamming detection
|
|
- Excellent RF interference mitigation
|
|
- Bosch BMM150 Magnetometer
|
|
- Bosch BMP388 Barometer
|
|
- Invensense ICM-42688-P 6-Axis IMU
|
|
- STM32F412CEU6 MCU
|
|
- Safety Button
|
|
- Buzzer
|
|
- Two Pixhawk Standard CAN Connectors (4 Pin JST GH)
|
|
- Pixhawk Standard Debug Connector (6 Pin JST SH)
|
|
- Small Form Factor
|
|
- 5cm x 5cm x 1cm
|
|
- LED Indicators
|
|
- Safety LED
|
|
- GPS Fix
|
|
- RGB System Status
|
|
- USA Built
|
|
- Power Requirements
|
|
- 5V
|
|
- 110mA Average
|
|
- 117mA Max
|
|
|
|
## Hardware Setup
|
|
|
|
### Wiring
|
|
|
|
The ARK 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.
|
|
|
|
### Mounting
|
|
|
|
The recommended mounting orientation is with the connectors on the board pointing towards the **back 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).
|
|
|
|
## Firmware Setup
|
|
|
|
ARK GPS runs the [PX4 DroneCAN Firmware](px4_cannode_fw.md).
|
|
As such, it supports firmware update over the CAN bus and [dynamic node allocation](../dronecan/index.md#node-id-allocation).
|
|
|
|
ARK GPS boards ship with recent firmware pre-installed, but if you want to build and flash the latest firmware yourself see [PX4 DroneCAN Firmware > Building the Firmware](px4_cannode_fw.md#building-the-firmware).
|
|
|
|
- Firmware target: `ark_can-gps_default`
|
|
- Bootloader target: `ark_can-gps_canbootloader`
|
|
|
|
## 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 ARK 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 ARK GPS CAN to the Pixhawk CAN.
|
|
|
|
Once enabled, the module will be detected on boot.
|
|
GPS data should arrive at 10Hz.
|
|
|
|
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).
|
|
- 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.
|
|
|
|
### ARK GPS Configuration
|
|
|
|
You may need to [configure the following parameters](../dronecan/index.md#qgc-cannode-parameter-configuration) on the ARK GPS itself:
|
|
|
|
| Parameter | Description |
|
|
| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| <a id="CANNODE_NODE_ID"></a>[CANNODE_NODE_ID](../advanced_config/parameter_reference.md#CANNODE_NODE_ID) | CAN node ID (0 for dynamic allocation). If set to 0 (default), dynamic node allocation is used. Set to 1-127 to use a static node ID. |
|
|
| <a id="CANNODE_TERM"></a>[CANNODE_TERM](../advanced_config/parameter_reference.md#CANNODE_TERM) | CAN built-in bus termination. Set to `1` if this is the last node on the CAN bus. |
|
|
|
|
## LED Meanings
|
|
|
|
You will see green, blue and red LEDs on the ARK GPS when it is being flashed, and a blinking green LED if it is running properly.
|
|
|
|
If you see a red LED there is an error and you should check the following:
|
|
|
|
- Make sure the flight controller has an SD card installed.
|
|
- Make sure the ARK GPS has `ark_can-gps_canbootloader` installed prior to flashing `ark_can-gps_default`.
|
|
- Remove binaries from the root and ufw directories of the SD card and try to build and flash again.
|
|
|
|
## See Also
|
|
|
|
- [ARK GPS](https://arkelectron.gitbook.io/ark-documentation/sensors/ark-gps) (ARK Docs)
|