로봇에서 위치인식을 위해 많이 사용되는 센서가 스캐닝 레이저 센서와 카메라 입니다. 여기서는 카메라가 벽에 붙은 랜드마크를 인식하여 로봇의 위치를 계산하는 방법에 대하여 소개합니다. 카메라로 랜드마크를 인식하는 방법은 다음 문서를 참조하시기 바랍니다: OpenCV Marker Detection - xxx
로봇이 위치인식을 하기위해 서로 구분되는 랜드마크를 벽에 붙이고, 이 랜드마크를 로봇에 장착된 카메라로 인식하여 EKF(Extended Kalman Filter) 위치인식을 수행합니다. 여기서 랜드마크를 식별하는 방법은 다루지 않고, 단지 로봇이 랜드마크를 인식하여 거리와 방향의 2차원 정보가 주어질 때 EKF 알고리즘으로 위치인식을 수행하는 과정에 대하여 설명합니다. 다음 문서는 이에 대한 설명입니다.
구현된 소스코드를 참고하시기 바랍니다.
상기 소스코드를 컴파일 하여 실행하기 위해서는 이동로봇을 시뮬레이션 하는 시뮬레이터를 먼저 실행하여야 합니다. 이동로봇 시뮬레이터는 다음 링크를 참조하시기 바랍니다.
xxx - Mobile Robot Simulation 프로그램
아래는 EKF 위치인식을 시뮬레이션 하는 동영상입니다. 초록색 점이 랜드마크를 의미하며 밝은 초록색 점은 로봇이 인식한 랜드마크를 의미합니다. 파란색 원은 시뮬레이션상 로봇의 실제 위치, 초록색 원은 EKF로 추정한 로봇의 위치, 붉은색 타원은 추정한 로봇의 covariance 입니다.
* 2013.3.28: pdf 문서와 소스코드에 다음과 같이 오류를 수정하시기 바랍니다:
- pdf 문서를 다음과 같이 수정:
- 소스코드를 다음과 같이 수정:
void CEKF::update(double zx, double zy, double r, double a)
{
...
H(0,0) = -(zx - X(0,0))/rho;
H(0,1) = -(zy - X(1,0))/rho;
H(0,2) = 0;
H(1,0) = (zy - X(1,0))/rho2;
H(1,1) = -(zx - X(0,0))/rho2;
H(1,2) = -1;
...
}