* 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
6.7 KiB
ARK G5 RTK HEADING GPS
::: info This GPS module is made in the USA and NDAA compliant. :::
ARK G5 RTK HEADING GPS is a DroneCAN quad-band dual antenna RTK GPS that additionally provides vehicle yaw information from GPS.
The module incorporates the Septentrio mosaic-G5 P3H Ultra-compact high-precision GPS/GNSS receiver module with heading capability, magnetometer, barometer, IMU, and buzzer module.
Where to Buy
Order this module from:
- ARK Electronics (US)
Hardware Specifications
- DroneCAN RTK GNSS, Magnetometer, Barometer, IMU, and Buzzer Module
- Dronecan Firmware Updating
- Sensors
- Septentrio mosaic-G5 P3H Ultra-compact high-precision GPS/GNSS receiver module with heading capability
- All-band all constellation GNSS receiver
- All-in-view satellite tracking: multi-constellation, quad-band GNSS module receiver
- Full raw data with positioning measurements and Galileo HAS positioning service compatibility
- Best-in-class RTK cm-level positioning accuracy
- Advanced GNSS+ algorithms
- 20Hz update rate
- ST IIS2MDC Magnetometer
- Bosch BMP390 Barometer
- Invensense ICM-42688-P 6-Axis IMU
- Septentrio mosaic-G5 P3H Ultra-compact high-precision GPS/GNSS receiver module with heading capability
- STM32F412VGH6 MCU
- Safety Button
- Buzzer
- Two CAN Connectors (Pixhawk Connector Standard 4-pin JST GH)
- G5 "UART 2" Connector
- 4-pin JST GH
- TX, RX, PPS, GND
- G5 USB C
- Debug Connector (Pixhawk Connector Standard 6-pin JST SH)
- LED Indicators
- GPS Fix
- RTK Status
- RGB system status
- USA Built
- NDAA Compliant
- Power Requirements
- 5V
- 270mA
- 5V
- Dimensions
- Without Antenna
- 48.0mm x 40.0mm x 15.4mm
- 13.0g
- With Antenna
- 48.0mm x 40.0mm x 51.0mm
- 43.5g
- Without Antenna
- Includes
- CAN Cable (Pixhawk Connector Standard 4-pin)
- Full-Frequency Helical GPS Antenna
Hardware Setup
Wiring
The ARK G5 RTK HEADING GPS is connected to the CAN bus using a Pixhawk connector 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
The Septentrio G5 module firmware can be updated using the Septentrio RxTools application.
Flight Controller Setup
Enabling DroneCAN
In order to use the ARK G5 RTK HEADING GPS, 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 G5 RTK HEADING GPS CAN to the Pixhawk CAN.
Once enabled, the module will be detected on boot.
There is also CAN built-in bus termination via CANNODE_TERM
PX4 Configuration
You need to set necessary DroneCAN parameters and define offsets if the sensor is not centred within the vehicle:
- Enable GPS yaw fusion by setting bit 3 of EKF2_GPS_CTRL to true.
- Enable GPS blending to ensure the heading is always published by setting SENS_GPS_MASK to 7 (all three bits checked).
- 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 G5 RTK HEADING GPS from the vehicle's centre of gravity.
Parameter references
This GPS is using ARK's private driver, the parameters below only exist on the firmware we ship the GPS with. You can set these params either in QGC or using the DroneCAN GUI Tool.
SEP_OFFS_YAW (float)
Heading offset angle for dual antenna GPS setups that support heading estimation. Set this to 0 if the antennas are parallel to the forward-facing direction of the vehicle and the Rover/ANT2 antenna is in front. The offset angle increases clockwise. Set this to 90 if the ANT2 antenna is placed on the right side of the vehicle and the Moving Base/MAIN antenna is on the left side.
- Default: 0
- Min: -360
- Max: 360
- Unit: degree
SEP_OFFS_PITCH (float)
Vertical offsets can be compensated for by adjusting the Pitch offset. Note that this can be interpreted as the "roll" angle in case the antennas are aligned along the perpendicular axis. This occurs in situations where the two antenna ARPs may not be exactly at the same height in the vehicle reference frame. Since pitch is defined as the right-handed rotation about the vehicle Y axis, a situation where the main antenna is mounted lower than the aux antenna (assuming the default antenna setup) will result in a positive pitch.
- Default: 0
- Min: -90
- Max: 90
- Unit: degree
SEP_OUT_RATE (enum)
Configures the output rate for GNSS data messages.
- -1: OnChange (Default)
- 50: 50 ms
- 100: 100 ms
- 200: 200 ms
- 500: 500 ms
LED Meanings
The GPS status lights are located to the right of the connectors:
- Blinking green is GPS fix
- Blinking blue is received corrections and RTK Float
- Solid blue is RTK Fixed
See Also
- ARK G5 RTK HEADING GPS Documentation (ARK Docs)
