Оглавление:

Шахматный робот, сделанный из LEGO и Raspberry Pi: 6 шагов
Шахматный робот, сделанный из LEGO и Raspberry Pi: 6 шагов

Видео: Шахматный робот, сделанный из LEGO и Raspberry Pi: 6 шагов

Видео: Шахматный робот, сделанный из LEGO и Raspberry Pi: 6 шагов
Видео: Обзор робототехнических платформ для образования 2024, Ноябрь
Anonim
Image
Image

Удивите своих друзей этим шахматным роботом!

Его не так уж сложно построить, если вы уже делали роботов LEGO и если у вас есть хотя бы элементарные знания в области компьютерного программирования и Linux.

Робот делает свои собственные ходы и использует визуальное распознавание, чтобы определить ход игрока-человека.

Одна из новинок этого робота - это код для распознавания движений. Этот код технического зрения также можно использовать для шахматных роботов, созданных многими другими способами (например, мой ChessRobot, использующий роботизированную руку Lynxmotion).

Никакой специальной шахматной доски, язычковых переключателей или чего-то еще не требуется (так как ход человека определяется визуальным распознаванием).

Мой код доступен для личного использования.

Шаг 1. Требования

Свет, камера, мотор!
Свет, камера, мотор!

Весь код написан на Python, который, помимо прочего, будет работать на Raspberry Pi.

Raspberry Pi - это компьютер размером с кредитную карту, который можно подключить к экрану и клавиатуре. Это недорогой (около 40 долларов), способный маленький компьютер, который можно использовать в проектах электроники и робототехники, а также для многих вещей, которые делает ваш настольный ПК.

Мой робот использует Raspberry Pi и Lego. Аппаратный интерфейс между RPi и двигателями и датчиками Lego Mindstorms EV3 обеспечивается BrickPi3 от Dexter Industries.

Сборка Lego основана на «Шахматном роботе Чарли» Дарроуса Хади, модифицированном мной, включая модификации для использования RPi, а не процессора Lego Mindstorms. Используются моторы и датчики Lego Mindstorms EV3.

Вам также понадобится стол, камера, освещение, клавиатура, экран и указывающее устройство (например, мышь).

И, конечно же, шахматные фигуры и доска.

Я опишу все это более подробно в следующих шагах.

Шаг 2: Сборка оборудования

Image
Image

Как я ранее указывал, ядро кода видения будет работать с различными сборками.

Я основал своего робота на «Шахматном роботе Чарли» (версия EV3) Дарруса Хади, информация на этой странице говорит, как получить инструкции по сборке. Список запчастей здесь.

Я модифицировал робота несколькими способами.

1. Захватчик. У меня это не сработало. Шестерни соскользнули, поэтому я добавил дополнительные детали Lego, чтобы предотвратить это. А затем, когда кран опускали, он часто заклинивал, поэтому я добавил рычажный механизм Ватта, чтобы предотвратить это.

Выше показан захват в действии, показывающий измененную связь.

2. В исходной сборке используется процессор Lego Mindstorms EV3, но я использую Raspberry Pi, что упрощает использование Python.

3. Я использую Raspberry Pi 3 Model B.

4. Чтобы связать RPi с Lego, я использую BrickPi3 от Dexter Industries. BrickPi подключается к Raspberry Pi, и вместе они заменяют LEGO Mindstorms NXT или EV3 Brick.

Когда у вас есть файл Lego Digital Designer, возникает вопрос о получении частей LEGO. Вы можете получить кирпичи прямо в магазине LEGO, и это самый дешевый способ их получить. Однако у них не будет всего, что вам нужно, и доставка кирпичей может занять пару недель или больше.

Вы также можете использовать Rebrickable: откройте учетную запись, загрузите файл LDD и получите список продавцов.

Еще один хороший источник - Bricklink.

Шаг 3. Программное обеспечение, которое заставляет робота двигаться

Весь код написан на Python 2.

  1. Dexter Industries предоставляет код для поддержки перемещения двигателей EV3 и т. Д. Он поставляется с BrickPi3.
  2. Я предоставляю код, чтобы двигатели двигались таким образом, чтобы двигать шахматные фигуры!
  3. Шахматный движок - Stockfish - он может победить любого человека! «Stockfish - один из сильнейших шахматных двигателей в мире. Он также намного сильнее, чем лучшие гроссмейстеры среди людей».
  4. Код для управления шахматным движком, проверки допустимости хода и т. Д. - ChessBoard.py.
  5. Я использую код из https://chess.fortherapy.co.uk для взаимодействия с этим.
  6. Мой код (в 2 выше) взаимодействует с этим!

Шаг 4: Программное обеспечение для распознавания движения человека

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

  • Пустой квадрат
  • Черный кусок любого вида
  • Белый кусок любого вида.

Это касается всех случаев, в том числе рокировки и на проходе.

Робот проверяет правильность движения человека и сообщает ему, если это не так! Единственный не рассмотренный случай - это когда игрок-человек превращает пешку в не ферзя. Затем игрок должен сказать роботу, какая фигура продвинута.

Теперь мы можем рассматривать изображение с точки зрения квадратов на шахматной доске.

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

Пустые квадраты имеют гораздо меньшее изменение цвета, чем занятые квадраты. Мы вычисляем стандартное отклонение для каждого из трех цветов RGB для каждого квадрата по всем его пикселям (кроме тех, которые находятся рядом с границами квадрата). Максимальное стандартное отклонение для любого пустого квадрата намного меньше минимального стандартного отклонения для любого занятого квадрата, и это позволяет нам после следующего хода игрока определить, какие квадраты пусты.

Определив пороговое значение для пустых и занятых квадратов, теперь нам нужно определить цвет фигур для занятых квадратов:

На исходной доске мы вычисляем для каждого белого квадрата, для каждого из R, G, B среднее (среднее) значение его пикселей (кроме тех, которые находятся рядом с границами квадрата). Минимум этих средних значений для любого белого квадрата больше, чем максимум средних значений для любого черного квадрата, и поэтому мы можем определить цвет фигур для занятых квадратов. Как было сказано ранее, это все, что нам нужно сделать, чтобы определить, каким был ход игрока-человека.

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

Редактировать 17 октября 2018 года: теперь я покрасил коричневые части в матово-черный цвет, что заставляет алгоритм работать в более изменчивых условиях освещения.

Шаг 5: Свет, камера, действие

Огни

Вам понадобится ровный источник света, расположенный над доской. Я использую этот, очень дешевый, с amazon.co.uk - и, без сомнения, на amazon.com есть что-то подобное. С выключенным светом в комнате.

Обновление: теперь у меня есть два источника света, чтобы обеспечить более равномерный источник света.

Камера

Без сомнения, вы можете использовать специальный модуль камеры Raspberry Pi (с длинным кабелем), но я использую USB-камеру - «Logitech 960-001064 C525 HD Webcam - Black», которая работает с RPi. Вам нужно убедиться, что камера не двигается относительно доски, построив башню или имея место, где ее надежно закрепить. Камера должна быть достаточно высоко над платой, чтобы уменьшить геометрические искажения. У меня камера 58 см над доской.

Обновление: теперь я предпочитаю HP Webcam HD 2300, так как считаю ее более надежной.

Стол

Вам нужен прочный. Я купил эту. Вдобавок вы можете видеть, что у меня есть квадрат из МДФ с некоторыми вещами, чтобы робот не прыгал при движении тележки. Хорошая идея - держать камеру в одном и том же положении над доской!

Клавиатура

Для первой настройки RPi требуется USB-клавиатура. И я использую это для разработки кода. Единственное, для чего роботу нужна клавиатура, - это запускать программу и имитировать попадание в шахматные часы. Я получил один из них. Но на самом деле вам нужна только мышь или кнопка GPIO, подключенная к RPi.

Отображать

Я использую большой экран для разработки, но единственное, что нужно роботу, - это сообщать вам, что ваш ход недействителен, проверять и т. Д. У меня есть один из них, также доступный на amazon.com.

Но вместо дисплея робот будет говорить эти фразы! Я сделал это, преобразовав текст в речь с помощью кода, описанного здесь, и подключив небольшой динамик. (Я использую «мини-динамик для гамбургеров»).

Фразы, которые произносит робот:

  • Проверять!
  • Шах и мат
  • Неверный ход
  • Ты выиграл!
  • Безвыходное положение
  • Рисуем тройным повторением
  • Ничья по правилу 50 ходов

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

Вы можете услышать, как робот говорит в коротком видео с «другом дурака» выше (если вы включите звук достаточно высоко)!

Шаг 6: Как получить программное обеспечение

1. Вяленая рыба

Если вы запускаете Raspbian на своем RPi, вы можете использовать движок Stockfish 7 - это бесплатно. Просто беги:

sudo apt-get install stockfish

2. ChessBoard.py

Получите это здесь.

3. Код основан на

Поставляется с моим кодом.

4. Драйверы Python для BrickPi3:

Получите это здесь.

5. Мой код, который вызывает весь приведенный выше код и который заставляет робота делать ходы, и мой код видения.

Получите это от меня, разместив комментарий, и я отвечу.

Рекомендуемые: