В моем проекте я просто пытаюсь создать робота, который исследует как можно большую часть сетки, не делая один и тот же путь дважды. Кроме того, у него есть датчик, чтобы увидеть, лежит ли объект на своем пути (объект может находиться только в коридоре). Но у меня возникают проблемы с попыткой заставить робота избежать того же пути.Программирование робота для изучения сетки
Я попытался решить эту проблему, создав 2D-массив для хранения целочисленного значения для каждого квадрата в сетке. Значение 0 означает, что робот еще не был на этом квадрате в сетке, значение 1 означает, что квадрат заблокирован в сетке, а значение 2 означает, что робот находился на этом квадрате раньше. Если робот видит, что квадрат перед его текущим заголовком имеет значение 2, он будет продолжать вращаться, чтобы найти квадрат со значением 0, но если квадрат значения 0 вокруг робота не существует, он начинает отступать.
Моя проблема может быть объяснено более четко с этим примером:
Треугольник представляет робот и его начальное положение, нижний левый угол считается положение (0,0) в моя сетка. Зеленые круги представляют элементы, блокирующие его путь. Красный квадрат - это цель для робота. робот может перемещаться только на белые квадраты в сетке.
Когда я запускаю свою программу роботом, движется вперед (восток, так как это текущий заголовок), пока не доберется до перехода непосредственно перед зелеными кругами. Он смотрит в будущее и обнаруживает объект на своем пути, поэтому он вращается на 90 градусов против часовой стрелки и проверяет наличие другой блокировки, что снова происходит, и теперь он снова вращается против часовой стрелки. Итак, теперь робот находится в позиции (0,2), направляясь на запад. Он может двигаться только на запад, чтобы избежать выхода из сетки или удара объекта, поэтому он возвращается в исходное положение, но все еще движется на запад. Теперь он будет вращаться на 90 градусов по часовой стрелке до тех пор, пока не найдет направление, которое будет удерживать его на сетке, т. Е. До тех пор, пока он снова не выйдет на восток. Таким образом, сетка теперь выглядит следующим образом:
Но теперь я хочу, чтобы игнорировать идти вперед и на тот же путь, игнорируя это направление и поворот на 90 градусов против часовой стрелки снова выходят окнами на север, так что мой робот может двигаться на север, в новый путь. Я мог бы просто игнорировать направление и просто продолжать вращаться, чтобы найти новый путь, но что, если меня окружают перед путями, и я хочу, чтобы мой робот вернулся к своему последнему соединению. Как я могу эффективно это делать. Также как я могу эффективно определить, когда мне нужно отступить.
Спасибо
Проблема в том, что это физический робот, и его датчик может только ощутить, что впереди. Поэтому, чтобы определить, следует ли возвращаться назад, нужно будет повернуть 4 раза на каждом перекрестке, чтобы проверить проходы. Я ищу более эффективный метод по сравнению с этим –
О, хорошо, не понял, что это был настоящий робот. Знаете ли вы размер корпуса? – hhanesand
Да, я знаю точное количество пыли между соединениями –