15#ifndef CONTROL_TOOLBOX__LOW_PASS_FILTER_HPP_
16#define CONTROL_TOOLBOX__LOW_PASS_FILTER_HPP_
26#include "control_toolbox/filter_traits.hpp"
28#include "geometry_msgs/msg/wrench_stamped.hpp"
109 bool is_configured()
const {
return configured_; }
130 using StorageType =
typename Traits::StorageType;
132 StorageType filtered_value_, filtered_old_value_, old_value_;
134 bool configured_ =
false;
138LowPassFilter<T>::LowPassFilter() : a1_(1.0), b1_(0.0)
150 Traits::initialize(filtered_value_);
151 Traits::initialize(filtered_old_value_);
152 Traits::initialize(old_value_);
154 return configured_ =
true;
162 throw std::runtime_error(
"Filter is not configured");
166 if (Traits::is_nan(filtered_value_) || Traits::is_empty(filtered_value_))
168 if (!Traits::is_finite(
data_in))
173 Traits::assign(filtered_value_,
data_in);
174 Traits::assign(filtered_old_value_,
data_in);
175 Traits::assign(old_value_,
data_in);
184 filtered_value_ = old_value_ * b1_ + filtered_old_value_ * a1_;
185 filtered_old_value_ = filtered_value_;
187 Traits::assign(old_value_,
data_in);
188 Traits::assign(
data_out, filtered_value_);
190 if (Traits::is_finite(
data_in))
192 Traits::assign(old_value_,
data_in);