18 #include "nav2_route/plugins/edge_cost_functions/start_pose_orientation_scorer.hpp"
24 const nav2::LifecycleNode::SharedPtr node,
25 const std::shared_ptr<tf2_ros::Buffer> tf_buffer,
26 std::shared_ptr<nav2_costmap_2d::CostmapSubscriber>,
27 const std::string & name)
29 RCLCPP_INFO(node->get_logger(),
"Configuring start pose orientation scorer.");
31 logger_ = node->get_logger();
33 nav2::declare_parameter_if_not_declared(
35 getName() +
".orientation_tolerance", rclcpp::ParameterValue(M_PI / 2.0));
37 nav2::declare_parameter_if_not_declared(
38 node,
getName() +
".orientation_weight", rclcpp::ParameterValue(1.0));
40 nav2::declare_parameter_if_not_declared(
41 node,
getName() +
".use_orientation_threshold", rclcpp::ParameterValue(
false));
43 orientation_tolerance_ = node->get_parameter(
getName() +
".orientation_tolerance").as_double();
45 static_cast<float>(node->get_parameter(
getName() +
".orientation_weight").as_double());
46 use_orientation_threshold_ =
47 node->get_parameter(
getName() +
".use_orientation_threshold").as_bool();
49 tf_buffer_ = tf_buffer;
55 const EdgeType & edge_type,
float & cost)
57 if (!route_request.use_poses) {
59 "Cannot use start pose orientation scorer without start pose specified!");
62 if (edge_type == EdgeType::START) {
63 double edge_orientation = std::atan2(
64 edge->end->coords.y - edge->start->coords.y,
65 edge->end->coords.x - edge->start->coords.x);
66 double start_orientation = tf2::getYaw(route_request.start_pose.pose.orientation);
67 double d_yaw = std::abs(angles::shortest_angular_distance(edge_orientation, start_orientation));
69 if (use_orientation_threshold_) {
70 if (d_yaw > orientation_tolerance_) {
75 cost = orientation_weight_ *
static_cast<float>(d_yaw);
87 #include "pluginlib/class_list_macros.hpp"
A plugin interface to score edges during graph search to modify the lowest cost path (e....
Scores initial edge by comparing the orientation of the robot's current pose and the orientation of t...
bool score(const EdgePtr edge, const RouteRequest &route_request, const EdgeType &edge_type, float &cost) override
Main scoring plugin API.
std::string getName() override
Get name of the plugin for parameter scope mapping.
void configure(const nav2::LifecycleNode::SharedPtr node, const std::shared_ptr< tf2_ros::Buffer > tf_buffer, std::shared_ptr< nav2_costmap_2d::CostmapSubscriber > costmap_subscriber, const std::string &name) override
Configure.
An object representing edges between nodes.
An object to store salient features of the route request including its start and goal node ids,...