레이블이 이동 로봇인 게시물을 표시합니다. 모든 게시물 표시
레이블이 이동 로봇인 게시물을 표시합니다. 모든 게시물 표시

2014년 10월 1일 수요일

Rsimulator

github에서 Rsimulator 보기


Rsimulator 소개

 Rsimulator는 Visual studio 2010, C++, opencv 기반으로 만들어진 이동 로봇 시뮬레이터입니다.

라이센스

 Rsimulator는 GPL을 따릅니다.(GPL 한글 번역 전문)

 기업, 학교, 개인이 마음대로 개작하고 재배포해도 좋지만, 개작된 소프트웨어의 소스코드는 GPL에 따라 공개되어야 하고 Rsimluator를 사용했다는 것을 밝혀야 합니다.. Rsimulator를 공공의 목적으로 공개하는 이유이기도 합니다.

기능 명세

  • 로봇 설정(두 개의 바퀴와 하나의 캐스터)
  • 장애물 환경 디자인(사각형, 원형, 직선 등)
  • 초음파, 레이저 센서 스캔 시뮬레이션
  • 점유 격자 지도 작성 시뮬레이션
  • 전역 경로 계획 시뮬레이션
  • 지역 경로 계획 시뮬레이션
  • UKF SLAM 시뮬레이션

소스 다운로드 방법

 git에 대해 익숙하신 분은 본 글 상단의 링크를 참고하시면 됩니다.

 처음이신 분은 본 글 상단의 링크를 통해 Rsimulator git을 fork하고

 github for windows를 통해 clone을 받으시면 됩니다.

간단 사용 방법

 처음 화면에 몇 개의 원이 뿌려져 있습니다. 랜덤하게 생성된 35의 점(랜드마크 입니다.) r 키로 적당한 크기의 로봇의 생성시키고 space bar를 누르면 정해진 궤적을 따라가면서 SLAM을 수행합니다.
 왼쪽 메뉴의 DT, VFF, VFH를 선택하면 로봇이 다르게 반응합니다. 자세한 설명서는 시간이 허락하면 작성할 계획입니다.

시뮬레이터 개선 계획

  현재는 없습니다. 다만, 본 프로그램을 사용하시는 분이 좋은 아이디어를 바탕으로 개선한 내용을 github에 pull하고 싶으시다면 적극 환영합니다. 공동으로 작업하고 싶은 의향도 있습니다. 그것이 공중 소프트웨어의 본질이라고 생각합니다.

시뮬레이터 실행 화면






2014년 9월 11일 목요일

Dyson360eye

Dyson360eye

다이슨 로봇청소기


 세계적인 진공청소기 업체인 다이슨에서 360도 카메라를 장착한 청소기를 출시했다고 합니다. 9월 4일이 일본에서 제품 발표회를 한 것 같은데 벌써 며칠 지났습니다. 16년간 2800만 파운드를 들여서 개발했다고 하는데, 정말 성능이 궁금하네요.

 집에서 청소 로봇을 하나 들여 쓰고 있는데, 엔지니어 입장에서 봐도 답답한 구석이 있었습니다. 일반 가정주부의 눈에는 매일 같은 곳에 처박혀 있는 모습을 보면 한심해 보일만도 합니다. 데모 동영상에서 가구의 코너를 검출하고 추적하는 모습이 나오는데, 실제로 visual slam을 적용한 것으로는 첫 번째 상용화 제품이라고 할 수 있을 것 같습니다. 기존에 삼성, LG에서도 천정 카메라를 이용해서 위치 인식을 하는 제품이 있었지만, 사용해본 결과로는 정말 위치 인식을 하고 있는 것이 맞는지 의심스러운 적이 많았습니다. 실제 가정에서 사용하려면 다양한 가구에 따라 끼임이나 바퀴의 들림처럼 오도메트리가 매우 부정확해질 수 있는 경우에 대처가 있어야 할 것인데 기존의 제품은 그런 정도의 성능이 보장되지는 않는 것 같아 보였습니다.

 Dyson360eye를 가지게 된다면 kidnap으로 부터 복귀하는지 테스트해봐야겠습니다. 재미있을 것 같습니다. 몇 달 간 청소한 집을 오늘 다시 하는데, 잠시 다른 방으로 옮겨 놓는다고 헤매고 있으면 16년 동안 개발한 것 치고는 조금 부족할지도 모르겠다는 생각이 듭니다.

2014년 8월 25일 월요일

SLAM(Simultaneous localization and mapping) - Simulation

SLAM 예제

 애초에는 SLAM 예제를 만들어 볼 생각이었으나, 이미 너무 잘 만들어진 시뮬레이터가 있어서 이것을 소개하는 것으로 갈음하고자 합니다.

 Austraila 의 연구자 Tim Bailey의 SLAM simulations software를 소개합니다.

 구성된 내용은
  • EKF-SLAM version 1, 2
  • FASTSLAM 1.0, FASTSLAM 2.0
  • UKF-SLAM
 입니다.


Tim bailey의 SLAM simulations EKF-SLAM

 SLAM을 연구하고자 입문하시는 분들에게 큰 도움이 되실 거라고 생각합니다. 아래 링크를 참조하세요.



2014년 8월 22일 금요일

SLAM(Simultaneous localization and mapping)과 칼만 필터 두 번째


SLAM(Simultaneous localization and mapping) - Kalman Filter second

동시적 위치추정 및 지도작성과 칼만 필터 두 번째

 이제 우리는 SLAM(Simultaneous localization and mapping)과 칼만 필터를 통해서 2차원 에서 운동하는 등속 모델의 물체에 대한 추적을 할 수 있게 되었다. 그런데 궁금한 것이 있다. 관측 행렬 \(\mathbf{H}=\left[\begin{array}{cccc}1 & 0 & 0 & 0\\0 & 1 & 0 & 0\end{array}\right]\)에서 알 수 있는 것처럼 측정할 수 있는 값은 위치 뿐이고, 속도에 대한 정보를 입력해 준 적은 없는데, 상태 벡터를 관찰해보면 속도에 대한 값이 생성되고 있다. 왜 그럴까? 공분산 행렬 \(\mathbf{P}\)을 살펴보면 예측 과정에서는 행렬의 대각 성분, 다시 말하면 각 위치와 각 속도 스스로의 항에 더해지지만, 갱신하는 과정에서 대각 성분이 아닌  곳에 연관성(correlation)이 발생하기 때문이다. 그러므로 칼만 필터는 위치에 대한 정보만 입력 받아도 상태 천이 행렬로부터 적절한 속도를 갱신하도록 한다고 생각해 볼 수 있다.

 그러면 마찬가지로 입력 받지 않은 다른 측정 값에 대해서도 갱신하는 것이 가능하지 않을까? 그렇다. SLAM의 기본 개념은 측정된 값을 이용해서 측정 되지 않은 다른 값들을 갱신하는 것이다. 현재 위치에서 측정할 수 있는 랜드 마크는 센서의 시야각과 거리의 한계로 제한이 있을 수 밖에 없다. 한정된 측정값을 이용해서 다른 상태 벡터의 값들을 좀 더 신뢰할 수 있는 값으로 갱신하는 것이다.

 아래 그림을 보면, 움직이는 로봇이 측정할 수 있는 랜드 마크의 숫자가 한정적인 경우에도 하나의 상태 벡터를 포함하고 있는 상태에서는 모든 랜드 마크와 로봇의 위치에 대한 신뢰도가 향상되는 것을 볼 수 있다. 로봇과 랜드 마크의 타원은 공분산 행렬(Covariance matrix)에 비례하여 그려진 것이므로 해당 항목의 불확실성(Uncertainty)을 의미하는 것으로 생각할 수 있다.


이미지 원본: Andrew Davison의 박사 학위 논문

 이렇게 로봇의 상태와 랜드 마크의 좌표가 하나로 합쳐진(Augmented) 상태 벡터를 사용하는 방법은 관측 범위의 제약으로 한정된 관측이 수행되는 경우에 유용하지만, 태생적으로 차원의 저주(Curse of dimensionality) 문제를 갖고 있다.

 추정하고자 하는 로봇 좌표계의 차원과 특징점의 차원이 모두 하나의 상태 벡터에 포함되므로 특징점의 개수가 증가함에 따라서, 공분산 행렬 \( \mathbf{P} \)의 크기가 \( 2^d \)에 비례하여 증가하기 때문이다.

2014년 8월 21일 목요일

SLAM(Simultaneous localization and mapping)과 칼만 필터


SLAM(Simultaneous localization and mapping) - Kalman Filter

동시적 위치추정 및 지도작성과 칼만 필터

 국문으로 번역된 이름이 마음에 들지 않지만, 마땅히 다르게 번역할 방법이 없어서 기존에 사용되던 것들 중에서 차용하였습니다.

 제목에서 느낄 수 있는 것처럼 이동 로봇이 미지의 세계를 방문할 때 자신의 위치추정과 지도작성을 동시에 수행하는 것을 말한다. 동시적이라고 하면 시간의 흐름상 완전한 동시성을 의미하는 것처럼 느껴지기 때문에 사실은 일관된, 연관된 정도로 번역하는 것이 자연스럽다고 생각된다.

 칼만 필터를 이용한 이동 로봇의 SLAM에 대해서 먼저 기술하고 다음으로 다른 종류의 필터(EKF, UKF, Particle Filter)에 대해 적어볼 예정입니다.

 위치 추정과 지도 작성은 동시에 진행하는 것이 타당하다. 위치를 인식하기 위해서는 지도가 정확해야 하는데, 지도의 정확성은 위치의 정확성에 의존하기 때문이다. SLAM이 어려운 이유는 그림에서 보는 것처럼 예측할 수 없는 요소들이 많기 때문이다.


왜 SLAM은 어려운 문제인가?

 세상엔 정확한 센서는 존재하지 않기 때문에 항상 노이즈를 포함하고 있다. 정확한 센서 하나만 있었더라도 이렇게 힘들게 고민할 이유가 없었을 것이다.

 위의 그림을 조건부 확률식으로 적어보면 아래와 같다.

조건부 확률식으로 전개한 SLAM 문제

 상태 벡터 \( \mathbf{x}_{k-1} \)에서 \( \mathbf{x}_{k} \)로 이동하는 로봇이 \( \mathbf{m}_{i}, \mathbf{m}_{j}\) 랜드 마크를 관측한 값이 측정치 \( \mathbf{z}_{k,j}\) 로 입력된다. \( \mathbf{u}_k \)는 현재 로봇의 조종 명령이다.

 조건부 확률 식을 말로 풀이하면 " \( \mathbf{z}_{1:t}, \mathbf{u}_{1:t} \)가 만족 되는 경우에 즉, 최초 시점 1에서 현재 시점 \( t \)까지의 관측 값과 조종 명령이 주어질 때, 현재 위치를 의미하는 상태 벡터 \( \mathbf{x}_t \)와 지도를 의미하는 \( \mathbf{m} \)이 어떤 확률 분포를 가지는가?" 로 서술할 수 있다.

 확률은 그 합이 '1'이 되어야 하기 때문에 조건이 주어지지 않은 경우의 현재 상태와 지도에 대한 확률과 합하면 조건부 확률 값은 '1'이 된다. 위와 같은 조건부 확률 식으로 전개해 두고 나면 앞서 기술한 베이지안 추정 방법이나 마르코프 위치 인식 방법을 사용할 수 있게 되므로 매우 유리한 점이 생긴다.

 상태 천이 행렬이 선형(Linearity: Homogeneity와 superposition을 만족)인 경우에 적용할 수 있다. 선형 상태 천이를 한다는 것은 상태 천이 함수가 선형이라는 말이며 등속, 등가속 운동처럼 이후의 운동의 예측할 수 있는 경우를 말한다.


 그림에서 상태 천이 함수는 \( A \) 행렬이다. 등속 모델인 경우엔 \( \mathbf{A}=\left[\begin{array}{cccc}1 & 0 & 1 & 0 \\ 0 & 1 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{array}\right] \), 상태 벡터는 \(\mathbf{x}=\left[\begin{array}{c}x \\ y \\ \dot{x} \\ \dot{y} \end{array}\right] \) 로 설정하면 2차원 좌표에서 등속으로 운동하는 물체에 대한 칼만 필터의 추정식이 완성된다. 실제 시스템 모델이 맞도록 공정 잡음과 측정 잡음을 설정하면 된다. 

 간단하게 몇 줄의 코드 만으로도 칼만 필터는 훌륭하게 동작합니다. 아래에 2차원에서 움직이는 물체에 대한 칼만 필터 예제를 게시합니다. 
kalmandemo

칼만 필터 예제

% 2D Kalman filter example
% 2014. 8. 21
% refopen.blogspot.kr

2차원에서 움직이는 참 값 생성

true = [0:0.03:pi/2; sin(0:0.03:pi/2)];
close all;
plot(true(1, :), true(2, :), 'b*-');

파라미터 초기화

x = [0; 0; 0; 0];
A = [1 0 1 0;
    0 1 0 1;
    0 0 1 0;
    0 0 0 1];
sigmax = 0.01;
sigmay = 0.01;
sigmaxdot = 0.01;
sigmaydot = 0.01;
Q = [sigmax.^2 0 0 0;
    0 sigmay.^2 0 0;
    0 0 sigmaxdot.^2 0;
    0 0 0 sigmaydot.^2];
H = [1 0 0 0; 0 1 0 0];
R = [0.05 0;
    0 0.05];

xhatk = x;
Phatk = Q;

kfest = zeros(size(true));
measure = zeros(size(true));

예측과 갱신 반복

for n=1:size(true, 2)   %% 참 값으로 만든 횟수 만큼

    % 측정값 생성
    % 표준 편차가 0.03인 가상의 노이즈를 더한 가상의 측정값
    zk = true(:, n) + randn(2, 1)*0.03;
    measure(:, n) = zk;

    % 예측 과정
    xbark = A*xhatk;
    Pbark = A*Phatk*A' + Q;

    % 갱신 과정
    K = (Pbark*H'*(H*Pbark*H'+R)^-1);
    xhatk = xbark + K*(zk - H*xbark);
    Phatk = (eye(4) - K*H)*Pbark;

    kfest(:, n) = xhatk(1:2);

end

hold on;
plot(measure(1, :), measure(2, :), 'k*-');
plot(kfest(1, :), kfest(2, :), 'r*-');

legend('true', 'measure', 'kf est.');

2014년 8월 20일 수요일

이동 로봇을 위한 칼만 필터


이동 로봇을 위한 칼만 필터

Kalman Filter for a mobile robot

 EBS 다큐멘터리 '자본주의란 무엇인가?'에서 세계적인 석학들에게 '자본주의란?' 명제에 대해 답변해주기를 요청하는 장면에서 모두 머리를 절래절래 흔드는 장면이 나온다.

 마찬가지의 관점에서 공학자로서 칼만 필터에 대해 기술한다는 것은 굉장히 괴로운 일이다. 깊은 통찰이 담겨있는 근본적인 원리이기 때문이다. 이미 인터넷을 검색하면 무수히 많은 튜토리얼과 활용예가 있음에도 불구하고 굳이 다시 한 번 거론하는 이유는 본 블로그에 게시된 글들과의 연관성을 위해서 SLAM과 관련된 내용을 게시하기 이전에 필요하기 때문이다.

 베이지안 추정 필터와 관련된 글을 먼저 확인 바랍니다.

 칼만 필터를 이동 로봇에 적용하는 것이 적합하다고 생각되는 이유는 물리적인 특성을 유지하는 물체이기 때문이다. 다시 말하면 뉴턴의 운동 법칙을 위배하는 물체는 이 세상에 없기 때문에 (빛보다 충분히 느린 물체의 경우에) 이동 로봇은 물론이고, 잠수정, 비행체를 포함한 모든 물체는 일정한 패턴을 가지고 움직인다. 갑자기 서울에서 있던 물체가 부산에 나타날 수는 없다는 것이다. 혹자는 금융에 칼만 필터를 적용하려는 시도를 하는 경우가 있는데, 본인이 생각하기엔 불가능하다. 왜냐하면 금융은 모델 자체가 갖는 특성이 물리적인 의미가 없는 경우가 많기 때문이다. (수 많은 파생상품은 투자 대상 조차도 형태가 없는 경우가 있다.)

 아래의 글은 칼만 필터의 예측과 갱신과정에 대해서 이해하고 있는 독자를 대상으로 합니다. 칼만 필터의 기본적인 개념은 위키 백과의 글을 참고하시기 바랍니다.

 칼만 필터가 실제로 좋은 방향으로 상태를 예측할 수 있는지는 다음 칼만 게인이 의미하는 바를 해석함으로써 알 수 있다.


Kalman gain
 그림에서 보인 수식은 칼만 게인이 갱신 과정에서 어떤 역할을 수행하는지 해석한 것이다. 칼만 게인은 공정 잡음으로부터 발생된 오차 공분산 행렬 값 \(P_k^-\)과 측정 잡음 행렬 \(R_k\)와 관련이 있다. 측정 잡음이 '0'으로 수렴하면 칼만 게인은 \(H^{-1}\)가 되므로 상태 벡터의 갱신 값은 측정치를 따르게 된다. 반대로 오차 공분산 행렬 \(P_k^-\) 값이 '0'으로 수렴하게 되면 칼만 게인은 '0'이 되어 상태 벡터의 예측치를 따르게 된다.

 이처럼 칼만 게인은 알고 있는(또는 알고 있다고 믿는) 공정 잡음과 측정 잡음 예측치와 측정치 중에서 현재 상태에 가장 최적의 값을 추론한다.

 이를 이용한 위치 추정과 지도 작성에 관한 문제는 SLAM이라는 제목으로 다시 게재할 예정이므로 칼만 필터에 관해서는 여기에서 줄인다.

Dijkstra, Best First Search, A* search

Dijkstra, Best First Search, A* search

전역 경로 계획

 거창하게 전역 경로 계획(Global path planning)이라고 이름을 붙이기는 했지만, 지역 경로 계획에 대비되는 용어일 뿐이다.

 지역 경로 계획은 가까운 곳의 장애물을 회피하기 위한 방법이라면 전역 경로 계획은 출발점에서 도착점까지 가장 가까운 거리를 찾는 것을 목적으로 한다. 그러므로 전역 경로 계획으로 생성된 경로에서 지역적으로 발생하는 장애물을 회피하는 방법을 복합적으로 사용하는 것이 바람직하다. 전역 경로 계획은 컴퓨터 공학 그래프 이론에서 출발한 것들이기 때문에 지역 경로 계획과는 근본적으로 조금 다른 성향을 가진다.
 실상이 없는 노드와 에지의 연결체에서 최단 경로를 찾는 것은 로봇의 모션 플래닝의 관점과는 조금 맞지 않을 수도 있다.

 이외에도 다른 방법들이 많이 있지만 다음 세가지에 국한해서 예시를 든다.

  • Dijkstra
  • Best First Search
  • A* Search

 워낙 오래되고 많이 사용되는 방법들이기 때문에 특별히 많은 설명이 필요하지는 않을 것 같다. 다음그림으로 세 가지 방법의 차이점을 명확히 이해할 수 있다.


Dijkstra, BFS, A* 비교(왼쪽부터)

 Occupancy grid와 같은 평면 지도를 작성했다면 위의 그림처럼 경로 계획을 하는 것이 적합한 것임을 이해할 수 있다. 각 셀을 노드로 셀간의 연결(4개 또는 8개)을 에지로 생각하면 그래프와 같기 때문이다.

 Dijkstra에서는 인접 셀에 거리 측정 방법(Manhattan distance, Euclidean distance)으로 측정된 비용에 따라 도착점 까지의 비용이 산출된다. 각 인접셀에 도달하는 비용은 동일하기 때문에 도착점까지의 가능한 모든 경로에 대해서 비용을 산출한 뒤에야 최단 경로가 생성되지만 최단 거리를 보장해준다는 장점이 있다.

 BFS에서는 도착점까지의 거리가 가장 가까운 지점을 먼저 방문한다. Dijkstra보다 빠르지만 그림에서 보는 것처럼 최단경로를 찾지 못할 수 도 있다는 단점이 있다.

 A* search algorithm은 상기 두 가지 방법을 적절히 혼용한 것으로 볼 수 있다. 출발점으로 부터 인접셀의 비용을 계산하되 도착점까지의 거리가 적을 것으로 생각되는 지점을 먼저 계산한다. 아래 그림에서 경로를 계산하는 순서를 확인할 수 있다.



 게시물 작성중에 최근에 새로운 것이 있는지 확인해본 결과 흥미로운 것을 발견했다. 기존의 Dijkstra's algorithm을 GPGPU를 이용해서 비약적으로 성능을 확장시킨 것이다. 가능한 인접셀을 모두 병렬로 방문함으로써 반복의 횟수를 절감했다.


2014년 8월 19일 화요일

VFF(Virtual Force Field), VFH(Vector Field Histogram)

VFF(Virtual Force Field), VFH(Vector Field Histogram)

 VFF또는 APF(Artificial Potential Field)는 가상 중력 벡터장 정도로 번역해서 사용된다. 기본적인 개념은 국소지역에서 장애물을 회피하기 위해서는 장애물에서 밀어내는 힘이 발생하고, 목적지에서 당기는 힘이 발생되는 단위 벡터장을 만드는 것이다. 벡터장위의 로봇은 물이 아래로 흐르는 것처럼 자연스럽게 목적지로 인도된다.

VFF
원본이미지: http://www-personal.umich.edu/~johannb/vff&vfh.htm
 VFF 방법의 약점은 좁은 통로와 같이 장애물이 빈번하게 자리 잡고 있는 지역을 통과해야 하는 경우에 척력의 힘이 교차하기 때문에 아래 그림 처럼 진동하는 성향을 보인다는 것이다.

VFH
원본이미지: http://www-personal.umich.edu/~johannb/vff&vfh.htm
 그 대안이 VFH이다. 그림에서 보는 것처럼 극좌표로 형성된 히스토그램의 굴곡에서 계곡으로 진행하면 장애물이 가장 없는 방향으로 진행하는 것이 되고 그 중에서 목적지와 가장 가까운 방향을 선택하면 된다.


VFH
원본이미지: http://www-personal.umich.edu/~johannb/vff&vfh.htm

VFH
원본이미지: http://www-personal.umich.edu/~johannb/vff&vfh.htm

어떻게 갈 것인가?(How do I get there? - Path planning)

어떻게 갈 것인가?(How do I get there? - Path planning)


 어디를 가고 있는지, 어디에 있는 문제가 해결되고 나면 정말로 지능화된 행동을 취할 수 있는 필요조건을 갖춘 셈이다. 정보만 있다고 이동을 할 수 있는 것은 아니니 어떻게 갈 것 인가의 문제가 대두된다. Path planning은 Localization과 Mapping문제와는 조금 다른 성향을 가지는데, 실제로 운동을 하기 때문에 로봇의 움직임을 제어 해야하고, 실험실내의 환경이 아니라면 위험한 상황이 발생할 수 있기 때문이다.

 다른 분야의 연구와 마찬가지로 다른 전제 조건이 주어진 상태에서 출발된 개념이 많다. 크게는 국소지역에서 장애물을 회피 주행하는 기법과 출발점과 도착점이 주어졌을 경우 최단거리를 계산하는 방법으로 나누어 볼 수 있으며 몇 가지 대표적인 방법에 대해서만 소개한다.

드라마 '카이스트'와 VFF

 VFF를 우리나라에서 일반인들에게 친숙하게(?) 만든 것은 드라마 '카이스트'에서 였을 것이다.

 당시 모래시계로 이름을 알린 김정현씨가 게으른 천재 느낌으로 출연하는데, 로봇 축구에서 상대 로봇을 회피해서 골을 넣은 방법을 회의하는 장면이 나온다. 그 때 김정현씨가 외치는 말 "Magnetic force field!" 정확한 대사는 기억이 나지 않지만 비슷한 느낌으로 말했던 것 같다.
 장애물에서는 척력(repulsive force)이 발생하고 목적지에서는 인력(attractive force)가 발생하는 방법을 사용하면 되지 않냐고 말한다. 사실 드라마의 배경이 되었던, 카이스트의 전자과의 김종환 교수는 우리나라 로봇축구를 세계에 알린 인물이다. 실제로 그 연구실에서 기법을 개발했던 사람은 어떤 기분이 들었을까? VFF(Virtual Force Field)를 우리나라에서 처음 만든 것은 아니지만 로봇 축구에 실제 적용으로 당시에 많은 호응을 얻었던 것으로 기억한다.
 의학, 법학과 관련된 드라마는 많지만 공학에 관련된 드라마는 그리 많지 않다. 미국의 'Big bang theory'의 출연자들이 차기작을 엄청난 거액의 출연료로 계약한 사례를 보면 우리도 공학분야로도 충분히 재미있는 작품을 만들 수 있을 거라는 기대가 든다.(출연자의 계약 금액이 드라마의 질과 반드시 비례하지는 않지만 인기가 반영된 결과라는 추정에서) 꼭 미국식 nerd 개그가 아니라도 말이다.

점유 격자 지도(Occupancy grid)

Occupancy grid mapping

점유 격자 지도

 이동 로봇의 지도 작성에 대해 관심을 가지기 시작한 시절(1980년대 후반)에는 현재보다 센서와 프로세서의 성능이 현저히 낮았다. 센서들은 물리적인 모델을 잘 따라오지 못했고, 바퀴의 인코더로부터 얻을 수 있는 오도메트리(Odometry) 정보는 그 불확실성을 더하게 만들었다.

 그러한 상황에서 확률 기반의 지도 작성 방법을 가장 이상적으로 적용할 수 있는 현실적인 방법이었을 것이다. 여기서 다시 한 번 베이지안 추론 방법이 적용된다.



 각 셀의 점유 확률을 구하는 것이 목적이며, 사전 정보가 없는 미확인 지역에 대해서는 0.5의 사전 확률로 채운다. 그림에서 보인 것은 초음파 센서의 확률 모델인데, 이것이 현재 로봇 위치에서 취득된 값에 대한 우도(Likelihood)가 된다. 초음파 센서는 편각 15도를 가지는 원뿔형태로 방사되는 특징을 가지고 있다. 그러므로 초음파 센서가 인식한 거리는 방사각 만큼의 불확실성을 가지고 있다는 의미가 있다.

이미지 원본: www.frc.ri.cmu.edu

 Metric mapping은 실제 거리 정보에 대해 알고 있으므로 경로 계획에도 중요한 자산이 된다.

어디를 가고 있는가?(Where am I going? - Mapping)


어디를 가고 있는가?(Where am I going? - Mapping)


 어디를 가고 있는가?라는 문제를 해석하기 위해서는 반드시 자기 위치 인식이 필요하다. 이동 로봇의 플랫폼에 장착되어 있을 거리 센서와 영상 정보들은 최초 설정된 글로벌 좌표가 아닌 현재 구동중인 위치를 기준으로 결과를 얻을 수 있기 때문이다.


 \(x_t\)에서 취득한 센서 정보는 \(x_t\)좌표에 대한 것이며, 글로벌 좌표 \(X_g, Y_g\)로 변환해야 하나의 지도에서 관측량을 정의할 수 있다. 불운하게도, 이 과정에서 로봇의 이동 변위에 대한 오차 때문에 정확한 위치에 기입하지 못하는 경우가 생길 수 있다.(이 부분은 Dead reckoning이 가지고 있는 치명적인 단점이다. 관성항법에서도 비슷한 문제를 경험할 수 있는데, 절대 위치를 보정할 수 있는 GPS가 있기 때문에 다행이 특수한 경우가 아니면 큰 문제가 발생하지 않는다.)

 더욱이, 초기에 로봇의 위치를 측정하는 기준은 고가의 센서가 아니라 바퀴에 달린 엔코더에 의존하는 경우가 많았고, 센서의 정확도도 현재보다 더욱 부정확했기 때문에 다시 한 번 확률 기반의 지도 작성 방법이 제안되었다.

 환경 지도를 작성하는 방법론의 관점에서 크게 
  • 위상 지도(Topological mapping)
  • 격자 지도(Metric mapping)
로 분류하여 볼 수 있는데, 위상 지도는 에지와 노드로 구성된 그래프로 중요한 지점과 그 연결정를 가지고 있는 형태의 지도를 말한다. 반대로 격자 지도는 일반적으로 3차원 공간을 2차원 평면에 투영한 형태의 지도를 말한다. Metric이란 수식어에서 알 수 있는 것처럼 각 지점 간의 거리를 스케일로부터 얻을 수 있다.

격자 지도를 대표하는 방법은 Occupancy grid이다.

베이지안 추정 필터(Bayesian recursive filter)


베이지안 추정 필터(Bayesian recursive filter)


 기본적인 베이즈의 정리는 다음과 같다.


 확률론을 기반으로 한 로봇의 위치 추정 문제의 근본이 되는 개념이다.

 베이즈의 정리를 구체적으로 기술한 문서들은 많이 있으므로 기본적인 개념만 서술하면, 모르는 사후확률을 계산할 때 알고 있는 확률과 현재 상태에 대한 확률을 이용하는 개념이다. 가령 스팸메일로 추정되는 메일에는 "대리운전"이라는 문자가 포함되어 있을 확률을 알고 있다면, 해당 메일이 스팸메일일 확률을 계산할 수 있다는 식이다.

 이동 로봇처럼 연속된 상태를 갖는 경우에는 시간의 흐름에 대해서 재귀적으로 베이지안 추정을 적용할 수 있게 된다. 위치 추정뿐만 아니라 물체 인식/분류와 같은 분야에도 광범위하게 적용될 수 있는데, 최근엔 naive bayes라는 이름으로 적용되고 있다. 1700년대에 최초로 제안되었던 것을 생각하면 베이즈의 위대함을 느낄 수 있다.

 마르코프 체인과 함께 정리하면 다음 그림과 같다.



 베이지안 추정 필터의 원리를 재미있는 예로 소개한 것이 S. Thrun의 저서 Probabilistic Robotics에 있는데, 이것을 소개한다.

 문제 정의 : 로봇의 팔이 문을 여는 동작을 할 경우 문이 열릴 확률과 센서로 문이 열렸는지 감지했을 때 정말로 열려있을 확률을 알고 있을 때 문의 현재 상태에 대해서 베이지안 추론을 적용할 수 있는가?

 문제 적용 : 문의 현재 상태(열림, 닫힘)는 상태 벡터를 \(x_t\),  문에 대한 사전 확률은 \(x_{t-1}\)로 정의할 수 있다. 센서를 통해서 감지하는 문의 상태 우도(likelihood)는 \(p(z_t|x_t)\)가 된다.





몬테카를로 마르코프 위치 인식 방법(MCMC(Monte-Carlo Markov Chain) Localization)

몬테카를로 마르코프 위치 인식 방법

MCMC(Monte-Carlo Markov Chain) Localization


 이동 로봇이 어디선가 이동하고 있는데 현재 얻을 수 있는 정보는 거리 센서로부터 얻은 정보이거나 영상으로 부터 입력된 사진등일 경우 로봇의 현재 위치를 어떻게 추정하면 좋을까?
 바로 이전의 위치를 알고 있다면 순간이동을 하지 않는다면, 짧은 시간 내에서는 비슷한 위치에 있을 것임을 추론할 수 있다. 바로 이전의 위치를 정확하게 알 수 없다면, 확률적으로 가중치를 부여한 이전 위치에 대한 다음 위치를 마찬가지로 구해낼 수 있을 것이다.
  이것을 수식화하고 실제 구현을 통해 증명한 것이 Sebastian Thrun이다. Thrun은 현재에도 스탠포드 교수로 재직하면서 활발한 연구를 하고 있다. 구글 무인 자동차 연구 그룹의 수장으로 알려져 있다.

 마르코프 위치 인식에 대해서 이해하자면 베이지안 추정 필터에 대한 이해가 필요하다.

\( Pr(\xi^{(t)}|s^{(t)}) = \frac{Pr(s^{(t)}|\xi^{(t)})Pr(\xi^{(t)})}{Pr(s^{(t)})} \)

 확률론에서 마르코프 체인은 바로 다음의 상태는 과거의 상태가 현재까지 축적된 현재 상태에만 기인한다는 이론이다. 상식적으로도 그렇지 않은가? 로봇이 움직이는 다음 위치는 바로 이전 상태에만 관계가 있지, 그 보다 과거의 상태에 영향을 받을 이유는 없다.

 첨자들과 표기가 바뀌었지만 베이지안 추정 필터에서 소개한 것과 별반 다를 바 없는 식이다.

 실제 구현에서는 몬테카를로 기법을 여기에 함께 사용하는 이유는 연속(Continuous)신호를 표현한 수식을 구현하다 보면 필연적으로 데이터 분해능과 성능의 저하가 발생하기 때문이다. 몬테카를로 방법도 마찬가지로 반복의 횟수와 샘플의 갯수에 따라 성능의 차이가 있지만만, 충분히 많은 수의 샘플을 사용하면 만족할만한 정확도를 얻을 수 있다.

 다음 그림과 동영상은 실제로 Minerva에서 사용된 천정 영상과 Occupancy grid에 대한 위치 인식을 수행한 결과이다.







2014년 8월 18일 월요일

이동 로봇의 3대 문제(Fundamental problem of mobile robots)

이동 로봇의 3대 문제(Fundamental problem of mobile robots)


 이동 로봇에 대한 전반적인 기술과 역사에 대해서 기술합니다. 로봇 분야에 처음으로 발을 딛는 분들에게 우리말로 도움을 줄 수 있는 문서가 되었으면 좋겠습니다. 편의상 경어를 생략하오니 양해하여 주시기 바랍니다.

 자율 이동 로봇을 위한 여러가지 문제들 중에서 핵심적으로 다음 세 가지를 정의할 수 있다. 각각의 분야는 모두 서로 연결되어 있으므로 하나의 문제를 해결하면 다른 문제를 보다 쉽게 해결할 수 있거나, 반대로 하나의 문제를 해결하지 못하면 다른 문제도 해결할 수 없는 관계가 있다.






 자율 이동 로봇의 알고리즘이 시작되는 시기에는 연구자들이 각 문제를 따로 생각하는 경향이 있었으나, 90년대 후반부터 현재에는 1, 2번의 문제를 동시에 확률 적으로 해석하는 방법을 취하게 된다. 이것을 CML(Concurrent Mapping and Localization) 또는 SLAM(Simultaneous Localization and Mapping)이라고 정의하고 부른다.  SLAM이라는 키워드로 IEEE 검색을 해보면 2600여개의 논문이 검색되고, 지금도 새로운 연구 결과가 제시될 정도로 활발한 연구분야이다.

 각 문제 하나를 해석하는 것 만으로도 당시의 이동 로봇의 발전에 많은 기여를 한 것으로 이름을 알린 분들이 많다. 그 만큼 한 가지 기술분야에 대해서 정복하는 것도 많은 노력이 필요하다는 방증일 것이다. 각 기술의 상세 내용은 해당 링크에서 소개하고, SLAM은 별도의 분류로 소개하도록 한다.

어디에 있는가?(Localization)

어디에 있는가?(Localization)


 위치 인식을 위해서는 알고 있는 위치에 존재한다는 가정이 필요하다. 지도의 형태는 영상 일 수도 있고, 거리정보 일 수도 있지만 모르는 환경이 아니라 알고 있는 환경이라면 자기 위치를 인식하는 것이 가능하다.

 가장 독보적인 진전과 활용을 보인 것은 아마도 독일 bonn 대학의 박물관 가이드 로봇 리노와 미네르바(Rhino & Minerva)일 것이다. 실험실에서 벗어나서 실제로 박물관에서 관객들이 있는 동적 환경에서 성공적으로 주행을 한 첫 번째 기록일 것이다. 당시로서는 로봇을 실험실이 아닌 일반 대중 앞에서 시연하는 것은 무모한 것처럼 보일 정도로 시스템의 안정성에 대한 확신이 없었더라면 힘들었을 일을 해냈다.



 1998년 8월 24일부터 9월 5일 까지 31시간 동안 44,018m를 주행한 것으로 기록되었다.

The museum tour guide robot minerva
(Photo courtesy Sebastian Thrun)
Rhino를 만져보고 있는 어린이 관람객
(Photo courtesy Sebastian Thrun)
 위치 인식 방법은 몬테카를로 확률 기반 위치 인식 방법을 사용하였다. 레이저 거리센서와 천정 카메라를 이용한 위치 인식 방법을 사용한 것으로 기록되어 있다.