659.86 map 프레임의 정의와 역할
1. 개요
map 프레임은 REP 105에 의하여 정의된 **지도 고정 글로벌 좌표 프레임(map-fixed global coordinate frame)**이다. 이 프레임은 환경 지도(environmental map)의 원점에 고정되며, 장기적으로 정확한 글로벌 위치 정보를 제공한다. map 프레임은 위치 추정(localization) 알고리즘에 의하여 관리되며, 주행 측정의 누적 오차를 보정하는 역할을 수행한다. 프레임 계층에서 map은 odom의 상위 프레임으로 위치하며, map → odom 변환을 통하여 주행 측정 드리프트를 간접적으로 보상한다.
2. 정의
2.1 REP 105에 의한 정의
REP 105는 map 프레임을 다음과 같이 정의한다.
map프레임은 세계 고정(world-fixed) 프레임이다.map프레임에서의 로봇의 포즈는 시간에 따라 드리프트하지 않으므로, 장기적인 글로벌 기준으로 유용하다. 그러나map프레임에서의 로봇의 포즈는 이산적으로 점프할 수 있으며, 이러한 점프는 위치 추정 알고리즘의 보정 결과에 의하여 발생한다.
2.2 핵심 특성
| 특성 | 설명 |
|---|---|
| 글로벌 정확성 | 장기간에 걸쳐 정확한 위치를 제공하며, 드리프트가 누적되지 않는다 |
| 불연속 허용 | 위치 추정 결과 갱신 시 변환 값이 불연속적으로 변할 수 있다 |
| 지도 고정 | 환경 지도의 원점에 고정되어 로봇의 이동과 무관하게 위치가 변하지 않는다 |
| 저빈도 갱신 | 위치 추정 알고리즘의 주기(일반적으로 1~20 Hz)에 따라 갱신된다 |
3. 좌표계 방향과 원점
3.1 좌표축 방향
map 프레임은 REP 103의 글로벌 좌표계 규약을 따른다.
- X축: 동쪽(East) 방향
- Y축: 북쪽(North) 방향
- Z축: 상방(Up) 방향
이는 ENU (East-North-Up) 규약이며, odom 프레임과 동일한 축 방향을 갖는다.
3.2 원점의 결정
map 프레임의 원점은 환경 지도의 원점에 의하여 결정된다. 이는 지도 작성 방법에 따라 다음과 같이 설정된다.
| 지도 유형 | 원점 위치 | 결정 방식 |
|---|---|---|
| SLAM 생성 점유 격자 지도 | 지도 작성 시작 시점의 로봇 위치 | SLAM 알고리즘에 의하여 자동 결정 |
| 사전 제작 지도 | 지도 파일의 원점 좌표 | map_server의 YAML 설정 파일에 명시 |
| 지리 참조 지도 | 지리적 기준점 | GPS 좌표와의 대응에 의하여 결정 |
# map_server의 지도 설정 파일 (map.yaml)
image: my_map.pgm
resolution: 0.05
origin: [-10.0, -10.0, 0.0] # 지도 원점의 (x, y, yaw)
negate: 0
occupied_thresh: 0.65
free_thresh: 0.196
위 설정에서 origin 필드가 map 프레임에서의 지도 영상 좌하단 모서리의 좌표를 지정한다.
4. map → odom 변환
4.1 변환의 의미
map → odom 변환은 주행 측정의 누적 오차(drift)를 반영하는 보정 변환이다. 이 변환은 다음과 같이 해석된다.
T_{\text{map} \leftarrow \text{odom}} = T_{\text{map} \leftarrow \text{base\_link}} \cdot T_{\text{base\_link} \leftarrow \text{odom}}
= T_{\text{map} \leftarrow \text{base\_link}} \cdot T_{\text{odom} \leftarrow \text{base\_link}}^{-1}
여기서:
- T_{\text{map} \leftarrow \text{base\_link}}은 위치 추정 알고리즘이 산출한 로봇의 글로벌 포즈
- T_{\text{odom} \leftarrow \text{base\_link}}은 주행 측정에 의한 로봇의 로컬 포즈
위치 추정 노드는 자신의 추정 결과와 현재 주행 측정 값의 차이를 map → odom 변환으로 발행함으로써 드리프트를 보정한다.
4.2 발행 주체
| 발행 주체 | 위치 추정 방식 | 특성 |
|---|---|---|
nav2_amcl | 적응적 몬테카를로 위치 추정 (AMCL) | 사전 지도 기반, 파티클 필터 |
slam_toolbox | 동시적 위치 추정 및 지도 작성 (SLAM) | 실시간 지도 생성과 위치 추정 동시 수행 |
robot_localization | 확장 칼만 필터/무향 칼만 필터 | 다중 센서 융합, GPS 포함 가능 |
rtabmap_ros | 시각-LiDAR 융합 SLAM | RGB-D 카메라와 LiDAR 기반 |
4.3 불연속적 점프의 발생
위치 추정 알고리즘이 새로운 관측 데이터에 기반하여 위치 추정을 갱신하면, map → odom 변환의 값이 급격히 변할 수 있다. 이러한 불연속적 점프의 일반적인 발생 상황은 다음과 같다.
- 초기 위치 추정 수렴: 로봇 시동 후 위치 추정이 수렴하기 전까지 큰 보정이 발생할 수 있다.
- 납치 로봇 문제(Kidnapped Robot Problem): 로봇이 임의의 위치로 이동된 후 재위치 추정이 이루어지는 경우.
- 루프 폐합(Loop Closure): SLAM에서 이전에 방문한 장소를 재인식하여 지도를 보정하는 경우.
- 저품질 관측: 일시적으로 부정확한 센서 데이터에 의하여 추정치가 변동하는 경우.
이러한 점프가 odom → base_link 변환이 아닌 map → odom 변환에서 발생하므로, 로봇의 운동 제어기는 영향을 받지 않는다.
5. map 프레임의 활용
5.1 글로벌 경로 계획
글로벌 경로 계획기(global planner)는 map 프레임에서 시작 위치와 목표 위치를 기반으로 경로를 생성한다.
# Nav2 글로벌 비용 지도 설정
global_costmap:
ros__parameters:
global_frame: "map"
robot_base_frame: "base_link"
update_frequency: 1.0
publish_frequency: 1.0
static_layer:
map_topic: "/map"
5.2 지도 데이터의 좌표 기준
map_server가 발행하는 점유 격자 지도(nav_msgs/msg/OccupancyGrid)의 좌표계는 map 프레임이다. 지도의 각 셀은 map 프레임에서의 위치로 변환된다.
5.3 위치 기반 작업 지시
사전에 학습된 목표 지점(waypoint)이나 관심 영역(region of interest)은 map 프레임에서의 좌표로 정의된다. 이를 통하여 로봇 재시동 후에도 동일한 위치를 참조할 수 있다.
# map 프레임에서의 목표 위치 정의
goal = PoseStamped()
goal.header.frame_id = 'map'
goal.header.stamp = self.get_clock().now().to_msg()
goal.pose.position.x = 5.0
goal.pose.position.y = 3.0
goal.pose.orientation.z = 0.707
goal.pose.orientation.w = 0.707
navigator.goToPose(goal)
5.4 장애물 지도의 유지
글로벌 비용 지도(global costmap)는 map 프레임에서 유지된다. 센서에서 감지된 장애물은 map 프레임으로 변환되어 비용 지도에 반영됨으로써 글로벌 경로 계획에 활용된다.
6. map 프레임 운용 시 주의 사항
6.1 위치 추정 알고리즘의 선택
map → odom 변환의 품질은 위치 추정 알고리즘의 성능에 직접적으로 의존한다. 환경 특성에 적합한 알고리즘을 선택하여야 한다.
| 환경 | 권장 알고리즘 | 사유 |
|---|---|---|
| 정적 실내 환경 (사전 지도 보유) | AMCL | 안정적 위치 추정, 낮은 연산 부하 |
| 동적 또는 미지 환경 | SLAM (slam_toolbox, rtabmap) | 실시간 지도 생성 필요 |
| 실외 대규모 환경 | GPS 융합 robot_localization | 절대 위치 기준 필요 |
| 고정밀 요구 환경 | 시각-관성 융합 (VINS) | 센티미터 수준 정확도 |
6.2 지도와 실제 환경의 일관성
map 프레임 기반의 위치 추정이 정상적으로 작동하려면, 사용하는 지도가 실제 환경과 일치하여야 한다. 환경 변화(가구 이동, 벽 추가 등)가 발생하면 지도를 갱신하여야 한다.
6.3 초기 위치 설정
로봇 시동 시 map 프레임에서의 초기 위치를 설정하여야 위치 추정 알고리즘이 정상적으로 수렴할 수 있다. 초기 위치는 런치 파일의 매개변수, RViz2의 “2D Pose Estimate” 도구, 또는 프로그래밍적 인터페이스를 통하여 설정할 수 있다.
# AMCL 초기 위치 설정
amcl:
ros__parameters:
set_initial_pose: true
initial_pose:
x: 0.0
y: 0.0
yaw: 0.0
6.4 다중 층(Multi-Floor) 환경
다중 층 건물에서 각 층마다 별도의 2D 지도를 사용하는 경우, 층 전환 시 map 프레임의 지도를 교체하고 위치 추정을 재초기화하여야 한다. 이는 현재 ROS2 표준에서 완전히 표준화되지 않은 영역이다.
7. 요약
map 프레임은 환경 지도에 고정된 글로벌 좌표 프레임으로, 장기적으로 정확한 위치 정보를 제공한다. 위치 추정 알고리즘이 map → odom 변환을 발행하여 주행 측정의 누적 드리프트를 보정하며, 이 과정에서 불연속적 점프가 발생할 수 있다. map 프레임은 글로벌 경로 계획, 지도 데이터 관리, 위치 기반 작업 지시 등의 기준으로 사용되며, 그 정확성은 위치 추정 알고리즘의 성능과 지도의 품질에 의존한다.
참고 문헌 및 출처
- T. Foote, “REP 105 – Coordinate Frames for Mobile Platforms,” ROS Enhancement Proposals, https://www.ros.org/reps/rep-0105.html (2010, 최종 갱신 2022)
- S. Macenski et al., “SLAM Toolbox: SLAM for the dynamic world,” Journal of Open Source Software, vol. 6, no. 61, 2021.
- Nav2 공식 문서, “Setting Up the Map Server”, https://docs.nav2.org/setup_guides/ (Nav2 1.1, 2023)
- S. Macenski et al., “Robot Operating System 2: Design, Architecture, and Uses in the Wild,” Science Robotics, vol. 7, no. 66, 2022.