
보통 Navigation 할 때 지도를 만들어서 런치 파일로 같이 띄워놓고 하긴 하지만, 런치 파일 안 만들고도 map server 만 따로 띄워 놓고 싶을 때 사용하는 방법이다.
준비물은 map.yaml 파일과 map.png (또는 pgm)

# map server 구동
$ ros2 run nav2_map_server map_server --ros-args -p yaml_filename:=your_map.yaml
위 명령어를 입력하면 맵 서버 노드가 실행된다.
# 실행중인 노드 확인
$ ros2 node list
# 또는
$ ros2 node list | grep map_server

명령어를 실행했을 때, 위와 같이 /map_server 가 node list에 있어야 한다. 노드가 안 뜬다면 맵 파일이나 디렉토리 이슈일 수 있다.
아마 맵 서버를 실행하고 바로 rviz2에서 시각화가 가능하진 않을 것이다. 노드는 실행되었으나, /map 토픽이 발행되지 않는 상태.
이는 map server의 lifecycle이 활성화되지 않았기 때문이다. 상태를 확인하여 보자.
# 라이프사이클 상태 check
ros2 lifecycle get /map_server
# 출력 결과
# - unconfigured
# - inactive
# - active <- 정상 동작 상태
# - finalized
맵 서버 첫 실행 후라면 아마 라이프사이클 상태가 unconfigured 로 뜰 것이다.
그러면 configure 후 activate로 변경해줘야 한다.
# 라이프사이클 노드 활성화하기
# 1. unconfigured -> configure
ros2 lifecycle set /map_server configure
# 2. configure -> active
ros2 lifecycle set /map_server activate
라이프사이클이 active 상태가 되었다면, 이제 맵 토픽이 정상적으로 발행되어야 한다. 맵 토픽을 확인해 보자.
# 맵 토픽 확인
ros2 topic list | grep map
# 맵 데이터 발행 확인
ros2 topic echo /map --once
토픽 메시지까지 잘 출력된다면, 거의 다 됐다.
이제 rviz를 켜고, Add에서 /map 토픽을 넣어 보자. 당연히 Fixedframe은 Map으로 되어 있어야 한다.

토픽 발행도 정상적으로 되고 있는데 no map recieved가 뜬다면? QoS 설정 문제 일 수 있다.
map topic 정보를 확인해보자.
#
$ ros2 topic info /map -v

위 사진과 같이 QoS 관련 설정 정보가 뜰 텐데, Rviz상의 map QoS 설정과 실제 map 토픽 QoS 설정이 맞지 않으면 map topic이 rviz 상에서 플로팅되지 않는다.
- Map Topic의 QoS 설정
Publisher(map_server): Durability: TRANSIENT_LOCAL
Subscriber(rviz): Durability: VOLATILE
위와 같이 rviz에서 설정을 맞춰주어야 한다.
map topic 탭에서 Durability 설정을 건드리자. 위와 같이, transient_local로 바꿔 주어야 한다.

이렇게 rviz에서 설정해주고 나면 지도 이미지가 rviz 내에 플로팅 되는걸 볼 수 있다.