mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-02-03 14:38:44 -04:00
AP_NavEKF2: Add accessor function for body frame airspeed vector
This commit is contained in:
parent
c9ab4b18b0
commit
b372d62f35
@ -943,6 +943,18 @@ void NavEKF2::getVelNED(int8_t instance, Vector3f &vel) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// return estimate of true airspeed vector in body frame in m/s for the specified instance
|
||||||
|
// An out of range instance (eg -1) returns data for the primary instance
|
||||||
|
// returns false if estimate is unavailable
|
||||||
|
bool NavEKF2::getAirSpdVec(int8_t instance, Vector3f &vel) const
|
||||||
|
{
|
||||||
|
if (instance < 0 || instance >= num_cores) instance = primary;
|
||||||
|
if (core) {
|
||||||
|
return core[instance].getAirSpdVec(vel);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Return the rate of change of vertical position in the down direction (dPosD/dt) in m/s
|
// Return the rate of change of vertical position in the down direction (dPosD/dt) in m/s
|
||||||
float NavEKF2::getPosDownDerivative(int8_t instance) const
|
float NavEKF2::getPosDownDerivative(int8_t instance) const
|
||||||
{
|
{
|
||||||
|
@ -83,6 +83,11 @@ public:
|
|||||||
// An out of range instance (eg -1) returns data for the primary instance
|
// An out of range instance (eg -1) returns data for the primary instance
|
||||||
void getVelNED(int8_t instance, Vector3f &vel) const;
|
void getVelNED(int8_t instance, Vector3f &vel) const;
|
||||||
|
|
||||||
|
// return estimate of true airspeed vector in body frame in m/s for the specified instance
|
||||||
|
// An out of range instance (eg -1) returns data for the primary instance
|
||||||
|
// returns false if estimate is unavailable
|
||||||
|
bool getAirSpdVec(int8_t instance, Vector3f &vel) const;
|
||||||
|
|
||||||
// Return the rate of change of vertical position in the down direction (dPosD/dt) in m/s for the specified instance
|
// Return the rate of change of vertical position in the down direction (dPosD/dt) in m/s for the specified instance
|
||||||
// An out of range instance (eg -1) returns data for the primary instance
|
// An out of range instance (eg -1) returns data for the primary instance
|
||||||
// This can be different to the z component of the EKF velocity state because it will fluctuate with height errors and corrections in the EKF
|
// This can be different to the z component of the EKF velocity state because it will fluctuate with height errors and corrections in the EKF
|
||||||
|
@ -173,6 +173,22 @@ void NavEKF2_core::getVelNED(Vector3f &vel) const
|
|||||||
vel = outputDataNew.velocity + velOffsetNED;
|
vel = outputDataNew.velocity + velOffsetNED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// return estimate of true airspeed vector in body frame in m/s
|
||||||
|
// returns false if estimate is unavailable
|
||||||
|
bool NavEKF2_core::getAirSpdVec(Vector3f &vel) const
|
||||||
|
{
|
||||||
|
if (inhibitWindStates || PV_AidingMode == AID_NONE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
vel = outputDataNew.velocity + velOffsetNED;
|
||||||
|
vel.x -= stateStruct.wind_vel.x;
|
||||||
|
vel.y -= stateStruct.wind_vel.y;
|
||||||
|
Matrix3f Tnb; // rotation from nav to body frame
|
||||||
|
outputDataNew.quat.inverse().rotation_matrix(Tnb);
|
||||||
|
vel = Tnb * vel;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Return the rate of change of vertical position in the down direction (dPosD/dt) of the body frame origin in m/s
|
// Return the rate of change of vertical position in the down direction (dPosD/dt) of the body frame origin in m/s
|
||||||
float NavEKF2_core::getPosDownDerivative(void) const
|
float NavEKF2_core::getPosDownDerivative(void) const
|
||||||
{
|
{
|
||||||
|
@ -667,7 +667,7 @@ void NavEKF2_core::UpdateStrapdownEquationsNED()
|
|||||||
delVelNav = prevTnb.mul_transpose(delVelCorrected);
|
delVelNav = prevTnb.mul_transpose(delVelCorrected);
|
||||||
delVelNav.z += GRAVITY_MSS*imuDataDelayed.delVelDT;
|
delVelNav.z += GRAVITY_MSS*imuDataDelayed.delVelDT;
|
||||||
|
|
||||||
// calculate the body to nav cosine matrix
|
// calculate the nav to body cosine matrix
|
||||||
stateStruct.quat.inverse().rotation_matrix(prevTnb);
|
stateStruct.quat.inverse().rotation_matrix(prevTnb);
|
||||||
|
|
||||||
// calculate the rate of change of velocity (used for launch detect and other functions)
|
// calculate the rate of change of velocity (used for launch detect and other functions)
|
||||||
|
@ -102,6 +102,10 @@ public:
|
|||||||
// return NED velocity in m/s
|
// return NED velocity in m/s
|
||||||
void getVelNED(Vector3f &vel) const;
|
void getVelNED(Vector3f &vel) const;
|
||||||
|
|
||||||
|
// return estimate of true airspeed vector in body frame in m/s
|
||||||
|
// returns false if estimate is unavailable
|
||||||
|
bool getAirSpdVec(Vector3f &vel) const;
|
||||||
|
|
||||||
// Return the rate of change of vertical position in the down direction (dPosD/dt) in m/s
|
// Return the rate of change of vertical position in the down direction (dPosD/dt) in m/s
|
||||||
// This can be different to the z component of the EKF velocity state because it will fluctuate with height errors and corrections in the EKF
|
// This can be different to the z component of the EKF velocity state because it will fluctuate with height errors and corrections in the EKF
|
||||||
// but will always be kinematically consistent with the z component of the EKF position state
|
// but will always be kinematically consistent with the z component of the EKF position state
|
||||||
|
Loading…
Reference in New Issue
Block a user