# Материалы дистанционных Учебно-Тренировочных сборов 2020/21. Задание 1
## Перемещение в лабиринте
Робот, собранный по дифференциальной схеме оснещен камерой и лазерным дальномером. Дальномер позволяет получить массив данных который содержит $683$ показаний, полученных в диапазоне $(-120^\circ; 120^\circ)$. Показания распределены равномерно в пределах указанного диапазона. Камера установленна так, что направленна в направлении движении робота.
Необходимо в заранее неизвестном полигоне размером $8 \times 8$ секторов найти наименьшее расстояние между **ближайшей** тумбой к границе полигона и этой границей. Сектор --- квадрат шириной $600$ мм. Тумба занимает весь сектор и располагается так, что занимает либо весь сектор, либо со смещением в пол сектора. На полигоне может располагается $N=4$ тумбы.

Пример расположения тумб на полигоне
### Функции робота
Робот, расположенный на полигоне, управляется при помощи Python-скриптов.Для обеспечения работы робототехническое устройство использует библиотеку "robot", имеющей следующие команды:
1. **sleep(_sec_)** - пауза в sec секунд, возможно использование дробных чисел.
2. **getDirection()** - возвращает направление робота в радианах.
3. **getEncoders()** - возвращает показания экнодеров в радианах в формате dict.
4. **getLaser()** - возвращает показания лазера, включая время кадра, угол лазера, изменение угла между соседними показаниями и сами показания в формате dict.
5. **setVelosities(_linear, angular_)** - подасть заданные угловые и линейные скорости на робота.
6. **getImage()** - возвращает изображение с камеры робота в формате OpenCV image.
Для демострации работы с робототехническим устройством в `scripts\` расположены примеры Python-скриптов.
### Формат выходных данных
Определить расстояние между границей полигона и ближайшей тумбой.
Необходимо вывести это значение в консоль в метрах.
### Примеры
В вашем репозитории расположенно три тестовых примера, имеющие следующие правильные ответы:
0. тест $0.3$ м
1. тест $0.3$ м
2. тест $0.6$ м
### Инструкция по загрузке и запуску внутри VM
1. Установить Oracle VM VirtualBox
2. Скачать образ системы по данной [ссылке](https://mega.nz/file/YbZCBTpR#KLYlG1wHFBXlpuEo1bYt2u0twFB_ME5huRiesZxFALk)
3. Запустить его.
4. Скачать ваш репозиторий в любую дирректорию:
```git clone https://gitlab.com/onti-irs/onti-2021-irs/<<номер вашей группы>>/move-in-maze```
Где <<ваш номер группы>> номер группы, присвоенный вам после передачи информации про ваши гитлаб аккаунты. Он имеет вид: ```irs202100```.
2. ``cd move-in-maze``
3. Для запуска тестов используется следующая команда:
```./sh/run_simulation.sh N```
Где вместо N указан номер теста.
4. Для сброса состояния мира в Gazebo можно воспользоваться следующей командой:
```./sh/reset.sh```
5. Весь код, необходимо сохранять в данном репозитории. Название основного файла: `main.py`.
6. Для вашего удобства в образе уже установлен PyCharm.
### Полезные материалы по git
* https://git-scm.com/book/ru/v2
* https://stepik.org/course/3145/promo
* https://habr.com/ru/post/437000/