Blender V5.0
frameacc.hpp
Go to the documentation of this file.
1/*****************************************************************************
2 * \file
3 * This file contains the definition of classes for a
4 * Rall Algebra of (subset of) the classes defined in frames,
5 * i.e. classes that contain a set (value,derivative,2nd derivative)
6 * and define operations on that set
7 * this classes are usefull for automatic differentiation ( <-> symbolic diff ,
8 * <-> numeric diff).
9 * Defines VectorAcc, RotationAcc, FrameAcc, doubleAcc.
10 * Look at the corresponding classes Vector Rotation Frame Twist and
11 * Wrench for the semantics of the methods.
12 *
13 * It also contains the 2nd derivative <-> RFrames.h
14 *
15 * Erwin Aertbelien, Div. PMA, Dep. of Mech. Eng., K.U.Leuven
16 *
17 * \version
18 * ORO_Geometry V0.2
19 *
20 * \par History
21 * - $log$
22 *
23 * \par Release
24 * $Name: $
25 ****************************************************************************/
26
27#ifndef RRFRAMES_H
28#define RRFRAMES_H
29
31#include "utilities/rall2d.h"
32#include "frames.hpp"
33
35
36namespace KDL {
40
43{
44public:
48public:
49 VectorAcc():p(),v(),dv() {}
50 explicit VectorAcc(const Vector& _p):p(_p),v(Vector::Zero()),dv(Vector::Zero()) {}
51 VectorAcc(const Vector& _p,const Vector& _v):p(_p),v(_v),dv(Vector::Zero()) {}
52 VectorAcc(const Vector& _p,const Vector& _v,const Vector& _dv):
53 p(_p),v(_v),dv(_dv) {}
61 IMETHOD friend VectorAcc operator + (const VectorAcc& r1,const VectorAcc& r2);
62 IMETHOD friend VectorAcc operator - (const VectorAcc& r1,const VectorAcc& r2);
63 IMETHOD friend VectorAcc operator + (const Vector& r1,const VectorAcc& r2);
64 IMETHOD friend VectorAcc operator - (const Vector& r1,const VectorAcc& r2);
65 IMETHOD friend VectorAcc operator + (const VectorAcc& r1,const Vector& r2);
66 IMETHOD friend VectorAcc operator - (const VectorAcc& r1,const Vector& r2);
67 IMETHOD friend VectorAcc operator * (const VectorAcc& r1,const VectorAcc& r2);
68 IMETHOD friend VectorAcc operator * (const VectorAcc& r1,const Vector& r2);
69 IMETHOD friend VectorAcc operator * (const Vector& r1,const VectorAcc& r2);
70 IMETHOD friend VectorAcc operator * (const VectorAcc& r1,double r2);
71 IMETHOD friend VectorAcc operator * (double r1,const VectorAcc& r2);
72 IMETHOD friend VectorAcc operator * (const doubleAcc& r1,const VectorAcc& r2);
73 IMETHOD friend VectorAcc operator * (const VectorAcc& r2,const doubleAcc& r1);
74 IMETHOD friend VectorAcc operator*(const Rotation& R,const VectorAcc& x);
75
76 IMETHOD friend VectorAcc operator / (const VectorAcc& r1,double r2);
77 IMETHOD friend VectorAcc operator / (const VectorAcc& r2,const doubleAcc& r1);
78
79
80 IMETHOD friend bool Equal(const VectorAcc& r1,const VectorAcc& r2,double eps);
81 IMETHOD friend bool Equal(const Vector& r1,const VectorAcc& r2,double eps);
82 IMETHOD friend bool Equal(const VectorAcc& r1,const Vector& r2,double eps);
83 IMETHOD friend VectorAcc operator - (const VectorAcc& r);
84 IMETHOD friend doubleAcc dot(const VectorAcc& lhs,const VectorAcc& rhs);
85 IMETHOD friend doubleAcc dot(const VectorAcc& lhs,const Vector& rhs);
86 IMETHOD friend doubleAcc dot(const Vector& lhs,const VectorAcc& rhs);
87};
88
89
90
97public:
98 RotationAcc():R(),w() {}
99 explicit RotationAcc(const Rotation& R_):R(R_),w(Vector::Zero()){}
100 RotationAcc(const Rotation& R_,const Vector& _w,const Vector& _dw):
101 R(R_),w(_w),dw(_dw) {}
106 IMETHOD VectorAcc Inverse(const VectorAcc& arg) const;
107 IMETHOD VectorAcc Inverse(const Vector& arg) const;
108 IMETHOD VectorAcc operator*(const VectorAcc& arg) const;
109 IMETHOD VectorAcc operator*(const Vector& arg) const;
110
111 // Rotations
112 // The SetRot.. functions set the value of *this to the appropriate rotation matrix.
113 // The Rot... static functions give the value of the appropriate rotation matrix back.
114 // The DoRot... functions apply a rotation R to *this,such that *this = *this * R.
115 // IMETHOD void DoRotX(const doubleAcc& angle);
116 // IMETHOD void DoRotY(const doubleAcc& angle);
117 // IMETHOD void DoRotZ(const doubleAcc& angle);
118 // IMETHOD static RRotation RotX(const doubleAcc& angle);
119 // IMETHOD static RRotation RotY(const doubleAcc& angle);
120 // IMETHOD static RRotation RotZ(const doubleAcc& angle);
121
122 // IMETHOD void SetRot(const Vector& rotaxis,const doubleAcc& angle);
123 // Along an arbitrary axes. The norm of rotvec is neglected.
124 // IMETHOD static RotationAcc Rot(const Vector& rotvec,const doubleAcc& angle);
125 // rotvec has arbitrary norm
126 // rotation around a constant vector !
127 // IMETHOD static RotationAcc Rot2(const Vector& rotvec,const doubleAcc& angle);
128 // rotvec is normalized.
129 // rotation around a constant vector !
130
131 IMETHOD friend RotationAcc operator* (const RotationAcc& r1,const RotationAcc& r2);
132 IMETHOD friend RotationAcc operator* (const Rotation& r1,const RotationAcc& r2);
133 IMETHOD friend RotationAcc operator* (const RotationAcc& r1,const Rotation& r2);
134 IMETHOD friend bool Equal(const RotationAcc& r1,const RotationAcc& r2,double eps);
135 IMETHOD friend bool Equal(const Rotation& r1,const RotationAcc& r2,double eps);
136 IMETHOD friend bool Equal(const RotationAcc& r1,const Rotation& r2,double eps);
137 IMETHOD TwistAcc Inverse(const TwistAcc& arg) const;
138 IMETHOD TwistAcc Inverse(const Twist& arg) const;
139 IMETHOD TwistAcc operator * (const TwistAcc& arg) const;
140 IMETHOD TwistAcc operator * (const Twist& arg) const;
141};
142
144
145
147{
148public:
151public:
153 explicit FrameAcc(const Frame& T_):M(T_.M),p(T_.p) {}
154 FrameAcc(const Frame& T_,const Twist& _t,const Twist& _dt):
155 M(T_.M,_t.rot,_dt.rot),p(T_.p,_t.vel,_dt.vel) {}
156 FrameAcc(const RotationAcc& _M,const VectorAcc& _p):M(_M),p(_p) {}
157
159 IMETHOD FrameAcc& operator = (const Frame& arg);
160 IMETHOD static FrameAcc Identity();
161 IMETHOD FrameAcc Inverse() const;
162 IMETHOD VectorAcc Inverse(const VectorAcc& arg) const;
163 IMETHOD VectorAcc operator*(const VectorAcc& arg) const;
164 IMETHOD VectorAcc operator*(const Vector& arg) const;
165 IMETHOD VectorAcc Inverse(const Vector& arg) const;
166 IMETHOD Frame GetFrame() const;
167 IMETHOD Twist GetTwist() const;
168 IMETHOD Twist GetAccTwist() const;
169 IMETHOD friend FrameAcc operator * (const FrameAcc& f1,const FrameAcc& f2);
170 IMETHOD friend FrameAcc operator * (const Frame& f1,const FrameAcc& f2);
171 IMETHOD friend FrameAcc operator * (const FrameAcc& f1,const Frame& f2);
172 IMETHOD friend bool Equal(const FrameAcc& r1,const FrameAcc& r2,double eps);
173 IMETHOD friend bool Equal(const Frame& r1,const FrameAcc& r2,double eps);
174 IMETHOD friend bool Equal(const FrameAcc& r1,const Frame& r2,double eps);
175
176 IMETHOD TwistAcc Inverse(const TwistAcc& arg) const;
177 IMETHOD TwistAcc Inverse(const Twist& arg) const;
178 IMETHOD TwistAcc operator * (const TwistAcc& arg) const;
180};
181
182
184
185
186
187
188
189//very similar to Wrench class.
192public:
195public:
196
197 TwistAcc():vel(),rot() {};
198 TwistAcc(const VectorAcc& _vel,const VectorAcc& _rot):vel(_vel),rot(_rot) {};
199
200 IMETHOD TwistAcc& operator-=(const TwistAcc& arg);
201 IMETHOD TwistAcc& operator+=(const TwistAcc& arg);
203 IMETHOD friend TwistAcc operator*(const TwistAcc& lhs,double rhs);
204 IMETHOD friend TwistAcc operator*(double lhs,const TwistAcc& rhs);
205 IMETHOD friend TwistAcc operator/(const TwistAcc& lhs,double rhs);
207 IMETHOD friend TwistAcc operator*(const TwistAcc& lhs,const doubleAcc& rhs);
208 IMETHOD friend TwistAcc operator*(const doubleAcc& lhs,const TwistAcc& rhs);
209 IMETHOD friend TwistAcc operator/(const TwistAcc& lhs,const doubleAcc& rhs);
210
211 IMETHOD friend TwistAcc operator+(const TwistAcc& lhs,const TwistAcc& rhs);
212 IMETHOD friend TwistAcc operator-(const TwistAcc& lhs,const TwistAcc& rhs);
213 IMETHOD friend TwistAcc operator-(const TwistAcc& arg);
214
216
217 static IMETHOD TwistAcc Zero();
218
220
221 IMETHOD TwistAcc RefPoint(const VectorAcc& v_base_AB);
222 // Changes the reference point of the RTwist.
223 // The RVector v_base_AB is expressed in the same base as the RTwist
224 // The RVector v_base_AB is a RVector from the old point to
225 // the new point.
226 // Complexity : 6M+6A
228 IMETHOD friend bool Equal(const TwistAcc& a,const TwistAcc& b,double eps);
229 IMETHOD friend bool Equal(const Twist& a,const TwistAcc& b,double eps);
230 IMETHOD friend bool Equal(const TwistAcc& a,const Twist& b,double eps);
231
232
233 IMETHOD Twist GetTwist() const;
234 IMETHOD Twist GetTwistDot() const;
236 friend class RotationAcc;
237 friend class FrameAcc;
238
239};
240
241
242IMETHOD bool Equal(const VectorAcc&, const VectorAcc&, double = epsilon);
243IMETHOD bool Equal(const Vector&, const VectorAcc&, double = epsilon);
244IMETHOD bool Equal(const VectorAcc&, const Vector&, double = epsilon);
245IMETHOD bool Equal(const RotationAcc&, const RotationAcc&, double = epsilon);
246IMETHOD bool Equal(const Rotation&, const RotationAcc&, double = epsilon);
247IMETHOD bool Equal(const RotationAcc&, const Rotation&, double = epsilon);
248IMETHOD bool Equal(const FrameAcc&, const FrameAcc&, double = epsilon);
249IMETHOD bool Equal(const Frame&, const FrameAcc&, double = epsilon);
250IMETHOD bool Equal(const FrameAcc&, const Frame&, double = epsilon);
251IMETHOD bool Equal(const TwistAcc&, const TwistAcc&, double = epsilon);
252IMETHOD bool Equal(const Twist&, const TwistAcc&, double = epsilon);
253IMETHOD bool Equal(const TwistAcc&, const Twist&, double = epsilon);
254
255
256#ifdef KDL_INLINE
257#include "frameacc.inl"
258#endif
259
260}
261
262
263
264
265
266#endif
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
IMETHOD FrameAcc & operator=(const FrameAcc &arg)
Definition frameacc.hpp:337
IMETHOD Twist GetTwist() const
Definition frameacc.hpp:408
IMETHOD FrameAcc Inverse() const
Definition frameacc.hpp:380
FrameAcc(const Frame &T_)
Definition frameacc.hpp:153
static IMETHOD FrameAcc Identity()
Definition frameacc.hpp:343
RotationAcc M
Rotation,angular velocity, and angular acceleration of frame.
Definition frameacc.hpp:149
IMETHOD Frame GetFrame() const
Definition frameacc.hpp:403
IMETHOD friend bool Equal(const FrameAcc &r1, const FrameAcc &r2, double eps)
Definition frameacc.hpp:392
IMETHOD VectorAcc operator*(const VectorAcc &arg) const
Definition frameacc.hpp:361
VectorAcc p
Translation, velocity and acceleration of origin.
Definition frameacc.hpp:150
IMETHOD Twist GetAccTwist() const
Definition frameacc.hpp:413
FrameAcc(const RotationAcc &_M, const VectorAcc &_p)
Definition frameacc.hpp:156
FrameAcc(const Frame &T_, const Twist &_t, const Twist &_dt)
Definition frameacc.hpp:154
represents a frame transformation in 3D space (rotation + translation)
Definition frames.hpp:526
RotationAcc(const Rotation &R_, const Vector &_w, const Vector &_dw)
Definition frameacc.hpp:100
IMETHOD RotationAcc Inverse() const
Definition frameacc.hpp:223
IMETHOD friend bool Equal(const RotationAcc &r1, const RotationAcc &r2, double eps)
Definition frameacc.hpp:322
static IMETHOD RotationAcc Identity()
Definition frameacc.hpp:219
RotationAcc(const Rotation &R_)
Definition frameacc.hpp:99
IMETHOD RotationAcc & operator=(const RotationAcc &arg)
Definition frameacc.hpp:206
Vector dw
angular acceration vector
Definition frameacc.hpp:96
Vector w
angular velocity vector
Definition frameacc.hpp:95
IMETHOD VectorAcc operator*(const VectorAcc &arg) const
Definition frameacc.hpp:244
Rotation R
rotation matrix
Definition frameacc.hpp:94
represents rotations in 3 dimensional space.
Definition frames.hpp:299
IMETHOD friend TwistAcc operator+(const TwistAcc &lhs, const TwistAcc &rhs)
Definition frameacc.hpp:504
IMETHOD friend TwistAcc operator-(const TwistAcc &lhs, const TwistAcc &rhs)
Definition frameacc.hpp:509
VectorAcc rot
rotational velocity and its 1st and 2nd derivative
Definition frameacc.hpp:194
friend class RotationAcc
Definition frameacc.hpp:236
IMETHOD TwistAcc & operator+=(const TwistAcc &arg)
Definition frameacc.hpp:462
IMETHOD friend TwistAcc operator*(const TwistAcc &lhs, double rhs)
Definition frameacc.hpp:470
IMETHOD friend void SetToZero(TwistAcc &v)
IMETHOD void ReverseSign()
Definition frameacc.hpp:439
static IMETHOD TwistAcc Zero()
Definition frameacc.hpp:433
IMETHOD friend bool Equal(const TwistAcc &a, const TwistAcc &b, double eps)
Definition frameacc.hpp:585
IMETHOD TwistAcc & operator-=(const TwistAcc &arg)
Definition frameacc.hpp:455
IMETHOD Twist GetTwistDot() const
Definition frameacc.hpp:581
IMETHOD TwistAcc RefPoint(const VectorAcc &v_base_AB)
Definition frameacc.hpp:445
IMETHOD Twist GetTwist() const
Definition frameacc.hpp:577
VectorAcc vel
translational velocity and its 1st and 2nd derivative
Definition frameacc.hpp:193
friend class FrameAcc
Definition frameacc.hpp:237
IMETHOD friend TwistAcc operator/(const TwistAcc &lhs, double rhs)
Definition frameacc.hpp:480
represents both translational and rotational velocities.
Definition frames.hpp:679
Vector p
position vector
Definition frameacc.hpp:45
IMETHOD friend VectorAcc operator/(const VectorAcc &r1, double r2)
Definition frameacc.hpp:179
VectorAcc(const Vector &_p)
Definition frameacc.hpp:50
IMETHOD friend VectorAcc operator+(const VectorAcc &r1, const VectorAcc &r2)
Definition frameacc.hpp:23
Vector dv
acceleration vector
Definition frameacc.hpp:47
IMETHOD VectorAcc & operator-=(const VectorAcc &arg)
Definition frameacc.hpp:111
Vector v
velocity vector
Definition frameacc.hpp:46
IMETHOD VectorAcc & operator+=(const VectorAcc &arg)
Definition frameacc.hpp:105
IMETHOD void ReverseSign()
Definition frameacc.hpp:122
IMETHOD doubleAcc Norm()
Definition frameacc.hpp:128
IMETHOD friend doubleAcc dot(const VectorAcc &lhs, const VectorAcc &rhs)
Definition frameacc.hpp:136
IMETHOD friend VectorAcc operator-(const VectorAcc &r1, const VectorAcc &r2)
Definition frameacc.hpp:27
VectorAcc(const Vector &_p, const Vector &_v, const Vector &_dv)
Definition frameacc.hpp:52
IMETHOD friend bool Equal(const VectorAcc &r1, const VectorAcc &r2, double eps)
Definition frameacc.hpp:158
IMETHOD VectorAcc & operator=(const VectorAcc &arg)
Definition frameacc.hpp:91
static IMETHOD VectorAcc Zero()
Definition frameacc.hpp:118
IMETHOD friend VectorAcc operator*(const VectorAcc &r1, const VectorAcc &r2)
Definition frameacc.hpp:51
A concrete implementation of a 3 dimensional vector class.
Definition frames.hpp:143
#define rot(x, k)
#define R
Definition chain.cpp:27
IMETHOD bool Equal(const VectorAcc &, const VectorAcc &, double=epsilon)
Definition frameacc.hpp:158
Rall2d< double, double, double > doubleAcc
Definition frameacc.hpp:39
double epsilon
default precision while comparing with Equal(..,..) functions. Initialized at 0.0000001.
Definition utility.cpp:22
const btScalar eps
Definition poly34.cpp:11
#define IMETHOD
Definition utility.h:43