@SaberFreeze

Оптимальный способ управления персонажем?

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

В игре нет никаких координат и тд, но есть карта, на которой отображается стрелка персонажа. На основе этого я сделал следующее:
1) Перевел карту в 2 цветный вариант, где красный цвет - непроходимая зона, зеленый - проходимая.
2) По обычной карте из игры определяю текущее местоположение персонажа через OpenCV.
3) На основе двухцветной карты генерирую путь от текущего местоположения до второй точки через A* алгоритм.
4) Запускаю бота, который постоянно анализирует местоположение персонажа и следит, чтобы он двигался по пути к следующей точке. Каждая точка пути это пиксель на карте.

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

Я пробовал решить проблему с застреванием следующими способами:
1) Заставлял бота отходить назад, затем в сторону и продолжать путь.
2) Генерировал новый маршрут от текущей точки.
3) Увеличивал размер препятствий на двухцветной карте, чтобы он проходил не впритык к ним.
4) Пробовал уменьшить количество точек, в пути, чтобы он тупо по прямой бежал между точками (например точка каждые 10 пикселей).

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

И вот главный вопрос - есть идеи, как это можно нормально реализовать? Я уже думаю собирать датасет препятствий, обучить модель определять их, чтобы бот учитывал их на пути, но может есть варианты попроще?
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
@SaberFreeze Автор вопроса
В результате решил обучить yolo11 модель, так как других универсальных вариантов не нашел. При застревании персонажа запускаю определение препятствий, вывожу персонажа в сторону от него и перестраиваю маршрут.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы