|
|
|
|
@@ -56,19 +56,18 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::initialize(robot::NodeHandle &
|
|
|
|
|
if (!costmap_robot_->isCurrent())
|
|
|
|
|
throw robot_nav_core2::CostmapDataLagException("Costmap2DROBOT is out of date somehow.");
|
|
|
|
|
|
|
|
|
|
nh_ = robot::NodeHandle("~");
|
|
|
|
|
parent_ = parent;
|
|
|
|
|
planner_nh_ = robot::NodeHandle(parent_, name);
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "Planner namespace: %s", planner_nh_.getNamespace().c_str());
|
|
|
|
|
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "Planner namespace: %s, parent namespace: %s", planner_nh_.getNamespace().c_str(), parent_.getNamespace().c_str());
|
|
|
|
|
this->getParams(planner_nh_);
|
|
|
|
|
|
|
|
|
|
std::string traj_generator_name;
|
|
|
|
|
planner_nh_.param("trajectory_generator_name", traj_generator_name, std::string("nav_plugins::StandardTrajectoryGenerator"));
|
|
|
|
|
planner_nh_.param("trajectory_generator_name", traj_generator_name, std::string("StandardTrajectoryGenerator"));
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "Using Trajectory Generator \"%s\"", traj_generator_name.c_str());
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
std::string path_file_so = "/home/robotics/AGV/Diff_Wheel_Prj/pnkx_robot_nav_core2/build/src/Algorithms/Packages/local_planners/pnkx_local_planner/libpnkx_local_planner.so";
|
|
|
|
|
robot::PluginLoaderHelper loader;
|
|
|
|
|
std::string path_file_so = loader.findLibraryPath(traj_generator_name);
|
|
|
|
|
traj_gen_loader_ = boost::dll::import_alias<score_algorithm::TrajectoryGenerator::Ptr()>(
|
|
|
|
|
path_file_so, traj_generator_name, boost::dll::load_mode::append_decorations);
|
|
|
|
|
traj_generator_ = traj_gen_loader_();
|
|
|
|
|
@@ -77,7 +76,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::initialize(robot::NodeHandle &
|
|
|
|
|
robot::log_error_at(__FILE__, __LINE__, "Failed to create trajectory generator \"%s\": returned null pointer", traj_generator_name.c_str());
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
robot::NodeHandle nh_traj_gen = robot::NodeHandle(nh_, traj_generator_name);
|
|
|
|
|
robot::NodeHandle nh_traj_gen = robot::NodeHandle(parent_, traj_generator_name);
|
|
|
|
|
traj_generator_->initialize(nh_traj_gen);
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "Successfully initialized trajectory generator \"%s\"", traj_generator_name.c_str());
|
|
|
|
|
}
|
|
|
|
|
@@ -88,20 +87,21 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::initialize(robot::NodeHandle &
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string algorithm_nav_name;
|
|
|
|
|
planner_nh_.param("algorithm_nav_name", algorithm_nav_name, std::string("pnkx_local_planner::PTA"));
|
|
|
|
|
planner_nh_.getParam("algorithm_nav_name", algorithm_nav_name, std::string("pnkx_local_planner::PTA"));
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "Using Algorithm \"%s\"", algorithm_nav_name.c_str());
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
std::string path_file_so = "/home/robotics/AGV/Diff_Wheel_Prj/pnkx_robot_nav_core2/build/src/Algorithms/Packages/local_planners/pnkx_local_planner/libpnkx_local_planner.so";
|
|
|
|
|
algorithm_loader_ = boost::dll::import_alias<score_algorithm::ScoreAlgorithm::Ptr()>(
|
|
|
|
|
robot::PluginLoaderHelper loader;
|
|
|
|
|
std::string path_file_so = loader.findLibraryPath(algorithm_nav_name);
|
|
|
|
|
nav_algorithm_loader_ = boost::dll::import_alias<score_algorithm::ScoreAlgorithm::Ptr()>(
|
|
|
|
|
path_file_so, algorithm_nav_name, boost::dll::load_mode::append_decorations);
|
|
|
|
|
nav_algorithm_ = algorithm_loader_();
|
|
|
|
|
nav_algorithm_ = nav_algorithm_loader_();
|
|
|
|
|
if (!nav_algorithm_)
|
|
|
|
|
{
|
|
|
|
|
robot::log_error_at(__FILE__, __LINE__, "Failed to load algorithm %s", algorithm_nav_name.c_str());
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
nav_algorithm_->initialize(nh_, algorithm_nav_name, tf, costmap_robot_, traj_generator_);
|
|
|
|
|
nav_algorithm_->initialize(parent_, algorithm_nav_name, tf, costmap_robot_, traj_generator_);
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception &ex)
|
|
|
|
|
{
|
|
|
|
|
@@ -110,19 +110,20 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::initialize(robot::NodeHandle &
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string algorithm_rotate_name;
|
|
|
|
|
planner_nh_.param("algorithm_rotate_name", algorithm_rotate_name, std::string("pnkx_local_planner::RotateToGoalDiff"));
|
|
|
|
|
planner_nh_.param("algorithm_rotate_name", algorithm_rotate_name, std::string("MKTAlgorithmDiffRotateToGoal"));
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
std::string path_file_so = "/home/robotics/AGV/Diff_Wheel_Prj/pnkx_robot_nav_core2/build/src/Algorithms/Packages/local_planners/pnkx_local_planner/libpnkx_local_planner.so";
|
|
|
|
|
algorithm_loader_ = boost::dll::import_alias<score_algorithm::ScoreAlgorithm::Ptr()>(
|
|
|
|
|
robot::PluginLoaderHelper loader;
|
|
|
|
|
std::string path_file_so = loader.findLibraryPath(algorithm_rotate_name);
|
|
|
|
|
rotate_algorithm_loader_ = boost::dll::import_alias<score_algorithm::ScoreAlgorithm::Ptr()>(
|
|
|
|
|
path_file_so, algorithm_rotate_name, boost::dll::load_mode::append_decorations);
|
|
|
|
|
rotate_algorithm_ = algorithm_loader_();
|
|
|
|
|
rotate_algorithm_ = rotate_algorithm_loader_();
|
|
|
|
|
if (!rotate_algorithm_)
|
|
|
|
|
{
|
|
|
|
|
robot::log_error_at(__FILE__, __LINE__, "Failed to create rotate algorithm \"%s\": returned null pointer", algorithm_rotate_name.c_str());
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
rotate_algorithm_->initialize(nh_, algorithm_rotate_name, tf, costmap_robot_, traj_generator_);
|
|
|
|
|
rotate_algorithm_->initialize(parent_, algorithm_rotate_name, tf, costmap_robot_, traj_generator_);
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "Successfully initialized rotate algorithm \"%s\"", algorithm_rotate_name.c_str());
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception &ex)
|
|
|
|
|
@@ -133,10 +134,12 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::initialize(robot::NodeHandle &
|
|
|
|
|
|
|
|
|
|
std::string goal_checker_name;
|
|
|
|
|
planner_nh_.param("goal_checker_name", goal_checker_name, std::string("dwb_plugins::SimpleGoalChecker"));
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "goal_checker_name: %s", goal_checker_name.c_str());
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
std::string path_file_so = "/home/robotics/AGV/Diff_Wheel_Prj/pnkx_robot_nav_core2/build/src/Algorithms/Packages/local_planners/pnkx_local_planner/libpnkx_local_planner.so";
|
|
|
|
|
boost::dll::import_alias<score_algorithm::GoalChecker::Ptr()>(
|
|
|
|
|
robot::PluginLoaderHelper loader;
|
|
|
|
|
std::string path_file_so = loader.findLibraryPath(goal_checker_name);
|
|
|
|
|
goal_checker_loader_ = boost::dll::import_alias<score_algorithm::GoalChecker::Ptr()>(
|
|
|
|
|
path_file_so, goal_checker_name, boost::dll::load_mode::append_decorations);
|
|
|
|
|
goal_checker_ = goal_checker_loader_();
|
|
|
|
|
if (!goal_checker_)
|
|
|
|
|
@@ -144,7 +147,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::initialize(robot::NodeHandle &
|
|
|
|
|
robot::log_error_at(__FILE__, __LINE__, "Failed to create goal checker \"%s\": returned null pointer", goal_checker_name.c_str());
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
goal_checker_->initialize(nh_);
|
|
|
|
|
goal_checker_->initialize(parent_);
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "Successfully initialized goal checker \"%s\"", goal_checker_name.c_str());
|
|
|
|
|
}
|
|
|
|
|
catch (const std::exception &ex)
|
|
|
|
|
@@ -152,6 +155,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::initialize(robot::NodeHandle &
|
|
|
|
|
robot::log_error_at(__FILE__, __LINE__, "Unexpected exception while creating goal checker \"%s\": %s", goal_checker_name.c_str(), ex.what());
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this->initializeOthers();
|
|
|
|
|
this->getMaker();
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "%s is sucessed", name.c_str());
|
|
|
|
|
@@ -162,8 +166,10 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::initialize(robot::NodeHandle &
|
|
|
|
|
void pnkx_local_planner::PNKXDockingLocalPlanner::getMaker()
|
|
|
|
|
{
|
|
|
|
|
std::string maker_name, maker_sources;
|
|
|
|
|
nh_.param("maker_name", maker_name, std::string(""));
|
|
|
|
|
nh_.param("maker_sources", maker_sources, std::string(""));
|
|
|
|
|
parent_.param("maker_name", maker_name, std::string(""));
|
|
|
|
|
parent_.param("maker_sources", maker_sources, std::string(""));
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "maker_name: %s", maker_name.c_str());
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "maker_sources: %s", maker_sources.c_str());
|
|
|
|
|
std::stringstream ss(maker_sources);
|
|
|
|
|
std::string source;
|
|
|
|
|
|
|
|
|
|
@@ -171,24 +177,23 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::getMaker()
|
|
|
|
|
{
|
|
|
|
|
if (maker_name == source)
|
|
|
|
|
{
|
|
|
|
|
robot::NodeHandle source_node(nh_, source);
|
|
|
|
|
robot::NodeHandle source_node(parent_, source);
|
|
|
|
|
|
|
|
|
|
if (source_node.hasParam("plugins"))
|
|
|
|
|
{
|
|
|
|
|
XmlRpc::XmlRpcValue plugins;
|
|
|
|
|
robot_xmlrpcpp::XmlRpcValue plugins;
|
|
|
|
|
source_node.getParam("plugins", plugins);
|
|
|
|
|
|
|
|
|
|
if (plugins.getType() == XmlRpc::XmlRpcValue::TypeArray)
|
|
|
|
|
if (plugins.getType() == robot_xmlrpcpp::XmlRpcValue::TypeArray)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < plugins.size(); ++i)
|
|
|
|
|
{
|
|
|
|
|
if (plugins[i].getType() == XmlRpc::XmlRpcValue::TypeStruct)
|
|
|
|
|
if (plugins[i].getType() == robot_xmlrpcpp::XmlRpcValue::TypeStruct)
|
|
|
|
|
{
|
|
|
|
|
std::stringstream name;
|
|
|
|
|
name << source << "/" << static_cast<std::string>(plugins[i]["name"]);
|
|
|
|
|
std::string docking_planner_name = static_cast<std::string>(plugins[i]["docking_planner"]);
|
|
|
|
|
std::string docking_nav_name = static_cast<std::string>(plugins[i]["docking_nav"]);
|
|
|
|
|
|
|
|
|
|
// std::shared_ptr<DockingPlanner> dkpl = std::make_shared<DockingPlanner>(name.str());
|
|
|
|
|
DockingPlanner* dkpl = new DockingPlanner(name.str());
|
|
|
|
|
dkpl->docking_planner_name_ = docking_planner_name;
|
|
|
|
|
@@ -215,7 +220,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::initializeOthers()
|
|
|
|
|
{
|
|
|
|
|
std::string algorithm_nav_name;
|
|
|
|
|
planner_nh_.param("algorithm_nav_name", algorithm_nav_name, std::string("pnkx_local_planner::PTA"));
|
|
|
|
|
if (!nh_.getParam(algorithm_nav_name, original_papams_))
|
|
|
|
|
if (!parent_.getParam(algorithm_nav_name, original_papams_))
|
|
|
|
|
robot::log_warning_at(__FILE__, __LINE__, "No found in %s in yaml-file, please check configuration", algorithm_nav_name.c_str());
|
|
|
|
|
original_xy_goal_tolerance_ = xy_goal_tolerance_;
|
|
|
|
|
original_yaw_goal_tolerance_ = yaw_goal_tolerance_;
|
|
|
|
|
@@ -247,8 +252,8 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::reset()
|
|
|
|
|
|
|
|
|
|
std::string algorithm_nav_name;
|
|
|
|
|
planner_nh_.param("algorithm_nav_name", algorithm_nav_name, std::string("pnkx_local_planner::PTA"));
|
|
|
|
|
robot::NodeHandle nh_algorithm = robot::NodeHandle(nh_, algorithm_nav_name);
|
|
|
|
|
nh_.setParam(algorithm_nav_name, original_papams_);
|
|
|
|
|
robot::NodeHandle nh_algorithm = robot::NodeHandle(parent_, algorithm_nav_name);
|
|
|
|
|
parent_.setParam(algorithm_nav_name, original_papams_);
|
|
|
|
|
nh_algorithm.setParam("allow_rotate", false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -279,7 +284,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::prepare(const robot_nav_2d_msg
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (!pnkx_local_planner::transformGlobalPlan(tf_, global_plan_, local_start_pose, costmap_robot_, costmap_robot_->getGlobalFrameID(), 2.0, transformed_plan_))
|
|
|
|
|
if (!pnkx_local_planner::transformGlobalPlan(tf_, global_plan_, local_start_pose, costmap_robot_, costmap_robot_->getGlobalFrameID(), 2.0, transformed_global_plan_))
|
|
|
|
|
robot::log_warning_at(__FILE__, __LINE__, "Transform global plan is failed");
|
|
|
|
|
}
|
|
|
|
|
catch(const robot_nav_core2::LocalPlannerException& e)
|
|
|
|
|
@@ -290,7 +295,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::prepare(const robot_nav_2d_msg
|
|
|
|
|
double x_direction, y_direction, theta_direction;
|
|
|
|
|
if (!ret_nav_)
|
|
|
|
|
{
|
|
|
|
|
if (!nav_algorithm_->prepare(local_start_pose, velocity, local_goal_pose, transformed_plan_, x_direction, y_direction, theta_direction))
|
|
|
|
|
if (!nav_algorithm_->prepare(local_start_pose, velocity, local_goal_pose, transformed_global_plan_, x_direction, y_direction, theta_direction))
|
|
|
|
|
{
|
|
|
|
|
robot::log_warning_at(__FILE__, __LINE__, "Algorithm \"%s\" failed to prepare", nav_algorithm_->getName().c_str());
|
|
|
|
|
throw robot_nav_core2::LocalPlannerException("Algorithm failed to prepare");
|
|
|
|
|
@@ -309,15 +314,15 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::prepare(const robot_nav_2d_msg
|
|
|
|
|
|
|
|
|
|
std::string algorithm_nav_name;
|
|
|
|
|
planner_nh_.param("algorithm_nav_name", algorithm_nav_name, std::string("pnkx_local_planner::PTA"));
|
|
|
|
|
robot::NodeHandle nh_algorithm = robot::NodeHandle(nh_, algorithm_nav_name);
|
|
|
|
|
robot::NodeHandle nh_algorithm = robot::NodeHandle(parent_, algorithm_nav_name);
|
|
|
|
|
nh_algorithm.setParam("allow_rotate", dkpl_.front()->allow_rotate_);
|
|
|
|
|
nh_algorithm.setParam("min_lookahead_dist", dkpl_.front()->min_lookahead_dist_);
|
|
|
|
|
nh_algorithm.setParam("max_lookahead_dist", dkpl_.front()->max_lookahead_dist_);
|
|
|
|
|
nh_algorithm.setParam("lookahead_time", dkpl_.front()->lookahead_time_);
|
|
|
|
|
nh_algorithm.setParam("angle_threshold", dkpl_.front()->angle_threshold_);
|
|
|
|
|
|
|
|
|
|
nh_.setParam("xy_goal_tolerance", dkpl_.front()->xy_goal_tolerance_);
|
|
|
|
|
nh_.setParam("yaw_goal_tolerance", dkpl_.front()->yaw_goal_tolerance_);
|
|
|
|
|
planner_nh_.setParam("xy_goal_tolerance", dkpl_.front()->xy_goal_tolerance_);
|
|
|
|
|
planner_nh_.setParam("yaw_goal_tolerance", dkpl_.front()->yaw_goal_tolerance_);
|
|
|
|
|
|
|
|
|
|
if (dkpl_.front()->docking_nav_ && !dkpl_.front()->docking_planner_)
|
|
|
|
|
{
|
|
|
|
|
@@ -330,7 +335,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::prepare(const robot_nav_2d_msg
|
|
|
|
|
local_goal_pose = follow_pose;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!dkpl_.front()->docking_nav_->prepare(local_start_pose, velocity, local_goal_pose, transformed_plan_, x_direction, y_direction, theta_direction))
|
|
|
|
|
if (!dkpl_.front()->docking_nav_->prepare(local_start_pose, velocity, local_goal_pose, transformed_global_plan_, x_direction, y_direction, theta_direction))
|
|
|
|
|
{
|
|
|
|
|
throw robot_nav_core2::LocalPlannerException("Algorithm failed to prepare");
|
|
|
|
|
robot::log_warning_at(__FILE__, __LINE__, "Algorithm \"%s\" failed to prepare", nav_algorithm_->getName().c_str());
|
|
|
|
|
@@ -340,7 +345,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::prepare(const robot_nav_2d_msg
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (!rotate_algorithm_->prepare(local_start_pose, velocity, local_goal_pose, transformed_plan_, x_direction, y_direction, theta_direction))
|
|
|
|
|
if (!rotate_algorithm_->prepare(local_start_pose, velocity, local_goal_pose, transformed_global_plan_, x_direction, y_direction, theta_direction))
|
|
|
|
|
{
|
|
|
|
|
throw robot_nav_core2::LocalPlannerException("Algorithm failed to prepare");
|
|
|
|
|
robot::log_warning_at(__FILE__, __LINE__, "Algorithm \"%s\" failed to prepare", rotate_algorithm_->getName().c_str());
|
|
|
|
|
@@ -418,7 +423,7 @@ bool pnkx_local_planner::PNKXDockingLocalPlanner::isGoalReached(const robot_nav_
|
|
|
|
|
// goal_pose_.header.stamp = pose.header.stamp;
|
|
|
|
|
robot_nav_2d_msgs::Pose2DStamped local_pose = this->transformPoseToLocal(pose);
|
|
|
|
|
robot_nav_2d_msgs::Pose2DStamped local_goal = this->transformPoseToLocal(goal_pose_);
|
|
|
|
|
robot_nav_2d_msgs::Path2D plan = transformed_plan_;
|
|
|
|
|
robot_nav_2d_msgs::Path2D plan = transformed_global_plan_;
|
|
|
|
|
if (start_docking_)
|
|
|
|
|
{
|
|
|
|
|
local_goal = goal_pose_;
|
|
|
|
|
@@ -462,8 +467,8 @@ bool pnkx_local_planner::PNKXDockingLocalPlanner::isGoalReached(const robot_nav_
|
|
|
|
|
// nh_.setParam("yaw_goal_tolerance", original_yaw_goal_tolerance_);
|
|
|
|
|
std::string algorithm_nav_name;
|
|
|
|
|
planner_nh_.param("algorithm_nav_name", algorithm_nav_name, std::string("pnkx_local_planner::PTA"));
|
|
|
|
|
robot::NodeHandle nh_algorithm = robot::NodeHandle(nh_, algorithm_nav_name);
|
|
|
|
|
nh_.setParam(algorithm_nav_name, original_papams_);
|
|
|
|
|
robot::NodeHandle nh_algorithm = robot::NodeHandle(parent_, algorithm_nav_name);
|
|
|
|
|
parent_.setParam(algorithm_nav_name, original_papams_);
|
|
|
|
|
nh_algorithm.setParam("allow_rotate", false);
|
|
|
|
|
}
|
|
|
|
|
return ret_nav_ && ret_angle_ && dock_ok;
|
|
|
|
|
@@ -479,7 +484,7 @@ bool pnkx_local_planner::PNKXDockingLocalPlanner::dockingHanlde(const robot_nav_
|
|
|
|
|
{
|
|
|
|
|
if (!dkpl_.front()->initialized_)
|
|
|
|
|
{
|
|
|
|
|
dkpl_.front()->initialize(nh_, tf_, costmap_robot_, traj_generator_);
|
|
|
|
|
dkpl_.front()->initialize(parent_, tf_, costmap_robot_, traj_generator_);
|
|
|
|
|
dkpl_.front()->initialized_ = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
@@ -589,7 +594,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::DockingPlanner::initialize(rob
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
std::string path_file_so = "/home/robotics/AGV/Diff_Wheel_Prj/pnkx_robot_nav_core2/build/src/Algorithms/Packages/local_planners/pnkx_local_planner/libpnkx_local_planner.so";
|
|
|
|
|
docking_planner_loader_ = boost::dll::import_alias<robot_nav_core2::BaseGlobalPlanner::Ptr()>(
|
|
|
|
|
docking_planner_loader_ = boost::dll::import_alias<robot_nav_core::BaseGlobalPlanner::Ptr()>(
|
|
|
|
|
path_file_so, docking_planner_name_, boost::dll::load_mode::append_decorations);
|
|
|
|
|
docking_planner_ = docking_planner_loader_();
|
|
|
|
|
if (!docking_planner_)
|
|
|
|
|
@@ -620,7 +625,7 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::DockingPlanner::initialize(rob
|
|
|
|
|
robot::log_error_at(__FILE__, __LINE__, "Failed to create docking nav \"%s\": returned null pointer", docking_nav_name_.c_str());
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
robot::NodeHandle nh_docking_nav = robot::NodeHandle(nh_, docking_nav_name_);
|
|
|
|
|
robot::NodeHandle nh_docking_nav = robot::NodeHandle(nh_priv_, docking_nav_name_);
|
|
|
|
|
docking_nav_->initialize(nh_docking_nav, docking_nav_name_, tf_, costmap_robot_, traj_generator_);
|
|
|
|
|
robot::log_info_at(__FILE__, __LINE__, "Created docking nav %s", docking_nav_name_.c_str());
|
|
|
|
|
}
|
|
|
|
|
@@ -657,13 +662,22 @@ void pnkx_local_planner::PNKXDockingLocalPlanner::DockingPlanner::initialize(rob
|
|
|
|
|
nh_priv_.param("lookahead_time", lookahead_time_, 1.5);
|
|
|
|
|
nh_priv_.param("angle_threshold", angle_threshold_, 0.4);
|
|
|
|
|
|
|
|
|
|
detected_timeout_wt_ =
|
|
|
|
|
nh_priv_.createWallTimer(::robot::WallDuration(time_out + delay_time), &pnkx_local_planner::PNKXDockingLocalPlanner::DockingPlanner::detectedTimeOutCb, this);
|
|
|
|
|
robot::log_info("delay: %f", delay_time);
|
|
|
|
|
robot::log_info("timeout: %f", time_out);
|
|
|
|
|
robot::log_info("xy_goal_tolerance: %f", xy_goal_tolerance_);
|
|
|
|
|
robot::log_info("yaw_goal_tolerance: %f", yaw_goal_tolerance_);
|
|
|
|
|
robot::log_info("min_lookahead_dist: %f", min_lookahead_dist_);
|
|
|
|
|
robot::log_info("max_lookahead_dist: %f", max_lookahead_dist_);
|
|
|
|
|
robot::log_info("lookahead_time: %f", lookahead_time_);
|
|
|
|
|
robot::log_info("angle_threshold: %f", angle_threshold_);
|
|
|
|
|
|
|
|
|
|
detected_timeout_wt_ = ::robot::WallTimer(
|
|
|
|
|
::robot::WallDuration(time_out + delay_time), &pnkx_local_planner::PNKXDockingLocalPlanner::DockingPlanner::detectedTimeOutCb, this, false, false);
|
|
|
|
|
detected_timeout_wt_.start();
|
|
|
|
|
robot::log_warning_at(__FILE__, __LINE__, "%s %f time_out start %f", name_.c_str(), delay_time, robot::Time::now().toSec());
|
|
|
|
|
|
|
|
|
|
delayed_wt_ =
|
|
|
|
|
nh_priv_.createWallTimer(::robot::WallDuration(delay_time), &pnkx_local_planner::PNKXDockingLocalPlanner::DockingPlanner::delayCb, this);
|
|
|
|
|
delayed_wt_ = ::robot::WallTimer(
|
|
|
|
|
::robot::WallDuration(delay_time), &pnkx_local_planner::PNKXDockingLocalPlanner::DockingPlanner::delayCb, this, false, false);
|
|
|
|
|
delayed_wt_.start();
|
|
|
|
|
robot::log_warning_at(__FILE__, __LINE__, "%s %f delay start %f", name_.c_str(), delay_time, robot::Time::now().toSec());
|
|
|
|
|
|
|
|
|
|
|