exponenta event banner

показать

Сканировать графики и позы роботов

Описание

пример

show(slamObj) отображает все сканирования, добавленные в input lidarSLAM объект, наложенный лидаром, позирует в его нижележащем графе позы.

show(slamObj,Name,Value) задает параметры с помощью Name,Value аргументы пары. Например, "Poses","off" отключает отображение нижележащего графика позы в slamObj.

axes = show(___) возвращает дескриптор осей, в который выводятся данные SLAM лидара с использованием любого из предыдущих синтаксисов.

Примеры

свернуть все

Использовать lidarSLAM объект для итеративного добавления и сравнения лидарных сканирований и построения оптимизированного графика позы траектории робота. Чтобы получить карту занятости из связанных поз и сканирований, используйте buildMap функция.

Загрузить данные и настроить алгоритм SLAM

Загрузка массива ячеек lidarScan объекты. Сканирование лидара было собрано в гараже на роботе Husky ® от ClearPath Robotics ®. Как правило, лидарные сканирования выполняются с высокой частотой, и каждое сканирование не требуется для SLAM. Поэтому выполните выборку сканирования, выбирая только каждое 40-е сканирование.

load garage_fl1_southend.mat scans
scans = scans(1:40:end);

Чтобы настроить алгоритм SLAM, укажите диапазон лидара, разрешение карты, порог замыкания цикла и радиус поиска. Настройте эти параметры для конкретного робота и среды. Создать lidarSLAM объект с этими параметрами.

maxRange = 19.2; % meters
resolution = 10; % cells per meter

slamObj = lidarSLAM(resolution,maxRange);
slamObj.LoopClosureThreshold = 360;
slamObj.LoopClosureSearchRadius = 8;

Итеративно добавить сканирования

Использование for loop, добавление сканирований к объекту SLAM. Объект использует сопоставление сканирования для сравнения каждого добавленного сканирования с ранее добавленным. Чтобы улучшить карту, объект оптимизирует график позы всякий раз, когда обнаруживает замыкание цикла. Каждые 10 сканирований отображаются сохраненные позы и сканирования.

for i = 1:numel(scans)

    addScan(slamObj,scans{i});
    
    if rem(i,10) == 0
        show(slamObj);
    end
end

Figure contains an axes. The axes contains 121 objects of type line.

Просмотр карты занятости

После добавления всех сканирований к объекту SLAM создайте occupancyMap карта путем вызова buildMap со сканами и позами. Используйте то же разрешение карты и максимальный диапазон, что и для объекта SLAM.

[scansSLAM,poses] = scansAndPoses(slamObj);
occMap = buildMap(scansSLAM,poses,resolution,maxRange);
figure
show(occMap)
title('Occupancy Map of Garage')

Figure contains an axes. The axes with title Occupancy Map of Garage contains an object of type image.

Входные аргументы

свернуть все

Объект Lidar SLAM, указанный как lidarSLAM объект. Объект содержит параметры алгоритма SLAM, данные датчика и базовый график позы, используемый для построения карты.

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: "Poses","off"

Оси, используемые для построения графика позы, заданного как разделенная запятыми пара, состоящая из "Parent" и либо Axes или UIAxes объект. Посмотрите axes или uiaxes.

Отображение позиций lidar, указанных как разделенная запятыми пара, состоящая из "Poses" и "on" или "off".

Выходные аргументы

свернуть все

Оси, используемые для печати карты, возвращаемые как Axes или UIAxes объект. Посмотрите axes или uiaxes.

Представлен в R2019b