{"id":295797,"date":"2019-12-17T16:27:43","date_gmt":"2019-12-17T16:27:43","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=295797"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=295797","title":{"rendered":"\u0421\u0432\u043e\u0439 \u0441\u0442\u0435\u043a \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438. \u041b\u0443\u0447\u0448\u0435 \u0447\u0435\u043c \u0443 ROS?"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/479636\/\">\u042d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b setUP \u043f\u0440\u043e \u043d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439 Eurobot Open \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e ROS. <\/p>\n<p>  <a href=\"https:\/\/habr.com\/ru\/post\/478836\/\">\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u0438 \u043e\u0431\u0449\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0440\u043e\u0431\u043e\u0442\u043e\u0432.<\/a><\/p>\n<p>  \u0420\u043e\u0431\u043e\u0442\u044b \u0435\u0437\u0434\u044f\u0442 \u043f\u043e \u0440\u043e\u0432\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e, \u043a\u043e\u0432\u0430\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0443\u043a\u0440\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b (\u0434\u0430 \u0438 \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u0447\u044c \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u043e\u0439 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u043b\u043b\u043e\u0432), \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0435\u0445\u0430\u0442\u044c \u043a \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u043d\u0435 \u0437\u0430\u0434\u0435\u0442\u044c \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f. \u0421 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0430 \u043f\u043e\u043b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \u0438 \u0437\u043d\u0430\u0435\u043c, \u0433\u0434\u0435 \u043e\u043d \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u0430\u043b\u043e \u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. <\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u0445\u0430\u0442\u044c \u0438\u0437 \u0442\u043e\u0447\u043a\u0438 \u0410 \u0432 \u0442\u043e\u0447\u043a\u0443 \u0411, \u043d\u0435 \u043f\u0440\u043e\u0435\u0445\u0430\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e \u0445\u0432\u043e\u0441\u0442\u0443 \u043a\u043e\u0442\u0438\u043a\u0430, \u0437\u0430\u0441\u043d\u0443\u0432\u0448\u0435\u0433\u043e \u043d\u0430 \u043f\u043e\u043b\u0435. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c, \u043a\u0430\u043a \u043c\u044b \u0441\u0442\u0440\u043e\u0438\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0440\u043e\u0431\u043e\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/om\/x0\/a6\/omx0a6wfefbht9c1pialld-9vqy.png\"><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043c\u0430\u043b\u043e\u0439 \u043a\u0440\u043e\u0432\u044c\u044e<\/h3>\n<p>  \u041f\u0440\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u0430\u043c\u0438, \u0442\u043e\u0433\u0434\u0430 \u043c\u0443\u0447\u0435\u043d\u0438\u0439 \u0438 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u00ab\u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u0430\u00bb \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043e\u043c\u043d\u0438\u043a\u043e\u043b\u0435\u0441\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0442\u044c \u0438 \u0431\u044b\u043b\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 local planer \u043e\u0442 ROS, \u043d\u043e \u043f\u043e \u0440\u044f\u0434\u0443 \u043f\u0440\u0438\u0447\u0438\u043d \u0441\u043e\u0447\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u041d\u0438\u0436\u0435 \u0432\u0438\u0434\u043d\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u044f\u043a\u043e\u0439 \u0432\u0441\u044f\u0447\u0438\u043d\u044b \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0443 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0435\u0440\u0430:<\/p>\n<pre><code class=\"cpp\">\/**    * @class TrajectoryPlanner    * @brief Computes control velocities for a robot given a costmap, a plan, and the robot's position in the world.     *\/   class TrajectoryPlanner{     friend class TrajectoryPlannerTest; \/\/Need this for gtest to work     public:       \/**        * @brief  Constructs a trajectory controller        * @param world_model The WorldModel the trajectory controller uses to check for collisions         * @param costmap A reference to the Costmap the controller should use        * @param footprint_spec A polygon representing the footprint of the robot. (Must be convex)        * @param inscribed_radius The radius of the inscribed circle of the robot        * @param circumscribed_radius The radius of the circumscribed circle of the robot        * @param acc_lim_x The acceleration limit of the robot in the x direction        * @param acc_lim_y The acceleration limit of the robot in the y direction        * @param acc_lim_theta The acceleration limit of the robot in the theta direction        * @param sim_time The number of seconds to \"roll-out\" each trajectory        * @param sim_granularity The distance between simulation points should be small enough that the robot doesn't hit things        * @param vx_samples The number of trajectories to sample in the x dimension        * @param vtheta_samples The number of trajectories to sample in the theta dimension        * @param pdist_scale A scaling factor for how close the robot should stay to the path        * @param gdist_scale A scaling factor for how aggresively the robot should pursue a local goal        * @param occdist_scale A scaling factor for how much the robot should prefer to stay away from obstacles        * @param heading_lookahead How far the robot should look ahead of itself when differentiating between different rotational velocities        * @param oscillation_reset_dist The distance the robot must travel before it can explore rotational velocities that were unsuccessful in the past        * @param escape_reset_dist The distance the robot must travel before it can exit escape mode        * @param escape_reset_theta The distance the robot must rotate before it can exit escape mode        * @param holonomic_robot Set this to true if the robot being controlled can take y velocities and false otherwise        * @param max_vel_x The maximum x velocity the controller will explore        * @param min_vel_x The minimum x velocity the controller will explore        * @param max_vel_th The maximum rotational velocity the controller will explore        * @param min_vel_th The minimum rotational velocity the controller will explore        * @param min_in_place_vel_th The absolute value of the minimum in-place rotational velocity the controller will explore        * @param backup_vel The velocity to use while backing up        * @param dwa Set this to true to use the Dynamic Window Approach, false to use acceleration limits        * @param heading_scoring Set this to true to score trajectories based on the robot's heading after 1 timestep        * @param heading_scoring_timestep How far to look ahead in time when we score heading based trajectories        * @param meter_scoring adapt parameters to costmap resolution        * @param simple_attractor Set this to true to allow simple attraction to a goal point instead of intelligent cost propagation        * @param y_vels A vector of the y velocities the controller will explore        * @param angular_sim_granularity The distance between simulation points for angular velocity should be small enough that the robot doesn't hit things        *\/       TrajectoryPlanner(WorldModel&amp; world_model,            const costmap_2d::Costmap2D&amp; costmap,            std::vector&lt;geometry_msgs::Point&gt; footprint_spec,           double acc_lim_x = 1.0, double acc_lim_y = 1.0, double acc_lim_theta = 1.0,           double sim_time = 1.0, double sim_granularity = 0.025,            int vx_samples = 20, int vtheta_samples = 20,           double pdist_scale = 0.6, double gdist_scale = 0.8, double occdist_scale = 0.2,           double heading_lookahead = 0.325, double oscillation_reset_dist = 0.05,            double escape_reset_dist = 0.10, double escape_reset_theta = M_PI_2,           bool holonomic_robot = true,           double max_vel_x = 0.5, double min_vel_x = 0.1,            double max_vel_th = 1.0, double min_vel_th = -1.0, double min_in_place_vel_th = 0.4,           double backup_vel = -0.1,           bool dwa = false, bool heading_scoring = false, double heading_scoring_timestep = 0.1,           bool meter_scoring = true,           bool simple_attractor = false,           std::vector&lt;double&gt; y_vels = std::vector&lt;double&gt;(0),           double stop_time_buffer = 0.2,           double sim_period = 0.1, double angular_sim_granularity = 0.025); <\/code><\/pre>\n<p>  <i>\u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439 \u0438 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0432 \u0446\u0435\u043b\u043e\u043c.<\/i><\/p>\n<p>  \u0412\u0430\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u0430:<\/p>\n<ol>\n<li>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 world_model.<\/li>\n<li>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 Cost map: \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u00ab\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u00bb, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f. <\/li>\n<\/ol>\n<p>  \u0418\u0437 \u043f\u043b\u044e\u0441\u043e\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0430\u0445. <a href=\"https:\/\/github.com\/ros-planning\/navigation\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435 \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 <\/a><\/p>\n<p>  \u0412\u0430\u0436\u043d\u043e \u0443\u043f\u043e\u043c\u0438\u043d\u0443\u0442\u044c \u0447\u0442\u043e ROS \u043f\u0430\u043a\u0435\u0442\u044b \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0434\u043b\u044f \u0434\u0432\u0443\u0445\u043a\u043e\u043b\u0435\u0441\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0438 \u043f\u043e\u0434 \u043e\u043c\u043d\u0438 \u043e\u043d\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u0441\u0447\u0435\u0442 \u0443\u0432\u0435\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0443\u0433\u043b\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0434\u043e 360 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432, \u0447\u0442\u043e \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u043c.<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0434\u044f \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043c\u044b \u043e\u0441\u043e\u0437\u043d\u0430\u043b\u0438, \u0447\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0442\u044f\u0436\u0435\u043b\u044b\u0445 \u0444\u0438\u0448\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0443\u0442, \u043d\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 Odroid xu4 (\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u044f\u043b \u0435\u0449\u0435 \u043d\u0430 Samsung s5), \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u0438 \u0443\u0434\u0440\u0443\u0447\u0430\u044e\u0449\u0438\u043c\u0438, \u0430 \u043c\u0435\u0441\u0442\u0430 \u043f\u043e\u0434 \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043c\u043e\u0449\u043d\u043e\u0435 (\u0430 raspberry 4 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 jetson nano \u043d\u0435\u0440\u0432\u043d\u043e \u043a\u0443\u0440\u044f\u0442 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043a\u0435 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043d\u0438\u043c) \u043d\u0435\u0442. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430 \u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0430\u043c\u0438\u043c global planner, local planner \u0438 trajectory regulator<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ij\/qe\/es\/ijqeesrak1vuhjqfr1ij6exr4_a.jpeg\"><\/p>\n<h3>Global planer, local planner, trajectory regulator \u0438 \u0432\u0441\u0435 \u0432\u0441\u0435 \u0432\u0441\u0435<\/h3>\n<p>  Global \u0438 local \u043f\u043b\u0430\u043d\u0435\u0440\u044b \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u0434\u043e \u0442\u043e\u0447\u043a\u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435? \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/A*\">A* <\/a>\u0438 \u043a\u0430\u0442\u0430\u0442\u044c \u043f\u043e \u043d\u0435\u043c\u0443? \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, global planner \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f\u043c\u0438. \u0427\u0442\u043e\u0431\u044b \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u044d\u0442\u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 local planner, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b global planner (\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0443\u044e, \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 \u0440\u043e\u0431\u043e\u0442\u0430) \u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u0447\u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043d\u044e\u0430\u043d\u0441\u044b.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442, \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0433\u0434\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0435\u0445\u0430\u0442\u044c \u0440\u043e\u0431\u043e\u0442, \u043d\u043e \u043a\u0430\u043a \u0435\u043c\u0443 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440(trajectory regulator). \u041e\u043d \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442, \u0441 \u043a\u0430\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0440\u043e\u0431\u043e\u0442, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438. \u0412\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u0435\u043d \u0437\u0430 \u0442\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0435\u0445\u0430\u0442\u044c \u0440\u043e\u0431\u043e\u0442.<\/p>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u0438\u0445 \u0442\u0440\u0451\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u2014 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u0430\u0440\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0438\u0440\u0430. \u041e\u043d \u0437\u0430\u0434\u0430\u0435\u0442 \u0442\u043e, \u043a\u0430\u043a \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0443, \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0430\u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u0430\u0440\u0442\u043e\u0439 \u0438, \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043b\u0430\u043d\u0435\u0440\u043e\u0432.<\/p>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0441\u0442\u0435\u043a\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b \u043e\u0431\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d cost_map \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b. \u0412\u043e\u043e\u0431\u0449\u0435, \u043c\u044b \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043a\u0430\u0440\u0442: <a href=\"https:\/\/github.com\/IntelRealSense\/realsense-ros\/tree\/occupancy-mapping\">Occupancy_grid<\/a>, <a href=\"http:\/\/wiki.ros.org\/grid_map\">Grid_map<\/a>, <a href=\"https:\/\/github.com\/stonier\/cost_map\">Cost_map<\/a>, \u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c. <\/p>\n<p>  \u041f\u0440\u0438\u0447\u0438\u043d\u044b:<\/p>\n<ol>\n<li>\u0423\u0434\u043e\u0431\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043a\u0430\u0440\u0442\u043e\u0439.<\/li>\n<li>\u0415\u0441\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u043e\u0440\u043c (\u043a\u0440\u0443\u0433\u043e\u0432\u044b\u0435, \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0435, \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0438 \u0442.\u043f.).<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043b\u043e\u0435\u0432 \u043a\u0430\u0440\u0442\u044b \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/li>\n<li>\u0425\u043e\u0440\u043e\u0448\u0438\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<li>\u0418 \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u2014 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b. Grid map \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0442\u0438\u043f\u043e\u043c double \u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432 \u0440\u0430\u0437\u044b \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0447\u0435\u043c \u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043a\u0430\u0440\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 int8 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b. <\/li>\n<\/ol>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e Occupancy grid \u0442\u0430\u043a \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 int8, \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0445\u0432\u0430\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442 \u043d\u0435\u0433\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f. <\/p>\n<p>  \u041e\u0442 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0433\u0434\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0435, \u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0438 \u043d\u0435\u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0438\u043c\u044b\u0435 \u0437\u043e\u043d\u044b. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0441\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u043b\u0435 \u0438\u043d\u0444\u043b\u044f\u0446\u0438\u0438 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u043b\u0435\u0442\u043a\u0438. \u0418\u043d\u0444\u043b\u044f\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u0448\u043a\u0438\u043d \u0445\u0432\u043e\u0441\u0442, \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043d\u043e \u043f\u043e\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0448\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e \u0436\u0430\u043b\u0435\u0442\u044c. \u041c\u044b \u043d\u0430\u043d\u043e\u0441\u0438\u043c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u043f\u0430\u0441\u043d\u0443\u044e \u0437\u043e\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e local planner. Global planner \u0436\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435\u043c.<\/p>\n<h4>Global planner<\/h4>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e global planner. \u041e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 theta*. \u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/A*\">A*<\/a>, \u0433\u0434\u0435 \u0443\u043f\u043e\u0440 \u0438\u0434\u0435\u0442 \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 node, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0435\u0445\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0442.\u0435. \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u043d\u0435\u0439 \u043d\u0435\u0442 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0438 \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 local planner. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/it\/qs\/e4\/itqse4uuumbbzu8rxws07gapbn8.png\"><br \/>  <i>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 A* \u0438 theta*<\/i><\/p>\n<p>  \u0414\u043b\u044f global planner \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 (params\/path_planner.yaml), \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0442\u043e\u043f\u0438\u043a\u0438 \u043a\u0430\u0440\u0442\u044b \u0438 \u0442\u043e\u043f\u0438\u043a\u0438 \u0441 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 (\u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u043d\u0430 \u043f\u043e\u043b\u0435, \u0433\u0434\u0435 \u201cnull\u201d \u2014 \u044d\u0442\u043e \u0442\u043e\u043f\u0438\u043a \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0440\u043e\u0431\u043e\u0442\u0435). <\/p>\n<pre><code class=\"cpp\"># small robot debug param list robot_id: \"small\"  ########################### # cost_map_server params ## ########################### cost_map_server\/big_robot_size: 0.45 cost_map_server\/little_robot_size: 0.45 cost_map_server\/cube_size: 0.11 cost_map_server\/inscribed_radius: 0.3 cost_map_server\/inflation_radius: 0.3 cost_map_server\/inflation_exponential_rate: 0.6 cost_map_server\/big_robot1: \"\/aruco\/big_robot\" cost_map_server\/big_robot2: \"\/aruco\/enemy_robot1\" cost_map_server\/small_robot1: \"null\"  cost_map_server\/small_robot2: \"\/aruco\/enemy_robot2\" cost_map_server\/collision: \"collision\" cost_map_server\/image_resource_name: \"$(find cost_map_server)\/param\/image_resource.yaml\" cost_map_server\/min_diff_points: 0.01  ########################### ### path_planner params ### ########################### global_planner\/path_layer: \"inflation_layer\" global_planner\/path_force_layer: \"obstacle_inflation_layer\" global_planner\/frame_id: \"map\" global_planner\/current_position: \"real_corr\" global_planner\/path_filter_epsilon: 0<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f:<\/p>\n<ol>\n<li>\u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430, <\/li>\n<li>\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u043e\u0435\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0430\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442, <\/li>\n<li>\u0442\u043e\u043f\u0438\u043a \u043e \u043d\u0430\u0448\u0435\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0433\u0434\u0435 \u0432\u044b\u0434\u0430\u044e\u0442\u0441\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0443 \u043d\u0430\u0441 \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0441 \u043a\u0430\u043c\u0435\u0440\u044b \u0438 \u043e\u0434\u043e\u043c\u0435\u0442\u0440\u0438\u0438).<\/li>\n<\/ol>\n<p>  \u0421\u0430\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0443\u0442\u0438 \u2014 Theta Star \u2014 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b (src\/global_planner.cpp) \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">float cost_so_far[300][200]; PriorityPoint neighbors[8]; PriorityPoint current; int come_from[300][200][2];  double makePath_ThetaStar(std::vector&lt;cost_map::Index&gt; &amp;path, PriorityPoint start, PriorityPoint goal, std::string layer, cost_map::CostMap &amp;cost_map, double grid_cost, bool only_cost) {   std::priority_queue&lt;PriorityPoint, std::vector&lt;PriorityPoint&gt;, myCompare&gt; openSet;   size_t max_x = cost_map.getSize()[0];   size_t max_y = cost_map.getSize()[1];   std::fill_n(*cost_so_far, max_x * max_y, std::numeric_limits&lt;float&gt;::max());   cost_so_far[start.x][start.y] = 0;   come_from[start.x][start.y][0] = start.x;   come_from[start.x][start.y][1] = start.y;   openSet.push(start);   grid_cost=5;   while (!openSet.empty())   {     current = openSet.top();     openSet.pop();     if (current == goal)     {       break;     }     current.GetNeighbors(neighbors);     float current_cost = cost_so_far[current.x][current.y];     int parent_carent[2] ={come_from[current.x][current.y][0], come_from[current.x][current.y][1]};     for (int i = 0; i &lt; 8; i++)     {       if (!neighbors[i].OnMap(max_x, max_y))       {         continue;       }       bool onLine = lineOfSight(parent_carent[0], parent_carent[1], neighbors[i].x, neighbors[i].y, cost_map, layer, grid_cost + 1);       if (onLine)       {         float new_cost = cost_so_far[parent_carent[0]][parent_carent[1]] + HeuristicEvclid(parent_carent, neighbors[i], grid_cost*10);         if (new_cost &lt; cost_so_far[neighbors[i].x][neighbors[i].y])         {           cost_so_far[neighbors[i].x][neighbors[i].y] = new_cost;           neighbors[i].priority = HeuristicEvclid(neighbors[i], goal, grid_cost*10) + new_cost;           openSet.push(neighbors[i]);           come_from[neighbors[i].x][neighbors[i].y][0] = parent_carent[0];           come_from[neighbors[i].x][neighbors[i].y][1] = parent_carent[1];         }       }       else       {         float neighbor_price = cost_map.at(layer, cost_map::Index({neighbors[i].x, neighbors[i].y})) + neighbors[i].priority;         float new_cost = current_cost + neighbor_price;         if (new_cost &lt; cost_so_far[neighbors[i].x][neighbors[i].y])         {           cost_so_far[neighbors[i].x][neighbors[i].y] = new_cost;           neighbors[i].priority =HeuristicEvclid(neighbors[i], goal, grid_cost*10) + new_cost;           openSet.push(neighbors[i]);           come_from[neighbors[i].x][neighbors[i].y][0] = current.x;           come_from[neighbors[i].x][neighbors[i].y][1] = current.y;         }       }     }   }    if (only_cost)   {     return cost_so_far[current.x][current.y];   }   path.clear();   PriorityPoint temp_point;      while (current != start)   {     path.push_back({current.x, current.y});     temp_point.x = come_from[current.x][current.y][0];     temp_point.y = come_from[current.x][current.y][1];     current = temp_point;   }   path.push_back({current.x, current.y});   return 0; }<\/code><\/pre>\n<p>  \u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0442\u0430\u043a \u0436\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u0448\u043d\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u043f\u0443\u0442\u0438 RamerDouglasPeucker.<br \/>  \u041e\u043d \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0442\u043e\u0447\u043a\u0438 \u0438\u0437 \u043f\u0443\u0442\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442 \u043b\u0438\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0434\u0432\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0442\u043e\u0447\u043a\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/en\/_9\/dw\/en_9dw6khdarxbyf7gvrhpqg7b4.jpeg\"><\/p>\n<h4>Local planner<\/h4>\n<p>   \u0423 \u043d\u0430\u0441 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0441\u043f\u0443\u0441\u043a\u0430 \u0432 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u043b\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u2014 \u043f\u0443\u0442\u044c \u0438\u0437 global planner. \u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0451, \u043d\u0430 \u0447\u0442\u043e \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d. \u0412 local_planner \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0438. \u0412\u0441\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b: \u0440\u0435\u0436\u0438\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u043a \u043f\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434 \u043f\u043e \u043a\u0430\u0440\u0442\u0435, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0440\u0435\u0436\u0438\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043f\u0440\u0438\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0434\u0432\u0443\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u0438 \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u043a\u0440\u0430\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0437\u043e\u043d\u044b. \u0415\u0441\u043b\u0438 \u0442\u043e\u0447\u043a\u0430 \u043f\u043e\u043f\u0430\u043b\u0430 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 \u0437\u043e\u043d, \u0442\u043e \u0441\u043c\u0435\u0449\u0430\u0435\u043c \u043d\u0430 \u043c\u0435\u0441\u0442\u0430 \u0438\u0445 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f, \u0438\u0431\u043e \u0442\u0430\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e. <\/p>\n<p>  \u0420\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0432: \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0435\u0442 \u043d\u0430 \u043f\u0443\u0442\u0438 \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438, \u0442\u043e \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 2 \u0441\u043c, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u0449\u0430\u0435\u043c \u043f\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0443, \u0432 \u0438\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b local planner. <\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u0435\u043d \u0438, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 global planner, \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441 \u043a\u0430\u0440\u0442\u043e\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0433\u0440\u0430\u0444, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 10 \u0441\u043c \u0438 \u0441\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043d\u0430 4 \u0441\u043c, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0414\u0435\u0439\u043a\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0430\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430. \u041d\u043e \u0442\u0430\u043a\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b \u0434\u043b\u044f global planner \u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u0441 \u043d\u0443\u043b\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0441\u043f\u0443\u0441\u043a\u0430. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u044b\u043b \u043f\u0435\u0440\u0432\u044b\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c. \u041e\u043d \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 (\u0437\u0430\u043d\u0438\u043c\u0430\u043b \u0431\u043e\u043b\u044c\u0448\u0435 400 \u043c\u0431 \u0447\u0438\u0441\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043a\u0430\u0440\u0442\u0443 cost map \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435) \u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c. \u0420\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0432\u0432\u0438\u0434\u0443 \u043f\u043b\u043e\u0445\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043c\u0435\u043d\u044c\u0448\u0435 30 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0447\u0442\u043e \u043d\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e. <\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0439 \u0441\u043f\u0443\u0441\u043a \u0432 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u043b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0443\u0442\u0438 global planer&#8217;\u0430. \u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u043f\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u0443\u0442\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u043c\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 100-150 \u043c\u0431, \u0447\u0442\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0431\u044b\u043b\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/sg\/oq\/mo\/sgoqmogivjs8elhylt74oqjqrdw.png\"><br \/>  <i>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0438 local planer&#8217;\u043e\u043c<\/i><\/p>\n<p>  \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 global_planner, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 local_planner \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0430\u043b\u043e, \u0447\u0442\u043e \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u043e\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043b\u0435\u0436\u0430\u0442 \u043d\u0430 global_planner:<\/p>\n<pre><code class=\"cpp\">grid_map_server\/big_robot1 : 0.4 grid_map_server\/big_robot2 : 0.4 grid_map_server\/small_robot1 : 0.4 grid_map_server\/small_robot2 : 0.4 local_planner\/radius : 0.15 global_planner\/frame_id : \"map\"<\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c:<\/p>\n<ul>\n<li>\u0420\u0430\u0434\u0438\u0443\u0441\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u0437\u043e\u043d \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0440\u043e\u0431\u043e\u0442\u043e\u0432.<\/li>\n<li>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 local planer&#8217;\u043e\u043c.<\/li>\n<li>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u044f \u043a\u0430\u0440\u0442\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c.<\/li>\n<\/ul>\n<p>  \u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0431\u044b\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u0441\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0430 \u043f\u0443\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u043d\u0435\u0440\u0430 \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b \u0438 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b.<\/p>\n<pre><code class=\"cpp\">class Planner {   public:     Planner(double inflation_radius_, std::string frame_id_)     {           inflation_radius = inflation_radius_;       for (int i = 0; i &lt; 300; i++)       {         for(int j = 0; j &lt; 200; j++)           our_map[i][j] = 3000.0;       }       OurPath-&gt;poses.resize(50);              geometry_msgs::Pose pose;              pose.position.x = 0.0;       pose.position.y = 0.0;            for( int i = 0; i &lt; 50; i++)       {         OurPath-&gt;poses[i].pose = pose;       }              frame_id = frame_id_;     }     virtual ~Planner() {  }      virtual void UpdatePath() = 0;      ros::Publisher move_pub;       ros::Publisher BigEnemyPub;     ros::Publisher LittleEnemyPub;     ros::Publisher local_path_publisher;        protected:      \/\/ virtual double Calculate_Path_Len();      nav_msgs::Path* recursive_path(nav_msgs::Path *path, std::pair&lt;double, double&gt; start, std::pair&lt;double, double&gt; end,               double epsilon, int &amp;index)     {       if (CalcDistance(start, end) &lt; (epsilon) || path-&gt;poses.size() &gt; 200)         return path;        double start_x = (start.first + end.first) \/ 2.0;       double start_y = (start.second + end.second) \/ 2.0;        index = find_out(path, start);        geometry_msgs::PoseStamped pose;       pose.pose.position.x = start_x;       pose.pose.position.y = start_y;       path-&gt;poses.insert(path-&gt;poses.begin() + index, pose);        recursive_path(path, start, std::pair&lt;double, double&gt;{start_x, start_y}, epsilon, index);       recursive_path(path, std::pair&lt;double, double&gt;{start_x, start_y}, end, epsilon, index);     }     int find_out(nav_msgs::Path *path, pair_double point)     {       int index = 0;       for (int i = 0; i &lt; path-&gt;poses.size(); i++)         if (path-&gt;poses[i].pose.position.x == point.first &amp;&amp;           path-&gt;poses[i].pose.position.y == point.second)           return ++i;       return index;     }     void add_in_path(nav_msgs::Path* Path, geometry_msgs::PoseStamped pose, int&amp; Index)     {       Path-&gt;poses[Index % max_size] = pose;       Index++;     }       double inflation_radius;     double our_map[300][200];      int max_size = 49;          std::string frame_id;      nav_msgs::Path *path = new nav_msgs::Path;     nav_msgs::Path *OurPath = new nav_msgs::Path;  };<\/code><\/pre>\n<p>  \u041e\u0442 \u043d\u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0441\u044f \u043a\u043b\u0430\u0441\u0441 LocalPlanning, \u0433\u0434\u0435 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0441\u0451 \u044f\u0434\u0440\u043e \u043f\u043b\u0430\u043d\u0435\u0440\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0434\u0432\u0438\u0433 \u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u043a\u0440\u0430\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0437\u043e\u043d\u044b \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u0443\u0442\u0435\u043c.<\/p>\n<p>  \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b fichi.hpp, \u0430 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0439 \u0441\u043f\u0443\u0441\u043a \u0432 potential_field.hpp. \u041d\u0438\u0436\u0435 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0435 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0433\u0434\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 cost_map:<\/p>\n<pre><code class=\"cpp\">double CalcAttractivePotential(grid_map::Index index, double goalx, double goaly) {     return sqrt(pow(index[0] - goalx, 2) + pow(index[1] - goaly, 2)); }   void CalcPotential(double startx, double starty, double goalx, double goaly, cost_map::CostMap &amp;cost_map, double (&amp;our_map)[300][200]) {     \/\/ Use some magic for normalisation of Field     double max_distance = (CalcAttractivePotential(grid_map::Index(startx, starty), goalx, goaly) + 15);     if (max_distance == 0.0)     {         max_distance = 0.01;     }     for (cost_map::CircleIterator iterator(cost_map, grid_map::Position(startx \/ 100.0, starty \/ 100.0), max_distance \/ 100.);             !iterator.isPastEnd(); ++iterator)     {         try         {             grid_map::Index index(*iterator);             double uf;             uf = cost_map.at(\"obstacle_inflation_layer\", *iterator);              \/\/ if we on free podouble - field is more less then if it not free podouble             if ( uf &gt;= 10)             {                 uf = 3000.0; \/\/ CP - is const variable             }             else                 uf += CalcAttractivePotential(index, goalx, goaly)\/max_distance * 256;              our_map[299-index(0)][199-index(1)] = uf;         }         catch(std::exception&amp; e)         {             ROS_INFO(\"Exception! %s\", e.what() );         }     } }<\/code><\/pre>\n<p>  <\/p>\n<h4>Trajectory regulator <\/h4>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u043d\u043e \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u2014 \u044d\u0442\u043e trajectory regulator. \u041e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 local planner \u0432 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0438 \u0432\u044b\u0434\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0448\u0430\u0433\u0430. <\/p>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 \u0444\u0438\u043d\u0430\u043b\u0435 Eurobot 2018, \u044d\u0442\u043e \u0441\u043c\u0435\u0441\u044c \u043f\u0438\u0434 \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0433\u043e\u043d\u0430 \u0438 \u0442\u043e\u0440\u043c\u043e\u0436\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u0438\u0434\u0435\u0442 \u043d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u0435 \u0432 \u043f\u0443\u0442\u0438, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. <\/p>\n<p>  \u041f\u0438\u0434 \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440, \u0435\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u044d\u0442\u043e \u0441\u0443\u043c\u043c\u0430 \u0442\u0440\u0435\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0438\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0438 \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f. <\/p>\n<p>  \u042d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u044d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0443\u0442\u0435\u043c \u0438 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0432 \u043f\u0443\u0442\u0438 (\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0439, \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u043e\u0439, \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439, \u043d\u043e \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u0442\u043e\u0433\u0434\u0430 \u043d\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0439). \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e, \u0442\u0430\u043a \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0440\u043e\u0431\u043e\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u0445 \u0432\u044b\u0448\u0435 0.7 \u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432\u0440\u0435\u043c\u044f, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. <\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u043d\u043e\u0432\u043e\u043c\u0443 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u043d\u0438\u043a\u0443 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u0435\u0434\u0435\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u0441\u0443\u043c\u043c\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043a \u0442\u0440\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438. \u0412\u0442\u043e\u0440\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 Minimum Jerk. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u044d\u0442\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0430 5-\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438, \u0433\u0434\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b x \u0438 y \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043e\u0435\u0437\u0434\u0430 \u0434\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0442\u043e\u0447\u0435\u043a. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ho\/mw\/hd\/homwhdagbnkgdlrigettcc6yook.png\"><br \/>  <i>\u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0433\u0440\u0430\u0444\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0435 <\/i><\/p>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u0432\u0438\u0434 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b \u043d\u0430\u0441 \u0431\u043e\u043b\u044c\u0448\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u0441 \u043f\u043e\u0434\u0431\u043e\u0440\u043e\u043c \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u043e\u043b\u0438\u043d\u043e\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043b\u044f \u0434\u043e\u0435\u0437\u0434\u0430, \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f, \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f. <\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u043d\u0438\u043a\u0430 \u0441\u0442\u0430\u043b\u043e \u0442\u043e, \u0447\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0440\u043e\u0431\u043e\u0442\u0430. <\/p>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u0434\u0432\u0443\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043a\u043b\u0430\u0441\u0441 PlannerTrajectory \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 MinimumJerk <\/p>\n<pre><code class=\"cpp\">typedef struct State {     double velocity;     double acceleration;      State(double v_, double a_) : velocity(v_), acceleration(a_) {}      State() {         velocity = 0;         acceleration = 0;     } };  class PlannerTrajectory { private:     nav_msgs::Path global_path;     cost_map::CostMap *costmap_ptr;     geometry_msgs::PoseStamped Goal_pred;      std::vector&lt;double&gt; trajectory_x;     std::vector&lt;double&gt; trajectory_y;      double average_velocity = 80; \/\/ Defualt or get from param \/\/     double max_velocity = 100;     double coef_x[6];     double coef_y[6];     int frequency = 30; \/\/ Defualt or get from param \/\/     int index;  public:      PlannerTrajectory(cost_map::CostMap *costmap_, const int &amp;frequency_, const double &amp;max_velocity_,                       const double &amp;average_velocity_) {         average_velocity = average_velocity;;         max_velocity = max_velocity_;         costmap_ptr = costmap_;         frequency = frequency_;         Goal_pred.pose.position.x = 0.0;         Goal_pred.pose.position.y = 0.0;     }<\/code><\/pre>\n<p>  <i>\u041d\u0430 \u0444\u043e\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <\/i><\/p>\n<p>  \u0412 \u0434\u0440\u0443\u0433\u043e\u0439 \u0436\u0435 \u0444\u0430\u0439\u043b ( include\/trajectory_regulator.h) \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435: \u043f\u0440\u0438\u0435\u043c \u0442\u043e\u0447\u0435\u043a \u0438\u0437 \u0442\u043e\u043f\u0438\u043a\u043e\u0432, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0435\u0445\u0430\u0442\u044c \u043b\u0438 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0438, \u0442\u043e \u043d\u0435 \u0435\u0434\u0435\u043c) \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 ROS Melodic <\/h3>\n<p>  \u0412\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 lte \u0440\u0435\u043b\u0438\u0437 ROS \u2014 ROS Kinetic. \u041e\u043d \u043d\u0430\u0441 \u0432 \u0446\u0435\u043b\u043e\u043c \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b, \u043d\u043e \u0443\u0436\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0433\u043e\u0434\u0443 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430, \u0434\u0430 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u043f\u0430\u043a\u0435\u0442\u044b \u0441\u0442\u0430\u043b\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434 ROS Melodic. \u0418 \u0442\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043d\u0430\u043c\u0438 costmap_server \u043d\u0435\u0442 \u043f\u043e\u0434 Melodic.<\/p>\n<p>  \u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u0430\u0440\u0442.<\/p>\n<p>  \u041c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 Grid map, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0435\u043a \u043f\u043e\u0445\u043e\u0436, \u043d\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043e\u0442 0 \u0434\u043e 1. \u042d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0432\u043e \u0432\u0441\u0435\u043c \u0441\u0442\u0435\u043a\u0435 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435 global planner \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f 50 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 (\u0441\u0442\u043e\u044f\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0435, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e, \u0434\u0430\u0436\u0435 \u0432 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430), \u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b \u043f\u0443\u0442\u044c \u0440\u0430\u0437 \u0432 \u0434\u0432\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0438 \u0441\u0447\u0438\u0442\u0430\u043b \u043f\u043b\u043e\u0445\u043e: \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0433\u0440\u0443\u0437\u0438\u043b \u043e\u0434\u043d\u043e \u044f\u0434\u0440\u043e. \u0417\u0430 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0440\u043e\u0431\u043e\u0442 \u043c\u043e\u0433 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u044c \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443. \u042d\u0442\u043e \u043d\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e, \u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c \u043d\u0435\u0443\u0434\u0430\u0447\u0435\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 (\u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435). <\/p>\n<p>  \u0420\u0435\u0448\u0438\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0442\u0435\u043a, \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 grid map \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 occupancy grid. \u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u0439 \u043a\u0430\u0440\u0442 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u043d\u0443\u044e, \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f\u043c\u0438, \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e, \u043a\u0430\u0440\u0442\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f\u043c\u0438). \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043a\u043e\u0434\u0430, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0430\u0434\u0435\u0436\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. <\/p>\n<h4>Cost Map \u0441\u0435\u0440\u0432\u0435\u0440<\/h4>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u043b\u0433\u0438\u0445 \u043f\u043e\u0438\u0441\u043a\u043e\u0432, \u043c\u044b \u043d\u0430\u0448\u043b\u0438 fork \u043a\u0430\u0440\u0442\u044b costmap_serverr: <a href=\"https:\/\/github.com\/lelongg\/cost_map.git\">https:\/\/github.com\/lelongg\/cost_map.git<\/a> \u2014 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b fork.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/27\/rb\/oh\/27rbohj3kefxprwtjqrg4mwtqjc.png\"><\/p>\n<p>  \u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e grid map, \u043d\u0430 \u0441\u0434\u0430\u0447\u0443 \u043c\u044b \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 \u041a\u0430\u043b\u043c\u0430\u043d\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ni\/pm\/nz\/nipmnzvhcrqdje1cu8glf9quude.png\"><\/p>\n<p>  \u041e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043a\u0430\u0440\u0442 \u2014 \u044d\u0442\u043e \u0444\u0430\u0439\u043b \u043a\u0430\u0440\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u0435\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f. \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u0443\u044e png \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0433\u0434\u0435 \u0447\u0435\u0440\u043d\u043e\u0435 \u2014 \u044d\u0442\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435, \u0430 \u0431\u0435\u043b\u043e\u0435 \u2013 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0430\u044f \u0437\u043e\u043d\u0430. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/2b\/l5\/rg\/2bl5rgpuecb7he51heslqpvcazm.png\"><\/p>\n<p>  \u0414\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 cost_map_server \u0442\u0430\u043a \u0436\u0435 \u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a. \u0412 \u043d\u0435\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043f\u0438\u043a\u0438 \u0441 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432, \u0437\u043e\u043d\u0430 \u0438\u043d\u0444\u043b\u044f\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u043d\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0437\u043e\u043d\u044b \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443. <\/p>\n<pre><code class=\"cpp\">########################### # cost_map_server params ## ########################### cost_map_server\/big_robot_size: 0.4 cost_map_server\/little_robot_size: 0.4 cost_map_server\/cube_size: 0.11 cost_map_server\/inscribed_radius: 0.25 cost_map_server\/inflation_radius: 0.25 cost_map_server\/inflation_exponential_rate: 0.6 cost_map_server\/big_robot1: \"\/aruco\/robot1\" cost_map_server\/big_robot2: \"\/aruco\/robot2\" cost_map_server\/small_robot1: \"\/aruco\/robot3\"  cost_map_server\/small_robot2: \"\/aruco\/robot4\" cost_map_server\/collision: \"collision\" cost_map_server\/image_resource_name: \"$(find cost_map_server)\/param\/image_resource.yaml\" cost_map_server\/min_diff_points: 0.01<\/code><\/pre>\n<p>  \u041f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0445 \u0441\u043b\u043e\u0435\u0432 \u0438\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043d\u0438\u0445 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0448\u0435\u0442\u0441\u044f:  <\/p>\n<pre><code class=\"cpp\">void PublishChanges()     {         nav_msgs::OccupancyGrid msg;         cost_map_msgs::CostMap cost_map_msg;         if (obstacle_inflation_publisher.getNumSubscribers() &gt; 0)         {             cost_map::toOccupancyGrid(costmap, \"obstacle_layer\", msg);             obstacle_inflation_publisher.publish(msg);         }         if (inflation_publisher.getNumSubscribers() &gt; 0)         {             cost_map::toOccupancyGrid(costmap, \"inflation_layer\", msg);             inflation_publisher.publish(msg);         }         if (cost_map_publisher.getNumSubscribers() &gt; 0)         {             cost_map::toMessage(costmap, cost_map_msg);             cost_map_publisher.publish(cost_map_msg);         }     }<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435<\/h3>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0441\u0435\u0433\u043e \u0441\u0442\u0435\u043a\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<ul>\n<li> \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c ROS <\/li>\n<li>roslaunch cost_map_server cost_map_server_alone.launch \u2014 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u0430\u0440\u0442\u044b<\/li>\n<li>roslaunch global_planner global_planner.launch \u2014 \u0437\u0430\u043f\u0443\u0441\u043a global planer \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/li>\n<li>rosparam load $(find local_planner)\/param\/param.yaml<\/li>\n<li>rosrun local_planner local_planning<\/li>\n<li>rosrun trajectory_regulator trajectory_regulator<\/li>\n<li>rosrun global_planner mover <\/li>\n<li>rosrun rviz <\/li>\n<li>\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c inflation_layer <\/li>\n<li>\u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0430\u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0442\u043e\u043f\u0438\u043a \/gp\/goal \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u043e\u0431\u043e\u0442\u0430 \u0432 \u0436\u0435\u043b\u0430\u0435\u043c\u0443\u044e \u0442\u043e\u0447\u043a\u0443 <\/li>\n<\/ul>\n<p>  \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0441\u0435\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432, \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0442\u0435\u043a\u0430 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435. <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.2493%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/iRY5WHgAFns?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0448\u0435\u043c\u0443 \u0440\u043e\u0431\u043e\u0442\u0443 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0435\u0437\u0434\u0438\u0442\u044c \u043d\u0430 \u043e\u043c\u043d\u0438 \u043a\u043e\u043b\u0435\u0441\u0430\u0445. \u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043a \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043d\u0438 \u043e\u0434\u0438\u043d \u043a\u043e\u0442 \u043d\u0435 \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b, \u0430 \u0440\u043e\u0431\u043e\u0442 \u2014 \u043a\u0440\u0430\u0441\u0430\u0432\u0447\u0438\u043a. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u043e\u0432, \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043d\u0430 eurobot, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u044b.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0441 \u044d\u0442\u043e \u0441\u0442\u0435\u043a \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439, \u043d\u043e\u2026<\/p>\n<p>  \u041d\u0430\u0448 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c: t.me\/SetUpSber<br \/>  <a href=\"https:\/\/github.com\/ristle\/EUrobotNavigation\">\u0421\u0430\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u0430<\/a><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/98\/gl\/4m\/98gl4mdibk20qgavmhzkbdppu4w.jpeg\"><\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d() } } }t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>      <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\/post\/479636\/\"> https:\/\/habr.com\/ru\/post\/479636\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/479636\/\">\u042d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b setUP \u043f\u0440\u043e \u043d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0439 Eurobot Open \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e ROS. <\/p>\n<p>  <a href=\"https:\/\/habr.com\/ru\/post\/478836\/\">\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u0438 \u043e\u0431\u0449\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0440\u043e\u0431\u043e\u0442\u043e\u0432.<\/a><\/p>\n<p>  \u0420\u043e\u0431\u043e\u0442\u044b \u0435\u0437\u0434\u044f\u0442 \u043f\u043e \u0440\u043e\u0432\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044e \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043e\u0434\u043d\u0430\u043a\u043e, \u043a\u043e\u0432\u0430\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0443\u043a\u0440\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b (\u0434\u0430 \u0438 \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u0447\u044c \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u043e\u0439 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u043b\u043b\u043e\u0432), \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0435\u0445\u0430\u0442\u044c \u043a \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u043d\u0435 \u0437\u0430\u0434\u0435\u0442\u044c \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f. \u0421 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0430 \u043f\u043e\u043b\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \u0438 \u0437\u043d\u0430\u0435\u043c, \u0433\u0434\u0435 \u043e\u043d \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u0430\u043b\u043e \u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e. <\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u0445\u0430\u0442\u044c \u0438\u0437 \u0442\u043e\u0447\u043a\u0438 \u0410 \u0432 \u0442\u043e\u0447\u043a\u0443 \u0411, \u043d\u0435 \u043f\u0440\u043e\u0435\u0445\u0430\u0432 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e \u0445\u0432\u043e\u0441\u0442\u0443 \u043a\u043e\u0442\u0438\u043a\u0430, \u0437\u0430\u0441\u043d\u0443\u0432\u0448\u0435\u0433\u043e \u043d\u0430 \u043f\u043e\u043b\u0435. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c, \u043a\u0430\u043a \u043c\u044b \u0441\u0442\u0440\u043e\u0438\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0440\u043e\u0431\u043e\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/om\/x0\/a6\/omx0a6wfefbht9c1pialld-9vqy.png\">  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-295797","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/295797","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=295797"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/295797\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=295797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=295797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=295797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}