1 #define BIORBD_API_EXPORTS
2 #include "Actuators/ActuatorGauss6p.h"
4 #include "Utils/Error.h"
5 #include "RigidBody/GeneralizedCoordinates.h"
6 #include "RigidBody/GeneralizedVelocity.h"
10 m_k(std::make_shared<biorbd::utils::Scalar>(4.3)),
11 m_Tmax(std::make_shared<biorbd::utils::Scalar>(0)),
12 m_T0(std::make_shared<biorbd::utils::Scalar>(0)),
13 m_wmax(std::make_shared<biorbd::utils::Scalar>(0)),
14 m_wc(std::make_shared<biorbd::utils::Scalar>(0)),
15 m_amax(std::make_shared<biorbd::utils::Scalar>(1.0)),
16 m_amin(std::make_shared<biorbd::utils::Scalar>(0)),
17 m_wr(std::make_shared<biorbd::utils::Scalar>(0)),
18 m_w1(std::make_shared<biorbd::utils::Scalar>(0)),
19 m_r(std::make_shared<biorbd::utils::Scalar>(0)),
20 m_qopt(std::make_shared<biorbd::utils::Scalar>(0)),
21 m_facteur(std::make_shared<biorbd::utils::Scalar>(0)),
22 m_r2(std::make_shared<biorbd::utils::Scalar>(0)),
23 m_qopt2(std::make_shared<biorbd::utils::Scalar>(0))
42 m_facteur(other.m_facteur),
44 m_qopt2(other.m_qopt2)
50 const biorbd::utils::Scalar& Tmax,
51 const biorbd::utils::Scalar& T0,
52 const biorbd::utils::Scalar& wmax,
53 const biorbd::utils::Scalar& wc,
54 const biorbd::utils::Scalar& amin,
55 const biorbd::utils::Scalar& wr,
56 const biorbd::utils::Scalar& w1,
57 const biorbd::utils::Scalar& r,
58 const biorbd::utils::Scalar& qopt,
59 const biorbd::utils::Scalar& facteur,
60 const biorbd::utils::Scalar& r2,
61 const biorbd::utils::Scalar& qopt2,
62 unsigned int dofIdx) :
64 m_k(std::make_shared<biorbd::utils::Scalar>(4.3)),
65 m_Tmax(std::make_shared<biorbd::utils::Scalar>(Tmax)),
66 m_T0(std::make_shared<biorbd::utils::Scalar>(T0)),
67 m_wmax(std::make_shared<biorbd::utils::Scalar>(wmax)),
68 m_wc(std::make_shared<biorbd::utils::Scalar>(wc)),
69 m_amax(std::make_shared<biorbd::utils::Scalar>(1.0)),
70 m_amin(std::make_shared<biorbd::utils::Scalar>(amin)),
71 m_wr(std::make_shared<biorbd::utils::Scalar>(wr)),
72 m_w1(std::make_shared<biorbd::utils::Scalar>(w1)),
73 m_r(std::make_shared<biorbd::utils::Scalar>(r)),
74 m_qopt(std::make_shared<biorbd::utils::Scalar>(qopt)),
75 m_facteur(std::make_shared<biorbd::utils::Scalar>(facteur)),
76 m_r2(std::make_shared<biorbd::utils::Scalar>(r2)),
77 m_qopt2(std::make_shared<biorbd::utils::Scalar>(qopt2))
84 const biorbd::utils::Scalar& Tmax,
85 const biorbd::utils::Scalar& T0,
86 const biorbd::utils::Scalar& wmax,
87 const biorbd::utils::Scalar& wc,
88 const biorbd::utils::Scalar& amin,
89 const biorbd::utils::Scalar& wr,
90 const biorbd::utils::Scalar& w1,
91 const biorbd::utils::Scalar& r,
92 const biorbd::utils::Scalar& qopt,
93 const biorbd::utils::Scalar& facteur,
94 const biorbd::utils::Scalar& r2,
95 const biorbd::utils::Scalar& qopt2,
98 Actuator(direction, dofIdx, jointName),
99 m_k(std::make_shared<biorbd::utils::Scalar>(4.3)),
100 m_Tmax(std::make_shared<biorbd::utils::Scalar>(Tmax)),
101 m_T0(std::make_shared<biorbd::utils::Scalar>(T0)),
102 m_wmax(std::make_shared<biorbd::utils::Scalar>(wmax)),
103 m_wc(std::make_shared<biorbd::utils::Scalar>(wc)),
104 m_amax(std::make_shared<biorbd::utils::Scalar>(1.0)),
105 m_amin(std::make_shared<biorbd::utils::Scalar>(amin)),
106 m_wr(std::make_shared<biorbd::utils::Scalar>(wr)),
107 m_w1(std::make_shared<biorbd::utils::Scalar>(w1)),
108 m_r(std::make_shared<biorbd::utils::Scalar>(r)),
109 m_qopt(std::make_shared<biorbd::utils::Scalar>(qopt)),
110 m_facteur(std::make_shared<biorbd::utils::Scalar>(facteur)),
111 m_r2(std::make_shared<biorbd::utils::Scalar>(r2)),
112 m_qopt2(std::make_shared<biorbd::utils::Scalar>(qopt2))
157 biorbd::utils::Scalar pos(Q[*m_dofIdx] * 180/M_PI);
158 biorbd::utils::Scalar speed(Qdot[*m_dofIdx] * 180/M_PI);
161 biorbd::utils::Scalar Tc = *m_T0 * *m_wc / *m_wmax;
162 biorbd::utils::Scalar C = Tc*(*m_wmax + *m_wc);
163 biorbd::utils::Scalar we = ( (*m_Tmax - *m_T0) * *m_wmax * *m_wc ) / ( *m_k * *m_T0 * (*m_wmax + *m_wc) );
164 biorbd::utils::Scalar E = -( *m_Tmax - *m_T0 ) * we;
166 biorbd::utils::Scalar Tw;
167 #ifdef BIORBD_USE_CASADI_MATH
168 Tw = casadi::MX::if_else(casadi::MX::ge(speed, 0),
169 C / ( *m_wc + speed ) - Tc,
170 E / ( we - speed ) + *m_Tmax);
173 Tw = C / ( *m_wc + speed ) - Tc;
175 Tw = E / ( we - speed ) + *m_Tmax;
179 biorbd::utils::Scalar A =
180 *m_amin + ( *m_amax - *m_amin )
181 / ( 1 + biorbd::utils::Scalar(exp( -(speed - *m_w1) / *m_wr )) );
184 biorbd::utils::Scalar Ta = biorbd::utils::Scalar(exp( -(*m_qopt - pos) * (*m_qopt - pos) / (2* *m_r * *m_r ) ))
185 + *m_facteur * biorbd::utils::Scalar(exp( -(*m_qopt2 - pos) * (*m_qopt2 - pos) / (2 * *m_r2 * *m_r2) ));
193 *m_type = biorbd::actuator::TYPE::GAUSS6P;