controllerVFH

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

Описание

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

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

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

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

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

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

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

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

Создание

Описание

пример

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