insertRay

Класс: робототехника. OccupancyGrid
Пакет: робототехника

Вставьте луч от лазерного наблюдения сканирования

Синтаксис

insertRay(map,pose,scan,maxrange)
insertRay(map,pose,ranges,angles,maxrange)
insertRay(map,startpt,endpoints)
insertRay(___,invModel)

Описание

insertRay(map,pose,scan,maxrange) вставляет одно или несколько наблюдений датчика сканирования лазерного дальномера в сетку заполнения, map, с помощью объекта входа lidarScan, scan, чтобы получить конечные точки луча. Конечные точки луча рассматриваются свободным пространством, если входные области значений сканирования ниже maxrange. Ячейки, наблюдаемые, как занято, обновляются с наблюдением за 0,7. Все другие точки вдоль луча обработаны как препятствие, свободное и обновленное с наблюдением за 0,4. Конечные точки выше maxrange не обновляются. значения NaN проигнорированы. Это поведение коррелирует к обратной модели датчика.

пример

insertRay(map,pose,ranges,angles,maxrange) задает показания области значений как векторы, ranges и angles.

insertRay(map,startpt,endpoints) вставляет наблюдения между линейными сегментами от стартовой точки, в конец указывает. Конечные точки обновляются с наблюдением вероятности за 0,7. Ячейки вдоль линейных сегментов обновляются с наблюдением за 0,4.

insertRay(___,invModel) вставляет лучи с обновленными вероятностями, данными в двухэлементном векторе, invModel, который соответствует и занятым наблюдениям без препятствий. Используйте любой из предыдущих синтаксисов, чтобы ввести лучи.

Входные параметры

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

Сопоставьте представление, заданное как объект robotics.OccupancyGrid. Этот объект представляет среду робота. Объект содержит матричную сетку со значениями, представляющими вероятность заполнения той ячейки. Значения близко к 1 представляют высокую уверенность, что ячейка содержит препятствие. Значения близко к 0 представляют уверенность, что ячейка не занята и свободное препятствие.

Положение и ориентация робота, заданного как вектор [x y theta]. Положением робота является x и положение y с угловой ориентацией (в радианах) измеренный от x - ось.

Лоцируйте показания сканирования, заданные как объект lidarScan.

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

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

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

Стартовая точка для лучей, заданных как двухэлементный вектор, [x y], в кадре мировой координаты. Все лучи являются линейными сегментами, которые происходят в этой точке.

Конечные точки для лучей, заданных как n-by-2 матрица, [x y], в кадре мировой координаты, где n является длиной ranges или angles. Все лучи являются линейными сегментами, которые происходят в startpt.

Обратные значения модели датчика, заданные как двухэлементный вектор, соответствующий и занятым вероятностям без препятствий. Точки вдоль луча обновляются согласно обратной модели датчика и заданным показаниям области значений. значения области значений NaN проигнорированы. Значения области значений, больше, чем maxrange, не обновляются. См. Обратную Модель Датчика.

Примеры

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

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

Создайте пустую карту сетки заполнения.

map = robotics.OccupancyGrid(10,10,20);

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

pose = [5,5,0];
ranges = 3*ones(100, 1);
angles = linspace(-pi/2, pi/2, 100);
maxrange = 20;
        
insertRay(map,pose,ranges,angles,maxrange);

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

show(map)

getOccupancy(map,[8 5])
ans = 0.7000

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

insertRay(map,pose,ranges,angles,maxrange);
show(map)

getOccupancy(map,[8 5])
ans = 0.8448

Больше о

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

Введенный в R2017b