Skip to content

Commit ca39a5c

Browse files
committed
Use parameters from the GPL library
1 parent df16a76 commit ca39a5c

File tree

2 files changed

+58
-59
lines changed

2 files changed

+58
-59
lines changed

controller_manager/include/controller_manager/controller_manager.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
namespace controller_manager
5252
{
5353
class ParamListener;
54+
class Params;
5455
using ControllersListIterator = std::vector<controller_manager::ControllerSpec>::const_iterator;
5556

5657
CONTROLLER_MANAGER_PUBLIC rclcpp::NodeOptions get_cm_node_options();
@@ -347,7 +348,7 @@ class ControllerManager : public rclcpp::Node
347348

348349
// Per controller update rate support
349350
unsigned int update_loop_counter_ = 0;
350-
unsigned int update_rate_ = 100;
351+
unsigned int update_rate_;
351352
std::vector<std::vector<std::string>> chained_controllers_configuration_;
352353

353354
std::unique_ptr<hardware_interface::ResourceManager> resource_manager_;
@@ -358,6 +359,8 @@ class ControllerManager : public rclcpp::Node
358359
const std::string & command_interface);
359360
void init_controller_manager();
360361

362+
void initialize_parameters();
363+
361364
/**
362365
* Clear request lists used when switching controllers. The lists are shared between "callback"
363366
* and "control loop" threads.
@@ -475,6 +478,7 @@ class ControllerManager : public rclcpp::Node
475478
rclcpp::NodeOptions determine_controller_node_options(const ControllerSpec & controller) const;
476479

477480
std::shared_ptr<controller_manager::ParamListener> cm_param_listener_;
481+
std::shared_ptr<controller_manager::Params> params_;
478482
diagnostic_updater::Updater diagnostics_updater_;
479483

480484
std::shared_ptr<rclcpp::Executor> executor_;

controller_manager/src/controller_manager.cpp

Lines changed: 53 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ ControllerManager::ControllerManager(
239239
kControllerInterfaceNamespace, kChainableControllerInterfaceClassName)),
240240
cm_node_options_(options)
241241
{
242+
initialize_parameters();
242243
init_controller_manager();
243244
}
244245

@@ -247,10 +248,6 @@ ControllerManager::ControllerManager(
247248
bool activate_all_hw_components, const std::string & manager_node_name,
248249
const std::string & node_namespace, const rclcpp::NodeOptions & options)
249250
: rclcpp::Node(manager_node_name, node_namespace, options),
250-
update_rate_(get_parameter_or<int>("update_rate", 100)),
251-
resource_manager_(std::make_unique<hardware_interface::ResourceManager>(
252-
urdf, this->get_node_clock_interface(), this->get_node_logging_interface(),
253-
activate_all_hw_components, update_rate_)),
254251
diagnostics_updater_(this),
255252
executor_(executor),
256253
loader_(std::make_shared<pluginlib::ClassLoader<controller_interface::ControllerInterface>>(
@@ -260,6 +257,10 @@ ControllerManager::ControllerManager(
260257
kControllerInterfaceNamespace, kChainableControllerInterfaceClassName)),
261258
cm_node_options_(options)
262259
{
260+
initialize_parameters();
261+
resource_manager_ = std::make_unique<hardware_interface::ResourceManager>(
262+
urdf, this->get_node_clock_interface(), this->get_node_logging_interface(),
263+
activate_all_hw_components, params_->update_rate);
263264
init_controller_manager();
264265
}
265266

@@ -278,18 +279,13 @@ ControllerManager::ControllerManager(
278279
kControllerInterfaceNamespace, kChainableControllerInterfaceClassName)),
279280
cm_node_options_(options)
280281
{
282+
initialize_parameters();
281283
init_controller_manager();
282284
}
283285

284286
void ControllerManager::init_controller_manager()
285287
{
286288
// Get parameters needed for RT "update" loop to work
287-
if (!get_parameter("update_rate", update_rate_))
288-
{
289-
RCLCPP_WARN(
290-
get_logger(), "'update_rate' parameter not set, using default value of %d Hz.", update_rate_);
291-
}
292-
293289
if (is_resource_manager_initialized())
294290
{
295291
init_services();
@@ -327,6 +323,25 @@ void ControllerManager::init_controller_manager()
327323
&ControllerManager::controller_manager_diagnostic_callback);
328324
}
329325

326+
void ControllerManager::initialize_parameters()
327+
{
328+
// Initialize parameters
329+
try
330+
{
331+
cm_param_listener_ = std::make_shared<controller_manager::ParamListener>(
332+
this->get_node_parameters_interface(), this->get_logger());
333+
params_ = std::make_shared<controller_manager::Params>(cm_param_listener_->get_params());
334+
update_rate_ = static_cast<unsigned int>(params_->update_rate);
335+
}
336+
catch (const std::exception & e)
337+
{
338+
RCLCPP_ERROR(
339+
this->get_logger(),
340+
"Exception thrown while initializing controller manager parameters: %s \n", e.what());
341+
throw e;
342+
}
343+
}
344+
330345
void ControllerManager::robot_description_callback(const std_msgs::msg::String & robot_description)
331346
{
332347
RCLCPP_INFO(get_logger(), "Received robot description from topic.");
@@ -3072,31 +3087,14 @@ void ControllerManager::controller_activity_diagnostic_callback(
30723087
std::lock_guard<std::recursive_mutex> guard(rt_controllers_wrapper_.controllers_lock_);
30733088
const std::vector<ControllerSpec> & controllers = rt_controllers_wrapper_.get_updated_list(guard);
30743089
bool all_active = true;
3075-
const std::string param_prefix = "diagnostics.threshold.controllers";
30763090
const std::string periodicity_suffix = ".periodicity";
30773091
const std::string exec_time_suffix = ".execution_time";
3078-
const std::string mean_error_suffix = ".mean_error";
3079-
const std::string std_dev_suffix = ".standard_deviation";
30803092
const std::string state_suffix = ".state";
30813093

3082-
// Get threshold values from param server
3083-
const double periodicity_mean_warn_threshold =
3084-
this->get_parameter_or(param_prefix + periodicity_suffix + mean_error_suffix + ".warn", 5.0);
3085-
const double periodicity_mean_error_threshold =
3086-
this->get_parameter_or(param_prefix + periodicity_suffix + mean_error_suffix + ".error", 10.0);
3087-
const double periodicity_std_dev_warn_threshold =
3088-
this->get_parameter_or(param_prefix + periodicity_suffix + std_dev_suffix + ".warn", 5.0);
3089-
const double periodicity_std_dev_error_threshold =
3090-
this->get_parameter_or(param_prefix + periodicity_suffix + std_dev_suffix + ".error", 10.0);
3091-
3092-
const double exec_time_mean_warn_threshold =
3093-
this->get_parameter_or(param_prefix + exec_time_suffix + mean_error_suffix + ".warn", 1000.0);
3094-
const double exec_time_mean_error_threshold =
3095-
this->get_parameter_or(param_prefix + exec_time_suffix + mean_error_suffix + ".error", 2000.0);
3096-
const double exec_time_std_dev_warn_threshold =
3097-
this->get_parameter_or(param_prefix + exec_time_suffix + std_dev_suffix + ".warn", 100.0);
3098-
const double exec_time_std_dev_error_threshold =
3099-
this->get_parameter_or(param_prefix + exec_time_suffix + std_dev_suffix + ".error", 200.0);
3094+
if (cm_param_listener_->is_old(*params_))
3095+
{
3096+
*params_ = cm_param_listener_->get_params();
3097+
}
31003098

31013099
auto make_stats_string =
31023100
[](const auto & statistics_data, const std::string & measurement_unit) -> std::string
@@ -3138,15 +3136,19 @@ void ControllerManager::controller_activity_diagnostic_callback(
31383136
const double periodicity_error = std::abs(
31393137
periodicity_stats.average - static_cast<double>(controllers[i].c->get_update_rate()));
31403138
if (
3141-
periodicity_error > periodicity_mean_error_threshold ||
3142-
periodicity_stats.standard_deviation > periodicity_std_dev_error_threshold)
3139+
periodicity_error >
3140+
params_->diagnostics.threshold.controllers.periodicity.mean_error.error ||
3141+
periodicity_stats.standard_deviation >
3142+
params_->diagnostics.threshold.controllers.periodicity.standard_deviation.error)
31433143
{
31443144
level = diagnostic_msgs::msg::DiagnosticStatus::ERROR;
31453145
add_element_to_list(bad_periodicity_async_controllers, controllers[i].info.name);
31463146
}
31473147
else if (
3148-
periodicity_error > periodicity_mean_warn_threshold ||
3149-
periodicity_stats.standard_deviation > periodicity_std_dev_warn_threshold)
3148+
periodicity_error >
3149+
params_->diagnostics.threshold.controllers.periodicity.mean_error.warn ||
3150+
periodicity_stats.standard_deviation >
3151+
params_->diagnostics.threshold.controllers.periodicity.standard_deviation.warn)
31503152
{
31513153
if (level != diagnostic_msgs::msg::DiagnosticStatus::ERROR)
31523154
{
@@ -3157,15 +3159,19 @@ void ControllerManager::controller_activity_diagnostic_callback(
31573159
}
31583160
const double max_exp_exec_time = is_async ? 1.e6 / controllers[i].c->get_update_rate() : 0.0;
31593161
if (
3160-
(exec_time_stats.average - max_exp_exec_time) > exec_time_mean_error_threshold ||
3161-
exec_time_stats.standard_deviation > exec_time_std_dev_error_threshold)
3162+
(exec_time_stats.average - max_exp_exec_time) >
3163+
params_->diagnostics.threshold.controllers.execution_time.mean_error.error ||
3164+
exec_time_stats.standard_deviation >
3165+
params_->diagnostics.threshold.controllers.execution_time.standard_deviation.error)
31623166
{
31633167
level = diagnostic_msgs::msg::DiagnosticStatus::ERROR;
31643168
high_exec_time_controllers.push_back(controllers[i].info.name);
31653169
}
31663170
else if (
3167-
(exec_time_stats.average - max_exp_exec_time) > exec_time_mean_warn_threshold ||
3168-
exec_time_stats.standard_deviation > exec_time_std_dev_warn_threshold)
3171+
(exec_time_stats.average - max_exp_exec_time) >
3172+
params_->diagnostics.threshold.controllers.execution_time.mean_error.warn ||
3173+
exec_time_stats.standard_deviation >
3174+
params_->diagnostics.threshold.controllers.execution_time.standard_deviation.warn)
31693175
{
31703176
if (level != diagnostic_msgs::msg::DiagnosticStatus::ERROR)
31713177
{
@@ -3294,34 +3300,23 @@ void ControllerManager::controller_manager_diagnostic_callback(
32943300
}
32953301
}
32963302

3297-
const std::string param_prefix = "diagnostics.threshold.controller_manager";
3298-
const std::string periodicity_suffix = ".periodicity";
3299-
const std::string mean_error_suffix = ".mean_error";
3300-
const std::string std_dev_suffix = ".standard_deviation";
3301-
3302-
// Get threshold values from param server
3303-
const double periodicity_mean_warn_threshold =
3304-
this->get_parameter_or(param_prefix + periodicity_suffix + mean_error_suffix + ".warn", 5.0);
3305-
const double periodicity_mean_error_threshold =
3306-
this->get_parameter_or(param_prefix + periodicity_suffix + mean_error_suffix + ".error", 10.0);
3307-
const double periodicity_std_dev_warn_threshold =
3308-
this->get_parameter_or(param_prefix + periodicity_suffix + std_dev_suffix + ".warn", 5.0);
3309-
const double periodicity_std_dev_error_threshold =
3310-
this->get_parameter_or(param_prefix + periodicity_suffix + std_dev_suffix + ".error", 10.0);
3311-
33123303
const double periodicity_error = std::abs(cm_stats.average - get_update_rate());
33133304
const std::string diag_summary =
33143305
"Controller Manager has bad periodicity : " + std::to_string(cm_stats.average) +
33153306
" Hz. Expected consistent " + std::to_string(get_update_rate()) + " Hz";
33163307
if (
3317-
periodicity_error > periodicity_mean_error_threshold ||
3318-
cm_stats.standard_deviation > periodicity_std_dev_error_threshold)
3308+
periodicity_error >
3309+
params_->diagnostics.threshold.controller_manager.periodicity.mean_error.error ||
3310+
cm_stats.standard_deviation >
3311+
params_->diagnostics.threshold.controller_manager.periodicity.standard_deviation.error)
33193312
{
33203313
stat.mergeSummary(diagnostic_msgs::msg::DiagnosticStatus::ERROR, diag_summary);
33213314
}
33223315
else if (
3323-
periodicity_error > periodicity_mean_warn_threshold ||
3324-
cm_stats.standard_deviation > periodicity_std_dev_warn_threshold)
3316+
periodicity_error >
3317+
params_->diagnostics.threshold.controller_manager.periodicity.mean_error.warn ||
3318+
cm_stats.standard_deviation >
3319+
params_->diagnostics.threshold.controller_manager.periodicity.standard_deviation.warn)
33253320
{
33263321
stat.mergeSummary(diagnostic_msgs::msg::DiagnosticStatus::WARN, diag_summary);
33273322
}

0 commit comments

Comments
 (0)