small update to types
This commit is contained in:
parent
2d21860d5c
commit
b3304884c6
|
@ -57,7 +57,9 @@ static const Eigen::Vector3d g(0, 0, -9.81);
|
||||||
static const Eigen::Vector3d g_dir(0, 0, -1);
|
static const Eigen::Vector3d g_dir(0, 0, -1);
|
||||||
} // namespace constants
|
} // namespace constants
|
||||||
|
|
||||||
struct PoseVelBiasStateWithLin : private PoseVelBiasState {
|
struct PoseVelBiasStateWithLin {
|
||||||
|
using VecN = PoseVelBiasState::VecN;
|
||||||
|
|
||||||
PoseVelBiasStateWithLin() {
|
PoseVelBiasStateWithLin() {
|
||||||
linearized = false;
|
linearized = false;
|
||||||
delta.setZero();
|
delta.setZero();
|
||||||
|
@ -67,14 +69,14 @@ struct PoseVelBiasStateWithLin : private PoseVelBiasState {
|
||||||
const Eigen::Vector3d& vel_w_i,
|
const Eigen::Vector3d& vel_w_i,
|
||||||
const Eigen::Vector3d& bias_gyro,
|
const Eigen::Vector3d& bias_gyro,
|
||||||
const Eigen::Vector3d& bias_accel, bool linearized)
|
const Eigen::Vector3d& bias_accel, bool linearized)
|
||||||
: PoseVelBiasState(t_ns, T_w_i, vel_w_i, bias_gyro, bias_accel),
|
: linearized(linearized),
|
||||||
linearized(linearized) {
|
state_linearized(t_ns, T_w_i, vel_w_i, bias_gyro, bias_accel) {
|
||||||
delta.setZero();
|
delta.setZero();
|
||||||
state_current = *this;
|
state_current = state_linearized;
|
||||||
}
|
}
|
||||||
|
|
||||||
PoseVelBiasStateWithLin(const PoseVelBiasState& other)
|
PoseVelBiasStateWithLin(const PoseVelBiasState& other)
|
||||||
: PoseVelBiasState(other), linearized(false) {
|
: linearized(false), state_linearized(other) {
|
||||||
delta.setZero();
|
delta.setZero();
|
||||||
state_current = other;
|
state_current = other;
|
||||||
}
|
}
|
||||||
|
@ -88,27 +90,29 @@ struct PoseVelBiasStateWithLin : private PoseVelBiasState {
|
||||||
|
|
||||||
void applyInc(const VecN& inc) {
|
void applyInc(const VecN& inc) {
|
||||||
if (!linearized) {
|
if (!linearized) {
|
||||||
PoseVelBiasState::applyInc(inc);
|
state_linearized.applyInc(inc);
|
||||||
} else {
|
} else {
|
||||||
delta += inc;
|
delta += inc;
|
||||||
state_current = *this;
|
state_current = state_linearized;
|
||||||
state_current.applyInc(delta);
|
state_current.applyInc(delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const PoseVelBiasState& getState() const {
|
inline const PoseVelBiasState& getState() const {
|
||||||
if (!linearized) {
|
if (!linearized) {
|
||||||
return *this;
|
return state_linearized;
|
||||||
} else {
|
} else {
|
||||||
return state_current;
|
return state_current;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const PoseVelBiasState& getStateLin() const { return *this; }
|
inline const PoseVelBiasState& getStateLin() const {
|
||||||
|
return state_linearized;
|
||||||
|
}
|
||||||
|
|
||||||
inline bool isLinearized() const { return linearized; }
|
inline bool isLinearized() const { return linearized; }
|
||||||
inline const VecN& getDelta() const { return delta; }
|
inline const VecN& getDelta() const { return delta; }
|
||||||
inline int64_t getT_ns() const { return t_ns; }
|
inline int64_t getT_ns() const { return state_linearized.t_ns; }
|
||||||
|
|
||||||
friend struct PoseStateWithLin;
|
friend struct PoseStateWithLin;
|
||||||
|
|
||||||
|
@ -117,86 +121,92 @@ struct PoseVelBiasStateWithLin : private PoseVelBiasState {
|
||||||
bool linearized;
|
bool linearized;
|
||||||
VecN delta;
|
VecN delta;
|
||||||
|
|
||||||
PoseVelBiasState state_current;
|
PoseVelBiasState state_linearized, state_current;
|
||||||
|
|
||||||
friend class cereal::access;
|
friend class cereal::access;
|
||||||
|
|
||||||
template <class Archive>
|
template <class Archive>
|
||||||
void serialize(Archive& ar) {
|
void serialize(Archive& ar) {
|
||||||
ar(T_w_i);
|
ar(state_linearized.T_w_i);
|
||||||
ar(vel_w_i);
|
ar(state_linearized.vel_w_i);
|
||||||
ar(bias_gyro);
|
ar(state_linearized.bias_gyro);
|
||||||
ar(bias_accel);
|
ar(state_linearized.bias_accel);
|
||||||
ar(state_current.T_w_i);
|
ar(state_current.T_w_i);
|
||||||
ar(state_current.vel_w_i);
|
ar(state_current.vel_w_i);
|
||||||
ar(state_current.bias_gyro);
|
ar(state_current.bias_gyro);
|
||||||
ar(state_current.bias_accel);
|
ar(state_current.bias_accel);
|
||||||
ar(delta);
|
ar(delta);
|
||||||
ar(linearized);
|
ar(linearized);
|
||||||
ar(t_ns);
|
ar(state_linearized.t_ns);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PoseStateWithLin : private PoseState {
|
struct PoseStateWithLin {
|
||||||
|
using VecN = PoseState::VecN;
|
||||||
|
|
||||||
PoseStateWithLin() {
|
PoseStateWithLin() {
|
||||||
linearized = false;
|
linearized = false;
|
||||||
delta.setZero();
|
delta.setZero();
|
||||||
};
|
};
|
||||||
|
|
||||||
PoseStateWithLin(int64_t t_ns, const Sophus::SE3d& T_w_i)
|
PoseStateWithLin(int64_t t_ns, const Sophus::SE3d& T_w_i)
|
||||||
: PoseState(t_ns, T_w_i), linearized(false) {
|
: linearized(false), pose_linearized(t_ns, T_w_i) {
|
||||||
delta.setZero();
|
delta.setZero();
|
||||||
T_w_i_current = T_w_i;
|
T_w_i_current = T_w_i;
|
||||||
}
|
}
|
||||||
|
|
||||||
PoseStateWithLin(const PoseVelBiasStateWithLin& other)
|
PoseStateWithLin(const PoseVelBiasStateWithLin& other)
|
||||||
: PoseState(other.t_ns, other.T_w_i),
|
: linearized(other.linearized),
|
||||||
linearized(other.linearized),
|
delta(other.delta.head<6>()),
|
||||||
delta(other.delta.head<6>()) {
|
pose_linearized(other.state_linearized.t_ns,
|
||||||
T_w_i_current = T_w_i;
|
other.state_linearized.T_w_i) {
|
||||||
incPose(delta, T_w_i_current);
|
T_w_i_current = pose_linearized.T_w_i;
|
||||||
|
PoseState::incPose(delta, T_w_i_current);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const Sophus::SE3d& getPose() const {
|
inline const Sophus::SE3d& getPose() const {
|
||||||
if (!linearized) {
|
if (!linearized) {
|
||||||
return T_w_i;
|
return pose_linearized.T_w_i;
|
||||||
} else {
|
} else {
|
||||||
return T_w_i_current;
|
return T_w_i_current;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const Sophus::SE3d& getPoseLin() const { return T_w_i; }
|
inline const Sophus::SE3d& getPoseLin() const {
|
||||||
|
return pose_linearized.T_w_i;
|
||||||
|
}
|
||||||
|
|
||||||
inline void applyInc(const VecN& inc) {
|
inline void applyInc(const VecN& inc) {
|
||||||
if (!linearized) {
|
if (!linearized) {
|
||||||
incPose(inc, T_w_i);
|
PoseState::incPose(inc, pose_linearized.T_w_i);
|
||||||
} else {
|
} else {
|
||||||
delta += inc;
|
delta += inc;
|
||||||
T_w_i_current = T_w_i;
|
T_w_i_current = pose_linearized.T_w_i;
|
||||||
incPose(delta, T_w_i_current);
|
PoseState::incPose(delta, T_w_i_current);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool isLinearized() const { return linearized; }
|
inline bool isLinearized() const { return linearized; }
|
||||||
inline const VecN& getDelta() const { return delta; }
|
inline const VecN& getDelta() const { return delta; }
|
||||||
inline int64_t getT_ns() const { return t_ns; }
|
inline int64_t getT_ns() const { return pose_linearized.t_ns; }
|
||||||
|
|
||||||
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
|
||||||
private:
|
private:
|
||||||
bool linearized;
|
bool linearized;
|
||||||
VecN delta;
|
VecN delta;
|
||||||
|
|
||||||
|
PoseState pose_linearized;
|
||||||
Sophus::SE3d T_w_i_current;
|
Sophus::SE3d T_w_i_current;
|
||||||
|
|
||||||
friend class cereal::access;
|
friend class cereal::access;
|
||||||
|
|
||||||
template <class Archive>
|
template <class Archive>
|
||||||
void serialize(Archive& ar) {
|
void serialize(Archive& ar) {
|
||||||
ar(T_w_i);
|
ar(pose_linearized.T_w_i);
|
||||||
ar(T_w_i_current);
|
ar(T_w_i_current);
|
||||||
ar(delta);
|
ar(delta);
|
||||||
ar(linearized);
|
ar(linearized);
|
||||||
ar(t_ns);
|
ar(pose_linearized.t_ns);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue