* 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
5.7 KiB
ARK GPS (DroneCAN)
ARK GPS is an open source DroneCAN GNSS/GPS, magnetometer, IMU, barometer, buzzer, and safety switch module.
Where to Buy
Order this module from:
- ARK Electronics (US)
Hardware Specifications
- Open Source Schematic and BOM
- 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
- Ublox M9N GPS
- 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 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.
Firmware Setup
ARK GPS runs the PX4 DroneCAN Firmware. As such, it supports firmware update over the CAN bus and dynamic node 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.
- Firmware target:
ark_can-gps_default - Bootloader target:
ark_can-gps_canbootloader
PX4 Configuration
You need to set necessary DroneCAN 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 to 2 for dynamic node allocation (or 3 if using DroneCAN ESCs).
The steps are:
- In QGroundControl set the parameter UAVCAN_ENABLE to
2or3and reboot (see Finding/Updating Parameters). - 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.
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 to true.
- Enable UAVCAN_SUB_GPS, UAVCAN_SUB_MAG, and UAVCAN_SUB_BARO.
- The parameters SENS_GPS0_OFFX, SENS_GPS0_OFFY and 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 on the ARK GPS itself:
| Parameter | Description |
|---|---|
| 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. |
| 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_canbootloaderinstalled prior to flashingark_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 (ARK Docs)
