multiLayerMap

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

Описание

The 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-element в каждой камере, это свойство было бы [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-coordinates, сохраненные как вектор 1 на 2, представляющий минимальное и максимальное значения, в этом порядке.

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

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

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

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

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

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

Примеры

свернуть все

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

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

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

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

Задайте указатели на функцию для функций get и set transform, используемых на слое основной карты. Эти функции увеличивают значение местоположения сетки, когда вы получаете или устанавливаете данные карты в карте входа mainMap. Для получения информации о реализации функции см. раздел «Указатели на функции прослушивателя».

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

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

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

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

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

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

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++ с помощью Coder™ MATLAB ®

.
Введенный в R2021a