Making getRobotFootprint functions static again, checking for validity of the costmap pointer passed in.
parent
e1b218c0a9
commit
f2ebb686fc
|
@ -186,11 +186,16 @@ class MpcLocalPlannerROS : public nav_core::BaseLocalPlanner, public mbf_costmap
|
||||||
/**
|
/**
|
||||||
* @brief Get the current robot footprint/contour model
|
* @brief Get the current robot footprint/contour model
|
||||||
* @param nh const reference to the local ros::NodeHandle
|
* @param nh const reference to the local ros::NodeHandle
|
||||||
|
* @param costmap_ros reference to an intialized instance of costmap_2d::Costmap2dROS
|
||||||
* @return Robot footprint model used for optimization
|
* @return Robot footprint model used for optimization
|
||||||
*/
|
*/
|
||||||
RobotFootprintModelPtr getRobotFootprintFromParamServer(const ros::NodeHandle& nh);
|
static RobotFootprintModelPtr getRobotFootprintFromParamServer(const ros::NodeHandle& nh, costmap_2d::Costmap2DROS* costmap_ros);
|
||||||
|
|
||||||
RobotFootprintModelPtr getRobotFootprintFromCostmap2d();
|
/**
|
||||||
|
* @brief Get the current robot footprint/contour model
|
||||||
|
* @return Robot footprint model used for optimization
|
||||||
|
*/
|
||||||
|
static RobotFootprintModelPtr getRobotFootprintFromCostmap2d(costmap_2d::Costmap2DROS* costmap_ros);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set the footprint from the given XmlRpcValue.
|
* @brief Set the footprint from the given XmlRpcValue.
|
||||||
|
|
|
@ -108,7 +108,7 @@ void MpcLocalPlannerROS::initialize(std::string name, tf2_ros::Buffer* tf, costm
|
||||||
_robot_base_frame = _costmap_ros->getBaseFrameID();
|
_robot_base_frame = _costmap_ros->getBaseFrameID();
|
||||||
|
|
||||||
// create robot footprint/contour model for optimization
|
// create robot footprint/contour model for optimization
|
||||||
_robot_model = getRobotFootprintFromParamServer(nh);
|
_robot_model = getRobotFootprintFromParamServer(nh, _costmap_ros);
|
||||||
|
|
||||||
// create the planner instance
|
// create the planner instance
|
||||||
if (!_controller.configure(nh, _obstacles, _robot_model, _via_points))
|
if (!_controller.configure(nh, _obstacles, _robot_model, _via_points))
|
||||||
|
@ -850,7 +850,7 @@ void MpcLocalPlannerROS::customViaPointsCB(const nav_msgs::Path::ConstPtr& via_p
|
||||||
_custom_via_points_active = !_via_points.empty();
|
_custom_via_points_active = !_via_points.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
teb_local_planner::RobotFootprintModelPtr MpcLocalPlannerROS::getRobotFootprintFromParamServer(const ros::NodeHandle& nh)
|
teb_local_planner::RobotFootprintModelPtr MpcLocalPlannerROS::getRobotFootprintFromParamServer(const ros::NodeHandle& nh, costmap_2d::Costmap2DROS* costmap_ros)
|
||||||
{
|
{
|
||||||
std::string model_name;
|
std::string model_name;
|
||||||
if (!nh.getParam("footprint_model/type", model_name))
|
if (!nh.getParam("footprint_model/type", model_name))
|
||||||
|
@ -863,7 +863,7 @@ teb_local_planner::RobotFootprintModelPtr MpcLocalPlannerROS::getRobotFootprintF
|
||||||
if (model_name.compare("costmap_2d") == 0)
|
if (model_name.compare("costmap_2d") == 0)
|
||||||
{
|
{
|
||||||
ROS_INFO("Footprint model loaded from costmap_2d for trajectory optimization.");
|
ROS_INFO("Footprint model loaded from costmap_2d for trajectory optimization.");
|
||||||
return getRobotFootprintFromCostmap2d();
|
return getRobotFootprintFromCostmap2d(costmap_ros);
|
||||||
}
|
}
|
||||||
|
|
||||||
// point
|
// point
|
||||||
|
@ -984,11 +984,17 @@ teb_local_planner::RobotFootprintModelPtr MpcLocalPlannerROS::getRobotFootprintF
|
||||||
return boost::make_shared<teb_local_planner::PointRobotFootprint>();
|
return boost::make_shared<teb_local_planner::PointRobotFootprint>();
|
||||||
}
|
}
|
||||||
|
|
||||||
teb_local_planner::RobotFootprintModelPtr MpcLocalPlannerROS::getRobotFootprintFromCostmap2d()
|
teb_local_planner::RobotFootprintModelPtr MpcLocalPlannerROS::getRobotFootprintFromCostmap2d(costmap_2d::Costmap2DROS* costmap_ros)
|
||||||
{
|
{
|
||||||
|
if (!costmap_ros)
|
||||||
|
{
|
||||||
|
ROS_WARN_STREAM("Costmap 2d pointer is null. Using point model instead.");
|
||||||
|
return boost::make_shared<teb_local_planner::PointRobotFootprint>();
|
||||||
|
}
|
||||||
|
|
||||||
Point2dContainer footprint;
|
Point2dContainer footprint;
|
||||||
Eigen::Vector2d pt;
|
Eigen::Vector2d pt;
|
||||||
geometry_msgs::Polygon polygon = _costmap_ros->getRobotFootprintPolygon();
|
geometry_msgs::Polygon polygon = costmap_ros->getRobotFootprintPolygon();
|
||||||
|
|
||||||
for (int i = 0; i < polygon.points.size(); ++i)
|
for (int i = 0; i < polygon.points.size(); ++i)
|
||||||
{
|
{
|
||||||
|
|
|
@ -91,8 +91,7 @@ void TestMpcOptimNode::start(ros::NodeHandle& nh)
|
||||||
ros::Subscriber via_points_sub = nh.subscribe("via_points", 1, &TestMpcOptimNode::CB_via_points, this);
|
ros::Subscriber via_points_sub = nh.subscribe("via_points", 1, &TestMpcOptimNode::CB_via_points, this);
|
||||||
|
|
||||||
// Setup robot shape model
|
// Setup robot shape model
|
||||||
mpc_local_planner::MpcLocalPlannerROS mpcl;
|
teb_local_planner::RobotFootprintModelPtr robot_model = mpc_local_planner::MpcLocalPlannerROS::getRobotFootprintFromParamServer(nh, nullptr);
|
||||||
teb_local_planner::RobotFootprintModelPtr robot_model = mpcl.getRobotFootprintFromParamServer(nh);
|
|
||||||
|
|
||||||
mpc_local_planner::Controller controller;
|
mpc_local_planner::Controller controller;
|
||||||
if (!controller.configure(nh, _obstacles, robot_model, _via_points))
|
if (!controller.configure(nh, _obstacles, robot_model, _via_points))
|
||||||
|
|
Loading…
Reference in New Issue