mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-22 00:53:33 +08:00
ekf2: use global definition of quaternion error
This commit is contained in:
@@ -258,10 +258,12 @@ TEST_F(EkfFlowTest, yawMotionCorrectionWithAutopilotGyroData)
|
||||
|
||||
// THEN: the flow due to the yaw rotation and the offsets is canceled
|
||||
// and the velocity estimate stays 0
|
||||
// FIXME: the estimate isn't perfect 0 mainly because the mag simulated measurement isn't rotating
|
||||
// and this creates an incorrect Z gyro bias which is used to compensate for the apparent flow
|
||||
const Vector2f estimated_horz_velocity = Vector2f(_ekf->getVelocity());
|
||||
EXPECT_NEAR(estimated_horz_velocity(0), 0.f, 0.01f)
|
||||
EXPECT_NEAR(estimated_horz_velocity(0), 0.f, 0.02f)
|
||||
<< "estimated vel = " << estimated_horz_velocity(0);
|
||||
EXPECT_NEAR(estimated_horz_velocity(1), 0.f, 0.01f)
|
||||
EXPECT_NEAR(estimated_horz_velocity(1), 0.f, 0.02f)
|
||||
<< "estimated vel = " << estimated_horz_velocity(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ public:
|
||||
|
||||
void quaternionVarianceBigEnoughAfterOrientationInitialization(float quat_variance_limit = 0.00001f)
|
||||
{
|
||||
const matrix::Vector3f quat_variance = _ekf->getQuaternionVariance();
|
||||
const matrix::Vector3f quat_variance = _ekf->getRotVarBody();
|
||||
EXPECT_TRUE(quat_variance(0) > quat_variance_limit) << "quat_variance(3): " << quat_variance(0);
|
||||
EXPECT_TRUE(quat_variance(1) > quat_variance_limit) << "quat_variance(1): " << quat_variance(1);
|
||||
EXPECT_TRUE(quat_variance(2) > quat_variance_limit) << "quat_variance(2): " << quat_variance(2);
|
||||
|
||||
@@ -42,9 +42,8 @@ using namespace matrix;
|
||||
Vector3f getRotVarNed(const Quatf &q, const SquareMatrixState &P)
|
||||
{
|
||||
constexpr auto S = State::quat_nominal;
|
||||
matrix::SquareMatrix3f rot_cov_body = P.slice<S.dof, S.dof>(S.idx, S.idx);
|
||||
auto R_to_earth = Dcmf(q);
|
||||
return matrix::SquareMatrix<float, State::quat_nominal.dof>(R_to_earth * rot_cov_body * R_to_earth.T()).diag();
|
||||
matrix::SquareMatrix3f rot_cov_ned = P.slice<S.dof, S.dof>(S.idx, S.idx);
|
||||
return rot_cov_ned.diag();
|
||||
}
|
||||
|
||||
TEST(YawFusionGenerated, positiveVarianceAllOrientations)
|
||||
|
||||
Reference in New Issue
Block a user