transformScan

Преобразуйте лазерное сканирование на основе относительного положения

Синтаксис

transScan = transformScan(scan,relPose)
[transRanges,transAngles] = transformScan(ranges,angles,relPose)

Описание

пример

transScan = transformScan(scan,relPose) преобразовывает лазерное сканирование, заданное в scan при помощи заданного относительного положения, relPose.

пример

[transRanges,transAngles] = transformScan(ranges,angles,relPose) преобразовывает лазерное сканирование, заданное в ranges и angles при помощи заданного относительного положения, relPose.

Примеры

свернуть все

Создайте объект lidarScan. Задайте области значений и углы как векторы.

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

Переведите лазерное сканирование смещением [x y] (0.5,0.2).

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

Вращайте лазерное сканирование 20 градусами.

rotScan = transformScan(refScan,[0,0,deg2rad(20)]);

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

Этот пример требует лицензии Optimization Toolbox™.

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

refRanges = 5*ones(1,300);
refRanges(51:150) = 3*ones(1,100);
refAngles = linspace(-pi/2,pi/2,300);
offset = [0.5 0.2 0];
[currRanges,currAngles] = transformScan(refRanges,refAngles,offset);

Используйте сканирование, соответствующее, чтобы найти относительное положение между двумя лазерными сканированиями. Это положение близко к заданному offset. У вас должна быть лицензия Optimization Toolbox™, чтобы использовать функцию matchScans.

pose = matchScans(currRanges,currAngles,refRanges,refAngles,'SolverAlgorithm','fminunc')
pose = 1×3

   -0.5102   -0.1806   -0.0394

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

[currRanges2,currAngles2] = transformScan(currRanges,currAngles,pose);
clf
polarplot(refAngles,refRanges,'or')
hold on
polarplot(currAngles2,currRanges2,'.b')
legend('First laser scan','Second laser scan')
hold off

Входные параметры

свернуть все

Лоцируйте показания сканирования, заданные как объект lidarScan.

Значения диапазона от данных сканирования, заданных как вектор в метрах. Эти значения области значений являются расстояниями от датчика в заданном angles. Вектор должен быть той же длиной как соответствующий вектор angles.

Угловые значения от данных сканирования, заданных как вектор в радианах. Эти угловые значения являются определенными углами заданного ranges. Вектор должен быть той же длиной как соответствующий вектор ranges.

Относительное положение текущего сканирования, заданного как [x y theta], где [x y] является переводом в метрах и theta, является вращением в радианах.

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

свернуть все

Преобразованные показания сканирования лазерного дальномера, заданные как объект lidarScan.

Значения области значений преобразованного сканирования, возвращенного как вектор в метрах. Эти значения области значений являются расстояниями от датчика в заданном transAngles. Вектор является той же длиной как соответствующий вектор transAngles.

Угловые значения преобразованного сканирования, возвращенного как вектор в радианах. Эти угловые значения являются определенными углами заданного transRanges. Вектор является той же длиной как соответствующий вектор ranges.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2017a