{"id":8360,"date":"2021-01-12T14:00:07","date_gmt":"2021-01-12T12:00:07","guid":{"rendered":"https:\/\/atostek.com\/?p=8360"},"modified":"2021-01-12T14:05:24","modified_gmt":"2021-01-12T12:05:24","slug":"nopeusprofiilin-generointi-liikkuvalle-robotille","status":"publish","type":"post","link":"https:\/\/atostek.com\/nopeusprofiilin-generointi-liikkuvalle-robotille\/","title":{"rendered":"Nopeusprofiilin generointi liikkuvalle robotille"},"content":{"rendered":"
T\u00e4m\u00e4 postaus perustuu diplomity\u00f6h\u00f6ni, jonka tarkoituksena oli uudelleensuunnitella itsen\u00e4isesti liikkuvan robotin nopeusprofiiligeneraattori. Nopeusprofiilin avulla voi suunnitella ja optimoida robotin liikett\u00e4.<\/strong><\/p>\n Nopeusprofiili on kuvaus nopeudesta ajan tai matkan funktiona. Tunnetulle reitille voidaan laatia nopeusprofiili etuk\u00e4teen, jos tiedet\u00e4\u00e4n reittiin ja robottiin kohdistuvat rajoitukset. Itsen\u00e4isesti liikkuva robotti voi k\u00e4ytt\u00e4\u00e4 etuk\u00e4teen tehty\u00e4 nopeusprofiilia nopeutensa asetusarvoina ja n\u00e4in optimoida liikett\u00e4\u00e4n.<\/p>\n Nopeusprofiili voidaan laatia tunnetun reitin ja muiden rajoitusten perusteella. Yksinkertainen reitti koostuu suorista ja k\u00e4\u00e4nn\u00f6ksist\u00e4. Yleisesti ottaen robotin pit\u00e4\u00e4 liikkua k\u00e4\u00e4nn\u00f6ksiss\u00e4 hitaammin kuin suorilla, jotta se ei esimerkiksi kaadu tai joudu luisuun. Reitin muodon eli sen geometrian perusteella reitille voidaan tehd\u00e4 nopeusrajafunktio eli kuvaus, joka kertoo maksiminopeuden kullekin reitin kohdalle. Alla olevassa kuvassa nopeusraja on ensimm\u00e4isen 20 metrin ajan 4 m\/s, sitten 5 metrin ajan 2 m\/s ja lopuksi 20 metrin ajan 5 m\/s.<\/p>\n <\/p>\n Muita rajoituksia ovat esimerkiksi robotin ominaisuudet, kuten sen painopiste, moottorien teho, renkaiden ominaisuudet ja niin edelleen. N\u00e4m\u00e4 rajoitukset on yksinkertaistettu nopeusrajojen lis\u00e4ksi kiihtyvyyden (nopeuden derivaatta eli kuinka nopeasti nopeus saa muuttua) ja nyk\u00e4yksen (kiihtyvyyden derivaatta eli kuinka nopeasti kiihtyvyys saa muuttua) maksimi- ja minimiarvoiksi.<\/p>\n Kun nopeusrajafunktio, kiihtyvyys ja nyk\u00e4ys tiedet\u00e4\u00e4n, voidaan laatia nopeusprofiili, joka noudattaa niit\u00e4. Nopeusprofiili voidaan tehd\u00e4 ja esitt\u00e4\u00e4 useilla eri tavoilla. Alla olevassa kuvassa nopeusprofiili on esitetty ajan funktiona. Kuvaajaan on piirretty lis\u00e4ksi nopeusrajafunktio, kiihtyvyys ja nyk\u00e4ys.<\/p>\n <\/p>\n Nopeusprofiiligeneraattorin on tarkoitus toimia osana olemassa olevaa laajempaa robotin automaatio-ohjelmistoa. Ohjelmiston nykyinen nopeusprofiiligeneraattori on kirjoitettu C++:lla, joka on yleisk\u00e4ytt\u00f6inen, staattisesti tyypitetty ja olio-ohjelmointia ja dynaamista muistinhallintaa tukeva ohjelmointikieli. Generaattorin toteutus on monimutkainen ja altis virheille; erityisesti muistinhallinnan kanssa pit\u00e4isi olla huolellinen, jotta vakavia virhetilanteita ei tapahtuisi.<\/p>\n Olemassa oleva algoritmi tekee nopeusprofiilin analyyttisesti eli se luo erilaisia polynomeja, jotka muodostavat nopeusprofiilin. Esimerkiksi yll\u00e4 olevassa kuvassa nopeuden funktio on aikav\u00e4lill\u00e4 0\u20132 s toisen asteen polynomi, aikav\u00e4lill\u00e4 2\u20134 s ensimm\u00e4isen asteen polynomi, aikav\u00e4lill\u00e4 4\u20136 s taas toisen asteen polynomi ja nopeusrajan saavutettuaan se on lyhyen hetken ajan vakio.<\/p>\n Koska generaattorin toteutus on vaikeasti ymm\u00e4rrett\u00e4v\u00e4 ja analyyttinen generointi- ja esitystapa on turhan monimutkainen tarpeeseen n\u00e4hden, p\u00e4\u00e4tettiin tehd\u00e4 uusi generaattori. Se p\u00e4\u00e4tettiin kirjoittaa Haskellilla, joka on (l\u00e4hes) t\u00e4ysin funktionaalinen, staattisesti tyypitetty ja laiskasti suoritettava ohjelmointikieli.<\/p>\n Uutta nopeusprofiiligeneraattoria varten tutkittiin erilaisia nopeusprofiilin generointi- ja esitystapoja. Nopeusprofiilin voi esitt\u00e4\u00e4 funktion sijaan listana diskreettej\u00e4 pisteit\u00e4; kukin piste sis\u00e4lt\u00e4\u00e4 ainakin nopeusarvon ja arvon ajalle tai etenem\u00e4lle. Nopeusprofiilin tuottavaksi algoritmiksi oli useampia vaihtoehtoja ja niist\u00e4 valittiin \u201dbenjik\u00f6ysialgoritmi\u201d, joka toimii yksinkertaisesti: se nostaa profiilin pisteiden nopeuksia hieman monien iteraatioiden ajan ja yritt\u00e4\u00e4 pit\u00e4\u00e4 profiilin annetuissa rajoissa.<\/p>\n Uusi algoritmi k\u00e4y yhden iteraation aikana nopeusprofiilin pisteet l\u00e4pi ja yritt\u00e4\u00e4 nostaa jokaisen pisteen nopeutta kerran. Kun yksi piste yritt\u00e4\u00e4 nostaa nopeuttaan, se kysyy kahdelta edelliselt\u00e4 ja kahdelta seuraavalta pisteelt\u00e4, k\u00e4yk\u00f6 nopeuden kasvatus niille. Muut pisteet voivat vastata ei, kyll\u00e4 tai kyll\u00e4, jos kyselyn kohteena oleva piste itsekin voi muuttaa nopeuttaan. Kysely voi l\u00e4hte\u00e4 etenem\u00e4\u00e4n profiilissa pidemm\u00e4llekin. Kun jossain vaiheessa jokin piste vastaa pelk\u00e4st\u00e4\u00e4n kyll\u00e4 tai ei, muut pisteet joko suorittavat nopeusmuutoksensa tai eiv\u00e4t tee muutoksia. Tarkastelua jatketaan seuraavasta pisteest\u00e4, joka ei ole muuttanut nopeuttaan.<\/p>\n Alla olevassa kuvassa on esimerkki profiilin ensimm\u00e4isist\u00e4 pisteist\u00e4 ja ensimm\u00e4isest\u00e4 iteraatiosta, jossa (pienin) nopeuden nostoaskel on 0,03125 m\/s ja aika-askel 0,125 s. Mill\u00e4\u00e4n pisteell\u00e4 ei ole vastalauseita nopeuksien nostoon.<\/p>\n <\/p>\n Uusi algoritmi pyrkii kasvattamaan nopeuden mahdollisimman suureksi mahdollisimman pian ja pit\u00e4m\u00e4\u00e4n nopeuden mahdollisimman suurena mahdollisimman pitk\u00e4\u00e4n, siit\u00e4kin huolimatta, ett\u00e4 profiilin seuraavien pisteiden nopeuksia jouduttaisiin pudottamaan. T\u00e4st\u00e4 toiminnallisuudesta seuraa aaltoilua iteroinnin alussa ja \u201dkuoppia\u201d lopulliseen nopeusprofiiliin.<\/p>\n Alla olevassa kuvassa on esitetty aallon syntyminen iteraatioiden 8, 10, 12 ja 14 aikana.<\/p>\n <\/p>\n Alla olevaan kuvaan on merkitty lopullisen profiilin \u201dkuopat\u201d violeteilla nuolilla.<\/p>\n <\/p>\n Uusi nopeusprofiiligeneraattori tuottaa suhteellisen hyvi\u00e4 nopeusprofiileja, ja profiilit noudattavat kiihtyvyyden ja nyk\u00e4yksen rajoituksia ja l\u00e4hes kaikkia nopeusrajoja. Algoritmissa on kuitenkin viel\u00e4 joitain jatkokehitystarpeita.<\/p>\n Veini Lehkonen<\/strong> T\u00e4m\u00e4 postaus perustuu diplomity\u00f6h\u00f6ni, jonka tarkoituksena oli uudelleensuunnitella itsen\u00e4isesti liikkuvan robotin nopeusprofiiligeneraattori. Nopeusprofiilin avulla voi suunnitella ja optimoida robotin liikett\u00e4. Mik\u00e4 on nopeusprofiili? Nopeusprofiili on kuvaus nopeudesta ajan tai matkan funktiona. Tunnetulle reitille voidaan laatia nopeusprofiili etuk\u00e4teen, jos tiedet\u00e4\u00e4n reittiin ja robottiin kohdistuvat rajoitukset. Itsen\u00e4isesti liikkuva robotti voi k\u00e4ytt\u00e4\u00e4 etuk\u00e4teen tehty\u00e4 nopeusprofiilia nopeutensa asetusarvoina ja…<\/p>\n","protected":false},"author":4,"featured_media":8371,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_lock_modified_date":false,"inline_featured_image":false,"footnotes":""},"categories":[30,104],"tags":[79,172,235,236,199],"class_list":["post-8360","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artikkelit","category-blogi","tag-diplomityo","tag-diplomityot","tag-haskell","tag-nopeusprofiili","tag-robotiikka","entry","has-media"],"_links":{"self":[{"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/posts\/8360"}],"collection":[{"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/comments?post=8360"}],"version-history":[{"count":0,"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/posts\/8360\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/media\/8371"}],"wp:attachment":[{"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/media?parent=8360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/categories?post=8360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atostek.com\/wp-json\/wp\/v2\/tags?post=8360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}Mik\u00e4 on nopeusprofiili?<\/h2>\n
Mit\u00e4 nopeusprofiilin tekemiseen tarvitaan?<\/h2>\n
Miksi olemassa oleva generaattori korvataan?<\/h2>\n
Millainen uusi nopeusprofiiligeneraattori on?<\/h2>\n
Yhteenveto<\/h2>\n
\n
\nSoftware designer<\/em><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"