Main Content

occupancyMap3D

3차원 점유 맵 생성

R2019b 이후

설명

occupancyMap3D 객체는 3차원 맵과 맵 정보를 저장합니다. 맵은 팔진트리 데이터 구조에 확률 값으로 저장됩니다. 이 클래스는 임의의 환경을 처리하고 관측값 입력값을 기반으로 크기를 동적으로 확장합니다. 포인트 클라우드 또는 특정 xyz 위치로 관측값을 추가할 수 있습니다. 이러한 관측값은 확률 값을 업데이트합니다. 확률적 값은 위치의 점유를 나타냅니다. 팔진트리 데이터 구조는 메모리와 디스크 모두에서 효율성을 유지하기 위해 데이터를 적절하게 트리밍합니다.

생성

설명

omap = occupancyMap3D는 관측값과 디폴트 속성값이 없는, 빈 3차원 점유 맵을 생성합니다.

예제

omap = occupancyMap3D(res)는 맵 해상도를 지정하고(단위: 셀/미터) Resolution 속성을 설정합니다.

omap = occupancyMap3D(res,Name,Value)는 하나 이상의 이름-값 인수를 사용하여 속성을 지정합니다. 예를 들어 "FreeThreshold",0.25는 장애물이 없는 셀로 간주할 임계값을 0.25의 확률 값으로 지정합니다.

속성

모두 확장

그리드 해상도(단위: 미터당 셀 개수)로, 스칼라로 지정됩니다. 생성 시 해상도를 지정합니다. 이 값보다 높은 정밀도로 관측값을 삽입하면 내림하여 이 해상도로 적용됩니다.

장애물이 없는 셀로 간주할 임계값으로, 양의 스칼라로 지정됩니다. 이 임계값보다 낮은 확률 값은 장애물이 없는 것으로 간주됩니다.

점유된 셀로 간주할 임계값으로, 양의 스칼라로 지정됩니다. 이 임계값보다 높은 확률 값은 점유된 것으로 간주됩니다.

확률 값의 포화 한도로, [min max] 벡터로 지정됩니다. 이러한 포화 값보다 높거나 낮은 값은 min 값 또는 max 값으로 설정됩니다. 이 속성은 다수의 관측값을 사용할 때 셀의 과포화를 줄입니다.

객체 함수

checkOccupancyCheck if locations are free or occupied
getOccupancyGet occupancy probability of locations
inflate각 점유 위치 확장
insertPointCloudInsert 3-D points or point cloud observation into map
rayIntersectionFind intersection points of rays and occupied map cells
setOccupancySet occupancy probability of locations
showDisplay 3-D occupancy map
updateOccupancyUpdate occupancy probability at locations

예제

모두 축소

occupancyMap3D 객체는 환경을 매핑하기 위해 센서 관측값을 사용하여 3차원 공간에 장애물을 저장합니다. 맵을 생성하고 포인트 클라우드에서 점을 추가하여 장애물을 식별합니다. 그런 다음 맵에서 장애물을 확장시켜 장애물 주변의 안전한 작동 공간을 확보합니다.

맵 해상도가 10셀/미터인 occupancyMap3D 객체를 생성합니다.

map3D = occupancyMap3D(10);

자세 [x y z qw qx qy qz]의 관측값으로 3차원 점 집합을 정의합니다. 이 자세는 이러한 점을 관측하는 센서를 위한 것이며 원점을 중심으로 합니다. 여러 관측값을 삽입하기 위해 두 개의 점 집합을 정의합니다.

pose = [ 0 0 0 1 0 0 0];

points = repmat((0:0.25:2)', 1, 3);
points2 = [(0:0.25:2)' (2:-0.25:0)' (0:0.25:2)'];
maxRange = 5;

insertPointCloud를 사용하여 첫 번째 점 집합을 삽입합니다. 이 함수는 센서 자세와 주어진 점을 사용하여 맵에 관측값을 삽입합니다. 표시된 색상은 점의 높이와 상관관계가 있는데, 이는 단지 설명을 돕기 위한 것입니다.

insertPointCloud(map3D,pose,points,maxRange)
show(map3D)

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

두 번째 점 집합을 삽입합니다. 센서 자세(원점)와 이러한 점 사이의 반직선은 이전에 삽입한 점과 겹칩니다. 따라서 센서와 새로운 점 사이의 빈 공간이 업데이트되고 빈 공간으로 표시됩니다.

insertPointCloud(map3D,pose,points2,maxRange)
show(map3D)

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

장애물 주변에서 안전하게 작동할 수 있도록 맵을 확장하여 완충 지대를 추가합니다. 이동체 반경과 안전 거리를 정의하고 이러한 값의 합계를 사용하여 맵의 확장 반경을 정의합니다.

vehicleRadius = 0.2;
safetyRadius = 0.3;
inflationRadius = vehicleRadius + safetyRadius;
inflate(map3D, inflationRadius);

show(map3D)

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

알고리즘

모두 확장

참고 문헌

[1] Hornung, Armin, Kai M. Wurm, Maren Bennewitz, Cyrill Stachniss, and Wolfram Burgard. "OctoMap: an efficient probabilistic 3D mapping framework based on octrees." Autonomous Robots 34, no. 3 (April 2013): 189–206. https://doi.org/10.1007/s10514-012-9321-0.

확장 기능

버전 내역

R2019b에 개발됨