diff --git a/cfg/OpendriveGlobalPlanner.cfg b/cfg/OpendriveGlobalPlanner.cfg index 0453c040a230019aa379e675c6f6b59dc445cb8f..c12e6bf230de9cbb86d6150e34cdfb58278106e4 100755 --- a/cfg/OpendriveGlobalPlanner.cfg +++ b/cfg/OpendriveGlobalPlanner.cfg @@ -12,8 +12,10 @@ gen.const("time", int_t, 1, "Use distance and speed to compute costs"), gen.add("opendrive_file", str_t, 0, "Opendrive map file", "") gen.add("opendrive_frame", str_t, 0, "Opendrive frame ID", "") -gen.add("angle_tol", double_t, 0, "Angle tolerance to find start and end positions on the road map", 0.5, 0.1, 10.0) -gen.add("dist_tol", double_t, 0, "Distance tolerance to find start and end positions on the road map", 3.0, 0.5, 10.0) +gen.add("start_angle_tol", double_t, 0, "Angle tolerance to find start and end positions on the road map", 0.5, 0.1, 10.0) +gen.add("start_dist_tol", double_t, 0, "Distance tolerance to find start and end positions on the road map", 3.0, 0.5, 10.0) +gen.add("end_angle_tol", double_t, 0, "Angle tolerance to find start and end positions on the road map", 0.5, 0.1, 10.0) +gen.add("end_dist_tol", double_t, 0, "Distance tolerance to find start and end positions on the road map", 3.0, 0.5, 10.0) gen.add("multi_hyp", bool_t, 0, "Use multi hypothesis path search", False) gen.add("resolution", double_t, 0, "Resolution of the generated path", 0.1, 0.01, 1.0) gen.add("scale_factor", double_t, 0, "Scale factor of the input road description", 1.0, 0.01, 10.0) diff --git a/include/iri_opendrive_global_planner/opendrive_planner.h b/include/iri_opendrive_global_planner/opendrive_planner.h index 2ea9ae5ee9665761db9f19fc2741458019e8ca9d..786f38bf2d8859d5ceffd94c6cc441ae7639917f 100644 --- a/include/iri_opendrive_global_planner/opendrive_planner.h +++ b/include/iri_opendrive_global_planner/opendrive_planner.h @@ -137,8 +137,10 @@ class OpendriveGlobalPlanner : public nav_core::BaseGlobalPlanner COpendriveRoadMap roadmap; std::vector<unsigned int> best_path; ros::Time best_path_stamp; - double angle_tol; - double dist_tol; + double start_angle_tol; + double start_dist_tol; + double end_angle_tol; + double end_dist_tol; bool multi_hyp; private: diff --git a/src/opendrive_planner.cpp b/src/opendrive_planner.cpp index 7d7cd9def21efc7d9493c74e46d73b9716019fee..0ac42a4cf5bbacc18798c2d3a1cee19954507a21 100644 --- a/src/opendrive_planner.cpp +++ b/src/opendrive_planner.cpp @@ -51,8 +51,10 @@ namespace iri_opendrive_global_planner { OpendriveGlobalPlanner::OpendriveGlobalPlanner() : costmap_(NULL), initialized_(false), tf2_listener(tf2_buffer) { - this->angle_tol=DEFAULT_ANGLE_THRESHOLD; - this->dist_tol=DEFAULT_DIST_THRESHOLD; + this->start_angle_tol=DEFAULT_ANGLE_THRESHOLD; + this->start_dist_tol=DEFAULT_DIST_THRESHOLD; + this->end_angle_tol=DEFAULT_ANGLE_THRESHOLD; + this->end_dist_tol=DEFAULT_DIST_THRESHOLD; this->multi_hyp=false; } @@ -115,10 +117,14 @@ void OpendriveGlobalPlanner::initialize(std::string name, costmap_2d::Costmap2D* ROS_ERROR("OpendriveGlobalPlanner: Opendrive map file not defined"); if(!private_nh.getParam("opendrive_frame", this->opendrive_frame_id_)) ROS_ERROR("OpendriveGlobalPlanner: Opendrive frame ID not defined"); - if(!private_nh.getParam("angle_tol", this->angle_tol)) - ROS_ERROR("OpendriveGlobalPlanner: Angle tolerance for the goals not defined"); - if(!private_nh.getParam("dist_tol", this->dist_tol)) - ROS_ERROR("OpendriveGlobalPlanner: Distance tolerance for the goals not defined"); + if(!private_nh.getParam("start_angle_tol", this->start_angle_tol)) + ROS_ERROR("OpendriveGlobalPlanner: Angle tolerance for the start position not defined"); + if(!private_nh.getParam("start_dist_tol", this->start_dist_tol)) + ROS_ERROR("OpendriveGlobalPlanner: Distance tolerance for the start position not defined"); + if(!private_nh.getParam("end_angle_tol", this->end_angle_tol)) + ROS_ERROR("OpendriveGlobalPlanner: Angle tolerance for the end position not defined"); + if(!private_nh.getParam("end_dist_tol", this->end_dist_tol)) + ROS_ERROR("OpendriveGlobalPlanner: Distance tolerance for the end position not defined"); if(!private_nh.getParam("multi_hyp", this->multi_hyp)) ROS_ERROR("OpendriveGlobalPlanner: Multihypotheis feature not defined"); if(!private_nh.getParam("cost_type",cost_type)) @@ -235,8 +241,10 @@ void OpendriveGlobalPlanner::reconfigureCB(iri_opendrive_global_planner::Opendri this->roadmap.set_scale_factor(new_config.scale_factor); this->roadmap.set_min_road_length(new_config.min_road_length); this->opendrive_frame_id_=new_config.opendrive_frame; - this->angle_tol=new_config.angle_tol; - this->dist_tol=new_config.dist_tol; + this->start_angle_tol=new_config.start_angle_tol; + this->start_dist_tol=new_config.start_dist_tol; + this->end_angle_tol=new_config.end_angle_tol; + this->end_dist_tol=new_config.end_dist_tol; this->multi_hyp=new_config.multi_hyp; if(new_config.opendrive_file!=this->config.opendrive_file || new_config.scale_factor!=this->config.scale_factor || new_config.min_road_length!=this->config.min_road_length) { @@ -369,7 +377,7 @@ bool OpendriveGlobalPlanner::makePlan(const geometry_msgs::PoseStamped& start, c { //ROS_WARN("Make Plan"); yaw=tf2::getYaw(start_out.pose.orientation); - this->roadmap.set_start_pose(start_out.pose.position.x,start_out.pose.position.y,yaw,this->dist_tol,this->angle_tol); + this->roadmap.set_start_pose(start_out.pose.position.x,start_out.pose.position.y,yaw,this->start_dist_tol,this->start_angle_tol); this->roadmap.get_start_pose_candidates(start_candidates); if(this->config.debug) { @@ -381,7 +389,7 @@ bool OpendriveGlobalPlanner::makePlan(const geometry_msgs::PoseStamped& start, c } } yaw=tf2::getYaw(goal_out.pose.orientation); - this->roadmap.set_end_pose(goal_out.pose.position.x,goal_out.pose.position.y,yaw,this->dist_tol,this->angle_tol); + this->roadmap.set_end_pose(goal_out.pose.position.x,goal_out.pose.position.y,yaw,this->end_dist_tol,this->end_angle_tol); this->roadmap.get_end_pose_candidates(end_candidates); if(this->config.debug) {