controllerVFH

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

Описание

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

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

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

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

Чтобы найти свободное от препятствий направление рулевого управления:

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

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

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

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

VFH = controllerVFH(Name,Value) возвращает объект гистограммы векторного поля с дополнительными опциями, заданными одним или несколькими 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] Borenstein, J., and Y. Koren. «Гистограмма векторного поля - быстрое предотвращение препятствий для мобильных роботов». IEEE Journal of Robotics and Automation. Том 7, № 3, 1991, pp.278-88.

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

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

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