Сообщество Engee

5. Алгоритм навигации робота

Автор
avatar-nkapyrinnkapyrin
Notebook

Включим в наш скрипт функции из другого скрипта.

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 ) # След робота на карте

Можем немного покататься

image.png

Всё-таки перейдем в режим 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 )