자이로 센서는 각속도를 출력합니다. 보통 이 각속도를 적분하여 회전각을 계산하는데, 이때 미소한 bias drift도 적분으로 누적되면 결국 큰 오차가 발생합니다. 다음 첨부 문서에서는 이러한 bias drift를 최소화 하기위한 HDR(Heuristic drift reduction) 알고리즘의 사용에 대하여 다루고 있습니다.
HDR 알고리즘을 C++코드로 다음과 같이 간단하게 구현할 수 있습니다.
void Filter::HDR (double v[3], double threshold, double ic)
{
v[0] += _HDR_I[0];
v[1] += _HDR_I[1];
v[2] += _HDR_I[2];
//const double ic = 0.001;
//const double threshold = 15;
if ((-threshold < v[0] && v[0] < threshold) &&
(-threshold < v[1] && v[1] < threshold) &&
(-threshold < v[2] && v[2] < threshold) ){
_HDR_I[0] -= SIGN(v[0])*ic;
_HDR_I[1] -= SIGN(v[1])*ic;
_HDR_I[2] -= SIGN(v[2])*ic;
}
}
* 상기 HDR 알고리즘은 다음의 두 논문을 참조하여 작성하였습니다:
- J. Borenstein의 “’Heuristic reduction of gyro drift in gyro-based vehicle tracking”
- 남동균의 “저가형 자이로 센서의 드리프트 감소 방안에 대한 고찰”