Estimation/StrapdownINS/ESKF/inject.mo
Download original .moGitHub source
Documentation: Estimation.StrapdownINS.ESKF.inject
within Estimation.StrapdownINS.ESKF;
function inject "Right-inject a local tangent correction"
input NominalState nominal;
input TangentVector correction;
output NominalState corrected;
protected
Real extendedPose[10];
Real groupCorrection[10];
Real correctedExtendedPose[10];
algorithm
extendedPose := cat(1,
nominal.positionWorldEnu_m,
nominal.velocityWorldEnu_m_s,
nominal.quaternionWorldBody);
groupCorrection := LieGroups.SE23.Quat.exp_map(correction[1:9]);
correctedExtendedPose := LieGroups.SE23.Quat.product(
extendedPose, groupCorrection);
corrected := NominalState(
positionWorldEnu_m=correctedExtendedPose[1:3],
velocityWorldEnu_m_s=correctedExtendedPose[4:6],
quaternionWorldBody=LieGroups.SO3.Quat.normalize(
correctedExtendedPose[7:10]),
gyroscopeBiasBodyFlu_rad_s=
nominal.gyroscopeBiasBodyFlu_rad_s + correction[10:12],
accelerometerBiasBodyFlu_m_s2=
nominal.accelerometerBiasBodyFlu_m_s2 + correction[13:15]);
end inject;