{"id":34,"date":"2024-04-04T08:01:23","date_gmt":"2024-04-04T05:01:23","guid":{"rendered":"https:\/\/sisu.ut.ee\/rosak\/poora-markerite-vahel\/"},"modified":"2024-04-04T08:03:58","modified_gmt":"2024-04-04T05:03:58","slug":"poora-markerite-vahel","status":"publish","type":"page","link":"https:\/\/sisu.ut.ee\/rosak\/poora-markerite-vahel\/","title":{"rendered":"Kodut\u00f6\u00f6. P\u00f6\u00f6ra markerite vahel"},"content":{"rendered":"<blockquote>\n<p>\n\t\t<strong>Siin harjutuses saad oma seni\u00f5pitud teadmised proovile panna. Pane robot end kahe markeri vahel p\u00f6\u00f6rama.<\/strong>\n\t<\/p>\n<p>\n\t\tHarjutuse l\u00e4bimiseks on vaja robotit ja kaht AR markerit, mis on asetatud seintele roboti l\u00e4hedal.\n\t<\/p>\n<\/blockquote>\n<p>\n\tKirjuta kood, mis leiaks seinte pealt \u00fcles kaks AR markerit, ja keeraks robotit nende vahel. See t\u00e4hendab: robot peaks end keerama \u00fches suunas seni, kuni n\u00e4eb otsitavat markerit. Seej\u00e4rel peaks robot hakkama otsima teist markerit ja keerama end teises suunas, kuni selle leiab.\n<\/p>\n<p>\n\tN\u00e4ide roboti k\u00e4itumisest on siin videos:\n<\/p>\n<p>\n\t<\/p><div class=\"ratio ratio-16x9 mb-3\"><div class=\"video-placeholder-wrapper video-placeholder-wrapper--16x9\">\n\t\t\t    <div class=\"video-placeholder d-flex justify-content-center align-items-center\">\n\t\t\t        <div class=\"overlay text-white p-2 w-100 text-center d-block justify-content-center align-items-center\">\n\t\t\t            <div>Kolmandate osapoolte sisu n\u00e4gemiseks palun n\u00f5ustu k\u00fcpsistega.<\/div>\n\t\t\t            <button class=\"btn btn-secondary btn-sm mt-1 consent-change\">Muuda n\u00f5usolekut<\/button>\n\t\t\t        <\/div>\n\t\t\t    <\/div>\n\t\t\t<\/div>\n<\/div>\n\n<p>\n\t<\/p><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69d18fc79f41d-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69d18fc79f41d-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69d18fc79f41d-collapse\"><strong>Kui oled kinni j\u00e4\u00e4nud, ei oska koodi struktureerida ja soovid vihjet, siis vaata siia<\/strong><\/button>\n        <\/h2>\n        <div id=\"accordion-69d18fc79f41d-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69d18fc79f41d-heading\">\n            <div class=\"accordion-body\">Siin pakume \u00fche koodistruktuuri, millest v\u00f5id oma lahenduse luua. Siin on palju asju puudu \u2013 sinu \u00fclesanne on vajalikud l\u00fcngad t\u00e4ita.\n\n<pre>#!\/usr\/bin\/env python3\r\n# siin peaks importima k\u00f5ik vajaliku\r\n\r\n# siin on tegemist globaalse muutujaga\r\n# see t\u00e4hendab, et sellele muutujale saavad ligi k\u00f5ik funktsioonid\r\n# ning kui nad soovivad seda muuta, siis tuleb funktsiooni alguses talle seda \u00f6elda\r\n# vt allpool, kuidas seda on tehtud\r\nleitud_markeri_ID = None\r\n\r\ndef ar_message_handler(data):\r\n    global leitud_markeri_ID\r\n\r\n    if len(data.markers) &gt; 0:\r\n        for marker in data.markers:\r\n            rospy.loginfo(\"Detected marker with ID \" + str(marker.id))\r\n            # siin on hea koht, kus salvestada leitud markeri ID\r\n            # muutujasse leitud_markeri_ID\r\n    else:\r\n        rospy.loginfo(\"No AR markers detected.\")\r\n\r\ndef main():\r\n    global leitud_markeri_ID\r\n    \r\n    # siin peaks toimuma s\u00f5lme initsialiseerimine\r\n    # ning kuulutaja ja tellija loomine\r\n    \r\n    otsitava_markeri_ID = 1 # siin muutujas v\u00f5ib hoida endale sobiva markeri ID-d\r\n    \r\n    # lisaks v\u00f5iks siin paika panna, mis sagedusega while-ts\u00fckkel jookseb\r\n    \r\n    while not rospy.is_shutdown():\r\n        # siin tuleks teha k\u00f5ike, mida soovime pidevalt korrata\r\n        # n\u00e4iteks v\u00f5rrelda leitud markeri ID-d selle markeri ID-ga, mida otsime\r\n        # vajadusel vahetada \u00e4ra markeri ID, mida otsime\r\n        # ja kuulutada roboti liigutamiseks sobivat s\u00f5numit\r\n        # l\u00f5puks v\u00f5iks ts\u00fckli l\u00f5pus ka veidi aega \"magada\"\r\n\r\nif __name__=='__main__':\r\n    try:\r\n        main()\r\n    except rospy.ROSInterruptException:\r\n        pass<\/pre>\n<blockquote class=\"os-kollane\">\n<h4>\n\t\tGlobaalsed muutujad?<br>\n\t<\/h4>\n<p>\n\t\t\u00dclalolev kood kasutab <strong>globaalseid muutujaid<\/strong> (<em>global variables<\/em>). See on efektiivne lahendus, kuigi mitte v\u00e4ga hea koodipraktika suuremates arendustes. Kui soovid nende kohta rohkem teada, siis v\u00f5id Internetist infot otsida \u2013 siin proovisime k\u00f5ik vajaliku nende kasutamiseks ette anda.\n\t<\/p>\n<p>\n\t\tKui aga oled arendajataustaga ja ei soovi globaalseid muutujaid kasutada (sest nad on kurjast), siis v\u00f5id vabalt kasutada ka m\u00f5nd muud lahendust. Moodul 2 k\u00e4igus kasutatud porgandiotsimise kood v\u00e4ldib klasside abil globaalseid muutujaid.\n\t<\/p>\n<\/blockquote>\n<p>\n\t<\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Siin harjutuses saad oma seni\u00f5pitud teadmised proovile panna. Pane robot end kahe markeri vahel p\u00f6\u00f6rama. Harjutuse l\u00e4bimiseks on vaja robotit ja kaht AR markerit, mis on asetatud seintele roboti l\u00e4hedal. Kirjuta kood, mis leiaks seinte pealt \u00fcles kaks AR markerit, &#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-34","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/34","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=34"}],"version-history":[{"count":1,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/34\/revisions"}],"predecessor-version":[{"id":367,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/34\/revisions\/367"}],"wp:attachment":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/media?parent=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}