LeakyIntegrator.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  *
4  * This file is inspired by Stephane's Caron original implementation as part of
5  * lipm_walking_controller <https://github.com/stephane-caron/lipm_walking_controller>
6  */
7 
8 #pragma once
9 
10 #include <mc_filter/utils/clamp.h>
11 
12 namespace mc_filter
13 {
33 template<typename VectorT>
35 {
36  LeakyIntegrator() : integral_(VectorT::Zero()), rate_(0.1), saturation_(-1.) {}
37 
45  inline void add(const VectorT & value, double dt)
46  {
47  integral_ = (1. - rate_ * dt) * integral_ + dt * value;
48  if(saturation_ > 0.) { utils::clampInPlace(integral_, -saturation_, saturation_); }
49  }
50 
54  inline const VectorT & eval() const { return integral_; }
55 
59  inline double rate() const { return rate_; }
60 
66  inline void rate(double rate) { rate_ = rate; }
67 
73  inline void saturation(double s) { saturation_ = s; }
74 
78  inline void reset() { integral_.setZero(); }
79 
80 private:
81  VectorT integral_;
82  double rate_;
83  double saturation_;
84 };
85 } // namespace mc_filter
mc_filter::LeakyIntegrator::LeakyIntegrator
LeakyIntegrator()
Definition: LeakyIntegrator.h:36
mc_filter::LeakyIntegrator::eval
const VectorT & eval() const
Definition: LeakyIntegrator.h:54
mc_filter
Definition: ExponentialMovingAverage.h:14
mc_filter::LeakyIntegrator::rate
double rate() const
Definition: LeakyIntegrator.h:59
mc_filter::LeakyIntegrator::reset
void reset()
Definition: LeakyIntegrator.h:78
mc_filter::LeakyIntegrator
Definition: LeakyIntegrator.h:34
mc_filter::LeakyIntegrator::rate
void rate(double rate)
Definition: LeakyIntegrator.h:66
mc_filter::utils::clampInPlace
void clampInPlace(double &value, double lower, double upper)
Definition: clamp.h:38
clamp.h
mc_filter::LeakyIntegrator::add
void add(const VectorT &value, double dt)
Definition: LeakyIntegrator.h:45
mc_filter::LeakyIntegrator::saturation
void saturation(double s)
Definition: LeakyIntegrator.h:73