728x90

수학적 모델링

 자연 과학 및 공학 분야에서 문제해결을 하기 위해서는 해당 현상이나 공학 문제를 수학적 모델링하여 방정식 구함

 

과학적 현상 방정식의 예시

- 파동 방정식, 맥스웰 방정식 등

 

방정식의 예시

- 대수 방정식 algebraic equation : 미지함수에 대한 사칙연산으로 나타내는 방정식

- 미분 방정식 differential equation : 미지수에 대한 미분으로 이루어진 방정식

- 적분 방정식 integral equation : 미지수에 대한 적분이 들어있는 방정식

- 미적분 방정식 integro-differential equation : 미지수에 대한 미분과 적분 요소를 가진 방정식

- 연립 방정식 : 여러개의 방정식들로 이루어진 방정식

 

 

해석적 방법론 analytic method

- 수학적 방법을 이용하여 해 solution을 구하는 방법

 

수치적 방법 numerical method

 - 컴퓨터를 이용하여 해를 구하는 방법

 

 

 

 

자연, 공학에서의 문제 해결 과정

1. 자연 현상, 공학 문제

2. 수학적 모델링

3. 대수방정식, 미분방정식, 연립방정식 등

4. 방정식의 해를 구함(해석적 or 수치적 방법으로)

5. 결과 도출

 

 

 

미분 방정식의 예시

1. 뉴턴의 제 2법칙

2. 가속도에 속도의 시간에 대한 미분 대입

3. m을 지우면

- 위와 같이 미분으로 이루어진 식이 미분 방정식 differential

 

종속변수, 독립변수

- 종속 변수 dependent variable : 독립 변수로 부터 얻을수 있는 미지 수

- 독립 변수 independent variable 

- 미분방정식을 푼다 = 미분방정식의 해를 구한다.

 

미분 방정식의 해

- g는 중력가속도 상수, c는 임의의 상수

 

초기 조건

- v(0) = 0과 같이 초기조건이 주어지면 임의의 상수 c를 구할수 있으며, 해를 정리할 수 있음.

 

300x250
728x90

수치 해석 전반 정리

 

1. 수치해석 시작

수치해석은 무엇? 왜 해야하는가? 어떻게해서 수학문제릃 해결할수 있는가?

-> 오차 -> 알고리즘

 

 

 

2. 변수가 하나인 비선형 방정식

이것의 솔루션 해를 찾기 힘들면

어떤 수치적인 방법을 찾을수 있겠는가 소개

bisection method, secant method, newton's method, muller's method 등 봄

 

 

3. 이산 데이터를 다항식으로

이러한 해를 찾는 방법들이 끝나면

실험이나 자현현상의 데이터는 끊어짐 연속되지 않은 이산적인 데이터

이산 데이터를 어떻게 스무스한 커브로 만들까?

-> largrange polynomial, divided difference

hermit interpolation, spline

 

 

4. 실제에 가까운 값 구하기

미분이 가능한 도함수 경우만 다룸

적분 역시원시함수로 정적분값을 정확한 가질수 있었음.

위와 같이 정확한 값을 못구하는 경우 어떻게 최대한 true value에 가까운 값을 구할수있는 방법

 

 

5. 초기치가 주어진 미분방정식을 해석적 방법으로 풀수 없는 경우

이후 공헙 수학, 미분방정식 문제를 다룸

특히 초기치가 주어진 미방 문제가 있을떄

해석 해 analytic solution, 미방 해를 손으로 풀수 없는 경우 어떻게 풀까?

taylor method나 runge-kutta method, predictor-crrector method 등 여러 방법들을 서로 비교하여

장/단점을 비교해보자

 

 

 

6. 연립일차 방정식 수치 해 구하는 방법 - 직접법

선형 대수와 관련된

선형 시스템, 연립일차 방정식

변수가 두개, 방정식이 두개인 경우 손으로 풀수 있으나

많아지면 손으로 풀수 없음.

연립일차방정식의 솔루션을 찾는 수치적 방법들을 소개

 

첫번째. direct method 직접법, 반복적 연산이 아니라 바로 해를 찾을수 있는 방법

-> 가우스 소거법

가우스 소거법을 할때 더 정확한 해를 구하기 위해 하는 pivot, inverse matrix를 구해서 하는 방법, factorization

연립 일차방정식에서 주어진 행렬 A를 어떻게 나누고 해를 찾을수 있겟는가 하는 방법들을 소개

특별한 행렬들은 쉽개 해를 찾을수 있는 방법이 없을까 찾아봄

 

 

 

7. 반복법

direct method에 알고리즘을 넣으면 바로 해가 나옴

-> 다른 반복해서 해를 찾는 방법을 소개

norm이라는 개념이 필요

iterative method 소개

행렬이 특별한 성질을 가진 행렬이라고한다면 좀더 iterative method가 없는지 함깨 소개

 

 

8.  근사 approximation

문제들이 주어졌을떄 얼마만큼 거기에 유사한 가까이에 해를 찾는가 하는 방법

연립일차방정식에 해가없다고 풀지 못하는게 아니라 근사한, 해와 유사한 역활을할수 있는 근사값을 찾는 방법 소개

 

 

 

 

9. 고유값, 고유벡터 구하는 문제

고유값과 고유벡터를 구하는데 결적적인 역활을 하는 분해 방법들이 있음.

대각화 diagonalization

수학적 이론상 중요한 역활을하는 jordan canonical form

수치적 방법으로 유명한 schur decomposition

decomposition 중에서 아주 인기가 높아지는 singular value decomposition

 

앞에서 예기한 고유값을 어떻게 수치적으로 찾을수 있겠는가

householder, QR method까지 소개함

 

 

10. 비선형 방정식의 해를 찾는 방법들

- 하나인 경우 bisection method나 newton's method썻으나 변수가 여러개, 방정시고도 여러개

- 이러한 것들을 시스템이라고 하면, 비선형 시스템에 대한 솔루션을 구하는 방법

-> newton's method, quasi-newton method

 

 

11. 미분방정식 문제중 경계치가 주어진 경우(boundary value problem)

- linear shooting method, nonlinear shooting method 등 장단점 비교

 

 

 

12. 편미분 방정식

- 해석 솔루션을 찾을수 없다면 어떻게 수치적인 방법으로 근사해를 찾을수 있을까

- 유명한게 finite difference method, finite element method

 

 

 

-----------------------------------------------------------------------------------------------

수학이란 무엇인가

 

 

1. 수치 해석을 하기 전에 선수 과목

 

선형 대수, 미적분, 미분방정식(공업 수학)

+ MATLAB 같은 코딩 언어

 

 

 

2. 수학 이란 무엇일까?

 우리는 평생 수학을 공부했지만 왜 공부한지 잘모름

 

산업 발전에서 중요한 역활, 과학의 언어

 

--------------------------------------------------------------------------------------------------

 

수치 해석이란 무엇인가

 

1. 사전적 정의

 

근사 approximation,

오차 error

 

근사값과 에러만 구하는 학문 ? 부족함.

 

수치적 방법을 이용한 수학적 한 분야 ? 이해하기엔 부족

 

Llyod Trefethen(옥스포드 대)

- 수치해석의 정의 : continuos mathmatics 연속적인 수학문제를 다루는 알고리즘을 개발해서 함께 공부하는 과목

 

 

2. 오차, 에러란?

 

x라는 참값이 존재

x*는 x에 대한 근사값. 여러개 존재가능

 

근사값을 하나를 선택 시 차 -> 절대적 오차 absolute error(참값과 선택된 근사값의 차)

절대 오차를 참값의 절댓값으로 나누는 경우 -> 상대적 오차 relative error

 

무슨 에러가 좋은가? 둘다 장단점을 가지고 있어서 사용됨

 

절대 오차의 장점

- 계산하기 쉬움, 얼마만큼 틀린지 정확히 눈에 보임

상대오차의 장점

- 상대적인 에러의 크기를 알 수 있음. 

 

100 - 1, 10 - 1 -> 두 경우다 절대 오차는 1이나 상대 오차는 1/100, 1/10이 됨 오차의 영향을 알 수 있음

 

 

3. 근사

참값을 알고 있으면 참값을 쓰면 되나, 

오차 계산은 실제 참값을 아는 문제를, 수치적 방법으로 근사값을 구하여 비교

 

참값을 모르는 문제가 있을때 어떻게 할까?

참값을 아는 문제로 개발한 방법으로

참값을 모르는 문제에 적용하여 해를 구하면 에러가 어느정도 안에 들어갈것이다 생각하고 문제 품.

=>참값을 모르더라도 수치적인 방법으로 근사값을 구해 사용

 

 

 

4. 수학적 모델

 참 값을 모르더라도 오차는 적은게 좋음

에러가 어디에서 발생하는가? 파악하면 오차를 줄일수 있지않을까? -> 수학적 모델 이용

 

 

5. 알고리즘

- 알고리즘을 구현하여 근사값을 구하려고함.

- 알고리즘 고안 시 중요한 것은 알고리즘이 stable 한지 unstable한지 확인해야힘.

- 인풋 데이터의 에러로 알고리즘이 수학적으로 안정적이고 참이나 unstable할 수 있음.

- 알고리즘을 버리기 보다는 조건을 주면 안정적이지 않을까 고민해야 함.

 

 

6. 반복법 iterative method

- 반복법을 이용하여 해를 찾을것임 -> 해로 수렴하는가 안하는가는 매우 중요함

- 수렴성 뿐만아니라 얼마나 빨리 수렴하느냐 rate of convergence도 매우 중요함

 

 

 

-------------------------------------------------------------------------------

 

수치해석의 영역 - 수치해석은 어디에 있는가?

 

 중학교에서 처음 집합을 만남

집합들 사이 원소간의 관계 -> 대응 correspondence

의미 있는 대응들 =>함수 function

 

 대학교 1학년때 극한을 배움

- 연속인지 알야야 함 -> 미분 -> 도함수

 

 직선은 1차원. 차수가 낮음 but 우리가 사는 공간은 3차원, +시간을 한다면 4차원

=> 함수는 몇차원으로 주어짐

 

 우리가 모르는 미래를 방정식을 세워 예측해야함

- 자연 현상을 수학적으로 표현하면 미분이 들어감.

-> 미래를 예측하기 위해 미분 방정식이됨

=> 미분 방정식은 이 세상을 표현하는데 매우 유용함.

 

 수치해석은 미분 방정식을 해결함

- 미분 방정식을 어떻게 수치적으로 푸는것인가가 중요

 

 미분의 개념이 없다면 비선형 방정식 뿐일 것

함수들 중에 linear 선형성을 가진 함수를 고려해야함

- 행렬로 표현하여 연립 일차 방정식을 어떻게 풀까?

행렬로 고유값과 고유벡터는 어떻게 될까?

행렬을 어떻게 분해하여 활용할수 있을까?

함수를 이용해서 차원과 함꼐 설명하면 무엇을 하는지 설명이 가능해짐

 

 

 

 

 

 

300x250
728x90

7월

 확률로봇 공학과 이와 관련된 개념들을 찾아 본 후에

내가 어떤 방향으로 공부해 나가야될까 싶어 고민하다가

알고리즘에서 계산 복잡도를 자주 다루어야 하므로 계산 이론과

실제 알고리즘을 구현하는 파이썬 알고리즘에 대해서 정리하려고 했었다.

 

 그런데 이 부분들을 다 살펴보기에는 혼자서 공부하기 너무 힘들고, 지역적으로 보는것 같아 멈추고

확률적 로봇공학을 복습하였으니 이제 할수있을것같아 파이썬 로보틱스를 다시 살펴봤다.

- 히스토그램 필터 위치추정, 가우시안 그리드 맵핑, 광선 투사 그리드 맵핑, 라이다 스캔 맵핑, EKF SLAM, FastSLAM까지

 

 중간 중간에 확률적 로봇 공학의 내용 일부와 SLAM 파트에서 FastSLAM과 GraphSLAM을 다른 자료를 참고해서 추가로 정리할 수 있었다.

 

 

 

 

 

 

  3개월 그러니까 1학기와 비슷한 시간 동안 알고리즘, 이산수학, 제어공학, 로봇공학, 임베디드 등

상당히 많은 분야들을 한번 훑어봤다.

제대로 이해하거나 활용해보았다고 하기는 힘들지만, 그래도 공부하면서 막힌 부분들은 많이 뚫렸다.

 

 하지만 공부하면 할수록 배워야 될게 늘어나는것 같다.

전에는 뭘해야할지 몰랏다면, 로보틱스를 정리하면서 내가 뭘 모르는지 조금 더 알게되었고

조금 더 이해도를 높이려면 어떤걸 공부해야할지 이제서야 조금 감은 잡힌다.

 

 추후에는  인공 지능 이론과 수치 해석, 최적화 이론, 회귀/다변수 해석,

데이터 마이닝 등의 분야를 공부해 나갸야 될거같긴 하다.

 

 머신러닝과 영상처리, 경로계획 같은것들도 보기는 해야하는데

정말 공부해야할 내용들이 끝이 없다.

 

 

 

 

 

 

 아무튼 내가 3개월 간 블로그에서 공부한 내용은 이정도로 정리할수 있을것같다.

공부한 내용을 정리하다보니 원래 어떻게 할까 생각정리하려고 근황글을 시작했는데 잊고있었다.

 

 그래서 내가 이런 분야들을 두루두루 공부하는게 맞는지가 조금 걱정된다.

작년에 그렇게 아는게 부족한 상태로도 정말 감사하게도 취업 기회가 올수 있었던건

그만큼 두루두루 경험해본 개발자가 부족해서 그런것 같다.

 

 

 지난번에 "능력있는 개발자는 어떻게 알아볼수 있나?"라는 글의 리뷰를 적었었는데

https://throwexception.tistory.com/441?category=849462

 드레퓌스 모델에 비교하면 대부분의 단기(6개월~1년) 속성 교육을 받는다 해도 아주 열심히 해서 Advanced Begineer까지 도달할지 몰라도, Competent 수준의 능력을 갖추기는 힘들어 보인다.

 

 

 

 

 

 다른 연구실이 어떻게 운영되지는 모르나

 

컴퓨터 구조, 컴파일러, 운영체제, 이산수학, 알고리즘, 네트워크, 데이터베이스, 리눅스, 계산이론,

소프트웨어 공학, 전기, 전자, 설계, 확률 통계, 회귀분석, 다변량분석, 미적분, 수치해석, 해석학,

영상처리, 로봇공학, 인공지능, 제어공학, 회로이론, 동역학

 

 같은 학문들을 다 할수 있는 사람이 얼마나 될까?

 

 한번은 항공우주학과 학생이 블로그에다가 직접 드론 회로부터 제어 알고리즘까지 구현해서 안정적으로 호버링을 하도록 만든걸 본적이 있는데, 정말 대단하다고 밖에 할수가 없다.

 링크 : https://blog.naver.com/ejtkddl/220396626106

 

 

 

 

 

 내 딴에는 수렁에 빠져서 삽질하는 시간을 줄이려고,

중간 중간에 공부 근황과 앞으로 뭘 해야할까 생각하는 시간을 갖고는 있지만

여전히 어떻게 해나가야될지 잘 보이지 않고,

다방면으로 보다가 다방면으로 계속 헤매고만 있을까봐 걱정이 되기도 한다.

 

 

 

 

 

 이전에 "왜 지금 로봇 공학을 공부할까"라는 글에서

팬더 님의 글을 얘기한 적이있었는데 다시 정리해보면

https://throwexception.tistory.com/354?category=849462

https://okky.kr/article/401948

소프트웨어 분야의 전문화, 계층화에 따른 직업경로의 변화

1. 초창기 소프트웨어는 가지도 별로 없는 어린 나무였고,

대부분의 개발자가 비슷한 지식들을 공유하고, 뛰어난 사람은 모든 분야를 섭렵할수 있었음.

 

2. 시간이 흘러 소프트웨어가 수직 수평적으로 폭팔적으로 팽창

but 우리의 학습 능력은 확장되지 않음.

 

3. 소프트웨어는 실생활의 더 많은 문제들을 다룰수 있도록 많은 추상화 계층이 추가됨.

- case of web

 모든 것을 메모리 포인터로 다루던 C -> 추상적인 수준에서 해결하기위한 C++ -> 메모리 관리 해결을위한 가상머신에서 구동되는 언어(ex.자바) -> 웹 저수준 문제를 해결하기 위한 서블릿 컨테이너 -> 웹 서비스를 구축하기 위한 프레임워크

 

4. 추상화가 많아지는 이유는 개발자의 수준이 떨어져서가 아니라.

메모리 관리같은 저수준의 내용보다 위에 어렵고 중요한 문제가 많기 때문

 

5. 위 나무는 가지도 많아지고, 키도 커졌지만 잎의 면적은 변하지 않음.

잎의 면적은 개발자 개인의 능력에 달렸기 때문.

+ 천재가 아닌 이상 뿌리부터 모든 잔가지를 보는건 불가능

 

6. 근본 지식만 있으면 다할수 있것이라 생각할수도 있으나

가지가 아주 많고, 나무가 높으므로 힘듦

 

7. 실무 지식만 있으면 된다고 생각하는경우

나무 한끝자락에서 협소하게 머무를것임.

 

8. 뿌리부터 보기보다는 나무 전체를 멀리서 보고, 크기를 파악한다음 가지들을 파악.

그 다음 원하는 부분을 찾아 친숙해져야함.

 

9. 단기 속성으로 배워서 투입되는 경우. 나무의 특정 한 가지 끝 어디에서만 머물고,

기술의 깊이나 폭을 넓히기 위해 방향을 잡지못하는 경우가 많음.

 

10. 이러한 한계를 느낄때 무턱대고 뿌리 부근에 있는 주제에 덤비다가

포기하다가 실무와 연관성을 찾지못해 실망하는건 안타까운 일.

 

11. 지금은 과거와는 달리 뿌리부터 시작해서 여러 끝에 도달하기는 불가능해진 시대.

 

12. 시작하는 지점에 따라 문제의 성격과 우선순위가 달라짐

뿌리 근처의 개발자에게는 자료 구조 성능을 빅오 표기법이 중요할 것이나.

중단 근처의 개발자에게는 배열리스트가 컬랙션의 어디에 있고 왜 인터페이스를 구현하는지 이해하는게 중요.

 

13. 지금 시대에는 모든 개발자가 같은 위치에서 시작되지 않고, 시작 지점에 따라 수준이 정해지는것도 아님.

개발자의 수준은 어디서 시작하건, 시작위치로부터 깊고 넓은 영역을 다룰수있느냐로 결정.

그 영역을 넓히기 위해 시작점 위든 아래든 강하게 관련된 내용 순서대로 익혀가는게 최적의 방법.

 

 정리한다고 정리하긴 했는데 더이상 줄이기가 힘들다.

아무튼 요즘 이 글의 내용을 신경쓰면서 공부 중이고

내가 너무 깊이 내려가는게 아닐까 걱정 되기도 한다.

 

 

 

 

 

 

 

 지금 당장은 다음의 두 가지 경우를 고민하고 있다.

1. SLAM을 정리했으니 경로 계획을 한다.

2. 다시 이론으로 돌아와 다변량 분석을 살펴본다. 

 

 

 원래 경로 계획에 대해서 공부하려고 했으나,

경로 계획 알고리즘의 dynamic window approach나 다익스트라, a*, 포텐셜 필드 같은 내용들을 공부하기가

준비가 많이 부족한것 같다.

 

 그나마 확률적 로봇공학은 이전부터 여러 차례 반복해 오다보니 지금만큼 온거지만

이 상태에서 바로 경로 계획 파트를 들어간다면 오랜 시간 삽질해버릴거같아

관련된 이론들에 대해서 더 학습해야 덜 해맬것같은 기분이 들더라.

아니면 내가 참고하려고 한 자료가 너무 공부하기에 좋지 않은 자료들이라 그런 걸수도있고

 

 일단 다변량 분석을 생각하게 된건

내가 예전에 잠깐 학점은행제로 학점을 모으려고 방통대에 등록을 한적이 있었는데

졸업 하지는 못하고 시간이 지나 재적 처리가 됬었다.

 

 지금 방통대 재입학 신청기간이라 문자가 왔길래

방통대의 정보통계학과와 컴퓨터학과 커리큘럼을 보다가

내가 공부한 과목들도 많지만 공부 해야될 과목들도 많이 보이더라.

 

 

 

방통대 정보 통계학과 커리큘럼

 

 

방통대 정보 컴퓨터 학과 커리큘럼

 

 

 아무튼 경로 계획 알고리즘을 보기 전에 관련성 있는 과목들을 빠르게 훑어보고 나면

파이썬 로보틱스 예제들을 그나마 수월하게 정리했던것처럼

지금 바로 보는것보다는 사고의 폭이나 이해도를 높이는데는 훨씬 나을거같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 그나마 위안되는건

 

쓴 글 갯수가 500개에 가까워지는 중이고,

방문자 수도 꾸준히 늘어나고 있다.

 

 

 

300x250
728x90

 최근 파이썬 로보틱스를 진행하면서

깃헙 소스를 돌려보기도 하지만

가능한 이론 내용도 같이 정리하고 있었다.

 

 확률적 로봇 공학 정리를 마무리하고,

파이썬 로보틱스에서 위치 추정 문제, 지도작성, SLAM까지 진행했다.

 

 파이썬 로보틱스에서 제공하는 소스만 클롯받아서 돌려보고 말 수도 있긴한데,

이러한 기술들이 왜 나오고, 이 기술들을 구현한 슈도 코드가

파이썬이라는 언어로 어떻게 실제로 구현되어 동작하는지 분석을 했다.

 

 작년에 파이썬 로보틱스를 보았을때는 확장 칼만필터 위치추정과 SLAM 정도만 겨우겨우 이해했지

지도작성이나 FastSLAM 부분은 제대로 이해하지 못하고 대강 넘긴바 있으나

확실이 이번에 확률적 로봇공학을 다시 정리하고 나니 특히 지도작성에서 가우시안 그리드, 광선 투사 그리드 지도 작성방법 부분들까지 이해도가 많이 좋아진것 같아 뿌듯하기도 하다.

 

 그 다음 SLAM 파트에서 EKF SLAM도보고,

확률적 로봇 공학에서 나오지 않는 FastSLAM과 graph 기반 SLAM 튜토리얼에 대한 자료들을 정리 했다.

 

 원래 나는 군산대 로보틱스 대회를 목표로 막연하게 아래의 순으로 공부하려고 하였지만

위치 추정 -> 지도작성 -> SLAM -> 경로 계획 -> ROS 시뮬레이션 -> 실제 구현 

 

 이렇게 공부하는 것이 맞는 건지 고민된다.

 

 

 

 

 

 

작년 중순 쯤 개인 사정으로 취업을 하려고 로봇 관련 업체나 딥러닝을 하는 곳에 지원을 한 적이 있었는데,

 

 당시 나는 확회에서 보는 다른 대학원생처럼 기존 알고리즘을 개선하여 어떤 문제를 해결하긴 커녕

남이 만들어 놓은걸 직접 돌려보기만 하는 수준이었다보니(지금도 그렇지만)

대학원으로서 제대로 만든게 없는것 같아 자존감이 매우 낮은 상태 였었다.

 

 영상 처리 책에 있는 번호판 인식 예제를 구현해본다던가

딥러닝/케라스/탠서플로 책같은걸 보고 신경망 구현해서 학습을 해보거나

ROS 책이나 자료보고 예제 돌려 보는 등 

 뭔가 나름대로는 열심히 하긴 했었지만 (내가 생각하는) 대학원생 수준이라고 하기에는 너무 창피 했다.

 

 당시 내가 알고 있는 지식으로 SLAM을 설명한다고 하면

SLAM이란 동시적 위치 추정 및 지도작성이다. 가 끝이고 그 이상을 설명 못할 만큼 아는게 없었다.

 

 내가 모르는게 많은건 잘알고 있었지만, 자율주행차 연구를 어쩔수 없이 하게되었을때

자율주행 오픈소스 autoware를 빌드해서 돌려야 하는데 되지를 않으니

한달 동안 울면서 빌드만 한적도 있었다...

 

 막히는 원인과 관련되는 gcc로 어떻게 빌드하는지, 의존 관계가 어떻게 되는지, 라이브러리들 버전들이 다른지 등

빌드 관련 지식들을 잘 몰랐고 너무 급한 마음에 공부할 여유도 없었지만.

 

 그런일만 쌓이고 쌓이니 나는 어디에 가서 연구원으로 활동하기에 많이 부족한것 같고, 좌절한 상태였었다.

그래도 취업은 해야되니 몇몇 업체에 지원을 했었는데,

대학원 생활을 (열심히 하긴 했더라도 남들보다 엉터리로 했으니) 면접 볼 기회조차 없을거라 생각했었다.

 

 하지만 생각보다는 (아주 큰 곳은 아니었지만) 면접 볼 기회가 많았고, 여러 곳에서 합격할 수 있었다.

원래는 그렇게 일 하려고는 했었지만 주변인의 방해로 어쩔수 없이 포기하고 말았었다.

 

 그래도 이런 일이 있으면서, 아무것도 못했다고 좌절하고 있었는데

조금은 내가 완전히 잘못하고 있는건 아니구나 싶어 약간 희망은 얻을수 있었다.

 

 

 

 

 

 

 글 쓰다보니 내 취업 얘기로 빠지게 되 버렸는데

SLAM에 대해서 제대로 설명하지도 못한 1년전과 비교하면

지금은 장족의 발전을 하긴 했다.

 

 하지만 다른 컴퓨터 공학 전공자들 처럼 전공 지식을 제대로 배우지 못한게

여전히 나의 발목을 잡고있다.

 

 컴퓨터 과학의 응용 분야인 영상 처리나 로봇 공학, 인공 지능 등을 공부하려면

아래와 같은 이론 학문이 기반이 잘 갖추어 지고 있어야 했는데,

 

 통계론, 확률론, 선형대수, 수치해석, 회귀분석, 다변량 분석

이산수학, 알고리즘, 계산 이론 등

 

 나는 이런 기반 이론 없이 속아서, 아무것도 몰라서, 억지로 시켜서 다짜고짜 딥러닝,

영상처리, 로봇 공학을 하겠다고 삽질하고 다녔으니 제대로 하지 못하고 좌절할수 밖에..

 

 

 

 

 

 내 딴에는 블로그 정리하면서 공부를 하고 있고,

4월쯤 부터 했으니 이제 3개월 정도가 되었다.

 

 3개월이란 시간 동안 내가 뭘 했나 다시 정리해보면

 

4월

처음에는 만화로 쉽게 배우는 시리즈로 공학 관련 기초적인 내용들을 살펴봤었다.

- 전기/전기수학/CPU/선형대수/회귀분석(4월 중순 ~ 5월 초)

 

 그리고 중간에 컴퓨터 아나토미라는 책으로

컴퓨터 구조에 대해서 공부하면서 대강 다음 흐름들을 파악 할 수 있었다. (4월 말)

전기 신호-> 스위치 -> 릴레이 -> 트랜지스터 -> 플립플롭 -> 메모리 -> 가산기 -> APU -> 컴퓨터 회로 -> 폰 노이만 방식/ 하버드 방식 CPU -> 기계어 -> 어셈블리어 -> 고급언어

* 이즈음 NAND2TETRIS를 해보려고 했다가 포기했었다.

 

5월

 이후 STEP 교육이란걸 알게 되서 임베디드 시스템 관련해서 다방면으로 공부하기 시작했다. (5월 초~ 중)

ARM 임베디드 시스템 설계 - 임베디드 시스템, ARM, 부트로더, 리눅스 커널, 램디스크, 플래시 파일 시스템, 디바이스 등

펌웨어구현 환경 구축 - 펌웨어, 구현 SW/HW, 디버깅 도구, 교차 개발환경, JTAG 회로도분석, 데이터시트분석, 프로세서 구조, 매모리 맵 등

마이크로프로세서 메카트로닉스 제어 - 회로 시뮬레이션, LED, 릴레이 제어, 스위치, FND, LCD, 인터럽트 등

임베디드 SW 엔지니어링 - 개요, 하드웨어 분석, 펌웨어 분석, 커널 분석 등 ( 5월 말)

 

 이후 제어 공학을 복습 하고, (5월 초)

제어 공학 - 동적 시스템, 질량-스프링-댐퍼, 전달함수, 상태공간, 과도/정상상태응답, 성능및 안정도, 근궤적, PID 제어, 주파수 응답 등

 

 정보처리 기사 실기 시험을 잠시 준비하면서 이전에 학습한 내용을 복습했다. (5월 중 ~말)

네트워크 - 기본 개념, 네트워크 구조, TCP/IP 프로토콜, 주소 체계, 인터넷/라우팅/ 전송계층 프로토콜

데이터베이스 - DBMS, 모델링, SQL, 개념적/논리적 설계, 정규화 등

소프트웨어 공학 활용 - 소프트웨어 개발 라이프사이클, 개발 방법론, 모델, UML 등

기타..

 

6월

 정처기 시험을 마무리하고, 소형 무인 비행체를 복습했었으나 (6월 초)

배경 지식이 부족하고, 더이상 진행하기가 어려워 중간에 마쳤다.

 소형 무인 비행체 - 좌표계, 기구/동역학, 힘과 모멘트, 선형모델 설계, 오토파일럿 설계

 

 그 다음에는 이론 지식들을 공부하겠다고 수치해석을 시작했다.(6월 초)

이 내용도 생각보다 이해하기 힘들어서 많이 나가지는 못했다.

수치해석 및 실습 - MATLAB, 배열, 그래프, 오차 해석, 보간다항식, 차분표, 방정식 해법

 

 그 다음으로 이산수학과 알고리즘 (6월 초 ~ 중순)

이산 수학은 그래도 필요한 부분만 전반적으로 살펴 보기는 했으나

알고리즘의 경우 중반 까지는 그래도 이해할만 했으나 NP완비 부터는 간략하게 훑어보기만 했다.

이산수학 - 집합, 수, 관계, 그래프, 트리, 순열, 확률 등

알고리즘 - 설계 분석 기초, 점화식과 복잡도, 수열, 정렬, 선택, 자료구조, 이진 검색트리, 해시테이블, 동적 프로그래밍, 그래프 알고리즘, P와 NP문제, 근사 알고리즘, 상태 공간 트리

 

 6월 중순까지 수치해석, 이산수학, 알고리즘에 대해서 간단하게 살펴보고 나서 로봇 공학 관련해서 복습하기 시작했다.

 우선 파이썬 로보틱스의 칼만 필터 기초와 칼만, 베이즈 필터 자료에 대해서 살펴봤다.(6월 중순경)

파이썬 로보틱스 칼만 필터 기초 - 가우시안, 확률 모델, 확률 생성법칙, 조건부 확률, 베이즈 법칙/필터 와 칼만필터

칼만,베이즈 필터 - 파티클 필터, 몬테카를로 방법

 

 확률적 로봇 공학(6월 말)

작년에 논문쓰면서 확률적 로봇 공학을 이해도가 많이 부족하긴 했지만 공부했기 때문에

파이썬 로보틱스 예제를 공부하면서 로봇 공학 전반에 대해서 살펴보려고 했었다.

하지만 기반 지식이 너무 부족해서 코드나 로직들이 이해하기 너무 어렵더라,

그래서 다시 확률적 로봇 공학을 보기 시작했다.

- 베이즈필터 -> 가우시안 필터 -> 비가우시안 필터 -> 동작 모델 -> 관측 모델 -> 칼만/격자/몬테카를로 위치 추정 -> 점유 격자지도작성 -> SLAM -> 정보 SLAM 등

 

 작년에도 SLAM 까지 전반적으로 다 훑어보긴 했지만 관측모델이나 지도작성 등

이해하지 못한 부분들이 많았으나 이번에 다시보면서 더 확립할 수 있었고,

진도를 조건 다나아가 정보 필터를 이용한 개념들에 대해서도 완벽하지는 않지만 조금 살펴볼 수 있었다.

 

 개념정리(6월 말)

 하지만 확률적 로봇 공학을 정리하면서 힘들었던 점들이 많았는데

이번에 정리하기 이전에 회귀분석, 이산수학, 알고리즘 등 이론 내용들을 공부하면서 배경 지식을 쌓기는 했지만

이 확률적 로봇공학에서 사용하는 개념들 중에 여전히 이해가 되지 않는것들이 너무 많았다.

- 유전 알고리즘, 언덕 오르기, 휴리스틱, 분기 한정, rule of thum, 베이지안 네트워크, 우도, 휴리스틱, ad hoc hypothesis 등

 

 이런 용어들을 어떻게 한번 훑어볼수 있을까 고민하다가. 우연히 aistudy 사이트를 다시 찾았고, 이 사이트의 내용으로 가끔가끔 보긴 했으나 제대로 공부하긴 귀찬아서 넘어가던 개념들을 얕개나마 정리할 수 있었다.

300x250

'그외 > 로그' 카테고리의 다른 글

비전공자가 개발자로 취업하려면 컴공기초과목들을 공부해야하나요? by 서윤 TV  (0) 2020.07.13
공부 근황 2  (0) 2020.07.09
낮 한강  (0) 2020.07.07
밤 한강  (0) 2020.07.07
베를린  (0) 2020.07.07
728x90

B. 3차원 레이저기반 지도작성

 3차원으로 SLAM 알고리즘을 확장하는것에 대해서 이전 색션에서 살펴보았습니다. 차이는 2차원 스캔 매치와 루프 클로저 검출을 3차원 포인트 클라우드에서 동작하는 3차원 알고리즘들로 대체하면 됩니다. 구현하기 위해서 유명한 ICP 알고리즘을 사용하였고, Steder가 제안한 알고리즘으로 루프 클로저를 검출하였습니다. 게다가 그래프의 각 노드와 각 제약들은 SE(3)에서 존재합니다. 이 알고리즘의 결과는 그림 2(a)와 (b)가됩니다.

 

그림 2. 그래프 기반 3차원 지도작성 결과

 

 SE(3)의 요소를 나타내기 위한 파라미터의 최소 갯수는 6개로 3차원 평행이동 백터와 3차원 오일러각으로 구성됩니다. 이 파라미터화를 사용하여 알고리즘 1을 얻을수 있습니다. 하지만 이 최소화 표현은 특이해지도작성

 

 3차원으로 SLAM 알고리즘을 확장하는것에 대해서 이전 색션에서 살펴보았습니다. 차이는 2차원 스캔 매치와 루프 클로저 검출을 3차원 포인트 클라우드에서 동작하는 3차원 알고리즘들로 대체하면 됩니다. 구현하기 위해서 유명한 ICP 알고리즘을 사용하였고, Steder가 제안한 알고리즘으로 루프 클로저를 검출하였습니다. 게다가 그래프의 각 노드와 각 제약들은 SE(3)에서 존재합니다. 이 알고리즘의 결과는 그림 2(a)와 (b)가됩니다.

 

 SE(3)의 요소를 나타내기 위한 파라미터의 최소 갯수는 6개로 3차원 평행이동 백터와 3차원 오일러각으로 구성됩니다. 이 파라미터화를 사용하여 알고리즘 1을 얻을수 있습니다. 하지만 이 최소화 표현법은 특이해를 가지며, 과 파라미터화된 상태공간을 사용하여 피할수 있습니다.

 

 대안으로 최소 표현법에서는 자세에서 벗어날때 최적화 문제의 상대적인 작은 변화를 $\Deta \breve{x}$로 나타낼수 있습니다. 이를 통해 알고리즘 2를 구할수가 있게 됩니다. 이번 장에서는 시뮬레이션된 로봇 얻은 자세 그래프에 두갖 ㅣ최적화 알고리즘들을 비교하여보겠습니다.

 

 해시안의 희소 패턴은 두 케이스다 같으며, 선형 시스템을 계싼하는 시간은 무시하겠습니다. 파라미터화의 선택에 따라 수렴 속도에 영향을 주며, 한번 반복하는데 필요한 시간에는 영향을 주지는 않습니다. 이 효과를 강조하기 위해서 두 알고리즘을 사용하여 한번 최적화가 수행되는 동안 반복당 에러 변화를 보여주겠습니다.

 

그림 11. 구에서 주행한 시뮬레이션된 로봇으로 얻은 자세-그래프

 좌측 : 초기 형태, 우측 : 자세-그래프를 최적화 한후 결과로 알고리즘 2로 정밀하게 복원되었습니다.

 

 이 실험에서는 구 표면을 주행하는 로봇의 시뮬레이션된 3차원 데이터 셋을 사용하겠습니다. 측정치는 에러의 영향을 받고 있으며, 오도메트리 정보로 초기한 경우에 그림 11의 왼쪽 그림과 같은 그래프가 만들어 졌습니다. 초기 추측에서부터 시작하여, 가우스-뉴턴 알고리즘에 매니폴드 선형화를 적용한 경우나 적용하지 않은 상태(오일러 각 사용)로 실행하였습니다. 

 

그림.12 3차원 구 데이터셋에 오일러각을 사용한 경우와 매니폴드 선형화를 사용하여 가우스-뉴턴 최적화로 얻은 오차 F(x)의 변화

 

 그림 12는 두 방법으로 반복하는 동안 오차의 변화를 보여주고 있습니다. 처음에는 두 방법다 에러가 줄어들고 있었으나, 특이해가 알고리즘1이 발산하도록 하며, 알고리즘 2는 올바른 해를 향해 수렴하도록 하고 있습니다.

 

6. 결론

 본 튜토리얼에서는 그래프 기반 SLAM에 대해서 소개하였습니다. 이 자료의 목적은 독자들이 제안된 방법을 쉽게 구현하고 세부적인 내용들을 효과적으로 전달하기 위함이고, 이 자료에서 소개한 알고리즘은 더복잡한 방법으로 블록을 만들어 사용해도 됩니다. 하지만 이 알고리즘을 최적화하여 구현하는것은 상당히 힘든 문제가 됩니다.

 

 

300x250
728x90

5. 응용

 이번 장에서는 제안된 방법을 이용한 몇가지 응용들을 보겠습니다. 첫번째 시나리오에서는 2차원 지도작성을 보여줄것이고, 두번째 시나리오에서는 3차원 지도 작성에 대해서 설명하고 매니폴드 표현법의 이점을 강조하겠습니다.

 

A. 2차원 레이저 기반 지도 작성

그림 8. 2차원 지도 작성 실험에서 사용한 로봇. 이 로봇 플랫폼은 표준 액디브미디어 피오니어2로 SICK-LMS 레이저 거리계가 장착되어 있습니다.

 

 시에들의 인탤 연구소에서 그림 8과같은 레이저 거리계가 장착된 이동 로봇으로 데이터들을 기록하였습니다. 이 데이터는 연속 시간 좌표계들 사이의 이 로봇 플랫폼에 대응하는 2차원 변화를 나타내는 오도메트리 측정치와 2차원 레이저 거리계 데이터로 이루어집니다.

 

 이 그래프는 다음의 과정으로 생성 됩니다.

 

- 로봇이 0.5미터 이상 움직이거나, 0.5라디안 이상 회전할때 이 알고리즘은 그래프에 새로운 정점을 추가하고 현재 레이저 관측과 함께 그 정점에 라벨을 붙입니다.

 

- 이 레이저 스캔은 이전에 얻었던 것과 매치시켜 오도메트리 추정치를 개선시키고, 이에 대응하는 에지가 그래프 상에 추가됩니다. 우리는 Olson이 제안한 스캔 매치 변형 알고리즘들을 사용하였습니다.

 

- 로봇이 오랜 시간 동안 모르는 장소들을 돌아다닌 후에 이제 알고있는 장소에 다시 방문할때, 이 알고리즘은 현재 스캔과 이전의 관측과 매치되는지 찾게됩니다(루프 클로징). 만약 현제 관측과 다른 노드의 관측 사이에 매칭이 성공한다면, 이 알고리즘은 새로운 에지를 그래프 상에 추가합니다. 이 에지는 두 스캔들이 최적으로 겹치게 만들어주는 상대적인 변환이 라벨되어 집니다.

 

 현재 측정과 이전의 모든 스캔을 매칭시키는것은 비효율적이고, 에러를 발생시킬수 있습니다. 대신 이 알고리즘은 과거의 노드 들 중에서 현재 로봇의 자세를 가지고 있는 3$\sigma$ 주변 공분산을 가진 후보 노드를 선택합니다. 이 공분산은  축소된 헤시안 $H_{red}$의 역 대각 블록으로 얻을수 있습니다. $H_{red}$는 H에서 새로 입력된 로봇 자세의 행과 열들을 제거하여 얻을수 있습니다. $H_{red}$는 현재 위치가 고정되었다고 가정할때 모든 궤적의 정보행렬이 되겠습니다.

 

- 이 알고리즘은 루프 클로저가 감지될때마다 최적화를 수행하게 됩니다.

 

 실행이 종료될때, 그래프가 1,802개의 노드와 3,556개의 에지로 구성되어 있었습니다. 원래 상대적으로 큰 공간에서 최적화를 수행하기 힘든 문제가 있지만 표준 랩탑(인텔 코어2 2.4GHz)에서 100ms로 수행될수 있었습니다. 로봇은 약 1 m/s 속도로 주행하였기 때문에, 그래프 최적화는 루프 클로저를 검출한 뒤가 아니라 모든 노드가 추가가 된 후에 실행 될수 있었습니다.

 

그림 9. 인텔 연구소. 좌측 : 결과 지도와 최적화돼지 않은 자세 그래프, 우측 : 일관성을 보이는 결과 지도와 최적화된 자세 그래프

 

그림 10. 현실 세계 데이터셋에 대한 자세 불확실성 추정

 

 그림 9는 주행 궤적에 대한 최적화 과정의 효과를, 그림 10에서는 불확실성 타원들을 보여주고 있습니다. 로봇은 타원이 작은 공간에 위치하고 있으며, SE(2)에서 자세는 파라미터화 될 필요가 없으므로, 매니폴드를 사용하여도 이점은 없습니다.

 

300x250
728x90

C. 매니폴드에서 최소 제곱

 비 유클리디안 공간을 수치적으로 다루는 흔한 방법은 매니폴드에서 최적화를 수행하는 것입니다. 매니폴드는 전역 스케일에서 반드시 유클리디안이 아니나 지역적으로는 유클리디안이 나타나는 수학적 공간을 말합니다. 여기서 소개하는 매니폴드 기반 방법은 태일러와 크래이그만이 소개한 SO(3)에서 함수의 최소화 방법과 비슷합니다.

 

 SLAM 문제에서 각 파라미터 블록 $x_i$는 전이 벡터 $t_i$와 회전 요소 $\alpha_{i}$로 구성되어 있고, 전이 벡터 $t_i$는 유클리디안 공간에서 나타나나, 회전 요소 $\alpha_i$는 비유클리디안 2차원이나 3차원 회전 그룹 SO(2)나 SO(3)에서 나타납니다. 이러한 특이성을 피하기 위해서 이러한 공간들은 회전 행렬이나 쿠터니언 같은 모수화를 벗어난 방법들을 사용하기도 합니다.

 

 식 (16)에 이런 모수화를 벗어난 표현법들을 적용하면, 이로인해 제약관계가 망가질 수 있습니다. 모수화를 벗어나는건 추가적인 자유도를 만들고, 오차를 만들어버립니다. 이 문제를 극복하기 위해서 회전에 대해 (3차원에서 오일러각과같은) 최소한 표현법을 사용할 수도 있겠습니다. 하지만 이러는것은 특이성에 영향을 주게 됩니다. 2차원에서 특이성은 각을 정규화하여 쉽게 복원할수 있으나 3차원에서 이과정은 직관적이지 않게 됩니다.

 

 그래서 다른 방법은 다루어야 하는 공간을 매니폴드로 보고, 유클리디안 공간상의 지역적인 변화 $\Delta$x를, 매니폴드에서의 변화화 사상시키는 연산자를 정의하면 됩니다. 수학적으로 자세한 내용은 해르츠버그의 연구 자료를 참고하면 되겠습니다. 이 연산자를 사용하여 새로운 오차 함수를 정의할수 있게 됩니다.

 여기서 $\breve{x}$는 쿼터니언 인스턴스로 모수화를 벗어난 공간상에 나타납니다. 여기서 $\Delta \tilde{x}$는 원점 위치 $\breve{x}$에서의 작은 증분으로, 최소 표현상에서 사용됩니다.

 

 3차원 SLAM 예제에서는 단위 쿼터니언의 백터를 사용하는것이 회전 모수화에서 좋은 선택이 됩니다. 자세히 설명하자면, 증분  $\Delta \tilde{x}$를 평행이동 $\Delta \tilde{t}$와 3차원 회전을 나타내는 단위 쿼터니언의 백터 파트인  $\tilde{q}^{T}$로 6차원 벡터  $\Delta \tilde{x}^{T}$ = ($\Delta \tilde{t}^{T}$ $\tilde{q}^{T}$)와 같이 정의할수 있겠습니다.

 

 역으로 $\breve{x}^{T}$ = ($\breve{t}^T$ $\breve{q}$^{T})에서 쿼터니언 $\breve{q}$를 회전 부분을 나타내기 위해 사용할수 있겠습니다. 그래서 그 연산자는 $\Delta \breve{q}$를 완전 쿼터니언 $\Delta q$로 변환하고,  $\Delta x^{T}$ = ($\Delta t^{T}$ $q^{T}$)를 $\breve{x}$로 변환하는데 사용할 수 있겠습니다.

 

 쿼터니언을 이용하여 오차 최소화 시에는, 이러한 연산들이 다음의 연산자로 정리할 수 있고, 자코비안 $\breve{J}_{ij}$는 다음과 같이 나타낼수 있겠습니다.

 이전의 방정식에서 e는 $\Delta \breve{x}_i$와 $\Deta \breve{x}_j$에만 의존하므로 다음과 같이 전개할 수 있겠습니다.

 

 편미분에 대한 규칙을 사용하고, $\Delta \breve{x} = 0$에서의 자코비안을 을 사용하면, 영이 아닌 블록들은 다음과 같이 됩니다.

 이 표기법을 확장하여 식 (9)에 식 (21)을 대입하고, 이를 통해 다음의 선형 시스템을 구할 수 있습니다.

 증분 $\Delta \breve{x*}$는 초기 추측 $\breve x$ 주위의 지역 유클리디안에서 계산되기 때문에 이들은 그 연산자를 이용해 모수를 벗어난 공간상에서 재사상되어야 합니다. 식 (16)의 갱신 규칙에 따라 다음과 같이 됩니다.

 매니폴드에서의 최소화 문제 공식화에서는 우선 식 (26)으로 초기 추측 주위의 지역 유클리디안 근사 증분 집합을 계산하고, 다음에는 식 (27)로 전역 비 유클리디안 공간상에서 증분들을 누적해야 합니다.

 

 매니폴드 표현법에서 계싼되는 선형 시스템은 유클리디안 공간에서 계사되는 선형시스템과 같은 구조를 가지며, 비 매니폴드 버전으로부터 그래프 최소화 하는 매니폴드 버전을 쉽게 얻을수 있으며, 대응하는 파라미터 블록에 대해  그 연산자와 자코비안 $M_t$만 정의하면 됩니다. 알고리즘 2는 SLAM에 적용하기 위한 가우스 뉴턴의 매니폴드 버전을 보여주고 있습니다. 

 

 매니폴드 문제에서의 헤시안 $\breve{H}$는 더이상 궤적의 정보 행렬로 사용되지 않습니다. 알고리즘 2에서 궤적의 정보 행렬을 얻기 위해서 원래의 자세 x공간에서 H를 계산하면 되겠습니다.

 

알고리즘 2. 알고리즘 1의 매니폴드 버전.

 이 알고리즘은 같은 계산 복잡도를 가지며, 특히 3차원의 경우에 비 매니폴드 버전보다 더 강인합니다.

300x250
728x90

B. 선형화된 시스템의 구조에 대한 구조사항들

 식 (14)에 따르면 행렬 H와 벡터 b는 하나 하나가 제약조건들인 행렬과 벡터들의 합으로 얻을수 있습니다. 모든 제약조건들은 시스템에 추가가 되어지는데, 추가되어지는 시스템의 구조는 에러 함수의 자코비안에 의존하게 됩니다. 제약 조건의 에러함수가 두 노드의 값에만 의존하므로 식 (7)에서 자코비안은 다음과 같은 형태를 가지게 됩니다.

 

 여기에 $A_{ij}$와 $B_{ij}$는 각각 $x_i$와 $x_j$에 대한 에러함수의 미분으로, 식 (10)으로부터 다음의 블록 행렬 $H_{ij}$를 얻을수가 있게 됩니다.

 표기를 편하게 하기위해 0인 블록들은 생략하겠습니다.

 

 

알고리즘 1. 그래프의 제약조건으로부터 로봇의 자세 사후확률의 다변수 가우시안 근사의 평균 $x*$와 정보 행렬 H* 계산

 

 

 알고리즘 1은 로봇의 자세에 대한 사후확률의 평균과 정보행렬을 계산하는 반복 가우스-뉴턴 과정을 요약하였습니다. 이 시스템의 구조 대부분이 희소하기 때문에 시스템의 헤시안 H을 저장하기 위해서 메모리 효율적인 표현법을 사용하기를 추천합니다.

 

 헤시안의 구조는 그래프의 연결성으로부터 즉시 알수 있으므로, 반복의 시작시에 헤시안을 미리 만들고, 새로운 선형화가 수행될때마다 모든 에지에 대해 루프함으로서 갱신시키는것을 추천 합니다. 각 에지들은 블록 $H_{[ii]}$, $H_{[ij]}$, $H_{[ji]}$, $H_{[jj]}$과 계수 벡터의 블록 $b_{[i]}$, $b_{[j]}$에 영향을 줍니다. 추가적인 최적화는 H의 위 3가지 부분에서만 수행하면 되겠습니다.

 

 제약 조건의 오차 $e_{ij}$는 연결된 자세 $x_i$와 $x_j$의 상대적인 사에에만 의존한다는 점을 생각하면 자세 x의 특정 부분의 에러 F(x)는 모든 자세의 강체 변환에 대해 불변하게 됩니다. 이를 통해 식 (15)와 같은 결과가 나오게 됩니다.

 

 이 시스템을 수치적으로 풀기 위한 시용적인 방법으로는 증분치들 중 하나를 0으로 제한하면 됩니다. 그러므로 이 과정은 $k^{th}$ 대각 블록 H[kk]에 아이덴티티 행렬을 추가하여 수행할수 있겠습니다. 알고리즘 1에서 일반화 손실 없이, 첫 노드 $x_!$을 고칠수가 있습니다.

 

 자세 그래프의 특정 노드를 고치기위한 다른 방법으로 식 (15)의 선형 시스템의 $k^{th}$ 블록의 행과 열을 억제시키면 되겠습니다.

 

300x250
728x90

 

그림 6. SLAM 과정의 자세 그래프 표현. 그래프 상의 모든 노드들은 로봇의 자세를 의미합니다. 가까운 자세들끼리는 에지로 연결되어 있으며, 이 에지는 로봇의 자세 사이에서 관측으로 생기는 공간적인 제약들을 나타냅니다. 에지 $e_{t-1 t}$는 연속적인 자세들 사이에 있으며, 오도메트리 측정치를 설계하며, 다른 에지들은 동일하 환경에서 다중 관측으로부터 만들어지는 공간적인 제약조건들을 의미합니다.

 

 x = ($x_1$, . . ., $x_T$$)^T$는 자세 노드 $x_i$의 벡터이며, $z_{ij}$와 $\Omega_{ij}$는 노드 i와 노드 j사이 가상 측정의 평균과 정보행렬을 의미합니다. 이 가상 측정은 i로부터 얻은 관측들이 j에서 얻은 관측들로 포개도록 만드는 변환입니다. 노드 $x_i$와 $x_j$의 형태가 주어질때 가상 측정의 예측치를 $\hat{z_{ij}}$($x_i$, $x_j$)라고 합시다. 

 

 이 예측은 두 노드 사이에 상대적인 변환이라고 할수 있으며, 관측 $z_{ij}$의 로그 우도 $l_{ij}$는 그러므로 다음과 같습니다.

 e($x_i$, $x_j$, $z_{ij}$)는 기대 관측 $\hat{z_{ij}}$($x_i$, $x_j$)과 실제 관측 $z_{ij}$ 사이의 차이를 계산하는 함수로, 이 표기를 간단하게 정리하자면 관측 인덱스들을 에러 함수의 인덱스들로 바꾸겠습니다.

 

그림 7. 정점 $x_i$와 $x_j$를 연결하는 에지의 측면들. 이 에지는 관측 $z_{ij}$에서 시작합니다. 두 노드사이의 상대적인 차이로부터, $x_i$ 좌표계에서 보여지는 $x_j$를 나타내는 기대 측정치 $\hat{z_{ij}}$를 계산할수 있습니다. 에러 $e_{ij}$($x_i$, $x_j$)는 기대와 실제 측정치 사이의 차이에 의존하게되며, 에지는 에러 함수 $e_{ij}$($x_i$, $x_j$)와 불확실성을 나타내는 측정의 정보 행렬 $\Omega_{ij}$로 정리할수 있겠습니다.

 

 그림 7은 그래프의 에지를 정의하는 양과 함수들을 보여주고 있습니다. C는 관측 제약 z가 존재하는 쌍 인덱스들의 집합이며, 최대 우도 방법의 목표는 모든 관측들에 대해 음의 로그 우도 F(X)를 최소화하는 노드 $x^{*}$의 형태를 찾는것이 되겠습니다.

 이를 정리하면, 다음의 식을 푸는문제라고 할수 있겠습니다.

이번 섹션에서는 식 (5)를 풀고, 로봇의 주행 궤적에 따른 가우시안 근사를 계산하는 방법에 대해 설명하겠습니다. 가우스-뉴턴이나 Levenberg-Marquardt 알고리즘 같은 기존 최적화 방법을 사용하는 방법도 있지만, 이 방법은 구조 문제로 다루기 때문에 특히나 효율적으로 동작하게 됩니다.

 

 우선 기존의 비선형 최소제곱 최적화 구현을 설명하고, 다음에는 로봇 자세 표현의 특이성을 다룰수 있도록 도와주는 다른 방법들을 소개하겠습니다.

 

A. 지역 선형화 반복을 통한 에러 최소화

 

 로봇의 자세에 대한 좋은 초기 추측 guess $\breve{x}$를 알고있다면, 식 (5)의 수치적인 해는 가우스-뉴턴 법이나 Levenberg-Marquardt 알고리즘을 사용하여 얻을수 있겠습니다. 이 아이디어는 현재 초기 추측 $\breve{x}$ 주위에 1차 태일러 전개로 에러 함수를 근사화하는것으로 다음과 같습니다.

 여기서 $J_{ij}$는 $\breve{x}$와 $e_ij$ = $e_{ij}$($\breve{x}$)로 계산되는 $e_{ij}$(x)의 자코비안입니다. 식 (4)의 에러 항 $F_{ij}$에 식 (7)을 대입하면 다음의 식을 얻을수 있겠습니다.

 

식 (14)와 같은 이차 식은 식 (13)에서 c = $\Sigma$$c_{ij}$, b = $\Sigma$$b_{ij}$, 그리고 H = $\Sigma$$H_{ij}$로 설정하여 얻을수 있으며, 선형 시스템의 해를 구함으로서 $\Delta$를 최소화 시킬수 있겠습니다.

 

 

 행렬 H는 자코비안을 통해 궤정의 상태 공간에서 관측 에러를 사영함으로서 얻을수 있기 때문에 H는 시스템의 정보 행렬이 됩니다. 제약 조건에 의해 연결되는 자세들 사이에는 0이 아닌 값들을 가지며, 희소한 행렬이 됩니다. 이 행렬은 희소 Cholesky 분해를 이용하여 식 (15)을 풀수 있도록 도와줍니다. 희소 Cholesky 분해를 효과적으로 구현하기 위해 CSparse라이브러리를 사용할수 있겠습니다.

 

 초기 추정을 더함으로서 선형화된 해률 얻을수 있게됩니다.

 

 많이 사용되는 가우스-뉴턴 알고리즘은 식 (14)의 선형화와 식 (15)의 해, 식 (16)에서 갱신 단계를 반복해서 수행합니다. 모든 반복과정에서 이전의 해가 선형화 지점과 초기 추정치로 사용됩니다.

 

 위에서 설명한 과정들은 다변수 함수 최소화에 사용하는 일반적인 방법으로 SLAM 문제의 특별한 경우에서 사용됩니다. 하지만 이 일반적인 방법은 파라미터 x들의 공간이 유클리디안이라고 가정하고 있으며, 이 경우에는 SLAM에 사용할수 없으며, 하부 최적의 해를 구해야 할수 있습니다.

 

 

 

300x250
728x90

4. 그래프 기반 SLAM

 그래프 기반 SLAM 방법은 가공되지 않은 센서 데이터들 이용하여 간소화된 추정 문제로 만듭니다. 이러한 로 관측 데이터들은 그래프 상에 에지로 대체되며, 가상의 측정치들로 볼수 있겠습니다. 더 자세하게 설명하자면, 두 노드 사이에 에지가 존재하며 이들은 두 자세 사이의 상대적인 위치가 주어질때 관측치에 대한 확률 변수로 표기 됩니다.

 

 일반적으로 관측 모델 p($p_t$ | $x_t$, $m_t$)는 멀티 모달이므로 가우시안 가정을 적용할수 없습니다. 이런 이유로 단일 관측 $z_t$는 그래프 상에 존재하는 다른 자세들과 연결되는 다중 포텐셜 에지들이 될수 있으며, 그래프 연결성은 확률 분포로 설명해야 합니다. 추정 과정에서 멀티 모달을 직접적으로 다룬다면 복잡도가 크게 증가될수 있습니다. 그 결과 가장 실용적인 방법들은 가장 가능성있는 토플로지로 추정치들을 제한합니다.

 

그래서 관측을 이용하여 가장 높은 가능성을 가진 제약을 결정하여야 합니다. 이 결정은 로봇의 자세에 대한 확률 분포를 이용하며, 이 문제를 데이터 연관으로 볼수 있으며, SLAM의 프론트앤드에서 주로 다루게 됩니다. 올바른 데이터 연관을 구하기 위해서 프론트엔드는 로봇의 궤적 p($x_{1:T}$ | $z_{1:T}$, $u_{1:T}$ )에 대한 조건부 사전확률의 일관적인 추정치를 필요로 합니다. 이 작업은 로봇이 주행하는 동안 프론트 앤드와 백앤드 사이에 끼워져야 합니다. 그러므로 백앤드의 정확도와 효율성은 좋은 SLAM 시스탬을 설계하는대 매우 중요합니다.

 

 이 튜토리얼에서는 데이터 연관에 대한 복잡한 방법을 다루지는 않을 것이나, 그런 방법들로는 스팩트럴 클러스터링, 조건부 한정분기나 백트래킹 방법같은게 있습니다. 이런걸 고려하기 보다는 프론트엔드에서 일관된 추정치를 주고있다고 가정해서 보겠습니다.

 

그림 6. SLAM 과정의 자세 그래프 표현. 그래프 상의 모든 노드들은 로봇의 자세를 의미합니다. 가까운 자세들끼리는 에지로 연결되어 있으며, 이 에지는 로봇의 자세 사이에서 관측으로 생기는 공간적인 제약들을 나타냅니다. 에지 $e_{t-1 t}$는 연속적인 자세들 사이에 있으며, 오도메트리 측정치를 설계하며, 다른 에지들은 동일하 환경에서 다중 관측으로부터 만들어지는 공간적인 제약조건들을 의미합니다.

 

 관측이 가우시안 노이즈의 영향을받고, 데이터 연관을 알고 있다면 그래프 기반 지도작성 알고리즘의 목표는 로봇의 궤적에 대한 가우시안 사후확률 근사를 계산하는것이 될겁니다. 이는 관측 우도를 최대화시키도록 하는 노드 형태로서 가우시안의 평균을 계산하는 것을 다루게 됩니다. 이 평균은 가우시안의 정보 행렬이라고도 알려져 있습니다. 앞으로 제약조건 최적화 문제로 이러한 최대치를 찾는 작업들에 대해 정리하겠습니다. 그리고 앞으로 사용할 표기법들을 그림 6에서 소개하겠습니다.

300x250

+ Recent posts