본문 바로가기

전체 글

이동로봇의 FastSLAM FastSLAM은 Particle Filter를 기반으로 동작합니다. FastSLAM은 랜드마크의 수가 수천개 이상 되었을 때 EKF-SLAM과 비교하여 장점이 있습니다. EKF-SLAM은 랜드마크 수의 제곱에 비례하여 계산 량이 증가하기 때문에 랜드마크의 수가 수백개 정도 되면 계산량이 상당히 많습니다. 하지만 FastSLAM에서는 계산량이 랜드마크 수와 선형으로 비례하여 증가하기 때문에 EKF-SLAM보다 그래도 좀 더 나은 편입니다. FastSLAM에 대한 자세한 내용은 Sebastian Thrun 교수의 설명을 참고하시기 바랍니다: http://robots.stanford.edu/papers/montemerlo.fastslam-tr.html 아래는 FastSLAM의 수행절차를 정리한 문서입니다. .. 더보기
이동로봇의 EKF(Extended Kalman Filter) SLAM - 3D 환경에서 이전 글에 이어 EKF-SLAM을 3D 환경으로 옮겨 보았습니다. 이전 글에서는 로봇이 랜드마크를 인식하였을 때 평면상의 방향 정보만을 사용하였습니다. 여기서는 평면상의 방향정보와 수직으로 방향정보를 사용합니다. 이러한 사실은 카메라에서 벽에 붙은 마커를 인식하였을 경우를 가정한 것입니다. 카메라로 받아들인 영상에서 마커를 인식한 경우, 영상에서 마커의 위치(x,y)는 쉽게 알 수 있지만 마커와의 거리(z)는 알아내기가 어렵기 때문입니다. 영상에서 마커의 위치를 알 경우 카메라의 화각을 안다면 마커의 수직방향과 수평방향의 각도는 쉽게 계산가능합니다. EKF-SLAM의 수행에 대하여는 다음 문서를 참조하시기 바랍니다. 아래는 EKF-SLAM을 구현한 예제 코드입니다. 상기 소스코드를 컴파일 하여 실행하기 .. 더보기
이동로봇의 EKF(Extended Kalman Filter) SLAM SLAM(Simultaneous Localization and Mapping)이란 맵이 주어지지 않은 환경에서 로봇이 이동 중 맵을 만들면서 동시에 위치추정까지 병행하는 것을 말합니다. 여러 SLAM 방법들이 있겠으나 EKF-SLAM과 Fast SLAM이 잘 알려져 있으며 구현사례들도 많이 있습니다. EKF-SLAM은 EKF 알고리즘을 기반으로 SLAM 영역으로 확장한 것입니다. 그렇기 때문에 EKF 알고리즘과 동일한 절차로 수행되며 로봇의 상태를 나타내는 백터와 상태의 정확도를 나타내는 공분산 행렬로 구성됩니다. EKF에서는 로봇의 상태로 위치와 방위만 나타내기 때문에 연산량이 적습니다. 하지만 EKF-SLAM에서는 로봇의 상태와 더불어 지도의 랜드마크 위치정보도 상태에 포함됩니다. 예로서, 로봇이 주.. 더보기
RANSAC(RANdom SAmple Consensus)을 이용한 Ellipse Fitting Example 이전 글에서 RANSAC을 이용한 Circle Fitting 방법과 예제코드를 작성했습니다. 이번에는 RANSAC으로 Ellipse Fitting 방법을 응용해 보았습니다. RANSAC의 수행 절차는 이전 문서에서와 동일하기 때문에 여기서 언급하지 않고, 주어진 점 데이터들로부터 행렬을 이용하여 타원의 파라미터을 계산하는 방법만 간단히 설명하겠습니다. 다음 문서를 참조하시기 바랍니다. 그리고 작성된 예제 코드를 첨부합니다. (nonhomogeneous equation) (homogeneous equation) 실행 결과를 참고하시기 바랍니다. 더보기
RANSAC(RANdom SAmple Consensus)을 이용한 Circle Fitting Example 이전 글에서 RANSAC을 이용한 Line Fitting 방법과 예제코드를 작성해 보았습니다. 이번에는 로봇이 주행하면서 둥근 기둥과 같은 것을 하나의 특징으로 인식하기 위하여 RANSAC으로 Circle Fitting 방법을 응용해 보았습니다. RANSAC의 수행 절차는 이전 문서에서와 동일하기 때문에 여기서 언급하지 않고, 주어진 점 데이터들로부터 행렬을 이용하여 원의 파라미터를 계산하는 방법만 간단히 설명하겠습니다. 다음 문서를 참조하시기 바랍니다. 그리고 작성된 예제 코드를 첨부합니다. 실행 결과를 참고하시기 바랍니다. 더보기
천정 랜드마크를 이용한 이동로봇의 EKF 위치인식: 스타게이저(StarGazer), NorthStar 하기소닉에서 만든 스타게이저(StarGazer)나 EvolutionRobotics 사의 NorthStar와 같은 센서는 천정에 서로 구분되는 랜드마크를 만들고 카메라로부터 이 랜드마크를 인식 함으로 로봇의 위치를 상대적으로 알 수 있습니다. 이때, 천정의 랜드마크 정보와 좌우 바퀴의 오도메트리 정보를 읽을 수 있다면, 이 둘을 EKF로 융합함으로 로봇의 위치인식 성능을 높일 수 있습니다. 다음 문서는 이와같이 천정 랜드마크를 이용한 EKF 위치인식에 대한 설명입니다. 구현된 소스코드를 참고하시기 바랍니다. 상기 소스코드를 컴파일 하여 실행하기 위해서는 이동로봇을 시뮬레이션 하는 시뮬레이터를 먼저 실행하여야 합니다. 이동로봇 시뮬레이터는 다음 링크를 참조하시기 바랍니다. xxx - Mobile Robot .. 더보기
카메라 랜드마크를 이용한 이동로봇의 EKF 위치인식 로봇에서 위치인식을 위해 많이 사용되는 센서가 스캐닝 레이저 센서와 카메라 입니다. 여기서는 카메라가 벽에 붙은 랜드마크를 인식하여 로봇의 위치를 계산하는 방법에 대하여 소개합니다. 카메라로 랜드마크를 인식하는 방법은 다음 문서를 참조하시기 바랍니다: OpenCV Marker Detection - xxx 로봇이 위치인식을 하기위해 서로 구분되는 랜드마크를 벽에 붙이고, 이 랜드마크를 로봇에 장착된 카메라로 인식하여 EKF(Extended Kalman Filter) 위치인식을 수행합니다. 여기서 랜드마크를 식별하는 방법은 다루지 않고, 단지 로봇이 랜드마크를 인식하여 거리와 방향의 2차원 정보가 주어질 때 EKF 알고리즘으로 위치인식을 수행하는 과정에 대하여 설명합니다. 다음 문서는 이에 대한 설명입니다... 더보기
C++에서 실시간 그래프 그리기: 오실로스코프(oscilloscope) 컨트롤 C++로 로봇 프로그램을 하다보면 센서에서 실시간으로 들어오는 데이터를 연속적으로 모니터링 할 필요가 있습니다. 이때 유용한 컨트롤이 OscopeCtrl 입니다. OscopeCtrl은 오실로스코프(oscilloscope) 컨트롤의 약어로서 실시간으로 들어오는 데이터를 오실로스코프와 같이 표시한다는 의미에서 붙인 이름인것 같습니다. 실제로 이 컨트롤은 제가 만든것이 아니라 emule project에 있던 파일을 떼어와서 사용하기 편하게 약간 가공한 것입니다. Emule project (http://www.emule-project.net/)에 가시면 실제 이 컨트롤을 포함한 emule 전체 소스코드를 다운받을 수 있습니다. 아래의 두 파일이 OscopeCtrl을 만들기 위한 소스코드 입니다. CWnd 클래스.. 더보기