Índice:

Robô de xadrez feito com LEGO e Raspberry Pi: 6 etapas
Robô de xadrez feito com LEGO e Raspberry Pi: 6 etapas

Vídeo: Robô de xadrez feito com LEGO e Raspberry Pi: 6 etapas

Vídeo: Robô de xadrez feito com LEGO e Raspberry Pi: 6 etapas
Vídeo: DIY Robotic Chess Board 2024, Novembro
Anonim
Image
Image

Surpreenda seus amigos com este robô de xadrez!

Não é muito difícil de construir se você já fez robôs LEGO antes e se você tem pelo menos um conhecimento elementar de programação de computadores e Linux.

O robô faz seus próprios movimentos e usa o reconhecimento visual para determinar o movimento do jogador humano.

Uma das novidades neste robô é o código para reconhecimento de movimento. Este código de visão também pode ser usado para robôs de xadrez construídos de muitas outras maneiras (como meu ChessRobot usando o braço robótico Lynxmotion).

Nenhum tabuleiro de xadrez especial, interruptores de palheta ou o que quer que seja necessário (já que o movimento do humano é determinado pelo reconhecimento visual).

Meu código está disponível para uso pessoal.

Etapa 1: Requisitos

Luzes, câmera, ação!
Luzes, câmera, ação!

Todo o código é escrito em Python, que será executado, entre outras coisas, em um Raspberry Pi.

Raspberry Pi é um computador do tamanho de um cartão de crédito que pode ser conectado a uma tela e a um teclado. É um pequeno computador barato (cerca de US $ 40), capaz de ser usado em projetos eletrônicos e robótica, e para muitas das coisas que seu PC faz.

Meu robô usa Raspberry Pi e Lego. A interface de hardware entre o RPi e os motores e sensores Lego Mindstorms EV3 é fornecida pelo BrickPi3 da Dexter Industries.

A construção do Lego é baseada em "Charlie the Chess Robot", de Darrous Hadi, modificado por mim, incluindo mods para usar um RPi, em vez do processador Lego Mindstorms. São usados motores e sensores Lego Mindstorms EV3.

Você também precisará de uma mesa, câmera, iluminação, teclado, tela e dispositivo apontador (por exemplo, mouse).

E, claro, peças de xadrez e um tabuleiro.

Descrevo todas essas coisas com mais detalhes nas etapas subsequentes.

Etapa 2: a construção do hardware

Image
Image

Como indiquei anteriormente, o coração do código de visão funcionará com uma variedade de compilações.

Eu baseei meu robô em "Charlie the Chess Robot" (versão EV3) de Darrous Hadi, as informações nessa página dizem como obter as instruções de construção. A lista de peças está aqui.

Modifiquei o robô de algumas maneiras.

1. O agarrador. Isto não funcionou para mim. As engrenagens escorregaram, então acrescentei peças de Lego adicionais para evitar isso. E então, quando o guindaste era abaixado, ele costumava emperrar, então adicionei uma articulação Watt para evitar isso.

Acima está o agarrador em ação, mostrando a ligação modificada.

2. A compilação original usa o processador Lego Mindstorms EV3, mas eu uso um Raspberry Pi, que facilita o uso do Python.

3. Eu uso um Raspberry Pi 3 Model B.

4. Para fazer a interface do RPi com o Lego, eu uso o BrickPi3 da Dexter Industries. O BrickPi se conecta ao Raspberry Pi e, juntos, eles substituem o LEGO Mindstorms NXT ou EV3 Brick.

Quando você tem o arquivo do Lego Digital Designer, surge a questão de obter as peças do LEGO. Você pode conseguir tijolos direto na loja LEGO, e esta é a maneira mais barata de obtê-los. No entanto, eles não terão tudo de que você precisa e os tijolos podem levar algumas semanas ou mais para chegar.

Você também pode usar o Rebrickable: abra uma conta, carregue o arquivo LDD e a partir disso obtenha uma lista de vendedores.

Outra boa fonte é o Bricklink.

Etapa 3: o software que faz o robô se mover

Todo o código é escrito em Python 2.

  1. Dexter Industries fornece código para suportar a movimentação dos motores EV3, etc. Isso vem com o BrickPi3.
  2. Eu forneço o código para fazer os motores se moverem de forma a mover as peças de xadrez!
  3. O mecanismo de xadrez é Stockfish - que pode vencer qualquer humano! "Stockfish é um dos motores de xadrez mais fortes do mundo. Também é muito mais forte do que os melhores grandes mestres humanos do xadrez."
  4. O código para acionar o mecanismo de xadrez, validar se um lance é válido e assim por diante, é ChessBoard.py
  5. Eu uso alguns códigos de https://chess.fortherapy.co.uk para fazer a interface com isso.
  6. Meu código (no item 2 acima) faz interface com ele!

Etapa 4: o software para reconhecer o movimento humano

Depois que o jogador faz seu movimento, a câmera tira uma foto. O código recorta e gira para que o tabuleiro de xadrez se ajuste exatamente à imagem subsequente. Os quadrados do tabuleiro de xadrez precisam parecer quadrados !. Há distorção na imagem porque as bordas da placa estão mais distantes da câmera do que o centro da placa. No entanto, a câmera está longe o suficiente para que, após o recorte, essa distorção não seja significativa. Como o robô sabe onde estão todas as peças após o movimento do computador, tudo o que precisa ser feito depois que o humano faz um movimento é que o código seja capaz de dizer a diferença entre os três casos a seguir:

  • Um quadrado vazio
  • Uma peça preta de qualquer tipo
  • Uma peça branca de qualquer tipo.

Isso cobre todos os casos, incluindo roque e en passant.

O robô verifica se o movimento do humano está correto e os informa se não estiver! O único caso não coberto é quando o jogador humano promove um peão a uma não-rainha. O jogador deve então dizer ao robô qual é a peça promovida.

Podemos agora considerar a imagem em termos de quadrados do tabuleiro de xadrez.

Na configuração inicial do tabuleiro, sabemos onde estão todas as peças brancas e pretas e onde estão os quadrados vazios.

Os quadrados vazios têm muito menos variação de cor do que os quadrados ocupados. Calculamos o desvio padrão para cada uma das três cores RGB de cada quadrado em todos os seus pixels (exceto aqueles próximos às bordas do quadrado). O desvio padrão máximo para qualquer quadrado vazio é muito menor do que o desvio padrão mínimo para qualquer quadrado ocupado, e isso nos permite, após um movimento de jogador subsequente, determinar quais quadrados estão vazios.

Tendo determinado o valor limite para quadrados vazios versus quadrados ocupados, agora precisamos determinar a cor da peça para quadrados ocupados:

No quadro inicial, calculamos para cada quadrado branco, para cada um de R, G, B, o valor médio (médio) de seus pixels (exceto aqueles próximos às bordas do quadrado). O mínimo dessas médias para qualquer quadrado branco é maior do que o máximo das médias em qualquer quadrado preto e, portanto, podemos determinar a cor da peça para os quadrados ocupados. Conforme declarado anteriormente, isso é tudo que precisamos fazer para determinar qual foi o movimento do jogador humano.

Os algoritmos funcionam melhor se o tabuleiro de xadrez tiver uma cor muito diferente da cor das peças! No meu robô, as peças são esbranquiçadas e marrons, e o tabuleiro de xadrez é feito à mão em cartolina e é verde claro com pouca diferença entre as casas "pretas" e "brancas".

Editar 17 de outubro de 2018: Agora pintei as peças marrons de preto fosco, o que faz o algoritmo funcionar em condições de iluminação mais variáveis.

Etapa 5: Luzes, câmera, ação

Luzes

Você precisa de uma fonte de luz uniforme colocada sobre o quadro. Eu uso este, que é muito barato, da amazon.co.uk - e sem dúvida há algo semelhante no amazon.com. Com as luzes da sala apagadas.

Atualização: agora tenho duas luzes, para dar uma fonte de luz mais uniforme

Câmera

Sem dúvida você pode usar o módulo especial da câmera Raspberry Pi (com um cabo longo), mas eu uso uma câmera USB - "Logitech 960-001064 C525 HD Webcam - Preto" - que funciona com o RPi. Você precisa garantir que a câmera não se mova em relação à placa, construindo uma torre ou tendo um local para fixá-la com firmeza. A câmera precisa estar bem acima da placa, para reduzir a distorção geométrica. Tenho minha câmera 58 cm acima do quadro.

Atualização: agora prefiro a HP Webcam HD 2300, pois a considero mais confiável.

Mesa

Você precisa de um resistente. Eu comprei este. Além disso, você pode ver que tenho um quadrado de MDF, com alguns materiais para impedir o robô de pular quando o carrinho se move. É uma boa ideia manter a câmera na mesma posição sobre o quadro!

Teclado

O RPi precisa de um teclado USB para sua primeira configuração. E eu uso isso para desenvolver o código. A única coisa que o robô precisa de um teclado é para iniciar o programa e simular o acerto no relógio de xadrez. Eu tenho um desses. Mas realmente, você só precisa de um mouse ou botão GPIO conectado ao RPi

Exibição

Eu uso uma tela grande para o desenvolvimento, mas a única coisa que o robô precisa é informar que seu movimento é inválido, verifique, etc. Eu tenho um desses, também disponível em amazon.com.

Mas, em vez de exigir uma exibição, o robô falará essas frases! Fiz isso convertendo texto em fala usando o código descrito aqui e anexando um pequeno alto-falante. (Eu uso um "mini alto-falante Hamburger").

Frases que o robô diz:

  • Verificar!
  • Xeque-mate
  • Movimento inválido
  • Você ganhou!
  • Impasse
  • Desenhe por repetição tripla
  • Desenhe pela regra de 50 jogadas

A regra dos cinquenta lances no xadrez afirma que um jogador pode reivindicar um empate se nenhuma captura foi feita e nenhum peão foi movido nos últimos cinquenta lances (para este propósito, um "lance" consiste em um jogador completar sua vez seguido pelo oponente completando sua vez).

Você pode ouvir o robô falando no curto vídeo do "companheiro do tolo" acima (se você aumentar o som bem alto)!

Etapa 6: Como obter o software

1. Stockfish

Se você executar o Raspbian em seu RPi, poderá usar o motor Stockfish 7 - é grátis. Apenas corra:

sudo apt-get install stockfish

2. ChessBoard.py

Pegue isso aqui.

3. Código baseado em

Vem com meu código.

4. Drivers Python para BrickPi3:

Pegue isso aqui.

5. Meu código que invoca todo o código acima e que faz com que o robô faça os movimentos, e meu código de visão.

Pegue isso postando um comentário e eu responderei.

Recomendado: