{"id":47,"date":"2024-04-04T08:01:25","date_gmt":"2024-04-04T05:01:25","guid":{"rendered":"https:\/\/sisu.ut.ee\/rosak\/lisaulesanne-autonoomne-navigeerimine-koodis\/"},"modified":"2024-04-04T08:03:57","modified_gmt":"2024-04-04T05:03:57","slug":"lisaulesanne-autonoomne-navigeerimine-koodis","status":"publish","type":"page","link":"https:\/\/sisu.ut.ee\/rosak\/lisaulesanne-autonoomne-navigeerimine-koodis\/","title":{"rendered":"Lisa\u00fclesanne: Navigeerimise sihtm\u00e4rgid koodis"},"content":{"rendered":"<blockquote>\n<p>\n\t\t<strong>Eelmises harjutuses kasutasime autonoomse navigeerimise sihtm\u00e4rgi seadmiseks RVizis olevat 2D Nav Goal nuppu. Arendajal v\u00f5ib aga tekkida soov saata robotile navigeerimisk\u00e4sk koodis, et siis p\u00e4rast roboti \u00f5igesse kohta j\u00f5udmist saaks tal lasta sooritada m\u00f5nd muud vajalikku tegevust. Siin harjutuses vaatame, kuidas anda robotile sihtpunkt ette Pythoni koodis.<\/strong>\n\t<\/p>\n<\/blockquote>\n<p>\n\tK\u00e4ivita k\u00f5ik kimbud ja s\u00f5lmed simulatsioonis navigeerimise jaoks samamoodi, nagu eelmises harjutuses. Soovi korral v\u00f5id k\u00fcll RVizi visualiseerimise k\u00e4ivitamata j\u00e4tta ja vaadata vaid Gazebo akent.\n<\/p>\n<p>\n\tSiis loo endale sobiva kimbu <span style=\"font-family:Courier New,Courier,monospace\">scripts<\/span>-kausta uus koodifail, mille sisu leiad altpoolt. M\u00e4rgi see k\u00e4ivitatavaks failiks, kompileeri catkini t\u00f6\u00f6ruum ja laadi see. L\u00f5puks k\u00e4ivita \u00e4sjaloodud s\u00f5lm.\n<\/p>\n<pre>#!\/usr\/bin\/env python3\r\nimport rospy\r\nimport actionlib\r\nfrom move_base_msgs.msg import MoveBaseAction, MoveBaseGoal\r\n\r\ndef send_goal_client():\r\n    \r\n    client = actionlib.SimpleActionClient('move_base',MoveBaseAction)\r\n    client.wait_for_server()\r\n\r\n    goal = MoveBaseGoal()\r\n    x = [0.2, 2.2]\r\n    y = [1.0, 2.0]\r\n    goal.target_pose.header.frame_id = \"map\"\r\n    goal.target_pose.header.stamp = rospy.Time.now()\r\n    goal.target_pose.pose.position.x = x[k]\r\n    goal.target_pose.pose.position.y = y[k]\r\n    goal.target_pose.pose.orientation.w = 1.0\r\n\r\n    client.send_goal(goal)\r\n    wait = client.wait_for_result()\r\n    if not wait:\r\n        rospy.logerr(\"Action server not available!\")\r\n        rospy.signal_shutdown(\"Action server not available!\")\r\n    else:\r\n        return client.get_result()\r\n\r\nif __name__ == '__main__':\r\n    global k\r\n    try:\r\n        rospy.init_node('send_goal')\r\n        k = 0\r\n        result_1 = send_goal_client()\r\n        if result_1:\r\n            rospy.loginfo(\"Goal 1 reached!\")\r\n            k += 1\r\n        result_2 = send_goal_client()\r\n        if result_2:\r\n            rospy.loginfo(\"Goal 2 reached!\")\r\n    except rospy.ROSInterruptException:\r\n        rospy.loginfo(\"Navigation finished.\")<\/pre>\n<p>\n\tSee s\u00f5lm suunab roboti kahte erinevasse sihtpunkti: koordinaatidel (0,2; 1,0) ja (2,2; 2,0). Seej\u00e4rel l\u00f5petab ta t\u00f6\u00f6.\n<\/p>\n<p>\n\tV\u00f5id koodi sisu endale sobival viisil muuta ja sellega m\u00e4ngida. Kui soovid, v\u00f5id katsetada ka p\u00e4ris robotil \u2013 siis on kindlasti vaja teistsuguseid sihtm\u00e4rgikoordinaate.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eelmises harjutuses kasutasime autonoomse navigeerimise sihtm\u00e4rgi seadmiseks RVizis olevat 2D Nav Goal nuppu. Arendajal v\u00f5ib aga tekkida soov saata robotile navigeerimisk\u00e4sk koodis, et siis p\u00e4rast roboti \u00f5igesse kohta j\u00f5udmist saaks tal lasta sooritada m\u00f5nd muud vajalikku tegevust. Siin harjutuses vaatame, &#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-47","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/47","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=47"}],"version-history":[{"count":1,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/47\/revisions"}],"predecessor-version":[{"id":354,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/47\/revisions\/354"}],"wp:attachment":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/media?parent=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}