controllerVFH

Избегайте препятствий с помощью векторной полевой гистограммы

Описание

controllerVFH Система object™ позволяет вашему транспортному средству избежать препятствий на основе данных о датчике области значений с помощью векторных полевых гистограмм (VFH). Учитывая лазерные показания скана и целевое направление, чтобы управлять к, объект вычисляет руководящее направление без препятствий.

controllerVFH в частности использует VFH + алгоритм, чтобы вычислить направление без препятствий. Во-первых, алгоритм берет области значений и углы от лазерных данных сканирования и создает полярную гистограмму для местоположений препятствия. Затем входные пороги гистограммы используются, чтобы вычислить бинарную гистограмму, которая указывает на занятые и свободные направления. Наконец, алгоритм вычисляет гистограмму маскированную, которая вычисляется из бинарной гистограммы на основе радиуса превращения минимума транспортного средства.

Алгоритм выбирает несколько держащихся направлений на основе открытого пространства и возможных направлений движения. Функция стоимости, с весами, соответствующими предыдущим, текущим, и целевым направлениям, вычисляет стоимость различных возможных направлений. Объект затем возвращает направление без препятствий с минимальной стоимостью. Используя направление без препятствий, можно ввести команды, чтобы переместить транспортное средство в то направление.

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

Найти руководящее направление без препятствий:

  1. Создайте controllerVFH объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?.

Создание

Описание

пример

VFH = controllerVFH возвращает векторный полевой объект гистограммы, который вычисляет руководящее направление без препятствий с помощью VFH+ алгоритм.

VFH = controllerVFH(Name,Value) возвращает векторный полевой объект гистограммы с дополнительными опциями, заданными одним или несколькими Name,Value пары. Имя является именем свойства, и Значение является соответствующим значением. Имя должно находиться внутри одинарных кавычек (' ')). Можно задать несколько аргументов пары "имя-значение" в любом порядке как Name1,Value1,...,NameN,ValueN. Свойства, не заданные, сохраняют свои значения по умолчанию.

Свойства

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

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

Пределы для показаний области значений в виде вектора с 2 элементами с элементами, измеренными в метрах. Показания области значений задали, когда вызов объекта рассматривается, только если они находятся в пределах пределов расстояния. Используйте более низкий предел расстояния, чтобы проигнорировать ложные положительные стороны от плохой эффективности датчика в более низких областях значений. Используйте верхний предел, чтобы проигнорировать препятствия, которые слишком далеки от транспортного средства.

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

Расстояние безопасности вокруг транспортного средства в виде скаляра в метрах. Это - расстояние безопасности, чтобы разбросать положение транспортного средства в дополнение к значению RobotRadius параметр. Сумма радиуса транспортного средства и расстояния безопасности используется для расчета направление без препятствий.

Радиус превращения минимума в метрах для транспортного средства, перемещающегося на его текущей скорости в виде скаляра.

Вес функции стоимости для перемещения к целевому направлению в виде скаляра. Чтобы следовать за целевым направлением, установите этот вес быть выше, чем сумма CurrentDirectionWeight и PreviousDirectionWeight свойства. Чтобы проигнорировать целевую стоимость направления, обнулите этот вес.

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

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

Пороги для бинарного расчета гистограммы в виде вектора с 2 элементами. Алгоритм использует эти пороги, чтобы вычислить бинарную гистограмму из полярной плотности препятствия. Полярные значения плотности препятствия выше, чем верхний порог представлены как занятое место (1) в бинарной гистограмме. Значения, меньшие, чем более низкий порог, представлены как свободное пространство (0). Значения, которые падают между пределами, установлены к значениям в предыдущей бинарной гистограмме со значением по умолчанию, являющимся свободным пространством (0).

Используйте lidarScan возразите как скан, введенный в виде любого true или false.

Использование

Описание

пример

steeringDir = vfh(scan,targetDir) находит руководящее направление без препятствий с помощью VFH + алгоритм для входа lidarScan объект, scan. Целевое направление дано на основе целевого местоположения.

Чтобы включить этот синтаксис, необходимо установить UseLidarScan свойство к true. Например:

mcl = monteCarloLocalization('UseLidarScan',true);
...
[isUpdated,pose,covariance] = mcl(odomPose,scan);

steeringDir = vfh(ranges,angles,targetDir) задает скан лидара с двумя векторами: ranges и angles.

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

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

Чтения сканов лидара в виде lidarScan объект.

Зависимости

Чтобы использовать этот аргумент, необходимо установить UseLidarScan свойство к true.

mcl.UseLidarScan = true;

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

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

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

Выходные аргументы

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

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

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

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

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

showОтобразите VectorFieldHistogram информация в окне рисунка
stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

В этом примере показано, как вычислить держащееся направление на основе входных данных сканирования лазера.

Создайте controllerVFH объект. Установите UseLidarScan свойство к true.

vfh = controllerVFH;
vfh.UseLidarScan = true;

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

ranges = 10*ones(1,500);
ranges(1,225:275) = 1.0;
angles = linspace(-pi,pi,500);
targetDir = 0;

Создайте lidarScan объект путем указывания диапазонов и углов.

scan = lidarScan(ranges,angles);

Вычислите руководящее направление без препятствий.

steeringDir = vfh(scan,targetDir);

Визуализируйте VectorFieldHistogram расчет.

h = figure;
set(h,'Position',[50 50 800 400])
show(vfh)

Ссылки

[1] Боренштайн, J. и И. Корен. "Гистограмма поля Vector - Быстрое Предотвращение Препятствия для Мобильных Роботов". Журнал IEEE Робототехники и Автоматизации. Издание 7, Номер 3, 1991, pp.278-88.

[2] Ульрих, я., и Дж. Боренштайн. "VFH: надежное предотвращение препятствия для быстрых мобильных роботов". Продолжения. 1 998 международных конференций IEEE по вопросам робототехники и автоматизации. (1998): 1572–1577.

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

Введенный в R2019b