Main Content

binaryOccupancyMap

이진 값으로 점유 그리드 생성

설명

binaryOccupancyMap은 장애물을 포함해 로봇 작업 공간을 표현하고 시각화하는 데 사용할 수 있는 2차원 occupancy map 객체를 만듭니다. 센서 데이터와 위치 추정값의 통합을 통해 장애물의 대략적인 위치를 공간적으로 표현합니다.

점유 그리드는 경로 계획과 같은 로보틱스 알고리즘에 사용됩니다. 또한 충돌 없는 경로 탐색, 충돌 회피 수행, 위치추정 계산 등의 맵 작성 응용 분야에서도 사용됩니다. 특정 응용 분야에 맞도록 점유 그리드를 수정할 수 있습니다.

점유 그리드의 각 셀에는 해당 셀의 점유 상태를 나타내는 값이 있습니다. 점유된 위치는 true (1)로 나타내고 비어 있는 위치는 false (0)으로 나타냅니다.

객체는 세 가지 참조 프레임, 즉 세계, 로컬, 그리드를 추적합니다. 세계 프레임은 GridLocationInWorld에 의해 정의됩니다. 이 속성은 세계 프레임을 기준으로 맵의 왼쪽 아래 코너를 정의합니다. LocalOriginInWorld 속성은 세계 프레임을 기준으로 로컬 프레임의 원점 위치를 지정합니다. 인덱스가 (1,1)인 첫 번째 그리드 위치는 그리드의 왼쪽 위 코너에서 시작합니다.

참고

이 객체의 이전 명칭은 robotics.BinaryOccupancyGrid였습니다.

생성

설명

map = binaryOccupancyMap은 너비와 높이가 각각 10미터인 2차원 이진 점유 그리드를 생성합니다. 디폴트 그리드 해상도는 미터당 셀 1개입니다.

예제

map = binaryOccupancyMap(width,height)widthheight(단위: 미터)로 표시된 작업 공간을 나타내는 2차원 이진 점유 그리드입니다. 디폴트 그리드 해상도는 미터당 셀 1개입니다.

예제

map = binaryOccupancyMap(width,height,resolution)은 미터당 셀 수로 지정된 Resolution 속성으로 그리드를 생성합니다. 맵은 기본적으로 세계 좌표입니다.

map = binaryOccupancyMap(rows,cols,resolution,"grid")는 (rows,cols) 크기의 2차원 점유 그리드를 생성합니다.

map = binaryOccupancyMap(p)는 행렬 p의 값에서 그리드를 생성합니다. 그리드의 크기는 행렬의 크기와 일치하며, 각 셀 값은 행렬의 해당 위치에서 해석됩니다. p에는 0과 1로 이루어진 숫자형 또는 논리형이 포함됩니다.

예제

map = binaryOccupancyMap(p,resolution)은 미터당 셀 수로 지정된 Resolution 속성이 있는 행렬에서 맵을 생성합니다.

map = binaryOccupancyMap(sourcemap)은 또 다른 binaryOccupancyMap 객체의 값을 사용하여 객체를 생성합니다.

map = binaryOccupancyMap(sourcemap,resolution)은 또 다른 binaryOccupancyMap 객체의 값을 사용하여 객체를 생성하지만, 지정된 해상도를 갖도록 행렬을 리샘플링합니다.

map = binaryOccupancyMap(___,Name=Value)는 하나 이상의 이름-값 인수를 사용하여 속성을 설정합니다.

입력 인수

모두 확장

맵 너비로, 양의 스칼라로 지정됩니다(단위: 미터).

맵 높이로, 양의 스칼라로 지정됩니다(단위: 미터).

맵 그리드 값으로, 행렬로 지정됩니다.

Occupancy map 객체로, binaryOccupancyMap 객체로 지정됩니다.

속성

모두 확장

읽기 전용 속성입니다.

그리드의 행과 열의 개수로, [rows cols] 형식의, 요소를 2개 가진 벡터로 저장됩니다.

읽기 전용 속성입니다.

그리드 해상도로, 스칼라로 저장됩니다(단위: 미터당 셀 개수).

읽기 전용 속성입니다.

로컬 프레임에서 x 좌표의 최솟값과 최댓값으로, [min max] 형식의, 요소를 2개 가진 벡터로 저장됩니다. 로컬 프레임은 LocalOriginInWorld 속성에 의해 정의됩니다.

읽기 전용 속성입니다.

로컬 프레임에서 y 좌표의 최솟값과 최댓값으로, [min max] 형식의, 요소를 2개 가진 벡터로 저장됩니다. 로컬 프레임은 LocalOriginInWorld 속성에 의해 정의됩니다.

읽기 전용 속성입니다.

세계 프레임에서 x 좌표의 최솟값과 최댓값으로, [min max] 형식의, 요소를 2개 가진 벡터로 저장됩니다. 이 값은 그리드에서 x 좌표의 세계 범위를 나타냅니다.

읽기 전용 속성입니다.

y 좌표의 최솟값과 최댓값으로, [min max] 형식의, 요소를 2개 가진 벡터로 저장됩니다. 이 값은 그리드에서 y 좌표의 세계 범위를 나타냅니다.

세계 좌표에서 그리드의 왼쪽 아래 코너 위치로, 요소를 2개 가진 벡터 [xGrid yGrid]로 지정됩니다.

세계 좌표에서 로컬 프레임의 원점 위치로, 요소를 2개 가진 벡터 [xLocal yLocal]로 지정됩니다. 이동체가 움직일 때 로컬 프레임을 이동하려면 move 함수를 사용하십시오.

로컬 좌표에서 그리드의 왼쪽 아래 코너 위치로, 요소를 2개 요소를 가진 벡터 [xLocal yLocal]로 지정됩니다.

맵 밖에 있는 영역을 포함해 지정되지 않은 맵 위치의 디폴트 값으로, 0 또는 1로 지정됩니다.

객체 함수

copyCreate copy of binary occupancy map
checkOccupancyCheck if locations are free or occupied
getOccupancyGet occupancy value of locations
grid2local그리드 인덱스를 로컬 좌표로 변환
grid2world그리드 인덱스를 세계 좌표로 변환
inflate각 점유 위치 확장
insertRayInsert ray from laser scan observation
local2gridConvert local coordinates to grid indices
local2worldConvert local coordinates to world coordinates
moveMove map in world frame
occupancyMatrix점유 그리드를 행렬로 변환
raycastCompute cell indices along a ray
rayIntersectionFind intersection points of rays and occupied map cells
setOccupancySet occupancy value of locations
showDisplay binary occupancy map
syncWithSync map with overlapping map
world2grid세계 좌표를 그리드 인덱스로 변환
world2localConvert world coordinates to local coordinates

예제

모두 축소

10m x 10m 크기의 빈 맵을 생성합니다.

map = binaryOccupancyMap(10,10,10);

세계 위치의 점유를 설정하고 맵을 표시합니다.

x = [1.2; 2.3; 3.4; 4.5; 5.6];
y = [5.0; 4.0; 3.0; 2.0; 1.0];

setOccupancy(map, [x y], ones(5,1))
figure
show(map)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

점유 위치를 지정한 반경 범위로 확장합니다.

inflate(map, 0.5)
figure
show(map)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

세계 위치로부터 그리드 위치를 구합니다.

ij = world2grid(map, [x y]);

그리드 위치를 비어 있는 위치로 설정합니다.

setOccupancy(map, ij, zeros(5,1), 'grid')
figure
show(map)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

이 예제는 맵 작성과 경로 계획에 사용할 수 있도록 이미지를 이진 점유 그리드로 변환하는 방법을 보여줍니다.

이미지를 가져옵니다.

image = imread('imageMap.png');

회색조로 변환한 다음 주어진 임계값을 기준으로 흑백 이미지로 변환합니다.

grayimage = rgb2gray(image);
bwimage = grayimage < 0.5;

흑백 이미지를 이진 점유 그리드에 대한 행렬 입력값으로 사용합니다.

grid = binaryOccupancyMap(bwimage);

show(grid)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

이 예제는 MATLAB에서 사용할 수 있도록 .pgm 파일을 binaryOccupancyMap 객체로 변환하는 방법을 보여줍니다.

imread를 사용하여 이미지를 가져옵니다. 이미지가 상당히 크기 때문에 영역에 맞게 잘라야 합니다.

image = imread('playpen_map.pgm');
imageCropped = image(750:1250,750:1250);
imshow(imageCropped)

Figure contains an axes object. The hidden axes object contains an object of type image.

알려지지 않은 영역(회색)을 제거하고 비어 있는 공간으로 처리해야 합니다. 임계값을 기준으로 논리형 행렬을 만듭니다. 사용하는 이미지에 따라 이 값은 다를 수 있습니다. 점유된 공간은 1로 설정해야 합니다(이미지에서 흰색).

imageBW = imageCropped < 100;
imshow(imageBW)

Figure contains an axes object. The hidden axes object contains an object of type image.

수정된 맵 이미지를 사용하여 binaryOccupancyMap 객체를 생성합니다.

map = binaryOccupancyMap(imageBW);
show(map)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

확장 기능

버전 내역

R2015a에 개발됨

모두 확장