15 #include "nav2_mppi_controller/critic_manager.hpp"
21 nav2::LifecycleNode::WeakPtr parent,
const std::string & name,
22 std::shared_ptr<nav2_costmap_2d::Costmap2DROS> costmap_ros,
ParametersHandler * param_handler)
25 costmap_ros_ = costmap_ros;
27 auto node = parent_.lock();
28 logger_ = node->get_logger();
29 clock_ = node->get_clock();
30 parameters_handler_ = param_handler;
38 auto node = parent_.lock();
40 getParam(critic_names_,
"critics", std::vector<std::string>{}, ParameterType::Static);
41 getParam(visualize_,
"visualize",
false);
47 loader_ = std::make_unique<pluginlib::ClassLoader<critics::CriticFunction>>(
48 "nav2_mppi_controller",
"mppi::critics::CriticFunction");
51 auto node = parent_.lock();
53 critics_effect_pub_ = node->create_publisher<nav2_msgs::msg::CriticsStats>(
55 critics_effect_pub_->on_activate();
59 for (
auto name : critic_names_) {
61 auto instance = std::unique_ptr<critics::CriticFunction>(
62 loader_->createUnmanagedInstance(fullname));
63 critics_.push_back(std::move(instance));
64 critics_.back()->on_configure(
65 parent_, name_, name_ +
"." + name, costmap_ros_,
67 RCLCPP_INFO(logger_,
"Critic loaded : %s", fullname.c_str());
73 return "mppi::critics::" + name;
79 std::unique_ptr<nav2_msgs::msg::CriticsStats> stats_msg;
81 data.trajectories_in_collision.assign(data.costs.size(),
false);
82 critic_costs_.clear();
83 critic_costs_.reserve(critics_.size());
84 stats_msg = std::make_unique<nav2_msgs::msg::CriticsStats>();
85 stats_msg->critics.reserve(critics_.size());
86 stats_msg->changed.reserve(critics_.size());
87 stats_msg->costs_sum.reserve(critics_.size());
90 for (
size_t i = 0; i < critics_.size(); ++i) {
96 Eigen::ArrayXf costs_before;
98 costs_before = data.costs;
101 critics_[i]->score(data);
105 stats_msg->critics.push_back(critic_names_[i]);
108 Eigen::ArrayXf cost_diff = data.costs - costs_before;
109 float costs_sum = cost_diff.sum();
110 stats_msg->costs_sum.push_back(costs_sum);
111 stats_msg->changed.push_back(costs_sum != 0.0f);
112 critic_costs_.emplace_back(critic_names_[i], std::move(cost_diff));
117 if (visualize_ && critics_effect_pub_) {
118 stats_msg->stamp = clock_->now();
119 critics_effect_pub_->publish(std::move(stats_msg));
void on_configure(nav2::LifecycleNode::WeakPtr parent, const std::string &name, std::shared_ptr< nav2_costmap_2d::Costmap2DROS >, ParametersHandler *)
Configure critic manager on bringup and load plugins.
void evalTrajectoriesScores(CriticData &data)
Score trajectories by the set of loaded critic functions.
void getParams()
Get parameters (critics to load)
virtual void loadCritics()
Load the critic plugins.
std::string getFullName(const std::string &name)
Get full-name namespaced critic IDs.
Handles getting parameters and dynamic parameter changes.
auto getParamGetter(const std::string &ns)
Get an object to retrieve parameters.
Data to pass to critics for scoring, including state, trajectories, pruned path, global goal,...