라벨이 eigen인 게시물 표시

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제

이미지
칼만 필터(Kalman filter)는 노이즈가 포함된 측정치로 부터 실체 상태를 추정(推定, estimation)하는 도구다. 본 포스트의 칼만 필터 소스는 한 타겟의 위치를 추정하는 용도로 만들어 졌다.  위키피디아 페이지( https://en.wikipedia.org/wiki/Kalman_filter )와 “Human Target Tracking in Multistatic Ultra-Wideband Radar” 논문 등을 참조하여 칼만 필터의 공식을 구현하였다. F,H,Q,R matrix는 아래와 같은 값으로 정하여 사용하였다. 칼만 필터 c++ 소스는 아래와 같다.  #include <malloc.h> #include <Eigen/Dense> __declspec(align(16)) class CKalmanFilter { private: BOOL mFirst; Eigen::MatrixXd mX; Eigen::Matrix4d mP; Eigen::Matrix4d mF; Eigen::MatrixXd mH; Eigen::Matrix2d mR; // measurement noise covariance Eigen::Matrix4d mQ; // process noise covariance public: void* operator new(size_t i) { return _mm_malloc(i, 16); } void operator delete(void* p) { _mm_free(p); } CKalmanFilter(double process_var, double measure_var, double T) { ...

Eigen 라이브러리 matrix 사용법

이미지
본 글은 eigen 라이브러리의 matrix 간단한 사용법에 관한 글을 싣고 있다. Eigen 라이브러리는 http://eigen.tuxfamily.org/ 에서 다운받아 사용할 수 있다. 별도의 라이브러리 빌드 없이 헤더만 불러와 사용할 수 있어 편리하다. 개인적으론 opencv의 Mat보다 Eigen의 Matrix가 사용하기 편한 것 같다. 라이브러리 경로 project 설정 추가 다운받은 라이브러리 파일은 압축해제 후 project 설정에서 경로만 추가하면 된다. 라이브러리 헤더  #include <Eigen/Dense> namespace  아래와 같이 Eigen namespace를 사용하도록 설정하던가, 아니면, 호출 때 마다 Eigen::을 사용하면 된다.  using namespace Eigen; matrix 데이터 형식  Matrix 타입의 맨 뒤는 matrix내 데이터의 형식을 의미한다. EIGEN_MAKE_TYPEDEFS_ALL_SIZES(int,                  i) EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float,                f) EIGEN_MAKE_TYPEDEFS_ALL_SIZES(double,               d) EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<float>,  cf) EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<double>, cd) matrix 타입 Eigen의 matrix 타입은 고정 사이즈와 가변 사이즈 두가지가 있다. 아래는 두 타입을 비교한 코드다. Dynamic-Size의 matrix타입은 사용시 ...