From 0d7b9fa2d0caf7c9dc1c88db7d8a9a1ce4984c06 Mon Sep 17 00:00:00 2001 From: Sergi Hernandez Juan <shernand@iri.upc.edu> Date: Thu, 5 Nov 2020 11:16:16 +0100 Subject: [PATCH] Added a new parameter to set the minimum length to take into account a path segment when splitting. --- cfg/AckermannLocalPlanner.cfg | 1 + include/ackermann_planner_limits.h | 3 +++ src/ackermann_planner_ros.cpp | 1 + src/ackermann_planner_util.cpp | 2 +- 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cfg/AckermannLocalPlanner.cfg b/cfg/AckermannLocalPlanner.cfg index ba17b2f..0748ebc 100755 --- a/cfg/AckermannLocalPlanner.cfg +++ b/cfg/AckermannLocalPlanner.cfg @@ -81,6 +81,7 @@ gen.add("max_steer_acc", double_t, 0, " gen.add("axis_distance", double_t, 0, "distance between axes", 1.65, -2.0, 2) gen.add("wheel_distance", double_t, 0, "distance between wheels", 1.2, 0, 2) gen.add("wheel_radius", double_t, 0, "Wheel diameter", 0.436, 0, 2) +gen.add("split_ignore_length", double_t, 0, "Paths segments under this length will be ignored",1.0,0.0,2.0) gen.add("cmd_vel_avg", int_t, 0, "Number of cmd_vel to average", 1, 1, 20) gen.add("odom_avg", int_t, 0, "Number of odom to average", 1, 1, 20) diff --git a/include/ackermann_planner_limits.h b/include/ackermann_planner_limits.h index 21039e7..1c3f9ff 100644 --- a/include/ackermann_planner_limits.h +++ b/include/ackermann_planner_limits.h @@ -56,6 +56,7 @@ class AckermannPlannerLimits double wheel_distance; double wheel_radius; // general planner limits + double split_ignore_length; bool prune_plan; double xy_goal_tolerance; double yaw_goal_tolerance; @@ -81,6 +82,7 @@ class AckermannPlannerLimits double wheel_distance, double wheel_radius, // general planner limits + double split_ignore_length, double xy_goal_tolerance, double yaw_goal_tolerance, bool prune_plan=true, @@ -97,6 +99,7 @@ class AckermannPlannerLimits axis_distance(axis_distance), wheel_distance(wheel_distance), wheel_radius(wheel_radius), + split_ignore_length(split_ignore_length), prune_plan(prune_plan), xy_goal_tolerance(xy_goal_tolerance), yaw_goal_tolerance(yaw_goal_tolerance), diff --git a/src/ackermann_planner_ros.cpp b/src/ackermann_planner_ros.cpp index 18a29fe..ca3bc68 100644 --- a/src/ackermann_planner_ros.cpp +++ b/src/ackermann_planner_ros.cpp @@ -87,6 +87,7 @@ void AckermannPlannerROS::reconfigure_callback(iri_ackermann_local_planner::Acke limits.wheel_distance = config.wheel_distance; limits.wheel_radius = config.wheel_radius; // general planner limits + limits.split_ignore_length = config.split_ignore_length; limits.xy_goal_tolerance = config.xy_goal_tolerance; limits.yaw_goal_tolerance = config.yaw_goal_tolerance; limits.prune_plan = config.prune_plan; diff --git a/src/ackermann_planner_util.cpp b/src/ackermann_planner_util.cpp index e162d43..80f1159 100644 --- a/src/ackermann_planner_util.cpp +++ b/src/ackermann_planner_util.cpp @@ -137,7 +137,7 @@ bool AckermannPlannerUtil::set_plan(const std::vector<geometry_msgs::PoseStamped angle=std::acos(angle); if(fabs(angle)>1.57) { - if(pathLength>1.0) + if(pathLength>limits_.split_ignore_length) { ROS_INFO("TrajectoryPlannerROS::setPlan: subPath split at i=%d, angle=%f, length=%f", i, angle, pathLength); subPathList.push_back(subPath); -- GitLab