64 bool update(
const T & data_in, T & data_out)
override;
67 rclcpp::Clock::SharedPtr clock_;
68 std::shared_ptr<rclcpp::Logger> logger_;
69 std::shared_ptr<exponential_filter::ParamListener> parameter_handler_;
70 exponential_filter::Params parameters_;
71 T last_smoothed_value;
78 new rclcpp::Logger(this->logging_interface_->get_logger().get_child(this->filter_name_)));
81 if (!parameter_handler_)
85 parameter_handler_ = std::make_shared<exponential_filter::ParamListener>(
86 this->params_interface_, this->param_prefix_);
88 catch (
const std::exception & ex)
91 (*logger_),
"Exponential filter cannot be configured: %s (type : %s)", ex.what(),
93 parameter_handler_.reset();
98 RCLCPP_ERROR((*logger_),
"Caught unknown exception while configuring Exponential filter");
99 parameter_handler_.reset();
103 parameters_ = parameter_handler_->get_params();
105 last_smoothed_value = std::numeric_limits<double>::quiet_NaN();
113 if (!this->configured_)
115 throw std::runtime_error(
"Filter is not configured");
119 if (parameter_handler_->is_old(parameters_))
121 parameters_ = parameter_handler_->get_params();
124 if (std::isnan(last_smoothed_value))
126 last_smoothed_value = data_in;
129 data_out = last_smoothed_value =
130 filters::exponentialSmoothing(data_in, last_smoothed_value, parameters_.alpha);
bool update(const T &data_in, T &data_out) override
Applies one iteration of the exponential filter.
Definition exponential_filter.hpp:111