Деревянный робот, который умеет играть в шахматы
Вы, наверное, видели множество проектов, основанных на Arduino, которые управлялись через какой-нибудь смартфон. Такие проекты представляли из себя, как правило, вот такую картину: машинка со вставленным в нее Bluetooth-модулем, на который с эмулятора джойстика на телефоне посылаются команды (или что-то в этом роде). Таких штуковин сделано было превеликое множество, и мне пришла в голову такая вот идея. А что, если Arduino поможет Вам на время расстаться с Вашим смартфоном, но при этом продолжать играть в него? Так и родился проект шахматного робота, «мозги» и «глаза» которого сосредоточены в Android-смартфоне. Подробнее — под катом.
Общее представление
[Хайрез]
Вся эта композиция представляет из себя деревянную коробочку, на которой расположились шахматная доска, манипулятор и кронштейн с подсветкой, на котором лежит телефон. После игры всё выше перечисленное убирается в эту самую коробочку и может без проблем транспортироваться куда угодно, например, в рюкзаке.
Принцип работы здесь следующий. Сверху над доской, на специальном кронштейне устанавливается телефон со специальным приложением, которое с помощью системы компьютерного зрения фиксирует текущее положение фигур на доске. Исходя из того, что система отслеживает все ходы, нет необходимости визуально определять, какая именно фигура стоит в клетке, достаточно знать сам факт её наличия и цвет.
После того, как сделанный человеком ход зафиксирован, эта информация передается шахматному движку, который решает, каким ходом ему надо ответить.
Далее производится вычисление углов для положений, которые роботу предстоит принять, чтобы совершить ход. После чего эта информация отправляется по Bluetooth на манипулятор. Манипулятору остается только принять эту
информацию и сделать ход.
Надеюсь, что читатель этой статьи найдёт здесь что-нибудь интересное для себя. Возможно, кто-то захочет повторить этот проект, или сделать что-то похожее. Сразу хочу сказать, что туториала не будет, так как скопировать эту работу просто по инструкции шаг за шагом не получится, ввиду того что здесь есть много тонкостей, которые можно понять только при попытке реализации. Если Вы захотите посмотреть на чертежи манипулятора, или у Вас возникнут другие вопросы, пишите в личку на GT или в ВК, отвечу бесплатно и по первому требованию.
Программная часть
Вся эта композиция управляется одним небольшим Android-приложением. На него ложится много задач: Определение фигур на доске, расчёт углов для манипулятора, работа с шахматным движком, также реализовано пара голосовых сообщений робота по типу «Я поставил вам шах!» и «Спасибо за игру!». Но при всём этом интерфейс приложения уместился в один экран.
Система технического зрения реализована довольно просто. С ракурса телефона нету особой разницы между, скажем, королём и конём — визуально обе эти фигуры будут выглядеть как чёрные и белые кружки. Поэтому система не знакомится с увиденной ею позицией каждый раз заново, а запоминает последовательность всех сделанных ходов. А сделанный ход определить очень просто: если в какой-то момент времени программа видит, что в одной клетке фигура пропала, а в другой появилась, то это и будет считаться ходом. Примерно так это и работает.
Такой вариант технического зрения реализован исключительно через Android API, без использования OpenCV или чего-то похожего. Это не то чтобы правильно, причина здесь — личный интерес реализовать всё практически с нуля.
Манипулятор
Очень много творческих поисков ушло на то, чтобы придумать такую конструкцию манипулятора, которая может достойно выполнять свою работу с имевшимися у меня в большом количестве дешёвыми китайскими сервоприводами TowerPro sg-90, которые не отличаются высоким качеством работы. Поэтому оба плеча манипулятора выполнены в виде параллелограммов, это позволяет системе захвата фигур всегда оставаться в вертикальном положении. Это, в свою очередь, лишает необходимости добавлять ещё один сервопривод, следовательно, в системе будет меньше погрешностей, позволяет ей быть легкой и более или менее надёжной. Так как шестерёнки тоже сделаны из дерева, то трудно добиться высочайшего качества их работы, поэтому для компенсации люфтов манипулятор перед каждым ходом делает движение в бок, чтобы подходить к каждой точке с одной стороны.
Что касается питания, то его робот его получает от двух плат из обычных зарядок для телефона, которые благополучно расположились в корпусе. Одна зарядка питает сам контроллер вместе с Bluetooth-модулем, другая — непосредственно механику. Для того чтобы сделать освещение, была разобрана светодиодная лампочка. Как оказалось, внутри неё находится две платы: на одной расположились светодиоды, на другой — преобразователь питания. Одна крепится на кронштейне, другая помещается в корпус коробочки. Всё питание выведено на небольшую панельку на боковой стороне корпуса коробочки:
Ещё одна картинка, на которой показана рабочая область манипулятора для отмеченной на нём красной точки. Для нулевой оси диапазон углов составляет 180°.
Сделать такого робота у меня получилось не сразу, некоторые прототипы работали весьма плохо, а некоторые сгодились для другой работы. Например, робот в видеоролике ниже кладёт сахар в кружку и помешивает чаёк.
Система захвата фигур
Особого внимания, как по мне, заслуживает конструкция системы захвата фигур. Самым очевидным решением здесь было сделать две двигающихся навстречу щёчки под управлением сервопривода. Что-то вроде этого:
Как можно понять из рисунка, то для комплекта совсем не больших фигур с диаметром основания 18 мм нужно делать клетку шахматной доски почти в два раза больше, и размер доски также получается неоправданно огромным. После Нескольких неудачных реализаций такого варианта я наткнулся на такую необычную вещь, которая носит название «гибкий цанговый захват»), и выглядит она следующим образом:
То есть это гибкий полый внутри стержень с небольшой металлической подпружиненной клешнёй на конце, которая закрывается, если её сдавить по бокам. А при отсутствии давления клешня мгновенно открывается. Разломав такой захват, на его основе я сделал свою систему захвата фигур. Металлическую клешню сдавливает кольцо, которое прикреплено к зубчатой рейке, приводимой в движение сервоприводом.
Результаты
Работа над проектом продолжается, и результаты тоже постепенно улучшается. На данный момент робот может отыграть партию, не ограниченную количеством ходов, как за чёрных, так и за белых. При этом не будет ошибок ни в работе механики, ни программной части системы. Играет он, кстати, не особо сильно, на уровень третьего разряда, это легко поправляется заменой шахматного движка. Данного робота я демонстрировал на выставке «Архимед-2016», где он практически без остановки играл с разными людьми 6 часов подряд и достойно выдержал такой тест драйв.
На этом всё, надеюсь, вам был интересен этот проект. В нём, конечно есть свои недостатки особенности реализации, так что ещё есть куда стремиться, что совершенствовать и что развивать. Буду рад любым советам, вопросам и пожеланиям в комментариях.