-
* Odometry
https://blog.naver.com/ycpiglet/222139215170
- (출발 지점을 기준으로) 상대적인 위치를 추정
- 주행기록계
- 엔코더를 통해 로봇의 좌표를 상대적으로 추정 가능
* graph SLAM
- 친절한 설명
https://blog.naver.com/kangdy1997/222989382160
- node xi = (xi,yi,θi) : i시점에 글로벌 좌표계에서의 x,y좌표와 회전각도 θ
- edge ei: 엔코더로부터 얻어진 측정값
- calibration을 하면 (로봇좌표를 기준으로) 스캐너의 상대적 위치를 구할 수 있다.
- calibration으로 스캐너의 상대적 위치가 주어지고, 글로벌 좌표계에서의 로봇좌표 xi가 있다면, 스캐너로 인식한 객체의 좌표값을 글로벌 좌표계로 나타낼 수 있다.
- 지도를 나타내는 m 벡터는 결국 글로벌 좌표계에서의 객체 x,y 좌표를 말한다.
- 지도를 그린다고 생각하자. 지금 로봇의 로컬 좌표계를 글로벌 좌표계라고 생각하면, 초기 로봇좌표인 (0,0,0)에서 스캐너로 관측한 객체(반사판)의 좌표를 구할 수 있다. 로봇이 특정 거리만큼 움직이면 엔코더를 통해 로봇좌표를 추정할 수 있고, 실제 로봇좌표에서 스캐너로 관측한 객체(반사판)의 좌표를 구할 수 있다.
- 결국 구하고자 하는거는 map이다. 그러면 그냥 초기위치에서 스캐너로 관측한 객체의 좌표로 map을 표현하면 안되나?
1) 만약 스캐너가 360도로 관측하지 않는다면?
2) 만약 그렇게 구한 map이 부정확하다면? 여러 지점에서 스캐너로 관측한 정보를 종합하여 map을 나타내면 더 정확하지 않을까?
내가 특정 거리만큼 움직이면 스캐너로 관측한 반사판의 위치는 이렇게 변하겠지? 라고 추정할 수 있다.
실제로 그 거리만큼 움직인 다음에 스캐너로 관측한 반사판의 위치를 앞서 추정한 위치와 비교하면 오차를 구할 수 있다.
그 오차를 추정에 반영해야할거 같은데...?
오차를 가장 줄여줄 수 있는 로봇좌표를 찾는다!
* SLAM 개념
나는 로봇이다. 나의 로컬좌표계를 글로벌좌표계로 생각하자. 나는 (0,0,0)에서 눈을 뜨고 주변 사물의 위치를 글로벌좌표계에 표시해둔다. 이제 눈을 감고 특정 거리만큼 움직인다. 그러면 초기 좌표(0,0,0)에서 특정 거리만큼 움직였기에 현재 좌표를 추정할 수 있다. 아직 확실한게 아니기에 평균과 분산으로 나타낼 수 있다. 추정 좌표의 각 샘플마다 해당 샘플에서 눈을 떴을때 주변 사물의 위치를 글로벌좌표계로 표시할 수 있다. 각 샘플의 주변 사물 위치값을 가지고 있고, 이제 눈을 뜨고 주변 사물의 실제 위치를 글로벌 좌표계로 나타낸다. 각 샘플의 주변 사물 위치값과 실제 주변 사물의 위치값 중 가장 가까운 것을 찾는다. 그렇게 찾아낸 샘플이 로봇 좌표를 가장 잘 드러낸다.
* SLAM pipeline
- Data acquisition
- visual odometry
- loop closure detection
- backend optimization
- map representation
'논문 읽기' 카테고리의 다른 글