Hi,
I’m using an ultra-wideband system for which I currently have a tag that does not possess the processing power to actually determine its position. This tag uses TWR so it does have the distances to the anchors which it can report to Ardupilot.
Currently, the beacon library requires not only the distances, but also a position and position-error to be reported to NavEKF3_core::readRngBcnData().
However, looking at the nav_ekf3core Ardupilot also seems to have it’s own 3-state alignment filter which it actually uses to calculate the position which is fed into the EKF.
But, this doesn’t ever when only distances to beacons are received, due to only updating rngBcnLast3DmeasTime_ms
when a position is received.
// Check if the beacon system has returned a 3D fix
if (beacon->get_vehicle_position_ned(beaconVehiclePosNED, beaconVehiclePosErr)) {
rngBcnLast3DmeasTime_ms = imuSampleTime_ms;
}
There are also a couple of other things that never happen when no positions are sent, such as never setting rngBcnGoodToAlign to true and setting the EKF origin and magnetic field declination (both also in NavEKF3_core::readRngBcnData()
).
Am I correct in thinking that with some adjustments the need for externally calculated positions could be eliminated since the 3-state filter already calculates the position?