이전 Localization 실습을 진행하였을때 초기 위치가 실제 로봇과 많이 다르거나 방향이 맞지 않으면 Localization이 제대로 수행되지 않는 것을 확인하였다.
그렇다면, 자신의 위치를 전혀 모를때는 어떻게 대처하여야 할까 ?
Global Localization
- 로봇이 자신의 초기 위치를 전혀 모르는 상태에서 지도(map) 상에서 실제 위치를 추정하는 과정
- 즉, “내가 지금 지도 어디쯤 있는지 완전히 모르겠다” 상황에서 AMCL 같은 알고리즘을 이용해 모든 후보 위치를 확인하며 찾아내는 것
Global Localization 사용 가능한 상황
- 초기 위치를 모를 때
- 로봇을 켠 직후, 초기 pose를 알 수 없는 경우
- 지도 전체에 파티클을 뿌려 위치 추정
- Odometry 누적 오차 발생
- 로봇이 장시간 이동하면서 odom 누적 오차가 커짐
- Local Localization으로는 현재 위치를 잘못 추정 → map 기준 재보정 필요
- 갑작스러운 위치 불일치 / 장애물 회피 후 이동
- 로봇이 장애물 회피, 밀림 등으로 실제 위치와 odom이 크게 불일치
- AMCL이 기존 pose 추정에 실패할 때 지도 전체 탐색 필요
- 지도 갱신 후 재보정
- SLAM 기반 지도 업데이트 후 이전 위치 추정이 맞지 않을 때
- 지도 전체를 재탐색하며 정확한 위치 재설정
- 센서 데이터 이상 / 장애 발생
- LiDAR, IMU, 카메라 등 센서 오류로 위치 추정이 불확실해진 경우
- 파티클이 잘못된 위치로 치우쳤을 때 전체 지도 탐색으로 회복
Global Localization 동작 원리
1. 지도 전체에 파티클 뿌리기
- 지도 상 가능한 모든 위치에 수천 개 파티클(위치 후보)을 무작위로 배치
2. 센서 관측으로 후보 평가
- 각 파티클 위치에서 예상되는 LiDAR/카메라 스캔과 실제 스캔 비교
- 예상 스캔과 비슷한 파티클일수록 weight ↑
3. 리샘플링
- 가중치 높은 파티클만 남기고 낮은 것은 제거 → 위치 후보 점점 수렴
4. 최종 위치 추정
- 분포가 좁아지고 최고 가중치 위치를 실제 pose로 선택 → /amcl_pose publish