{"id":10,"date":"2024-04-04T08:01:21","date_gmt":"2024-04-04T05:01:21","guid":{"rendered":"https:\/\/sisu.ut.ee\/rosak\/kuulutaja-kood\/"},"modified":"2024-04-04T08:03:59","modified_gmt":"2024-04-04T05:03:59","slug":"kuulutaja-kood","status":"publish","type":"page","link":"https:\/\/sisu.ut.ee\/rosak\/kuulutaja-kood\/","title":{"rendered":"6. Kuulutaja kood"},"content":{"rendered":"<blockquote>\n<p>\n\t\t<strong><span id=\"docs-internal-guid-51bad00f-7fff-6233-e09c-913bcf75d3a7\">Vaatame n\u00fc\u00fcd, kuidas kirjutada ROSi koodi.<\/span><\/strong>\n\t<\/p>\n<p>\n\t\t<em><span id=\"docs-internal-guid-00bf4c2e-7fff-88d3-2a71-40cfa66955db\">Samm-sammulise juhendi vaatamiseks kliki harjutuse vahepealkirjadele.<\/span><\/em>\n\t<\/p>\n<\/blockquote>\n<blockquote class=\"os-kollane\">\n<h4>\n\t\t<span id=\"docs-internal-guid-f810a3d0-7fff-1ae4-b7e6-c772bc8dc0da\">Pane t\u00e4hele!<\/span><br>\n\t<\/h4>\n<p>\n\t\t<span id=\"docs-internal-guid-6aed9477-7fff-4b2f-ac4f-fdf76126253e\">Pythoni koodi kirjutades p\u00f6\u00f6ra t\u00e4helepanu ridade taanetele! Kood peab alati olema \u00f5igesti taandatud.<\/span>\n\t<\/p>\n<\/blockquote>\n<p>\n\t<span id=\"docs-internal-guid-b7cad067-7fff-f06b-2770-cca803b25e57\">Loome uue tekstifaili ja anname selle nimeks n\u00e4iteks <span style=\"font-family:Courier New,Courier,monospace\">simple_velocity_publisher.py<\/span>. Selle sisse hakkame kirjutama oma koodi.<\/span>\n<\/p>\n<p>\n\t<span><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69d138af7c4d2-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69d138af7c4d2-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69d138af7c4d2-collapse\"><strong>Koodi p\u00e4is<\/strong><\/button>\n        <\/h2>\n        <div id=\"accordion-69d138af7c4d2-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69d138af7c4d2-heading\">\n            <div class=\"accordion-body\">\n\n<pre dir=\"ltr\" style=\"line-height: 1.38;margin-top: 0pt;margin-bottom: 0pt\"><span style=\"color:#b22222\">#!\/usr\/bin\/env python3\r\nimport rospy\r\nfrom geometry_msgs.msg import Twist<\/span><\/pre>\n<p>\n\t<span>Alustame faili kolme tekstirea lisamisest (need on kirjas \u00fclal).<\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-dae934e4-7fff-6e70-4424-db104b0b83ed\">K\u00f5igepealt peame ROSile teada andma, kust leida Pythoni koodifailide k\u00e4ivitamiseks vajalik programm.<\/span><span id=\"docs-internal-guid-1197e25f-7fff-9ecf-e609-65c33e52c8ce\"> Selleks lisame faili esimesele reale spetsiaalse kommentaari<\/span><span> <span style=\"font-family:Courier New,Courier,monospace\">#!\/usr\/bin\/env python3<\/span>.<\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-2ed177f9-7fff-8d29-3111-0965e496f8c9\">J\u00e4rgmiseks peame <\/span><span>importima<\/span><span> kaks moodulit. Esimene neist on <span style=\"font-family:Courier New,Courier,monospace\">rospy<\/span> \u2013 see lubab meil kirjutada Pythonis ROSi koodi. Viimaseks impordime s\u00f5numit\u00fc\u00fcbi <span style=\"font-family:Courier New,Courier,monospace\">Twist<\/span>, kuna soovime kuulutama hakata just seda t\u00fc\u00fcpi s\u00f5numeid.<\/span>\n<\/p>\n<p>\n\t<span><\/span><\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div><\/span>\n<\/p>\n<p>\n\t<span><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69d138af7c4da-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69d138af7c4da-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69d138af7c4da-collapse\"><strong>S\u00f5lme loomine<\/strong><\/button>\n        <\/h2>\n        <div id=\"accordion-69d138af7c4da-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69d138af7c4da-heading\">\n            <div class=\"accordion-body\">\n\n<pre dir=\"ltr\" style=\"line-height: 1.38;margin-top: 0pt;margin-bottom: 0pt\"><span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">#!\/usr\/bin\/env python3<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">import rospy<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">from geometry_msgs.msg import Twist<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">rospy.init_node(\"velocity_publisher\")<\/span><\/pre>\n<p><span>Et meie Pythoni koodist saaks ROSi s\u00f5lm, tuleb ta s\u00f5lmena l\u00e4htestada ehk initsialiseerida. Koodis saame seda teha, kutsudes v\u00e4lja initsialiseerimise funktsiooni <span style=\"font-family:Courier New,Courier,monospace\">rospy.init_node<\/span> ja andes sellele argumendiks s\u00f5lme soovitud nime, n\u00e4iteks <span style=\"font-family:Courier New,Courier,monospace\">velocity_publisher<\/span>.<\/span><\/p>\n<p>\n\t<span><\/span><\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div><\/span>\n<\/p>\n<p>\n\t<span><div class=\"accordion mb-3\">\n        <div class=\"accordion-item accordion-item--white\">\n        <h2 class=\"accordion-header\" id=\"accordion-69d138af7c4e1-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69d138af7c4e1-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69d138af7c4e1-collapse\"><strong>Kuulutaja loomine<\/strong><\/button>\n        <\/h2>\n        <div id=\"accordion-69d138af7c4e1-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69d138af7c4e1-heading\">\n            <div class=\"accordion-body\">\n\n<pre dir=\"ltr\" style=\"line-height: 1.38;margin-top: 0pt;margin-bottom: 0pt\"><span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">#!\/usr\/bin\/env python3<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">import rospy<\/span>\r\nfrom geometry_msgs.msg import Twist\r\n\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">rospy.init_node(\"velocity_publisher\")<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">velocity_pub = rospy.Publisher(\"cmd_vel\", Twist, queue_size=0)\r\nrospy.sleep(2)<\/span>\r\n<\/pre>\n<p>\n\t<span>Kuna robotile liikumisk\u00e4skude edastamiseks tuleb meil asuda kuulutama Twist-t\u00fc\u00fcpi s\u00f5numeid rubriigis <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span>, siis j\u00e4rgmiseks lisamegi oma loodud s\u00f5lmele \u00fche kuulutaja. (V\u00f5ime kuulutajast m\u00f5elda kui uuest muutujast, millel tuleb anda ka nimi, antud juhul anname kuulutajale nimeks <span style=\"font-family:Courier New,Courier,monospace\">velocity_pub<\/span>.) Kuulutaja tegemiseks kasutame \u00a0funktsiooni <span style=\"font-family:Courier New,Courier,monospace\">Publisher<\/span>, mis asub <span style=\"font-family:Courier New,Courier,monospace\">rospy<\/span> moodulis. See funktsioon ootab sisendina kolme argumenti: rubriigi nime, milles soovime kuulutada, s\u00f5numit\u00fc\u00fcpi, mis kirjeldab selles rubriigis kuulutatavaid s\u00f5numeid, ja j\u00e4rjekorra suurust. Neist esimese v\u00e4\u00e4rtuseks anname <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span> (jutum\u00e4rkides!), teise v\u00e4\u00e4rtuseks Twist ja j\u00e4rjekorra suuruseks 0, sest me ei taha, et s\u00f5numid j\u00e4rjekorras ootaks:<\/span><span> <span style=\"font-family:Courier New,Courier,monospace\">rospy.Publisher(\u201ccmd_vel\u201d, Twist, queue_size=0)<\/span><\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-78cd125a-7fff-5dca-d591-7e5902ef274c\">See funktsiooni v\u00e4ljakutse tagastab meile objekti, millest v\u00f5ime m\u00f5elda kui meie kuulutajast. Selleks, et seda hiljem kasutada ja sinna meile sobivaid s\u00f5numeid saata, m\u00e4\u00e4rame ta muutuja <span style=\"font-family:Courier New,Courier,monospace\">velocity_pub<\/span> v\u00e4\u00e4rtuseks: <\/span><span style=\"font-family:Courier New,Courier,monospace\">velocity_pub = rospy.Publisher(\u201ccmd_vel\u201d, Twist, queue_size=0)<\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-78cd125a-7fff-5dca-d591-7e5902ef274c\">Viimaseks lisame rea, mis paneb koodi ootama kaks sekundit enne j\u00e4tkamist: <span style=\"font-family:Courier New,Courier,monospace\">rospy.sleep(2)<\/span>. See lubab s\u00fcsteemil p\u00e4rast kuulutaja loomist k\u00f5ik vajalikud toimingud l\u00f5petada, enne kui hakkame sinna s\u00f5numeid saatma \u2013 meil ei ole sellega kiiret.<\/span>\n<\/p>\n<blockquote class=\"os-kollane\">\n<h4>\n\t\t<span id=\"docs-internal-guid-41dfdcba-7fff-0dec-5834-f5641c3b1ba4\">Pane t\u00e4hele!<\/span><br>\n\t<\/h4>\n<p>\n\t\t<span id=\"docs-internal-guid-9e8fd62a-7fff-2746-2329-ba3f9fefdf68\">\u00c4ra lisa rubriigi nime algusesse kaldkriipsu. Nii hoiame koodi kasutusv\u00f5imalused paindlikumad.<\/span>\n\t<\/p>\n<\/blockquote>\n<p>\n\t<span><\/span><\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div><\/span>\n<\/p>\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-69d138af7c4e9-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69d138af7c4e9-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69d138af7c4e9-collapse\"><strong>Twist-s\u00f5numi loomine<\/strong><\/button>\n        <\/h2>\n        <div id=\"accordion-69d138af7c4e9-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69d138af7c4e9-heading\">\n            <div class=\"accordion-body\">\n\n<pre dir=\"ltr\" style=\"line-height: 1.38;margin-top: 0pt;margin-bottom: 0pt\"><span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">#!\/usr\/bin\/env python3<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">import rospy<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">from geometry_msgs.msg import Twist<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">rospy.init_node(\"velocity_publisher\")<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">velocity_pub = rospy.Publisher(\"cmd_vel\", Twist, queue_size=0)<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">rospy.sleep(2)<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel = Twist()<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.linear.x = 0.1<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.linear.y = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.linear.z = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.angular.x = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.angular.y = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.angular.z = 0.0<\/span><\/pre>\n<p>\n\tT\u00fchja Twist-s\u00f5numi loomiseks kasutame funktsiooni <span style=\"font-family:Courier New,Courier,monospace\">Twist()<\/span>. Sedasi loodud s\u00f5numi m\u00e4\u00e4rame muutuja <span style=\"font-family:Courier New,Courier,monospace\">robot_vel<\/span> v\u00e4\u00e4rtuseks.\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-1f6fc9a6-7fff-9a2f-7162-c17ce5a0a750\">Seej\u00e4rel saame Twist-s\u00f5numi v\u00e4ljadele \u00fckshaaval ligi, lisades vastloodud muutujale l\u00f5ppu, missugust komponenti soovime muuta v\u00f5i lugeda: n\u00e4iteks <span style=\"font-family:Courier New,Courier,monospace\">.linear.x<\/span> v\u00f5i <span style=\"font-family:Courier New,Courier,monospace\">.angular.z<\/span>. Kasutame seda, et anda k\u00f5igile Twist-s\u00f5numi v\u00e4ljadele v\u00e4\u00e4rtuseks 0, peale lineaarse liikumise x-komponendi, mille v\u00e4\u00e4rtuseks anname 0.1. See peaks panema meie roboti otsesuunas edasi liikuma kiirusega 0.1 m\/s.<\/span>\n<\/p>\n<p>\n\t<\/p><\/div>\n        <\/div>\n        <\/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-69d138af7c4f1-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69d138af7c4f1-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69d138af7c4f1-collapse\"><strong>Twist-s\u00f5numi kuulutamine<\/strong><\/button>\n        <\/h2>\n        <div id=\"accordion-69d138af7c4f1-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69d138af7c4f1-heading\">\n            <div class=\"accordion-body\">\n\n<pre dir=\"ltr\" style=\"line-height: 1.38;margin-top: 0pt;margin-bottom: 0pt\"><span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">#!\/usr\/bin\/env python3<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">import rospy<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">from geometry_msgs.msg import Twist<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">rospy.init_node(\"velocity_publisher\")<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">velocity_pub = rospy.Publisher(\"cmd_vel\", Twist, queue_size=0)<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">rospy.sleep(2)<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel = Twist()<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.linear.x = 0.1<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.linear.y = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.linear.z = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.angular.x = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.angular.y = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">robot_vel.angular.z = 0.0<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">velocity_pub.publish(robot_vel)<\/span><\/pre>\n<p>\n\tN\u00fc\u00fcd kui s\u00f5numi sisu on kirjeldatud, on viimase sammuna tarvis see s\u00f5num rubriigis <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span> kuulutada. Selleks kasutame eespool defineeritud kuulutajat nimega <span style=\"font-family:Courier New,Courier,monospace\">velocity_pub<\/span>, mis oskab t\u00e4pselt seda: kuulutada Twist-s\u00f5numeid rubriigis <span style=\"font-family:Courier New,Courier,monospace\">cmd_vel<\/span>. \u00dche s\u00f5numi kuulutamiseks kasutame kuulutajas leiduvat meetodit <span style=\"font-family:Courier New,Courier,monospace\">publish<\/span>, mis v\u00f5tab argumendiks vastloodud s\u00f5numi.\n<\/p>\n<p>\n\t<\/p><\/div>\n        <\/div>\n        <\/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-69d138af7c4fb-heading\">\n            <button class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#accordion-69d138af7c4fb-collapse\" aria-expanded=\"true\" aria-controls=\"accordion-69d138af7c4fb-collapse\"><strong>Main-funktsiooni loomine<\/strong><\/button>\n        <\/h2>\n        <div id=\"accordion-69d138af7c4fb-collapse\" class=\"accordion-collapse collapse\" aria-labelledby=\"accordion-69d138af7c4fb-heading\">\n            <div class=\"accordion-body\">\n\n<pre dir=\"ltr\" style=\"line-height: 1.38;margin-top: 0pt;margin-bottom: 0pt\"><span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">#!\/usr\/bin\/env python3<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">import rospy<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">from geometry_msgs.msg import Twist<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">def main():<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    rospy.init_node(\"velocity_publisher\")<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    velocity_pub = rospy.Publisher(\"cmd_vel\", Twist, queue_size=0)<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    rospy.sleep(2)<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    robot_vel = Twist()<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    robot_vel.linear.x = 0.1<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    robot_vel.linear.y = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    robot_vel.linear.z = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    robot_vel.angular.x = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    robot_vel.angular.y = 0.0<\/span>\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    robot_vel.angular.z = 0.0<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    velocity_pub.publish(robot_vel)<\/span>\r\n\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">if __name__ == '__main__':<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    try:<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">        main()<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">    except rospy.ROSInterruptException:<\/span>\r\n<span style=\"New';color:#000000;background-color:#ffff00;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline\">        pass<\/span><\/pre>\n<p>\n\tPane t\u00e4hele, et siin n\u00e4ites on peale uute koodiridade muudetud ka m\u00f5ningate olemasolevate taanet.\n<\/p>\n<p>\n\tROSi koodi Pythonis struktureerimiseks on ilus luua <span style=\"font-family:Courier New,Courier,monospace\">main<\/span>-funktsioon, mida kutsutakse v\u00e4lja ainult siis, kui k\u00e4ivitatakse t\u00f5epoolest seda faili, mitte ei impordita teda mujale. Lisaks on hea <span style=\"font-family:Courier New,Courier,monospace\">main<\/span>-funktsiooni v\u00e4ljakutse panna <span style=\"font-family:Courier New,Courier,monospace\">try<\/span> ja <span style=\"font-family:Courier New,Courier,monospace\">except<\/span> ploki sisse, mis j\u00e4lgib, ega koodi k\u00e4ivitamist kuidagi ei h\u00e4irita (nt <span style=\"font-family:Courier New,Courier,monospace\">Ctrl+C<\/span> vajutades) \u2013 siis saame soovi korral koodi viisakalt peatada.\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-1a3a6e3c-7fff-2191-7cf3-45415322ec47\">Liigutame oma eelnevalt loodud koodil\u00f5igu (v\u00e4lja arvatud koodi p\u00e4is) <span style=\"font-family:Courier New,Courier,monospace\">main<\/span>-funktsiooni sisse ja lisame koodi l\u00f5ppu osa, mis seda v\u00e4lja kutsub.<\/span>\n<\/p>\n<p>\n\t<span id=\"docs-internal-guid-7af96cb0-7fff-4f80-ec58-39d4e38f28e5\">Kood t\u00f6\u00f6taks ka ilma eraldi <span style=\"font-family:Courier New,Courier,monospace\">main<\/span>-funktsiooni loomata, aga hea praktika on see sellegipoolest lisada.<\/span>\n<\/p>\n<p>\n\t<\/p><\/div>\n        <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Vaatame n\u00fc\u00fcd, kuidas kirjutada ROSi koodi. Samm-sammulise juhendi vaatamiseks kliki harjutuse vahepealkirjadele. Pane t\u00e4hele! Pythoni koodi kirjutades p\u00f6\u00f6ra t\u00e4helepanu ridade taanetele! Kood peab alati olema \u00f5igesti taandatud. Loome uue tekstifaili ja anname selle nimeks n\u00e4iteks simple_velocity_publisher.py. Selle sisse hakkame kirjutama &#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-10","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/10","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=10"}],"version-history":[{"count":1,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/10\/revisions"}],"predecessor-version":[{"id":391,"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/pages\/10\/revisions\/391"}],"wp:attachment":[{"href":"https:\/\/sisu.ut.ee\/rosak\/wp-json\/wp\/v2\/media?parent=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}