[ROS2] Map server를 띄우고 rviz2로 시각화 하기

choonsikmom·2025년 8월 20일
0

ROS/Robotics

목록 보기
8/8
post-thumbnail

보통 Navigation 할 때 지도를 만들어서 런치 파일로 같이 띄워놓고 하긴 하지만, 런치 파일 안 만들고도 map server 만 따로 띄워 놓고 싶을 때 사용하는 방법이다.

준비물은 map.yaml 파일과 map.png (또는 pgm)


map server 구동하기

# 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 로 뜰 것이다.

그러면 configureactivate로 변경해줘야 한다.

# 라이프사이클 노드 활성화하기
# 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 내에 플로팅 되는걸 볼 수 있다.

profile
춘식이랑 함께하는 개발일지.. 그런데 이제 먼작귀를 곁들인

0개의 댓글