Obsah:

Samoučící se chaotický robot: 3 kroky
Samoučící se chaotický robot: 3 kroky

Video: Samoučící se chaotický robot: 3 kroky

Video: Samoučící se chaotický robot: 3 kroky
Video: Webinář: Jak uspět v digitálním světě, 5. 4. 2022 2024, Červenec
Anonim
Samoučící se chaotický robot
Samoučící se chaotický robot

Zajímá vás strojové učení, AI och roboti? Nepotřebujete pracovat na nějaké luxusní univerzitě. Toto je popis mého chaotického robota. Je to velmi jednoduchý robot, který předvádí, jak používat samoučící se kód a jak jej implementovat do platformy arduino, v tomto případě kvůli Arduinu. Je to velmi levná platforma!

Kód vyvíjí robota tak, aby se robot naučil plazit. Získá zpětnou vazbu od myši, která je tažena za sebou. Kód je „genetický“. To znamená, že řada jednotlivců je testována a ti nejlepší jsou drženi a budou mít děti. To znamená, že se kód vyvíjí evolučním způsobem.

Krok 1: Hardware AKA robot

Hardware AKA robot
Hardware AKA robot
Hardware AKA robot
Hardware AKA robot
Hardware AKA robot
Hardware AKA robot

Potřebuješ:

- splatnost 1 Arduino

- 8 mikroslužeb

- 1 myš PS/2

- 1 řadič úrovní

- nějaká varianta senzorového štítu nebo podobná, štítový senzor mě unavil a svařil jsem si vlastní.

-dráty

-externí 5V napájecí zdroj pro serva

- nějaké kusy kovového šrotu, nějaké lepidlo a nějaká ocelová nit. A páska!

Položte tedy Due na zem. Nasaďte serva do kruhu. Spojte je kovovým šrotem, lepidlem a nití. Toto je část chaosu! Vzhledem k tomu, že je chaotický ve svém designu, je nepředvídatelné určit, jak se pohybovat, aby se mohl plazit. To je důvod, proč je samoučící se kód správnou cestou!

Tipy: použijte některé poměrně těžké kovové části, což robotovi usnadní pohyb.

Připojte serva k příslušnému, v mém případě jsou připojena k D39, 41, 43, 45, 47, 49, 51, 53.

Připojte serva k externímu 5V napájení. Za tímto účelem postavte nějaký druh štítu nebo použijte štítový štít nebo podobný. NEDÁVEJTE serva z kolíku 5V, nestačí, Due se spálí. K distribuci 5 V na všechna serva jsem použil malou prototypovou desku. Tato deska také obsahuje řadič úrovně pro hodiny a datové linky myši PS/2. Deska také napájí myš 5V. Nezapomeňte připojit uzemnění z externího napájení k uzemnění Arduino! schematics ukazuje, jak to všechno propojit.

Připojte PS/2 k napájení (5 V) a uzemnění. Připojte hodinovou a datovou linku PS/2 k Due prostřednictvím řadiče úrovně. (kvůli 3,3 V, PS/2 jde 5 V). Připojte hodiny na D12 a data na D13.

Podrobnosti o protokolu PS/2 jsou velmi dobrým návodem:

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

Knihovna PS/2 od jazzycamel, kterou jsem použil:

Krok 2: Kód

Kód
Kód

Nejprve mi řekněte: NEJSEM programátor. Některé části jsou velmi rozsáhlé, zkušený programátor by to samozřejmě mohl zkrátit a tak a tak.

Kód je samostudium a toto je jádro projektu. To je ta zábavná část! Znamená to, že se robot vyvíjí a je stále lepší a lepší, v tomto případě se zlepšuje při procházení. Úžasné na tom je, že se robot bude vyvíjet tak, jakkoli ho budete zpětně informovat. V tomto případě táhne myš PS/2 a čím déle je myš tažena, tím vyšší body získává.

To také znamená, že tento kód můžete použít k tomu, abyste svého robota naučili dělat něco jiného, pokud je měřen a přiváděn zpět do robota!

Jak vidíte na obrázcích, myš je tažena na tenké šňůře. Nejprve to bylo přetaženo do kabelu myši. Kabel je však jaksi tuhý, takže se robot místo tažení myší naučil zatřást myší. Třepáním vznikly vysoké body…

Kód používá 50 jednotlivců. Jádrem je pole 50 x 50 bajtů.

Jednotlivec je řada bajtů. Když se ke spuštění robota použije jedinec, je tento jedinec odeslán do funkce v kódu s názvem „tolken“.

Na začátku běhu je 8 proměnných m1, m2, m3, m4, m5, m6, m7 a m8 (jedna pro každé servo). V tomto robotu mají všichni konstantní počáteční hodnoty. V "tolken" jsou mś transformovány ve smyčce případ/swich v závislosti na hodnotách jednotlivce. například hodnota „1“provede následující: m1 = m1 + m2.

Pokud je jedinec: 1, 2, 3, 0, 0, 0, 0 ….., pak bude mś transformováno následujícím způsobem:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken je seznam 256 různých matematických operací, takže každá možná hodnota jednotlivého pole představuje matematickou změnu hodnot m.

Proces tolken se provádí čtyřikrát, s odečtem mezi jednotlivými koly a generuje čtyři různé kódy motoru pro každé „m“. Kódy motoru jsou hodnoty, které jsou později odeslány do serva.

V každém kroku vývoje soutěží 4 jednotlivci v procházení. Nejlepší dva jedinci budou rodiče dvou dětí, děti nahradí dva nejhorší jednotlivce. Když se narodí děti, spojí se „genetický kód“od jednoho rodiče za kus od druhého rodiče, což vytvoří dva nové jedince.

Pokud žádný jedinec nevykonává vůbec, proběhne mutace jednotlivců za účelem vytvoření nových.

Kód najdete na GitHub:

Krok 3: Jak to vycvičit?

Toto je ošemetná část. Abyste mohli pořádně trénovat, musíte to po každém běhu „resetovat“. To znamená, že ho musíte pokaždé umístit do stejné polohy.

Do kódu jsem vložil několik kontrolních bodů, abych se ujistil, že je robot ve své výchozí poloze.

Vyrovnejte tedy robota a nechte jej běžet.

Testuje 4 jednotlivce a poté vybere nejlepší 2 rodiče. Po nahrazení nejhoršího dítětem vytiskne několik údajů o výkonu jednotlivců. Vytiskne také pole 50x50. Je rozumné to zkopírovat do listu Excelu nebo podobně. (nebo napište nějaký potřebný kód při zpracování) Pokud se splatnost resetuje (k tomu dochází z různých důvodů), pak nepřijdete o svou tréninkovou práci. Pole můžete zkopírovat/vložit do kódu a pokračovat v tréninku, pokud jste odešli.

Můj robot se naučil plazit po několika hodinách. Stáhněte si video, abyste ho mohli procházet. Nešlo to tím směrem, jak jsem si myslel!

Vyzkoušejte také různé podlahy! Můj robot si vedl nejlépe na nylonovém koberci.

Možná vylepšení:

1. Bylo by lepší mít samostatné nano pro čtení myši PS/2 a odeslat zpracovanou vzdálenost přesunutou přes sériové číslo do nano. Čtení mé myši PS/2 se trochu otřáslo. To je důvod pro čtení/mazání částí kódu myší.

2. nějaký druh testovacího zařízení, které by táhlo robota zpět do výchozí polohy, by urychlilo výcvik.

3. Myslím, že je moudré trénovat to trochu pomaleji než já. Pomalejší trénink zajišťuje, že se trénuje „správným směrem“. Možným způsobem by mohl být průměrný výkon několika testovacích běhů.

Doporučuje: