глупо стоять перед маленьким камушком и думать что это непроходимое препятствие
не сложные по конструкции препятствия, такие как: камни, деревья, ровные стены, да и в общем много других, Можно преодолевать "взявшись правой рукой за стену" и двигаясь вперед, для того что бы не ходить по кругу, а что бы все же найти выход, следует с каждой "итерацией" пытаться отправится по назначению....
Эффективность конечно явно ниже чем заранее просчитанный путь вокруг, НО этот просчитанный путь требует разработки довольно сложного алгоритма и алгоритм как в задачи коммивояжера не годится, потому как он ооочень ресурсоемкий.
Я предлагаю заставить бота двигаться в тех направлениях в которых мы знаем что нет стены (это не то что я писал выше в коде) а мы точно знаем что её нет там откуда мы пришли, то есть шаг назад, теперь мы знаем что её нет или справа или слева, то есть шагаем в сторону, если стена то повторяем до тех пор пока мы не подойдем к краю области в которой сказано быть, пока не войдем в бой (битва а дальше надо подумать) в таком случае меняем ведущую руку вот и все.
Что тут может быть не эффективного ? мы топчемся лишнюю минуту вокруг камня не более того.
При отсутствии данных о внешнем мире я не представляю других вариантов решения, как похоже и автор и в общем то вы