lidarScan

Создайте объект для хранения 2D сканирования лазерного дальномера

Описание

Объект lidarScan содержит данные для одного 2D лазерного дальномера (световое обнаружение и определение дальности) сканирование. Сканирование лазерного дальномера является лазерным сканированием для 2D плоскости с расстояниями (Ranges), измеренный от датчика до препятствий в среде под определенными углами (Angles). Используйте этот лазерный объект сканирования в качестве входа к другим алгоритмам робототехники, таким как matchScans, robotics.VectorFieldHistogram или robotics.MonteCarloLocalization.

Создание

Синтаксис

scan = lidarScan(ranges,angles)
scan = lidarScan(cart)

Описание

пример

scan = lidarScan(ranges,angles) создает объект lidarScan из ranges и angles, которые представляют данные, собранные от датчика лазерного дальномера. ranges и входные параметры angles являются векторами той же длины и установлены непосредственно в свойства Ranges и Angles.

scan = lidarScan(cart) создает объект lidarScan с помощью входных Декартовых координат в качестве n-by-2 матрица. Свойство Cartesian установлено непосредственно от этого входа.

scan = lidarScan(scanMsg) создает объект lidarScan из объекта сообщения ROS LaserScan.

Свойства

развернуть все

Показания диапазона от лазерного дальномера, заданного как вектор. Этот вектор является той же длиной как Angles, и векторные элементы измеряются в метрах.

Типы данных: single | double

Угол показаний диапазона от лазерного дальномера, заданного как вектор. Этот вектор является той же длиной как Ranges, и векторные элементы измеряются в радианах. Углы измеряются против часовой стрелки вокруг положительного z - ось.

Типы данных: single | double

Декартовы координаты показаний лазерного дальномера, возвращенных как матрица [x y]. В кадре координаты лазерного дальномера положительный x является прямым, и положительный y налево.

Типы данных: single | double

Количество показаний лазерного дальномера, возвращенных как скаляр. Этот скаляр также равен длине Ranges и векторов Angles или количества строк в Cartesian.

Типы данных: double

Функции объекта

plotОтобразите лазер или лоцируйте показания сканирования
removeInvalidDataУдалите недопустимую область значений и угловые данные
transformScanПреобразуйте лазерное сканирование на основе относительного положения

Примеры

свернуть все

Задайте данные о лазерном дальномере как векторы областей значений и углов. Эти значения включают показания за пределами области значений датчиков.

x = linspace(-2,2);
ranges = abs((1.5).*x.^2 + 5);
ranges(45:55) = 3.5;
angles = linspace(-pi/2,pi/2,numel(ranges));

Создайте сканирование лазерного дальномера путем определения областей значений и углов. Постройте все точки сканирования лазерного дальномера.

scan = lidarScan(ranges,angles);
plot(scan)

Удалите недопустимые точки на основе заданной минимальной и максимальной области значений.

minRange = 0.1;
maxRange = 7;
scan2 = removeInvalidData(scan,'RangeLimits',[minRange maxRange]);
hold on
plot(scan2)
legend('All Points','Valid Points')

Создайте ссылочное сканирование лазерного дальномера с помощью lidarScan. Задайте области значений и углы как векторы.

refRanges = 5*ones(1,300);
refAngles = linspace(-pi/2,pi/2,300); 
refScan = lidarScan(refRanges,refAngles);

Используя функцию transformScan, сгенерируйте второе сканирование лазерного дальномера при смещении x,y (0.5,0.2).

currScan = transformScan(refScan,[0.5 0.2 0]);

Совпадайте со ссылочным сканированием и вторым сканированием, чтобы оценить различие в положении между ними.

pose = matchScans(currScan,refScan);

Используйте функцию transformScan, чтобы выровнять сканирования путем преобразования второго сканирования в кадр первого сканирования с помощью относительного различия в положении. Постройте и исходные сканирования и выровненные сканирования.

currScan2 = transformScan(currScan,pose);

subplot(2,1,1);
hold on
plot(currScan)
plot(refScan)
title('Original Scans')
hold off

subplot(2,1,2);
hold on
plot(currScan2)
plot(refScan)
title('Aligned Scans')
xlim([0 5])
hold off

Расширенные возможности

Введенный в R2017b