본문 바로가기

공부

Monte Carlo Robot Localization 공부했다

 앞으로의 포스트는 Udacity에서 무료로 제공하는 Sebastian Thrun 교수의 Probabilistic Robotics 강좌의 공부 내용을 정리한 포스트가 되겠다. 그 목차는 다음과 같다. 


Lesson 1: Localization (using Histogram Filters)

Lesson 2: Kalman Filters

Lesson 3: Particle Filters 

Lesson 4: Search 

Lesson 5: PID Control 

Lesson  6: SLAM (Simultaneous Localization And Mapping)


 이렇게 기초 강좌가 진행될 예정이다. 필요한 기본 지식은 다음과 같다.


영어

확률과 통계에 대한 작은 지식

파이썬 프로그래밍


 그럼 첫 번째 강좌의 정리로 Monte Carlo Robot System을 실습해 본다. 

말이 어려울 뿐 상황은 다음과 같다.  이것과 앞으로의 모든 사진들을 udacity가 출처임을 밝힌다.


 - Copyright@2014 Udacity, Inc All Rights Reserved (for all images/if (there's any problem) will shutdown post;) -


Copyright@2014 Udacity, Inc All Rights Reserved



  기본적인 1-D 로봇이 있다고 치자. 이런 아무것도 없는 복도에서 로봇이 던져졌을 때, 복도 전체에 걸쳐서 로봇이 그 위치에 있을 수 있는 확률은 모두 동일하다. 그래서 각 위치에 있을 확률은 아래와 같은 Uniform 확률이 된다. 그런데. 


Copyright@2014 Udacity, Inc All Rights Reserved


 그냥 복도가 아니고, 이런 초록색 문이 있는 복도, 그리고 로봇이 카메라와 같은 센서를 달고 있는데, 로봇이 초록색을 감지했다고 치자. 그러면 위 상황에서 문이 3개가 있으므로 로봇의 위치가 될 수 있는 후보군도 3곳 그래서 로봇이 위치할 확률을 나타내면 맨 아래 그림과 같이 봉우리(modal)가 3개가 있는 확률 분포가 나타나게 된다. 


Copyright@2014 Udacity, Inc All Rights Reserved


 우리의 귀여운 로봇이 움직였다!! 그런데 이 움직임도 불확실성(uncertainty)을 내포하고 있다. 로봇이 자기는 1만큼 움직였다고 하는데 실제로 1.2일지, 0.8일지 모르지 않은가!!! 그래서 로봇이 이동을 하고 난 뒤의 확률분포는 맨 아래의 모양을 가지게 된다. 이 motion의 불확실성은 기존 확률분포에서 convolution을 취한 형태가 된다. 여기서 product와 convolution의 차이를 알고 넘어가길 바란다. 


Copyright@2014 Udacity, Inc All Rights Reserved


 자 이동을 하고 난 뒤, 우리의 로봇은 다시 초록색 문이 있다고 감지하였다. 그러면 이번에는 후보군들 중에서 확실한 본인의 위치를 알 수 있다. 이는 measurement의 확률과 기존의 확률분포를 곱하는(product) 과정이라고 할 수가 있다!! 


- 정리를 해 보자 -


Measurement - Product

Motion - Convolution

무엇을?


기존의 확률 분포에 각 행동의 certainty를 연산한다.


그래서 결과 값들 중에서 가장 높은 확률을 가지고 있는 위치가 로봇의 현재 위치라고 할 수 있다!! 다만 여기에서는 로봇이 복도의 어디에 문이 있는지를 미리 알고 있어야 한다. 간단히 Map을 이미 가지고 있다는 것을 내제한다. 그럼 Map이 없을 때에는?? 이는 후에 배울 SLAM과 연관된다. 



Copyright@2014 Udacity, Inc All Rights Reserved



 중요한 개념 하나를 더 배우고 넘어간다. 이전에는 확률 분포가 Continuous(연속적)이었다고 하였다면 이번에는 계산의 편의를 위해서 구역을 나누어 Discrete(이산적)한 환경이라고 가정한다.

 로봇이 빨간색을 보았다고 하는데(로봇 너무 귀엽....다 ㅠ), 이 로봇이 센싱이 정확하지가 않다. 빨간색이 맞은 확률이 0.6이고 잘못 봤을 확률이 0.2란다. 각 위치에 있을 확률은----????


Copyright@2014 Udacity, Inc All Rights Reserved


 0.2로 초기 확률은 모두 동일하므로 각 위치에서 본인 색에 맞는 확률은 곱해주기만 하면 된다. 그런데!!! 모든 확률의 합은 '1'이어야 한다는 대원칙을 위배해 버렸다! 문제없다 전체가 1이 되도록 우리가 조작해주면 된다. 이 과정을 Normalizing이라고 한다.


Copyright@2014 Udacity, Inc All Rights Reserved

 

 이렇게 센서의 불확실성을 반영하는 법을 알아보았다. 그럼 이번에는 motion의 불확실성을 반영하는 방법에 대해서 알아본다. 


Copyright@2014 Udacity, Inc All Rights Reserved


 예외 처리를 확실히 하기 위해서 우리 로봇이 움직일 복도가 cyclic하다고 가정하자. 위 그림을 보면 이해가 쉬울 것이다. 앞서 말한 바와 같이 로봇이 1움직였다고 해도 1.1일지 0.9일지 확실하지 않다 그 불확실성을 반영하는 법을 알아보자!


Copyright@2014 Udacity, Inc All Rights Reserved



 우리의 로봇이 정확하게 움직일 확률은 0.8이고 한칸더 움직이거나 한 칸 덜 움직일 확률은 0.1이라고 한다. 그럼 로봇이 실제 움직일 때 확률을 계산해 본다. 


Copyright@2014 Udacity, Inc All Rights Reserved


 로봇이 2칸 움직일 때, 1칸 움직일 때 계산을 표현하였다. 


Copyright@2014 Udacity, Inc All Rights Reserved


 그럼 이번 문제는 로봇이 이전에 2번째, 4번째에 있을 같은 확률을 가지고 있었다고 하였을 시, 롮이 이 상태에서 2번 움직임을 시도한 뒤에 각 위치에 있을 확률은 구해 보자


Copyright@2014 Udacity, Inc All Rights Reserved

위와 같다! 여기서 5번칸을 보면 2번째 칸에서 한 칸 더 갔을 경우와 (=0.5 * 0.1) 네 번째 칸에서 한 칸 덜 갔을 경우의(=0.5 * 0.1) 확률의 합임을 알 수 있다! 그런데 Measurement와 달리 motion이후에는 자동적으로 모든 확률의 합이 1이 됨을 알 수 있다. 그렇다면!!!! 맞다 Normalizing을 따로 해 줄 필요가 없다는 것이다!! 아래의 예를 보면서 다시 살펴보자.


Copyright@2014 Udacity, Inc All Rights Reserved


 그럼 모든 칸에서 같은 확률을 가지고 있는 uniform 분포에서 motion을 시행하면, 


Copyright@2014 Udacity, Inc All Rights Reserved


 이렇게 시행을 하고 나서도 모든 칸이 0.2로 다시 uniform한 분포가 된다!! 이것은 모두 motion연산이 convolution이기 때문이다. measurement는 product 연산이기 때문에 normalizing을 해주어야 했던 것이다. 


Copyright@2014 Udacity, Inc All Rights Reserved


 measurement를 구할 때 필요한 중요한 개념이 있다. 바로 Bayes' Rule!!!! 일단 그 식은 위와 같은데, P(x)가 어떤 위치에 있을 확률, P(Z)가 measurement가 맞을 확률이라 한다면, P(xㅣZ)은 measurement를 한 뒤에 그 위치에 있을 확률이 되겠다. 그런데 이를 바로 구할 수는 없다. 그래서 위 공식을 사용하는데, P(x)는 이전 그 위치에서의 확률이므로 이미 알고 있고, P(Zㅣx)는 그 위치에서의 measurement의 확률이기에 이미 알고 있는 값이다. 말로 해서 잘 와닿지가 않는데 그림에서


Copyright@2014 Udacity, Inc All Rights Reserved


 로봇이 이미 움직이고 난 뒤 measurement를 했더니 빨간 색이라고 한다. 그런데 맞을 확률 P(Zㅣx)은 0.6이고 이전 위치에서의 확률 P(x)는 0.2로 모두 동일했다.(사실상 그럴 일은 없지만) 그럼 P(xㅣZ)는 0.2*0.6을 하면 끝인 것이다. 그런데!! 앞에서 이렇게 했더니 문제가 있었다. 모든 확률의 합이 1이 되지 않는 것이다!! 그래서 Normalize를 한건데 이것에 대한 해결이 바로 P(Z)로 나누어 주는 것이다!!! 여기에서 다시 한 번 중요한 것을 깨닫는다. 사실상 나누기 P(Z)를 매번 하지 않아도, 모든 확률을 구한 뒤 Normalize를 해주면 된다는 것이다! 지금까지 Bayes' Rule의 이해였다.



  사실 이 모든 과정을 파이썬을 이용해서 프로그래밍하는 실습들이 있었다. 다음 포스트에서는 그 실습을 다루어 본다.