{"id":304030,"date":"2020-05-21T21:00:33","date_gmt":"2020-05-21T21:00:33","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=304030"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=304030","title":{"rendered":"\u0420\u043e\u0431\u043e\u0442-\u0442\u0435\u043b\u0435\u0436\u043a\u0430 2.0.\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 rviz \u0438 \u0431\u0435\u0437.\u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u0440\u0430\u0441\u043e\u0442\u044b \u0432 rviz. \u0427\u0430\u0441\u0442\u044c 2"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/502508\/\">\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 <a href=\"https:\/\/habr.com\/ru\/post\/502076\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0442\u0435\u043b\u0435\u0436\u043a\u0435 2.0, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043e\u0434\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u043e\u0433\u043e \u0440\u043e\u0431\u043e\u0442\u0430, \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u0439 2d \u043a\u0430\u0440\u0442\u044b \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f slam \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043b\u0438\u0434\u0430\u0440, \u0432\u043d\u0435\u0441\u0442\u0438 \u044f\u0441\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0430\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0432 rviz, \u0447\u0442\u043e \u0437\u0430 \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442, \u0432\u043d\u0435\u0434\u0440\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u044c \u0443\u0439\u0442\u0438 \u0438\u0437 rviz. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u00ab\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u0440\u0430\u0441\u043e\u0442\u044b\u00bb rviz, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u0436\u0438\u0437\u043d\u044c \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0430 ROS.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3c1\/e03\/2dd\/3c1e032ddbd49f6df72e4fe6fba41644.gif\" alt=\"image\"><\/p>\n<p>  <a name=\"habracut\"><\/a>   <\/p>\n<h3>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438.<\/h3>\n<p>  <b>\u0417\u0430\u0434\u0430\u0447\u0430 \u0440\u043e\u0431\u043e\u0442\u0443<\/b>: \u0434\u043e\u0435\u0445\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437 \u0442\u043e\u0447\u043a\u0438 \u0410 \u0432 \u0442\u043e\u0447\u043a\u0443 B, \u0430 \u043b\u0443\u0447\u0448\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u0435\u043a B.<br \/>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u044b(\u043d\u043e\u0434\u044b) \u043f\u0440\u043e\u0435\u043a\u0442\u0430 linorobot, \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442, \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u043e\u0431\u043e\u0442\u0435, \u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u041f\u041a, \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b (\u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443 \u00ab\u041f\u041a\u00bb).<br \/>  \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0442\u0435\u043b\u0435\u0436\u043a\u0435, \u0441\u0435\u0440\u0434\u0446\u0435\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u043f\u043b\u0430\u0442\u043d\u0438\u043a raspberry pi 3b, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e: Ubuntu 16.04, ROS Kinetic, \u043d\u0430 \u041f\u041a: Ubuntu 18.04, ROS Melodic.<br \/>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u0435\u0445\u0430\u0442\u044c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u044b \u0440\u043e\u0431\u043e\u0442\u0430 \u2014 \u0434\u043b\u0438\u043d\u0443 \u0438 \u0448\u0438\u0440\u0438\u043d\u0443.<br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 <a href=\"https:\/\/github.com\/linorobot\/linorobot\/wiki\/7.-Autonomous-Navigation\" rel=\"nofollow\">\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/a> \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"bash\">roscd linorobot\/param\/navigation nano costmap_common_params.yaml <\/code><\/pre>\n<p>  \u041f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b footprint:  <\/p>\n<pre><code class=\"bash\">footprint: [[-x, -y], [-x, y], [x, y], [x, -y]] <\/code><\/pre>\n<p>  \u0433\u0434\u0435 x = \u0434\u043b\u0438\u043d\u0430 \u0440\u043e\u0431\u043e\u0442\u0430\/ 2 \u0438 y = \u0448\u0438\u0440\u0438\u043d\u0430 \/ 2<br \/>  *\u0412 \u0438\u0434\u0435\u0430\u043b\u0435, \u0434\u043b\u044f \u0440\u043e\u0431\u043e\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c urdf-\u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u043d\u0435\u0435 \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c <a href=\"https:\/\/habr.com\/ru\/post\/460755\/\">\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0440\u043e\u0431\u043e\u0442\u0430-\u0442\u0435\u043b\u0435\u0436\u043a\u0438<\/a>.<br \/>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442, \u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u043e\u0431\u043e\u0442\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0431\u0443\u0434\u0443\u0442 \u0435\u0437\u0434\u0438\u0442\u044c \u00ab\u043e\u0441\u0438 TF\u00bb. \u041a\u0430\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0440\u043e\u0431\u043e\u0442\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 urdf-\u043c\u043e\u0434\u0435\u043b\u0438, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0434\u0430\u043b\u0435\u0435.<\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435.<\/h3>\n<p>  \u041d\u0430 \u0440\u043e\u0431\u043e\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0432 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430\u0445:  <\/p>\n<pre><code class=\"bash\">roslaunch linorobot bringup.launch roslaunch linorobot navigate.launch <\/code><\/pre>\n<p>  \u041d\u0430 \u041f\u041a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0443 rviz:  <\/p>\n<pre><code class=\"bash\">roscd lino_visualize\/rviz rviz -d navigate.rviz <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u043e\u0448\u043b\u043e \u0443\u0434\u0430\u0447\u043d\u043e, \u043d\u0430 \u041f\u041a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0432 rviz \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/b_\/9f\/p-\/b_9fp-u8g8w-hjpblp-phfjlebq.png\"><br \/>  \u0412 rviz \u0432\u0438\u0434\u043d\u044b \u043e\u0441\u0438 TF, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0446\u0438\u044f Poligon, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 Displays. Polygon \u2014 \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0435 footprint-\u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0440\u043e\u0431\u043e\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043d\u043e\u0441\u0438\u043b\u0438 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0433\u0430\u0431\u0430\u0440\u0438\u0442\u044b \u0440\u043e\u0431\u043e\u0442\u0430. *\u0418\u0437 \u043e\u0441\u0435\u0439 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0432\u0438\u0434\u043d\u044b \u043e\u0441\u0438 TF: TF-map \u2014 \u043a\u0430\u0440\u0442\u0430 \u0438 TF-base-link \u2014 \u0441\u0430\u043c \u0440\u043e\u0431\u043e\u0442, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0441\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u044b \u0432 rviz. <\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u0441 \u043b\u0438\u0434\u0430\u0440\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441\u043e \u0441\u0442\u0435\u043d\u0430\u043c\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435, \u0440\u043e\u0431\u043e\u0442 \u043d\u0435 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d.<br \/>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0435\u0445\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0438\u0442\u044c\u0441\u044f, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u043e\u043c\u043e\u0447\u044c \u0435\u043c\u0443, \u0443\u043a\u0430\u0437\u0430\u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043f\u0440\u044f\u043c\u043e \u0432 rviz c \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab2d pose estimate\u00bb:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zk\/z6\/rc\/zkz6rccts3id2z7n0gpxdg6gtbk.png\"><br \/>  \u0414\u0430\u043b\u0435\u0435 \u0432 \u043e\u043a\u043d\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 rviz \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430 \u0437\u0434\u043e\u0440\u043e\u0432\u0435\u043d\u043d\u043e\u0439 \u0437\u0435\u043b\u0435\u043d\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439- initial pose (\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e):<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ww\/pm\/1c\/wwpm1c_aajdcjcaqglvt5mhlf9q.png\"><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u0438, base_link \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u043d\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e map:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ls\/tu\/-l\/lstu-lbjdmh95vblibcsjnlffti.png\"><br \/>  \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446 \u0441 \u043b\u0438\u0434\u0430\u0440\u0430 \u0441 \u043a\u0430\u0440\u0442\u043e\u0439 \u043f\u0440\u0438 \u0440\u0443\u0447\u043d\u043e\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0430\u043b\u0435\u0435 \u043f\u043e\u0434\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043f\u043e\u0435\u0445\u0430\u0442\u044c.<\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 rviz \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u043e\u0431\u043e\u0442 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u0435\u0441\u0442\u0430 \u0442\u0430\u043a \u0441\u0435\u0431\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c (\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043a\u0440\u043e\u043c\u0435 topic\u043e\u0432 \u0432 ROS \u0435\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b), \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u00ab\u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435\u00bb, \u0434\u0430\u043b\u0435\u0435, \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<br \/>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 \u041f\u041a (\u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u043a\u043e\u043c \u043c\u0435\u0441\u0442\u0435) <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">get_pose.py<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#! \/usr\/bin\/env python import rospy from std_srvs.srv import Empty, EmptyResponse # Import the service message python classes generated from Empty.srv. from geometry_msgs.msg import PoseWithCovarianceStamped, Pose robot_pose = Pose() def service_callback(request):     print (&quot;Robot Pose:&quot;)     print (robot_pose)     return EmptyResponse() # the service Response class, in this case EmptyResponse     def sub_callback(msg):     global robot_pose     robot_pose = msg.pose.pose    rospy.init_node('service_server')  my_service = rospy.Service('\/get_pose_service', Empty , service_callback) # create the Service called get_pose_service with the defined callback sub_pose = rospy.Subscriber('\/amcl_pose', PoseWithCovarianceStamped, sub_callback) rospy.spin() # mantain the service open. <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438 \u0442\u0438\u0445\u043e \u0436\u0434\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043a \u043d\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0442\u044f\u0442\u0441\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 rviz \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043c\u044b \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0440\u043e\u0431\u043e\u0442\u0430, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043d\u043e\u0432\u043e\u043c\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0443 \u0438 \u0443\u0437\u043d\u0430\u0442\u044c \u044d\u0442\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u044e. \u041d\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c (\u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044b \u0441 \u043d\u043e\u0434\u0430\u043c\u0438), \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c:  <\/p>\n<pre><code class=\"bash\">rosservice call \/get_pose_service <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0441\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c get_pose.py \u0432\u044b\u0434\u0430\u0441\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0440\u043e\u0431\u043e\u0442\u0430:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zv\/np\/_x\/zvnp_xpbeckxu9wvu3uz-myojye.png\"><br \/>  \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u044d\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0438 \u0432\u043d\u0435\u0441\u0435\u043c \u0438\u0445 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 amcl-\u043d\u043e\u0434\u044b \u043d\u0430 \u0440\u043e\u0431\u043e\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0440\u043e\u0431\u043e\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"bash\">nano linorobot\/launch\/include\/amcl.launch <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;param name=&quot;initial_pose_x&quot; value=&quot;0.548767569629&quot;\/&gt; &lt;param name=&quot;initial_pose_y&quot; value=&quot;0.218281839179&quot;\/&gt; &lt;param name=&quot;initial_pose_z&quot; value=&quot;0.0&quot;\/&gt; &lt;param name=&quot;initial_orientation_z&quot; value=&quot;0.128591756735&quot;\/&gt; &lt;param name=&quot;initial_orientation_w&quot; value=&quot;0.991697615254&quot;\/&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435, \u0440\u043e\u0431\u043e\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0438 \u0435\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432 rviz:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/t_\/e7\/ja\/t_e7jaubijay2gjiqhtfbde3vss.png\"><\/p>\n<h3>\u0415\u0434\u0435\u043c \u043d\u0430\u043a\u043e\u043d\u0435\u0446.<\/h3>\n<p>  \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0440\u043e\u0431\u043e\u0442\u0430 \u0438 \u041f\u041a, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 rviz.<br \/>  \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432 rviz \u00ab2D NAV Goal\u00bb, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0440\u043e\u0431\u043e\u0442\u0430 \u0442\u0443\u0434\u0430, \u043a\u0443\u0434\u0430 \u0434\u0443\u0448\u0430 \u043f\u043e\u0436\u0435\u043b\u0430\u0435\u0442:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/59\/qc\/cc\/59qcccgwhvmk2-k1vrrqoyte9lo.gif\"><\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0440\u043e\u0431\u043e\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0435\u0437\u0434\u043a\u0438, \u043d\u043e \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u043f\u0440\u043e\u0435\u0445\u0430\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u043f\u0435\u0440\u0435\u0434, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u043d\u0430\u0437\u0430\u0434.<br \/>  \u0412 rviz \u0432\u0438\u0434\u043d\u044b \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435 \u043d\u0430\u043c \u00ab\u0437\u0435\u043b\u0435\u043d\u044b\u0435 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438\u00bb Amcl particle swarm, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0433\u0434\u0435, \u043f\u043e \u043c\u043d\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0440\u043e\u0431\u043e\u0442. \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u0438\u0445 \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0435\u0442\u0441\u044f \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0440\u043e\u0431\u043e\u0442\u0430, \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f. \u0420\u043e\u0431\u043e\u0442 \u0435\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u2014 0.3 \u043c\/c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u043e\u0431\u043e\u0442\u0430.<\/p>\n<p>  \u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0432 rviz \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u00ab2D NAV Goal\u00bb \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u0430\u043a \u0434\u0430\u043b\u0435\u043a\u043e \u0438 \u0432 \u043a\u0430\u043a\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043f\u043e\u0435\u0434\u0435\u0442 \u0440\u043e\u0431\u043e\u0442 \u0443\u0434\u043e\u0431\u043d\u0430. \u041d\u043e \u0435\u0449\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0435\u0437\u0434\u043a\u0430 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 rviz.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0442\u043e\u0447\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430, \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0435\u0437\u0434\u0438\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043c \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u00ab2D NAV Goal\u00bb. \u0412 \u044d\u0442\u0438\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0443 get_pose.py. \u0414\u0430\u043b\u0435\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0441\u0435\u0445 \u0442\u043e\u0447\u0435\u043a \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u043e\u0435\u0437\u0434\u043a\u0438. <br \/>  \u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0440\u043e\u0431\u043e\u0442\u0430 \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0432 \u0442\u043e\u0447\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430? \u0414\u0435\u043b\u043e \u0432 \u00abAmcl particle swarm\u00bb, \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0445 \u0441\u0442\u0440\u043e\u0438\u0442. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0440\u043e\u0431\u043e\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0442\u043e\u0447\u043a\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430, \u0438 \u0435\u0433\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0435\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u00ab\u0440\u0430\u0441\u043f\u044b\u043b\u0435\u043d\u00bb \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0430\u043c\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0435\u0445\u0430\u0442\u044c.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u0434 \u043a\u043e\u0434\u043e\u0432\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u00ab\u043a\u043e\u0440\u0438\u0434\u043e\u0440\u00bb:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/j8\/wu\/d3\/j8wud3xde2uvln0kxars2rb6hqe.png\"><br \/>  \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u043f\u043e\u0437\u0443, \u043a\u043e\u0433\u0434\u0430 \u0440\u043e\u0431\u043e\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043d\u0443\u0436\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u044b\u0437\u043e\u0432 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430:  <\/p>\n<pre><code class=\"bash\">rosservice call \/get_pose_service <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u2014 \u00ab\u043f\u0440\u0438\u0445\u043e\u0436\u0430\u044f\u00bb:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/vr\/ni\/yo\/vrniyo_esbuuzo4iqljqmjr84xi.png\"><br \/>  \u0418 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u2014 \u00ab\u043a\u0443\u0445\u043d\u044f\u00bb:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/d0\/68\/zf\/d068zft3bm_odnx6d4yjuwbu8kq.png\"><br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u043e\u0435\u0437\u0434\u043e\u043a \u2014   <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">MoveTBtoGoalPoints.py<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python import rospy import actionlib # Use the actionlib package for client and server from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal # Define Goal Points and orientations for TurtleBot in a list &quot;&quot;&quot; pose x,y,x; orientation: x,y,z,w &quot;&quot;&quot; GoalPoints = [ [(5.31514576482, 1.36578380326, 0.0), (0.0, 0.0, -0.498454937648, 0.866915610157)], #corridor \t\t[(5.77521810772, -1.2464049907, 0.0), (0.0, 0.0,  -0.959487358308, 0.281751680114)], #prixozaya \t\t[(2.14926455346, -2.7055208156, 0.0), (0.0, 0.0,  -0.99147032254, 0.130332649487)]] #kitchen # The function assign_goal initializes goal_pose variable as a MoveBaseGoal action type. def assign_goal(pose):     goal_pose = MoveBaseGoal()     goal_pose.target_pose.header.frame_id = 'map'     goal_pose.target_pose.pose.position.x = pose[0][0]     goal_pose.target_pose.pose.position.y = pose[0][1]     goal_pose.target_pose.pose.position.z = pose[0][2]     goal_pose.target_pose.pose.orientation.x = pose[1][0]     goal_pose.target_pose.pose.orientation.y = pose[1][1]     goal_pose.target_pose.pose.orientation.z = pose[1][2]     goal_pose.target_pose.pose.orientation.w = pose[1][3]       return goal_pose if __name__ == '__main__':     rospy.init_node('MoveTBtoGoalPoints')     # Create a SimpleActionClient of a move_base action type and wait for server.     client = actionlib.SimpleActionClient('move_base', MoveBaseAction)     client.wait_for_server()     # for each goal point in the list, call the action server and move to goal     for TBpose in GoalPoints:         TBgoal = assign_goal(TBpose)         # For each goal point assign pose         client.send_goal(TBgoal)         client.wait_for_result()         # print the results to the screen         #if(client.get_state() == GoalStatus.SUCCEEDED):         #    rospy.loginfo(&quot;success&quot;)         #else:                 #   rospy.loginfo(&quot;failed&quot;) <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  *\u0412 GoalPoints \u0432\u043d\u0435\u0441\u0435\u043c \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u0435\u043a \u043f\u043e\u0435\u0437\u0434\u043a\u0438. \u0412 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438\u0434\u0443\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: pose x,y,x; orientation: x,y,z,w \u2014 [(5.31514576482, 1.36578380326, 0.0), (0.0, 0.0, -0.498454937648, 0.866915610157)]<\/p>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 MoveTBtoGoalPoints.py \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u043e\u0434\u0430\u043c\u0438 \u043d\u0430 \u0440\u043e\u0431\u043e\u0442\u0435 \u0438 \u041f\u041a, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/dw\/pa\/am\/dwpaamsd3ltexeajath9fhxowxs.gif\"><br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0440\u043e\u0431\u043e\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0435\u0445\u0430\u043b \u0434\u043e \u043f\u0440\u0438\u0445\u043e\u0436\u0435\u0439 \u0438 \u043f\u043e \u043f\u0443\u0442\u0438 \u043d\u0430 \u043a\u0443\u0445\u043d\u044e \u0443\u0432\u0438\u0434\u0435\u043b \u0441\u0435\u0431\u044f \u0432 \u0437\u0435\u0440\u043a\u0430\u043b\u043e \u0438 \u0437\u0430\u0441\u0442\u0440\u044f\u043b. \u0427\u0442\u043e \u0436 \u0441 \u043b\u0438\u0434\u0430\u0440\u0430\u043c\u0438 \u043f\u0440\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0435 \u0441 \u0437\u0435\u0440\u043a\u0430\u043b\u0430\u043c\u0438, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0442\u0430\u043a. <br \/>  \u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c?<br \/>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0437\u0435\u0440\u043a\u0430\u043b, \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430, \u043d\u0430\u043a\u043b\u0435\u0438\u0442\u044c \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0443\u044e \u043b\u0435\u043d\u0442\u0443 \u043d\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u043e \u043f\u043e \u043f\u0443\u0442\u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<br \/>  \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0448\u0430\u0433\u0438, \u0430 \u043f\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u0438\u0437 \u0442\u043e\u0447\u043a\u0438 \u0410 \u0432 \u0442\u043e\u0447\u043a\u0443 B \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438 \u0431\u0435\u0437 \u043f\u043e\u043c\u043e\u0449\u0438 rviz \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u041f\u041a, \u0442.\u043a. \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u0435\u0437\u0434\u043a\u0438 \u0434\u043e\u0432\u0435\u0437\u0435\u0442 \u043d\u0430\u0441 \u0434\u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u043a\u0430\u0440\u0442\u0435.<br \/>  \u041d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0442\u043e\u0440\u043e\u043f\u0438\u0442\u044c\u0441\u044f \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u041f\u041a \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 rviz, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442 linorobot \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb, \u0438 \u043d\u0443\u0436\u043d\u043e \u00ab\u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u043c\u00bb \u043d\u0430\u0434 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u0442\u0435\u043a\u043e\u043c.<\/p>\n<p>  \u0422\u0443\u0442 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u044c \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435, \u0433\u0434\u0435 \u0442\u0443\u0442 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0430\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f, \u0440\u043e\u0431\u043e\u0442 \u043f\u0440\u043e\u0435\u0445\u0430\u043b n \u0448\u0430\u0433\u043e\u0432 \u0432\u043f\u0435\u0440\u0435\u0434, \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043d\u0430\u0437\u0430\u0434, \u0434\u0430 \u0435\u0449\u0435 \u0438 \u0432 \u0437\u0435\u0440\u043a\u0430\u043b\u043e \u0437\u0430\u0435\u0445\u0430\u043b?<br \/>  \u0427\u0442\u043e \u0436, \u0432\u0441\u0435 \u0442\u0430\u043a, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442 ROS.<br \/>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u044d\u0442\u0438 \u0434\u0435\u0442\u0430\u043b\u0438.<br \/>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435\u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0438\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u043d\u0435\u043e\u0434\u0443\u0448\u0435\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043d\u0430 \u043f\u0443\u0442\u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430. \u042d\u0442\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043d\u0435\u0442 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0434\u0430\u043d\u0430 \u0440\u043e\u0431\u043e\u0442\u0443 \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tv\/6w\/qs\/tv6wqskrwnnbckeqldhlav9cdhe.jpeg\"><br \/>  \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442?<br \/>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qx\/dt\/b6\/qxdtb6nv92prvbtipav6h8kv79s.gif\"><br \/>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u043b\u0438\u0434\u0430\u0440 \u0443\u0432\u0438\u0434\u0435\u043b \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0435\u0433\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0438 \u0441\u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0432\u0430\u043b \u043d\u0430 \u043e\u0431\u044a\u0435\u0437\u0434.<\/p>\n<h3>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0430\u0441\u043e\u0442\u044b \u0432 rviz.<\/h3>\n<p>  \u0412 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 rviz \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0418\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 rviz.<br \/>  \u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f <a href=\"https:\/\/github.com\/jsk-ros-pkg\/jsk_visualization\" rel=\"nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>. <br \/>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043d\u0430 \u041f\u041a \u0432 \u043d\u0430\u0448\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b:  <\/p>\n<pre><code class=\"bash\">roscd; cd ..\/src; catkin_create_pkg my_rviz_markers rospy cd my_rviz_markers\/ cd src git clone https:\/\/github.com\/jsk-ros-pkg\/jsk_visualization git clone https:\/\/github.com\/ClementLeBihan\/rviz_layer cd .. rosdep install --from-paths -y -r src cd ~\/linorobot_ws\/ catkin_make <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 rviz \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0438\u043a\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lg\/pm\/tb\/lgpmtbn86bdy-uygi-66wsdws4e.gif\"><br \/>  \u0412 \u043f\u0430\u043f\u043a\u0435 my_rviz_markers\/samples \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">pictogram_array_objects_demo.py<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python import rospy import math from jsk_rviz_plugins.msg import Pictogram, PictogramArray from random import random, choice rospy.init_node(&quot;pictogram_object_demo_node&quot;) p = rospy.Publisher(&quot;\/pictogram_array&quot;, PictogramArray,  queue_size=1)  r = rospy.Rate(1) actions = [Pictogram.JUMP, Pictogram.JUMP_ONCE, Pictogram.ADD,             Pictogram.ROTATE_X, Pictogram.ROTATE_Y, Pictogram.ROTATE_Z] pictograms = [&quot;home&quot;,&quot;fa-robot&quot;] object_frames = [&quot;map&quot;,&quot;base_link&quot;]  while not rospy.is_shutdown():          arr = PictogramArray()     arr.header.frame_id = &quot;\/map&quot;     arr.header.stamp = rospy.Time.now()     for index, character in enumerate(pictograms):         msg = Pictogram()         msg.header.frame_id = object_frames[index]         msg.action = actions[2]         msg.header.stamp = rospy.Time.now()         msg.pose.position.x = 0         msg.pose.position.y = 0         msg.pose.position.z = 0.5         # It has to be like this to have them vertically orient the icons.         msg.pose.orientation.w = 0.7         msg.pose.orientation.x = 0         msg.pose.orientation.y = -0.7         msg.pose.orientation.z = 0         msg.size = 0.5         msg.color.r = 25 \/ 255.0         msg.color.g = 255 \/ 255.0         msg.color.b = 240 \/ 255.0         msg.color.a = 1.0         msg.character = character         arr.pictograms.append(msg)     p.publish(arr)     r.sleep() <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c:  <\/p>\n<pre><code class=\"bash\">sudo chmod +x pictogram_array_objects_demo.py <\/code><\/pre>\n<p>  \u0412 \u043f\u0430\u043f\u043a\u0435 my_rviz_markers\/launch \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c launch \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430:  <\/p>\n<pre><code class=\"xml\">&lt;launch&gt;   &lt;node pkg=&quot;my_rviz_markers&quot; type=&quot;pictogram_array_objects_demo.py&quot; name=&quot;pictogram_array_objects_demo&quot; &lt;\/node&gt; &lt;\/launch&gt; <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e (\u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u043e\u0434\u044b \u0432 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c):   <\/p>\n<pre><code class=\"bash\">roslaunch my_rviz_markers pictogram_array_objects_demo.launch <\/code><\/pre>\n<h3>\u041f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043c\u0430\u0440\u043a\u0435\u0440 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443.<\/h3>\n<p>  \u041c\u0430\u0440\u043a\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0433\u0434\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u0430.<br \/>  \u041a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432 \u043f\u0430\u043f\u043a\u0435 my_rviz_markers\/samples \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">basic_marker.py<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python  import rospy from visualization_msgs.msg import Marker from geometry_msgs.msg import Point   class MarkerBasics(object):     def __init__(self):         self.marker_objectlisher = rospy.Publisher('\/marker_basic', Marker, queue_size=1)         self.rate = rospy.Rate(1)         self.init_marker(index=0,z_val=0)          def init_marker(self,index=0, z_val=0):         self.marker_object = Marker()         self.marker_object.header.frame_id = &quot;\/map&quot;         self.marker_object.header.stamp    = rospy.get_rostime()         self.marker_object.ns = &quot;start&quot;         self.marker_object.id = index         self.marker_object.type = Marker.SPHERE         self.marker_object.action = Marker.ADD          my_point = Point()         my_point.z = z_val         #self.marker_object.pose.position = my_point         self.marker_object.pose.position.x = 5.31514576482         self.marker_object.pose.position.y = 1.36578380326          self.marker_object.pose.orientation.x = 0         self.marker_object.pose.orientation.y = 0         self.marker_object.pose.orientation.z = -0.498454937648         self.marker_object.pose.orientation.w = 0.866915610157         self.marker_object.scale.x = 0.2         self.marker_object.scale.y = 0.2         self.marker_object.scale.z = 0.2              self.marker_object.color.r = 0.0         self.marker_object.color.g = 0.0         self.marker_object.color.b = 1.0         # This has to be, otherwise it will be transparent         self.marker_object.color.a = 1.0          # If we want it for ever, 0, otherwise seconds before desapearing         self.marker_object.lifetime = rospy.Duration(0)          def start(self):         while not rospy.is_shutdown():             self.marker_objectlisher.publish(self.marker_object)             self.rate.sleep()     if __name__ == '__main__':     rospy.init_node('marker_basic_node', anonymous=True)     markerbasics_object = MarkerBasics()     try:         markerbasics_object.start()     except rospy.ROSInterruptException:         pass <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u043f\u0430\u043f\u043a\u0435 my_rviz_markers\/launch \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c launch \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">basic_marker.launch<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;launch&gt;   &lt;node pkg=&quot;my_rviz_markers&quot; type=&quot;basic_marker.py&quot; name=&quot;basic_marker&quot; \/&gt; &lt;\/launch&gt;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c:  <\/p>\n<pre><code class=\"bash\">roslaunch my_rviz_markers basic_marker.launch <\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 rviz:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pb\/ci\/yi\/pbciyiiovbi8eo_kotdwzpqje9o.gif\"><\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438.<\/h3>\n<p>  \u041a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043a\u0430\u0436\u0443\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0443\u0433\u043e\u043b \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0444\u0440\u0435\u0439\u043c\u0430\u043c\u0438:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wh\/9s\/xp\/wh9sxpxllgndhu1xaeu4oe-ekuk.gif\"><br \/>  \u0412 \u043f\u0430\u043f\u043a\u0435 my_rviz_markers\/launch \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c launch \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">overlay_meny_my.launch overlay_menu_my.launch<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;launch&gt;   &lt;node pkg=&quot;my_rviz_markers&quot; type=&quot;haro_overlay_complete_demo.py&quot; name=&quot;overlay_menu&quot; \/&gt; &lt;\/launch&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u043f\u0430\u043f\u043a\u0435 my_rviz_markers\/samples \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u044b:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">haro_overlay_complete_demo.py<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python  from jsk_rviz_plugins.msg import OverlayText, OverlayMenu from std_msgs.msg import ColorRGBA, Float32 import rospy import math import random from geometry_msgs.msg import Twist  class HaroOverlay(object):     def __init__(self):                  self.text_pub = rospy.Publisher(&quot;\/text_sample&quot;, OverlayText, queue_size=1)                  self.plot_value_pub = rospy.Publisher(&quot;\/plot_value_sample&quot;, Float32, queue_size=1)         self.piechart_value_pub = rospy.Publisher(&quot;\/piechart_value_sample&quot;, Float32, queue_size=1)         self.menu_publisher = rospy.Publisher(&quot;\/test_menu&quot;, OverlayMenu, queue_size=1)         self.plot_value = 0         self.piechart_value = 0         self.max_distance_from_object = 10.0                  self.subs = rospy.Subscriber(&quot;\/haro_base_link_to_person_standing_tf_translation&quot;, Twist, self.twist_callback)                  self.counter = 0         self.rate = rospy.Rate(100)         self.overlaytext = self.update_overlaytext()         self.menu = self.update_overlay_menu()      def twist_callback(self, msg):         self.plot_value = msg.linear.x         self.piechart_value = msg.angular.z      def update_overlaytext(self, number=1.23, number2=20):                    text = OverlayText()         text.width = 200         text.height = 400         text.left = 10         text.top = 10         text.text_size = 12         text.line_width = 2         text.font = &quot;DejaVu Sans Mono&quot;         text.text = &quot;&quot;&quot;Distance=  %s.         Angle=%s.         Counter = &lt;span style=&quot;color: green;&quot;&gt;%d.&lt;\/span&gt;         &quot;&quot;&quot; % (str(number), str(number2) ,self.counter)         text.fg_color = ColorRGBA(25 \/ 255.0, 1.0, 240.0 \/ 255.0, 1.0)         text.bg_color = ColorRGBA(0.0, 0.0, 0.0, 0.2)                  return text          def update_overlay_textonly(self, new_text):         self.overlaytext.text = new_text       def update_overlay_menu(self):         menu = OverlayMenu()         menu.title = &quot;HaroSystemMode&quot;         menu.menus = [&quot;Sleep&quot;, &quot;Searching&quot;, &quot;MovingInCircles&quot;,&quot;Waiting&quot;]                  menu.current_index = self.counter % len(menu.menus)         return menu              def update_overlay_menu_haro_tf(self):         menu = OverlayMenu()         menu.title = &quot;HaroDistanceFromPerson&quot;         menu.menus = [&quot;FarAway&quot;, &quot;CloseBy&quot;, &quot;Target&quot;, &quot;OtherWayRound&quot;]                  fraction = 10.0                  if self.piechart_value &lt; (math.pi\/fraction):             if self.plot_value &gt;= self.max_distance_from_object:                 index = 0             elif self.plot_value &gt;= (self.max_distance_from_object\/ fraction) and self.plot_value &lt; self.max_distance_from_object:                 index = 1             elif self.plot_value &lt; (self.max_distance_from_object\/fraction):                 index = 2                      else:             index = 3                      menu.current_index = index                      return menu      def start_dummy_demo(self):                  while not rospy.is_shutdown():             self.overlaytext = self.update_overlaytext()             self.menu = self.update_overlay_menu()                          if self.counter % 100 == 0:                 self.menu.action = OverlayMenu.ACTION_CLOSE                          self.text_pub.publish(self.overlaytext)             # If values are very high it autoadjusts so be careful             self.value_pub.publish(math.cos(self.counter * math.pi * 2 \/ 1000))             self.menu_publisher.publish(self.menu)                          self.rate.sleep()             self.counter += 1          def start_harodistance_demo(self):                  while not rospy.is_shutdown():             self.overlaytext = self.update_overlaytext(number=self.plot_value, number2=self.piechart_value)             self.menu = self.update_overlay_menu_haro_tf()                          self.text_pub.publish(self.overlaytext)                          self.plot_value_pub.publish(self.plot_value)             self.piechart_value_pub.publish(self.piechart_value)                          self.menu_publisher.publish(self.menu)                          self.rate.sleep()             self.counter += 1       def dummy_overlay_demo():     rospy.init_node('distance_overlay_demo_node', anonymous=True)     haro_overlay_object = HaroOverlay()     try:         #haro_overlay_object.start_dummy_demo()         haro_overlay_object.start_harodistance_demo()     except rospy.ROSInterruptException:         pass  if __name__ == '__main__':     dummy_overlay_demo() <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442-   <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">tf_haro_to_object_listener.py<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/env python import sys import rospy import math import tf from geometry_msgs.msg import Twist, Vector3  if __name__ == '__main__':     rospy.init_node('tf_listener_haro_to_person')      listener = tf.TransformListener()      if len(sys.argv) &lt; 3:         print(&quot;usage: tf_haro_to_object_listener.py parent child&quot;)     else:         follower_model_name = sys.argv[1]         model_to_be_followed_name = sys.argv[2]                  topic_to_publish_name = &quot;\/&quot;+str(follower_model_name)+&quot;_to_&quot;+str(model_to_be_followed_name)+&quot;_tf_translation&quot;         # We will publish a Twist message but it's positional data not speed, just reusing an existing structure.         tf_translation = rospy.Publisher(topic_to_publish_name, Twist ,queue_size=1)                  rate = rospy.Rate(10.0)         ctrl_c = False                  follower_model_frame = &quot;\/&quot;+follower_model_name         model_to_be_followed_frame = &quot;\/&quot;+model_to_be_followed_name                  def shutdownhook():             # works better than the rospy.is_shut_down()             global ctrl_c             ctrl_c = True          rospy.on_shutdown(shutdownhook)                  while not ctrl_c:             try:                 (trans,rot) = listener.lookupTransform(follower_model_frame, model_to_be_followed_frame, rospy.Time(0))                 translation_object = Vector3()                 translation_object.x = trans[0]                 translation_object.y = trans[1]                 translation_object.z = trans[2]                                  angular = math.atan2(translation_object.y, translation_object.x)                 linear = math.sqrt(translation_object.x ** 2 + translation_object.y ** 2)                 cmd = Twist()                 cmd.linear.x = linear                 cmd.angular.z = angular                 tf_translation.publish(cmd)                              except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):                 continue             rate.sleep() <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a (\u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043d\u043e\u0434\u044b \u0438 rviz \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b):  <\/p>\n<pre><code class=\"bash\">roslaunch linorobot overlay_meny_my.launch python tf_haro_to_object_listener.py base_link map <\/code><\/pre>\n<p>  \u0423\u0432\u0438\u0434\u0438\u043c \u0443\u0433\u043e\u043b \u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0430 base_link \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e map.<\/p>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442.<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/502508\/\"> https:\/\/habr.com\/ru\/post\/502508\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/502508\/\">\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 <a href=\"https:\/\/habr.com\/ru\/post\/502076\/\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0439 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e\u0439 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0442\u0435\u043b\u0435\u0436\u043a\u0435 2.0, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043e\u0434\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u043e\u0433\u043e \u0440\u043e\u0431\u043e\u0442\u0430, \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u0439 2d \u043a\u0430\u0440\u0442\u044b \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f slam \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043b\u0438\u0434\u0430\u0440, \u0432\u043d\u0435\u0441\u0442\u0438 \u044f\u0441\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0430\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0432 rviz, \u0447\u0442\u043e \u0437\u0430 \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442, \u0432\u043d\u0435\u0434\u0440\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u044c \u0443\u0439\u0442\u0438 \u0438\u0437 rviz. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u00ab\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u0440\u0430\u0441\u043e\u0442\u044b\u00bb rviz, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u0436\u0438\u0437\u043d\u044c \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0430 ROS.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3c1\/e03\/2dd\/3c1e032ddbd49f6df72e4fe6fba41644.gif\" alt=\"image\"><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-304030","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/304030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=304030"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/304030\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=304030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=304030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=304030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}