코딩 및 기타

map server ( Nav2 )

정지홍 2025. 3. 23. 15:28

pgm 파일

 

yaml파일

 

map_server

  • map server는 nav2의 주요 구성요소이다.
  • map server는 지도( yaml + pgm )파일을 로딩해서, ROS 2 시스템에 publish하는 역할을 한다.
    • 즉, 로봇이 '이미 생성된 정적인 2d지도를 기반으로 경로계획, 위치추정' 을 할수있게 하는 '지도 제공자'라고 생각하면 된다.
  • 사용하는 이유
    • 로봇이 주어진 환경의 지도를 알아야 경로를 계획하고, 자신의 위치를 추정하고, 장애물을 인식해서 피하는 것이 가능하다.
    • SLAM을 사용하지 않고 이미 생성된 지도에서 움직이려면 필수이다.
    • AMCL과 같은 localization 노드가 위치 추정을 하려면 /map이 필요하다.
  • 만약 안쓴다면???
    • /map 토픽이 publish되지 않으며, 이러면 path planning , localization 등이 작동하지 않는다.
      • 그러면 어떠한 노드들이 /map을 subscribe하나?
        • AMCL : 로봇의 위치를 추정
        • Nav2 Planner : 최적 경로를 계산
        • Costmap Server : 장애물 및 경로 비용 생성
        • Rviz : 맵 시각화
    • 로봇은 어디가 장애물이고 어디가 비어있는 공간인지 몰라서 경로를 세울수없다.
      • ==> 즉, 정적인 지도 기반 네비게이션이 불가능하다.
  • 동작 방식
    • 1. yaml파일에는 .pgm이미지( 지도의 픽셀 정보 ), 해상도 , 좌표계 , 점유값 기준 등이 담겨 있다.
    • 2. map server는 yaml파일을 파싱하고, 연결된 .pgm파일을 읽는다.
    • 3. map server는 위에서 읽은 .pgm을 /map 토픽으로 Occupancy Grid 메시지를 publish한다.
      • Occupancy Grid 메시지 : ros에서 2d 격자 지도를 표한하기 위한 표준 메시지
    • 4. 다른 노드들( ex. AMCL , planner 등)은 /map 토픽을 구독해서 자신들의 작업에 이용한다.

 

 

/opt/ros/jazzy/lib안에 존재하는 nav2_map_server

map server 명령어 예시

ros2 run nav2_map_server map_server \
  --ros-args \
  -p yaml_filename:=$(pwd)/my_map.yaml \
  -p use_sim_time:=true
  • ros2 run
    •  ros2 run은 lib안의 실행 파일을 직접 실행한다.
  • nap2_map_server map_server
    • map_server라는 실행이 가능한 노드( binary )를 직접 실행한다.
  • -p yaml_file:=$(pwd)/my_map.yaml
    • 파라미터 설정 : 여기서는 사용할 지도 파일의 경로를 직접 지정함.
  • -p use_sim_time:=true
    • 시뮬레이션을 사용하겠다는 설정
  • 별도.... ( 위의 디렉토리 존재하는 파일들에 대한 설명 )
    • map_server* : 지도를 로딩하고 /map을 publish하는 노드
    • map_server_server* : 지도를 저장하는 서버 노드이며, 이는 서비스로 요청을 받는다.
    • map_saver_cli* : 위의 맵 서버에 요청을 보내는 client 노드
    • costmap_filter_info_server* : costmap 필터 정보를 publish한다.

'코딩 및 기타' 카테고리의 다른 글

250408 세미나  (0) 2025.04.07
gazebo map 250327  (0) 2025.03.27
ros2 turtlebot 자주쓰던 명령어  (0) 2025.03.19
sim.launch.py ( turtlebot4 gz sim sample code )  (0) 2025.03.15
조합 최적화  (0) 2025.02.14