mapLayer

Создайте слой карты для N -мерных данных

Описание

The mapLayer объект создает N -мерную сетчатую карту, где первые два измерения определяют компоновочный образ карты, а все последующие размерности диктуют размер и размещение данных, хранящихся в каждой камере. Для хранения скалярных двоичных значений или значений вероятностей для карты сетки используйте binaryOccupancyMap или occupancyMap вместо этого объекты.

Слой карты хранит данные для камер сетки, которые представляют дискретизированную область пространства. Чтобы запросить и обновить данные с помощью мировых, локальных или сетчатых координат, используйте getMapData и setMapData функции объекта. Каждая камера сетки в карте может хранить данные любого размера от одного значения до многомерного массива. Для получения дополнительной информации см. свойство DataSize.

Поведение слоя также может быть настроено путем предоставления указателей на функцию во время создания с помощью GetTransformFcn и SetTransformFcn свойства.

Создание

Описание

map = mapLayer создает пустой объект карты, занимающий 10 на 10 метров пространства с разрешением 1 камера на метр.

map = mapLayer(p) создает карту из значений в матричном или матричном массиве p. Для 3-D матричных массивов каждая камера на карте заполняется вектором значений в каждом месте сетки вдоль третьей размерности массива. Для N -by D матричного массива каждая камера содержит матрицу (N = 4) или матричный массив (N > 4) данных для этого расположения сетки.

map = mapLayer(width,height) создает карту, охватывающую указанную ширину и высоту с разрешением 1 камера на метр.

map = mapLayer(rows,cols,'grid') создает карту с размером сетки rows, cols с разрешением 1 камера на метр.

map = mapLayer(width,height,cellDims) создает карту, где размер данных, хранящихся в каждой камере, определяется массивом целых чисел cellDims.

map = mapLayer(rows,cols,cellDims,'grid') создает карту с размером сетки rowscols где размер данных, хранящихся в каждой камере, определяется массивом целых чисел cellDims.

map = mapLayer(sourceMap) создает новый объект с использованием слоев, скопированных из другого mapLayer объект.

пример

map = mapLayer(___,Name,Value) задает значения свойств, используя пары "имя-значение".

Для примера, mapLayer(__,'LocalOriginInWorld',[15 20]) устанавливает локальный источник в определенное местоположение мира.

Свойства

расширить все

Размер N -мерной матрицы данных, заданный как вектор целых чисел. Первые две размерности определяют компоновочный образ карты, а все последующие размерности определяют размер и размещение данных, хранящихся в каждой камере. Значение по умолчанию принимает, что одно значение сохранено для каждой камеры в сетке 10 на 10.

Если бы карта хранила вектор значений n-element в каждой камере, это свойство было бы [width height n].

Если бы карта снабжает сетку 10 на 10 каждой камерой, содержащей матричный массив 3 на 3 на 3, размер данных был бы [10 10 3 3 3].

Это свойство устанавливается, когда вы создаете объект на основе размерностей входа матрицы p или входы width, height, и cellDims.

После создания объекта это свойство доступно только для чтения.

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

Тип данных значений, хранимых на карте, задается как вектор символов.

Это свойство устанавливается на основе типа данных входных p или тип данных DefaultValue. После создания объекта это свойство доступно только для чтения.

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

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

Если при создании объекта задается свойство GetTransformFcn или SetTransformFcn, значение по умолчанию обновляется на основе этой функции преобразования. Если вы создаете карту с матрицей значений pфункция преобразования изменяет значения перед хранением.

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

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

Этот указатель на функцию вызывается внутри getMapData функция объекта. Он может использоваться, чтобы применить преобразование к значениям, извлеченным из слоя карты. Определение функции должно иметь следующий формат:

modifiedValues = getTransformFcnHandle(map,values,varargin)

Размер выхода modifiedValues должен совпадать с размером входа values. Функция обеспечивает все данные карты, доступные из getMapData функция объекта к этой функции преобразования через varargin входы.

Вы можете задать это свойство при создании объекта. После создания объекта это свойство доступно только для чтения.

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

Расположение нижнего левого угла сетки в мировых координатах, заданное как двухэлементный вектор, [xWorld yWorld].

Вы можете задать это свойство при создании объекта.

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

Расположение левого нижнего угла сетки в локальных координатах, заданное как двухэлементный вектор, [xLocal yLocal].

Вы можете задать это свойство при создании объекта.

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

Количество строк и столбцов в сетке, хранящихся в виде вектора с реальным значением 1 на 2, представляющего количество строк и столбцов, в этом порядке.

Это свойство устанавливается, когда вы создаете объект на основе первых двух размерностей матрицы входа p, входы width и height, или входы row и col.

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

Имя слоя карты, заданное как вектор символов или строковый скаляр.

Вы можете задать это свойство при создании объекта. После создания объекта это свойство доступно только для чтения.

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

Расположение источника локальной системы координат в мировых координатах, заданное как двухэлементный вектор, [xLocal yLocal]. Используйте move функция, чтобы переместить локальную систему координат, когда ваше транспортное средство перемещается.

Вы можете задать это свойство при создании объекта.

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

Это свойство доступно только для чтения.

Разрешение сетки, сохраненное в виде скаляра в камерах на метр, представляющих количество и размер расположений сетки.

Вы можете задать это свойство при создании объекта. После создания объекта это свойство доступно только для чтения.

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

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

Этот указатель на функцию вызывается внутри setMapData функция объекта. Он может использоваться, чтобы применить преобразование к значениям, установленным на слое карты. Функция должна иметь следующий синтаксис:

modifiedValues = setTransformFcnHandle(map,values,varargin)        
        if numel(varargin) == 0
            return; %
        else
          % Custom Code
        end
end

Размер выхода, modifiedValues, должен совпадать с размером входа, values. Функция предоставляет все данные карты, указанные в setMapData функция объекта для этой функции преобразования. При создании этого объекта без начальных значений функция вызывается без дополнительных входных параметров, поэтому задайте оператор if, чтобы вернуться когда количество элементов в varagin равен нулю.

Вы можете задать это свойство при создании объекта. После создания объекта это свойство доступно только для чтения.

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

Это свойство доступно только для чтения.

Минимальное и максимальное значения x-координат в локальной системе координат, сохраненные как двухэлементный горизонтальный вектор вида [min max]. Локальная система координат определяется LocalOriginInWorld свойство.

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

Это свойство доступно только для чтения.

Минимальное и максимальное значения y-координат в локальной системе координат, сохраненные как двухэлементный горизонтальный вектор вида [min max]. Локальная система координат определяется LocalOriginInWorld свойство.

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

Это свойство доступно только для чтения.

Минимальные и максимальные значения мировой области значений x-coordinates, сохраненные как вектор 1 на 2, представляющий минимальное и максимальное значения, в этом порядке.

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

Это свойство доступно только для чтения.

Минимальные и максимальные значения мировой области значений y-coordinates, сохраненные как вектор 1 на 2, представляющий минимальное и максимальное значения, в этом порядке.

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

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

getMapDataИзвлечение данных из слоя карты
grid2localПреобразуйте индексы сетки в локальные координаты
grid2worldПреобразуйте индексы сетки в мировые координаты
local2gridПреобразуйте локальные координаты в индексы сетки
local2worldПреобразуйте локальные координаты в мировые
moveПеремещение карты в лабораторной системе координат
setMapDataПрисвоение данных слою карты
syncWithСинхронизация карты с перекрывающейся картой
world2gridПреобразуйте мировые координаты в сетчатые индексы
world2localПреобразуйте мировые координаты в локальные

Примеры

свернуть все

Создайте слой карты, который хранит два значения на местоположение сетки в виде xy-скоростей.

Создайте матрицу m на n на 2 значений. Первый элемент в третьей размерности является dx, а второй - dy как скорости.

dXY = reshape(1:200,10,20);
dXY(:,:,2) = dXY;

Создайте слой карты из матрицы. Задайте разрешение и имя слоя.

vLayer = mapLayer(dXY,'Resolution',1,'LayerName','dXY');

Получите все данные карты как матрицу. Получите xy-местоположения значений скорости путем создания массивов, которые покрывают минимальные и максимальные пределы xy-мира и смещаются в местоположения центра сетки. Расположения Y перевернуты при преобразовании между матрицами в мировые координаты. Визуализируйте скорости, соответствующие расположениям центра сетки, используя quiver функция.

v = getMapData(vLayer);

R = 1/(2*vLayer.Resolution);
xLim = vLayer.XWorldLimits;
yLim = vLayer.YWorldLimits;
xLoc = (xLim(1)+R):R*2:(xLim(2)-R);
yLoc = (yLim(2)-R):-R*2:(yLim(1)+R);

quiver(xLoc,yLoc,v(:,:,1),v(:,:,2))

Figure contains an axes. The axes contains an object of type quiver.

Установите нижний левый квадрант в новые обновленные значения. Создайте значения в виде матрицы и задайте нижний левый угол (0,0) в координатах карты к setData функция.

updateValues = repmat(reshape([-50,100],[1 1 2]),5,10);

setMapData(vLayer,[0 0],updateValues)
v = getMapData(vLayer);
quiver(xLoc,yLoc,v(:,:,1),v(:,:,2))

Figure contains an axes. The axes contains an object of type quiver.

Установите новые значения для левого верхнего квадранта с помощью координат сетки. Для карт положение верхней левой сетки равно (1,1).

setMapData(vLayer,[1 1],updateValues,'grid')
v = getMapData(vLayer);
quiver(xLoc,yLoc,v(:,:,1),v(:,:,2))

Figure contains an axes. The axes contains an object of type quiver.

The mapLayer Объект позволяет применять пользовательские поэлементные преобразования при установке и получении данных на карте. Чтобы преобразовать данные, которые вы задаете или получаете с карты, задайте указатели на функцию для GetTransfomFcn и SetTransformFcn свойства. Этот пример показывает, как реализовать слой вероятностной карты логарифмических коэффициентов путем создания интерполяционной таблицы для значений вероятностей и логарифмических коэффициентов. Функции преобразования используют эти интерполяционные таблицы, чтобы преобразовать между этими значениями при настройке или получении данных.

Создание интерполяционных таблиц

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

Создайте массив int16 значения из intmin на intmax. Задайте пределы вероятности.

intType = 'int16';
intLinSpace = intmin(intType):intmax(intType);
numOfPoints = length(intLinSpace);
probLimits = [0.001 .999];

The exampleHelperProbToLogodds и examplerHelperLogoddsToProb функции скрыты между логарифмическими шансами и значениями вероятностей. Используйте вспомогательные функции, чтобы получить пределы логарифмических коэффициентов и сгенерировать массив для поиска значений логарифмических коэффициентов. Создайте интерполированную сетку для всей интерполяционной таблицы.

logOddsLimits = exampleHelperProbToLogodds([0.001 .999]);
logOddsLookup = single(exampleHelperLogoddsToProb(linspace(logOddsLimits(1),logOddsLimits(2),numOfPoints)));
interpTable = griddedInterpolant(logOddsLookup,single(intLinSpace),'nearest');

Задайте указатели на функции преобразования

Указатели на функцию преобразования используют помощники примера, которые определяют, как преобразовать между целочисленными значениями логарифмических коэффициентов и значениями вероятностей с приложенным пределом насыщения. Пределы насыщения вероятностей [0.001 .999] как указано ранее. Это поведение похоже на occupancyMap объект.

getXformFcn = @(obj,logodds,varargin)...
    exampleHelperIntLogoddsToProb(logodds,logOddsLookup(:),intLinSpace);

setXformFcn = @(obj,prob,varargin)...
    exampleHelperProbToIntLogodds(prob,interpTable,logOddsLookup(:),intLinSpace,probLimits);

Создайте слой карты

Сгенерируйте объект слоя карты заполнения из матрицы значений вероятностей. Задайте функции get и set transform.

occupancyLayer = mapLayer(repmat(0.5,10,10),...
                           'LayerName','Occupancy',...
                           'GetTransformFcn',getXformFcn,...
                           'SetTransformFcn',setXformFcn);

Заметьте, что при создании карты значение по умолчанию является 0,001 вместо 0. Это различие связано с тем, что SetTransformFcn функция была применена к значению по умолчанию 0 при создании объекта, который достигает 0,001.

disp(occupancyLayer.DefaultValue)
    0.0010

Получите и установите данные карты

Данные карты совпадают с матрицей, установленной при создании.

extData = getMapData(occupancyLayer) 
extData = 10×10

    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000

Установите определенные местоположения сопоставления для значений, которые:

  • За пределами пределов вероятностного насыщения.

  • Более высокая точность, чем разрешение интерполяционных таблиц.

setMapData(occupancyLayer,[0 0],0.00001)
setMapData(occupancyLayer,[5 5],0.25999)

Для первого местоположения вероятность связана с пределами насыщения.

extData = getMapData(occupancyLayer,[0 0])
extData = 0.0010

Второе расположение возвращает значение, ближайшее к значению вероятности в интерполяционной таблице.

extData2 = getMapData(occupancyLayer,[5 5])
extData2 = 0.2600

Сгенерированный слой карты теперь может использоваться для обновления вероятности, занимаемой любой картой, которая сохранена как int16 значения. Чтобы объединить эту карту с другими слоями или типами карт, смотрите multiLayerMap объект.

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

.
Введенный в R2021a
Для просмотра документации необходимо авторизоваться на сайте