mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-03 14:58:53 +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
142 lines
7.5 KiB
Markdown
142 lines
7.5 KiB
Markdown
# ARK X20 RTK GPS
|
|
|
|
[ARK X20 RTK GPS](https://docs.arkelectron.com/gps/ark-x20-rtk-gps) is an open source [DroneCAN](index.md) [RTK GPS](../gps_compass/rtk_gps.md), [u-blox ZED-X20P all-band high precision GNSS module](https://www.u-blox.com/en/product/zed-x20p-module), magnetometer, barometer, IMU, buzzer, and safety switch module.
|
|
|
|

|
|
|
|
## Where to Buy
|
|
|
|
Order this module from:
|
|
|
|
- [ARK Electronics](https://arkelectron.com/product/ark-x20-rtk-gps/) (US)
|
|
|
|
## Hardware Specifications
|
|
|
|
- [Open Source Schematic and BOM](https://github.com/ARK-Electronics/ARK_RTK_GPS)
|
|
- Sensors
|
|
- Ublox ZED-X20P
|
|
- All-band all constellation GNSS receiver
|
|
- Best position accuracy and availability in different environments
|
|
- RTK, PPP-RTK and PPP algorithms expanding the limits of performance
|
|
- Highest quality GNSS raw data
|
|
- u-blox end-to-end hardened security
|
|
- 25Hz update rate
|
|
- ST IIS2MDC Magnetometer
|
|
- Bosch BMP390 Barometer
|
|
- Invensense ICM-42688-P 6-Axis IMU
|
|
- STM32F412VGH6 MCU
|
|
- Safety Button
|
|
- Buzzer
|
|
- Two Pixhawk Standard CAN Connectors (4 Pin JST GH)
|
|
- X20 “UART 2” Connector
|
|
- 4 Pin JST GH
|
|
- TX, RX, PPS, GND
|
|
- I2C Expansion Connector
|
|
- 4 Pin JST-GH
|
|
- 5.0V, SCL, SDA, GND
|
|
- Pixhawk Standard Debug Connector (6 Pin JST SH)
|
|
- LED Indicators
|
|
- Safety LED
|
|
- GPS Fix
|
|
- RTK Status
|
|
- RGB system status
|
|
- USA Built
|
|
- Power Requirements
|
|
- 5V
|
|
- 144mA Average
|
|
- 157mA Max
|
|
|
|
## Hardware Setup
|
|
|
|
### Wiring
|
|
|
|
The ARK X20 RTK 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 X20 RTK GPS runs the [PX4 cannode firmware](px4_cannode_fw.md). As such, it supports firmware update over the CAN bus and [dynamic node allocation](index.md#node-id-allocation).
|
|
|
|
ARK X20 RTK GPS boards ship with recent firmware pre-installed, but if you want to build and flash the latest firmware yourself, refer to the [cannode firmware build instructions](px4_cannode_fw.md#building-the-firmware).
|
|
|
|
Firmware target: `ark_can-rtk-gps_default`
|
|
Bootloader target: `ark_can-rtk-gps_canbootloader`
|
|
|
|
## Flight Controller Setup
|
|
|
|
### Enabling DroneCAN
|
|
|
|
In order to use the ARK X20 RTK GPS, 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 X20 RTK GPS CAN to the Pixhawk CAN.
|
|
|
|
Once enabled, the module will be detected on boot.
|
|
GPS data should arrive at 10Hz.
|
|
|
|
### PX4 Configuration
|
|
|
|
You need to set necessary [DroneCAN](index.md) 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](../advanced_config/parameter_reference.md#EKF2_GPS_CTRL) to true.
|
|
- Enable GPS blending to ensure the heading is always published by setting [SENS_GPS_MASK](../advanced_config/parameter_reference.md#SENS_GPS_MASK) to 7 (all three bits checked).
|
|
- 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 X20 RTK GPS from the vehicles centre of gravity.
|
|
|
|
### ARK X20 RTK GPS Configuration
|
|
|
|
You may need to [configure the following parameters](../dronecan/index.md#qgc-cannode-parameter-configuration) on the ARK X20 RTK 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. |
|
|
|
|
### Setting Up Rover and Fixed Base
|
|
|
|
Position of the rover is established using RTCM messages from the RTK base module (the base module is connected to QGC, which sends the RTCM information to PX4 via MAVLink).
|
|
|
|
PX4 DroneCAN parameters:
|
|
|
|
- [UAVCAN_PUB_RTCM](../advanced_config/parameter_reference.md#UAVCAN_PUB_RTCM):
|
|
- Makes PX4 publish RTCM messages ([RTCMStream](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#rtcmstream)) to the bus (which it gets from the RTK base module via QGC).
|
|
|
|
Rover module parameters (also [set using QGC](../dronecan/index.md#qgc-cannode-parameter-configuration)):
|
|
|
|
- [CANNODE_SUB_RTCM](../advanced_config/parameter_reference.md#CANNODE_SUB_RTCM) tells the rover that it should subscribe to [RTCMStream](https://dronecan.github.io/Specification/7._List_of_standard_data_types/#rtcmstream) RTCM messages on the bus (from the moving base).
|
|
|
|
::: info
|
|
Use [UAVCAN_PUB_MBD](../advanced_config/parameter_reference.md#UAVCAN_PUB_MBD) and [CANNODE_SUB_MBD](../advanced_config/parameter_reference.md#CANNODE_SUB_MBD) instead if you want to implement moving base (see below) at the same time.
|
|
:::
|
|
|
|
For more information see [Rover and Fixed Base](../dronecan/index.md#rover-and-fixed-base) in the DroneCAN guide.
|
|
|
|
## 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
|
|
|
|
- The CAN status lights are located top the left of the connectors
|
|
- Slow blinking green is waiting for CAN connection
|
|
- Fast blinking green is normal operation
|
|
- Slow blinking green and blue is CAN enumeration
|
|
- Fast blinking blue and red is firmware update in progress
|
|
- Blinking red is error
|
|
- 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 X20 RTK GPS has `ark_can-rtk-gps_canbootloader` installed prior to flashing `ark_can-rtk-gps_default`
|
|
- Remove binaries from the root and ufw directories of the SD card and try to build and flash again
|
|
|
|
## See Also
|
|
|
|
- [ARK X20 RTK GPS Documentation](https://docs.arkelectron.com/gps/ark-x20-rtk-gps) (ARK Docs)
|