본문으로 바로가기

GIMP를 이용한 지도 파일 .pgm 수정

category 강좌/ROS2 2026. 5. 29. 00:18

1. GIMP 설치

1) Ubuntu에서 GIMP 설치

 

다음 명령을 실행하여 GIMP를 설치합니다.

 
sudo apt update
sudo apt install gimp -y
 

 

 

설치 확인:

 
gimp --version
 
 

 

GIMP 실행:

 
gimp
 

 

 

또는 지도 파일을 바로 열 수 있습니다.

 
gimp map.pgm
 

 

 

 

2. ROS 2 지도 파일 구조

1) PGM 파일

.pgm 파일은 지도 이미지입니다.

 

색상 의미는 다음과 같습니다.


검정색 장애물 벽, 물체, 진입 금지 구역
흰색 자유 공간 로봇이 이동 가능한 영역
회색 미확인 영역 SLAM이 확인하지 못한 영역

 

일반적인 픽셀 값은 다음과 같습니다.

검정색: 0
흰색: 254 또는 255
회색: 약 205
 

 

즉, GIMP에서 수정할 때 기준은 단순합니다.

검정색으로 칠하면 장애물
흰색으로 칠하면 이동 가능 공간
회색으로 칠하면 미확인 영역
 
 
 
 

2) YAML 파일

 

예시:

 
image: turtlebot3_map.pgm
mode: trinary
resolution: 0.05
origin: [-1.21, -2.4, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25
 

 

a. image: turtlebot3_map.pgm

 

지도 이미지 파일 이름입니다.

 
image: turtlebot3_map.pgm
 

 

turtlebot3_map.pgm 파일을 실제 맵 이미지로 사용한다는 뜻입니다. PGM 이미지는 흑백 이미지입니다.

이 이미지를 기반으로 로봇이 갈 수 있는 곳과 갈 수 없는 곳을 판단합니다.

 

 

2. mode: trinary

 

이미지를 지도 값으로 변환하는 방식입니다.

 
mode: trinary
 

 

trinary는 맵을 세 가지 값으로만 나눕니다.

                   상태                           Occupancy Grid 값                          의미
Free 0 이동 가능
Occupied 100 장애물
Unknown -1 알 수 없음

 

즉, 애매한 회색 값도 임계값 기준으로 free / occupied / unknown 중 하나로 분류합니다.

 

ROS Navigation에서 가장 흔히 쓰는 방식입니다.

 

 

 

3. resolution: 0.05

 

지도 이미지의 픽셀 하나가 실제 세계에서 몇 미터인지 나타냅니다.

 
resolution: 0.05
 

 

뜻은:

1 pixel = 0.05 m
 

 

즉,

1 pixel = 5 cm
 

 

예를 들어 이미지 크기가 400 x 400 pixel이면 실제 맵 크기는:

400 × 0.05 = 20 m
 

 

따라서 실제 공간 크기는:

20 m × 20 m
 

입니다.

 

해상도가 작을수록 정밀하지만, 맵 데이터가 커집니다.

         resolution           의미
0.01 1픽셀 = 1cm, 매우 정밀
0.05 1픽셀 = 5cm, 일반적인 TurtleBot3 맵
0.10 1픽셀 = 10cm, 덜 정밀하지만 가벼움

 

 

 

4. origin: [-1.21, -2.4, 0]

 

지도 이미지의 원점이 실제 좌표계에서 어디에 위치하는지 나타냅니다.

 
origin: [-1.21, -2.4, 0]
 

 

형식은 다음과 같습니다.

 
origin: [x, y, yaw]
 

 

이 맵의 왼쪽 아래 픽셀 위치가 실제 /map 좌표계에서:

x = -1.21 m
y = -2.4 m
yaw = 0 rad
 

에 놓인다는 뜻입니다.

 

중요한 점은 origin은 보통 이미지의 왼쪽 아래 모서리 기준입니다.


PGM 이미지는 화면상으로는 왼쪽 위부터 보이지만, ROS 좌표계에서는 왼쪽 아래를 기준으로 봅니다.

 

 

 

5. negate: 0

 

이미지의 흑백 의미를 반전할지 여부입니다.

 
negate: 0
 

0이면 반전하지 않습니다.

 

일반적인 해석은:

              색상                                     의미
검은색 장애물
흰색 자유 공간

만약 negate: 1이면 반대로 해석됩니다.

                      색상                              의미
검은색 자유 공간
흰색 장애물

 

대부분의 SLAM으로 생성된 맵은 negate: 0을 사용합니다.

 

 

 

6. occupied_thresh: 0.65

 

장애물로 판단하는 임계값입니다.

 
occupied_thresh: 0.65
 

 

픽셀의 occupancy 확률이 0.65 이상이면 장애물로 판단합니다.

 

occupancy >= 0.65 → Occupied
 

 

즉, 장애물일 확률이 65% 이상이면 해당 셀은 장애물입니다.

 

Occupancy Grid에서는 보통 장애물 셀이 100으로 표현됩니다.

 

negate: 0일 때 occupancy 확률은 아래의 식으로 구할 수 있습니다.

occupancy = (255 - pixel_value) / 255

 

 

 

7. free_thresh: 0.25

 

이동 가능한 공간으로 판단하는 임계값입니다.

 
free_thresh: 0.25
 

픽셀의 occupancy 확률이 0.25 이하이면 자유 공간으로 판단합니다.

occupancy <= 0.25 → Free
 

즉, 장애물일 확률이 25% 이하이면 이동 가능한 공간입니다.

 

Occupancy Grid에서는 보통 자유 공간이 0으로 표현됩니다.

 

 

 

8. occupied_thresh와 free_thresh 사이 값

 

두 임계값 사이의 값은 미확인 영역으로 처리됩니다.

0.25 < occupancy < 0.65 → Unknown
 

즉:

occupancy 값결과
0.00 ~ 0.25 Free
0.25 ~ 0.65 Unknown
0.65 ~ 1.00 Occupied

 

 

 

3. GIMP로 지도 열기

터미널에서 실행:

 
gimp map.pgm
 

 

또는 GIMP에서 직접 열기:

File → Open → map.pgm
 

 

 

 

 

파일을 연 후 먼저 이미지 모드를 확인합니다.

Image → Mode → Grayscale
 

 

 

ROS 2 지도는 일반적으로 흑백 Grayscale 이미지로 유지해야 합니다.

 

 

 

4. 수정 전 백업

원본을 바로 수정하면 안 됩니다. 먼저 복사본을 만듭니다.

 
cp turtlebot3_map.pgm turtlebot3_map_origin.pgm
mv turtlebot3_map.pgm turtlebot3_map_modified.pgm
 

 

이후에는 map_modified.pgm만 수정합니다.

 
gimp ~/maps/edit/map_modified.pgm
 

 

 

 

 

 

5. GIMP에서 주로 사용하는 도구

1) Pencil Tool 사용

 

지도 수정에는 Brush보다 Pencil Tool이 좋습니다.

Tools → Paint Tools → Pencil
 

 

 

단축키:

N
 

 

권장 설정:

Opacity: 100%
Hardness: 100%
 

 

Pencil Tool은 가장자리를 흐리게 만들지 않아 지도 수정에 적합합니다.

 

 

 

2) 색상별 수정 기준

 

벽 추가 검정색
가상 벽 추가 검정색
노이즈 제거 흰색
잘못 생긴 벽 제거 흰색
지도 외곽 정리 회색
미확인 영역 복원 회색

 

 

 

 

 

6. 대표적인 지도 수정 작업

1) SLAM 노이즈 제거

SLAM 후 지도에 작은 검은 점이나 이상한 선이 생길 수 있습니다.

이런 노이즈는 로봇이 장애물로 인식할 수 있습니다.

 

수정 방법:

1. Pencil Tool 선택
2. 흰색 선택
3. 검은 노이즈를 흰색으로 칠함
4. 저장
 
 
 
 

2) 잘못 생성된 벽 제거

사람, 임시 물체, 센서 오류 때문에 복도 중간에 벽처럼 생긴 선이 생길 수 있습니다.

 

수정 방법:

1. 흰색 선택
2. 잘못된 검은 선을 흰색으로 지움
3. 실제 벽은 지우지 않도록 주의
 

 

실제 벽을 지우면 로봇이 벽을 통과하는 경로를 만들 수 있습니다.

 

 

 

3) 가상 벽 추가

로봇이 들어가면 안 되는 구역은 검은색으로 막을 수 있습니다.

 

예:

계단
위험 구역
사람 전용 공간
유리문 근처
좁은 통로
 

 

수정 방법:

1. 검정색 선택
2. Pencil Tool 또는 Rectangle Select Tool 사용
3. 진입 금지 구역 앞에 검정색 선 추가
 

 

권장 두께:

3~10 pixel 정도
 

 

너무 얇으면 Nav2 costmap에서 안정적으로 반영되지 않을 수 있습니다.

 

 

 

 

4) 지도 외곽 정리

지도 바깥이나 탐색하지 않은 영역은 흰색으로 만들지 않는 것이 좋습니다.

 

권장:

지도 외곽 = 회색
 

 

흰색으로 칠하면 로봇이 지도 밖을 이동 가능 영역으로 판단할 수 있습니다.

 

 

 

 

7. 저장 방법

 

수정 후에는 Export로 저장합니다.

File → Export As
 
 

 

 

파일명 예:

map_modified.pgm
 

 

가능하면 다음 상태를 유지합니다.

Grayscale
8-bit
PGM
 

 

레이어를 사용했다면 저장 전에 병합합니다.

Image → Flatten Image
 
 
 
 
 

8. YAML 파일 수정

PGM 파일명을 바꿨다면 YAML 파일의 image 항목도 수정해야 합니다.

 

 

수정 전:

 
image: turtlebot3_map_origin.pgm
mode: trinary
resolution: 0.05
origin: [-1.21, -2.4, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25
 

 

수정 후:

 
image: turtlebot3_map_modified.pgm
mode: trinary
resolution: 0.05
origin: [-1.21, -2.4, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25
 

 

 

 

 

주의할 점:

resolution 변경 금지
origin 변경 금지
이미지 크기 변경 금지
 

 

이 값들이 바뀌면 RViz에서 로봇 위치와 지도가 어긋날 수 있습니다.

 

 

 

 

9. 수정한 지도 실행

 

Nav2에서 수정한 지도를 사용할 때:

 
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True \
  map:=$HOME/maps/turtlebot3_map_modified.yaml

 

 

 

 

새롭게 작성한 지도 위에서 Nav2 Goal을 이용하여 주행을 시작합니다. 다양한 위치를 목표지점으로 정하고 주행하면서 주행성능을 확인하시기 바랍니다.

728x90
728x90