Line |
Branch |
Exec |
Source |
1 |
|
|
// |
2 |
|
|
// Copyright (c) 2015-2020 CNRS INRIA |
3 |
|
|
// Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. |
4 |
|
|
// |
5 |
|
|
|
6 |
|
|
#ifndef __pinocchio_multibody_joint_data_base_hpp__ |
7 |
|
|
#define __pinocchio_multibody_joint_data_base_hpp__ |
8 |
|
|
|
9 |
|
|
#include "pinocchio/multibody/joint/joint-base.hpp" |
10 |
|
|
#include "pinocchio/multibody/joint/joint-model-base.hpp" |
11 |
|
|
|
12 |
|
|
#define PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, TYPENAME) \ |
13 |
|
|
PINOCCHIO_JOINT_MODEL_TYPEDEF_GENERIC(Joint, TYPENAME); \ |
14 |
|
|
typedef TYPENAME traits<Joint>::ConfigVectorTypeConstRef ConfigVectorTypeConstRef; \ |
15 |
|
|
typedef TYPENAME traits<Joint>::ConfigVectorTypeRef ConfigVectorTypeRef; \ |
16 |
|
|
typedef TYPENAME traits<Joint>::TangentVectorTypeConstRef TangentVectorTypeConstRef; \ |
17 |
|
|
typedef TYPENAME traits<Joint>::TangentVectorTypeRef TangentVectorTypeRef; \ |
18 |
|
|
typedef TYPENAME traits<Joint>::ConstraintTypeConstRef ConstraintTypeConstRef; \ |
19 |
|
|
typedef TYPENAME traits<Joint>::ConstraintTypeRef ConstraintTypeRef; \ |
20 |
|
|
typedef TYPENAME traits<Joint>::TansformTypeConstRef TansformTypeConstRef; \ |
21 |
|
|
typedef TYPENAME traits<Joint>::TansformTypeRef TansformTypeRef; \ |
22 |
|
|
typedef TYPENAME traits<Joint>::MotionTypeConstRef MotionTypeConstRef; \ |
23 |
|
|
typedef TYPENAME traits<Joint>::MotionTypeRef MotionTypeRef; \ |
24 |
|
|
typedef TYPENAME traits<Joint>::BiasTypeConstRef BiasTypeConstRef; \ |
25 |
|
|
typedef TYPENAME traits<Joint>::BiasTypeRef BiasTypeRef; \ |
26 |
|
|
typedef TYPENAME traits<Joint>::UTypeConstRef UTypeConstRef; \ |
27 |
|
|
typedef TYPENAME traits<Joint>::UTypeRef UTypeRef; \ |
28 |
|
|
typedef TYPENAME traits<Joint>::DTypeConstRef DTypeConstRef; \ |
29 |
|
|
typedef TYPENAME traits<Joint>::DTypeRef DTypeRef; \ |
30 |
|
|
typedef TYPENAME traits<Joint>::UDTypeConstRef UDTypeConstRef; \ |
31 |
|
|
typedef TYPENAME traits<Joint>::UDTypeRef UDTypeRef |
32 |
|
|
|
33 |
|
|
#ifdef __clang__ |
34 |
|
|
|
35 |
|
|
#define PINOCCHIO_JOINT_DATA_TYPEDEF(Joint) \ |
36 |
|
|
PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, PINOCCHIO_EMPTY_ARG) |
37 |
|
|
#define PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(Joint) \ |
38 |
|
|
PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, typename) |
39 |
|
|
|
40 |
|
|
#elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4) && (__GNUC_PATCHLEVEL__ == 2) |
41 |
|
|
|
42 |
|
|
#define PINOCCHIO_JOINT_DATA_TYPEDEF(Joint) \ |
43 |
|
|
PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, PINOCCHIO_EMPTY_ARG) |
44 |
|
|
#define PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(Joint) \ |
45 |
|
|
PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, typename) |
46 |
|
|
|
47 |
|
|
#else |
48 |
|
|
|
49 |
|
|
#define PINOCCHIO_JOINT_DATA_TYPEDEF(Joint) PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, typename) |
50 |
|
|
#define PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(Joint) \ |
51 |
|
|
PINOCCHIO_JOINT_DATA_TYPEDEF_GENERIC(Joint, typename) |
52 |
|
|
|
53 |
|
|
#endif |
54 |
|
|
|
55 |
|
|
#define PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR \ |
56 |
|
|
ConfigVectorTypeConstRef joint_q_accessor() const \ |
57 |
|
|
{ \ |
58 |
|
|
return joint_q; \ |
59 |
|
|
} \ |
60 |
|
|
ConfigVectorTypeRef joint_q_accessor() \ |
61 |
|
|
{ \ |
62 |
|
|
return joint_q; \ |
63 |
|
|
} \ |
64 |
|
|
TangentVectorTypeConstRef joint_v_accessor() const \ |
65 |
|
|
{ \ |
66 |
|
|
return joint_v; \ |
67 |
|
|
} \ |
68 |
|
|
TangentVectorTypeRef joint_v_accessor() \ |
69 |
|
|
{ \ |
70 |
|
|
return joint_v; \ |
71 |
|
|
} \ |
72 |
|
|
ConstraintTypeConstRef S_accessor() const \ |
73 |
|
|
{ \ |
74 |
|
|
return S; \ |
75 |
|
|
} \ |
76 |
|
|
ConstraintTypeRef S_accessor() \ |
77 |
|
|
{ \ |
78 |
|
|
return S; \ |
79 |
|
|
} \ |
80 |
|
|
TansformTypeConstRef M_accessor() const \ |
81 |
|
|
{ \ |
82 |
|
|
return M; \ |
83 |
|
|
} \ |
84 |
|
|
TansformTypeRef M_accessor() \ |
85 |
|
|
{ \ |
86 |
|
|
return M; \ |
87 |
|
|
} \ |
88 |
|
|
MotionTypeConstRef v_accessor() const \ |
89 |
|
|
{ \ |
90 |
|
|
return v; \ |
91 |
|
|
} \ |
92 |
|
|
MotionTypeRef v_accessor() \ |
93 |
|
|
{ \ |
94 |
|
|
return v; \ |
95 |
|
|
} \ |
96 |
|
|
BiasTypeConstRef c_accessor() const \ |
97 |
|
|
{ \ |
98 |
|
|
return c; \ |
99 |
|
|
} \ |
100 |
|
|
BiasTypeRef c_accessor() \ |
101 |
|
|
{ \ |
102 |
|
|
return c; \ |
103 |
|
|
} \ |
104 |
|
|
UTypeConstRef U_accessor() const \ |
105 |
|
|
{ \ |
106 |
|
|
return U; \ |
107 |
|
|
} \ |
108 |
|
|
UTypeRef U_accessor() \ |
109 |
|
|
{ \ |
110 |
|
|
return U; \ |
111 |
|
|
} \ |
112 |
|
|
DTypeConstRef Dinv_accessor() const \ |
113 |
|
|
{ \ |
114 |
|
|
return Dinv; \ |
115 |
|
|
} \ |
116 |
|
|
DTypeRef Dinv_accessor() \ |
117 |
|
|
{ \ |
118 |
|
|
return Dinv; \ |
119 |
|
|
} \ |
120 |
|
|
UDTypeConstRef UDinv_accessor() const \ |
121 |
|
|
{ \ |
122 |
|
|
return UDinv; \ |
123 |
|
|
} \ |
124 |
|
|
UDTypeRef UDinv_accessor() \ |
125 |
|
|
{ \ |
126 |
|
|
return UDinv; \ |
127 |
|
|
} \ |
128 |
|
|
DTypeConstRef StU_accessor() const \ |
129 |
|
|
{ \ |
130 |
|
|
return StU; \ |
131 |
|
|
} \ |
132 |
|
|
DTypeRef StU_accessor() \ |
133 |
|
|
{ \ |
134 |
|
|
return StU; \ |
135 |
|
|
} |
136 |
|
|
|
137 |
|
|
#define PINOCCHIO_JOINT_DATA_BASE_ACCESSOR_DEFAULT_RETURN_TYPE \ |
138 |
|
|
typedef const ConfigVector_t & ConfigVectorTypeConstRef; \ |
139 |
|
|
typedef ConfigVector_t & ConfigVectorTypeRef; \ |
140 |
|
|
typedef const TangentVector_t & TangentVectorTypeConstRef; \ |
141 |
|
|
typedef TangentVector_t & TangentVectorTypeRef; \ |
142 |
|
|
typedef const Constraint_t & ConstraintTypeConstRef; \ |
143 |
|
|
typedef Constraint_t & ConstraintTypeRef; \ |
144 |
|
|
typedef const Transformation_t & TansformTypeConstRef; \ |
145 |
|
|
typedef Transformation_t & TansformTypeRef; \ |
146 |
|
|
typedef const Motion_t & MotionTypeConstRef; \ |
147 |
|
|
typedef Motion_t & MotionTypeRef; \ |
148 |
|
|
typedef const Bias_t & BiasTypeConstRef; \ |
149 |
|
|
typedef Bias_t & BiasTypeRef; \ |
150 |
|
|
typedef const U_t & UTypeConstRef; \ |
151 |
|
|
typedef U_t & UTypeRef; \ |
152 |
|
|
typedef const D_t & DTypeConstRef; \ |
153 |
|
|
typedef D_t & DTypeRef; \ |
154 |
|
|
typedef const UD_t & UDTypeConstRef; \ |
155 |
|
|
typedef UD_t & UDTypeRef; |
156 |
|
|
|
157 |
|
|
namespace pinocchio |
158 |
|
|
{ |
159 |
|
|
|
160 |
|
|
template<typename Derived> |
161 |
|
|
struct JointDataBase : NumericalBase<Derived> |
162 |
|
|
{ |
163 |
|
|
EIGEN_MAKE_ALIGNED_OPERATOR_NEW |
164 |
|
|
|
165 |
|
|
typedef typename traits<Derived>::JointDerived JointDerived; |
166 |
|
|
PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(JointDerived); |
167 |
|
|
|
168 |
|
2919350 |
Derived & derived() |
169 |
|
|
{ |
170 |
|
2919350 |
return *static_cast<Derived *>(this); |
171 |
|
|
} |
172 |
|
17000 |
const Derived & derived() const |
173 |
|
|
{ |
174 |
|
34000 |
return *static_cast<const Derived *>(this); |
175 |
|
|
} |
176 |
|
|
|
177 |
|
✗ |
ConfigVectorTypeConstRef joint_q() const |
178 |
|
|
{ |
179 |
|
✗ |
return derived().joint_q_accessor(); |
180 |
|
|
} |
181 |
|
✗ |
ConfigVectorTypeRef joint_q() |
182 |
|
|
{ |
183 |
|
✗ |
return derived().joint_q_accessor(); |
184 |
|
|
} |
185 |
|
|
|
186 |
|
✗ |
TangentVectorTypeConstRef joint_v() const |
187 |
|
|
{ |
188 |
|
✗ |
return derived().joint_v_accessor(); |
189 |
|
|
} |
190 |
|
7222 |
TangentVectorTypeRef joint_v() |
191 |
|
|
{ |
192 |
|
7235 |
return derived().joint_v_accessor(); |
193 |
|
|
} |
194 |
|
|
|
195 |
|
54 |
ConstraintTypeConstRef S() const |
196 |
|
|
{ |
197 |
|
54 |
return derived().S_accessor(); |
198 |
|
|
} |
199 |
|
181127 |
ConstraintTypeRef S() |
200 |
|
|
{ |
201 |
|
183426 |
return derived().S_accessor(); |
202 |
|
|
} |
203 |
|
27 |
TansformTypeConstRef M() const |
204 |
|
|
{ |
205 |
|
54 |
return derived().M_accessor(); |
206 |
|
|
} |
207 |
|
1126376 |
TansformTypeRef M() |
208 |
|
|
{ |
209 |
|
1126376 |
return derived().M_accessor(); |
210 |
|
|
} |
211 |
|
✗ |
MotionTypeConstRef v() const |
212 |
|
|
{ |
213 |
|
✗ |
return derived().v_accessor(); |
214 |
|
|
} |
215 |
|
275584 |
MotionTypeRef v() |
216 |
|
|
{ |
217 |
|
275584 |
return derived().v_accessor(); |
218 |
|
|
} |
219 |
|
✗ |
BiasTypeConstRef c() const |
220 |
|
|
{ |
221 |
|
✗ |
return derived().c_accessor(); |
222 |
|
|
} |
223 |
|
166766 |
BiasTypeRef c() |
224 |
|
|
{ |
225 |
|
166766 |
return derived().c_accessor(); |
226 |
|
|
} |
227 |
|
|
|
228 |
|
166 |
UTypeConstRef U() const |
229 |
|
|
{ |
230 |
|
166 |
return derived().U_accessor(); |
231 |
|
|
} |
232 |
|
2083 |
UTypeRef U() |
233 |
|
|
{ |
234 |
|
3046 |
return derived().U_accessor(); |
235 |
|
|
} |
236 |
|
2 |
DTypeConstRef Dinv() const |
237 |
|
|
{ |
238 |
|
4 |
return derived().Dinv_accessor(); |
239 |
|
|
} |
240 |
|
2024 |
DTypeRef Dinv() |
241 |
|
|
{ |
242 |
|
2942 |
return derived().Dinv_accessor(); |
243 |
|
|
} |
244 |
|
2 |
UDTypeConstRef UDinv() const |
245 |
|
|
{ |
246 |
|
4 |
return derived().UDinv_accessor(); |
247 |
|
|
} |
248 |
|
2435 |
UDTypeRef UDinv() |
249 |
|
|
{ |
250 |
|
3760 |
return derived().UDinv_accessor(); |
251 |
|
|
} |
252 |
|
29 |
DTypeConstRef StU() const |
253 |
|
|
{ |
254 |
|
58 |
return derived().StU_accessor(); |
255 |
|
|
} |
256 |
|
342 |
DTypeRef StU() |
257 |
|
|
{ |
258 |
|
1071 |
return derived().StU_accessor(); |
259 |
|
|
} |
260 |
|
|
|
261 |
|
✗ |
std::string shortname() const |
262 |
|
|
{ |
263 |
|
✗ |
return derived().shortname(); |
264 |
|
|
} |
265 |
|
✗ |
static std::string classname() |
266 |
|
|
{ |
267 |
|
✗ |
return Derived::classname(); |
268 |
|
|
} |
269 |
|
|
|
270 |
|
✗ |
void disp(std::ostream & os) const |
271 |
|
|
{ |
272 |
|
|
using namespace std; |
273 |
|
✗ |
os << shortname() << endl; |
274 |
|
|
} |
275 |
|
|
|
276 |
|
✗ |
friend std::ostream & operator<<(std::ostream & os, const JointDataBase<Derived> & joint) |
277 |
|
|
{ |
278 |
|
✗ |
joint.disp(os); |
279 |
|
✗ |
return os; |
280 |
|
|
} |
281 |
|
|
|
282 |
|
|
template<typename OtherDerived> |
283 |
|
✗ |
bool operator==(const JointDataBase<OtherDerived> & other) const |
284 |
|
|
{ |
285 |
|
✗ |
return derived().isEqual(other.derived()); |
286 |
|
|
} |
287 |
|
|
|
288 |
|
|
/// \brief Default operator== implementation |
289 |
|
✗ |
bool isEqual(const JointDataBase<Derived> & other) const |
290 |
|
|
{ |
291 |
|
✗ |
return internal::comparison_eq(joint_q(), other.joint_q()) |
292 |
|
✗ |
&& internal::comparison_eq(joint_v(), other.joint_v()) |
293 |
|
✗ |
&& internal::comparison_eq(S(), other.S()) && internal::comparison_eq(M(), other.M()) |
294 |
|
✗ |
&& internal::comparison_eq(v(), other.v()) && internal::comparison_eq(c(), other.c()) |
295 |
|
✗ |
&& internal::comparison_eq(U(), other.U()) |
296 |
|
✗ |
&& internal::comparison_eq(Dinv(), other.Dinv()) |
297 |
|
✗ |
&& internal::comparison_eq(UDinv(), other.UDinv()); |
298 |
|
|
} |
299 |
|
|
|
300 |
|
|
/// \brief Default operator== implementation |
301 |
|
|
template<typename OtherDerived> |
302 |
|
✗ |
bool isEqual(const JointDataBase<OtherDerived> & /*other*/) const |
303 |
|
|
{ |
304 |
|
✗ |
return false; |
305 |
|
|
; |
306 |
|
|
} |
307 |
|
|
|
308 |
|
✗ |
bool operator!=(const JointDataBase<Derived> & other) const |
309 |
|
|
{ |
310 |
|
✗ |
return derived().isNotEqual(other.derived()); |
311 |
|
|
} |
312 |
|
|
|
313 |
|
|
/// \brief Default operator!= implementation |
314 |
|
✗ |
bool isNotEqual(const JointDataBase<Derived> & other) const |
315 |
|
|
{ |
316 |
|
✗ |
return !(internal::comparison_eq(derived(), other.derived())); |
317 |
|
|
} |
318 |
|
|
|
319 |
|
|
protected: |
320 |
|
|
/// \brief Default constructor: protected. |
321 |
|
69246 |
inline JointDataBase() |
322 |
|
|
{ |
323 |
|
69246 |
} |
324 |
|
|
|
325 |
|
|
}; // struct JointDataBase |
326 |
|
|
|
327 |
|
|
} // namespace pinocchio |
328 |
|
|
|
329 |
|
|
#endif // ifndef __pinocchio_multibody_joint_data_base_hpp__ |
330 |
|
|
|