transformScan

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

Описание

пример

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).

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

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

rotateScan = 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