Siirry suoraan sisältöön

Robotteilua: Polun seuraaminen vol. 2

Tämä on jatkoa kirjoitukselle Robotteilua: Polun seuraaminen.

Tänä viikonloppuna saimme viimein viimeistelyä uuden radan, jolla voimme testata ja kehittää Vex IQ polunseuraamisprojektiamme, ja kehitettyä koodiakin paljon eteenpäin.

Lyhyenä kertauksena tämä on Vex IQ-robotille Juhan ja Tuomaksen kanssa tekemä toteutus, joka seuraa allaan olevaa (mustaa) polkua. Taktiikkana sillä on mennä viistosti vasemmalle, kunnes se näkee polun. Polun nähdessään se kääntyy reippaasti oikealle päin, ja alkaa taas menemään etuvasempaan kunnes se näkee uudestaan polun. Täten botti seuraa enemmän tai vähemmän tarkasti polun oikeaa reunaa.

Vex IQ polunseurausrata

Alustana oli siis entisen työantajani muovipinnoitteinen(?) mainostaulu, joka oli jäänyt tarpeettomaksi ja menossa roskiin. Ihanteellinen alustaksi, sillä se oli sopivan jämerä, ja taustapuolella se oli tasaisen valkoinen (toisin kuin surkeasta hämärässä otetusta valokuvasta päättelisi).

Hahmottelin mutkia, tiukkoja käännöksiä ja suoria sisältävän radan ensin paperille, sitten hahmottelin sen lyijykynällä alustalle, ja lopulta teippasin radan mustalla sähköteipillä alustaan. Aloitus/lopetuspisteen tein punaisesta mainospaperin palasesta. Rata on tarkoitettu kierrettäväksi kuvan mukaisesti vastapäivään. Kaikenkaikkiaan olen hyvin tyytyväinen rataan, se tarjoaa hyvän mahdollisuuden parantaa nykyistä koodia, ja testata erilaisia toteutuksia miten radan parhaiten voisi suorittaa.

Ensimmäisellä radanseurausversiolla oli ongelmia toiseksi viimeisessä mutkassa, se meni pitkäksi. Tämä korjaantui melkoisen helposti tekemällä kääntymistä hitaammaksi/rauhallisemmaksi.

Muitakin ongelmia oli, isoimman ollessa ettei robotti ymmärtänyt aloitus/lopetuspisteestä mitään. Vanhalla koodilla polku erotettiin alustasta vain vertaamalla harmaan sävyjen arvoja, mutta koska nyt aloitus/lopetuspiste oli punainen, ei harmaasävyjen vertaaminen enää riittänyt. Muutimme värisensorin harmaatilasta väritilaan, ja luimme sensorin RGB-väriarvot erillisiin muuttujiin. Lopulta onnistuimme tunnistamaan aloituspisteen seuraavalla koodilla:

if (35 < redValue && redValue < 45 && 35 < blueValue && blueValue < 45) {
currentState = STATE_ON_BASE;
currentStateString = "On base";
}

Erottelu itse polun (eli mustan teipin) ja valkoisen alustan välillä oli tämän jälkeen hyvinkin helppoa. Lisäsimme myös yllä olevan koodin mukaisesti eri tiloja, tämä mahdollisti mm. aloitustilan lisäämisen, joka aloitti ajon vasta kun robotti tunnistaa olevansa alkupisteessä. Tällöin myös robotti käynnisti ajastimen, jonka avulla pystyimme kirjaamaan radan suorittamisen nopeuden.

Hieroimme myös nopeus- ja kääntymisarvoja hieman, ja la-iltana saimme robotin suorittamaan radan luotettavasti n. 122sec ajalla.

Nopeusoptimointia

Sunnuntaina vielä kerkesimme hieman koittaa optimoida radan kulkemista. Halusimme että robotti kiihdyttäisi nopeutta kun se etenee radalla helpoissa kohdissa, eli esim. suorissa. Vaativissa mutkissa ja neulansilmissä taas liian suuri nopeus aiheuttaa helposti polulta harhautumisen, joten niissä taas vauhtia pitää hidastaa. Koska 4min videota kertoo enemmän kuin miljardi sanaa, katso tästä selite ja näyte toiminnasta:

Päädyimme käyttämään tässä versiossa toteutusta, joka mittaa kuinka monta tickiä on siitä kun polku on edellisen kerran nähty. Täten kun robotti polun nähdessää kääntyy oikealle, jos rata tulee nopeasti taas vastaan, ollaan kurvissa joka kääntyy oikealle päin. Tällöin vaaditaan tarkkuutta, ja vauhtia hidastetaan reilulla tahdilla. Jos taas polkua ei ole nähty pidempään aikaan, ollaan joko suoralla, tai kääntymässä vasemmalle päin. Tällöin vauhtia voidaan kiihdyttää. Tosin vasemmalle kääntymisessä tämä aiheuttaa rajuja käännöksiä, ja sen että mutka menee hieman ”ulkokurvista”. Tämä kaipaa vielä parantamista.

Lisäsimme myös debuggaustarkoituksessa kaksi kosketusledi-sensoria robottiin, joilla pystyimme näkemään koska botti kiihdyttää, koska se menee miniminopeutta ja koska maksiminopeutta. Toisella ledi-sensorilla taas kerrotaan kuinka nopeasti botti tekee käännöksiä vasemmalle päin etsiessään polkua. Sininen väri tarkoittaa että robotti hidastaa, vihreä tarkoittaa että se kiihdyttää, ja punainen tarkoittaa että liikkuminen/kääntyminen tehdään nyt maksiminopeudella. Tämä oli hyvin hyödyllinen tutkimaan robotin logiikkaa itse radalla, ja huomaamaan ongelmia toiminnassa, sillä robotti liikkuu sen verran ketterästi että robotin omasta näytöstä ei lukuja pysty käytännössä katselemaan.

Jatkokehitys

Koska meillä loppui su valitettavasti aika kesken, lukujen hierominen jäi kesken. Lisäksi haluaisimme siirtyä tick-pohjaisesta logiikasta aikapohjaiseen, että koska teippi on viimeksi nähty. Tai korvata kyseinen logiikka ihan gyrosensorin luvuilla, ja mitata asteita paljonko on yhteensä käännytty ja päätellä siitä kuinka nopeasti tulisi kääntyä. Tick-pohjainen ei ole kovinkaan luotettava, sillä sen arvot vaihtelevat sen mukaan kuinka nopeasti koodi suoritetaan, ja täten arvoja tarvitsee muuttaa kun koodia lisätään ja koodin suoritusnopeus laskee.

Lisäksi minimi-, perus-, ja maksiminopeuksia muuttamalla voisi varmasti saavuttaa paljonkin lisänopeutta radan suorittamiseen. Nyt päästiin luotetttavan oloisesti johonkin 96-98 sekunnin lukuihin (ensimmäisellä versiolla ennen kiihdyttely/hidastusoptimointeja johonkin 122 sekuntiin).

Ja ajatuksen tasolla on vielä aloittaa toteutus joka perustuisi täysin toiseen logiikkaan radan suorittamisen suhteen, eli että se rehellisesti yrittäisi pysyä itse teipin päällä, eikä vain törmäillä siihen oikealta päin, mutta siitä tulee sitten ihan oma projektinsa.

Koodit tähän nykyiseen toteutukseen löytyvät siis Githubista. Lisää tilannekatsausta projektista tulee toivottavasti lähiviikkoina 🙂

Jaa kirjoitus Facebookissa
Jaa kirjoitus Twitterissä

Kiitos kun luit! Jätä kommentti alta, arvostan :)

Piditkö kirjoituksesta?

  

Related Posts

Robotteilua: Polun seuraaminen vol. 3

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.

Robotteilua: Polun seuraaminen

Juhan kanssa tuossa alkukesästä koodailimme Tuomaksen Vex IQ robottisettiä, tavoitteena tehdä ajava robotti, joka osaisi seurata maassa olevaa piirrettyä (tai tässä tapauksessa teipattua) polkua. Ensinnäkin video selventämään tilannetta: Asetelma on… Lue lisää »Robotteilua: Polun seuraaminen

Uusi työkalu Suomen hallituksien visualisointiin

Tein tekoälyn avustuksella työkalun jonka avulla voi visualisoida graafein/kaavioin/diagrammein Suomen hallituksia ja ministereitä alkaen vuodesta 1987. Työkalu löytyy täältä: Suomen hallituspuolueet visualisoituna Jaa kirjoitus Facebookissa Jaa kirjoitus Twitterissä Piditkö kirjoituksesta?… Lue lisää »Uusi työkalu Suomen hallituksien visualisointiin

Riisitunturin vaellusreitti

Kävimme vastavihityn vaimoni kanssa viime viikolla Posiolla kiertämässä lyhyen vaellusreitin, Riisitunturin rääpäsyn (4,3km). Reitin alkupisteeseen pääsi helposti autolla, parkkipaikkoja oli kiitettävästi. Ylipäätään jäi todella posiitivinen fiilis, ja ajatus että meidän… Lue lisää »Riisitunturin vaellusreitti

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *