Skip to content

Commit 0e8238b

Browse files
doisygSteveMacenski
authored andcommitted
[NavFn] Make the 3 parameters changeable at runtime (#2181)
* make the 3 params changeable at runtime * use parameter events callbacks * doxygen * lint
1 parent 5e6527c commit 0e8238b

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

nav2_navfn_planner/include/nav2_navfn_planner/navfn_planner.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,16 @@ class NavfnPlanner : public nav2_core::GlobalPlanner
210210

211211
// Whether to use the astar planner or default dijkstras
212212
bool use_astar_;
213+
214+
// Subscription for parameter change
215+
rclcpp::AsyncParametersClient::SharedPtr parameters_client_;
216+
rclcpp::Subscription<rcl_interfaces::msg::ParameterEvent>::SharedPtr parameter_event_sub_;
217+
218+
/**
219+
* @brief Callback executed when a paramter change is detected
220+
* @param event ParameterEvent message
221+
*/
222+
void on_parameter_event_callback(const rcl_interfaces::msg::ParameterEvent::SharedPtr event);
213223
};
214224

215225
} // namespace nav2_navfn_planner

nav2_navfn_planner/src/navfn_planner.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040

4141
using namespace std::chrono_literals;
4242
using nav2_util::declare_parameter_if_not_declared;
43+
using rcl_interfaces::msg::ParameterType;
44+
using std::placeholders::_1;
4345

4446
namespace nav2_navfn_planner
4547
{
@@ -85,6 +87,16 @@ NavfnPlanner::configure(
8587
planner_ = std::make_unique<NavFn>(
8688
costmap_->getSizeInCellsX(),
8789
costmap_->getSizeInCellsY());
90+
91+
// Setup callback for changes to parameters.
92+
parameters_client_ = std::make_shared<rclcpp::AsyncParametersClient>(
93+
node->get_node_base_interface(),
94+
node->get_node_topics_interface(),
95+
node->get_node_graph_interface(),
96+
node->get_node_services_interface());
97+
98+
parameter_event_sub_ = parameters_client_->on_parameter_event(
99+
std::bind(&NavfnPlanner::on_parameter_event_callback, this, _1));
88100
}
89101

90102
void
@@ -453,6 +465,29 @@ NavfnPlanner::clearRobotCell(unsigned int mx, unsigned int my)
453465
costmap_->setCost(mx, my, nav2_costmap_2d::FREE_SPACE);
454466
}
455467

468+
void
469+
NavfnPlanner::on_parameter_event_callback(
470+
const rcl_interfaces::msg::ParameterEvent::SharedPtr event)
471+
{
472+
for (auto & changed_parameter : event->changed_parameters) {
473+
const auto & type = changed_parameter.value.type;
474+
const auto & name = changed_parameter.name;
475+
const auto & value = changed_parameter.value;
476+
477+
if (type == ParameterType::PARAMETER_DOUBLE) {
478+
if (name == name_ + ".tolerance") {
479+
tolerance_ = value.double_value;
480+
}
481+
} else if (type == ParameterType::PARAMETER_BOOL) {
482+
if (name == name_ + ".use_astar") {
483+
use_astar_ = value.bool_value;
484+
} else if (name == name_ + ".allow_unknown") {
485+
allow_unknown_ = value.bool_value;
486+
}
487+
}
488+
}
489+
}
490+
456491
} // namespace nav2_navfn_planner
457492

458493
#include "pluginlib/class_list_macros.hpp"

0 commit comments

Comments
 (0)