add PoseVelocityBias struct to be returned by Predict function
parent
4ee5674b2e
commit
b6ab7a4dfa
|
@ -29,6 +29,21 @@
|
||||||
|
|
||||||
namespace gtsam {
|
namespace gtsam {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Struct to hold all state variables of CombinedImuFactor
|
||||||
|
* returned by predict function
|
||||||
|
*/
|
||||||
|
struct PoseVelocityBias {
|
||||||
|
Pose3 pose;
|
||||||
|
Vector3 velocity;
|
||||||
|
imuBias::ConstantBias bias;
|
||||||
|
|
||||||
|
PoseVelocityBias(const Pose3& _pose, const Vector3& _velocity,
|
||||||
|
const imuBias::ConstantBias _bias) :
|
||||||
|
pose(_pose), velocity(_velocity), bias(_bias) {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @addtogroup SLAM
|
* @addtogroup SLAM
|
||||||
|
@ -107,7 +122,8 @@ namespace gtsam {
|
||||||
biasHat_(imuBias::ConstantBias()), measurementCovariance_(21,21), deltaPij_(Vector3::Zero()), deltaVij_(Vector3::Zero()), deltaTij_(0.0),
|
biasHat_(imuBias::ConstantBias()), measurementCovariance_(21,21), deltaPij_(Vector3::Zero()), deltaVij_(Vector3::Zero()), deltaTij_(0.0),
|
||||||
delPdelBiasAcc(Matrix3::Zero()), delPdelBiasOmega(Matrix3::Zero()),
|
delPdelBiasAcc(Matrix3::Zero()), delPdelBiasOmega(Matrix3::Zero()),
|
||||||
delVdelBiasAcc(Matrix3::Zero()), delVdelBiasOmega(Matrix3::Zero()),
|
delVdelBiasAcc(Matrix3::Zero()), delVdelBiasOmega(Matrix3::Zero()),
|
||||||
delRdelBiasOmega(Matrix3::Zero()), PreintMeasCov(Matrix::Zero(15,15))
|
delRdelBiasOmega(Matrix3::Zero()), PreintMeasCov(Matrix::Zero(15,15)),
|
||||||
|
use2ndOrderIntegration_(false) ///< Controls the order of integration
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -642,8 +658,8 @@ namespace gtsam {
|
||||||
|
|
||||||
|
|
||||||
/** predicted states from IMU */
|
/** predicted states from IMU */
|
||||||
static void Predict(const Pose3& pose_i, const Vector3& vel_i, Pose3& pose_j, Vector3& vel_j,
|
static PoseVelocityBias Predict(const Pose3& pose_i, const Vector3& vel_i,
|
||||||
const imuBias::ConstantBias& bias_i, imuBias::ConstantBias& bias_j,
|
const imuBias::ConstantBias& bias_i,
|
||||||
const CombinedPreintegratedMeasurements& preintegratedMeasurements,
|
const CombinedPreintegratedMeasurements& preintegratedMeasurements,
|
||||||
const Vector3& gravity, const Vector3& omegaCoriolis, boost::optional<const Pose3&> body_P_sensor = boost::none,
|
const Vector3& gravity, const Vector3& omegaCoriolis, boost::optional<const Pose3&> body_P_sensor = boost::none,
|
||||||
const bool use2ndOrderCoriolis = false)
|
const bool use2ndOrderCoriolis = false)
|
||||||
|
@ -665,7 +681,7 @@ namespace gtsam {
|
||||||
- skewSymmetric(omegaCoriolis) * vel_i * deltaTij*deltaTij // Coriolis term - we got rid of the 2 wrt ins paper
|
- skewSymmetric(omegaCoriolis) * vel_i * deltaTij*deltaTij // Coriolis term - we got rid of the 2 wrt ins paper
|
||||||
+ 0.5 * gravity * deltaTij*deltaTij;
|
+ 0.5 * gravity * deltaTij*deltaTij;
|
||||||
|
|
||||||
vel_j = Vector3(vel_i + Rot_i.matrix() * (preintegratedMeasurements.deltaVij_
|
Vector3 vel_j = Vector3(vel_i + Rot_i.matrix() * (preintegratedMeasurements.deltaVij_
|
||||||
+ preintegratedMeasurements.delVdelBiasAcc * biasAccIncr
|
+ preintegratedMeasurements.delVdelBiasAcc * biasAccIncr
|
||||||
+ preintegratedMeasurements.delVdelBiasOmega * biasOmegaIncr)
|
+ preintegratedMeasurements.delVdelBiasOmega * biasOmegaIncr)
|
||||||
- 2 * skewSymmetric(omegaCoriolis) * vel_i * deltaTij // Coriolis term
|
- 2 * skewSymmetric(omegaCoriolis) * vel_i * deltaTij // Coriolis term
|
||||||
|
@ -685,64 +701,9 @@ namespace gtsam {
|
||||||
Rot3::Expmap( theta_biascorrected_corioliscorrected );
|
Rot3::Expmap( theta_biascorrected_corioliscorrected );
|
||||||
const Rot3 Rot_j = Rot_i.compose( deltaRij_biascorrected_corioliscorrected );
|
const Rot3 Rot_j = Rot_i.compose( deltaRij_biascorrected_corioliscorrected );
|
||||||
|
|
||||||
pose_j = Pose3( Rot_j, Point3(pos_j) );
|
Pose3 pose_j = Pose3( Rot_j, Point3(pos_j) );
|
||||||
|
|
||||||
bias_j = bias_i;
|
return PoseVelocityBias(pose_j, vel_j, bias_i);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static Pose3 predictPose(const Pose3& pose_i, const LieVector& vel_i,
|
|
||||||
const imuBias::ConstantBias& bias_i,
|
|
||||||
const CombinedPreintegratedMeasurements& preintegratedMeasurements,
|
|
||||||
const Vector3& gravity, const Vector3& omegaCoriolis, boost::optional<const Pose3&> body_P_sensor = boost::none,
|
|
||||||
const bool use2ndOrderCoriolis = false) {
|
|
||||||
Pose3 pose_j = Pose3();
|
|
||||||
LieVector vel_j = LieVector();
|
|
||||||
imuBias::ConstantBias bias_j = imuBias::ConstantBias();
|
|
||||||
|
|
||||||
predict(pose_i, vel_i, pose_j, vel_j,
|
|
||||||
bias_i, bias_j,
|
|
||||||
preintegratedMeasurements,
|
|
||||||
gravity, omegaCoriolis, body_P_sensor,
|
|
||||||
use2ndOrderCoriolis);
|
|
||||||
|
|
||||||
return pose_j;
|
|
||||||
}
|
|
||||||
|
|
||||||
static LieVector predictVelocity(const Pose3& pose_i, const LieVector& vel_i,
|
|
||||||
const imuBias::ConstantBias& bias_i,
|
|
||||||
const CombinedPreintegratedMeasurements& preintegratedMeasurements,
|
|
||||||
const Vector3& gravity, const Vector3& omegaCoriolis, boost::optional<const Pose3&> body_P_sensor = boost::none,
|
|
||||||
const bool use2ndOrderCoriolis = false) {
|
|
||||||
Pose3 pose_j = Pose3();
|
|
||||||
LieVector vel_j = LieVector();
|
|
||||||
imuBias::ConstantBias bias_j = imuBias::ConstantBias();
|
|
||||||
|
|
||||||
predict(pose_i, vel_i, pose_j, vel_j,
|
|
||||||
bias_i, bias_j,
|
|
||||||
preintegratedMeasurements,
|
|
||||||
gravity, omegaCoriolis, body_P_sensor,
|
|
||||||
use2ndOrderCoriolis);
|
|
||||||
|
|
||||||
return vel_j;
|
|
||||||
}
|
|
||||||
|
|
||||||
static imuBias::ConstantBias predictImuBias(const Pose3& pose_i, const LieVector& vel_i,
|
|
||||||
const imuBias::ConstantBias& bias_i,
|
|
||||||
const CombinedPreintegratedMeasurements& preintegratedMeasurements,
|
|
||||||
const Vector3& gravity, const Vector3& omegaCoriolis, boost::optional<const Pose3&> body_P_sensor = boost::none,
|
|
||||||
const bool use2ndOrderCoriolis = false) {
|
|
||||||
Pose3 pose_j = Pose3();
|
|
||||||
LieVector vel_j = LieVector();
|
|
||||||
imuBias::ConstantBias bias_j = imuBias::ConstantBias();
|
|
||||||
|
|
||||||
predict(pose_i, vel_i, pose_j, vel_j,
|
|
||||||
bias_i, bias_j,
|
|
||||||
preintegratedMeasurements,
|
|
||||||
gravity, omegaCoriolis, body_P_sensor,
|
|
||||||
use2ndOrderCoriolis);
|
|
||||||
|
|
||||||
return bias_j;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue