робототехника. VectorFieldHistogram

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

Описание

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

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

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

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

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

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

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

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

Создание

Синтаксис

VFH = robotics.VectorFieldHistogram
VFH = robotics.VectorFieldHistogram(Name,Value)

Описание

пример

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

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

Синтаксис

steeringDir = vfh(scan,targetDir)
steeringDir = vfh(ranges,angles,targetDir)

Описание

пример

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

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

mcl = robotics.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Сбросьте внутренние состояния Системного объекта

Примеры

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

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

Создайте объект VectorFieldHistogram.

 vfh = robotics.VectorFieldHistogram;

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

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

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

steeringDir = vfh(ranges,angles,targetDir)
steeringDir = -0.8014

Визуализируйте вычисление 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.

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

Введенный в R2015b