multiLayerMap

Управляйте несколькими слоями карты

Описание

multiLayerMap группы объектов и хранилища несколько слоев карты как mapLayer, occupancyMap, или binaryOccupancyMap объекты.

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

Создание

Описание

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

пример

map = multiLayerMap(maps) создает многоуровневую карту из массива ячеек mapLayer, occupancyMap, или binaryOccupancyMap объекты. Объекты, объединенные в многоуровневую карту, должны быть заданы с тем же разрешением и покрыть ту же область на пробеле, но могут представлять различные категории информации по разделяемой области.

map = multiLayerMap(names,mapData) создает многоуровневую карту из массива ячеек имен слоя и сопоставленного массива ячеек матриц карты. Матрицы должны иметь те же первые две размерности, чтобы покрыть ту же разделяемую область. Разрешение по умолчанию является 1 ячейкой на метр.

map = multiLayerMap(names,width,height) создает многоуровневую карту с массивом ячеек имен слоя, покрывающих заданную ширину и высоту как скаляры в метрах.

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

map = multiLayerMap(names,rows,cols,'grid') задает ширину карты и высоту как размер сетки, заданный в rows и cols входные параметры.

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

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

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

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

Свойства

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

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

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

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

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

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

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

Когда вы создаете этот объект, заданные слои карты определяют каждый тип данных. После того, как вы создадите объект, это свойство только для чтения.

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

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

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

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

Можно установить это свойство, когда вы создаете объект.

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

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

Можно установить это свойство, когда вы создаете объект.

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

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

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

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

Имя каждого слоя в виде массива ячеек строковых скаляров. Порядок этих имен сопоставлен с порядком других свойств, которые являются массивами ячеек.

Можно установить это свойство, когда вы создаете объект. После того, как вы создадите объект, это свойство только для чтения.

Типы данных: cell | string

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

Можно установить это свойство, когда вы создаете объект.

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

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

Количество слоев карты, сохраненных как положительное целое число.

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

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

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

Можно установить это свойство, когда вы создаете объект. После того, как вы создадите объект, это свойство только для чтения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры

свернуть все

multiLayerMap объект позволяет вам сгруппировать несколько слоев карты и задать поведение для тех слоев при установке и получении данных. Используя отдельные слои карты, можно хранить различные данные о карте и задать различные поведения для каждого. Можно также задать SetTransformFcn и GetTransformFcn указатели на функцию для слоя карты так, чтобы зависимости были созданы между слоями. В этом примере показано, как хранить данные в слое карты и прослушивателях события реализации, которые обновляют другие карты. Это хранилище карт, сколько раз данные обновлены или получены доступ.

Зависимые слои

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

mapAccessed = mapLayer(zeros(10,10),'LayerName','GetListener');
mapModified = mapLayer(zeros(10,10),'LayerName','SetListener');

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

setHookFcn = @(mainMap,values,varargin)exampleHelperSetHookFcn(mapModified,mainMap,values,varargin{:});
getHookFcn = @(mainMap,values,varargin)exampleHelperGetHookFcn(mapAccessed,mainMap,values,varargin{:});

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

map = mapLayer(repmat(0.5,10,10),...
                'GetTransformFcn',getHookFcn,...
                'SetTransformFcn',setHookFcn);

Добавьте все карты в тот же multiLayerMap объект.

mapLayers = multiLayerMap({map,mapAccessed,mapModified});

Установите (0,0) местоположение карты со значением нуля с помощью setMapData объектная функция map.

setMapData(map,[0 0],0)

Проверяйте тот mapModified постепенно увеличенный их значение.

getMapData(mapModified,[0 0])
ans = 1

Получите данные, которые вы только устанавливаете на основной слой карты. Ожидаемое значение нуля возвращено.

getMapData(map,[0 0])
ans = 0

Проверяйте тот mapAccessed постепенно увеличенный их значение.

getMapData(mapAccessed,[0 0])
ans = 1

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

setMapData(map,rand(10,10))
getMapData(map)
ans = 10×10

    0.6443    0.2077    0.3111    0.5949    0.0855    0.9631    0.0377    0.1068    0.0305    0.1829
    0.3786    0.3012    0.9234    0.2622    0.2625    0.5468    0.8852    0.6538    0.7441    0.2399
    0.8116    0.4709    0.4302    0.6028    0.8010    0.5211    0.9133    0.4942    0.5000    0.8865
    0.5328    0.2305    0.1848    0.7112    0.0292    0.2316    0.7962    0.7791    0.4799    0.0287
    0.3507    0.8443    0.9049    0.2217    0.9289    0.4889    0.0987    0.7150    0.9047    0.4899
    0.9390    0.1948    0.9797    0.1174    0.7303    0.6241    0.2619    0.9037    0.6099    0.1679
    0.8759    0.2259    0.4389    0.2967    0.4886    0.6791    0.3354    0.8909    0.6177    0.9787
    0.5502    0.1707    0.1111    0.3188    0.5785    0.3955    0.6797    0.3342    0.8594    0.7127
    0.6225    0.2277    0.2581    0.4242    0.2373    0.3674    0.1366    0.6987    0.8055    0.5005
    0.5870    0.4357    0.4087    0.5079    0.4588    0.9880    0.7212    0.1978    0.5767    0.4711

Проверяйте тот mapModified и mapAccessed постепенно увеличенный их значения.

getMapData(mapModified)
ans = 10×10

     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     2     1     1     1     1     1     1     1     1     1

getMapData(mapAccessed)
ans = 10×10

     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     2     1     1     1     1     1     1     1     1     1

Нижнее левое местоположение возвращается два, и все другие значения являются тем. Это подтверждает, что функции прослушивателя работают, как предназначено.

Прослушиватель Указатели на функции

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

function valuesOut = exampleHelperSetHookFcn(modifiedMap,sourceLayer,valueIn,varargin)
    % Pass output through
    valuesOut = valueIn;
    
    % If no additional inputs are passed, return immediately.
    if numel(varargin) == 0
        return;
    else
        % Otherwise, increment the value in the modifiedMap.
        if numel(varargin) == 1
            currentValue = getMapData(modifiedMap);
            setMapData(modifiedMap,currentValue+1);
        else        
            currentValue = getMapData(modifiedMap,varargin{1},varargin{3:end});
            % setMapData syntax <<<<>>>>
            setMapData(modifiedMap,varargin{1},currentValue+1,varargin{3:end});
        end
    end
end

function data = exampleHelperGetHookFcn(accessedMap,sourceLayer,valuesIn,varargin)
    
    data = valuesIn;

    % If no additional inputs are passed, check if the values in
    if numel(varargin) == 0
        if isequal(size(valuesIn),sourceLayer.DataSize)
            % Increment the depedent map.
            currentValue = getMapData(accessedMap);
            setMapData(accessedMap,currentValue+1);
        end
    else
        currentValue = getMapData(accessedMap,varargin{:});
        setMapData(accessedMap,varargin{1},currentValue+1,varargin{3:end});
    end
end

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

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

Введенный в R2021a