Изменения

Перейти к: навигация, поиск

Visibility graph и motion planning

454 байта добавлено, 19:28, 9 февраля 2015
Motion planning
Рассмотрим задачу нахождения кратчайшиго пути, когда движимый объект {{---}} это выпуклый полигон. Например, робот, которого надо доставить из начальной в конечную точку.
Если полигон вращать нельзя, задача задачу сводится к движению точки. Выбирается так : выбирается точка на полигоне, которая принимается за начало координат. В такой системе координат для каждого препятствия считается [[Сумма Минковского (определение, вычисление)|сумма Минковского]] с полигоном. Получаются бОльшие препятствия, но теперь достаточно двигать выбранную точку, что было описано выше.
Теперь рассмотрим случай, когда мы можем вращать полигон. Для начала построим [[Трапецоидная карта|трапецоидную карту]], как будто мы не можем вращать Если полигон. Теперь будем можно вращать полигон на малый угол, пока он не сделает полный оборот вокруг своей осизадача нахождения ''кратчайшего'' пути становится достаточно ресурсоёмка, и для каждого угла сделаем трапецоидную карту. Теперь разместим(мысленно) все карты друг над другом. Таким образом получится, что поворот на малый угол {{поэтому обычно рассматривают нахождение какого---}} это движение вверх/вниз между слоями. Осталось [[Пересечение многоугольников (PSLG overlaying)|попересекать]] соседние слои и добавить нибудь пути между ними ребра (помним что первый и последний слои одинаковы) и уже в этом графе найти путьконечными точками.
При такой реализации в некоторых случаях у нас может возникнуть ошибка в повороте, так как в одной плоскости мы все можем делать точноПервый шаг решения этой задачи совпадает с предыдущим случаем : положения на соседних слоях могут допускатьсявыберем точку и построим [[Сумма Минковского (определение, а повернуть мы не сможемвычисление)|сумма Минковского]] препятствий с полигоном. Это лечится в основном двумя способами: измельчением угла поворота и изначальным сглаживанием углов полигона {{---}} повращать полигон на Рассмотрим малый угол <tex> +\epsilon </tex> и <tex> . Представим, что поворот полигона на этот угол {{---}} это движение вверх-\epsilon </tex> и объединить вниз между слоями, на каждом из которых посчитана сумма Минковского с исходнымполигоном, получив новый полигонповернутым на этот угол.
Так На каждом слое построим трапецоидную карту и граф, как эта задача достаточно ресурсоемкаописано в [[Visibility graph и motion planning#Нахождение пути между точками с препятствиями|начале]]. Если [[Пересечение многоугольников (PSLG overlaying)|пересечь]] соседние слои и добавить между их графами ребра, получится один большой граф, мы рассматриваем в котором ищется кратчайший путь. При таком подходе может возникнуть ошибка при пересечении слоев : на каждом слое состояния будут допустимые, а осуществить поворот физически будет невозможно. Обычно, эту проблему решают двумя способами : измельчением угла поворота и изначальным сглаживанием углов полигона. Первый способ повышает не только наличие точность решения, но вычислительную сложность задачи. Второй подход практически исключает возможность нахождения пути, когда его нет, но повышает вероятность "ненахождения" пути, а не нахождение кратчайшегокогда он есть.
== Источники ==
222
правки

Навигация