Main Content

poseGraph

2차원 자세 그래프 만들기

R2019b 이후

설명

poseGraph 객체는 2차원 자세 그래프 표현에 대한 정보를 저장합니다. 자세 그래프는 간선으로 연결된 노드를 포함합니다. 각 노드 추정값은 노드 간 상대 자세와 해당 측정값의 불확실성을 정의하는 간선 제약 조건에 의해 그래프에 연결됩니다.

자세 그래프를 반복적으로 구성하려면, addRelativePose 함수를 사용하여 상대 자세 추정값을 추가하고 이를 지정된 간선 제약 조건이 있는 기존 노드에 연결합니다. 자세 노드는 하나의 자세 노드를 기준으로 지정해야 합니다. 측정값의 불확실성은 정보 행렬을 사용하여 지정합니다.

Figure showing relative poses between node poses. Each sequential pose is connected by an edge. Poses are specified as x,y, theta relative to the previous node.

두 개의 비순차적 노드 사이에 간선을 추가하면 그래프에 루프 폐쇄가 생성됩니다. 노드 쌍 사이의 다중 간선도 지원되며, 여기에는 루프 폐쇄가 포함됩니다. 간선 제약 조건 또는 루프 폐쇄를 추가하려면 addRelativePose 함수를 사용하여 노드 ID를 지정합니다. 자세 그래프를 최적화할 때 optimizePoseGraph 함수는 이러한 모든 간선 제약 조건을 충족하는 해를 구합니다.

Figure showing loop closures and multiedges as constraints between nodes. Loop closures connect to previous non-sequential nodes. Multiedges are multiple constraints between the same node pair.

랜드마크 점 노드를 추가하려면 addPointLandmark 함수를 사용합니다. 이 함수는 방향 추정값 없이 노드를 xy 점으로 지정합니다. 랜드마크는 하나의 자세 노드를 기준으로 지정해야 합니다.

Figure showing a landmark position as an xy point relative to two nodes with an edge between each node. to.

lidarSLAM 객체는 2차원 자세 그래프의 최적화를 기반으로 하는, 라이다 기반 동시적 위치추정 및 지도작성을 수행합니다.

3차원 자세 그래프의 경우 poseGraph3D 객체 또는 Landmark SLAM Using AprilTag Markers 예제를 참조하십시오.

생성

설명

예제

poseGraph = poseGraph는 2차원 pose graph 객체를 만듭니다. addRelativePose를 사용해 자세를 추가하여 자세 그래프를 반복적으로 구성합니다.

poseGraph = poseGraph('MaxNumEdges',maxEdges,'MaxNumNodes',maxNodes)는 코드를 생성할 때 자세 그래프에 허용되는 간선 개수와 노드 개수의 상한을 지정합니다. 이 구문은 코드를 생성할 때만 필요합니다.

속성

모두 확장

읽기 전용 속성입니다.

자세 그래프의 노드 개수로, 양의 정수로 지정됩니다. 각 노드는 자세 측정값 또는 점 랜드마크 측정값을 나타냅니다. 노드 간의 상대 자세를 지정하려면 addRelativePose를 사용합니다. 랜드마크 자세를 지정하려면 addLandmarkPose를 사용합니다. 모든 노드 목록을 가져오려면 edgeNodePairs를 사용합니다.

읽기 전용 속성입니다.

자세 그래프의 간선 개수로, 음이 아닌 정수로 지정됩니다. 각 간선은 자세 그래프에서 두 개의 노드를 연결합니다. 루프 폐쇄 간선 및 랜드마크 간선이 포함됩니다.

읽기 전용 속성입니다.

자세 그래프의 루프 폐쇄 개수로, 음이 아닌 정수로 지정됩니다. 루프 폐쇄의 간선 ID를 가져오려면 LoopClosureEdgeIDs 속성을 사용합니다.

읽기 전용 속성입니다.

루프 폐쇄 간선 ID로, 간선 ID로 구성된 벡터로 지정됩니다.

읽기 전용 속성입니다.

랜드마크 노드 ID로, 벡터로 지정됩니다.

객체 함수

addPointLandmarkAdd landmark point node to pose graph
addRelativePoseAdd relative pose to pose graph
copyCreate copy of pose graph
edgeNodePairsEdge node pairs in pose graph
edgeConstraintsEdge constraints in pose graph
edgeResidualErrorsCompute pose graph edge residual errors
findEdgeIDFind edge ID of edge
nodeEstimatesPoses of nodes in pose graph
removeEdgesRemove loop closure edges from graph
showPlot pose graph

예제

모두 축소

노드 및 간선 제약 조건을 기반으로 자세 그래프를 최적화합니다. 이 예제에 사용된 자세 그래프는 Intel Research Lab Dataset에서 가져온 것이며, 실내 연구실에서 바퀴 오도메트리 및 레이저 거리 측정기 센서 정보를 수집하여 생성되었습니다.

2차원 자세 그래프가 포함된 Intel 데이터 세트를 불러옵니다. poseGraph 객체를 검사하여 노드 개수와 루프 폐쇄 개수를 확인합니다.

load intel-2d-posegraph.mat pg
disp(pg)
  poseGraph with properties:

               NumNodes: 1228
               NumEdges: 1483
    NumLoopClosureEdges: 256
     LoopClosureEdgeIDs: [1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 ... ] (1x256 double)
        LandmarkNodeIDs: [1x0 double]

IDs를 off로 설정하여 자세 그래프를 플로팅합니다. 빨간색 선은 데이터 세트에서 식별된 루프 폐쇄를 나타냅니다.

show(pg,'IDs','off');
title('Original Pose Graph')

Figure contains an axes object. The axes object with title Original Pose Graph, xlabel X, ylabel Y contains 3 objects of type line. One or more of the lines displays its values using only markers

자세 그래프를 최적화합니다. 노드는 간선 제약 조건과 루프 폐쇄를 기반으로 조정됩니다. 최적화된 자세 그래프를 플로팅하여 루프 폐쇄가 있는 노드가 조정되었는지 확인합니다.

updatedPG = optimizePoseGraph(pg);
figure
show(updatedPG,'IDs','off');
title('Updated Pose Graph')

Figure contains an axes object. The axes object with title Updated Pose Graph, xlabel X, ylabel Y contains 3 objects of type line. One or more of the lines displays its values using only markers

참고 문헌

[1] Grisetti, G., R. Kummerle, C. Stachniss, and W. Burgard. "A Tutorial on Graph-Based SLAM." IEEE Intelligent Transportation Systems Magazine. Vol. 2, No. 4, 2010, pp. 31–43. doi:10.1109/mits.2010.939925.

확장 기능

버전 내역

R2019b에 개발됨