Heightmap 은 지형의 높이 정보를 저장하는 이미지입니다. 이 이미지는 픽셀의 흑백 값으로 표현됩니다. 밝을 수록 지형이 높아지고, 어두울 수록 낮은 지형을 뜻합니다.
Gazebo 시뮬레이터에서 정현파 (sine) 형태의 지면 생성하기
Gazebo world 의 sdf 파일에서는 Heightmap 을 이용해서 지형을 모델링할 수 있습니다.
1) Heightmap 사용을 위한 이미지 생성
import os
import numpy as np
from PIL import Image
# 이미지 크기와 sin 함수의 주기, 진폭, 위상 등을 설정
width = 129
height = 129
period = 10
amplitude = 0.1
phase = 0
y, x = np.indices((height, width))
data = amplitude * np.sin(2 * np.pi * (1.0 / period) * x + phase)
img = Image.fromarray(np.uint8(data * 255))
path = os.path.expanduser('/usr/share/gazebo-11/media/sin_wave.png')
img.save(path)
이 코드를 실행하면 다음과 같은 이미지가 생성됩니다. 이때 주의할 것은 크기가 129x129 사이즈여야, sdf 파일로 불러왔을 때 정상적으로 지형이 생성됩니다. (왠지는 아직 잘 모르겠...)
2) Gazebo 에 불러오기
Gazebo 에서 불러올 수 있는 world 는 /usr/share/gazebo/media 에 저장할 수 있습니다.