Tabla de contenido:

Robot de ajedrez hecho con LEGO y Raspberry Pi: 6 pasos
Robot de ajedrez hecho con LEGO y Raspberry Pi: 6 pasos

Video: Robot de ajedrez hecho con LEGO y Raspberry Pi: 6 pasos

Video: Robot de ajedrez hecho con LEGO y Raspberry Pi: 6 pasos
Video: La primer humanoide robot del mundo 🤖😳😱 #robot #robotics #robots #robotandroide #androide #humanoide 2024, Mes de julio
Anonim
Image
Image

¡Sorprende a tus amigos con este robot de ajedrez!

No es demasiado difícil de construir si ha hecho robots LEGO antes y si tiene al menos un conocimiento elemental de programación de computadoras y Linux.

El robot hace sus propios movimientos y utiliza el reconocimiento visual para determinar el movimiento del jugador humano.

Una de las novedades de este robot es el código para el reconocimiento de movimientos. Este código de visión también se puede utilizar para robots de ajedrez construidos de muchas otras formas (como mi ChessRobot que usa el brazo robótico Lynxmotion).

No se requiere un tablero de ajedrez especial, interruptores de lengüeta o lo que sea (ya que el movimiento del ser humano está determinado por el reconocimiento visual).

Mi código está disponible para uso personal.

Paso 1: requisitos

¡Luces, CAMARA, ACCION!
¡Luces, CAMARA, ACCION!

Todo el código está escrito en Python, que se ejecutará, entre otras cosas, en una Raspberry Pi.

Raspberry Pi es una computadora del tamaño de una tarjeta de crédito que se puede conectar a una pantalla y un teclado. Es una pequeña computadora económica (alrededor de $ 40), capaz que se puede usar en proyectos de electrónica y robótica, y para muchas de las cosas que hace su PC de escritorio.

Mi robot usa una Raspberry Pi y Lego. La interfaz de hardware entre los motores y sensores RPi y Lego Mindstorms EV3 es proporcionada por BrickPi3 de Dexter Industries.

La construcción de Lego se basa en "Charlie the Chess Robot", de Darrous Hadi, modificado por mí, que incluye modificaciones para usar un RPi, en lugar del procesador Lego Mindstorms. Se utilizan motores y sensores Lego Mindstorms EV3.

También necesitará una mesa, una cámara, iluminación, un teclado, una pantalla y un dispositivo señalador (por ejemplo, un mouse).

Y por supuesto, piezas de ajedrez y un tablero.

Describo todas estas cosas con más detalle en los pasos siguientes.

Paso 2: la compilación del hardware

Image
Image

Como indiqué anteriormente, el corazón del código de visión funcionará con una variedad de compilaciones.

Basé mi robot en "Charlie the Chess Robot" (versión EV3) de Darrous Hadi, la información en esa página dice cómo obtener las instrucciones de construcción. La lista de piezas está aquí.

Modifiqué el robot de varias formas.

1. El capturador. Esto no funcionó para mí. Los engranajes se deslizaron, así que agregué piezas adicionales de Lego para evitar eso. Y luego, cuando se bajaba la grúa, a menudo se atascaba, así que agregué un enlace de Watt para evitar eso.

Arriba está el capturador en acción, mostrando el enlace modificado.

2. La versión original usa el procesador Lego Mindstorms EV3, pero yo uso una Raspberry Pi, lo que facilita el uso de Python.

3. Utilizo una Raspberry Pi 3 Model B.

4. Para conectar el RPi al Lego, utilizo BrickPi3 de Dexter Industries. El BrickPi se conecta al Raspberry Pi y juntos reemplazan al LEGO Mindstorms NXT o EV3 Brick.

Cuando tenga el archivo de Lego Digital Designer, entonces está la cuestión de obtener las piezas de LEGO. Puede obtener ladrillos directamente de la tienda LEGO, y esta es la forma más barata de obtenerlos. Sin embargo, no tendrán todo lo que necesita y los ladrillos pueden tardar un par de semanas o más en llegar.

También puede usar Rebrickable: abra una cuenta, cargue el archivo LDD y de ahí obtenga una lista de vendedores.

Otra buena fuente es Bricklink.

Paso 3: el software que hace que el robot se mueva

Todo el código está escrito en Python 2.

  1. Dexter Industries proporciona código para admitir el movimiento de los motores EV3, etc. Esto viene con BrickPi3.
  2. ¡Proporciono el código para hacer que los motores se muevan de tal manera que muevan las piezas de ajedrez!
  3. El motor de ajedrez es Stockfish, ¡que puede vencer a cualquier humano! "Stockfish es uno de los motores de ajedrez más fuertes del mundo. También es mucho más fuerte que los mejores grandes maestros de ajedrez humanos".
  4. El código para impulsar el motor de ajedrez, validar que un movimiento es válido, etc. es ChessBoard.py
  5. Utilizo un código de https://chess.fortherapy.co.uk para interactuar con eso.
  6. ¡Mi código (en 2 arriba) entonces interactúa con eso!

Paso 4: el software para reconocer el movimiento del ser humano

Una vez que el jugador ha realizado su movimiento, la cámara toma una foto. El código recorta y gira esto para que el tablero de ajedrez se ajuste exactamente a la imagen siguiente. ¡Los cuadrados del tablero de ajedrez deben verse cuadrados !. Hay distorsión en la imagen porque los bordes del tablero están más alejados de la cámara que el centro del tablero. Sin embargo, la cámara está lo suficientemente lejos para que, después del recorte, esta distorsión no sea significativa. Debido a que el robot sabe dónde están todas las piezas después de que se mueva la computadora, todo lo que debe hacerse después de que el humano hace un movimiento es que el código pueda diferenciar entre los siguientes tres casos:

  • Un cuadrado vacio
  • Una pieza negra de cualquier tipo
  • Una pieza blanca de cualquier tipo.

Esto cubre todos los casos, incluido el enroque y al paso.

El robot comprueba que el movimiento del humano sea correcto y les informa si no lo es. El único caso no cubierto es cuando el jugador humano asciende un peón a una no reina. El jugador tiene que decirle al robot cuál es la pieza promocionada.

Ahora podemos considerar la imagen en términos de cuadrados de tablero de ajedrez.

En la configuración inicial del tablero, sabemos dónde están todas las piezas blancas y negras y dónde están los cuadrados vacíos.

Los cuadrados vacíos tienen mucha menos variación de color que los cuadrados ocupados. Calculamos la desviación estándar para cada uno de los tres colores RGB para cada cuadrado en todos sus píxeles (distintos de los que están cerca de los bordes del cuadrado). La desviación estándar máxima para cualquier casilla vacía es mucho menor que la desviación estándar mínima para cualquier casilla ocupada, y esto nos permite, después de un movimiento posterior del jugador, determinar qué casillas están vacías.

Habiendo determinado el valor de umbral para los cuadrados vacíos frente a los ocupados, ahora necesitamos determinar el color de la pieza para los cuadrados ocupados:

En el tablero inicial calculamos para cada cuadrado blanco, para cada uno de R, G, B, el valor medio (promedio) de sus píxeles (distintos de los que están cerca de los bordes del cuadrado). El mínimo de estas medias para cualquier cuadrado blanco es mayor que el máximo de las medias a través de cualquier cuadrado negro, por lo que podemos determinar el color de la pieza para los cuadrados ocupados. Como se dijo anteriormente, esto es todo lo que necesitamos hacer para determinar cuál fue el movimiento del jugador humano.

Los algoritmos funcionan mejor si el tablero de ajedrez tiene un color que está muy lejos del color de las piezas. En mi robot, las piezas son blanquecinas y marrones, y el tablero de ajedrez está hecho a mano en cartulina, y es de color verde claro con poca diferencia entre los cuadrados "negros" y "blancos".

Edición 17 de octubre de 2018: ahora he pintado las piezas marrones en negro mate, lo que hace que el algoritmo funcione en condiciones de iluminación más variables.

Paso 5: ¡Luces, cámara, acción

Luces

Necesita una fuente de luz uniforme colocada sobre el tablero. Yo uso este, que es realmente barato, de amazon.co.uk, y sin duda hay algo similar en amazon.com. Con las luces de la habitación apagadas.

Actualización: ahora tengo dos luces, para dar una fuente de luz más uniforme

Cámara

Sin duda, puede usar el módulo de cámara especial Raspberry Pi (con un cable largo), pero yo uso una cámara USB - "Logitech 960-001064 C525 HD Webcam - Black" - que funciona con el RPi. Debe asegurarse de que la cámara no se mueva con respecto al tablero, construyendo una torre o teniendo un lugar para fijarla firmemente. La cámara debe estar bastante alta por encima del tablero para reducir la distorsión geométrica. Tengo mi cámara a 58 cm por encima del tablero.

Actualización: ahora prefiero la cámara web HP HD 2300, ya que la encuentro más confiable.

Mesa

Necesitas uno resistente. Compré este. Además de eso, puedes ver que tengo un cuadrado de MDF, con algunas cosas para evitar que el robot salte cuando el carro se mueve. ¡Es una buena idea mantener la cámara en la misma posición sobre el tablero!

Teclado

El RPi necesita un teclado USB para su primera configuración. Y lo uso para desarrollar el código. Lo único para lo que el robot necesita un teclado es para iniciar el programa y simular golpear el reloj de ajedrez. Tengo uno de estos. Pero realmente, solo necesita un mouse o un botón GPIO conectado al RPi

Monitor

Utilizo una pantalla grande para el desarrollo, pero lo único que necesita el robot es decirle que su movimiento no es válido, verificar, etc. Tengo uno de estos, también disponible en amazon.com.

¡Pero en lugar de requerir una pantalla, el robot pronunciará estas frases! He hecho esto convirtiendo texto a voz usando código como se describe aquí, y adjuntando un pequeño altavoz. (Yo uso un "mini altavoz Hamburger").

Frases que dice el robot:

  • ¡Cheque!
  • Mate
  • Movimiento inválido
  • ¡Ganaste!
  • Estancamiento
  • Dibujar por repetición triple
  • Regla del empate por 50 movimientos

La regla de los cincuenta movimientos en el ajedrez establece que un jugador puede reclamar tablas si no se ha realizado ninguna captura y no se ha movido ningún peón en los últimos cincuenta movimientos (para este propósito, un "movimiento" consiste en que un jugador complete su turno seguido de la oponente completando su turno).

Puedes escuchar al robot hablando en el breve video del "compañero del tonto" de arriba (si subes el sonido bastante alto).

Paso 6: Cómo obtener el software

1. Stockfish

Si ejecuta Raspbian en su RPi, puede usar el motor Stockfish 7, es gratis. Solo corre:

sudo apt-get install stockfish

2. ChessBoard.py

Consiga esto aquí.

3. Código basado en

Viene con mi código.

4. Controladores de Python para BrickPi3:

Consíguelas aquí.

5. Mi código que invoca todo el código anterior y que hace que el robot haga los movimientos, y mi código de visión.

Obtén esto de mí publicando un comentario y te responderé.

Recomendado: