Innehållsförteckning:

Hawking Bot: 5 steg
Hawking Bot: 5 steg

Video: Hawking Bot: 5 steg

Video: Hawking Bot: 5 steg
Video: Stephen Hawking's Famous Speech. 2024, November
Anonim
Image
Image
Bygg din Hawking Bot
Bygg din Hawking Bot

Hawking Bot är ett Lego MINDSTORMS EV3 -projekt inspirerat av avlidne Stephen Hawking. Stephen Hawking hade ett bra sinne för humor så jag är säker på att han skulle ha godkänt detta projekt. Hawking Bot kan navigera sig runt hinder och reagerar på rörelser och sedan yttrar en av Stephen Hawkings berömda soundbites och rör sig i riktning mot det rörliga föremålet. Den använder ultraljudssensorn som skannar sin miljö med en svepande huvudrörelse.

Steg 1: Bygg din Hawking Bot

Alla erforderliga bitar finns i grundläggande EV3 Lego MINDSTORMS -set med undantag för ultraljudssensorn (hans ögon) som måste köpas separat.

Steg 2:

Bild
Bild

Koden för Hawking Bot är helt skriven i python 3. En startbar bildfil för att köra python i en Debian Linux -miljö på Hawking Bot kan laddas ner från ev3dev -webbplatsen. Koden för att köra Hawking Bot kan laddas ner härifrån. All kod finns i en klassfil så att du kan använda befintliga metoder eller till och med ändra dem om du vill.

Se den här videon med detaljerade instruktioner om hur du konfigurerar Debian Linux och Python3 på din robot. Även om detta är specifikt för en Mac -installation, kommer det fortfarande att vara användbart att få en allmän förståelse för processen. Detta är pågående arbete. Ultraljudssensorn är ibland opålitlig och detta kräver smartare kod för att upptäcka 'outliers'. Jag skulle vilja se bidrag från andra för att göra koden effektivare och mindre benägen för fel.

Steg 3: Gör dina egna Hawking Soundbites

OK nu vill du ha några kända citat eller bara några enkla uttal från Prof Hawking. Det finns massor av videor där du kan höra honom prata och sedan finns det hans föreläsningar som är en skattkammare av visdom och användbara ljudbett.

Du behöver ett program som Audacity som fungerar på många plattformar för att välja och klippa ut dina favoritljudbitar.

Spara din soundbite som en wav -monofil som SH6, SH7, … SH11, SH12 och så vidare.

Nedan hittar du några exempel som jag har skapat enligt ovanstående metod.

Steg 4: Tips och tricks

Tips och tricks
Tips och tricks
Tips och tricks
Tips och tricks

Hawking Bot levereras med en självkontrollmodul för att säkerställa att alla kablar är anslutna och att batteriet är tillräckligt. Lösa, saknade eller till och med skadade anslutningar kan lätt uppstå. Så den här modulen är mycket användbar. Metoden "checkConnection" kontrollerar bara om det finns en elektrisk anslutning. Du måste fortfarande se till att motorerna är anslutna till rätt port.

Svephuvudets rörelse är avgörande för Hawking Bot att skanna dess terräng och hitta den längsta obehindrade vägen framåt. Kablarna behöver tillräckligt med utrymme för att rymma huvudrörelser; det är därför lämpligt att knyta ihop dem som visas på fotot.

Hawking Bot fungerar bäst med stora hinder och på en plan och slät yta. Mattor är mer utmanande för motorerna och du kan behöva justera inställningarna för att justera beteendet för olika ytor.

Hawking Bot är ingalunda perfekt och det här är en prototyp som kommer att dra nytta av ytterligare förbättringar. Koden är fullständigt kommenterad och det ska vara enkelt för dig att räkna ut vad de olika metoderna gör. Olika bitar har kommenterats med #, om du tar bort # framför "skriv ut" visar det pågående programmet dig de olika sensoravläsningarna och beräkningarna.

Steg 5: Föreslagna förbättringar, uppdateringar och framtida idéer

Nu när du har byggt din robot framgångsrikt vill du ta den till nästa nivå. Du kan förbättra MotionDetector -metoden. Just nu så ofta blir det fel läsning. Du kan se de faktiska avläsningarna genom att inte kommentera disA och disB (längst ner i metodblocket). Fel läsning sticker vanligtvis ut från andra avläsningar så att du kan skriva en algoritm för att stoppa roboten som svarar på en felaktig avläsning.

Kanske vill du ta full kontroll över roboten och bara fjärrstyra dess olika funktioner. Du kan göra detta via Bluetooth och skriva ett Android -program för att kommunicera med roboten. Ett mycket enklare tillvägagångssätt skulle dock vara att hitta en plats för den infraröda sensorn för att ta kontroll över Hawking Bot.

Vad sägs om att få roboten att lära sig om sin miljö? Detta kan uppnås med en k-närmaste granne eller möjligen ett neuralt nätverk. EV3 -tegelstenen har begränsad processorkraft även om den stöder Numpy. Ett alternativ skulle vara en BrickPi som gör att du kan köra ett AI -bibliotek som Tensorflow men avsikten med den här guiden var att använda Lego EV3 MINDSTORMS -kit utan att behöva köpa många andra dyra bitar än ultraljudssensorn.

Emellertid bör k-närmaste grannars inlärningssätt för inlärning fungera på EV3-tegelstenen och detta är den föreslagna algoritmen. Jag lämnar upp till dig att hitta en fungerande implementering eller upptäcka några problem:

Förstärkningsinlärning för Hawkings Bot

Tanken är att de 7 USS -avläsningarna kodas in i en vektor och de sista 10 huvudsvängningarna används för att skapa en sekventiell vektor med 70 poster. De första avläsningarna är ofullständiga så kommer att fyllas med nollor. Varje post innehåller avståndsvärdet från USS. Detta är tillståndsvektorn s. Systemet tillåter 1000 poster. Därefter kommer den äldsta posten att ersättas och åldersposterna för varje s-r-par reduceras med en.

Boten får inte komma närmare än 10 cm till ett föremål. Detta skapar en negativ belöning. För enkelheten; bra handlingar belönas med en 1 och dåliga med en 0. Effektivt skapar detta en sannolikhet för belöningen för varje kombination av handling-tillstånd. Vi kommer att använda rabatterade belöningar och epsilon giriga politik.

Detta skapar tre stora tillstånd-belönings (s-r) tabell för alla tre åtgärderna höger, rakt fram och vänster-det kan vara möjligt att ha snabba och långsamma hastigheter för varje åtgärd. Vi skulle då ha 6 åtgärder och 6 uppslagningstabeller.

Varje gång ett nytt tillstånd registreras jämförs det med tabellerna, euklidiskt avstånd (eller liknande mått) används för att hitta närmaste granne. Detta kommer inte att rankas utan snarare en tröskel t är inställd för att acceptera staten som väldigt lik, skriva över den befintliga staten och uppdatera för den högsta belöningen och utföra den associerade åtgärden a. Om det inte liknar (d> t) anger du ett nytt s-r-par för varje åtgärd a. Om det finns en koppling mellan åtgärder för för s-r (de har alla samma belöning) välj slumpmässigt men detta är inte vanligt och kan utelämnas.

t måste experimentellt bestämmas, om t är för liten ignoreras liknande tillstånd och varje tillstånd ses som unikt. För stor t betyder att även ganska olika stater klumpas ihop vilket kan påverka möjligheten att välja bra handlingar. Det kan vara möjligt att använda statistiska metoder för att bestämma den bästa t.

Tabellen ser ungefär ut så här: Inmatningsnr - Tillståndsvektor - belöning för handling 1 - belöning för handling 2 - belöning för handling 3.

Jag antar att den faktiska implementeringen kommer att vara knepig, men det borde vara en ansträngning. Lycka till!

Rekommenderad: