mapLayer

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

Описание

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 - вектор элемента из значений в каждой ячейке, этим свойством был бы [width height n].

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

Это свойство установлено, когда вы создаете основанное на объектах на размерностях входной матрицы p или входные параметры widthвысота, и 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 - координаты, сохраненные как вектор 1 на 2, представляющий минимальные и максимальные значения, в том порядке.

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

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

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

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

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

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

Примеры

свернуть все

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

Создайте m n 2 матрицами значений. Первым элементом в третьей размерности является дуплекс, и вторым является 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.

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

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

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

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

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

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

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

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

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

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

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

Введенный в R2021a