29 #ifndef HECTOR_POSE_ESTIMATION_SYSTEM_MODEL_H 30 #define HECTOR_POSE_ESTIMATION_SYSTEM_MODEL_H 60 template <
class Derived,
int _VectorDimension = Derived::VectorDimension,
int _CovarianceDimension = _VectorDimension>
62 enum { VectorDimension = _VectorDimension };
63 enum { CovarianceDimension = _CovarianceDimension };
80 typedef Block<SystemMatrix,VectorDimension,SystemMatrix::ColsAtCompileTime>
SystemMatrixBlock;
88 #define SYSTEM_MODEL_TRAIT(Derived, _VectorDimension, _CovarianceDimension) \ 89 typedef traits::SystemModel<Derived, _VectorDimension, _CovarianceDimension> trait; \ 91 enum { VectorDimension = trait::VectorDimension }; \ 92 enum { CovarianceDimension = trait::CovarianceDimension }; \ 94 typedef typename trait::StateVector StateVector; \ 95 typedef typename trait::NoiseVariance NoiseVariance; \ 96 typedef typename trait::SystemMatrix SystemMatrix; \ 98 enum { InputDimension = trait::InputDimension }; \ 99 typedef typename trait::InputType InputType; \ 100 typedef typename trait::InputVector InputVector; \ 101 typedef typename trait::InputMatrix InputMatrix; \ 103 typedef typename trait::SubState SubState; \ 104 typedef typename trait::Vector Vector; \ 106 typedef typename trait::VectorSegment VectorSegment; \ 107 typedef typename trait::CovarianceBlock CovarianceBlock; \ 108 typedef typename trait::CrossVarianceBlock CrossVarianceBlock; \ 109 typedef typename trait::SystemMatrixBlock SystemMatrixBlock; \ 111 typedef typename trait::ConstVectorSegment ConstVectorSegment; \ 112 typedef typename trait::ConstCovarianceBlock ConstCovarianceBlock; \ 113 typedef typename trait::ConstCrossVarianceBlock ConstCrossVarianceBlock; \ 114 typedef typename trait::ConstSystemMatrixBlock ConstSystemMatrixBlock; \ 118 template <
class Derived,
int _VectorDimension = Dynamic,
int _CovarianceDimension = _VectorDimension>
128 Derived *
derived() {
return static_cast<Derived *
>(
this); }
129 const Derived *
derived()
const {
return static_cast<const Derived *
>(
this); }
131 virtual void getExpectedDiff(StateVector& x_diff,
const State& state,
double dt);
132 virtual void getStateJacobian(SystemMatrix& A,
const State& state,
double dt,
bool init =
true);
133 virtual void getInputJacobian(InputMatrix& B,
const State& state,
double dt,
bool init =
true);
134 virtual void getSystemNoise(NoiseVariance& Q,
const State& state,
double dt,
bool init =
true);
137 template <
class Derived,
int _VectorDimension = Dynamic,
int _CovarianceDimension = _VectorDimension>
147 virtual void getDerivative(StateVector& x_dot,
const State& state);
148 virtual void getStateJacobian(SystemMatrix& A,
const State& state,
bool init =
true);
149 virtual void getInputJacobian(InputMatrix& B,
const State& state,
bool init =
true);
150 virtual void getSystemNoise(NoiseVariance& Q,
const State& state,
bool init =
true);
153 void getExpectedDiff(StateVector& x_diff,
const State& state,
double dt);
154 void getStateJacobian(SystemMatrix& A,
const State& state,
double dt,
bool init =
true);
155 void getInputJacobian(InputMatrix& B,
const State& state,
double dt,
bool init =
true);
156 void getSystemNoise(NoiseVariance& Q,
const State& state,
double dt,
bool init =
true);
165 #include "system_model.inl" 167 #endif // HECTOR_POSE_ESTIMATION_SYSTEM_MODEL_H SubState::VectorSegment VectorSegment
virtual bool active(const State &state)
virtual void getPrior(State &state)
struct internal * internal_
State::SystemMatrix SystemMatrix
SymmetricMatrix Covariance
SubState::CovarianceBlock CovarianceBlock
virtual SystemStatus getStatusFlags(const State &state)
virtual bool limitState(State &state)
const Derived * derived() const
#define SYSTEM_MODEL_TRAIT(Derived, _VectorDimension, _CovarianceDimension)
Matrix_< State::Covariance::RowsAtCompileTime, InputDimension >::type InputMatrix
SubState::CrossVarianceBlock CrossVarianceBlock
virtual SystemTypeEnum getSystemType() const
Block< const SystemMatrix, VectorDimension, SystemMatrix::ColsAtCompileTime > ConstSystemMatrixBlock
SubState::ConstCrossVarianceBlock ConstCrossVarianceBlock
traits::Input< Derived >::Type InputType
SubState_< VectorDimension, CovarianceDimension > SubState
State::Vector StateVector
State::Covariance NoiseVariance
virtual bool init(PoseEstimation &estimator, System &system, State &state)
SubState::ConstVectorSegment ConstVectorSegment
Eigen::Matrix< ScalarType, Rows, Cols,(Rows==1 &&Cols!=1?Eigen::RowMajor:Eigen::ColMajor),(Rows!=Dynamic?Rows:MaxMatrixRowsCols),(Cols!=Dynamic?Cols:MaxMatrixRowsCols) > type
virtual SystemModel::SystemTypeEnum getSystemType() const
Block< const State::Covariance, CovarianceDimension, CovarianceDimension > ConstCovarianceBlock
unsigned int SystemStatus
Block< State::Covariance, CovarianceDimension, CovarianceDimension > CovarianceBlock
VectorBlock< State::Vector, VectorDimension > VectorSegment
virtual bool prepareUpdate(State &state, double dt)
Block< const State::Covariance, Dynamic, CovarianceDimension > ConstCrossVarianceBlock
virtual void afterUpdate(State &state)
Block< SystemMatrix, VectorDimension, SystemMatrix::ColsAtCompileTime > SystemMatrixBlock
VectorBlock< const State::Vector, VectorDimension > ConstVectorSegment
virtual SystemModel::SystemTypeEnum getSystemType() const
SubState::ConstCovarianceBlock ConstCovarianceBlock
Eigen::Matrix< ScalarType, Rows, 1, Eigen::ColMajor,(Rows!=Dynamic?Rows:MaxVectorSize), 1 > type
Block< State::Covariance, Dynamic, CovarianceDimension > CrossVarianceBlock
traits::Input< Derived >::Vector InputVector
ColumnVector_< VectorDimension >::type Vector