Вы, наверное, видели множество проектов, основанных на Arduino, которые управлялись через какой-нибудь смартфон. Такие проекты представляли из себя, как правило, вот такую картину: машинка со вставленным в нее Bluetooth-модулем, на который с эмулятора джойстика на телефоне посылаются команды(или что-то в этом роде). Таких штуковин сделано было превеликое множество, и мне пришла в голову такая вот идея. А что, если Arduino поможет Вам на время расстаться с Вашим смартфоном, но при этом продолжать играть в него? Так и родился проект шахматного робота, «мозги» и «глаза» которого сосредоточены в Android-смартфоне. Подробнее — под катом.


Общее представление


[Хайрез]

Вся эта композиция представляет из себя деревянную коробочку, на которой расположились шахматная доска, манипулятор и кронштейн с подсветкой, на котором лежит телефон. После игры всё выше перечисленное убирается в эту самую коробочку и может без проблем транспортироваться куда угодно, например, в рюкзаке.

Принцип работы здесь следующий. Сверху над доской, на специальном кронштейне устанавливается телефон со специальным приложением, которое с помощью системы компьютерного зрения фиксирует текущее положение фигур на доске. Исходя из того, что система отслеживает все ходы, нет необходимости визуально определять, какая именно фигура стоит в клетке, достаточно знать сам факт её наличия и цвет.
После того, как сделанный человеком ход зафиксирован, эта информация передается шахматному движку, который решает, каким ходом ему надо ответить.
Далее производится вычисление углов для положений, которые роботу предстоит принять, чтобы совершить ход. После чего эта информация отправляется по Bluetooth на манипулятор. Манипулятору остается только принять эту
информацию и сделать ход.

Надеюсь, что читатель этой статьи найдёт здесь что-нибудь интересное для себя. Возможно, кто-то захочет повторить этот проект, или сделать что-то похожее. Сразу хочу сказать, что туториала не будет, так как скопировать эту работу просто по инструкции шаг за шагом не получится, ввиду того что здесь есть много тонкостей, которые можно понять только при попытке реализации. Если Вы захотите посмотреть на чертежи манипулятора, или у Вас возникнут другие вопросы, пишите в личку на GT или в ВК, отвечу бесплатно и по первому требованию.

Программная часть

Вся эта композиция управляется одним небольшим Android-приложением. На него ложится много задач: Определение фигур на доске, расчёт углов для манипулятора, работа с шахматным движком, также реализовано пара голосовых сообщений робота по типу «Я поставил вам шах!» и «Спасибо за игру!». Но при всём этом интерфейс приложения уместился в один экран.


Система технического зрения реализована довольно просто. С ракурса телефона нет особой разницы между, скажем, королём и конём — визуально обе эти фигуры будут выглядеть как чёрные и белые кружки. Поэтому система не знакомится с увиденной ею позицией каждый раз заново, а запоминает последовательность всех сделанных ходов. А сделанный ход определить очень просто: если в какой-то момент времени программа видит, что в одной клетке фигура пропала, а в другой появилась, то это и будет считаться ходом. Примерно так это и работает.
Такой вариант технического зрения реализован исключительно через Android API, без использования OpenCV или чего-то похожего. Это не то чтобы правильно, причина здесь — личный интерес реализовать всё практически с нуля.


Манипулятор

Очень много творческих поисков ушло на то, чтобы придумать такую конструкцию манипулятора, которая может достойно выполнять свою работу с имевшимися у меня в большом количестве дешёвыми китайскими сервоприводами TowerPro sg-90, которые не отличаются высоким качеством работы. Поэтому оба плеча манипулятора выполнены в виде параллелограммов, это позволяет системе захвата фигур всегда оставаться в вертикальном положении. Это, в свою очередь, лишает необходимости добавлять ещё один сервопривод, следовательно, в системе будет меньше погрешностей, позволяет ей быть легкой и более или менее надёжной. Так как шестерёнки тоже сделаны из дерева, то трудно добиться высочайшего качества их работы, поэтому для компенсации люфтов манипулятор перед каждым ходом делает движение в бок, чтобы подходить к каждой точке с одной стороны.

Что касается питания, то его робот его получает от двух плат из обычных зарядок для телефона, которые благополучно расположились в корпусе. Одна зарядка питает сам контроллер вместе с Bluetooth-модулем, другая — непосредственно механику. Для того чтобы сделать освещение, была разобрана светодиодная лампочка. Как оказалось, внутри неё находится две платы: на одной расположились светодиоды, на другой — преобразователь питания. Одна крепится на кронштейне, другая помещается в корпус коробочки. Всё питание выведено на небольшую панельку на боковой стороне корпуса коробочки:


Ещё одна картинка, на которой показана рабочая область манипулятора для отмеченной на нём красной точки. Для нулевой оси диапазон углов составляет 180°.


Сделать такого робота у меня получилось не сразу, некоторые прототипы работали весьма плохо, а некоторые сгодились для другой работы. Например, робот в видеоролике ниже кладёт сахар в кружку и помешивает чаёк.


Система захвата фигур

Особого внимания, на мой взгляд, заслуживает конструкция системы захвата фигур. Самым очевидным решением здесь было сделать две двигающихся навстречу щёчки под управлением сервопривода. Что-то вроде этого:

Как можно понять из рисунка, то для комплекта совсем не больших фигур с диаметром основания 18 мм нужно делать клетку шахматной доски почти в два раза больше, и размер доски также получается неоправданно огромным. После Нескольких неудачных реализаций такого варианта я наткнулся на такую необычную вещь, которая носит название «гибкий цанговый захват»), и выглядит она следующим образом:

То есть это гибкий полый внутри стержень с небольшой металлической подпружиненной клешнёй на конце, которая закрывается, если её сдавить по бокам. А при отсутствии давления клешня мгновенно открывается. Разломав такой захват, на его основе я сделал свою систему захвата фигур. Металлическую клешню сдавливает кольцо, которое прикреплено к зубчатой рейке, приводимой в движение сервоприводом.


Результаты

Работа над проектом продолжается, и результаты тоже постепенно улучшается. На данный момент робот может отыграть партию, не ограниченную количеством ходов, как за чёрных, так и за белых. При этом не будет ошибок ни в работе механики, ни программной части системы. Играет он, кстати, не особо сильно, на уровень третьего разряда, это легко поправляется заменой шахматного движка. Данного робота я демонстрировал на выставке «Архимед-2016», где он практически без остановки играл с разными людьми 6 часов подряд и достойно выдержал такой тест драйв.

На этом всё, надеюсь, вам был интересен этот проект. В нём, конечно есть свои недостатки особенности реализации, так что ещё есть куда стремиться, что совершенствовать и что развивать. Буду рад любым советам, вопросам и пожеланиям в комментариях.

Комментарии (15)


  1. olloy
    06.04.2016 12:22
    +2

    очень круто, спасибо!


  1. Salavat
    06.04.2016 12:31
    +1

    Вот бы мне такой семилетнему сыну! А то времени не хватает с ним играть в шахматы.


  1. Demonos
    06.04.2016 12:39
    +2

    Ой-ой! У меня младший в секции по шахматам. Среди домашних, кроме как с папкой играть не с кем. Телефонные и компьютерные варианты ему скучны в виду отсутствия ритуала контакта с доской и фигурами. Вот такой «напарник» в хозяйстве бы нам пригодился! Жаль нет туториала, чтобы прикинуть собственные силы в создании.


  1. mixaly4
    06.04.2016 16:24

    Шикарная штука!

    PS: Правда немного напоминает картинку про троллейбус из хлеба :-)


    1. Eppy
      06.04.2016 19:27

      Разве что уж совсем немного, ведь игра в шахматы — это уже полезное занятие, особенно если особо играть не с кем)


  1. php-include
    06.04.2016 16:24
    +1

    Давно так не подпрыгивал от удивления )))) Замечательная работа мои поздравления… Прям захотелось повторить!
    Интересно было бы узнать о приложении под Андройд.


    1. Eppy
      06.04.2016 20:25

      Спасибо) В этом видео наглядно демонстрируется, как проходит партия с роботом, и что происходит на экране смартфона в том числе:


      1. 2000vif
        07.04.2016 11:55
        +2

        Клево!
        Заставьте его расставлять фигуры после проигрыша!


  1. Siper
    06.04.2016 16:33
    +1

    «Поэтому система не знакомится с увиденной ею позицией каждый раз заново, а запоминает последовательность всех сделанных ходов.» — защита от Остапа.


  1. serg_meus
    07.04.2016 08:06
    +1

    Большое человеческое спасибо Вам за проект и за статью. Сам давно уже хочу сделать что-нибудь подобное. Отдельный респект за выбор дерева в качестве материала манипулятора. Хотел бы спросить, а нельзя ли все это сделать по-другому: внутрь каждой фигуры поместить мощный магнит, а под доской сделать перемещаемый электромагнит, чтобы двигать фигуры, и там же датчик Холла, чтобы считывать изменения позиции. Я понимаю, что красота и ламповость такой конструкции будут несравнимо меньше, но может быть будет практичнее?


    1. Eppy
      07.04.2016 16:14

      Такие проекты уже есть, здесь есть несколько трудноразрешимых проблем. Во-первых, это ход конём и ход по диагонали. Красиво сделать такой ход, не отрывая фигуру от доски бывает трудно. Здесь нужно либо делать размер клетки намного больше размера фигур, либо придумывать что-то ещё. Другая проблема — съедание фигуры, которая должна как-то выехать на магните за пределы доски, что также иногда может быть затруднительно. Вот, например, приличный проект с такой реализацией: youtu.be/dX37LFv8jWY


  1. pushkinma
    07.04.2016 08:07

    crabo.ru/b11ics/futur1.jpg


  1. MaxakCh
    07.04.2016 11:55
    +2

    Очень круто. Еще можно по сети с реальным человеком из другого города играть. Хотел такую штуку, что бы со своими дедами играть. Они компьютер освоить никак не могут, а с механической системой справились бы)


  1. defecator
    07.04.2016 14:40

    А почему робот перед тем, как поставить фигуру на доску, уносит её за пределы доски,
    куда-то в угол?


    1. Eppy
      07.04.2016 16:15

      Так как шестерёнки тоже сделаны из дерева, то трудно добиться высочайшего качества их работы, поэтому для компенсации люфтов манипулятор перед каждым ходом делает движение в бок, чтобы подходить к каждой клетке с одной стороны.