1 #ifndef ORG_EEROS_CONTROL_I_HPP_ 2 #define ORG_EEROS_CONTROL_I_HPP_ 9 template <
typename T =
double >
16 this->
out.getSignal().setValue(this->
prev.getValue());
17 this->
out.getSignal().setTimestamp(this->
in.getSignal().getTimestamp());
18 this->
prev.setTimestamp(this->
out.getSignal().getTimestamp());
22 double tin = this->
in.getSignal().getTimestamp() / 1000000000.0;
23 double tprev = this->
prev.getTimestamp() / 1000000000.0;
25 double dt = (tin - tprev);
26 T valin = this->
in.getSignal().getValue();
27 T valprev = this->
prev.getValue();
30 T val = valprev + valin * dt;
32 else output = valprev;
35 this->
out.getSignal().setValue(output);
36 this->
out.getSignal().setTimestamp(this->
in.getSignal().getTimestamp());
37 this->
prev = this->
out.getSignal();
48 this->
prev.setValue(val);
53 T val =
prev.getValue();
54 if (val > upper)
prev.setValue(upper);
55 if (val < lower)
prev.setValue(lower);
64 virtual void clearLimits() {
67 template <
typename S>
typename std::enable_if<std::is_integral<S>::value>::type _clear() {
68 upperLimit = std::numeric_limits<int32_t>::max();
71 template <
typename S>
typename std::enable_if<std::is_floating_point<S>::value>::type _clear() {
72 upperLimit = std::numeric_limits<double>::max();
75 template <
typename S>
typename std::enable_if<!std::is_arithmetic<S>::value && std::is_integral<typename S::value_type>::value>::type _clear() {
76 upperLimit.fill(std::numeric_limits<int32_t>::max());
79 template <
typename S>
typename std::enable_if< !std::is_arithmetic<S>::value && std::is_floating_point<typename S::value_type>::value>::type _clear() {
80 upperLimit.fill(std::numeric_limits<double>::max());
88 std::ostream& operator<<(std::ostream& os, I<T>& i) {
89 os <<
"Block integrator: '" << i.getName();
Signal< T > prev
Definition: I.hpp:61
Input< T > in
Definition: Block1i1o.hpp:27
T upperLimit
Definition: I.hpp:62
Definition: Config.hpp:14
Output< T > out
Definition: Block1i1o.hpp:28
virtual void setInitCondition(T val)
Definition: I.hpp:47
bool enabled
Definition: I.hpp:60
virtual void enable()
Definition: I.hpp:41
T lowerLimit
Definition: I.hpp:62
virtual void setLimit(T upper, T lower)
Definition: I.hpp:50
bool first
Definition: I.hpp:59
virtual void run()
Definition: I.hpp:14
Definition: Block1i1o.hpp:12
Definition: Signal.hpp:17
virtual void disable()
Definition: I.hpp:44