초음파 위성과 같은 beacon으로부터 측정한 거리값과 바퀴의 오도메트리를 Kalman Filter로 정합하여 로봇의 위치를 추정하는 방법에 대하여 소개합니다.
자세한 내용은 다음 pdf 문서를 참조하시기 바랍니다.
또한, VisualC++ 2008로 작성된 소스코드도 첨부합니다.
상기 소스코드를 컴파일 하여 실행하기 위해서는 이동로봇을 시뮬레이션 하는 시뮬레이터가 필요합니다. 이동로봇 시뮬레이터는 다음 링크를 참조하시기 바랍니다.
xxx - Mobile Robot Simulation 프로그램
초음파 위성(beacon)의 수나 위치를 변경하기 위해서는 프로젝트 폴더의 map 폴더에서 beacon.txt 파일을 편집하시면 됩니다. 또한, beacon.txt 파일의 내용은 Simulation 프로그램에서도 동일하게 수정하셔야 합니다. 아래 beacon.txt 파일의 예제를 보겠습니다.
# id x y z r
#id - beacon's unique id
# x - beacon's x position
# y - beacon's y position
# z - beacon's z position
# r - beacon's detection radius
2000 0. 0. 2. 6
#2001 0. 10. 2. 6
#2002 10. 10. 2. 6
#2003 10. 0. 2. 6
#2004 5. 5. 2. 6
'#' 표시는 주석입니다. 그리고 하나의 레코드는 beacon의 id, x,y,z위치, 그리고 인식반경 r로 구성됩니다.
아래 동영상으로 프로그램의 실행을 확인하시기 바랍니다.
1개의 beacon을 사용한 위치인식:
3개의 beacon을 사용한 위치인식:
5개의 beacon을 사용한 위치인식:
동영상에서 바닥의 격자는 1m 단위로 그어져 있습니다. 그리고 검은색 둥근 원은 beacon의 인식반경입니다. 만일 인식반경 내에 로봇이 들어오게 되면 붉은 색으로 바뀝니다.
파란색은 원은 시뮬레이터에서 시뮬레이션 되는 로봇의 위치이고, 어두운 초록색 원은 dead-reckoning한 로봇의 위치, 밝은 초록색 원은 EKF로 위치추정을 한 로봇의 위치입니다.
어두운 초록색과 밝은 초록색 원을 비교해 보면 확실히 로봇의 위치인식이 되고 있음을 알 수 있습니다. 첫번째 동영상에서 beacon이 1개 일때는 마지막에 로봇의 위치를 엉뚱하게 추정합니다. 하지만, 3개 이상의 beacon이 있을 때, beacon의 수가 많아질 수록 로봇의 추정위치 정밀도가 높아짐을 알 수 있습니다.