Суть в том, что я хочу сделать бота, который сможет доходить из одной точки карты в другую.
В игре нет никаких координат и тд, но есть карта, на которой отображается стрелка персонажа. На основе этого я сделал следующее:
1) Перевел карту в 2 цветный вариант, где красный цвет - непроходимая зона, зеленый - проходимая.
2) По обычной карте из игры определяю текущее местоположение персонажа через OpenCV.
3) На основе двухцветной карты генерирую путь от текущего местоположения до второй точки через A* алгоритм.
4) Запускаю бота, который постоянно анализирует местоположение персонажа и следит, чтобы он двигался по пути к следующей точке. Каждая точка пути это пиксель на карте.
В связи с тем, что движение выполняется ориентируясь на карту, возникают проблемы - хоть на ней и показаны препятствия, но иногда они больше, чем на карте, а иногда там есть препятствия, которых нет на этой же карте (например деревья) и бот периодически застревает между ними.
Я пробовал решить проблему с застреванием следующими способами:
1) Заставлял бота отходить назад, затем в сторону и продолжать путь.
2) Генерировал новый маршрут от текущей точки.
3) Увеличивал размер препятствий на двухцветной карте, чтобы он проходил не впритык к ним.
4) Пробовал уменьшить количество точек, в пути, чтобы он тупо по прямой бежал между точками (например точка каждые 10 пикселей).
Но все без толку, потому что бот движется по карте с небольшим допустимым отклонением, а если его убрать или уменьшить, тогда он начинает теряться в пути, кружится на месте, проходит отрезок и возвращается назад, чтобы пройти одну из точек в пути. Плюс если бота бьют мобы, то он замедляется.
И вот главный вопрос - есть идеи, как это можно нормально реализовать? Я уже думаю собирать датасет препятствий, обучить модель определять их, чтобы бот учитывал их на пути, но может есть варианты попроще?
mayton2019, у меня нет проблем с поиском пути, проблема заключается в том, что сам персонаж иногда застревает между препятствий в 3д пространстве, по которому персонаж передвигается используя плоскую картуи сравнивая по ней свое местоположение и соответствие пути. Тут не важно какой алгоритм для поиска пути использовать, он генерируется на основе картинки, а не 3д пространства. Или вы что-то другое имеете ввиду?
У тебя неправильно поставлен вопрос. Ты тегируешь вопрос OpenCV. Машинное зрение.
Это определение на фото или на видео каких-то известных системе шаблонов.
А фактически задаешь вопрос который идет в тему игровой логики.
Тоесть машинного зрения у нас уже нету а у нас есть совершенно другая проблема
которую невозможно решить потому что просто у нас нет на руках куска кода
или алгоритма.
1) Я написал, что путь генерируется на основе карты в игре, как раз opencv и отвечает за то, чтобы определять где персонаж находится на карте и дальше отслеживать правильно ли бот управляет персонажем согласно маршрута.
2) Указал, что бот застревает между препятствиями, потому что отслеживания местоположения на карте через opencv недостаточно.
3) Потом описал как я пробовал решить эту проблему без opencv.
4) В результате задал вопрос, как лучше всего можно определить препятствия при застревании, уточнив есть ли варианты попроще, чем создание своей модели для их определения.
Сам вопрос поставил не совсем понятно, тут признаю, но в остальном все правильно, opencv тут задействован напрямую
В результате решил обучить yolo11 модель, так как других универсальных вариантов не нашел. При застревании персонажа запускаю определение препятствий, вывожу персонажа в сторону от него и перестраиваю маршрут.