Jarkon oma blogi

Robotteilua: Polun seuraaminen vol. 3

Aiemmat osat:
http://lauspalo.com/2017/10/15/robotteilua-polun-seuraaminen/index.html
http://lauspalo.com/2017/11/26/robotteilua-polun-seuraaminen-vol-2/index.html

Jatkoimme menneenä viikonloppuna tuon saman radan seuraamista. Päätimme lähteä tekemään toisenlaista toteutusta tuon testiratamme polun seuraamiseen. Seuraavassa videossa on aiemman ja tämän uuden toteutuksen eroja hieman avattu, ja samalla videolta näkee uuden toteutuksen mallisuorituksen testiradallamme:

Tämä jakaa koodikantamme kahteen versioon:

Versio 1. Aikaisemmin tekemämme toteutus. Koodi väistelee hienovaraisesti teippiä sen oikealla reunalla, olematta käytännössä juuri koskaan itse teipin päällä. Tämä on siis versio jota aiemmat blogipostaukset käsittelevät. Tämän toteutuksen robotin käytöstä voi kuvata hyvin hektiseksi, sillä se on käytännössä jatkuvasti kääntymässä johonkin suuntaan melkoisella vauhdilla, myös radan suorilla kohdilla. Koodikanta löytyy Githubista täältä.

Versio 2. Tänä viikonloppuna tekemämme toteutus. Tämän koodin tavoite on pysyä teipin päällä. Mikäli teipiltä eksytään, pyrkii koodi pyörimällä paikallaan löytämään minne teipin osoittama rata seuraavaksi jatkuu. Koodikanta löytyy Githubista täältä.

Videolla on selvitetty toimintaa suht. hyvin. Aluksi koitimme toki vain nopeuttaa robotin nopeutta, mutta jos robotti liikkui kovin suurella nopeudella, aiheutti se yllättäviä ongelmia. Liikkeet menivät pitkiksi, eli kun eksyttiin teipiltä, oli suuren nopeuden vuoksi siirrytty suhteelilsen pitkän matkan päähän teipin päältä, jolloin teippiä joutui hakemaan suuremmilla kääntymisillä, joka kasvatti suoritusaikaa. Itse liikenopeus piti siis pitää suht maltillisena, varsinkin mutkissa tämä korostui sillä niissä teippiä joudutaan hakemaan jatkuvasti käännöksillä.

Hidas perusnopeus, yhdistettynä suorilla kiihdyttämiseen oli hyvä kompromissi. Robotti ei harhaillut kauas viivasta mutkissa, mutta suorilla saatiin hyviä nopeuksia. Toki tämä kasvatti hieman kääntymisen tarvetta suoran loputtua, mutta nopeampi suoran toteutus korvasi tämän yhden kääntyilyprosessin hitaamman suorituksen mielestämme selvästi.

Kun robotti eksyy teipiltä, se tekee tällä hetkellä seuraavanlaiset etsinnät:

  1. Etsitään teippiä max. 55 asteen käännöksellä samaan suuntaan kuin viimeksikin käännyttiin. Se että käännytään samaan suuntaan kuin edelliselläkin kerralla on hyvä oletus, varsinkin pitkissä mutkissa. Tässä olisi kehityskohde tosin, pitkän suoran jälkeen mahtaisi olla loogista etsiä ensin toisesta suunnasta kuin edellisellä kerralla, sillä koska teippi ei saa ylittää itseään, radan pitää keskimäärin kääntyä enemmänkin joka toisessa käännöksessä toiseen suuntaan (pl. mainitsemani pitkät kaarteet/mutkat, joissa teipiltä eksytään jatkuvasti)
  2. Jos tästä suunnasta ei löydy tuolta 55-asteen käännöksellä, etsitään teippiä toisesta suunnasta. Koska edelliset 55-astetta on jo katsottu, eikä teippiä sielä ollut, voidaan tämä käännös tehdä hyvin nopeasti. Tällöin etupuskurissa palaa keltainen valo oikealla. Tämän jälkeen käännytään vielä max. 150-astetta. Jos tälläkään ei löydy, käännytään taas nopeasti 150-astetta takaisinpäin, ja etsitään vielä 150-astetta lisää tältä suunnalta. Nyt on skannattu yhteensä 300-asteen ala, ja tältä alueelta teipin jatkon pitää löytyä! Niin jyrkkää neulansilmää ei ainakaan tässä radassa ole etteikö tällä löydettäisi jatkoa.
  3. Nyt meidän pitäisi olla teipillä, ja mennään eteenpäin. Mitä pidempään olemme yhtämittaisesti teipillä, sitä nopeampaa kuljetaan.

Tuon 55-astetta ensin yhteen suuntaan, sitten 150-astetta toiseen suuntaan, sitten 150-astetta toiseen suuntaan -logiikan perustelu on juurikin tuota että koska rata ei saa ylittää itseään, niin on todennäköisempää että isot käännökset ovat toiseen suuntaan mitä edellinen käännös on ollut. Täten ei kannata kuluttaa aikaa täyteen 150-asteen käännökseen samaan suuntaa kuin viimeksikin, paitsi viimeisenä keinona.

Kaikenkaikkiaan olen melkoisen tyytyväinen tähän toteutukseen, se on paljon fiksumman näköistä kuin jatkuvasti hapuileva ADHD-toteutus blogipostauksessa Robotteilua: Polun seuraaminen vol. 2, jonka lisäksi tätä oli oikein mielenkiintoista toteuttaa Juhan kanssa. Aluksi meillä oli ongelmia saada radan suoritusnopeutta alle 120 sekunnin, mutta suorilla kiihdytyksellä, sekä kääntymisen optimoinneilla saimme lopulta mielestämme mukavan nopeita aikoja (n. 90 sekuntia näytti olevan lopussa normaali suoritusnopeus, kun versio 1. toteutuksella pääsimme johonkin 95 sekunnin aikoihin). Myös robotin pohjassa olevan värisensorin sijoittaminen hieman edemmäs vähensi käännöksien tarvetta monin paikoin rataa.

Robotin näkymä pohjasta katsottuna

Robotin näkymä pohjasta katsottuna, keskellä ylhäällä värisensori jossa palaa valo, joka siis tunnistaa ollaanko aloituspisteessä, teipillä (eli kuljettavalla reitillä) vaiko eksytty teipiltä

Kaikenkaikkiaan mukava projekti. Keskustelussa nousi ideoita jatkokehitykselle:

  1. Robotti voisi kiertää radan oletuksena vaikka kolme kertaa, tällä saataisiin luotettavampia aikatuloksia. Nyt radan kiertoon liittyy pieniä satunnaisuuksia, jotka vaikuttavat lopputulokseen. Radan kiertäminen itsenäisesti monta kertaa helpottaisi testausta, ja aikojen kirjausta.
  2. Toteutus joka opettelisi radan, se voisi kiertää radan ensin vaikka kerran, pistää radan koordinaatteja ylös, ja suorittaa radan tämän jälkeen toisen kerran näillä tallennetuilla koordinaateilla. Tämä voisi olla selvästi nopein tapa kiertää rata, kunhan koordinaatit saataisiin tallennettua tarkasti. Epäselvää on miten tarkasti radankoordinaatit saadaan luettua gyrosensorin ja moottorien liiketietojen perusteella.