Browse Source

AP_NavEKF3: writeExtNavData accepts delay

c415-sdk
Randy Mackay 5 years ago
parent
commit
c28fd27b02
  1. 5
      libraries/AP_NavEKF3/AP_NavEKF3.cpp
  2. 3
      libraries/AP_NavEKF3/AP_NavEKF3.h
  3. 5
      libraries/AP_NavEKF3/AP_NavEKF3_Measurements.cpp
  4. 3
      libraries/AP_NavEKF3/AP_NavEKF3_core.h

5
libraries/AP_NavEKF3/AP_NavEKF3.cpp

@ -1324,14 +1324,15 @@ void NavEKF3::writeEulerYawAngle(float yawAngle, float yawAngleErr, uint32_t tim
* posErr : 1-sigma spherical position error (m) * posErr : 1-sigma spherical position error (m)
* angErr : 1-sigma spherical angle error (rad) * angErr : 1-sigma spherical angle error (rad)
* timeStamp_ms : system time the measurement was taken, not the time it was received (mSec) * timeStamp_ms : system time the measurement was taken, not the time it was received (mSec)
* delay_ms : average delay of external nav system measurements relative to inertial measurements
* resetTime_ms : system time of the last position reset request (mSec) * resetTime_ms : system time of the last position reset request (mSec)
* *
*/ */
void NavEKF3::writeExtNavData(const Vector3f &pos, const Quaternion &quat, float posErr, float angErr, uint32_t timeStamp_ms, uint32_t resetTime_ms) void NavEKF3::writeExtNavData(const Vector3f &pos, const Quaternion &quat, float posErr, float angErr, uint32_t timeStamp_ms, uint16_t delay_ms, uint32_t resetTime_ms)
{ {
if (core) { if (core) {
for (uint8_t i=0; i<num_cores; i++) { for (uint8_t i=0; i<num_cores; i++) {
core[i].writeExtNavData(pos, quat, posErr, angErr, timeStamp_ms, resetTime_ms); core[i].writeExtNavData(pos, quat, posErr, angErr, timeStamp_ms, delay_ms, resetTime_ms);
} }
} }
} }

3
libraries/AP_NavEKF3/AP_NavEKF3.h

@ -289,10 +289,11 @@ public:
* posErr : 1-sigma spherical position error (m) * posErr : 1-sigma spherical position error (m)
* angErr : 1-sigma spherical angle error (rad) * angErr : 1-sigma spherical angle error (rad)
* timeStamp_ms : system time the measurement was taken, not the time it was received (mSec) * timeStamp_ms : system time the measurement was taken, not the time it was received (mSec)
* delay_ms : average delay of external nav system measurements relative to inertial measurements
* resetTime_ms : system time of the last position reset request (mSec) * resetTime_ms : system time of the last position reset request (mSec)
* *
*/ */
void writeExtNavData(const Vector3f &pos, const Quaternion &quat, float posErr, float angErr, uint32_t timeStamp_ms, uint32_t resetTime_ms); void writeExtNavData(const Vector3f &pos, const Quaternion &quat, float posErr, float angErr, uint32_t timeStamp_ms, uint16_t delay_ms, uint32_t resetTime_ms);
// called by vehicle code to specify that a takeoff is happening // called by vehicle code to specify that a takeoff is happening
// causes the EKF to compensate for expected barometer errors due to ground effect // causes the EKF to compensate for expected barometer errors due to ground effect

5
libraries/AP_NavEKF3/AP_NavEKF3_Measurements.cpp

@ -940,7 +940,7 @@ void NavEKF3_core::writeDefaultAirSpeed(float airspeed)
* External Navigation Measurements * * External Navigation Measurements *
********************************************************/ ********************************************************/
void NavEKF3_core::writeExtNavData(const Vector3f &pos, const Quaternion &quat, float posErr, float angErr, uint32_t timeStamp_ms, uint32_t resetTime_ms) void NavEKF3_core::writeExtNavData(const Vector3f &pos, const Quaternion &quat, float posErr, float angErr, uint32_t timeStamp_ms, uint16_t delay_ms, uint32_t resetTime_ms)
{ {
// limit update rate to maximum allowed by sensor buffers and fusion process // limit update rate to maximum allowed by sensor buffers and fusion process
// don't try to write to buffer until the filter has been initialised // don't try to write to buffer until the filter has been initialised
@ -967,8 +967,7 @@ void NavEKF3_core::writeExtNavData(const Vector3f &pos, const Quaternion &quat,
} }
// calculate timestamp // calculate timestamp
const uint32_t extnav_delay_ms = 10; timeStamp_ms = timeStamp_ms - delay_ms;
timeStamp_ms = timeStamp_ms - extnav_delay_ms;
// Correct for the average intersampling delay due to the filter update rate // Correct for the average intersampling delay due to the filter update rate
timeStamp_ms -= localFilterTimeStep_ms/2; timeStamp_ms -= localFilterTimeStep_ms/2;
// Prevent time delay exceeding age of oldest IMU data in the buffer // Prevent time delay exceeding age of oldest IMU data in the buffer

3
libraries/AP_NavEKF3/AP_NavEKF3_core.h

@ -295,10 +295,11 @@ public:
* posErr : 1-sigma spherical position error (m) * posErr : 1-sigma spherical position error (m)
* angErr : 1-sigma spherical angle error (rad) * angErr : 1-sigma spherical angle error (rad)
* timeStamp_ms : system time the measurement was taken, not the time it was received (mSec) * timeStamp_ms : system time the measurement was taken, not the time it was received (mSec)
* delay_ms : average delay of external nav system measurements relative to inertial measurements
* resetTime_ms : system time of the last position reset request (mSec) * resetTime_ms : system time of the last position reset request (mSec)
* *
*/ */
void writeExtNavData(const Vector3f &pos, const Quaternion &quat, float posErr, float angErr, uint32_t timeStamp_ms, uint32_t resetTime_ms); void writeExtNavData(const Vector3f &pos, const Quaternion &quat, float posErr, float angErr, uint32_t timeStamp_ms, uint16_t delay_ms, uint32_t resetTime_ms);
// called by vehicle code to specify that a takeoff is happening // called by vehicle code to specify that a takeoff is happening
// causes the EKF to compensate for expected barometer errors due to ground effect // causes the EKF to compensate for expected barometer errors due to ground effect

Loading…
Cancel
Save