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한다.