Двухмерные мультироботы, избегающие препятствий на пути к цели

Я думаю о том, чтобы собрать трех роботов, соединяющихся вместе и образующих треугольник (не физически), и пытаться избегать статических препятствий на пути к цели в Java-апплете. Кроме того, я сосредоточусь на алгоритме A* для поиска пути и выбора центра системы в качестве точки отсчета для эвристического значения. Но я обнаружил, что даже A* сгенерировал путь, основанный на центре системы, мульти-роботы все еще могут натыкаться на препятствия на пути к цели. Есть ли хороший способ решить эту проблему?


person Bruce    schedule 01.04.2015    source источник
comment
Ты уверен, что твоя задница работает нормально? что вы подразумеваете под подключенным роботом? это физическая ссылка? их можно рассматривать как одного, но большого робота? Вы уверены, что правильно интерпретируете свой путь? Можете ли вы предоставить код?   -  person user902383    schedule 01.04.2015
comment
Хм, если предположить, что препятствия не движутся (если они движутся, то, возможно, стоит уточнить это в вопросе), то, если ваш поиск пути «натыкается» на препятствия, то по определению он не работает. Заблокированные узлы не должны быть в списке открытых.   -  person DFreeman    schedule 01.04.2015
comment
@user902383 user902383 Извините за неясность вопроса. Вся реализация имитируется в апплете Java, и роботы будут двигаться, и они могут распространяться внутрь и наружу, но все время соединяться в форме треугольника. Если я рассматриваю это как одну точку, как я могу подсчитать эвристическое значение? или есть другой хороший алгоритм для решения скоординированных движущихся роботов, кроме A*?   -  person Bruce    schedule 01.04.2015
comment
@DFreeman Извините за неясность этого вопроса. Я уже отредактировал вопрос.   -  person Bruce    schedule 01.04.2015
comment
@Bruce просто сделайте дополнительную проверку, чтобы узнать, есть ли у вас какие-либо препятствия в радиусе круга, описанном точками, где находятся ваши роботы. я считаю, что это должно работать. Кроме того, будет хорошо, если вы предоставите нам реализацию вашего алгоритма a*   -  person user902383    schedule 02.04.2015


Ответы (1)


Если вы используете карту занятости для навигации, сделайте каждую плитку размером не менее размера сети роботов. Тогда, если ячейка «не занята», вы точно знаете, что вся ваша сеть может поместиться в ней, не натыкаясь на какие-либо препятствия. Сами роботы могли бы использовать разделенную карту. Таким образом, вы можете представить, что одна ячейка на карте заполняемости представляет для ботов ячейку 3x3. Таким образом, боты по-прежнему могут точно формироваться, используя свою разделенную ячейку, в то время как алгоритм планирования пути может гарантировать, что независимо от того, как устроены боты, они будут в безопасности.

Я включил игрушечный пример. Темные линии представляют собой ячейку для карты заполнения, это то, что видит ваш алгоритм планирования пути. Боты (маленькие желтые квадраты) внутренне подразделяют карту занятости (алгоритму планирования не нужно знать, что это происходит), а также могут изменять свою собственную конфигурацию в пределах одной ячейки занятости.

Темно-розовые ячейки показывают, где может быть физический блок, но мы считаем всю область (большую ячейку) занятой. Даже если сеть потенциально может пройти мимо физического препятствия. Просто говоря, что область рядом с ней оккупирована, мы уменьшаем вероятность попадания в сложные ситуации.

введите здесь описание изображения

A* может видеть только светло-розовые и светло-зеленые клетки. Роботы могут дополнительно подразделять большие блоки внутри

person andrew    schedule 05.05.2015