Índice:

Robô Caótico de Autoaprendizagem: 3 Passos
Robô Caótico de Autoaprendizagem: 3 Passos

Vídeo: Robô Caótico de Autoaprendizagem: 3 Passos

Vídeo: Robô Caótico de Autoaprendizagem: 3 Passos
Vídeo: AULA 1 (15/03/21): Resultados Além da Curva em 3 Passos Simples 2024, Novembro
Anonim
Robô Caótico de Autoaprendizagem
Robô Caótico de Autoaprendizagem

Você está interessado em aprendizado de máquina, IA e robôs? Você não precisa trabalhar em alguma universidade chique. Esta é uma descrição do meu robô caótico. É um robô muito simples para demonstrar como usar o código de autoaprendizagem e como implementá-lo em uma plataforma Arduino, neste caso um Arduino devido. É uma plataforma muito barata!

O código evolui o robô para que ele aprenda a rastejar. Ele obtém feedback do mouse que é arrastado para trás. O código é "genético". Isso significa que vários indivíduos são testados e os melhores são mantidos e terão bebês. Isso significa que o código evolui de forma evolutiva.

Etapa 1: Hardware também conhecido como Robô

Hardware também conhecido como Robô
Hardware também conhecido como Robô
Hardware também conhecido como Robô
Hardware também conhecido como Robô
Hardware também conhecido como Robô
Hardware também conhecido como Robô

Você precisa:

- 1 Arduino devido

- 8 microsservos

- 1 mouse PS / 2

- 1 metamorfo

- alguma variante do escudo do sensor ou similar, cansei do escudo do sensor e soldei o meu.

-fios

- fonte de alimentação externa de 5 V para os servos

- alguns pedaços de sucata, alguma cola e alguns fios de aço. E fita!

Portanto, coloque o devido no chão. Coloque os servos em um anel ao redor dele. Junte-os com sucata, cola e linha. Esta é a parte do caos! Por ser caótico em seu design, é imprevisível determinar como se mover para fazê-lo rastejar. É por isso que o código de autoaprendizagem é o caminho a percorrer!

Dicas: use algumas peças de metal bastante pesadas, torna mais fácil para o robô se mover.

Conecte os servos ao devido, no meu caso eles estão conectados a D39, 41, 43, 45, 47, 49, 51, 53.

Conecte os servos à fonte de alimentação externa de 5V. Para isso, construa algum tipo de blindagem, ou use uma blindagem de sensor ou similar. NÃO alimente os servos a partir do pino 5V das dívidas, não é o suficiente, o vencimento queimará. Usei uma pequena placa de protótipo para distribuir o 5 V para todos os servos. Esta placa também contém o deslocador de nível para o relógio do mouse PS / 2 e linhas de dados. A placa também alimenta o mouse com 5V. Lembre-se de conectar o aterramento da alimentação externa ao Arduino devido ao aterramento! esquemas mostra como conectar tudo.

Conecte o PS / 2 à alimentação (5 V) e à terra. Conecte o relógio e a linha de dados do PS / 2 ao Due por meio de um deslocador de nível. (devido a 3,3 V, PS / 2 a 5 V). Conecte o relógio no D12 e os dados no D13.

Para obter detalhes sobre o protocolo PS / 2, este é um muito bom instrutível:

www.instructables.com/id/Optical-Mouse-Od…

A biblioteca PS / 2 de jazzycamel que usei:

Etapa 2: O Código

O código
O código

A princípio, deixe-me dizer: NÃO sou um programador. Algumas partes são muito extensas, um programador habilidoso poderia, é claro, encurtá-las e assim e assim.

O código é de autoaprendizagem e este é o núcleo do projeto. Esta é a parte divertida! Significa que o robô evolui e fica cada vez melhor, neste caso fica cada vez melhor rastejando. A coisa incrível sobre isso é que o robô irá evoluir para o que quer que você dê a ele. Neste caso, ele arrasta um mouse PS / 2 e quanto mais tempo o mouse é arrastado, mais pontos ele obtém.

Isso também significa que você pode usar esse código para treinar seu robô para fazer outra coisa, desde que seja medido e enviado de volta para o robô!

Como você pode ver nas imagens, o mouse é arrastado por um fio fino. No início, ele foi arrastado no cabo do mouse. No entanto, o cabo é meio rígido, então o robô aprendeu a sacudir o mouse, em vez de arrastá-lo. Agitar produziu pontos altos …

O código usa 50 indivíduos. O núcleo disso é uma matriz de 50x50 bytes.

Um indivíduo é uma matriz de bytes. Quando o indivíduo é usado para executar o robô, ele é enviado para uma função no código chamada "tolken".

No início de uma corrida, existem 8 variáveis m1, m2, m3, m4, m5, m6, m7 e m8 (uma para cada servo). Neste robô, todos eles têm valores iniciais constantes. Em "tolken" os mś são transformados em um loop case / swich dependendo dos valores do indivíduo. por exemplo, um valor de "1" executa o seguinte: m1 = m1 + m2.

Se um indivíduo é: 1, 2, 3, 0, 0, 0, 0 … então o mś será transformado da seguinte maneira:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken é uma lista de 256 operações matemáticas diferentes, então cada valor possível da matriz individs representa uma mudança matemática dos valores m.

O processo tolken é feito 4 vezes, com leitura a cada volta, gerando quatro códigos de motor diferentes para cada "m". Os motorcodes são os valores que posteriormente são enviados aos servos.

Em cada etapa da evolução, 4 indivíduos competem no rastreamento. Os dois melhores indivíduos serão os pais de dois bebês, os bebês substituirão os dois piores indivíduos. Quando os bebês são feitos, uma emenda do "código genético" de um dos pais é trocada por uma fatia do outro pai, o que cria dois novos indivíduos.

Se nenhum indivíduo atuar, a mutação dos indivíduos ocorrerá para gerar novos.

Você pode encontrar o código em GitHub:

Etapa 3: como treiná-lo?

Esta é a parte complicada. Para treinar corretamente, você precisa "reiniciá-lo" após cada corrida. Isso significa que você deve colocá-lo na mesma posição todas as vezes.

Eu coloquei alguns pontos de verificação dentro do código para garantir que o robô está em sua posição inicial.

Portanto, alinhe o robô e deixe-o funcionar.

Ele testa 4 indivíduos e, em seguida, escolhe os 2 melhores para serem os pais. Após substituir o pior pelos bebês, imprime alguns dados sobre o desempenho dos indivíduos. Ele também imprime a matriz 50x50. É aconselhável copiar isso em uma planilha do Excel ou similar. (ou escreva algum código necessário no processamento) Se o Devido for reiniciado (isso acontece por vários motivos), você não perderá seu trabalho de treinamento. Você pode copiar / colar o array no código e continuar treinando de onde saiu.

Meu robô aprendeu a engatinhar depois de algumas horas. Baixe o vídeo para vê-lo rastrear. Não foi na direção que eu pensei que iria!

Experimente também pisos diferentes! Meu robô teve melhor desempenho em um tapete de náilon.

Possíveis melhorias:

1. Seria melhor ter um nano separado para ler o mouse PS / 2 e enviar a distância processada movida por serial para o nano. A leitura do meu mouse PS / 2 é um pouco instável. Esta é a razão para o mouse ler / limpar partes do código.

2. algum tipo de equipamento de teste que arrastasse o robô de volta à sua posição inicial aceleraria o treinamento.

3. Acho melhor treiná-lo um pouco mais devagar do que eu. O treinamento mais lento garante que ele seja treinado "na direção certa". O desempenho médio de vários testes pode ser uma maneira possível.

Recomendado: