{"id":371496,"date":"2024-05-21T04:50:12","date_gmt":"2024-05-21T04:50:12","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=371496"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T04:50:12","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=371496","title":{"rendered":"<span>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u0438\u043f\u0443 \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 4-\u043a\u043e\u043b\u0451\u0441\u043d\u043e\u0439 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b (ROS Noetic)<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h3>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043a\u043e\u043b\u0451\u0441\u043d\u043e\u0439 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441 \u0440\u0443\u043b\u0435\u0432\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u0438\u043f\u0443 \u0410\u043a\u043a\u0440\u0435\u043c\u0430\u043d\u043d\u0430,  \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 <code>ROS<\/code>, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 <code>Python<\/code>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0440\u0435\u0434\u044b \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 <code>Gazebo<\/code>. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0440\u043e\u0431\u043e\u0442\u0430, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <code>urdf<\/code>, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0451\u0441\u0430\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043e\u0431\u0449\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/509\/21b\/531\/50921b531e99b87250dbb38ed156ab72.jpg\" alt=\"\u041f\u0440\u0438\u0432\u044c\u044e\" height=\"400\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/509\/21b\/531\/50921b531e99b87250dbb38ed156ab72.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u0432\u044c\u044e<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/813\/ccb\/c75\/813ccbc75bb032ea2a52451cfa4e3b5b.gif\" alt=\"GIF_Move\" height=\"400\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/813\/ccb\/c75\/813ccbc75bb032ea2a52451cfa4e3b5b.gif\"\/><\/p>\n<div><figcaption>GIF_Move<\/figcaption><\/div>\n<\/figure>\n<h3>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/h3>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\" rel=\"noopener noreferrer nofollow\">GitHub<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/urdf\/Tutorials\" rel=\"noopener noreferrer nofollow\">URDF tutorial<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/xacro\" rel=\"noopener noreferrer nofollow\">Xacro ROS docs<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/ros_control\" rel=\"noopener noreferrer nofollow\">ROS Controls (official)<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/classic.gazebosim.org\/tutorials?tut=ros_control#Defaultgazebo_ros_controlBehavior\" rel=\"noopener noreferrer nofollow\">ROS Controls (Gazebo)<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/classic.gazebosim.org\/tutorials?tut=ros_roslaunch\" rel=\"noopener noreferrer nofollow\">Sdf, gazebo, world<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/sdformat.org\/spec\" rel=\"noopener noreferrer nofollow\">SDF format (\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0442\u0435\u0433\u043e\u0432)<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Ackermann_steering_geometry\" rel=\"noopener noreferrer nofollow\">Ackermann steering geometry (Wikipedia)<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/msg\" rel=\"noopener noreferrer nofollow\">ROS messages<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.ros.org\/en\/api\/geometry_msgs\/html\/index-msg.html\" rel=\"noopener noreferrer nofollow\">Geometry messages<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/teleop_twist_keyboard\" rel=\"noopener noreferrer nofollow\">\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 teleop_twist_keyboard<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/docs.voltbro.ru\/starting-ros\/administrirovanie-ros\/roslaunch.html\" rel=\"noopener noreferrer nofollow\">Roslaunch, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/ROS\/Tutorials\/Roslaunch%20tips%20for%20larger%20projects\" rel=\"noopener noreferrer nofollow\">Roslaunch tips for large projects<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=7rLXC4xvSGw\" rel=\"noopener noreferrer nofollow\">Practical Intro to ROS and URDF #1<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=2-Taue1Ue_8&amp;t=1838s\" rel=\"noopener noreferrer nofollow\">Practical Intro to ROS and OpenCV #2<\/a><\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<ul>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 <code>ROS<\/code> (<code>ROS Noetic<\/code>);<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 <code>ROS<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>Python 3.x<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 <code>Docker<\/code> (\u0438 \u0432\u0430\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e, <a href=\"https:\/\/github.com\/AntonSHBK\/ROS-2-HUMBLE-DOCKER\/tree\/main\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/a>), \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b (<code>Ubuntu<\/code>). \u0414\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (<code>Rviz<\/code>, <code>Gazebo<\/code>) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"https:\/\/sourceforge.net\/projects\/vcxsrv\/\" rel=\"noopener noreferrer nofollow\">VcXsrv Windows X Server<\/a>.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>X server<\/code> (<code>VcXsrv<\/code>). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>VcXsrv<\/code> &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 Docker \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 <a href=\"https:\/\/wiki.ros.org\/docker\/Tutorials\/Compose\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 <a href=\"https:\/\/wiki.ros.org\/docker\/Tutorials\/GUI\" rel=\"noopener noreferrer nofollow\"><code>ROS GUI<\/code><\/a>. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 <a href=\"https:\/\/habr.com\/ru\/companies\/stc_spb\/articles\/657927\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 <code>VcXsrv<\/code> \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044f\u0437\u044b\u043a \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439, \u0438\u043d\u0430\u0447\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0435\u0439  \u0432 <code>RViz<\/code>.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 ROS<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/ROS\/Tutorials\/Creating%20a%20Package%20by%20Hand\" rel=\"noopener noreferrer nofollow\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 ROS \u0440\u0443\u043a\u0430\u043c\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/wiki.ros.org\/catkin\/CMakeLists.txt\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 CmakeList.txt<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u0438\u0432\u0451\u043b, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 ROS, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <code>ROS<\/code> \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0412\u0441\u0451 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/CMakeLists.txt\" rel=\"noopener noreferrer nofollow\"><code>CmakeList.txt<\/code><\/a>:<\/p>\n<pre><code class=\"cmake\">cmake_minimum_required(VERSION 3.0.2) project(custom_ackermann_steering_controller_ros) ## Find catkin macros and libraries find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs) catkin_package() include_directories( ${catkin_INCLUDE_DIRS}) catkin_install_python(     PROGRAMS     scripts\/ackermann_steering_controller.py     scripts\/simple_control.py     scripts\/keyboard_teleop.py     DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) <\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/package.xml\" rel=\"noopener noreferrer nofollow\"><code>package.xml<\/code><\/a>:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\"?> &lt;package format=\"2\">   &lt;name>custom_ackermann_steering_controller_ros&lt;\/name>   &lt;version>0.0.1&lt;\/version>   &lt;description>custom_ackermann_steering_controller_ros&lt;\/description>   &lt;maintainer email=\"anton42@yandex.ru\">Anton Pisarenko&lt;\/maintainer>   &lt;license>MIT&lt;\/license>    &lt;buildtool_depend>catkin&lt;\/buildtool_depend>    &lt;exec_depend>roscpp&lt;\/exec_depend>   &lt;exec_depend>rospy&lt;\/exec_depend>   &lt;exec_depend>rviz&lt;\/exec_depend>   &lt;exec_depend>std_msgs&lt;\/exec_depend>   &lt;exec_depend>tf&lt;\/exec_depend>   &lt;exec_depend>urdf&lt;\/exec_depend>   &lt;exec_depend>xacro&lt;\/exec_depend>    &lt;exec_depend>controller_manager&lt;\/exec_depend>   &lt;exec_depend>gazebo_ros&lt;\/exec_depend>   &lt;exec_depend>gazebo_ros_control&lt;\/exec_depend>   &lt;exec_depend>joint_state_controller&lt;\/exec_depend>   &lt;exec_depend>position_controllers&lt;\/exec_depend>   &lt;exec_depend>velocity_controllers&lt;\/exec_depend>   &lt;exec_depend>robot_state_publisher&lt;\/exec_depend>   &lt;exec_depend>rqt_robot_steering&lt;\/exec_depend> &lt;\/package>  <\/code><\/pre>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430<\/h3>\n<p>\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043a\u043e\u043b\u0435\u0441\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u043f\u0443\u0442\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0443\u0433\u043b\u043e\u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441. \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0441 \u0440\u0443\u043b\u0435\u0432\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u0433\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e, \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430.<\/p>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u044b \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430<\/strong><br \/> \u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0438\u0434\u0435\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u043e\u043b\u0435\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a \u0446\u0435\u043d\u0442\u0440\u0443 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043d\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u042d\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u043a\u0430\u043b\u044c\u0437\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0438\u0437\u043d\u043e\u0441 \u043a\u043e\u043b\u0435\u0441, \u0443\u043b\u0443\u0447\u0448\u0430\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0435 \u043a\u043e\u043b\u0435\u0441\u0430 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u043b\u0438\u043d\u0438\u0438, \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0441\u0438 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043b\u0435\u0441, \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043d\u0430 \u043e\u0441\u0438 \u0437\u0430\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u0432\u0437\u044f\u0442\u043e \u0438\u0437 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ackermann_steering_geometry\" rel=\"noopener noreferrer nofollow\">Wikipedia<\/a>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0d4\/17a\/1bc\/0d417a1bc744e9d7c7ede997e2656461.gif\" alt=\"wiki_ackermann_img\" height=\"400\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0d4\/17a\/1bc\/0d417a1bc744e9d7c7ede997e2656461.gif\"\/><\/p>\n<div><figcaption>wiki_ackermann_img<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/strong><\/p>\n<p>\u0411\u0430\u0437\u0430 \u043a\u043e\u043b\u0435\u0441 (Wheelbase, W): \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0439 \u0438 \u0437\u0430\u0434\u043d\u0435\u0439 \u043e\u0441\u0435\u0439.<br \/> \u0428\u0438\u0440\u0438\u043d\u0430 \u043a\u043e\u043b\u0435\u0438 (Track width, T): \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043b\u0435\u0432\u044b\u043c \u0438 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u043e\u043b\u0435\u0441\u0430\u043c\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u0438.<br \/> \u0420\u0430\u0434\u0438\u0443\u0441 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 (Turning Radius, R): \u0420\u0430\u0434\u0438\u0443\u0441 \u043a\u0440\u0443\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0446\u0435\u043d\u0442\u0440 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043f\u0440\u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0435 \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0433\u043e\u043b.<\/p>\n<p><strong>\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/strong><\/p>\n<p>\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0443\u0433\u043b\u044b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 (<img decoding=\"async\" class=\"formula inline\" source=\"\\theta_L\" alt=\"\\theta_L\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/48\/48b\/48b872ae711c898a4d2bbd6c5a2ffe19.svg\" width=\"auto\" height=\"auto\"\/> \u0434\u043b\u044f \u043b\u0435\u0432\u043e\u0433\u043e \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"\\theta_R\" alt=\"\\theta_R\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/42\/426\/426c722c918236ebc5e9a94fd6098b5d.svg\" width=\"auto\" height=\"auto\"\/> \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u043e\u0433\u043e) \u0431\u044b\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{1}{r_{lk}+\\frac{l_{pot}}{2}}=\\frac{\\tan(\\delta_L)}{W_C}, \\frac{1}{r_{lk}-\\frac{l_{pot}}{2}}=\\frac{\\tan(\\delta_R)}{W_C} \" alt=\"\\frac{1}{r_{lk}+\\frac{l_{pot}}{2}}=\\frac{\\tan(\\delta_L)}{W_C}, \\frac{1}{r_{lk}-\\frac{l_{pot}}{2}}=\\frac{\\tan(\\delta_R)}{W_C} \" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2b\/2b8\/2b8c5ef56e92d7cc58ba64d24eb9a9d2.svg\" width=\"auto\" height=\"auto\"\/><\/p>\n<p>\u0433\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"r_{lk}\" alt=\"r_{lk}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/96\/96f\/96f100dd376a01c2fa2b10a93b686e79.svg\" width=\"auto\" height=\"auto\"\/> &#8212; \u0440\u0430\u0434\u0438\u0443\u0441 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043d\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430,<\/p>\n<\/li>\n<li>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"W_C\" alt=\"W_C\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0d\/0db\/0dbf709d2ed6159c5249672bd8daf4a8.svg\" width=\"auto\" height=\"auto\"\/> &#8212; \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043e\u0441\u044f\u043c\u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u043a\u043e\u043b\u0451\u0441 \u0438 \u0432\u0435\u0434\u043e\u043c\u044b\u0445 \u043a\u043e\u043b\u0451\u0441,<\/p>\n<\/li>\n<li>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"l_{pot}\" alt=\"l_{pot}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/26e\/26ee7e48df15fec9bb665611291e4ffd.svg\" width=\"auto\" height=\"auto\"\/> &#8212; \u0448\u0438\u0440\u0438\u043d\u0430 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u0430\u043c\u0438 \u043a\u043e\u043b\u0451\u0441 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u0438,<\/p>\n<\/li>\n<li>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"\\delta_L, \\delta_R\" alt=\"\\delta_L, \\delta_R\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/3d\/3d9\/3d93ab7644671aa308268987d203e193.svg\" width=\"auto\" height=\"auto\"\/> &#8212;  \u0443\u0433\u043b\u044b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0434\u043b\u044f \u043b\u0435\u0432\u043e\u0433\u043e \u0438 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412 \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0435<\/strong><\/p>\n<p>\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u0433\u043b\u044b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430 \u043f\u0440\u0438 \u043c\u0430\u043d\u0435\u0432\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 URDF \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u043e\u0431\u043e\u0442\u0430 (Xacro)<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0439 \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 <code>ROS<\/code> \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>urdf<\/code>: \u0437\u0432\u0435\u043d\u044c\u044f, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0438\u0445 \u043c\u0430\u0441\u0441\u043e-\u0438\u043d\u0435\u0440\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f.<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <code>URDF<\/code> (Unified Robot Description Format) \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u0440\u043e\u0431\u043e\u0442\u0430 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Ackermann \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0447\u0451\u0442\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b, \u0432\u0435\u0441\u0430, \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0440\u043e\u0431\u043e\u0442\u0430. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043c\u044b \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u043e\u0431\u043e\u0442\u0430 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043a\u043e\u043b\u0451\u0441\u0430\u0445, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0435 \u043a\u043e\u043b\u0451\u0441\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430. \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438  \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>\u041f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u043e\u0432, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432 <code>ROS<\/code>, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>urdf<\/code>, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>sdf<\/code>, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u043c\u0438. \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430: <code>xacro -> urdf -> sdf<\/code>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 \u043a\u043e\u043d\u0447\u0435\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 <code>ros<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 sdf \u0444\u0430\u0439\u043b\u043e\u043c. \u0414\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0442\u0435\u0433\u0430\u043c\u0438 \u043f\u0440\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a <a href=\"https:\/\/(http:\/\/sdformat.org\/spec)\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 <code>urdf<\/code>(<code>xacro<\/code>).<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430 <code>URDF<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043a\u043e\u043b\u0451\u0441: \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0451\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <code>revolute<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0441\u0442\u0430\u0432\u044b \u0434\u043b\u044f \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0451\u0441: \u0412\u0441\u0435 \u043a\u043e\u043b\u0451\u0441\u0430 (\u0438 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0435, \u0438 \u0437\u0430\u0434\u043d\u0438\u0435) \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0438\u043c \u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f, \u0442\u0438\u043f <code>continuous<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u0438 (Transmissions): \u0412 <code>URDF<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0432 <code>ros-controls<\/code>. \u042d\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0430\u043a\u0442\u0443\u0430\u0442\u043e\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c) \u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438\u043b\u0438 \u0443\u0441\u0438\u043b\u0438\u044e).<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u043e\u0431\u043e\u0442\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>urdf<\/code>:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/main.xacro\" rel=\"noopener noreferrer nofollow\"><code>main.xacro<\/code><\/a> &#8212; \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f (xacro);<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/common_macro.xacro\" rel=\"noopener noreferrer nofollow\"><code>common_macro.xacro<\/code><\/a> &#8212; \u0444\u0430\u0439\u043b \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430, \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0447\u0435\u043d\u043d\u044b\u0435, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/corpus.xacro\" rel=\"noopener noreferrer nofollow\"><code>corpus.xacro<\/code><\/a> &#8212; \u0444\u0430\u0439\u043b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0440\u043f\u0443\u0441.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/wheel.xacro\" rel=\"noopener noreferrer nofollow\"><code>wheel.xacro<\/code><\/a> &#8212; \u0444\u0430\u0439\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043b\u0435\u0441\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u043e\u0431\u043e\u0442\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>xacro<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430. \u0424\u0430\u0439\u043b\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>urdf<\/code> \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0431\u044b\u043b \u043f\u0440\u0438\u043d\u044f\u0442 \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f: \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445, \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c (\u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u0437\u043b\u043e\u0432 &#8212; \u0434\u0435\u0442\u0430\u043b\u0438, \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b).<\/p>\n<p>\u0414\u043b\u044f  \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u043e\u0431\u043e\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438: \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043f\u0443\u0441\u0430 &#8212; \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0435\u043f\u0438\u043f\u0435\u0434, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043b\u0451\u0441 &#8212; \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u044b. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>stl<\/code> \u0438\u043b\u0438 <code>dae<\/code>, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e<\/p>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/common_macro.xacro\" rel=\"noopener noreferrer nofollow\"><code>common_macro.xacro<\/code>:<\/a><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\"?> &lt;robot name=\"common_macro\" xmlns:xacro=\"http:\/\/www.ros.org\/wiki\/xacro\">  &lt;!-- *********************************************************************** --> &lt;!-- \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b -->  &lt;xacro:property name=\"PI\" value=\"3.14\"\/>  &lt;!-- *********************************************************************** --> &lt;!-- \u0418\u043d\u0435\u0440\u0446\u0438\u044f \u0434\u043b\u044f \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0430 --> &lt;xacro:macro name=\"cylinder_inertia\" params =\"m r h\">   &lt;inertial>    &lt;mass value=\"${m}\"\/>    &lt;inertia ixx=\"${m*(3*r*r+h*h)\/12}\"  ixy=\"0.0\" ixz=\"0.0\"             iyy=\"${m*(3*r*r+h*h)\/12}\"  iyz=\"0.0\" izz=\"${m*r*r\/2}\"\/>    &lt;\/inertial> &lt;\/xacro:macro>  &lt;!-- *********************************************************************** --> &lt;!-- \u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0438\u043d\u0435\u0440\u0446\u0438\u0438 --> &lt;xacro:macro name= \"inertial_matrix\" params=\"mass\">   &lt;inertial>     &lt;mass value=\"${mass}\"\/>     &lt;inertia          ixx=\"1.0\" ixy=\"0.0\"         iyy=\"1.0\" iyz=\"0.0\"         izz=\"1.0\" ixz=\"0.0\"\/>    &lt;\/inertial>  &lt;\/xacro:macro> <\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/corpus.xacro\" rel=\"noopener noreferrer nofollow\"><code>corpus.xacro<\/code>:<\/a><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\"?> &lt;robot name=\"corpus\" xmlns:xacro=\"http:\/\/www.ros.org\/wiki\/xacro\">  &lt;xacro:include filename=\"$(find custom_ackermann_steering_controller_ros)\/urdf\/common_macro.xacro\" \/>  &lt;!-- *********************************************************************** -->  &lt;xacro:macro      name=\"corpus\"      params=\"         link_name           length         width         height         mass\">     &lt;link name=\"${link_name}\">         &lt;visual>             &lt;origin                  rpy= \"0 0 0\"                 xyz= \"0 0 0\"\/>             &lt;geometry>                 &lt;box size=\"${length} ${width} ${height}\"\/>             &lt;\/geometry>             &lt;material name=\"Blue\">                 &lt;color rgba=\"0.0 0.0 1.0 1.0\"\/>             &lt;\/material>         &lt;\/visual>         &lt;collision>              &lt;origin                  rpy= \"0 0 0\"                 xyz= \"0 0 0\"\/>             &lt;geometry>                 &lt;box size=\"${length} ${width} ${height}\"\/>             &lt;\/geometry>         &lt;\/collision>         &lt;xacro:inertial_matrix mass=\"${mass}\"\/>     &lt;\/link>     &lt;gazebo reference =\"${link_name}\">         &lt;material>Gazebo\/Blue&lt;\/material>     &lt;\/gazebo> &lt;\/xacro:macro> &lt;\/robot>  <\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/wheel.xacro\" rel=\"noopener noreferrer nofollow\"><code>wheel.xacro<\/code>:<\/a><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\"?> &lt;robot name=\"wheel\" xmlns:xacro=\"http:\/\/www.ros.org\/wiki\/xacro\">  &lt;xacro:include filename=\"$(find custom_ackermann_steering_controller_ros)\/urdf\/common_macro.xacro\" \/>  &lt;!-- *********************************************************************** -->  &lt;xacro:macro      name=\"wheel\"      params=\"         link_name         radius          length          mass\">     &lt;link name=\"${link_name}\">         &lt;visual>             &lt;origin rpy=\"${PI\/2} 0 0\" xyz=\"0 0 0\"\/>              &lt;geometry>                 &lt;cylinder length=\"${length}\" radius=\"${radius}\"\/>             &lt;\/geometry>             &lt;material name=\"Black\">                 &lt;color rgba=\"0.0 0.0 0.0 0.9\"\/>             &lt;\/material>         &lt;\/visual>         &lt;collision>             &lt;origin rpy=\"${PI\/2} 0 0\" xyz=\"0 0 0\"\/>              &lt;geometry>                 &lt;cylinder length=\"${length}\" radius=\"${radius}\"\/>             &lt;\/geometry>         &lt;\/collision>         &lt;xacro:cylinder_inertia m=\"${mass}\" r=\"${radius}\" h=\"${length}\"\/>     &lt;\/link>     &lt;gazebo reference =\"${link_name}\">         &lt;material>Gazebo\/Black&lt;\/material>     &lt;\/gazebo>  &lt;\/xacro:macro> &lt;\/robot>  <\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/main.xacro\" rel=\"noopener noreferrer nofollow\"><code>main.xacro<\/code>:<\/a><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\"?> &lt;robot name=\"ackermann_robot\" xmlns:xacro=\"http:\/\/www.ros.org\/wiki\/xacro\">  &lt;!-- *********************************************************************** --> &lt;!-- Include xacro--> &lt;xacro:include filename=\"$(find custom_ackermann_steering_controller_ros)\/urdf\/common_macro.xacro\" \/> &lt;xacro:include filename=\"$(find custom_ackermann_steering_controller_ros)\/urdf\/corpus.xacro\" \/> &lt;xacro:include filename=\"$(find custom_ackermann_steering_controller_ros)\/urdf\/wheel.xacro\" \/>  &lt;!-- *********************************************************************** --> &lt;!-- \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 --> &lt;xacro:property name=\"PI\" value=\"3.14\"\/>  &lt;xacro:property name=\"corpus_len\" value=\"1.0\"\/> &lt;xacro:property name=\"corpus_width\" value=\"0.5\"\/> &lt;xacro:property name=\"corpus_height\" value=\"0.2\"\/> &lt;xacro:property name=\"corpus_mass\" value=\"5\"\/>  &lt;xacro:property name=\"wheel_radius\" value=\"0.15\"\/> &lt;xacro:property name=\"wheel_width\" value=\"0.08\"\/> &lt;xacro:property name=\"wheel_mass\" value=\"0.5\"\/>  &lt;xacro:property name=\"angle_wheel_limit\" value=\"${PI\/4}\"\/>  &lt;!-- *********************************************************************** -->  &lt;xacro:corpus      link_name=\"base_link\"      length=\"${corpus_len}\"      width=\"${corpus_width}\"      height=\"${corpus_height}\"      mass=\"${corpus_mass}\" \/>  &lt;!-- *********************************************************************** -->  &lt;xacro:wheel      link_name=\"front_left_wheel\"     radius=\"${wheel_radius}\"     length=\"${wheel_width}\"     mass=\"${wheel_mass}\"\/>  &lt;xacro:wheel      link_name=\"front_right_wheel\"     radius=\"${wheel_radius}\"     length=\"${wheel_width}\"     mass=\"${wheel_mass}\"\/>  &lt;xacro:wheel      link_name=\"rear_left_wheel\"     radius=\"${wheel_radius}\"     length=\"${wheel_width}\"     mass=\"${wheel_mass}\"\/>  &lt;xacro:wheel      link_name=\"rear_right_wheel\"     radius=\"${wheel_radius}\"     length=\"${wheel_width}\"     mass=\"${wheel_mass}\"\/>  &lt;!-- \u0421\u0443\u0441\u0442\u0430\u0432\u044b \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 \u0441 \u043a\u043e\u0440\u043f\u0443\u0441\u043e\u043c -->     &lt;joint name=\"front_left_wheel_joint\" type=\"revolute\">     &lt;parent link=\"base_link\"\/>     &lt;child link=\"front_left_wheel\"\/>     &lt;origin xyz=\"0.25 0.3 0\" rpy=\"0 0 0\"\/>     &lt;axis xyz=\"0 0 1\"\/>     &lt;limit lower=\"${-angle_wheel_limit}\" upper=\"${angle_wheel_limit}\" effort=\"1000\" velocity=\"1\"\/> &lt;\/joint>  &lt;joint name=\"front_right_wheel_joint\" type=\"revolute\">     &lt;parent link=\"base_link\"\/>     &lt;child link=\"front_right_wheel\"\/>     &lt;origin xyz=\"0.25 -0.3 0\" rpy=\"0 0 0\"\/>     &lt;axis xyz=\"0 0 1\"\/>     &lt;limit lower=\"${-angle_wheel_limit}\" upper=\"${angle_wheel_limit}\" effort=\"1000\" velocity=\"1\"\/> &lt;\/joint>  &lt;!-- \u0421\u0443\u0441\u0442\u0430\u0432\u044b \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 \u0441 \u043a\u043e\u0440\u043f\u0443\u0441\u043e\u043c (\u0431\u0435\u0437 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430) --> &lt;joint name=\"rear_left_wheel_joint\" type=\"continuous\">     &lt;parent link=\"base_link\"\/>     &lt;child link=\"rear_left_wheel\"\/>     &lt;origin xyz=\"-0.25 0.3 0\" rpy=\"0 0 0\"\/>     &lt;axis xyz=\"0 1 0\"\/> &lt;\/joint>  &lt;joint name=\"rear_right_wheel_joint\" type=\"continuous\">     &lt;parent link=\"base_link\"\/>     &lt;child link=\"rear_right_wheel\"\/>     &lt;origin xyz=\"-0.25 -0.3 0\" rpy=\"0 0 0\"\/>     &lt;axis xyz=\"0 1 0\"\/> &lt;\/joint> &lt;\/robot>  <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u043f\u0438\u0441\u0430\u043b\u0438 \u0437\u0432\u0435\u043d\u044c\u044f \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (\u0432\u0437\u0430\u0438\u043c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0432\u0435\u043d\u044c\u0435\u0432). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0438\u0431\u043a\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044e \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0422\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f \u0441\u0432\u044f\u0436\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043b\u0435\u0441\u0430 \u0432 <code>urdf<\/code> \u0444\u0430\u0439\u043b \u0440\u043e\u0431\u043e\u0442\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430, \u0432\u043a\u043b\u044e\u0447\u0438\u0432 \u0432 \u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b <code>&lt;transmission><\/code>. \u042d\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442 \u0441\u0443\u0441\u0442\u0430\u0432\u044b (<code>&lt;joint><\/code>) \u0441 \u0430\u043a\u0442\u0443\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b <code>hardware_interface<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f <code>ros_control<\/code> \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0438\u043b\u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0430\u043a\u0442\u0443\u0430\u0442\u043e\u0440\u0430\u043c\u0438.<\/p>\n<p>\u042d\u0442\u0438 \u0431\u043b\u043e\u043a\u0438 <code>&lt;transmission><\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0435\u0446  <code>urdf<\/code> (<code>xacro<\/code>) \u0444\u0430\u0439\u043b\u0430 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>xacro<\/code>), \u043f\u043e\u0441\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0432\u0441\u0435\u0445 \u0441\u0443\u0441\u0442\u0430\u0432\u043e\u0432 (<code>&lt;joint><\/code>) \u0438 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0442\u0435\u0433\u043e\u043c <code>&lt;\/robot><\/code>. \u041e\u043d\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043b\u0435\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u044f \u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f, \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0443\u0441\u0442\u0430\u0432\u044b \u0441 \u0430\u043a\u0442\u0443\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b. \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043a\u043e\u043b\u0435\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>PositionJointInterface<\/code>, \u0447\u0442\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 (\u0443\u0433\u043b\u043e\u043c \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430), \u0430 \u0434\u043b\u044f \u0437\u0430\u0434\u043d\u0438\u0445 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 \u2014 <code>VelocityJointInterface<\/code>, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0435\u0441.<\/p>\n<p>\u0412\u044b\u043d\u0435\u0441\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u0439 \u0432 <code>common_macro.xacro<\/code>. \u0422\u0430\u043a \u043c\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0438\u043c <code>common_macro.xacro<\/code>:<\/p>\n<pre><code class=\"xml\">&lt;!-- *********************************************************************** --> &lt;!-- \u0422\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043a\u043e\u043b\u0451\u0441 --> &lt;xacro:macro name=\"Front_transmission\" params=\"joint_name\">     &lt;transmission name=\"${joint_name}_transmission\">         &lt;type>transmission_interface\/SimpleTransmission&lt;\/type>         &lt;joint name=\"${joint_name}\">           &lt;hardwareInterface>hardware_interface\/PositionJointInterface&lt;\/hardwareInterface>         &lt;\/joint>         &lt;actuator name=\"${joint_name}_actuator\">           &lt;hardwareInterface>hardware_interface\/PositionJointInterface&lt;\/hardwareInterface>           &lt;mechanicalReduction>1&lt;\/mechanicalReduction>         &lt;\/actuator>       &lt;\/transmission> &lt;\/xacro:macro>  &lt;!-- *********************************************************************** --> &lt;!-- \u0422\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0435\u0441 --> &lt;xacro:macro name=\"Back_transmission\" params=\"joint_name\">     &lt;transmission name=\"${joint_name}_transmission\">         &lt;type>transmission_interface\/SimpleTransmission&lt;\/type>         &lt;joint name=\"${joint_name}\">           &lt;hardwareInterface>hardware_interface\/VelocityJointInterface&lt;\/hardwareInterface>         &lt;\/joint>         &lt;actuator name=\"${joint_name}_actuator\">           &lt;hardwareInterface>hardware_interface\/VelocityJointInterface&lt;\/hardwareInterface>           &lt;mechanicalReduction>1&lt;\/mechanicalReduction>         &lt;\/actuator>       &lt;\/transmission> &lt;\/xacro:macro> <\/code><\/pre>\n<p>\u0420\u0430\u0441\u0448\u0438\u0440\u0438\u043c <code>main.xacro<\/code>:<\/p>\n<pre><code class=\"xml\">&lt;!-- \u0422\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043b\u0435\u0441\u0430 --> &lt;xacro:Front_transmission joint_name=\"front_left_wheel_joint\"\/>      &lt;!-- \u0422\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043b\u0435\u0441\u0430 --> &lt;xacro:Front_transmission joint_name=\"front_right_wheel_joint\"\/>  &lt;!-- \u0422\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u0434\u043d\u0435\u0433\u043e \u043b\u0435\u0432\u043e\u0433\u043e \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u043b\u0435\u0441\u0430 --> &lt;xacro:Back_transmission joint_name=\"rear_left_wheel_joint\"\/>  &lt;!-- \u0422\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u0434\u043d\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u043b\u0435\u0441\u0430 --> &lt;xacro:Back_transmission joint_name=\"rear_right_wheel_joint\"\/>  <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0441\u0443\u0441\u0442\u0430\u0432\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447, <code>URDF<\/code> \u043c\u043e\u0434\u0435\u043b\u044c  \u0433\u043e\u0442\u043e\u0432\u0430 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0441 <code>ros-controls<\/code> \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u0430\u0436\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f <code>gazebo<\/code> (<code>gazebo_ros_control<\/code>). \u0420\u0430\u0441\u0448\u0438\u0440\u0438\u043c \u0444\u0430\u0439\u043b <code>main.xacro<\/code>:<\/p>\n<pre><code class=\"xml\">&lt;gazebo>     &lt;plugin name=\"gazebo_ros_control\" filename=\"libgazebo_ros_control.so\">         &lt;robotNamespace>\/&lt;\/robotNamespace>     &lt;\/plugin> &lt;\/gazebo> <\/code><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/509\/21b\/531\/50921b531e99b87250dbb38ed156ab72.jpg\" alt=\"rviz_2\" height=\"600\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/509\/21b\/531\/50921b531e99b87250dbb38ed156ab72.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>rviz_2<\/figcaption><\/div>\n<\/figure>\n<h3>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 ros_control \u0434\u043b\u044f Gazebo<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/ros_control\" rel=\"noopener noreferrer nofollow\">ROS Controls (official)<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/classic.gazebosim.org\/tutorials?tut=ros_control#Defaultgazebo_ros_controlBehavior\" rel=\"noopener noreferrer nofollow\">ROS Controls (Gazebo)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/roboticscasual.com\/ros-tutorial-control-the-ur5-robot-with-ros_control-tuning-a-pid-controller\/\" rel=\"noopener noreferrer nofollow\">ROS Tutorial: Control the UR5 robot with ros_control \u2013 How to tune a PID Controller<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0438 \u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u0439 \u0432 <code>urdf<\/code> (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>xacro<\/code>), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f <code>ros_control<\/code> \u0432 <code>YAML<\/code> \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c <code>ros_control<\/code>, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <code>YAML<\/code> (\u043e\u0431\u044b\u0447\u043d\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>config<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>ROS<\/code>. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b \u0444\u0430\u0439\u043b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043b\u0435\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a: \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u043c \u0438 \u0437\u0430\u0434\u043d\u0438\u043c \u043c\u043e\u0441\u0442\u043e\u043c (<code>wheel_base<\/code>), \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u0430\u043c\u0438 \u043a\u043e\u043b\u0451\u0441 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u0438 (<code>wheel_track<\/code>), \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f &#171;\u0442\u043e\u043f\u0438\u043a\u043e\u0432&#187; \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u041c\u043e\u0436\u043d\u043e \u0442\u0443\u0434\u0430 \u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0447\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<br \/> \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b<br \/> <code>ackermann_steering_config.yaml<\/code> \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 `config.<\/p>\n<pre><code class=\"yaml\">ackermann_steering_controller:   # \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b ros_control   joint_state_controller:     type: joint_state_controller\/JointStateController     publish_rate: 50    wheel_base: 0.5 # \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u043c \u0438 \u0437\u0430\u0434\u043d\u0438\u043c \u043c\u043e\u0441\u0442\u043e\u043c   wheel_track: 0.5 # \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043b\u0451\u0441\u0430\u043c\u0438 \u043d\u0430 \u043e\u0441\u0438   max_steering_angle: 0.7854 # \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043a\u043e\u043b\u0451\u0441 \u0432 \u0440\u0430\u0434\u0438\u0430\u043d\u0430\u0445    cmd_vel_topic: \"\/cmd_vel\" # \u0422\u043e\u043f\u0438\u043a \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f   steering_angle_topic: \"\/steering_angle\" # \u0422\u043e\u043f\u0438\u043a \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0443\u0433\u043b\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430   drive_velocity_topic: \"\/drive_velocity\"    # \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441   front_left_wheel_position_controller:     type: position_controllers\/JointPositionController     joint: front_left_wheel_joint    front_right_wheel_position_controller:     type: position_controllers\/JointPositionController     joint: front_right_wheel_joint      # \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0434\u043b\u044f \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u0437\u0430\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441   rear_left_wheel_velocity_controller:     type: velocity_controllers\/JointVelocityController     joint: rear_left_wheel_joint    rear_right_wheel_velocity_controller:     type: velocity_controllers\/JointVelocityController     joint: rear_right_wheel_joint <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u0434\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0443\u0441\u0442\u0430\u0432\u043e\u0432 (<code>joint_state_controller<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0441\u0443\u0441\u0442\u0430\u0432\u043e\u0432 \u0440\u043e\u0431\u043e\u0442\u0430. \u0422\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u0438 \u0437\u0430\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441. \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043f\u043e\u0437\u0438\u0446\u0438\u0438 (<code>JointPositionController<\/code>), \u0430 \u0434\u043b\u044f \u0437\u0430\u0434\u043d\u0438\u0445 \u2014 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 (<code>JointVelocityController<\/code>), \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u043e\u0434 \u0440\u0443\u043b\u0435\u0432\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u0438\u043f\u0430 \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430.<\/p>\n<pre><code>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435, \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441 `pid` \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0432 `Gezebo` \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 `pid` \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440\u044b \u043f\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e](https:\/\/wiki.ros.org\/pid). <\/code><\/pre>\n<pre><code>[ERROR] [1710926628.173440521]: No p gain specified for pid.  Namespace: \/gazebo_ros_control\/pid_gains\/front_left_wheel_joint <\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u0430\u0448\u0435\u0433\u043e ROS-\u043d\u043e\u0434\u0430, \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>roslaunch<\/code>, \u043d\u043e \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043c\u044b \u043e\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u041f\u041e \u043f\u043e\u0434 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/ROS\/Tutorials\/WritingPublisherSubscriber%28python%29\" rel=\"noopener noreferrer nofollow\">Publisher and Subscriber Python tutorial ROS 1<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/msg\" rel=\"noopener noreferrer nofollow\">ROS messages<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.ros.org\/en\/api\/geometry_msgs\/html\/index-msg.html\" rel=\"noopener noreferrer nofollow\">Geometry messages<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u0438\u043f\u0443 \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>ROS<\/code> \u0438 \u0432 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 <code>ros-controls<\/code>, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043b\u043e\u0433\u0438\u043a\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0451\u0441\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 <code>python<\/code>. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c <code>ROS<\/code> \u043d\u043e\u0434\u0443. \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0448\u0430\u0433\u0435. \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0448\u0443 \u043d\u043e\u0434\u0443 \u043f\u043e\u0434\u043f\u0438\u0448\u0435\u043c \u043d\u0430 \u0442\u043e\u043f\u0438\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>\/cmd_vel<\/code> \u0438 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441 \u043d\u0435\u0451 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0418\u043c\u0435\u044f \u0442\u043e\u043f\u0438\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0443\u043b\u043e\u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043a\u043e\u043b\u0451\u0441, \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0430\u0441\u0447\u0451\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u043b\u0451\u0441.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (\u0444\u0430\u0439\u043b\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 <code>python<\/code> \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>\/scripts<\/code>), \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 \u0444\u0430\u0439\u043b \u0441\u0431\u043e\u0440\u043a\u0438 <code>CmakeList.txt<\/code> \u0435\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/scripts\/ackermann_steering_controller.py\" rel=\"noopener noreferrer nofollow\"><code>ackermann_steering_controller.py<\/code><\/a>:<\/p>\n<pre><code class=\"python\">#!\/usr\/bin\/env python # -*- coding: utf-8 -*-  import rospy from geometry_msgs.msg import Twist from std_msgs.msg import Float64  import math   class AckermannSteeringController:     def __init__(self):         self.name = '\/ackermann_steering_controller'                  rospy.init_node('ackermann_steering_controller', anonymous=True)          # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430         self.wheel_base = rospy.get_param(self.name+'\/wheel_base', 1.0)         self.cmd_vel_topic = rospy.get_param(self.name+'\/cmd_vel_topic', '\/cmd_vel')         self.drive_velocity_topic = rospy.get_param(self.name+'\/drive_velocity_topic', '\/drive_velocity')         self.wheel_track = rospy.get_param(self.name+'\/wheel_track', 0.5)         self.max_steering_angle = rospy.get_param(self.name+'\/max_steering_angle', 0.7854)          # \u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u0442\u043e\u043f\u0438\u043a \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f         rospy.Subscriber(self.cmd_vel_topic, Twist, self.cmd_vel_callback)                  # Publishers \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043a\u043e\u043b\u0435\u0441         self.front_left_wheel_pub = rospy.Publisher(self.name+'\/front_left_wheel_position_controller\/command', Float64, queue_size=1)         self.front_right_wheel_pub = rospy.Publisher(self.name+'\/front_right_wheel_position_controller\/command', Float64, queue_size=1)         self.rear_left_wheel_pub = rospy.Publisher(self.name+'\/rear_left_wheel_velocity_controller\/command', Float64, queue_size=1)         self.rear_right_wheel_pub = rospy.Publisher(self.name+'\/rear_right_wheel_velocity_controller\/command', Float64, queue_size=1)      def cmd_vel_callback(self, data):         # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0443\u0433\u043b\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438         linear_velocity = data.linear.x         angular_velocity = data.angular.z                   # \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438\u0437 \u0443\u0433\u043b\u043e\u0432\u043e\u0439 \u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438         if angular_velocity == 0 or linear_velocity == 0:             radius = float('inf')         else:             radius = linear_velocity \/ angular_velocity                                  # \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0443\u0433\u043b\u043e\u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441         left_steering_angle, right_steering_angle = self.calculate_steering_angles(radius)          # \u0410\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441         left_rear_wheel_velocity, right_rear_wheel_velocity = self.calculate_wheel_velocities(radius, linear_velocity)          # \u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0443\u0433\u043b\u043e\u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439         self.front_left_wheel_pub.publish(Float64(left_steering_angle))         self.front_right_wheel_pub.publish(Float64(right_steering_angle))         self.rear_left_wheel_pub.publish(Float64(left_rear_wheel_velocity))         self.rear_right_wheel_pub.publish(Float64(right_rear_wheel_velocity))              # \u0420\u0430\u0441\u0447\u0451\u0442 \u0443\u0433\u043b\u043e\u0432  \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430     def calculate_steering_angles(self, radius):         if radius == float('inf'):             return 0.0, 0.0         left_angle = math.atan(self.wheel_base \/ (radius + self.wheel_track \/ 2))         right_angle = math.atan(self.wheel_base \/ (radius - self.wheel_track \/ 2))         return left_angle, right_angle      # \u0420\u0430\u0441\u0447\u0451\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0451\u0441     def calculate_wheel_velocities(self, radius, linear_velocity):         if radius == float('inf'):             return linear_velocity, linear_velocity         left_velocity = linear_velocity * (radius - self.wheel_track \/ 2) \/ radius         right_velocity = linear_velocity * (radius + self.wheel_track \/ 2) \/ radius         return left_velocity, right_velocity   if __name__ == '__main__':     try:         controller = AckermannSteeringController()         rospy.spin()     except rospy.ROSInterruptException:         pass  <\/code><\/pre>\n<pre><code>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c, \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 `rosrun`: <\/code><\/pre>\n<pre><code>chmod +x scripts\/ackermann_steering_controller.py <\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0443\u0433\u043b\u044b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0451\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438 \u0448\u0438\u0440\u0438\u043d\u044b \u043a\u043e\u043b\u0435\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0433\u043b\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0442\u043e\u043f\u0438\u043a <code>\/cmd_vel<\/code>, \u043e\u0436\u0438\u0434\u0430\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <code>Twist<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0438 \u0443\u0433\u043b\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442 \u0443\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0434\u043b\u044f \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0438\u0445 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u043e\u043f\u0438\u043a\u0438.<\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u043e\u043c<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/ROS\/Tutorials\/WritingPublisherSubscriber%28python%29\" rel=\"noopener noreferrer nofollow\">Publisher and Subscriber Python tutorial ROS 1<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.ros.org\/en\/api\/geometry_msgs\/html\/msg\/Twist.html\" rel=\"noopener noreferrer nofollow\">geometry_msgs\/Twist Message<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/teleop_twist_keyboard\" rel=\"noopener noreferrer nofollow\">teleop_twist_keyboard<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0440\u043e\u0431\u043e\u0442\u0430 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u043c <code>ROS<\/code> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>Gazebo<\/code>), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0442\u043e\u043f\u0438\u043a (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>\/cmd_vel<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0440\u043e\u0431\u043e\u0442\u0430. \u041d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <code>geometry_msgs\/Twist<\/code>. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 <code>Twist<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0438 \u0443\u0433\u043b\u043e\u0432\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c \u043e\u0441\u0435\u0439. \u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a \u0432\u0430\u0448\u0435\u0433\u043e \u0440\u043e\u0431\u043e\u0442\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430. \u0422\u0430\u043a\u0436\u0435 \u0432\u0430\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0431\u0435\u0437 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0440\u043e\u0431\u043e\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u0432 <code>ROS<\/code>, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 <a href=\"https:\/\/wiki.ros.org\/teleop_twist_keyboard\" rel=\"noopener noreferrer nofollow\"><code>teleop_twist_keyboard<\/code><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <code>geometry_msgs\/Twist<\/code> \u0432 \u0442\u043e\u043f\u0438\u043a <code>\/cmd_vel<\/code>, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0438 \u0443\u0433\u043b\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0440\u043e\u0431\u043e\u0442\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0443 (\u0441\u0442\u0435\u043b\u043a\u0438 \u0432\u0432\u0435\u0440\u0445, \u0432\u043d\u0438\u0437 \u0438 \u0442.\u0434.), \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 <code>Python<\/code> \u0441\u043a\u0440\u0438\u043f\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <code>curses<\/code> \u0434\u043b\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c <code>Enter<\/code>.<\/p>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/scripts\/keyboard_teleop.py\" rel=\"noopener noreferrer nofollow\">keyboard_teleop.py:<\/a><\/p>\n<pre><code class=\"python\">#!\/usr\/bin\/env python # -*- coding: utf-8 -*-  import rospy from geometry_msgs.msg import Twist  import curses  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448 def keypress(stdscr):     # \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ROS     rospy.init_node('keyboard_teleop', anonymous=True)     pub = rospy.Publisher('\/cmd_vel', Twist, queue_size=1)     rate = rospy.Rate(10)  # 10hz      twist = Twist()      # \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0432\u0432\u043e\u0434\u0430, \u0434\u0435\u043b\u0430\u0435\u043c getch \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c     stdscr.nodelay(True)     stdscr.clear()      while not rospy.is_shutdown():         try:             key = stdscr.getch()  # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u0434 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0438             stdscr.refresh()              # \u0412\u044b\u0431\u043e\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0438             if key == curses.KEY_UP:                 twist.linear.x += 0.1             elif key == curses.KEY_DOWN:                 twist.linear.x -= 0.1             elif key == curses.KEY_LEFT:                 twist.angular.z += 0.1             elif key == curses.KEY_RIGHT:                 twist.angular.z -= 0.1             elif key == ord('s'):                 twist.linear.x = 0                 twist.angular.z = 0             elif key == ord('q'):                 break              pub.publish(twist)             rate.sleep()         except Exception as e:             # \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u043e\u043a\u043d\u0430)             break  # \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 curses \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448 curses.wrapper(keypress) <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 <code>ROS<\/code>-\u0443\u0437\u0435\u043b, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0442\u043e\u043f\u0438\u043a\u0430 <code>\/cmd_vel<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <code>curses<\/code> \u0434\u043b\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <code>Twist<\/code> \u0432 \u0442\u043e\u043f\u0438\u043a <code>\/cmd_vel<\/code>. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f, <code>'s'<\/code> \u0434\u043b\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 <code>'q'<\/code> \u0434\u043b\u044f \u0432\u044b\u0445\u043e\u0434\u0430.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u0444\u0430\u0439\u043b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>keyboard_teleop.py<\/code>, \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c (<code>chmod +x keyboard_teleop.py<\/code>) \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0435\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>rosrun<\/code> \u0438\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <code>launch<\/code> \u0444\u0430\u0439\u043b \u043f\u0430\u043a\u0435\u0442\u0430. \u041d\u0430 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0432 <code>CmakeList.txt<\/code>.<\/p>\n<h3>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 (launch)<\/h3>\n<p>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 (<code>.launch<\/code>). \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435\u0445 \u0441\u0442\u0430\u0434\u0438\u044f\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0424\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 (<code>launch<\/code>-\u0444\u0430\u0439\u043b) \u0432 <code>ROS<\/code>\u0438\u0433\u0440\u0430\u0435\u0442 \u0432\u0430\u0436\u043d\u0443\u044e \u0440\u043e\u043b\u044c \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0443\u0437\u043b\u043e\u0432, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432 \u0438\u043c\u0435\u043d \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u042d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c <code>XML<\/code>, \u043d\u043e \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <code>.launch<\/code>. \u041e\u043d\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0443\u0437\u043b\u043e\u0432 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p><strong>\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430: <code>Launch<\/code> \u0444\u0430\u0439\u043b\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439, \u0443\u043f\u0440\u043e\u0449\u0430\u044f \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0443\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f &#8212; \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0443\u0437\u043b\u043e\u0432, \u0437\u0430\u0434\u0430\u0432\u0430\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0437\u043b\u0430\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0413\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0430\u0446\u0438\u044f &#8212; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0434\u0435\u043b\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0433\u0438\u0431\u043a\u043e\u0439 \u0438 \u043b\u0435\u0433\u043a\u043e \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d &#8212; \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432 \u0438\u043c\u0435\u043d \u0434\u043b\u044f \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u0443\u0437\u043b\u043e\u0432, \u0447\u0442\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 &#8212; <code>launch<\/code> \u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 &#8212; \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b launch \u0444\u0430\u0439\u043b\u0430:<\/strong><\/p>\n<ul>\n<li>\n<p><code>&lt;node><\/code> &#8212; \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0443\u0437\u043b\u0430. \u0417\u0430\u0434\u0430\u0435\u0442 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430, \u0442\u0438\u043f (\u0438\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430), \u0438\u043c\u044f \u0443\u0437\u043b\u0430 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p><code>&lt;param><\/code> &#8212; \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 ROS. \u041c\u043e\u0436\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0444\u0430\u0439\u043b.<\/p>\n<\/li>\n<li>\n<p><code>&lt;rosparam><\/code> &#8212; \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 ROS \u0438\u0437 YAML-\u0444\u0430\u0439\u043b\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p><code>&lt;group><\/code> &#8212; \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u0435\u0442 \u0443\u0437\u043b\u044b \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a \u043d\u0438\u043c \u043e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><code>&lt;include><\/code> &#8212; \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 launch \u0444\u0430\u0439\u043b, \u0447\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><code>&lt;arg><\/code> &#8212; \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 launch \u0444\u0430\u0439\u043b, \u0434\u0435\u043b\u0430\u044f \u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>launch<\/code> \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 <code>ROS<\/code> \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0437\u0430\u0434\u0430\u0447, \u0430 \u043d\u0435 \u043d\u0430 \u0440\u0443\u0442\u0438\u043d\u043d\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0441 <code>ros_control<\/code>, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0432 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 (<code>.launch<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u044d\u0442\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 <code>controller_manager<\/code> \u0441 \u044d\u0442\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0432 <code>YAML<\/code> \u0444\u0430\u0439\u043b\u0435, \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>controller_manager<\/code> \u0441 \u044d\u0442\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <code>.launch<\/code>. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432: \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>robot_description<\/code>, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0438\u0437 <code>YAML<\/code> \u0444\u0430\u0439\u043b\u0430, \u0437\u0430\u043f\u0443\u0441\u043a <code>robot_state_publisher<\/code> \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0443\u0441\u0442\u0430\u0432\u043e\u0432 \u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a <code>controller_manager<\/code>.<\/p>\n<p>\u0418\u0442\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c. \u0421\u043d\u043e\u0432\u0430 \u043f\u0440\u0438\u0431\u0435\u0433\u043d\u0435\u043c \u043a \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0440\u0430\u0437\u0431\u0438\u0432 \u0435\u0433\u043e \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e: \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a &#8212; <code>ackermann_run.launch<\/code>, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u044d\u043d\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b; \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 <code>Rviz<\/code> &#8212; <code>rviz.launch<\/code>, \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0440\u043e\u0431\u043e\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0432\u0435\u043d\u044c\u0435\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0437\u0430\u0438\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u0432\u0435\u043d\u044c\u0435\u0432 (\u0443\u0434\u043e\u0431\u043d\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u0440\u0430\u043d\u043d\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f); \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>Gazebo<\/code> &#8212; <code>gazebo.launch<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0438\u043c\u0443\u043b\u044f\u043d\u0442\u043e\u043c \u043c\u0438\u0440\u0435, \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445 (<code>controller_manager<\/code>) \u0438 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f <code>rviz<\/code>.<\/p>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/launch\/rviz.launch\" rel=\"noopener noreferrer nofollow\">rviz.launch:<\/a>:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?> &lt;launch> &lt;!-- *********************************************************************** --> &lt;arg name=\"model\" default=\"$(find custom_ackermann_steering_controller_ros)\/urdf\/main.xacro\"\/> &lt;!-- *********************************************************************** --> &lt;!-- \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 URDF \u043c\u043e\u0434\u0435\u043b\u0438 --> &lt;param name=\"robot_description\" command=\"$(find xacro)\/xacro $(arg model)\"\/> &lt;!-- \u0417\u0430\u043f\u0443\u0441\u043a rviz --> &lt;node name=\"rviz\" pkg=\"rviz\" type=\"rviz\"\/>  &lt;!-- *********************************************************************** --> &lt;!-- \u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 --> &lt;node      name=\"robot_state_publisher\"      pkg=\"robot_state_publisher\"      type=\"robot_state_publisher\"> &lt;\/node> &lt;!-- &lt;node      name=\"joint_state_publisher_gui\"      pkg=\"joint_state_publisher_gui\"      type=\"joint_state_publisher_gui\" > &lt;\/node> --> &lt;node      name=\"joint_state_publisher\"      pkg=\"joint_state_publisher\"      type=\"joint_state_publisher\" > &lt;\/node> &lt;\/launch> <\/code><\/pre>\n<p>\u0421\u0435\u0440\u0432\u0438\u0441 <code>robot_state_publisher<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>URDF<\/code>, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>robot_description<\/code>, \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0443\u0441\u0442\u0430\u0432\u043e\u0432 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 <code>joint_states<\/code> \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u044f\u043c\u043e\u0439 \u043a\u0438\u043d\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u0440\u043e\u0431\u043e\u0442\u0430.<\/p>\n<p>\u0421\u0435\u0440\u0432\u0438\u0441 <code>joint_state_publisher<\/code> \u0438 <code>joint_state_publisher_gui<\/code> \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>robot_description<\/code> \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 \u043d\u0435\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <code>JointState<\/code> \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c <code>joint_state_publisher_gui<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f (\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0451\u0441\u0430\u043c\u0438 \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443). \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043e\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0431\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0442\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c.<\/p>\n<pre><code>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: `joint_state_publisher_gui` \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u043b\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 gazebo (\u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f). <\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 <code>rviz<\/code> \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <code>rviz<\/code> \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e <code>rviz<\/code> \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430:<\/p>\n<pre><code class=\"xml\">&lt;arg name=\"rvizconfig\" default=\"$(find custom_ackermann_steering_controller_ros)\/rviz\/base.rviz\"\/> &lt;node name=\"rviz\" pkg=\"rviz\" type=\"rviz\" args=\"-d $(arg rvizconfig)\"\/> <\/code><\/pre>\n<p>\u0422\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u043f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0445 \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0441\u0451 \u0437\u0430\u043d\u043e\u0432\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f <code>gazebo.launch<\/code>.<\/p>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/launch\/gazebo.launch\" rel=\"noopener noreferrer nofollow\"><code>gazebo.launch<\/code><\/a>:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?> &lt;launch> &lt;!-- *********************************************************************** --> &lt;!-- \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b --> &lt;arg name=\"paused\" default=\"true\"\/> &lt;arg name=\"use_sim_time\" default=\"true\"\/> &lt;arg name=\"gui\" default=\"true\"\/> &lt;arg name=\"headless\" default=\"false\"\/> &lt;arg name=\"debug\" default=\"false\"\/> &lt;arg name=\"model\" default=\"$(find custom_ackermann_steering_controller_ros)\/urdf\/main.xacro\"\/> &lt;arg name=\"world\" default=\"$(find custom_ackermann_steering_controller_ros)\/world\/empty_world.world\" \/> &lt;arg name=\"ackermann_steering\" default=\"$(find custom_ackermann_steering_controller_ros)\/config\/ackermann_steering_config.yaml\"\/> &lt;!-- *********************************************************************** --> &lt;!-- \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 YAML --> &lt;rosparam file=\"$(arg ackermann_steering)\" command=\"load\"\/> &lt;!-- *********************************************************************** --> &lt;!-- \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0438\u0440\u0430 \u0434\u043b\u044f Gazebo empty_world.launch --> &lt;include file=\"$(find gazebo_ros)\/launch\/empty_world.launch\"> &lt;arg name=\"debug\" value=\"$(arg debug)\" \/> &lt;arg name=\"gui\" value=\"$(arg gui)\" \/> &lt;arg name=\"paused\" value=\"$(arg paused)\" \/> &lt;arg name=\"headless\" value=\"$(arg headless)\" \/> &lt;arg name=\"use_sim_time\" value=\"$(arg use_sim_time)\" \/> &lt;\/include> &lt;!-- *********************************************************************** --> &lt;!-- \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 URDF \u043c\u043e\u0434\u0435\u043b\u0438 --> &lt;param name=\"robot_description\" command=\"$(find xacro)\/xacro $(arg model)\"\/> &lt;!-- *********************************************************************** --> &lt;!-- \u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 --> &lt;node name=\"urdf_spawner\"  pkg=\"gazebo_ros\"  type=\"spawn_model\"  respawn=\"false\"  output=\"screen\" args=\"-x 0.0 -y 0.0 -z 0.5    -unpause  -urdf          -model name_robot -param robot_description\"\/> &lt;!-- *********************************************************************** --> &lt;!-- \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 --> &lt;node  name=\"controller_manager\"  pkg=\"controller_manager\"  type=\"controller_manager\"  respawn=\"false\"  output=\"screen\"  args=\" spawn  \/ackermann_steering_controller\/joint_state_controller  \/ackermann_steering_controller\/front_left_wheel_position_controller  \/ackermann_steering_controller\/front_right_wheel_position_controller  \/ackermann_steering_controller\/rear_left_wheel_velocity_controller  \/ackermann_steering_controller\/rear_right_wheel_velocity_controller\" \/> &lt;\/launch> <\/code><\/pre>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043c\u0438\u0440\u0430 <code>Gazebo<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/classic.gazebosim.org\/tutorials?tut=ros_roslaunch\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041d\u0430 \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 &#8212; \u0432\u044b\u0437\u043e\u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c\u0438 \u0440\u0430\u043d\u0435\u0435 \u0432 \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (<code>yaml<\/code>).<\/p>\n<p>\u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 &#8212; <code>ackermann_run.launch<\/code>.<\/p>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/launch\/ackermann_run.launch\" rel=\"noopener noreferrer nofollow\"><code>ackermann_run.launch<\/code><\/a>:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?> &lt;launch> &lt;!-- *********************************************************************** --> &lt;arg name=\"model\" default=\"$(find custom_ackermann_steering_controller_ros)\/urdf\/main.xacro\"\/> &lt;arg name=\"rvizconfig\" default=\"$(find custom_ackermann_steering_controller_ros)\/rviz\/base.rviz\"\/> &lt;arg name=\"ackermann_steering\" default=\"$(find custom_ackermann_steering_controller_ros)\/config\/ackermann_steering_config.yaml\"\/> &lt;!-- *********************************************************************** --> &lt;!-- \u0417\u0430\u043f\u0443\u0441\u043a gazebo --> &lt;include file=\"$(find custom_ackermann_steering_controller_ros)\/launch\/gazebo.launch\">     &lt;arg name=\"model\" value=\"$(arg model)\"\/> &lt;\/include> &lt;!-- *********************************************************************** --> &lt;!-- \u0417\u0430\u043f\u0443\u0441\u043a rviz --> &lt;include file=\"$(find custom_ackermann_steering_controller_ros)\/launch\/rviz.launch\">     &lt;arg name=\"model\" value=\"$(arg model)\"\/>     &lt;arg name=\"rvizconfig\" value=\"$(arg rvizconfig)\"\/> &lt;\/include>  &lt;!-- *********************************************************************** --> &lt;!-- \u0417\u0430\u043f\u0443\u0441\u043a \u043d\u043e\u0434\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 --> &lt;node      pkg=\"custom_ackermann_steering_controller_ros\"      type=\"ackermann_steering_controller.py\"      name=\"ackermann_steering_controller\"     output=\"screen\"\/> &lt;\/launch> <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u0441\u0451 \u0434\u043e\u0441\u0442\u0430\u0442\u043e \u0447\u043d\u043e\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u0440\u0430\u043d\u0435\u0435 \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <code>rviz.launch<\/code> \u0438 <code>gazebo,launch<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u043e\u0434\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0440\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430.<\/p>\n<p>\u041f\u043e\u0434\u0432\u0435\u0434\u0451\u043c \u0438\u0442\u043e\u0433\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u043f\u0443\u0441\u043a\u0430:<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <code>Gazebo<\/code> \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u043c\u0438\u0440\u043e\u043c \u0434\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <code>URDF<\/code> \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b ROS, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f xacro \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 <code>.xacro<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <code>robot_state_publisher<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430 \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <code>ROS<\/code> \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0443\u0441\u0442\u0430\u0432\u043e\u0432 \u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u043e\u0434\u0430\u0445, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 <code>RViz<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u043e\u0434\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0448\u0430\u0433\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <code>RViz<\/code> \u0441 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u043e\u0431\u043e\u0442\u0430 \u0438 \u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043d\u043e\u0434\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438\u0437 <code>YAML<\/code> \u0444\u0430\u0439\u043b\u0430.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0421\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f<\/h3>\n<h4>\u0412\u0438\u0434\u0435\u043e YouTube<\/h4>\n<p><code>rqt_graph<\/code>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/d31\/b0b\/4c1\/d31b0b4c16119ddd8356c31ac33d9e0c.jpg\" alt=\"rqt_graph\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d31\/b0b\/4c1\/d31b0b4c16119ddd8356c31ac33d9e0c.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>rqt_graph<\/figcaption><\/div>\n<\/figure>\n<p><code>rviz+gazebo<\/code>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3bb\/b4c\/849\/3bbb4c849c98c5772827f00694c53848.gif\" alt=\"rviz and gazebo\" width=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3bb\/b4c\/849\/3bbb4c849c98c5772827f00694c53848.gif\"\/><\/p>\n<div><figcaption>rviz and gazebo<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043a\u0430\u0440\u0442\u044b, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c <a href=\"https:\/\/classic.gazebosim.org\/tutorials?tut=ros_roslaunch\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7f7\/031\/275\/7f7031275f762f6e479c4c563134c9e2.gif\" alt=\"rviz and gazebo on map\" width=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7f7\/031\/275\/7f7031275f762f6e479c4c563134c9e2.gif\"\/><\/p>\n<div><figcaption>rviz and gazebo on map<\/figcaption><\/div>\n<\/figure>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442\u044c, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u0451 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 (\u043a\u0430\u043c\u0435\u0440\u0443, \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0442.\u0434.). \u0412 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043d\u0435\u0434\u043e\u0447\u0451\u0442\u044b, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u0430\u0448\u0435\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/p>\n<h3>\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441\u043e \u043c\u043d\u043e\u0439:<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/t.me\/antonSHBK\" rel=\"noopener noreferrer nofollow\">Telegram<\/a>;<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/articles\/802069\/\"> https:\/\/habr.com\/ru\/articles\/802069\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h3>\u0410\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043a\u043e\u043b\u0451\u0441\u043d\u043e\u0439 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441 \u0440\u0443\u043b\u0435\u0432\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0442\u0438\u043f\u0443 \u0410\u043a\u043a\u0440\u0435\u043c\u0430\u043d\u043d\u0430,  \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 <code>ROS<\/code>, \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 <code>Python<\/code>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0440\u0435\u0434\u044b \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 <code>Gazebo<\/code>. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0440\u043e\u0431\u043e\u0442\u0430, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <code>urdf<\/code>, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0451\u0441\u0430\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043e\u0431\u0449\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.<\/p>\n<figure class=\"\">\n<div><figcaption>\u041f\u0440\u0438\u0432\u044c\u044e<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\">\n<div><figcaption>GIF_Move<\/figcaption><\/div>\n<\/figure>\n<h3>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/h3>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\" rel=\"noopener noreferrer nofollow\">GitHub<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/urdf\/Tutorials\" rel=\"noopener noreferrer nofollow\">URDF tutorial<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/xacro\" rel=\"noopener noreferrer nofollow\">Xacro ROS docs<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/ros_control\" rel=\"noopener noreferrer nofollow\">ROS Controls (official)<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/classic.gazebosim.org\/tutorials?tut=ros_control#Defaultgazebo_ros_controlBehavior\" rel=\"noopener noreferrer nofollow\">ROS Controls (Gazebo)<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/classic.gazebosim.org\/tutorials?tut=ros_roslaunch\" rel=\"noopener noreferrer nofollow\">Sdf, gazebo, world<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/sdformat.org\/spec\" rel=\"noopener noreferrer nofollow\">SDF format (\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0442\u0435\u0433\u043e\u0432)<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Ackermann_steering_geometry\" rel=\"noopener noreferrer nofollow\">Ackermann steering geometry (Wikipedia)<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/msg\" rel=\"noopener noreferrer nofollow\">ROS messages<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.ros.org\/en\/api\/geometry_msgs\/html\/index-msg.html\" rel=\"noopener noreferrer nofollow\">Geometry messages<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/teleop_twist_keyboard\" rel=\"noopener noreferrer nofollow\">\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 teleop_twist_keyboard<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/docs.voltbro.ru\/starting-ros\/administrirovanie-ros\/roslaunch.html\" rel=\"noopener noreferrer nofollow\">Roslaunch, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/ROS\/Tutorials\/Roslaunch%20tips%20for%20larger%20projects\" rel=\"noopener noreferrer nofollow\">Roslaunch tips for large projects<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=7rLXC4xvSGw\" rel=\"noopener noreferrer nofollow\">Practical Intro to ROS and URDF #1<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=2-Taue1Ue_8&amp;t=1838s\" rel=\"noopener noreferrer nofollow\">Practical Intro to ROS and OpenCV #2<\/a><\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<ul>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 <code>ROS<\/code> (<code>ROS Noetic<\/code>);<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 <code>ROS<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>Python 3.x<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 <code>Docker<\/code> (\u0438 \u0432\u0430\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e, <a href=\"https:\/\/github.com\/AntonSHBK\/ROS-2-HUMBLE-DOCKER\/tree\/main\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/a>), \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b (<code>Ubuntu<\/code>). \u0414\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (<code>Rviz<\/code>, <code>Gazebo<\/code>) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"https:\/\/sourceforge.net\/projects\/vcxsrv\/\" rel=\"noopener noreferrer nofollow\">VcXsrv Windows X Server<\/a>.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>X server<\/code> (<code>VcXsrv<\/code>). \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>VcXsrv<\/code> &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 Docker \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 <a href=\"https:\/\/wiki.ros.org\/docker\/Tutorials\/Compose\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 <a href=\"https:\/\/wiki.ros.org\/docker\/Tutorials\/GUI\" rel=\"noopener noreferrer nofollow\"><code>ROS GUI<\/code><\/a>. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 <a href=\"https:\/\/habr.com\/ru\/companies\/stc_spb\/articles\/657927\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 <code>VcXsrv<\/code> \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044f\u0437\u044b\u043a \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439, \u0438\u043d\u0430\u0447\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u0435\u0439  \u0432 <code>RViz<\/code>.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 ROS<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/wiki.ros.org\/ROS\/Tutorials\/Creating%20a%20Package%20by%20Hand\" rel=\"noopener noreferrer nofollow\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 ROS \u0440\u0443\u043a\u0430\u043c\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/wiki.ros.org\/catkin\/CMakeLists.txt\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 CmakeList.txt<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u0438\u0432\u0451\u043b, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 ROS, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <code>ROS<\/code> \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u0412\u0441\u0451 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/CMakeLists.txt\" rel=\"noopener noreferrer nofollow\"><code>CmakeList.txt<\/code><\/a>:<\/p>\n<pre><code class=\"cmake\">cmake_minimum_required(VERSION 3.0.2) project(custom_ackermann_steering_controller_ros) ## Find catkin macros and libraries find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs) catkin_package() include_directories( ${catkin_INCLUDE_DIRS}) catkin_install_python(     PROGRAMS     scripts\/ackermann_steering_controller.py     scripts\/simple_control.py     scripts\/keyboard_teleop.py     DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) <\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/package.xml\" rel=\"noopener noreferrer nofollow\"><code>package.xml<\/code><\/a>:<\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\"?> &lt;package format=\"2\">   &lt;name>custom_ackermann_steering_controller_ros&lt;\/name>   &lt;version>0.0.1&lt;\/version>   &lt;description>custom_ackermann_steering_controller_ros&lt;\/description>   &lt;maintainer email=\"anton42@yandex.ru\">Anton Pisarenko&lt;\/maintainer>   &lt;license>MIT&lt;\/license>    &lt;buildtool_depend>catkin&lt;\/buildtool_depend>    &lt;exec_depend>roscpp&lt;\/exec_depend>   &lt;exec_depend>rospy&lt;\/exec_depend>   &lt;exec_depend>rviz&lt;\/exec_depend>   &lt;exec_depend>std_msgs&lt;\/exec_depend>   &lt;exec_depend>tf&lt;\/exec_depend>   &lt;exec_depend>urdf&lt;\/exec_depend>   &lt;exec_depend>xacro&lt;\/exec_depend>    &lt;exec_depend>controller_manager&lt;\/exec_depend>   &lt;exec_depend>gazebo_ros&lt;\/exec_depend>   &lt;exec_depend>gazebo_ros_control&lt;\/exec_depend>   &lt;exec_depend>joint_state_controller&lt;\/exec_depend>   &lt;exec_depend>position_controllers&lt;\/exec_depend>   &lt;exec_depend>velocity_controllers&lt;\/exec_depend>   &lt;exec_depend>robot_state_publisher&lt;\/exec_depend>   &lt;exec_depend>rqt_robot_steering&lt;\/exec_depend> &lt;\/package>  <\/code><\/pre>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430<\/h3>\n<p>\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043a\u043e\u043b\u0435\u0441\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u043f\u0443\u0442\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0443\u0433\u043b\u043e\u0432 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441. \u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0441 \u0440\u0443\u043b\u0435\u0432\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u0433\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e, \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430.<\/p>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u044b \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430<\/strong><br \/> \u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0438\u0434\u0435\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u043e\u043b\u0435\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043a \u0446\u0435\u043d\u0442\u0440\u0443 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043d\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u042d\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u043a\u0430\u043b\u044c\u0437\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0438\u0437\u043d\u043e\u0441 \u043a\u043e\u043b\u0435\u0441, \u0443\u043b\u0443\u0447\u0448\u0430\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0441\u0442\u044c. \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0435 \u043a\u043e\u043b\u0435\u0441\u0430 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u043b\u0438\u043d\u0438\u0438, \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0441\u0438 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043b\u0435\u0441, \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043d\u0430 \u043e\u0441\u0438 \u0437\u0430\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u0432\u0437\u044f\u0442\u043e \u0438\u0437 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ackermann_steering_geometry\" rel=\"noopener noreferrer nofollow\">Wikipedia<\/a>.<\/p>\n<figure class=\"\">\n<div><figcaption>wiki_ackermann_img<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b<\/strong><\/p>\n<p>\u0411\u0430\u0437\u0430 \u043a\u043e\u043b\u0435\u0441 (Wheelbase, W): \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0439 \u0438 \u0437\u0430\u0434\u043d\u0435\u0439 \u043e\u0441\u0435\u0439.<br \/> \u0428\u0438\u0440\u0438\u043d\u0430 \u043a\u043e\u043b\u0435\u0438 (Track width, T): \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043b\u0435\u0432\u044b\u043c \u0438 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u043e\u043b\u0435\u0441\u0430\u043c\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u0438.<br \/> \u0420\u0430\u0434\u0438\u0443\u0441 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 (Turning Radius, R): \u0420\u0430\u0434\u0438\u0443\u0441 \u043a\u0440\u0443\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0446\u0435\u043d\u0442\u0440 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043f\u0440\u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0435 \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0433\u043e\u043b.<\/p>\n<p><strong>\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/strong><\/p>\n<p>\u0413\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0443\u0433\u043b\u044b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 ( \u0434\u043b\u044f \u043b\u0435\u0432\u043e\u0433\u043e \u0438  \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u043e\u0433\u043e) \u0431\u044b\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435:<\/p>\n<p>\u0433\u0434\u0435:<\/p>\n<ul>\n<li>\n<p> &#8212; \u0440\u0430\u0434\u0438\u0443\u0441 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043d\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430,<\/p>\n<\/li>\n<li>\n<p> &#8212; \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043e\u0441\u044f\u043c\u0438 \u0432\u0435\u0434\u0443\u0449\u0438\u0445 \u043a\u043e\u043b\u0451\u0441 \u0438 \u0432\u0435\u0434\u043e\u043c\u044b\u0445 \u043a\u043e\u043b\u0451\u0441,<\/p>\n<\/li>\n<li>\n<p> &#8212; \u0448\u0438\u0440\u0438\u043d\u0430 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u0430\u043c\u0438 \u043a\u043e\u043b\u0451\u0441 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u0438,<\/p>\n<\/li>\n<li>\n<p> &#8212;  \u0443\u0433\u043b\u044b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0434\u043b\u044f \u043b\u0435\u0432\u043e\u0433\u043e \u0438 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412 \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0435<\/strong><\/p>\n<p>\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u0433\u043b\u044b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0435\u0441 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430 \u043f\u0440\u0438 \u043c\u0430\u043d\u0435\u0432\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 URDF \u043c\u043e\u0434\u0435\u043b\u0438 \u0440\u043e\u0431\u043e\u0442\u0430 (Xacro)<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0439 \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 <code>ROS<\/code> \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>urdf<\/code>: \u0437\u0432\u0435\u043d\u044c\u044f, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0438\u0445 \u043c\u0430\u0441\u0441\u043e-\u0438\u043d\u0435\u0440\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u044f.<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <code>URDF<\/code> (Unified Robot Description Format) \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u0440\u043e\u0431\u043e\u0442\u0430 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Ackermann \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u0447\u0451\u0442\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b, \u0432\u0435\u0441\u0430, \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0440\u043e\u0431\u043e\u0442\u0430. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043c\u044b \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u043e\u0431\u043e\u0442\u0430 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043a\u043e\u043b\u0451\u0441\u0430\u0445, \u0433\u0434\u0435 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0435 \u043a\u043e\u043b\u0451\u0441\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0410\u043a\u043a\u0435\u0440\u043c\u0430\u043d\u043d\u0430. \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438  \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>\u041f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u043e\u0432, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0432 <code>ROS<\/code>, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>urdf<\/code>, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>sdf<\/code>, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u043c\u0438. \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430: <code>xacro -> urdf -> sdf<\/code>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432 \u043a\u043e\u043d\u0447\u0435\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 <code>ros<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 sdf \u0444\u0430\u0439\u043b\u043e\u043c. \u0414\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0442\u0435\u0433\u0430\u043c\u0438 \u043f\u0440\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a <a href=\"https:\/\/(http:\/\/sdformat.org\/spec)\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 <code>urdf<\/code>(<code>xacro<\/code>).<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430 <code>URDF<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043a\u043e\u043b\u0451\u0441: \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043b\u0451\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 <code>revolute<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0441\u0442\u0430\u0432\u044b \u0434\u043b\u044f \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0451\u0441: \u0412\u0441\u0435 \u043a\u043e\u043b\u0451\u0441\u0430 (\u0438 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0435, \u0438 \u0437\u0430\u0434\u043d\u0438\u0435) \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0438\u043c \u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f, \u0442\u0438\u043f <code>continuous<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0430\u043d\u0441\u043c\u0438\u0441\u0441\u0438\u0438 (Transmissions): \u0412 <code>URDF<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0432 <code>ros-controls<\/code>. \u042d\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0430\u043a\u0442\u0443\u0430\u0442\u043e\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c) \u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0438\u043b\u0438 \u0443\u0441\u0438\u043b\u0438\u044e).<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u043e\u0431\u043e\u0442\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>urdf<\/code>:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/main.xacro\" rel=\"noopener noreferrer nofollow\"><code>main.xacro<\/code><\/a> &#8212; \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u043e\u0431\u043e\u0442\u0430, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f (xacro);<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/common_macro.xacro\" rel=\"noopener noreferrer nofollow\"><code>common_macro.xacro<\/code><\/a> &#8212; \u0444\u0430\u0439\u043b \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430, \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0447\u0435\u043d\u043d\u044b\u0435, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/corpus.xacro\" rel=\"noopener noreferrer nofollow\"><code>corpus.xacro<\/code><\/a> &#8212; \u0444\u0430\u0439\u043b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0440\u043f\u0443\u0441.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/wheel.xacro\" rel=\"noopener noreferrer nofollow\"><code>wheel.xacro<\/code><\/a> &#8212; \u0444\u0430\u0439\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043b\u0435\u0441\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u043e\u0431\u043e\u0442\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>xacro<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430. \u0424\u0430\u0439\u043b\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 <code>urdf<\/code> \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u043e\u0431\u043e\u0442\u0430.<\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0431\u044b\u043b \u043f\u0440\u0438\u043d\u044f\u0442 \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f: \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445, \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c (\u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u0437\u043b\u043e\u0432 &#8212; \u0434\u0435\u0442\u0430\u043b\u0438, \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b).<\/p>\n<p>\u0414\u043b\u044f  \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0440\u043e\u0431\u043e\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438: \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043f\u0443\u0441\u0430 &#8212; \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0435\u043f\u0438\u043f\u0435\u0434, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043b\u0451\u0441 &#8212; \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u044b. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <code>stl<\/code> \u0438\u043b\u0438 <code>dae<\/code>, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e<\/p>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/common_macro.xacro\" rel=\"noopener noreferrer nofollow\"><code>common_macro.xacro<\/code>:<\/a><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\"?> &lt;robot name=\"common_macro\" xmlns:xacro=\"http:\/\/www.ros.org\/wiki\/xacro\">  &lt;!-- *********************************************************************** --> &lt;!-- \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b -->  &lt;xacro:property name=\"PI\" value=\"3.14\"\/>  &lt;!-- *********************************************************************** --> &lt;!-- \u0418\u043d\u0435\u0440\u0446\u0438\u044f \u0434\u043b\u044f \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0430 --> &lt;xacro:macro name=\"cylinder_inertia\" params =\"m r h\">   &lt;inertial>    &lt;mass value=\"${m}\"\/>    &lt;inertia ixx=\"${m*(3*r*r+h*h)\/12}\"  ixy=\"0.0\" ixz=\"0.0\"             iyy=\"${m*(3*r*r+h*h)\/12}\"  iyz=\"0.0\" izz=\"${m*r*r\/2}\"\/>    &lt;\/inertial> &lt;\/xacro:macro>  &lt;!-- *********************************************************************** --> &lt;!-- \u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0438\u043d\u0435\u0440\u0446\u0438\u0438 --> &lt;xacro:macro name= \"inertial_matrix\" params=\"mass\">   &lt;inertial>     &lt;mass value=\"${mass}\"\/>     &lt;inertia          ixx=\"1.0\" ixy=\"0.0\"         iyy=\"1.0\" iyz=\"0.0\"         izz=\"1.0\" ixz=\"0.0\"\/>    &lt;\/inertial>  &lt;\/xacro:macro> <\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/AntonSHBK\/custom_ackermann_steering_controller_ros\/blob\/main\/urdf\/corpus.xacro\" rel=\"noopener noreferrer nofollow\"><code>corpus.xacro<\/code>:<\/a><\/p>\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\"?> &lt;robot name=\"corpus\" xmlns:xacro=\"http:\/\/www.ros.org\/wiki\/xacro\">  &lt;xacro:include filename=\"$(find custom_ackermann_steering_controller_ros)\/urdf\/common_macro.xacro\" \/>  &lt;!-- *********************************************************************** -->  &lt;xacro:macro      name=\"corpus\"      params=\"         link_name           length         width         height         mass\">     &lt;link name=\"${link_name}\">         &lt;visual>             &lt;origin<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-371496","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/371496","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=371496"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/371496\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=371496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=371496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=371496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}