Graph SLAM

초기에 출시된 진공청소 로봇은 사실 무작위로 설정된 방향으로 움직이며 청소를 하는 수준이었으며, 장애물과 같은 것만 피하는 기능을 가진 초보적인 로봇이었다. 그러나, 현재의 주율주행차는 과거의 로봇과 비교 불가능할만큼 높은 수준의 능력을 가지고 있다. 그런 능력향상의 중심에는 주변환경을 주행중에 정확히 mapping하는 능력을 바탕으로 한다. 이처럼 주변환경을 인식하고 입체적으로 주변 물체의 움직임 및 속도까지 동시에 알아 내는 능력은 mobile robot이나 자율주행차에 장착된 센서를 기반으로 하며, GPS와 같이 외부로 부터 정보를 전송받아 주변환경을 인식하는 것이 아니다. 움직이는 로봇은 오로지 센서만을 의지해서 현재의 위치파악 및 주변환경 map 추정해 내는 기술이 구현되어 있다면, 그 자율성은 크게 확장될 수 있다.

Localization은 기본적으로 상대적 위치의 개념이 포함되어 있다. 즉,  measurements는 landmark가 되는 지점의 거리를 측정해서 현재의 위치를 추정하는 방식이다.   Landmarks는 위치정보를 알고 있다고 가정한다면, 이것은 map과 연관된 정보가 있다는 것을 의미한다. 즉  mobile robot은 environment 에 대한 정보를 이미 가지고 있다는 의미이다. 하지만, 로봇이 항상  environment에 대한 정보를 가지고 있다고 가정할 수는 없다. 실제 지도에도 없는 미지의 지역을 주행하는 자동차는 주변환경에 대한 정보와 그 환경속에서 어느 위치에 있는지 동시에 파악해야 한다. 이처럼 localization 과 mapping 을 동시에 수행해야 하는 과제가 생기는데, 이것을 SLAM(Simultaneous Localization And Mapping)이라고 한다.


이 분야에 대해 전문지식이 없는 필자는, localization글을 올리면서도 map정보를 알고 있다는 가정에 대해 불편한 의문을 계속 가지고 있었다. Map 정보가 없는 경우에 rangefinder를 통해 주변 환경을 단지 장애물 유무를 인식하는 관점의 접근 방법은 스마트한 주행이 불가능하다고 생각하기 때문이다. 이러한 근본적 의문점을 이 분야의 전문가들은 해결방안을 고안해 냈을 것이라고 생각했고, 이것에 대한 기본적 해결 방안이 SLAM기술이라는 것을 발견했다. Google을 통해 검색해 보면, SLAM에 대한 자료도 비교적 많지만, 계산량이나 메모리를 줄이기 위한 기술을 포함하여 매우 다양한 기술이 존재한다는 것을 알 수 있다. 최근 급속한 발전을 이룬 기술이다 보니(센서와 컴퓨터의 도움이 큰거 같다), 여러 기법 및 이론들이 동원되어 있고, 이에 대한 이해를 높이려면 아무래도 시간을 더 투자해야 할것 같다.


graph SLAM

SLAM문제를 해결하는 직관적 방법을 고안한다면, graph에 기반한 방법이 우선 시도될 것이다. 이 방법을 SLAM중에서도 graph SLAM이라고 하며, 아래 그림의 예시와 같이 로봇의 위치나 landmarks의 위치를 노드(node)로 표현하고, 각 node를 연결하는 edge는 node간의 관계 또는 constraints를 의미한다(이것은 sensor를 통한 measurements로 부터 얻은 정보를 표현하는 방법이다.)

graph SLAM image1

위 그림에서 measurements를 통해 얻은 정보  u_i / z_i를 통해 robot의 position(x_i)과 landmarks의 position(m_i)을 robot이 주행하는 동안에 추정하는 기술이라고 설명할 수 있다. 그러나, 나를 포함하여 많은 사람들은 분명하고 정확한 계산 결과를 원하지만, 모든 정보의 원천인 sensor의 measurements값이 정확치 않다면 그 결과값도 분산을 가질수 밖에 없을 것이다. 그러므로, SLAM은 기본적으로 localization과 마찬가지로 확률분포의 개념을 배제하기 어렵다. Full SLAM문제를 해결하는 것을 한마디로 표현한다면, measurements정보가 주어지면, 이것을 이용해서 robot의 주행경로 x_{1:N}의 posterior probability와 주변 환경의 map  m 을 구하는 과정이라고 표현 할 수 있다.

 p(x_{1:T}, m | z_{1:T}, u_{1:T}, x_0 )

여기서, u_{1:T}는 odometry 정보를 의미하고, z_{1:T}는 주변 환경 map을 추정할 수 있는 정보를 의미한다. 이러한 주변환경 정보를 얻어내는 센서에 따라 주변환경을 측정하고 표현하는 방법이 달라질 수 있는데 인터넷에는 SLAM에 의해 구현된 map의 다양한 형태를 쉽게 찾아 볼 수 있다. 아래는 구글의 3D SLAM의 예를 보여주는 동영상이다.

SLAM문제를 해결하는 방법중 가장 기본적인 접근방법은 least square method를 이용하는 것이다. 이 방법은 linear algebra측면에서 매우 중요한 방법으로 연립 방정식의 해를 통해 로봇의 이동시 위치 좌표와 landmarks의 위치좌표를 이동거리라는 측정정보와 landmarks와 로봇간의 거리정보를 동시에 이용하여 산술적으로 풀어내는 방식이다. 모든 정보를 축적하고 이 데이터를 통해 robot 위치좌표와 environment map을 한꺼번에 구하는 방법을 full  SLAM이라고 하며, 이동하면서 얻은 정보는 지속적으로 정보로서 추가되면서 연립방정식을 풀어내는 방법을 online SLAM이라고 한다. 그러므로, 후자는 고정된 state dimension내에서 해를 구하는 것이 아니라 dynamic하게 state dimension이 변하지만, 새로운 measurement information을 기존 information을 이용하여 새운 방정식에 쉽게 추가하여 새로운 연립 방정식을 세운다. 구해진 로봇의 위치좌표는 localization을 의미하고, landmarks의 위치좌표는 mapping을 의미한다.

SLAM 간단 테스트

수학적 원리는 간단하지만 이를 구현하는 것은 knowhow가 필요한 작업이다. 일단, 2D space에서 로봇이 주행하면서 얻은 measurements data를 이용하여 SLAM을 적용하여 계산해 보았다. 아무래도 데이터가 많지 않고, 실제 물리적 실측에 의한 데이터가 아니고 random으로 생성한 자료를 이용하다 보니 현실감이 떨이지지만, SLAM기법의 기초적 가시화에 목표를 두었다. 아래 계산 결과는 이 데이터를 사용하여 이동하는 로봇의 위치좌표들과 landmarks의 위치좌표를 SLAM기법을 사용하여 계산한 결과이다. 특히,  이동 로봇의 위치좌표는 ground truth가 없어 비교평가 할 수 없지만, landmarks 데이터는 ground truth data와 SLAM의 예측 데이터를 비교해 보면 거의 일치한다는 것을 알 수 있다. 푸른색으로 표시된 trajectory는 로봇의 주행 경로이다. 시작점은 정중앙이다.

SLAM result

Note) 이 기술과 관련하여 실제데이터를 이용하여 보다 현실적인 SLAM을 구현하고 그 결과를 다음에 포스팅할 계획이다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중