본문 바로가기

전체 글

OpenGL을 사용한 로봇 그리기 if(_ogl_wnd) { _ogl_wnd->OnDestroy (); delete _ogl_wnd; _ogl_wnd = NULL; } Windows에서 3D로 뭔가를 표현하고자 할 때 OpenGL 아니면 DirectX를 사용하게 됩니다. 여기서는 OpenGL을 사용하여 로봇의 주행을 3D로 표현해 보도록 하겠습니다. 먼저 예제 코드를 참조하시기 바랍니다. 예제 코드에서 로봇을 그리는 부분을 수정하면 다양한 로봇 모양들을 만들어 낼 수 있습니다. 분 예제코드는 로봇의 형태를 보여주기만 하며, 로봇의 움직임을 시뮬레이션 하지는 않습니다. 로봇의 움직임을 시뮬레이션 하기위해서는 ODE나 PhysX같은 물리 라이브러리가 필요합니다. OpenGL 윈도우 조작 명령 마우스를 사용하여 OpenGL 윈도우를 조작하는 .. 더보기
B-spline 곡선에 Least-Squares Data Fitting 차선 추적을 위해서는 먼저 이미지에서 차선을 추출하고 추출한 차선으로 차선 모델을 갱신하는 과정을 거칩니다. 차선 추적에 대해서는 "Lane Detection and tracking using B-Snake"라는 논문에서 잘 설명되어 있습니다. 여기서는 이미지에서 추출한 차선 데이터(이미지 상의 점들)를 차선 모델(B-spline 곡선으로 표현)에 Least-Squares 방법으로 피팅 하는 방법에 관한 것입니다. 다음 문서를 참고하십시오. 다음은 Least-Squares 방법으로 B-spline 곡선에 fitting 하는 함수입니다. P가 피팅 되어야 할 셈플 점들이고 Q가 B-spline의 제어 점들(control points) 입니다. inline dMatrix CubicBSplineBasis (s.. 더보기
ICP(Iterative Closest Point)와 레이저 센서로 2D 지도구축 ICP(Iterative Closest Point)는 컴퓨터 그래픽스에서 주로 사용되어왔습니다. 어떠한 모델에 대한 측정 데이터가 있을 때, 이 측정 데이터를 모델에 매칭하기 위해 스케일 변환, 회전, 이동을 계산하는 방법에 관한 것입니다. 로봇에서는 레이저 스캐너로 측정한 데이터로 장애물 지도를 구축할 때, 이미 구축된 지도(모델)와 새로 측정한 데이터를 최소 오차로 매칭하기 위해 ICP를 수행합니다. ICP 수행 결과로 계산한 회전, 이동을 새로 측정한 데이터에 반영한 후 구축된 지도에 업데이트 하게되면 지도가 변형되는 현상을 많이 줄일 수 있을 것입니다. ICP 알고리즘에 대한 자세한 내용은 다음 문서를 참고하십시오. 여기서는 ICP 알고리즘으로 모델과 데이터 간의 에러를 최소화 하기위한 로봇의 델.. 더보기
k-d tree(k-dimensional tree) k-d tree(k-dimensional tree)는 k-차원의 공간 내에서 점들을 구성하기 위한 공간 분할 자료구조로 binary tree의 특수한 경우입니다. K-d tree는 다차원의 탐색 키를 사용하는 탐색 알고리즘에 유용하게 사용됩니다. 예를 들자면, SIFT나 SURF로 추출한 특징점들은 높은 차원의 벡터로 표시되는데 이 특징점들을 DB에 저장된 특징점들과 비교하여 유사도가 가장 높은 것을 찾기위해 사용됩니다. Insertion k-d tree에 노드를 삽입하는 방법은 binary search tree와 유사하게 동작합니다. binary search tree의 insertion을 참고하면 이해가 쉽습니다. Search k-d tree에서 노드를 검색하는 방법은 주로 두 가지 방법을 사용합니다... 더보기
2차원 공분산 행렬이 나타내는 확률분포에 따라 파티클 뿌리기 이전 글을 응용하여 2차원 공분산 행렬이 나타내는 확률분포에 따라 파티클을 뿌려보겠습니다. 이 방법은 이전 글의 두번째 방법(공분산 행렬의 고유치 분해로부터 장축과 단축을 구하고 회전행렬를 구하는 방법)의 결과를 그대로 이용할 수 있습니다. 아래는 구현한 소스코드 입니다. 이전 글에서 올린 소스코드를 조금 변경하여 만들었습니다. 공분산 행렬 C=[2500, 600; 600, 800]이 나타내는 확률분포에 대하여 파티클을 뿌린 결과입니다. 더보기
2차원 공분산 행렬(covariance matrix)을 타원으로 표시하기 로봇의 위치(x, y)에 대한 공분산을 시각적으로 표시하기 위해 공분산 행렬을 타원으로 표시할 경우가 있습니다. 이 때 사용가능한 두 가지 방법에 대하여 정리합니다. 첫번째는 회전행렬로 좌표변환을 하여 타원의 장축과 단축, 회전각을 구하는 방법입니다. (http://www.geom.unimelb.edu.au/nicole/surveynetworks/02a/notes09_01.html 참조 두번째는 공분산 행렬의 고유치 분해로부터 장축과 단축을 구하고 회전행렬를 구하는 방법입니다. (Paul Michael Newman의 "C4B | Mobile Robotics"에서 Topic 10.1 Drawing Covariance Ellipses 참조) 자세한 내용은 다음 문서를 참조하시기 바랍니다. 아래는 구현한 소스.. 더보기
Scanning Laser 센서의 Particle Filter 위치인식 Scanning Laser Range Sensor에서 측정한 데이터와 차동 바퀴형 이동체의 좌우 바퀴의 Odometry 정보를 이용한 Particle Filter Localization에 대한 내용입니다. 다음 문서를 참고하시기 바랍니다. 더보기
Scanning Laser 센서의 측정점 보상 Scanning Laser Range Finder 센서로 장애물을 탐지하거나 벽면 정보를 이용하여 위치인식을 수행할 때, 센서를 장착한 로봇이 주행 중인 상황이라면, Range 데이터의 측정 시간에 따른 로봇의 위치와 자세가 모두 다르기 때문에, Range 데이터로 정확한 전역 위치를 환산할 수 없게 됩니다. 이러한 문제를 극복하기 위하여 로봇의 주행 궤적을 기록해 두고 Range 데이터의 측정 시점을 계산하여, 이 시점에서 로봇의 위치를 알 수 있어야 합니다. 자세한 내용은 다음 문서를 참고바랍니다. 더보기