5. Алгоритм навигации робота
Автор
Включим в наш скрипт функции из другого скрипта.
In [ ]:
cd( @__DIR__ )
include( "room_functions.jl" );
gr()
Нарисуем комнату
In [ ]:
карта, старт = gen_room( 10, 10, 4, 5 )
карта[2,2] = true; # Поэкспериментируем с картой
heatmap( карта, c=:grays, leg=:false ) # Изображение карты
spy!( Bool.(карта) .+ 1, c=:tab20 ) # Информация о каждой точке карты (попробуйте закомментировать!)
scatter!( [5], [5] ) # Положение робота
plot!( [2,2,3,4,5,5], [3,4,4,4,4,5], aspect_ratio=:equal ) # След робота на карте
Можем немного покататься
Всё-таки перейдем в режим gr
, потому что отрисовывать будем часто, а plotly
для медленных графиков.
In [ ]:
function шагаем!( положение, вся_карта )
# Можно ли ехать вперед?
направление = [1,0]
точка_впереди = положение .+ направление
# посмотрим, что там на карте в этом месте
карта_впереди = вся_карта[ точка_впереди... ]
# рассчитаем и вернем новое положение робота
if карта_впереди == false
# Если впереди нет стены, то можно ехать
положение .= точка_впереди
end
end;
In [ ]:
карта, старт = gen_room( 10, 10, 4, 5 );
координаты = старт[:];
In [ ]:
# Запустите эту ячеку несколько раз
шагаем!( координаты, карта )
heatmap( карта, c=:blues, aspect_ratio=:equal, leg=:false, size=(400,400) )
spy!( Bool.(карта) .+ 1, c=:tab20 )
scatter!( [координаты[1]], [координаты[2]] )
scatter!( [старт[1]], [старт[2]], shape=:xcross )