Камень, ножницы, бумага — популярная игра на руках, известная во многих странах мира. Часто используется как методика жеребьёвки для выбора персоны для какой-либо цели (наряду с бросанием монеты, вытягиванием соломинок и т. п.).
В момент нажатия кнопки робот, делает кадр с камеры для распознавания нейронной сетью и используя ряд заложенных в его программу стратегий поведения, устанавливает свою фигуру. Управления рукой робота производится с помощью четырех независимых ПИД-регуляторов.
Игроки считают вместе вслух «Камень… Ножницы… Бумага… Раз… Два… Три», одновременно качая кулаками. На счёт «Три» они одновременно показывают при помощи руки один из трёх знаков: камень, ножницы или бумагу. Знаки изображены на картинке.
Победитель определяется по следующим правилам:
- Камень побеждает ножницы («камень слишком крепок для ножниц»)
- Бумага побеждает камень («бумага накрывает камень»)
- Ножницы побеждают бумагу («ножницы разрезают бумагу»)
В предыдущем нашем проекте с использованием LEGO Mindstorms EV3, камеры и нейронной сети, N3uralV1s10n, мы уже научились распознавать простейшие образы. Использование машинного зрения открывает интересные возможности по решению давно задуманных задач. Одна из них - робот, способный играть с человеком в "Камень, ножницы, бумагу".
Начнем с конструкции робота. "Модуль распознавания образов" в виде подставки для камеры и рамка-держатель для фона перекочевали без особых изменений из "распознавателя цифр". Белый фон за рукой позволяет распознавать образы более стабильно, хотя возможна работа и без него. В конструкции предусмотрен датчик-кнопка, она может использоваться особо мнительными игроками в розыгрыше раунда. В "контактном" режиме игры до нажатия кнопки можно быть уверенным, что робот не подсмотрел, какую фигуру начал ставить или поставил человек. В основном режиме игры, "бесконтактном", никакие органы управления не используются, робот полностью опирается на данные с камеры.
Руку робота мы сконструировали с использованием 4 моторов, три из которых управляют пальцами, а четвертый мотор позволяет "махать кулаком".
Инструкцию по сборке конструкции можно скачать по ссылке.
Программное обеспечение для робота написано на языке Python. В составе комплекта предусмотрено 2 программы:
Вторая программа при запуске считывает файл с данными обученной с помощью первой программы нейронной сети, озвучивает правила игры и робот, начинает, тряся кулаком, отсчет первого раунда. Как только считалочка роботом произнесена, человек может установить задуманную им фигуру напротив белого экрана, нажав запястьем на кнопку,, тем самым дав понять роботу что игра началась.
Программное обеспечение для робота написано на языке Python. В составе комплекта предусмотрено 2 программы:
- Программа обучения нейронной сети робота
- Программа для игры в "Камень, ножницы, бумага", использующая данные обученной нейросети
Код программы для обучения нейронной сети:
Для независимого управления рукой робота используется параллельный процесс, организованный с применением модуля Threading.
После того, как фигура роботом установлена, начинает работу нейронная сеть, ее цель - распознать фигуру, которую установил человек, по данным кадра, сохраненного в момент нажатия кнопки.
Нейронная сеть в данном проекте однослойная, с прямым распространением ошибки. Такой сети вполне достаточно, чтобы отличить три фигуры друг от друга, она достаточно быстро работает на такой малопроизводительной по современным меркам платформе как EV3.
В зависимости от исхода раунда робот озвучивает результат и переходит к розыгрышу следующего. В случае одинаковых фигур раунд переигрывается. В каждой игре всего 3 раунда. по ее итогам робот сообщает результат.
Код основной игровой программы: