Sidvindare Design och konstruktion av en ormliknande robot Kandidatarbete SSYX02-16-14 ENELI ELBING, LUCAS JANSSON, NICLAS KLARSTRÖM, CAROLINE MATSSON, SOFIA WERNER Institutionen för Signaler och System CHALMERS TEKNISKA HÖGSKOLA Göteborg, Sverige 2016 Kandidatarbete 2016: SSYX02-16-14 Rapport för projektet Sidvindare Design och konstruktion av en ormliknande robot ENELI ELBING, LUCAS JANSSON, NICLAS KLARSTRÖM, CAROLINE MATSSON, SOFIA WERNER Institutionen för Signaler och System Avdelningen för Reglerteknik, Automation och Mekatronik Chalmers Tekniska Högskola Göteborg, Sverige 2016 Rapport för projektet Sidvindare Design och konstruktion av en ormliknande robot ENELI ELBING, LUCAS JANSSON, NICLAS KLARSTRÖM, CAROLINE MATSSON, SOFIA WERNER © ENELI ELBING, LUCAS JANSSON, NICLAS KLARSTRÖM, CAROLINE MATSSON, SOFIA WERNER 2016. Handledare: Jonas Fredriksson, Institutionen för Signaler och System Examinator: Nikolce Murgovski, Institutionen för Signaler och System Kandidatarbete 2016: SSYX02-16-14 Institutionen för Signaler och System Avdelningen för Reglerteknik, Automation och Mekatronik Chalmers Tekniska Högskola SE-412 96 Göteborg Telefon +46 31 772 1000 Omslag: Den slutgiltiga ormroboten. Skrivet i LATEX Göteborg, Sverige 2016 iv Rapport för projektet Sidvindare: Design och konstruktion av en ormliknande robot ENELI ELBING, LUCAS JANSSON, NICLAS KLARSTRÖM, CAROLINE MATSSON, SOFIA WERNER Institutionen för Signaler och System Chalmers Tekniska Högskola Sammanfattning Robotar har många användningsområden och har blivit allt vanligare i samhället både inom industrin och i servicesammanhang. De kan utformas på flera sätt och det är inte ovanligt att ta inspiration från naturen. Till exempel har ormar unika rörelsesätt som skulle kunna implementeras på en robot. Ormrobotar kan användas till bl.a. räddningsarbeten i rasmassor och undersökning av trånga utrymmen. Syftet med det här arbetet är att designa och konstruera en ormliknande robot som skulle kunna utvecklas för att användas för någon av dessa tillämpningar. För att göra användningsområdena så breda som möjligt är roboten konstruerad på ett sätt som möjliggör rörelse i tre dimensioner. I arbetet ingår det matematisk modellering, simulering, val av hårdvara, implementation och testning. Arbetet har resulterat i en robot som ser ormlik ut och kan använda flera av ormars rörelsesätt. Abstract Robots have become increasingly common in today’s society, in both industrial automation and commercial applications. The design of robots varies depending on their intended tasks and is often inspired by nature. Snakes, for instance, have a unique type of locomotion. Robots inspired by snakes, also known as snakebots, can be used for tasks where they have to enter small spaces, for example, searching through the rubble of collapsed buildings. The goal of this project is to design and construct a snakebot which could be further developed for aforementioned tasks. To make the potential usage of the snakebot as wide as possible it is constructed to be able to move in three dimensions. The project includes mathematical modelling, simulations, selection of components, implementation and testing. The result is a snakelike robot that can move with several different gaits. Nyckelord: robot, orm, ormrobot, sidvindare, mekatronik. v Förord Den här rapporten tillsammans med den tillhörande roboten är resultatet av ett kandidatarbete som gjordes under vårterminen 2016 på institutionen för Signaler och system på Chalmers Tekniska Högskola. Vi vill tacka vår handledare, Jonas Fredriksson, för hans hjälp och stöd under arbe- tets gång. Vi vill även tacka medlemmarna på E-sektionens Teletekniska Avdelning (ETA) för hjälp och råd med den elektronik som ingår i roboten. vii Innehåll 1 Inledning 1 1.1 Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Problembeskrivning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2.1 Krav och önskemål . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2.2 Avgränsningar . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.3 Rapportens upplägg . . . . . . . . . . . . . . . . . . . . . . . 3 2 Modellering och simulering 4 2.1 Matematisk modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1.1 Val av parametervärden . . . . . . . . . . . . . . . . . . . . . 5 2.2 Simulering av rörelsemönster . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.1 Simuleringsresultat . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Hårdvara 10 3.1 Val av komponenter och material . . . . . . . . . . . . . . . . . . . . 10 3.1.1 Motorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.1.2 Mikrokontrollerkort . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.3 Avläsning av omgivningen . . . . . . . . . . . . . . . . . . . . 11 3.1.4 Strömtillförsel . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1.5 Material för chassit . . . . . . . . . . . . . . . . . . . . . . . . 12 3.1.6 Friktionslager till undersidan . . . . . . . . . . . . . . . . . . . 12 3.2 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.1 Robotens leder . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.2 Huvudmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2.3 Svansmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4 Implementering 15 4.1 Elektronik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.1.1 Servomotorer . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.1.2 Mikrokontrollerkort . . . . . . . . . . . . . . . . . . . . . . . . 16 4.1.3 Specialtillverkat kretskort . . . . . . . . . . . . . . . . . . . . 16 4.1.4 Sensorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.1.5 Strömförsörjning . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2 Mjukvara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2.1 Styrning av motorer . . . . . . . . . . . . . . . . . . . . . . . 18 4.2.2 Sensorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 ix Innehåll 4.3 Testning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.3.1 Färdriktning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.3.2 Hastighet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.3.3 Kollisionsundvikning . . . . . . . . . . . . . . . . . . . . . . . 20 5 Resultat och analys 22 5.1 Sammansättning av elektroniken . . . . . . . . . . . . . . . . . . . . . 22 5.2 Tillverkning av chassi . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.3 Rörelsemönster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.4 Testresultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 6 Diskussion 25 6.1 Utvärdering av kraven . . . . . . . . . . . . . . . . . . . . . . . . . . 25 6.1.1 Utseende . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 6.1.2 Rörelse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 6.1.3 Önskemål . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.2 Förbättringsmöjligheter . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.2.1 Förflyttning framåt . . . . . . . . . . . . . . . . . . . . . . . . 27 6.2.2 Nytt kretskort . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.3 Utvecklingsmöjligheter . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.3.1 Fler rörelsemönster . . . . . . . . . . . . . . . . . . . . . . . . 28 6.3.2 Fjärrstyrning . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 6.3.3 Kamera för omgivningsavläsning . . . . . . . . . . . . . . . . 28 7 Slutsatser 29 A Bilaga I A.1 Blocksheman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I A.2 Budget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IV B Bilaga V B.1 Diplom från Robot-SM . . . . . . . . . . . . . . . . . . . . . . . . . . V C Bilaga VII C.1 Ritningar på delarna . . . . . . . . . . . . . . . . . . . . . . . . . . . VII x 1 Inledning Enligt Internationella standardiseringsorganisationen (ISO) definieras en robot på följande sätt: ”En manövrerbar, till viss del autonom mekanism som kan program- meras i två eller fler led, som rör sig inom sin miljö för att fullfölja avsedda uppgifter” [1]. Robotar kan delas upp i två kategorier beroende på tillämpning: industrirobo- tar och servicerobotar. Under senaste åren har försäljning av robotar ökat i båda kategorier [2] [3]. En robot kan antingen vara stationär eller mobil. Det finns många sätt för en mobil robot att ta sig fram på: till exempel med hjul, band eller ben. Från naturen finns mycket inspiration att hämta till exempel från ormar. Ormar har utvecklat många olika sätt att förflytta sig och kan variera dem efter terrängens karaktär [4]. De olika rörelsesätten kan tillhöra någon av följande fyra grundtyper [5]: 1. Rätlinjig rörelse. Ormen kryper fram på buken genom att använda sig av muskelsammandragningar i kroppens längdriktning. 2. Serpentinrörelse. Den vanligaste rörelseformen där ormen tar spjärn med krop- pen mot stenar, vegetation och till och med mot den släta marken. 3. Dragspelsrörelse. En rörelse som ormen använder i trånga utrymmen [4]. I viloläge hålls kroppen väl samlad i täta slingor. Genom att ta stöd med stjärten kan ormen skjuta fram huvudet och framkroppen, och när halsregionen fått nytt fäste dras hela kroppen framåt i slingor [5]. 4. Sidvindning. Den här rörelsen gör det möjligt för ormen att ta sig fram över lös sand och glatt underlag. Trycket i kroppens beröringspunkter med mar- ken gör att ormen inte glider tillbaka [4]. Rörelsemönstret är en kombination av serpentinrörelser, med bara delar av kroppen stödd mot underlaget, och kaströrelser, vilket ger till resultat en mycket snabb förflyttning i sidled. De olika rörelsesätten, med undantag för sidvindning, kan varieras på olika sätt och även kombineras hos en individ vid ett och samma tillfälle, allt beroende på rådande yttre omständigheter [5]. Ormar är smidiga djur och deras rörelsemönster är praktiska att applicera på en robot som ska användas i miljöer där utstickande delar skulle fastna och hindra roboten från att utföra sina uppgifter. Ett exempel på en sådan miljö är rasmassor och ormliknande robotar har redan använts i Urban Search and Rescue (USAR) [6]. De kan även användas i andra miljöer där människor eller större robotar har svårt att komma åt, till exempel för att undersöka rör eller hjälpa till att utföra kirurgi [7] [8]. 1 Inledning 1.1 Syfte Syftet med projektet är att skapa en ormliknande robot som senare ska vara möjlig att vidareutveckla. För att inte begränsa möjligheterna till vidareutveckling ska den ha en robust konstruktion och kunna röra sig i tre dimensioner. 1.2 Problembeskrivning Tidigare har två ormrobotar konstruerats på Chalmers som kandidatprojekt, se [9] och [10]. Båda robotarna använder serpentinrörelse och konstruktionen har därmed haft fokus på rörlighet i xy-planet. Det behövs högre friktion i sidled än i färd- riktningen för att driva fram kroppen med hjälp av detta rörelsemönster. För att åstadkomma detta har dessa robotar försetts med hjul. Användningsområden för en ormrobot kan breddas genom att ge den möjlighet att byta mellan olika rörelsesätt. Fokuset på att konstruera en robot som har rörlighet i tre dimensioner istället för två, eftersom det ger roboten möjlighet till fler rörel- sesätt. En hjullös konstruktion skulle göra att roboten kan ta sig fram på underlag där hjul inte lämpar sig, till exempel i svår terräng [11]. 1.2.1 Krav och önskemål Som nämns ovan kan ormar byta mellan olika rörelsesätt för att anpassa sig till terrängen. Den egenskapen skulle även vara praktisk hos en robotorm och göra den användbar i många olika miljöer. Ormarten Sidvindare (Crotalus cerastes) är excep- tionellt bra på att ta sig uppför sluttningar och över löst underlag eftersom deras levnadsmiljö består mestadels av sanddynor. Sidvindaren har även ett rörelsemöns- ter som kräver att en sådan robot har rörlighet och drivning i tre dimensioner. Därför användes denna orm som inspirationskälla till den kravspecifikation som följer: • Ha ett ormlikt utseende • Använda sidvindning för att ta sig framåt • Förflytta sig utan att använda hjul • Röra sig längs en rät bana med en hastighet på minst 10 cm/s och en avvikelse på max 10 cm per meter • Undvika kollisioner genom att stanna I mån av tid ska roboten uppfylla följande önskemål: • Ta sig upp för en lutning på 10° • Byta mellan olika rörelsemönster För att en robot skulle kunna klassas som ormlik ska den både se ut och röra sig som en orm. Dessa två kriterier beror till stor del på varandra och även kravet på hjullös konstruktion är satt för att åstadkomma likhet med ormar. Anledningen till att sidvindning prioriteras framför andra rörelsesätt i det här projektet är att det ställer krav på en mer avancerad, rörligare konstruktion med ökad potential för vi- dareutveckling. Kraven på hastighet och avvikelsemarginal sattes upp för att kunna 2 Inledning mäta hur väl konstruktionen och rörelsemönstret fungerar i praktiken. Kollisions- undvikning finns som en säkerhetsåtgärd som hindrar roboten från att skadas p.g.a. krockar med andra föremål. 1.2.2 Avgränsningar Vissa avgränsningar har gjorts för att anpassa projektet till den givna tidsramen. Förmågan att svänga har prioriterats bort och ersatts med att stanna vid hinder. Även om Sidvindare är anpassade för att kunna röra sig snabbt och effektivt uppför sluttningar har den egenskapen, tillsammans med att byta mellan olika rörelsesätt, ställts upp som önskemål som kan fyllas i mån av tid. Projektet har även en budget att förhålla sig till: 5000 SEK för inköp av komponenter och 2000 SEK för material i prototyplabbet. 1.2.3 Rapportens upplägg För att uppnå kraven delas projektet upp i olika faser: modellering, simulering, val av hårdvara, implementering och testning. I modelleringsfasen tas en matematisk modell fram för att beskriva rörelsemönstret. Därefter görs simuleringar som ska verifiera att modellen kan användas för att åstadkomma sidvindning samt ta re- da på hur starka motorerna behöver vara för att utföra det rörelsemönstret. Val av hårdvara innebär både att välja komponenter och designa robotens chassi. Un- der implementeringsfasen monteras roboten ihop varefter det utförs tester för att kontrollera att kraven uppfylls. 3 2 Modellering och simulering Innan konstruktionen av roboten påbörjas är det fördelaktigt att analysera det öns- kade rörelsemönstret för att skapa en matematisk modell. Denna modell kan sedan appliceras på roboten för att ge den det korrekta beteendet. När en matematisk modell av rörelsen är framtagen är nästa steg att simulera en modell av roboten med hjälp av den matematiska modellen. Simuleringarna visar om modellen över rörelsemönstret ger det önskade resultatet. Följaktligen kan modellen felsökas i si- muleringsmiljön utan att riskera att skada de fysiska komponenterna hos roboten. Det här kapitlet behandlar hur modellerna tagits fram, vad de innebär samt hur simuleringarna används vid tillverkningen av roboten. 2.1 Matematisk modell Ormars rörelse kan beskrivas som sinusvågor som propagerar genom kroppen, en för horisontell rörelse och en för eventuell vertikal rörelse. Denna rörelse kan implemen- teras på en robot genom att modellera rörelsen som sinusfunktioner, α(n, t) = βn + Ansin(θ), n = 2, 4...N βn + Ansin(θ + δ), n = 1, 3...N − 1 (2.1) där α(n, t) är vinkeln mellan två motorer vid en viss tid (se Figur 2.1), βn är en styrkonstant som bestämmer robotens riktning, An är amplituden på vågen, δ är fasförskjutningen mellan de två vågorna och N är ett jämnt tal som anger antalet motorer. Vid implementering av ekvation (2.1) på en ormrobot tilldelas alla motorer ett index n för att bestämma var på vågen de befinner sig. Den sista kroppsmodulen (svansen) får index 1 och den första modulen (huvudet) får index N . Vågens frekvens består av två delar och beskrivs med formeln θ = ( dθ dn n+ dθ dt t ) (2.2) där dθ dn är fasförskjutningen mellan lederna och bestämmer därmed formen på vågen, dθ dt är vinkelhastigheten hos vågen och t är tiden. Dessa två ekvationer är hämta- de från rapporten Parameterized and Scripted Gaits for Modular Snake Robots av Tesch et al. [12]. Parametrarna i ekvation (2.1) och (2.2) kan ändras för att skapa olika rörelsemönster. Om ett tvådimensionellt rörelsemönster ska modelleras sätts An och βn för udda index till noll så att endast en horisontell våg propagerar genom kroppen istället för två. 4 Modellering och simulering För att en tredimensionell rörelse ska bli möjlig krävs utöver två vågor även att de drivande axlarna sitter vinklade på ett sådant sätt att de två vågorna inte blir parallella med varandra. Figur 2.1: Roboten sedd uppifrån och från sidan när den utför sidvindning 2.1.1 Val av parametervärden Roboten som utvecklats i detta projekt ska använda sig av sidvindning. Detta är ett tredimensionellt rörelsemönster så därför måste båda delarna av ekvation (2.1) vara skilda från noll. För att sidvindningen ska fungera så bra som möjligt är det nödvändigt att få plats med minst två perioder av sinusvågor samtidigt på kroppen. Detta görs genom att sätta parametern dθ dn , som bestämmer formen på vågen till 2π N/2 . Ett större värde på N ger mjukare sinusvågor eftersom fler leder ger högre upplösning på vågorna. Mo- torerna ska vara placerade så att två vinkelräta vågor ska kunna propagera genom robotkroppen. Därmed är värdet på N en avvägning mellan vågornas upplösning och antalet motorer som begränsas av den givna budgeten. Genom att sätta N till 16 fås vågorna som visas i figur 2.1. I avsnitt 1.2.1 specificeras enbart att roboten ska kunna röra sig rät bana. Därför sätts styrkonstanten βn till noll för alla index då detta ger en rak rörelse. Amplitu- den sätts till π2 för att ge motorerna en svängradie på 180°. Detta värde kan behöva anpassas till den fysiska roboten eftersom chassit kan komma att begränsa hur långt motorerna kan vrida sig. Vid val av vinkelhastighet och motorernas hastighet är det viktigt att de överensstämmer med varandra för att vågen ska kunna propagera ge- nom kroppen utan att rörelsen blir hackig. Parametervärdena sammanfattas i tabell 2.1 och är, liksom ekvation (2.1) och (2.2), hämtade ur rapporten av Tesch et al.[12]. 5 Modellering och simulering Tabell 2.1: Parametervärden för att åstadkomma sidvindning Parameter Värde βn 0 An π 2 δ π 2 dθ dn 2π 8 dθ dt 3π 4 2.2 Simulering av rörelsemönster Det är viktigt att verifiera den matematiska modellen samt utreda hur parametrarna ska väljas och vilket vridmoment som krävs för att skapa det avsedda rörelsemönst- ret innan detta implementeras på en fysisk robot. Genom att skapa en modell över roboten i en simuleringsmiljö kan komplikationer undvikas på den fysiska roboten. Till exempel kan felaktiga parametervärden i ekvation (2.1) resultera i oväntade rö- relser och överbelasta motorerna. Dessutom skulle det vara tidskrävande att på den fysiska roboten undersöka vilka parametervärden som ger sidvindning. Simuleringen görs i Simulink genom att skapa blockscheman som representerar ro- boten, ett golv och den matematiska modellen, se figurer A.1-A.4 i bilaga A.1 [13]. Blocken som representerar lederna ges ett flertal egenskaper - vikt, längddimen- sioner och tröghet. Egenskaperna fås ur databladen för de tänkta komponenterna alternativt estimeras de om de inte finns givna. I Simulink behöver även golvet modelleras från grunden vilket görs med fjädrar och dämpare som verkar i varje leds tyngdpunkt. Således definieras ett y-värde som tyngdpunkten inte kan sjunka under. Blockschemat för golvet är baserat på ett inlägg i J. Aparicios blogg Em- bedded Programmer [14]. Genom att modellera golvet på det sättet fås dock ingen friktion mellan golvet och lederna. Därmed ger simuleringen inget svar på huruvida den fysiska roboten kan förflytta sig. Till skillnad från t. ex. serpentinrörelse är det statisk friktion som spelar störst roll för att åstadkomma sidvindning. Därför räcker det med att rörelsemönstret liknar sidvindning tillräckligt mycket för att ormen ska kunna röra på sig. Motorerna representeras med hjälp av aktuatorer som vrider lederna. Dessa får insignaler från blocken som återspeglar ekvation (2.1). En stor del av nyttan med simuleringen är att ta reda på hur stort vridmoment som krävs för att utföra den önskade rörelsen, och välja motorer därefter. För att Simulink ska kunna ge en god approximation av vridmomentet är lederna modellerade som rätblock som roterar i 6 Modellering och simulering x-, y- eller z-led. Tröghetstensorn sätts samma med ekvation Ixx = 1 12m(h2 + d2) Iyy = 1 12m(4w2 + d2) Izz = 1 12m(4w2 + h2) (2.3) där m är objektets massa, h är dess höjd, w är dess bredd och d är dess djup. Värdena sätts sedan in i en matris på följande vis: Ixx 0 0 0 Iyy 0 0 0 Izz  (2.4) Denna matris beskriver tröghetstensorn. Variationer i vridmomentet över tid kan studeras i Simulink. 2.2.1 Simuleringsresultat Simuleringen bekräftade att det önskade rörelsemönstret kunde skapas med ekva- tion (2.1) och de parametervärden som användes i rapporten av Tesch et al. [12]. Den kunde även användas för att få fram ett maximalvärde på vridmomentet och därmed avgöra valet av motorer samt ledernas högst tillåtna vikt. Vid simulering av vridmomentet utfördes mätningar i alla leder i ormkroppen. Le- dernas mått och vikt är justerbara och kan enkelt anpassas till olika motorer. Som utgångspunkt valdes den minsta modellen ur tillverkaren Robotis sortiment av smar- ta servomotorer - Dynamixel XL-320. Figurer 2.2 och 2.3 visar hur vridmomentet varierar i en horisontell och en vertikal led i mitten av ormkroppen under de första 20 sekunderna. 7 Modellering och simulering Figur 2.2: Vridmoment vid sjunde leden (vertikal led) Figur 2.3: Vridmoment vid åttonde leden (horisontell led) 8 Modellering och simulering Vridmomentet stiger till ca. 0.032 Nm vid den sjunde leden, vilket är det högsta vridmomentet som uppstår i någon av lederna under sidvindningsrörelsen. Dessa resultat gäller för endast motorer utan fästen eller chassi. Genom att simulera för olika massor kunde även en maximal tillåten vikt för lederna tas fram. Figur 2.4 visar hur det maximala vridmomentet ökar i takt med massan när lederna har en längd på 5 cm. Figur 2.4: Maximalt vridmoment vid olika massor på lederna (led 7, vertikal) 9 3 Hårdvara Det här kapitlet tar upp det som berör robotens delar - val av komponenter och material samt design. En översikt över komponentvalet kommer att ges tillsammans med motivering och diskussion av alternativa lösningar. Här finns även information om vilka material som har använts och varför. Kapitlet innefattar utöver detta designprocessen och förklarar anledningarna till att roboten är utformad som den är. 3.1 Val av komponenter och material Baserat på simuleringsresultat och funktionalitet valdes komponenter och material till roboten. Även kostnaden var en faktor - som nämndes i avsnitt 1.2.2 har projektet en budget på 5000 SEK för inköp av delar och 2000 SEK för material och tillverkning. För att ge en överblick över möjliga alternativ har de ställts upp i en morfologisk matris, se tabell 3.1. De alternativen som slutligen blev valda är markerade i grönt. Tabell 3.1: Morfologisk matris Problem Dellösningar Motorer DC-motorer Servomotorer Stegmotorer Mikrokontrollerkort Arduino Uno Egentillverkat Arduino Micro Teensy Avläsning av omgivningen Kamera Optiska sensorer Mekaniska sensorer Strömtillförsel Batteri Nätaggregat AC-adapter Material för chassit Termoplast Metall Trä Kolfiberlaminat Material för buken Plast Gummi Läder Tyg 3.1.1 Motorer Till den här typen av robot behövs en motor som går att ställa till en bestämd vinkel vilket är möjligt med en servomotor. En servomotor är i praktiken en DC- motor med inbyggd återkoppling och denna återkoppling är nödvändig för att kunna ställa motorerna i specifika vinklar. Det hade varit möjligt att köpa in DC-motorer och bygga om dem till servomotorer genom att utrusta dessa med positionssensorer. Detta alternativ valdes bort då det ansågs vara för tidskrävande. Simuleringarna visar vilka krav som ställs på motorns vridmoment, se avsnitt 2.2.1. Enligt databladet för Dynamixel XL-320 kan motorerna utöva ett maximalt vrid- moment på 0.39 Nm och röra sig stabilt upp till ett vridmoment på 0.078 Nm [15]. 10 Hårdvara Detta ligger med god marginal över det största vridmoment som skulle krävas enligt simuleringen. Därför föll valet på Dynamixel XL-320. 3.1.2 Mikrokontrollerkort För att generera en styrsignal till sensorerna behövs det en mikrokontroller. Ett egentillverkat kretskort hade gjort det möjligt att utforma mikrokontrollerkortet efter robotens behov, men detta alternativ valdes bort eftersom ett färdigt kort underlättar utvecklingsarbetet. Ett mikrokontrollerkort från Arduino blev valt då dessa är både lättillgängliga och väldokumenterade och modellen Micro valdes p.g.a. dess storlek. 3.1.3 Avläsning av omgivningen För att skapa en bild av omgivningen behöver roboten någon form av sensor. Då ormen primärt kommer röra sig i sidled måste den kunna läsa av hela sidan. För att inte begränsa rörelsen åt ett håll måste avläsningen kunna ske åt båda håll, därmed ansågs en lösning med kamera göra huvudet alldeles för stort och tungt. De kameror som hade fungerat både vikt- och storleksmässigt rymdes ej i budgeten. Till skillnad från optiska sensorer skulle mekaniska givare ge mindre framförhållning inför hinder vilket begränsar utvecklingsmöjligheter hos roboten och valdes därför bort. På så sätt elimineras alla alternativ förutom optiska sensorer. De optiska sensorer som valdes var IR-sensorer av modellen Sharp GP2Y0A21YK0F. Sensorerna kan mäta avstånd på 10 - 80 cm vilket bedömdes vara tillräckligt för att göra det möjligt att möta kravet på kollisionsundvikning. 3.1.4 Strömtillförsel För att kunna avgöra om roboten kan göras batteridriven var det nödvändigt att veta robotens strömbehov. Från början användes ett nätaggregat med strömsladd. På det sättet kunde roboten matas med en konstant spänning medan strömförbruk- ningen kunde mätas. AC-adapter valdes bort på grund av den extrakostnad som den skulle innebära. Det finns tre faktorer som påverkar val av batteri: dess storlek, spänning och kapa- citet. Roboten måste kunna bära med sig batteriet så därför får det inte vara för stort då det skulle göra svansmodulen för stor och tung. Batteriets spänning ska matcha motorernas driftspänning för att undvika behov av spänningsdelare eller spänningsförstärkare. Laddningskapaciteten avgör hur länge roboten kan användas innan batteriet laddas ur. Med alla 16 motorer inkopplade låg strömförbrukningen på ca 1 A i det generella fallet och på 2 A som max. Därmed bestämdes det att roboten skulle utrustas med ett LiPo-batteri med en laddningskapacitet på 850 mAh. Det valda batteriet räcker för att driva roboten i 30-45 minuter. På grund av detta har strömkablarna kopplats på ett sätt som gör det enkelt att byta ut batteriet mot en strömsladd. Till följd går det att använda roboten under längre perioder genom att driva den med nätaggregat medan batteriet laddas. 11 Hårdvara 3.1.5 Material för chassit Simuleringen visade att motor och motorfäste inte får väga mer än ca 27 g samman- lagt, se figur 2.4. En Dynamixel XL-320 väger 16.7 g så därför skulle motorfästen av metall eller trä bli för tungt alternativt för bräckligt. De material som uppfyller viktkravet är följaktligen termoplast och kolfiber. Då tillverkningen av chassit i ter- moplast kan göras med en 3D-skrivare skulle detta alternativet vara betydligt mer tidseffektivt än att tillverka delarna av kolfiber. För att hålla sig inom projektets tidsram valdes därmed termoplast som material för chassit. 3.1.6 Friktionslager till undersidan En relativt hög friktion mot underlaget är nödvändig för att åstadkomma en rörelse framåt. Då termoplast har för låg friktion mot flera underlag används ett extra lager på robotens undersida för att öka friktionen. Jämfört med de andra alternativen har gummi och läder störst friktion mot de flesta underlag som roboten kan komma att användas på. På grund av tillgänglighet valdes det att applicera gummiduk på undersidan av roboten. 3.2 Design De delar som designats är motorfästen, huvudmodulen och svansmodulen, samtliga är designade med CAD. Från början skapades det två olika designer för motor- fästen, se bilaga C. Den slutgiltiga designen valdes på grund av dess robusta och symmetriska struktur. Vid design av huvudmodulen behöver hänsyn tas till sen- sorerna. Huvudet ska även rymma mikrokontrollern och kretskortet utan att bli överdimensionerat. Svansens uppgift är att vara en hållare för batteriet. 3.2.1 Robotens leder En ledmodul består av en motor och ett fäste. Fästet till modulerna ska göra det möjligt för roboten att röra sig i tre dimensioner. Varje ledmodul har en frihets- grad, ormen byggs upp av flera moduler där den drivande axeln vrids 90° mellan modulerna. För att ormen fortfarande skall kunna röra sig i tre dimensioner placeras modulerna så att en horisontalt vridbar led alltid följs av en vertikalt vridbar led. 12 Hårdvara Figur 3.1: Motorfäste 3.2.2 Huvudmodul Genom att ta inspiration från en riktig orm ges roboten ett mer naturligt utseende. Formen på huvudmodulen baserades på sidvindarens utseende vilket gör roboten mer ormlik. Huvudmodulens primära uppgifter är att rymma kretskort och sladdar, och vara fäste för sensorer. Samtidigt ska den ha en sådan form att robotens utseende blir ormlikt utan att huvudet blir överdimensionerat. En för lång modul skulle ge en lång hävarm och resultera i att det behövs större vridmoment än vad motorerna har för att hålla huvudet uppe. Om modulen görs för bred skulle den begränsa rörelsen i sidled. Figur 3.2: Huvudmodul 13 Hårdvara 3.2.3 Svansmodul Svansmodulen ska ha plats för ett batteri och en strömbrytare utan att bli mycket bredare än motorfästena. För att svansmodulen skall bidra till det ormliknande utseendet är änden avsmalnande. Figur 3.3: Svansmodul 14 4 Implementering Det här kapitlet handlar om genomförandet - hur delarna sätts ihop till en färdig ormrobot. Kapitlet är indelat i tre avsnitt och tar upp implementering av elektronik och mjukvara, samt hur den färdiga produkten ska testas. 4.1 Elektronik Vid konstruktion av roboten används en mängd olika elektriska komponenter. Vissa av deras egenskaper skiljer sig, vilket innebär att lösningar behöver tas fram för att de ska kunna samverka. Nedan följer en lista över komponenterna som tas upp i det här avsnittet, samt ett kopplingsschema som visar hur de är sammankopplade, se figur 4.1. • Servomotorer: 16 st Dynamixel XL-320 • Mikrokontrollerkort: Arduino Micro • Specialtillverkat kretskort • Sensorer: 2 st Sharp GP2Y0A21YK0F • Strömförsörjning: 7.4V LiPo 850mAh batteri, nätaggregat Figur 4.1: Kopplingsschema över elektroniken i roboten. 15 Implementering 4.1.1 Servomotorer Roboten består av 16 parallellkopplade servomotorer i en s.k. daisy-chain där varje motor adresseras med ett unikt index. Möjligheten att koppla motorerna i en daisy- chain minskar antalet sladdar som måste dras genom roboten. Genom att koppla på detta sätt krävs endast en buss med ström, data och jord. Samma buss kan då förse hela roboten med ström och användas för att skicka data till motorerna samt ge dem en gemensam jordpunkt med resten av komponenterna. Roboten spänningsmatas från svansmodulen. 4.1.2 Mikrokontrollerkort En Arduino Micro har alla funktioner som roboten behöver hos ett mikrokontrol- lerkort. Utöver en mikrokontroller behövs det möjlighet att koppla in två sensorer på stift med A/D-omvandlare och stift för seriell kommunikation. Det finns även ett stift för att mata andra komponenter med 5V vilket används för spänningsmatning av tri-state buffer och sensorer. 4.1.3 Specialtillverkat kretskort Arduino-kortet och Dynamixel-motorerna använder olika kommunikationsprotokoll: full duplex respektive halv duplex. För att kunna skicka styrsignaler från Arduinon till motorerna behöver Arduinon kommunicera med halv duplex kommunikation. Detta görs med hjälp av en tri-state buffer. Tri-state buffern är satt på ett special- tillverkat kretskort som är uppbyggt med kopplingar och komponenter enligt krets- schemat i figur 4.2. Detta kretskort fördelar strömförsörjning mellan komponenterna, så att alla komponenter får rätt spänning, och skapar en gemensam jordpunkt. Även sensorerna är kopplade till detta kretskort för spänningsmatning och vidarekoppling av mätdatan till Arduinon. Genom att sätta TX-stiftet som sändare, RX-stiftet som mottagare och ett digi- talt stift som kontrollstift (DATA_CTRL) och koppla dessa till tri-state buffern går det att styra åt vilket håll datan flödar mellan Arduinon och motorerna. Genom att skifta DATA_CTRL mellan HIGH och LOW kan motorerna skicka information till Arduinon på samma sätt som Arduinon skickar styrsignaler till motorerna. Om DATA_CTRL är satt till HIGH flödar datan från Arduinon till motorerna, om den är satt till LOW kan Arduinon ta in information från motorerna. Tri-state buffern används på detta sätt för att göra tvåvägskommunikation möjlig. 4.1.4 Sensorer Roboten har två IR-sensorer på huvudmodulen längst fram. Sensorerna skickar ut en analog signal som sedan måste omvandlas till en digital signal med hjälp av A/D- omvandlare på Arduino-kortet. Denna signal representerar det aktuella avståndet i form av en spänning. Spänningen vid ett visst avstånd kan dock variera mellan mätningar, vilket är något som behöver tas hänsyn till vid programmeringen [16]. 16 Implementering Figur 4.2: Kretsschema för det anpassade kretskortet. 4.1.5 Strömförsörjning Två alternativ för strömförsörjning var aktuella: ett externt nätaggregat och ett bat- teri som roboten kan bära med sig. Eftersom motorerna är parallellkopplade så ökar systemets strömbehov för varje motor som kopplas in, medan spänningen som krävs är konstant. Hur mycket ström som krävs beror på vad ormen gör - till exempel kräver det mer ström att ligga still med huvudet höjt än att utföra sidvindning. Olika komponenter i roboten kräver olika spänning: • Dynamixel XL320: 6-8.4 V [15] • Arduino: 6-12 V [17] • Sensorer: 4.5-5.5 V [16] • Tri-state buffer: 2-6 V [18] Roboten spänningsmatas med 7.4 V vilket är den rekommenderade spänningen för motorerna. Strömkällan kopplas till motorn i svansmodulen och resten av motorerna förses med ström via bussen. När denna spänning når fram till kretskortet i huvud- modulen skickas den vidare till Arduinon där den omvandlas till 5 V. På det sättet kan både sensorerna och tri-state buffern spänningsmatas med deras rekommende- rade 5 V. 4.2 Mjukvara Mjukvarans främsta uppgift är att skapa styrsignaler till motorerna. Den ska även hantera kommunikationen mellan dessa och Arduinon samt behandla information från sensorerna. Programkoden är skriven i Arduinos programspråk som är en upp- sättning av C och C++ funktioner. Två bibliotek från GitHub har använts för att underlätta programmeringen av roboten [19] [20]. Dessa bibliotek har antingen an- vänts så som de är skrivna eller modifierats för att passa roboten. 17 Implementering 4.2.1 Styrning av motorer Roboten drivs framåt genom att motorerna vrider sig enligt ett förbestämt mönster som liknar sidvindning. Detta görs genom att få motorerna att vrida sig mellan två lägen så att två sinusformade vågor propagerar genom roboten: en vertikal och en horisontell. Vinkeln som en viss motor ska vrida sig till vid en specifik tid beskrivs med ekvation 2.1. Denna vinkel paketeras sedan i ett datapaket tillsammans med motorns index och skickas ut från Arduinon. Genom att anpassa hastigheten som motorerna vrider sig med och tiden mellan att två signaler skickas till en motor kan rörelsen göras jämn. Motorerna är kopplade till en databuss med tre kablar: data, jord, och ström. Jord- och strömkablar är kopplade så att samma spänning ligger över varje motor medan datakabeln skapar en seriekoppling mellan motorerna. Det är möjligt att skicka data till motorerna över en seriekoppling eftersom de kan ges unika index. På så sätt kan paketen adresseras till rätt motor. Koden som används för att paketera data och skicka paket till motorerna har tagits från hackerspace-adelaides valv på GitHub och används i sitt originalutförande utan modifikationer [19]. 4.2.2 Sensorer För att kompensera för inexaktheten hos avståndsmätningen som nämns i avsnitt 4.1.4 och få ett så korrekt resultat som möjligt görs det flera mätningar av samma avstånd, varefter de filtreras genom ett FIR filter. Ett sådant filter beskrivs av ekvationen y[n] = 1 N [x[n] + x[n− 1] + ...+ x[n− [N − 1]]] (4.1) där N är filtrets ordning, x[n] är ett diskret mätvärde (insignalen) och y[n] är det fil- trerade värdet (utsignalen). När detta medelvärde räknas ut tas inte alla mätvärden med. Ett mätvärde förkastas ifall det avviker mer än 5% från föregående mätvär- de för att förbättra exaktheten hos resultatet ytterligare. Denna extra filtrering av mätvärdena gör filtret långsammare, men eftersom roboten inte kommer att röra sig med hög hastighet bör detta inte orsaka några problem. Som grund för mjukvaran för sensorerna användes en modifierad version av kodbiblioteket från jgangemis valv på GitHub [20]. Utsignalen från FIR filtret används för att bedöma hur långt bort ett potentiellt hinder är. Om mätningen visar att det finns ett hinder ca 15 cm framför roboten ska den stanna för att undvika kollision. Annars ska den fortsätta att förflytta sig i samma riktning, se figur 4.3. 18 Implementering Figur 4.3: Flödesschema för kollisionsundvikning 4.3 Testning För att utvärdera den kravprofil som satts upp i avsnitt 1.2.1 utförs en serie tester. De krav som är intressanta att testa är färdriktning, hastighet och kollisionsundvikning. Anledningen att just dessa egenskaper testas är att de kan mätas på ett objektivt sätt. Övriga krav är mer subjektiva och måste därmed utvärderas på annat sätt. 4.3.1 Färdriktning Roboten får enligt kraven i avsnitt 1.2.1 avvika maximalt 10 cm per meter från sin ursprungliga färdriktning. För att testa detta konstrueras en bana enligt figur 4.4. Testet utförs genom att markera mittpunkten på ormen (X i figuren) och placera den på en 1 m lång sträcka med en yttre bana som markerar en avvikelse på 10%. Ett test godkänns om ormroboten håller sig inom det markerade området fram till mållinjen. Figur 4.4 visar en orm strax efter start, ett test som bedöms som godkänt och ett test som misslyckas. Den gröna ormen är väl inom det markerade området medan testet för den röda ormen kan bedömmas som ett misslyckat test. 19 Implementering Figur 4.4: Testning av färdriktning 4.3.2 Hastighet Enligt hastighetskravet ska roboten kunna röra sig 10 cm/s. Detta testas genom att mäta tiden det tar ormen att förflytta sig en given sträcka. För att minimera påverkan av den mänskliga faktorn utförs testet flera gånger. Ett medelvärde av mätresultaten räknas ut och jämförs med hastighetskravet. 4.3.3 Kollisionsundvikning Det sista kravet som utvärderas genom testning är förmågan att stanna för att und- vika kollision. För att verifiera detta utförs tester i en bana med olika typer av hinder, se figur 4.5. Det första deltestet som utförs är att låta roboten färdas mot en vägg för att undersöka huruvida den detekterar hindret eller ej. Om deltestet godkänns fortsätts testet genom att placera ut hinder av olika storlek i olika posi- tioner. Detta för att avgöra om roboten kan upptäcka hinder oavsett var på kroppen kollisionen skulle ske. 20 Implementering Figur 4.5: Testning av kollisionsundvikning 21 5 Resultat och analys Resultatet av projektet är en färdigbyggd ormliknande robot. I detta kapitel presen- teras delresultaten som producerades under konstruktionen av hårdvara och mjuk- vara samt testerna som beskrevs i föregående kapitlet. Resultaten redovisas tillsam- mans med en kortfattad analys av deras framkomst och innebörd för produkten som helhet. Figur 5.1: Den färdiga ormroboten 5.1 Sammansättning av elektroniken Som nämndes tidigare i delavsnitt 4.1.3 så använder de valda motorerna och Arduino olika kommunikationsprotokoll och extra hårdvara behövde läggas till för att kringå det. Lösningen med en tri-state buffer fungerade och resulterade i att tvåvägskom- munikation blev möjligt. Detta innebär att det går att både skicka styrsignaler till 22 Resultat och analys motorerna och få återkoppling från dem. Motorerna betedde sig instabilt vid sidvindning, speciellt i den främre delen av kroppen. Det hände att motorerna närmast huvudet stannade helt på grund av för hög belastning, medan motorerna vid svansen fortfarande fungerade. Detta kan bero på spänningsfall över motorerna. Teoretiskt sett är de parallellkopplade och spän- ningen över varje motor borde vara lika stor. I praktiken minskar spänningen för varje sladd i kopplingen på grund av deras inre resistans, se figur 5.2. Figur 5.2: Spänningsfall över motorerna. U0 > U1 > ... > U16 Roboten kan drivas både med batteri och ett externt nätaggregat via strömsladd. Strömsladden behövde göras lång för att den inte skulle begränsa robotens rörelser. För att kompensera för spänningsfallet över strömsladden behövde matningsspän- ningen ökas till något över den rekommenderade. Den totala strömförbrukningen mättes till ca 1 A och roboten ansågs därför kunna göras batteridriven. Den relativt låga strömförbrukningen beror på att de flesta motorer i robotkroppen utsätts för bara en bråkdel av den maximala belastningen som kan uppstå under rörelsen, se figur 2.1. 5.2 Tillverkning av chassi Flera versioner av möjliga chassi-delar skrevs ut för att hitta en bra balans mellan styvhet och vikt. Tunna delar blev för böjliga, medan tjocka delar skulle vara tunga för motorerna. En tjocklek på 3 mm för fästena var den minsta möjliga, både med tanke på styvhet och längden på plastpluggarna som håller samman motorerna och fästet. Dessutom behöver delarna designas med marginal av två anledningar. Dels kan materialet krympa när det övergår från en fas till en annan och dels kan skri- varens precision påverka resultatet [21]. Det är särskilt känsligt runt hålen p.g.a. att hålens och pluggarnas diameter ska överensstämma. Hålen skall ha en diameter på 4 mm och vid så pass små mått kan även en liten skillnad mellan ritning och utskrift ha stor påverkan. Designen gav ett robust chassi som håller för påfrestningarna som den utsätts för vid rörelse. Motorfästena fick en tjocklek på 3 mm för att hålla för de påfrestningar de skulle utsättas för, medan huvud- och svansmodulen kunde göras 1 mm tunnare 23 Resultat och analys där påfrestningarna inte är lika stora. Anledningen till att huvud- och svansmodulen gjordes tunnare var för att minska vridmomentet de bidrog till. Den totala vikten på en länkmodul blev 30 g, vilket ger en högre belastning än vad motorerna är de- signade för, se figur 2.4. I praktiken blir vridmomentet högre än vad simuleringen visar, eftersom huvud- och svansmodulen blev både längre och tyngre än resten av länkarna, se bilaga C. Till följd av detta kan det bli svårt för motorerna att lyfta lederna och utöva sidvindning. 5.3 Rörelsemönster För att göra en tredimensionell rörelse möjlig är motorerna placerade så att varje motor är vriden 90° i förhållande till den föregående. Detta gör att de två sinusvågor som propagerar genom roboten är vridna 90° i relation till varandra. Om amplitu- derna hos dessa är lika blir kraften som får roboten att röra sig riktad 45° uppåt från underlaget vilket resulterar i att roboten ställer sig på kanten. Rörelsemönstret påminner om sidvindning. Två tydliga sinusvågor som är vinkel- räta mot varandra propagerar genom robotkroppen. Trots att rörelsemönstret såg ut att vara korrekt förflyttas roboten inte framåt. Några andra rörelsemönster im- plementerades ändå för att se om det var möjligt för att få den att förflytta sig med något av dessa. Utöver sidvindning kan roboten exempelvis utföra rörelser som påminner om ormars serpentin- och dragspelsrörelse genom att parametervärdena i ekvation (2.1) ändras. Detta bekräftar att andra rörelsemönster utöver sidvindning är möjliga. 5.4 Testresultat Varken kraven på färdriktning eller hastighet kunde testas då roboten inte kan för- flytta sig framåt med sidvindning. Kravet på hur roboten skulle undvika kollisioner kunde däremot testas genom att täcka för sensorerna. Detta fick roboten att sluta röra på sig och därför ansågs detta krav som uppfyllt. 24 6 Diskussion I detta kapitel kommer kraven att utvärderas och möjliga förbättringar tas upp. Även förslag på hur roboten skulle kunna vidareutvecklas kommer ges. Valen som gjordes för att uppfylla kraven kommer också ifrågasättas. 6.1 Utvärdering av kraven För att underlätta för en objektiv bedömning av projektets resultat utvärderas hur väl de krav som sattes upp i början av projektet uppfylls. Kraven kan delas upp i två kategorier: utseende och rörelse. 6.1.1 Utseende Två av kraven handlar om utseende och konstruktion. Det första av dessa krav var att roboten skulle ha ett ormlikt utseende. Det andra kravet var att den skulle kun- na förflytta sig utan att använda hjul. För att kunna uppfylla kravet att roboten skulle konstrueras utan hjul försågs den inte med några sådana. Det är möjligt att detta beslut bidrog till problemen med framdrivningen då ett hjul på varje led hade minskat kontaktytan med underlaget ytterligare. Detta skulle kunna räcka för att öka trycket som roboten utövar på gol- vet tillräckligt för att roboten skulle orka trycka sig framåt när den utför sidvindning. Robotens utseende skulle vara ormlikt. Även om detta är ett krav som vi anser att den uppfyller är frågan subjektiv. För att göra det möjligt för en robot att röra sig som en orm är det nödvändigt att den konstrueras så att den liknar en orm. Detta gör att kravet på ett ormlikt utseende i praktiken uppfylls per automatik. 6.1.2 Rörelse Återstående krav angår robotens rörelse. Första var att roboten skulle använda sid- vindning som rörelsemönster för att ta sig fram. Nästa var att roboten skulle röra sig med en hastighet på 10 cm/s med en avvikelse på som mest 10 cm per meter. Det sista kravet var att undvika kollisioner genom att stanna. Som nämnts i avsnitt 5.4 lyckades vi inte att få roboten att röra sig framåt med hjälp av sidvindning. Detta kan bero på flera saker: 25 Diskussion • För låg friktion • Fel i rörelsemönstret • Spänningsfall mellan svans och huvud • Vikten på chassit Om friktionen mellan ormen och golvet är för låg, resulterar det i att ormen halkar när den ska trycka sig framåt. Detta var ett problem som försökte åtgärdas genom att fästa gummi på kontaktytorna mellan robot och golv. Det verkar dock inte ha höjt friktionen tillräckligt mycket för att ormen skulle kunna ta sig framåt. Det går inte att utesluta fel i hur rörelsen modellerats eller programmerats. I si- muleringen gick det inte att få en fullständig bild av hur rörelsen såg ut då den visades på en tvådimensionell skärm. Dock ser det ut som att ormroboten hade kunnat ta sig framåt när den utför sidvindning om den inte hade halkat när den ska skjuta sig framåt. Motorerna är parallellkopplade och därför ska det i teorin ligga samma spänning över dem. Dock är så inte fallet i praktiken eftersom sladdarna verkar som resis- torer. Detta gör att ju längre bort från spänningskällan en motor sitter desto mer kommer spänningen ha minskat innan den har nått motorn. Att spänningen blir lägre gör att effekten från motorerna blir mindre vilket i sin tur leder till att de inte orkar utföra det arbete som krävs. Chassit visade sig bli tyngre än beräknat vilket kan vara en anledning till att ro- boten inte kan röra sig framåt. Detta för att vikten påverkar hur väl rörelsen kan utföras eftersom en ökad vikt ger ett ökat vridmoment och motorerna stannar ifall det blir för stort. Chassits vikt är dock inget som går att åtgärda utan att bygga om hela roboten. 6.1.3 Önskemål Utöver de specifika kraven sattes det upp två önskemål som skulle uppfyllas i mån av tid. Det första önskemålet var att roboten skulle ta sig upp för en lutning på 10°. Eftersom roboten inte kan förflytta sig framåt kunde inte detta önskemål uppfyllas. Det andra önskemålet var att roboten skulle kunna byta mellan olika rörelsemöns- ter. Detta anser vi vara uppfyllt då vi kunde se att andra rörelsemönster gick att få när vi testade att byta parametrarna i ekvation (2.1). 6.2 Förbättringsmöjligheter Ett framträdande problem som måste lösas är att roboten inte kan röra sig framåt. Utöver det finns det andra förbättringar som skulle kunna göras, till exempel minska storleken på huvudmodulen. 26 Diskussion 6.2.1 Förflyttning framåt Den troligaste anledningen till att roboten inte kan förflytta sig framåt är spän- ningsfallet mellan svans och huvud. Detta baserar vi på observationen att motorerna betedde sig mer stabilt när roboten matades med 5V från den ena änden och 7.4V från den andra. Två tänkbara sätt för att åtgärda problemet med spänningsfallet är: • Placera kondensatorer vid varje motor • Spänningsmata i flera punkter längs roboten 6.2.1.1 Kondensatorer vid varje motor Spänningsfallet mellan motorerna skulle kunna motverkas genom att placera en kondensator efter varje motor. Kondensatorerna skulle laddas upp när strömbehovet är lågt och laddas ur när det är högt. På det sättet skulle spänningsskillnaden som uppstår i främre delen av roboten kunna jämnas ut. Det är dock svårt att bedöma hur stor kapacitans som skulle behövas eftersom det inte går att mäta de exakta strömmar och spänningar i motorerna som drabbas utan att klippa upp sladdarna emellan. 6.2.1.2 Spänningsmatning i flera punkter Ett alternativt sätt att minska spänningsfallet skulle vara att koppla in spännings- matning i flera punkter istället för bara en. Detta skulle medföra färre sladdar mellan spänningskällan och den sista motorn. Färre sladdar ger mindre motstånd vilket le- der till att spänningsfallet minskar. 6.2.2 Nytt kretskort En annan förbättring som hade kunnat göras var att ha ett egentillverkat mikro- kontrollerkort som innehåller både de relevanta delarna från Arduinon och vårt spe- cialtillverkade kretskort. Detta skulle göra att endast ett kort skulle behöva få plats i huvudet. Vår robot använder endast tre digitala stift för kommunikation mellan motorerna och mikrokontrollern men Arduinon har fler än så. Genom att montera endast de använda komponenterna på ett nytt kretskort fås en mer kompakt lösning. Ett sådant kretskort hade även gjort det möjligt att ansluta datastiften från senso- rerna direkt till processorn istället för att koppla sladdar mellan de två nuvarande kretskorten. Med dessa ändringar skulle potentiellt huvudet kunna göras mindre, vilket i sin tur kan leda till ökad rörlighet. 6.3 Utvecklingsmöjligheter Även om alla krav som ställts upp inte uppnåtts har roboten stor utvecklingspoten- tial. Roboten är flexibel och har en bra grund för att anpassas till ett mer specifikt användningsområde. Den är modulärt uppbyggd och styrningen kan enkelt änd- ras genom att ändra parametrarna i ekvation (2.1). I detta avsnitt tas potentiella utvecklingsområden upp samt exempel på hur roboten skulle kunna anpassas för specifika användningsområden. 27 Diskussion 6.3.1 Fler rörelsemönster En inspirationskälla till detta projekt var ’search and rescue’-robotar. Sådana robo- tar används för att leta efter människor som har fastnat i t.ex. raserade hus efter jordbävningar. Endast sidvinding är inte så praktiskt för en sådan robot eftersom den ska kunna ta sig fram i trånga utrymmen. Därför är implementering av fler rörelsemönster en bra vidareutveckling. Sidvindning är dock ett bra rörelsemönster att utgå ifrån eftersom det ställer höga krav på robotens rörlighet. En robotorm som kan skifta mellan olika rörelsemönster kan anpassa sig efter terrängen för att lättare kunna ta sig fram. Genom att kunna variera robotens rörelsemönster utökas dess användningsområden. 6.3.2 Fjärrstyrning Fjärrstyrning av roboten skulle minska kraven på styralgoritmer och därmed även lagringkapaciteten och processorkraften som behöver finnas tillgängligt. Dock skulle detta begränsa användningsområden till platser med fri sikt för att den som styr roboten ska kunna navigera den. Alternativt skulle roboten kunna utrustas med en kamera. 6.3.3 Kamera för omgivningsavläsning I avsnitt 4.1.4 nämns kamera som ett alternativt sätt att läsa av omgivningen. En kamera för objektidentifiering skulle vara en utmärkt vidareutveckling av roboten och bredda dess användningsområden. Med en sådan kamera skulle det bli möjligt att låta ormen följa efter ett visst föremål. Genom att förse roboten med en kamera skulle roboten kunna användas till att undersöka utrymmen som en människa har svårt att komma åt. En kamera skulle dock göra ett nytt huvud nödvändigt då det inte är möjligt att fästa en kamera på det nuvarande huvudet. 28 7 Slutsatser Den färdiga roboten är ormlik till utseendet och konstruerad utan hjul. Kravet om sidvindning är delvis uppfyllt då roboten kan röra sig på ett sätt som påminner om sidvindning, men kan inte ta sig framåt. Av den anledningen blev det inte aktuellt att mäta om den uppfyllde de mer detaljerade kraven på hastighet och avvikel- semarginal. Kollisionsundvikning är implementerad i den utsträckning att roboten stannar då sensorerna detekterar ett hinder närmare än ett visst avstånd. Konstruktionen lämpar sig för både två- och tredimensionell rörelse, vilket med- för att roboten enkelt kan programmeras för olika rörelsemönster. Med relativt små modifikationer av hårdvaran är det möjligt att åstadkomma framdrivning och där- med blir roboten aktuell för vidareutveckling. 29 Litteraturförteckning [1] ISO 8373:2012 Robots and robotic devices — Vocabulary, Technical Committee ISO/TC 184 Working Draft Proposed Standard, Rev. 2, 2012. [2] (2015) Industrial robot statistics. International Federation of Robotics (IFR). Frankfurt, Germany. [Online]. Available: http://www.ifr.org/industrial-robots/ statistics/ [3] (2015) Service robot statistics. International Federation of Robotics (IFR). Frankfurt, Germany. [Online]. Available: http://www.ifr.org/service-robots/ statistics/ [4] J. A. Burton, Den stora boken om ormar. Stockholm: Streiffert Förlag AB, 1994. [5] M. Ubertazzi Tanara, Amfibiernas och reptilernas värld. Stockholm: P A Norstedt & Söners förlag, 1979. [6] J. Casper and R. R. Murphy, “Human-robot interactions during the robot- assisted urban search and rescue response at the world trade center,” Systems, Man, and Cybernetics, Part B: Cybernetics, IEEE Transactions on, vol. 33, no. 3, pp. 367–385, 2003. [7] M. T. K. Suzumori, S. Wakimoto, “A miniature inspection robot negotiating pipes of widely varying diameter,” in Robotics and Automation, 2003. Procee- dings. ICRA ’03. IEEE International Conference on, vol. 2, Sep. 14–19, 2003, pp. 2735 – 2740. [8] R. J. Webster, A. M. Okamura, and N. J. Cowan, “Toward active cannulas: Miniature snake-like surgical robots,” in IEEE/RSJ International Conference on Intelligent Robots and Systems, Bejing, Oct. 9–15, 2006, pp. 2857–2863. [9] M. Hammarsten, M. Karlsson, H. Olsson, E. Karlsson, A. Kalander, and P. Strandberg, “Snakebot en slingrande robot,” Kandidatarbete, Göteborg, 2014. [10] F. Bjersing, D. Ekström, H. Hörnstein, J. Bramstång, A. Öqvist, and V. Johans- son, “Kuggorm: Design and construction of a snake-like robot,” Kandidatarbete, Göteborg, 2015. [11] A. A. Transeth, “Modelling and control of snake robots,” Ph.D. dissertation, Norwegian University of Science and Technology, 2007. [12] M. Tesch, K. Lipkin, T. Brown, R. Hatton, A. Peck, J. Rembisz, and H. Cho- set, “Parameterized and scripted gaits for modular snake robots,” Advanced Robotics, no. 23, p. 1131–1158, 2009. [13] MATLAB, version 8.4.0.150421 (R2014b). Natick, Massachusetts: The Mat- hWorks Inc., 2014. 30 http://www.ifr.org/industrial-robots/statistics/ http://www.ifr.org/industrial-robots/statistics/ http://www.ifr.org/service-robots/statistics/ http://www.ifr.org/service-robots/statistics/ Litteraturförteckning [14] J. Aparicio. (2013, Jan.) Simmechanics: Simulating floor interac- tion/collision. [Online]. Available: http://embeddedprogrammer.blogspot.se/ 2013/01/simmechanics-simulating-floor.html [15] XL-320, Robotis, 2010. [Online]. Available: http://support.robotis.com/en/ product/dynamixel/xl-series/xl-320.htm [16] GP2Y0A21YK0F, Sharp, 2006. [Online]. Available: http://www.sharpsma. com/webfm_send/1489 [17] Arduino micro. Arduino. [Online]. Available: https://www.arduino.cc/en/ Main/ArduinoBoardMicro [18] SN54HC241, SN74HC241 octal buffers and line drivers with 2-state outputs, Texas Instruments, 2003. [Online]. Available: http://www.ti.com.cn/cn/lit/ds/ symlink/sn74hc241.pdf [19] hackerspace adelaide. Dynamixel xl-320 a servo library for arduino. [Online]. Available: https://github.com/hackerspace-adelaide/XL320 [20] jgangemi. Sharpir. [Online]. Available: https://github.com/jgangemi/SharpIR [21] Q. Huang, J. Zhang, A. Sabbaghi, and T. Dasgupta, “Optimal offline compensation of shape shrinkage for three-dimensional printing processes,” IIE Transactions, vol. 47, no. 5, pp. 431–441, 2015. [Online]. Available: http://dx.doi.org/10.1080/0740817X.2014.955599 [22] F. G. Martin. What is the difference between a dc motor and servo motor? [Online]. Available: http://handyboard.com/hb/faq/hardware-faqs/ dc-vs-servo/ 31 http://embeddedprogrammer.blogspot.se/2013/01/simmechanics-simulating-floor.html http://embeddedprogrammer.blogspot.se/2013/01/simmechanics-simulating-floor.html http://support.robotis.com/en/product/dynamixel/xl-series/xl-320.htm http://support.robotis.com/en/product/dynamixel/xl-series/xl-320.htm http://www.sharpsma.com/webfm_send/1489 http://www.sharpsma.com/webfm_send/1489 https://www.arduino.cc/en/Main/ArduinoBoardMicro https://www.arduino.cc/en/Main/ArduinoBoardMicro http://www.ti.com.cn/cn/lit/ds/symlink/sn74hc241.pdf http://www.ti.com.cn/cn/lit/ds/symlink/sn74hc241.pdf https://github.com/hackerspace-adelaide/XL320 https://github.com/jgangemi/SharpIR http://dx.doi.org/10.1080/0740817X.2014.955599 http://handyboard.com/hb/faq/hardware-faqs/dc-vs-servo/ http://handyboard.com/hb/faq/hardware-faqs/dc-vs-servo/ A Bilaga A.1 Blocksheman Denna bilaga innehåller figurer över blockdiagrammen som skapades i Simulink för att utföra simuleringar. Figur A.1 visar robotens huvud och de två första ledmodu- lerna. Figur A.1: Robotkroppen i SimMechanics. Figur A.2 visar hur ett golv kan simuleras i Simulink. Golvet är modellerat som fjäder och dämpare som verkar i tyngdpunkten av varje ledmodul och hindrar dem från att sjunka under ett fördefinierat värde på y-axeln enligt det kartesiska koor- dinatsystemet. I Bilaga Figur A.2: Golvet i SimMechanics. Figurer A.3 och A.4 visar blockdiagrammen för vågorna som används till att simulera insignaler till aktuatorerna och få roboten att utföra sidvindning. Den vertikala vågen innehåller en extra parameter, δ, som anger fasförskjutningen mellan den vertikala och den horisontella vågen. Figur A.3: Insignalen till aktuatorer vid horisontella leder i Simulink. II Bilaga Figur A.4: Insignalen till aktuatorer vid vertikala leder i Simulink. III Bilaga A.2 Budget Budgeten för projektet var 5000 SEK och tabell A.1 visar en uppskattning av hur den fördelades, exklusive fraktkostnader. Budgeten innehåller även komponenter som inte kom till användning i den slutgiltiga produkten, till exempel mikrokontrollerkort som behövde bytas ut under projektets gång p.g.a. olycka, samt extra sensorer och kontakter. Tabell A.1: Uppskattad budget. Komponent Antal Kostnad Servomotor Dynamixel XL-320 16 3400:- Sensor Sharp GP2Y0A21YK0F 6 480:- Kontakter MOLEX 51065-0300 20 35:- Kontakter MOLEX 50212-8000 100 26:- RC Batteripack(LiPo) 1 149:- Arduino Micro 1 275:- Arduino Nano 1 325:- Plastnitar Rivet Set (RS-10) 2 123:- Strömbrytare SPST Rocher switch 1 12:- Totalt 4825:- IV B Bilaga B.1 Diplom från Robot-SM V Bilaga VI C Bilaga C.1 Ritningar på delarna VII Inledning Syfte Problembeskrivning Krav och önskemål Avgränsningar Rapportens upplägg Modellering och simulering Matematisk modell Val av parametervärden Simulering av rörelsemönster Simuleringsresultat Hårdvara Val av komponenter och material Motorer Mikrokontrollerkort Avläsning av omgivningen Strömtillförsel Material för chassit Friktionslager till undersidan Design Robotens leder Huvudmodul Svansmodul Implementering Elektronik Servomotorer Mikrokontrollerkort Specialtillverkat kretskort Sensorer Strömförsörjning Mjukvara Styrning av motorer Sensorer Testning Färdriktning Hastighet Kollisionsundvikning Resultat och analys Sammansättning av elektroniken Tillverkning av chassi Rörelsemönster Testresultat Diskussion Utvärdering av kraven Utseende Rörelse Önskemål Förbättringsmöjligheter Förflyttning framåt Nytt kretskort Utvecklingsmöjligheter Fler rörelsemönster Fjärrstyrning Kamera för omgivningsavläsning Slutsatser Bilaga Blocksheman Budget Bilaga Diplom från Robot-SM Bilaga Ritningar på delarna