{"id":6,"date":"2024-04-04T08:01:20","date_gmt":"2024-04-04T05:01:20","guid":{"rendered":"https:\/\/sisu.ut.ee\/rosak\/roboti-liikumine\/"},"modified":"2024-04-04T08:03:59","modified_gmt":"2024-04-04T05:03:59","slug":"roboti-liikumine","status":"publish","type":"page","link":"https:\/\/sisu.ut.ee\/rosak\/roboti-liikumine\/","title":{"rendered":"2. Roboti liikumine"},"content":{"rendered":"<blockquote>\n<p>\n\t\t<strong><span id=\"docs-internal-guid-b93185da-7fff-4acd-d9b3-ce1b758a2c80\">Oleme juba p\u00e4ris palju ROSis robotit liigutanud. Kuidas see tegelikult toimib?<\/span><\/strong>\n\t<\/p>\n<\/blockquote>\n<p>\n\t<span id=\"docs-internal-guid-55adefb5-7fff-75f7-b723-fd0c2d4498b5\">Igal ROSi toega robotil on miski, mille nimi on ROSi draiver. Mobiilsel robotil, n\u00e4iteks robotondil, on draiveriks s\u00f5lm, mis tellib \u00fcht olulist rubriiki: <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span>. Selles rubriigis kuulutatud s\u00f5numid sisaldavad infot selle kohta, <\/span><strong><span>kuidas<\/span><\/strong><span> me soovime <\/span><strong><span>robotit liigutada<\/span><\/strong><span>. Draiveris\u00f5lm v\u00f5tab need s\u00f5numid ja teisendab need sobivateks kiirusteks k\u00f5igi mootorite jaoks, pannes roboti liikuma just selle kiirusega ja selles suunas, nagu oli kirjeldatud <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span> rubriigist saadud s\u00f5numis.<\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-3a6c6f8f-7fff-6da8-d8d3-6859b5c501bd\">Seega kui soovime programmeerida roboti kindlat moodi liikuma, siis tuleb meil luua s\u00f5lm, mis kuulutab s\u00f5numeid rubriigis <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span>. Selleks on vaja teada, kuidas <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span> rubriigi s\u00f5numid v\u00e4lja n\u00e4evad.<\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-36652158-7fff-cd62-27b5-83f7d81f1dc4\">Rubriigi <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span> s\u00f5numitel on kindel struktuur ehk t\u00fc\u00fcp nimega <\/span><strong><span>Twist<\/span><\/strong><span>. Twist kuulub kategooriasse nimega <span style=\"font-family:Courier New,Courier,monospace\">geometry_msgs<\/span> ja sisaldab <\/span><strong><span>kaht vektorit<\/span><\/strong><span>, millest <\/span><strong><span>kummaski<\/span><\/strong><span> on <\/span><strong><span>kolm reaalarvu<\/span><\/strong><span>. Esimesed kolm moodustavad vektori nimega <\/span><em><span>linear<\/span><\/em><span> ja kirjeldavad <\/span><strong><span>lineaarset liikumist<\/span><\/strong><span> kolmem\u00f5\u00f5tmelise ruumi kolmes suunas. Teised kolm moodustavad vektori nimega <\/span><em><span>angular<\/span><\/em><span> ja kirjeldavad roboti <\/span><strong><span>p\u00f6\u00f6rdliikumist<\/span><\/strong><span> \u00fcmber nendesamade kolme telje.<\/span>\n<\/p>\n<p>\n\t<img loading=\"lazy\" decoding=\"async\" width=\"377\" height=\"168\" class=\"alignnone wp-image-89\" src=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/twist2.png\" title=\"twist2.png\" alt=\".\" srcset=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/twist2.png 377w, https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/twist2-300x134.png 300w\" sizes=\"auto, (max-width: 377px) 100vw, 377px\">\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-fd1693ce-7fff-a23a-bd83-5b183bc43ff4\">T\u00e4psemini: vaatame meie robotit. Robotont suudab liikuda edasi ja tagasi ning end kohapeal p\u00f6\u00f6rata. Oma rataste t\u00f5ttu suudab ta aga ka liikuda k\u00fclgsuunas. ROSis on roboti liikumise koordinaats\u00fcsteemi <\/span><strong><span>x-telg<\/span><\/strong><span> suunatud <\/span><strong><span>ettepoole<\/span><\/strong><span>, <\/span><strong><span>y-telg<\/span><span> <\/span><span>vasakule<\/span><\/strong><span> ja <\/span><strong><span>z-telg \u00fcles<\/span><\/strong><span>. Twist-t\u00fc\u00fcpi s\u00f5numis t\u00e4histab esimene kolmest arvust koosnev vektor <\/span><strong><span>kiiruseid<\/span><\/strong><span> (\u00fchikuks m\/s) nendes kolmes teljes.<\/span> Selle vektori nimi on <span style=\"font-family:Courier New,Courier,monospace\">linear<\/span>.\n<\/p>\n<p>\n\t<img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"720\" class=\"alignnone wp-image-90\" src=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/linear.gif\" title=\"linear.gif\" alt=\".\">\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-fa7738cd-7fff-ac83-339c-b30fb64613b9\">Twist-s\u00f5numid on m\u00f5eldud olema universaalsed, et neid saaks kasutada iga roboti jaoks: ka nende jaoks, mis saavad liikuda \u00fcles ja alla, s.t. m\u00f6\u00f6da z-telge. Meie robot seda teha ei suuda.<\/span>\n<\/p>\n<p>\n\t<img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"720\" class=\"alignnone wp-image-91\" src=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/ibelieveicanfly.gif\" title=\"ibelieveicanfly.gif\" alt=\".\">\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-d22f0b1f-7fff-38c5-d80c-167747693dd3\">See-eest suudab ta end selle \u00fcmber p\u00f6\u00f6rata. Siin tuleb m\u00e4ngu teine vektor, nimega <span style=\"font-family:Courier New,Courier,monospace\">angular<\/span>. Sarnaselt sisaldab see kolme arvu, mis vastavad n\u00fc\u00fcd <\/span><strong><span>nurkkiirustele<\/span><\/strong><span> vastavate telgede \u00fcmber: x-telg, y-telg ja z-telg (\u00fchikuks radiaan sekundis ehk rad\/s). Meie robot suudab p\u00f6\u00f6relda ainult \u00fcmber z-telje.<\/span>\n<\/p>\n<p>\n\t<img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"720\" class=\"alignnone wp-image-92\" src=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/angular.gif\" title=\"angular.gif\" alt=\".\">\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-859d6670-7fff-77de-8134-c2bd7d50654c\">\u00dches\u00f5naga, et robotit kindlal viisil liikuma saada, on meil vaja luua sobiv Twist-t\u00fc\u00fcpi s\u00f5num ja see <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span> rubriiki kuulutada. Robotondi jaoks on Twist-s\u00f5numis olulised <span style=\"font-family:Courier New,Courier,monospace\">linear.x<\/span>, <span style=\"font-family:Courier New,Courier,monospace\">linear.y<\/span> ja <span style=\"font-family:Courier New,Courier,monospace\">angular.z<\/span> komponendid.<\/span>\n<\/p>\n<p>\n\t<img loading=\"lazy\" decoding=\"async\" width=\"377\" height=\"168\" class=\"alignnone wp-image-93\" src=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/twist1.png\" title=\"twist1.png\" alt=\".\" srcset=\"https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/twist1.png 377w, https:\/\/sisu.ut.ee\/wp-content\/uploads\/sites\/560\/twist1-300x134.png 300w\" sizes=\"auto, (max-width: 377px) 100vw, 377px\">\n<\/p>\n<blockquote class=\"os-kollane\">\n<h4>\n\t\t<span id=\"docs-internal-guid-126dcd34-7fff-bd30-c355-100f58aebaa9\">Kuidas me enne robotit liigutasime?<\/span><br>\n\t<\/h4>\n<p>\n\t\t<span id=\"docs-internal-guid-0a6953a3-7fff-28fa-8027-a3b8310d14e6\">Varasemalt robotondi juhtimiseks kasutatud teleop_twist_keyboard.py s\u00f5lm pani roboti v\u00f5i selle simulatsiooni liikuma t\u00e4pselt samal p\u00f5him\u00f5ttel. Antud s\u00f5lm kuulutas rubriigis cmd_vel Twist-t\u00fc\u00fcpi s\u00f5numeid, nii et iga s\u00f5numi linear.x, linear.y ja angular.z komponentite arvv\u00e4\u00e4rtused muutusid vastavalt arvuti klaviatuuril vajutatud klahvidele.<\/span>\n\t<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Oleme juba p\u00e4ris palju ROSis robotit liigutanud. Kuidas see tegelikult toimib? Igal ROSi toega robotil on miski, mille nimi on ROSi draiver. Mobiilsel robotil, n\u00e4iteks robotondil, on draiveriks s\u00f5lm, mis tellib \u00fcht olulist rubriiki: cmd_vel. Selles rubriigis kuulutatud s\u00f5numid sisaldavad &#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-6","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/6","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=6"}],"version-history":[{"count":1,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":395,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/6\/revisions\/395"}],"wp:attachment":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/media?parent=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}