오도메트리 오차와 map→odom 보정
바퀴가 센 대로라면, 로봇은 지금 어디에 있을까?
화면을 누르면 다음 장으로 넘어갑니다
오도메트리
바퀴가 돈 만큼 위치를 셉니다
바퀴가 몇 바퀴 돌았는지로 얼마나 움직였는지 더해 가는 것을 오도메트리(odometry)라고 합니다. 시뮬레이션 TurtleBot3에서는 Gazebo의 DiffDrive가 이 값을 계산해 /odom 토픽과 odom→base_footprint 변환으로 냅니다(14강 8편).
오차 누적
작은 오차가 쌓입니다
바퀴는 미끄러지고, 바닥은 고르지 않고, 바퀴 지름도 설계값과 조금 다릅니다. 한 걸음마다 오차는 아주 작지만 오도메트리는 그 값을 계속 더하기 때문에 오래 달릴수록 오차가 커집니다.
방향이 조금만 틀려도 멀리 갈수록 위치가 크게 벗어납니다. 그림은 이해를 돕기 위해 오차를 크게 그렸습니다.
다시 맞추기
벽을 보고 위치를 고칩니다
라이다로 본 벽을 지도의 벽에 겹쳐 보면, 바퀴가 놓친 오차를 알아낼 수 있습니다. 점들이 벽에 딱 맞는 자리가 진짜 위치입니다.
이 일을 지도를 그리면서 하면 SLAM(2편), 저장한 지도로 하면 AMCL(5편)입니다.
두 기준
odom과 map, 기준이 둘입니다
odom은 바퀴로 센 위치의 기준이라 값이 끊김 없이 부드럽지만 오차가 쌓입니다. map은 전체 지도의 기준이라 정확하지만, 보정할 때마다 값이 툭 튈 수 있습니다(12강 5편).
누가 내나
map→odom은 보정값입니다
프레임의 부모는 하나뿐인데, base_footprint의 부모 자리는 이미 오도메트리의 odom이 차지했습니다. 그래서 SLAM이나 AMCL은 map→base를 직접 내지 않고 둘의 차이인 map→odom만 냅니다.
TF가 두 변환을 이어 붙이면 map 기준 로봇 위치가 나옵니다.
15강의 길
네 단계로 스스로 가게 만듭니다
먼저 키보드로 돌며 지도를 그리고 파일로 저장합니다. 그다음 그 지도 위에서 로봇의 위치를 잡고, 목표를 찍으면 로봇이 길을 찾아 스스로 갑니다.
14강의 Gazebo와 TurtleBot3 burger를 그대로 씁니다.
다음 편