{"id":33,"date":"2024-04-04T08:01:23","date_gmt":"2024-04-04T05:01:23","guid":{"rendered":"https:\/\/sisu.ut.ee\/rosak\/euleri-nurkadeks-teisendamine\/"},"modified":"2024-04-04T08:03:58","modified_gmt":"2024-04-04T05:03:58","slug":"euleri-nurkadeks-teisendamine","status":"publish","type":"page","link":"https:\/\/sisu.ut.ee\/rosak\/euleri-nurkadeks-teisendamine\/","title":{"rendered":"Lisamaterjal: Euleri nurkadeks teisendamine"},"content":{"rendered":"<blockquote>\n<p>\n\t\t<strong>Nagu varem \u00f5ppisime, siis kimp <span style=\"font-family:Courier New,Courier,monospace\">ar_track_alvar<\/span> annab meile teada orientatsiooni kvaternionina. Selleks, et seda inimm\u00f5istetaval kujul t\u00f5lgendada, teisendame kvaternioni Euleri nurkadeks.<\/strong>\n\t<\/p>\n<\/blockquote>\n<p>\n\t<span id=\"docs-internal-guid-dd8b5f38-7fff-ec00-7fd9-086e386d1f84\">AR m\u00e4rgiste p\u00f5hjal roboti positsiooni hindamine on lihtne, sest positsiooni komponentide (x, y, z) \u00fchikuteks on meetrid. N\u00e4eme positsiooni v\u00e4\u00e4rtuste j\u00e4rgi, mitu meetrit igas teljes robot m\u00e4rgisest paikneb. Orientatsiooniga on natuke keerulisem.<\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-32fb35b4-7fff-1318-fecd-f48edbbc9b8c\">Tuletame meelde, millised on orientatsiooni komponendid, kasutades j\u00e4rgnevat pilti.<\/span>\n<\/p>\n<p>\n\t<img loading=\"lazy\" decoding=\"async\" width=\"1284\" height=\"697\" class=\"alignnone wp-image-112\" src=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/position.png\" title=\"position.png\" alt=\".\" srcset=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/position.png 1284w, https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/position-300x163.png 300w, https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/position-1024x556.png 1024w, https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/position-768x417.png 768w\" sizes=\"auto, (max-width: 1284px) 100vw, 1284px\">\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-7fd94f07-7fff-a7e4-00b6-00f78edd62b9\">Sarnaselt positsiooniga n\u00e4eme ka orientatsiooni puhul komponente x, y, z, lisaks veel w. Vaatamata sarnasusele ei ole aga tegemist meetritega, ega isegi nurkadega kraadides. Komponendid x, y, z, w moodustavad <strong>kvaternioni<\/strong>, mis on matemaatiline konstruktsioon, mida saab kasutada nurkade kirjeldamiseks kolmem\u00f5\u00f5tmelises ruumis.<\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-a4483032-7fff-1d6f-236a-a688254afa78\">Kvaternioni komponentide p\u00f5hjal roboti juhtimine on keeruline, sest nende v\u00e4\u00e4rtuste muutumises on raske n\u00e4ha inimm\u00f5istetavat mustrit. Roboti liigutamiseks peame AR m\u00e4rgise asendi p\u00f5hjal robotile andma lineaarse- ja nurkkiiruse, aga see on keeruline, kui me ei tea, mis vahemikus arve on \u00fcldse vaja teisendada. Seet\u00f5ttu on kasulik teisendada esmalt kvaternionid Euleri nurkadeks.<\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-ee9ed713-7fff-0dd5-31a7-bc580246500f\">Selle jaoks on \u00f5nneks juba olemas sobivad funktsioonid. Pythoni jaoks on olemas teek nimega <span style=\"font-family:Courier New,Courier,monospace\">tf<\/span>, millel on moodul <span style=\"font-family:Courier New,Courier,monospace\">transformations<\/span>. Selles moodulis on funktsioon nimega <span style=\"font-family:Courier New,Courier,monospace\">euler_from_quaternion()<\/span>, mille sisendiks on kvaternion ja v\u00e4ljundiks on j\u00e4rjend Euleri nurkadega. Allpool on toodud n\u00e4ide <span style=\"font-family:Courier New,Courier,monospace\">tf.transformations.euler_from_quaternion()<\/span> funktsiooni kasutamisest.<\/span>\n<\/p>\n<pre dir=\"ltr\" style=\"line-height: 1.68;margin-top: 0pt;margin-bottom: 0pt\"><span id=\"docs-internal-guid-3a69354b-7fff-a08d-4c14-b60718373b03\">import<\/span><span> <\/span><span>tf<\/span><span>\r\n...\r\ndef callback(data):\r\n    for<\/span><span> marker <\/span><span>in<\/span><span> data<\/span><span>.<\/span><span>markers:<\/span>\r\n<span>        marker_ori <\/span><span>=<\/span><span> (<\/span>\r\n<span>            marker<\/span><span>.<\/span><span>pose<\/span><span>.<\/span><span>pose<\/span><span>.<\/span><span>orientation<\/span><span>.<\/span><span>x,<\/span>\r\n<span>            marker<\/span><span>.<\/span><span>pose<\/span><span>.<\/span><span>pose<\/span><span>.<\/span><span>orientation<\/span><span>.<\/span><span>y,<\/span>\r\n<span>            marker<\/span><span>.<\/span><span>pose<\/span><span>.<\/span><span>pose<\/span><span>.<\/span><span>orientation<\/span><span>.<\/span><span>z,<\/span>\r\n<span>            marker<\/span><span>.<\/span><span>pose<\/span><span>.<\/span><span>pose<\/span><span>.<\/span><span>orientation<\/span><span>.<\/span><span>w)<\/span>\r\n\r\n<span>        euler <\/span><span>=<\/span><span> tf<\/span><span>.<\/span><span>transformations<\/span><span>.<\/span><span>euler_from_quaternion(marker_ori)<\/span>\r\n<span>        roll <\/span><span>=<\/span><span> euler[<\/span><span>0<\/span><span>]<\/span>\r\n<span>        yaw <\/span><span>=<\/span><span> euler[<\/span><span>1<\/span><span>]<\/span>\r\n<span>        pitch <\/span><span>=<\/span><span> euler[<\/span><span>2<\/span><span>]<\/span><\/pre>\n<p dir=\"ltr\" style=\"line-height:1.68;margin-top:0pt;margin-bottom:0pt\">\n\t\u00a0\n<\/p>\n<p dir=\"ltr\" style=\"line-height:1.68;margin-top:0pt;margin-bottom:0pt\">\n\tPane t\u00e4hele, et siin koodin\u00e4ites on tagasikutsefunktsiooni nimi <span style=\"font-family:Courier New,Courier,monospace\">callback<\/span>. See on toodud lihtsalt n\u00e4itena \u2013 peaksid oma koodis kasutama siiski enda varem loodud tagasikutsefunktsiooni. Siinse koodin\u00e4ite eeskujul v\u00f5id proovida ka oma koodis kvaternioni Euleri nurkadeks teisendada.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nagu varem \u00f5ppisime, siis kimp ar_track_alvar annab meile teada orientatsiooni kvaternionina. Selleks, et seda inimm\u00f5istetaval kujul t\u00f5lgendada, teisendame kvaternioni Euleri nurkadeks. AR m\u00e4rgiste p\u00f5hjal roboti positsiooni hindamine on lihtne, sest positsiooni komponentide (x, y, z) \u00fchikuteks on meetrid. N\u00e4eme positsiooni &#8230;<\/p>\n","protected":false},"author":98,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"class_list":["post-33","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/users\/98"}],"replies":[{"embeddable":true,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":1,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/33\/revisions"}],"predecessor-version":[{"id":368,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/33\/revisions\/368"}],"wp:attachment":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/media?parent=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}