# Материалы дистанционных Учебно-Тренировочных сборов 2020/21. Задание 2 ## Чтение ArTag метки ### Описание поля: Робот, собранный по дифференциальной схеме, оснащен камерой и расположен на полигоне размером в $1$ сектор. Сектор --- квадрат шириной $600$ мм. На стене полигона прямо перед роботом располагается ArTag метка размером $50 \times 50$ мм на подложке $600 \times 200$ мм. Слева от ArTag метки располагаются тонкие вертикальные зеленые линии высотой на всю подложку. Справа от ArTag метки располагаются аналогичные линии синего цвета. Частота размещения линий увеличивается по мере приближения к ArTag метке и уменьшается по мере удаления от неё. ### Формат ArTag метки: ArTag метка состоит из $6 \times 6$ квадратов кодирующих биты. Черный квадрат считается $1$, белый квадрат считается $0$. Биты читаются слева направо сверху вниз. Картинка с подробным описанием приведена ниже. Для кодирования информации используется код с детекцией и коррекцией ошибок -- код [Хэмминга](https://en.wikipedia.org/wiki/Hamming_code). Для кода Хэмминга используются $12$ бит. После декодирования кода Хэмминга первые $3$ бита — координата $X$ в little endian, следующие $3$ бита — координата $Y$ в little endian, последние два бита равены $0$. ![](https://i.imgur.com/wUFlaO7.png) Картинка показывающая расположение битов на ArTag Описание соответствия битов их значению: 1. Первый контрольный бит 2. Второй контрольный бит 3. Младший бит координаты X 4. Третий контрольный бит 5. Второй бит координаты X 6. Старший бит координаты X 7. Младший бит координаты Y 8. Четвертый контрольный бит 9. Второй бит координаты Y 10. Старший бит координаты Y 11. 0 12. 0 ![](https://i.imgur.com/MO9ocSO.png) Пример изображения с камеры ![](https://i.imgur.com/3P0Bxub.jpg) Общий вид тестового полигона ### Функции робота Робот, расположенный на полигоне, управляется при помощи Python-скриптов.Для обеспечения работы робототехническое устройство использует библиотеку "robot", имеющей следующие команды: 1. **sleep(_sec_)** - пауза в sec секунд, возможно использование дробных чисел. 2. **getDirection()** - возвращает направление робота в радианах. 3. **getEncoders()** - возвращает показания экнодеров в радианах в формате dict. 4. **getLaser()** - возвращает показания лазера, включая время кадра, угол лазера, изменение угла между соседними показаниями и сами показания в формате dict. 5. **setVelosities(_linear, angular_)** - подасть заданные угловые и линейные скорости на робота. 6. **getImage()** - возвращает изображение с камеры робота в формате OpenCV image (RGB). Для демострации работы с робототехническим устройством в `scripts\` расположены примеры Python-скриптов. ### Формат выходных данных Необходимо считать ArTag метку и вывести координаты $X$ и $Y$ закодированные в метке через пробел в stdout. ### Примеры В вашем репозитории расположенно три тестовых примера, имеющие следующие правильные ответы: 0. тест. x = 0, y = 0 1. тест. x = 6, y = 4 2. тест. x = 4, y = 2 ### Инструкция по загрузке и запуску внутри VM 1. Установить Oracle VM VirtualBox 2. Скачать образ системы по данным ссылкам: [mega.nz](https://mega.nz/file/9ew1SQgL#K9XLZno0XrSyYvQWyociWEXtWjyDAL-nRCfKKqRgtF4), [google drive](https://drive.google.com/file/d/18OmuQ7Ne3LZoU4_G7vuAWI54sVzmr36-/view?usp=sharing) 3. Запустить его. 4. Скачать ваш репозиторий в любую дирректорию: ```git clone https://gitlab.com/onti-irs/onti-2021-irs/<<номер вашей группы>>/artag-detection``` Где <<ваш номер группы>> номер группы, присвоенный вам после передачи информации про ваши гитлаб аккаунты. Он имеет вид: ```irs202100```. 2. ``cd artag-detection`` 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/