71 enabled=options.check(
"smith_predictor",Value(
"off")).asString()==
"on";
78 Vector Kp(chain.
getDOF(),1.0);
79 Vector Tz(chain.
getDOF(),0.0);
80 Vector Tw(chain.
getDOF(),0.0);
81 Vector Zeta(chain.
getDOF(),0.0);
82 for (
unsigned int i=0; i<chain.
getDOF(); i++)
85 double Ts=options.check(
"Ts",Value(0.01)).asFloat64();
87 Matrix lim(chain.
getDOF(),2);
93 for (
unsigned int j=0; j<chain.
getN(); j++)
95 if (!chain[j].isBlocked())
98 lim(i,0)=chain[j].getMin();
99 lim(i,1)=chain[j].getMax();
103 string entry_str(entry.str());
104 if (options.check(entry_str))
106 if (Bottle *params=options.find(entry_str).asList())
108 if (params->check(
"Kp"))
109 Kp[i]=params->find(
"Kp").asFloat64();
111 if (params->check(
"Tz"))
112 Tz[i]=params->find(
"Tz").asFloat64();
114 if (params->check(
"Tw"))
115 Tw[i]=params->find(
"Tw").asFloat64();
117 if (params->check(
"Zeta"))
118 Zeta[i]=params->find(
"Zeta").asFloat64();
120 if (params->check(
"Td"))
122 int depth=(int)ceil(params->find(
"Td").asFloat64()/Ts);
143 double twoTs2=2.0*Ts2;
144 for (
unsigned int i=0; i<chain.
getDOF(); i++)
147 double _num_0=2.0*Tz[i]*Ts;
148 num[0]=Kp[i] * (Ts2 + _num_0);
149 num[1]=Kp[i] * twoTs2;
150 num[2]=Kp[i] * (Ts2 - _num_0);
152 double _den_0=4.0*Tw[i]*Tw[i];
153 double _den_1=2.0*_den_0;
154 double _den_2=4.0*Zeta[i]*Ts*Tw[i];
155 den[0]=Ts2 + _den_2 + _den_0;
156 den[1]=twoTs2 - _den_1;
157 den[2]=Ts2 - _den_2 + _den_0;
160 F.push_back(
new Filter(num,den,y01));