가속도 센서(accelerometer)는 가속도를 출력합니다. 보통 이 가속도에는 중력이 포함되어 있기 때문에 중력을 제거한 후 적분하여 속도와 위치를 계산하는데, 이때 미소한 scale factor의 변화로 인해 중력 성분이 제대로 제거되지 않고 적분으로 누적되면 결국 큰 오차가 발생합니다. 다음 첨부 문서에서는 이러한 scale factor를 조절하기 위한 HSR 알고리즘의 사용에 대하여 소개합니다.

 

HSR.pdf

 

이 알고리즘은 이전에 소개한 HDR 알고리즘(http://blog.daum.net/pg365/227)을 응용해서 제가 간단히 만들어 본 것입니다. 실제로 다른 좋은 가속도 센서의 scale factor를 측정하는 좋은 알고리즘들이 많이 있을 것으로 생각합니다.

 

HSR 알고리즘을 C++코드로 다음과 같이 간단하게 구현할 수 있습니다.

 

void Filter::HSR (double v[3], double threshold, double ic)

{

           v[0] *= _HSR_I;

           v[1] *= _HSR_I;

           v[2] *= _HSR_I;

 

           double a = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]) - 1.;

 

           //const double ic = 1.0001;

           //const double threshold = 0.01;

 

           if (-threshold < a && a < threshold) {

                     if (a > 0.)      _HSR_I /= ic;

                     else if (a < 0.) _HSR_I *= ic;

           }

}

 

 

Filter.cpp

 

Filter.h