00001 00028 #pragma once 00029 00030 #include <Eigen/Dense> 00031 #include <Eigen/LU> 00032 00033 namespace isam { 00034 00035 // general noise model class 00036 class Noise { 00037 public: 00038 Eigen::MatrixXd _sqrtinf; 00039 const Eigen::MatrixXd& sqrtinf() const {return _sqrtinf;} 00040 }; 00041 00042 // noise model based on square root information matrix 00043 class SqrtInformation : public Noise { 00044 public: 00045 SqrtInformation(const Eigen::MatrixXd& sqrtinf) {_sqrtinf = sqrtinf;} 00046 }; 00047 00048 // noise model based on information matrix 00049 class Information : public Noise { 00050 public: 00051 Information(const Eigen::MatrixXd& inf) { 00052 _sqrtinf = inf.llt().matrixU(); 00053 } 00054 }; 00055 00056 // noise model based on covariance matrix 00057 class Covariance : public Noise { 00058 public: 00059 Covariance(const Eigen::MatrixXd& cov) { 00060 _sqrtinf = cov.inverse().llt().matrixU(); 00061 } 00062 }; 00063 00064 }