Разработать программу, которая бы выполняла задачи компьютерного зрения автономного транспортного средства. В задачи решения войдет распознавание типовых объектов дорожного движения на основании RGB-снимков камеры автономного робота - колесной платформы DuckieBot или квадрокоптера с автопилотом.
Вам необходимо разработать программу на языке Python3, которая будет управлять движеним виртуального агента в двумерной среде, разделенной на клетки. Состояние среды и агента обновляется дискретно (по шагам). Агенту будет необходимо:
В зависимости от этапа олимпиады в задаче будут использованы следующие усложнения:
Робот Геннадий застрял в лабиринте, который представляет из себя сетку блоков N*N.
Блоки могут быть проходимыми и непроходимыми (стенами), а также содержать бонусы. В различных задачах вам нужно будет помочь роботу Геннадию справиться со стоящей перед ним задачей. Такой задачей может стать, например, поиск самого короткого выхода из лабиринта, а в некоторых задачах карта может меняться во время движения робота.
Вы можете получить следующую информацию о карте:
В задачах со статической картой вам нужно будет построить план движения, чтобы помочь Геннадию достигнуть цель (последовательно описать клетки, которые необходимо посетить роботу).
Пример такого решения:
Если ваше решение окажется правильным, но не самым быстрым (Геннадий зря посетит какие-то клетки), мы покажем вам карту препятствий, чтобы вы смогли усовершенствовать свою программу, пример такой карты:
=== Карта стен ===
1 1 1 1 1 1 1 1 1 1
1 1 0 0 0 0 1 0 1 1
1 0 0 1 0 0 0 1 1 1
1 1 0 1 1 0 1 1 1 1
1 1 1 0 0 1 0 1 1 1
1 1 0 0 1 0 1 0 0 1
1 0 1 0 1 0 1 1 0 1
1 0 0 1 0 1 0 0 0 1
1 0 0 1 1 1 0 1 0 1
1 1 1 1 1 1 1 1 1 1
В задачах с динамической картой вам нужно будет построить план движения для каждого шага робота Геннадия.
Для каждой задачи определено максимальное время работы решения (В шагах среды моделирования). Это значение задает максимальную длительность вашего движения или бездействия. Если ваша программа его привысили, то общая оценка за решение аннулируется.
Если критерий выше выполнен, то далее общая оценка решения является среднимарифметическим критериев:
def is_passable(x, y, env, grid_size):
if not (0 <= x < grid_size and 0 <= y < grid_size):
return False
# Проверяем состояние клетки
cell = env.get_cell(x, y) # У среды есть метод get_cell
if (cell is None):
return True
if cell.type == "wall": # Если клетка занята стеной
return False
if cell.type == "obstacle": # Если клетка занята другим препятствием
return False
return True
def solution(task_map, env):
grid_size = task_map['grid_size'] # размер стороны карты (карта -- квадрта)
goal = tuple(task_map['goal_pos']) # позиция точки, которую нужно достичь
current_pos = tuple(task_map['agent_start_pos']) # стартовая позиция
...
answer = []
...
return answer