주요 콘텐츠

SLAM 맵 작성기

라이다 기반 SLAM을 사용하여 2차원 그리드 맵 작성

설명

SLAM 맵 작성기 앱은 기록된 라이다 스캔 데이터와 오도메트리 센서 데이터를 불러와 SLAM(동시적 위치추정 및 지도작성) 알고리즘을 사용하여 2차원 점유 그리드를 작성합니다. 스캔 간 매칭은 스캔을 정렬하고 겹치면서 맵을 작성합니다. 루프 폐쇄 검출은 이동체 오도메트리에 드리프트가 생기면 이전에 방문한 위치를 검출하고 전체 맵을 조정하여 수정됩니다. 경우에 따라 스캔 매칭 알고리즘과 루프 폐쇄 검출을 수동으로 조정해야 합니다. 앱을 사용하여 수동으로 스캔을 정렬하고 루프 폐쇄를 수정하여 전체 맵 정확도를 개선하십시오. SLAM 알고리즘 설정을 조정하여 자동 맵 작성을 개선할 수도 있습니다.

앱 사용 방법:


가져오기

rosbag 로그 파일을 불러오려면 가져오기 > rosbag에서 가져오기를 선택합니다. rosbag 파일을 선택하고 열기를 클릭합니다. 그러면 가져오기 탭이 열립니다. 자세한 내용은 rosbag 가져오기 및 필터링을 참조하십시오.

작업 공간에서 데이터를 불러오려면 가져오기 > 작업 공간에서 가져오기를 선택합니다. 제공된 드롭다운을 사용하여 스캔 변수와 자세 변수를 선택합니다. slamMapBuilder 함수에서 변수를 지정할 수도 있습니다. 자세한 내용은 프로그래밍 방식 사용을 참조하십시오.


SLAM 설정

SLAM 설정을 사용하여 SLAM 알고리즘 설정을 조정합니다. 디폴트 값이 제공되지만 특정 센서 및 데이터는 이러한 설정을 조정해야 할 수도 있습니다. 조정해야 할 가장 중요한 값은 루프 폐쇄 임계값입니다. 자세한 내용은 SLAM 설정 조정하기를 참조하십시오.


작성

작성을 클릭하여 SLAM 맵 작성 과정을 시작합니다. 작성 과정에서는 스캔 간 매칭을 사용하여 맵에서 스캔을 정렬하고, 이전 위치를 방문할 때 루프 폐쇄를 식별하고, 자세를 조정합니다. 수동으로 스캔 결과를 맞추거나 루프 폐쇄를 수정하려면 맵 작성 과정 중 언제든지 일시 중지를 클릭하십시오.


스캔 간 매칭


루프 폐쇄

스캔 간 매칭을 클릭하여 현재 선택한 프레임의 상대 자세를 수정하고 스캔을 이전 스캔에 맞춰 정렬합니다. 현재 프레임에 대해 검출된 루프 폐쇄를 수정하거나 무시하려면 루프 폐쇄를 클릭합니다. 하단의 슬라이더를 사용하여 스캔 매칭 또는 루프 폐쇄가 정확하지 않은 영역으로 다시 스크롤합니다. 스캔 또는 루프 폐쇄를 몇 개든지 수정할 수 있습니다. 자세한 내용은 스캔 간 매칭 및 루프 폐쇄 수정하기를 참조하십시오.


동기화

맵을 수정한 후 동기화를 클릭하여 스캔 맵에서의 모든 자세를 업데이트합니다. 동기화의 두 가지 옵션으로는 새 루프 폐쇄를 탐색하는 동기화와 루프 폐쇄 탐색을 건너뛰고 스캔 맵만 업데이트하는 빠른 동기화가 있습니다. 자세한 내용은 맵 동기화하기를 참조하십시오.


점유 그리드 내보내기

맵 모양에 만족하면 점유 그리드 내보내기를 클릭하여 맵을 m 파일로 내보내거나 작업 공간에 맵을 저장합니다. 맵은 2차원 확률적 점유 그리드인 occupancyMap 객체로 출력됩니다.


세션 열기


세션 저장

세션 열기를 사용하여 저장한 기존 앱 세션을 열 수 있습니다. 맵 작성기 탭에 있을 때 세션 저장을 사용하여 진행 내용을 m 파일에 저장할 수 있습니다.

SLAM Map Builder app

SLAM 맵 작성기 앱 열기

  • MATLAB® 툴스트립: 탭의 로보틱스 및 자율 시스템에서 SLAM 맵 작성기를 클릭합니다.

  • MATLAB 명령 창: slamMapBuilder 입력

예제

모두 확장

SLAM 맵 작성기 앱은 SLAM(동시적 위치추정 및 지도작성) 알고리즘을 사용하여 라이다 스캔으로부터 점유 그리드를 작성하는 데 도움을 줍니다. 스캔 매칭을 통해 자세를 추정하고 자세 그래프 최적화를 위한 루프 폐쇄를 사용하여 맵이 작성됩니다. 이 예제는 라이다 스캔 데이터의 rosbag을 불러와 데이터를 필터링하고 맵을 작성하는 워크플로를 보여줍니다. 스캔 간 매칭을 조정하고 루프 폐쇄를 수정하여 스캔 맵을 조정합니다.

라이다 스캔 데이터 불러오기

예제 MAT 파일을 작업 공간으로 불러옵니다. 이 파일에는 변수 scanslidarScan 객체로 구성된 셀형 배열로서 포함되어 있습니다.

load slamLidarScans.mat

앱 열기

탭의 로보틱스 및 자율 시스템에서 SLAM 맵 작성기를 클릭합니다.

slamMapBuilder 함수를 호출할 수도 있습니다.

slamMapBuilder

라이다 스캔 가져오기

가져오기 > 작업 공간에서 가져오기를 클릭하여 스캔을 불러옵니다. rosbag으로 저장된 데이터는 ROS Toolbox 라이선스가 있다면 불러올 수 있습니다.

스캔 드롭다운에서 scans 변수를 선택합니다.

도구 모음에서 다운샘플링 비율(%)을 10으로 설정합니다. 다운샘플링은 데이터를 균일하게 샘플링하여 SLAM 알고리즘의 계산 시간을 줄여줍니다. 이 예제에서 10%는 5번째마다의 스캔입니다. 적용을 클릭합니다.

슬라이더나 아래에 있는 화살표 키를 사용하여 스캔을 미리 봅니다.

가져오기가 완료되면 닫기를 클릭합니다.

SLAM 설정 조정하기

SLAM 알고리즘은 SLAM 설정 대화 상자를 사용하여 조정할 수 있습니다. 파라미터는 센서 사양, 환경, 응용 분야에 기반하여 조정해야 합니다. 이 예제에서는 루프 폐쇄 임계값200에서 300으로 늘립니다. 이렇게 증가된 임계값을 사용하면 검출된 루프 폐쇄를 수락하고 사용할 가능성이 줄어듭니다. 최적화 간격10으로 설정합니다. 열 번째 루프 폐쇄가 수락될 때마다 자세 그래프가 드리프트를 고려하여 최적화됩니다.

맵 작성하기

데이터를 필터링하고 SLAM 알고리즘 설정을 설정한 후 작성을 클릭합니다. 앱이 맵을 작성하기 위해 스캔 처리를 시작합니다. 슬라이더가 진행되고 스캔이 맵에 겹치는 것을 볼 수 있습니다. 추정된 로봇 궤적이 동일한 스캔 맵에 플로팅됩니다. 스캔 간 매칭이 스캔 간 매칭 창에 표시됩니다. 루프 폐쇄가 검출될 때마다 루프 폐쇄 창에 서로 겹치는 두 개의 스캔이 표시됩니다.

스캔 매칭 또는 루프 폐쇄 조정하기

작성 과정 중 언제든지 맵이 왜곡되거나 스캔 간 매칭 또는 루프 폐쇄가 잘못되어 가는 경우 일시 중지를 클릭하여 조정할 스캔을 선택합니다. 작성 과정의 마지막에 스캔을 수정할 수도 있습니다. 화살표 키 또는 슬라이더를 사용하여 파일에서 왜곡이 처음 발생한 지점으로 이동합니다. 스캔 간 매칭 또는 루프 폐쇄 버튼을 클릭하여 현재 표시된 스캔 자세를 조정합니다. 이 섹션에서 보이는 잘못된 루프 폐쇄는 인위적인 것이며 예시용일 뿐입니다.

루프 폐쇄 버튼을 클릭합니다. 그러면 루프 폐쇄 상대 자세를 수정하기 위한 탭이 열립니다.

루프 폐쇄를 완전히 무시하려면 무시를 클릭합니다. 무시하지 않으려면 스캔이 정렬될 때까지 상대 스캔 자세를 수동으로 수정합니다.

스캔 패닝 또는 스캔 회전을 클릭한 다음, Figure에서 클릭하여 끌어서 놓는 방식으로 두 스캔을 정렬합니다. 완료되면 적용을 클릭합니다. 여러 스캔에 대해 이 작업을 수행할 수 있습니다.

스캔 간 매칭 및 루프 폐쇄에 대한 스캔 자세를 수정한 후 동기화를 클릭하여 변경 사항을 적용합니다. 빠른 동기화는 새로운 루프 폐쇄를 탐색하지 않고 맵을 업데이트하며, 이미 모든 스캔을 처리한 경우 계산 시간이 줄어듭니다.

점유 그리드 내보내기

변경 내용을 동기화하고 맵 작성을 완료하면 로봇 궤적과 완전히 겹친 스캔 맵이 표시되어야 합니다.

점유 그리드 내보내기를 클릭하여 환경의 최종 점유 맵을 occupancyMap 객체로 가져옵니다. 해당 맵을 작업 공간 또는 MAT 파일로 내보냅니다. 내보내기 전에 원하는 프레임으로 다시 스크롤하고 현재 선택된 스캔까지를 선택하여 일부 스캔으로 맵을 생성할 수 있습니다.

저장된 점유 맵을 표시합니다.

load("slamMapBuilderOccMap.mat")
show(myOccMap)
title("Built Occupancy Map")

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

세션 저장 버튼을 사용하여 SLAM 맵 작성기 앱 세션을 저장할 수도 있습니다. 앱은 .mat 파일에 앱의 현재 상태를 씁니다. 이 파일은 나중에 세션 열기를 사용하여 불러올 수 있습니다.

관련 예제

파라미터

모두 확장

작업 공간에서 가져올 라이다 스캔으로, lidarScan 객체 요소를 N개 가진 셀형 배열로 지정됩니다.

작업 공간에서 가져올 자세로, N×3 행렬 또는 3-요소 행 벡터로 구성된 요소를 N개 가진 셀형 배열로 지정됩니다. N×3 행렬의 각 행, 그리고 셀형 배열의 3-요소 행 벡터는 자세를 형식 [x y theta]로 나타냅니다. xy는 위치(단위: 미터)를 구성하고 theta는 방향(단위: 라디안)을 나타냅니다.

예: [0 0 0; 1 1 pi/4; 2 2 pi/2]

예: {[0 0 0],[1 1 pi/4],[2 2 pi/2]}

프로그래밍 방식으로 사용

모두 확장

slamMapBuilder(bag)SLAM 맵 작성기 앱을 열고, rosbag (ROS Toolbox) 함수를 사용하여 생성된 BagSelection 객체인 bag에 지정된 rosbag 로그 파일을 가져옵니다. rosbag의 센서 데이터를 필터링하도록 앱이 가져오기 탭으로 열립니다.

slamMapBuilder(sessionFile)은 저장된 세션 파일 이름 sessionFile에서 SLAM 맵 작성기 앱을 엽니다. 앱 툴스트립의 세션 저장 버튼을 통해 앱 세션 파일이 생성됩니다.

slamMapBuilder(scans)SLAM 맵 작성기 앱을 열고 lidarScan 객체로 구성된 셀형 배열인 scans에 지정된 스캔을 가져옵니다. 앱은 스캔이 사전에 필터링됐다고 가정하고 가져오기 과정을 건너뜁니다. 작성 버튼을 클릭하여 맵 작성을 시작합니다.

slamMapBuilder(scans,poses)SLAM 맵 작성기 앱을 열고 스캔과 자세를 가져옵니다. scanslidarScan 객체로 구성된 셀형 배열로 지정됩니다. posesscans의 자세에 대응하는 [x y theta] 벡터로 구성된 행렬입니다. 앱은 스캔이 사전에 필터링됐다고 가정하고 가져오기 과정을 건너뜁니다. 작성 버튼을 클릭하여 맵 작성을 시작합니다.

세부 정보

모두 확장

버전 내역

R2019b에 개발됨