Blender V4.3
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
30
31#include "utilities/rall2d.h"
32#include "frames.hpp"
33
34
35
36namespace KDL {
37
38class TwistAcc;
40
41
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) {}
58 IMETHOD static VectorAcc Zero();
59 IMETHOD void ReverseSign();
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);
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
92{
93public:
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
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
143
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;
179 IMETHOD TwistAcc operator * (const Twist& arg) const;
180};
181
182
183
184
185
186
187
188
189//very similar to Wrench class.
191{
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);
202
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);
206
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
219 IMETHOD void ReverseSign();
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
227
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;
235
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
IMETHOD FrameAcc & operator=(const FrameAcc &arg)
Definition frameacc.inl:336
IMETHOD Twist GetTwist() const
Definition frameacc.inl:407
IMETHOD FrameAcc Inverse() const
Definition frameacc.inl:379
FrameAcc(const Frame &T_)
Definition frameacc.hpp:153
static IMETHOD FrameAcc Identity()
Definition frameacc.inl:342
RotationAcc M
Rotation,angular velocity, and angular acceleration of frame.
Definition frameacc.hpp:149
IMETHOD Frame GetFrame() const
Definition frameacc.inl:402
IMETHOD friend bool Equal(const FrameAcc &r1, const FrameAcc &r2, double eps)
IMETHOD friend bool Equal(const Frame &r1, const FrameAcc &r2, double eps)
VectorAcc p
Translation, velocity and acceleration of origin.
Definition frameacc.hpp:150
IMETHOD Twist GetAccTwist() const
Definition frameacc.inl:412
IMETHOD friend bool Equal(const FrameAcc &r1, const Frame &r2, double eps)
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
IMETHOD friend FrameAcc operator*(const FrameAcc &f1, const FrameAcc &f2)
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 friend bool Equal(const Rotation &r1, const RotationAcc &r2, double eps)
IMETHOD RotationAcc Inverse() const
Definition frameacc.inl:222
IMETHOD friend bool Equal(const RotationAcc &r1, const RotationAcc &r2, double eps)
IMETHOD friend RotationAcc operator*(const RotationAcc &r1, const RotationAcc &r2)
static IMETHOD RotationAcc Identity()
Definition frameacc.inl:218
RotationAcc(const Rotation &R_)
Definition frameacc.hpp:99
IMETHOD RotationAcc & operator=(const RotationAcc &arg)
Definition frameacc.inl:205
Vector dw
angular acceration vector
Definition frameacc.hpp:96
Vector w
angular velocity vector
Definition frameacc.hpp:95
IMETHOD friend bool Equal(const RotationAcc &r1, const Rotation &r2, double eps)
Rotation R
rotation matrix
Definition frameacc.hpp:94
represents rotations in 3 dimensional space.
Definition frames.hpp:299
IMETHOD friend bool Equal(const TwistAcc &a, const Twist &b, double eps)
IMETHOD friend TwistAcc operator+(const TwistAcc &lhs, const TwistAcc &rhs)
IMETHOD friend TwistAcc operator*(const doubleAcc &lhs, const TwistAcc &rhs)
IMETHOD friend TwistAcc operator-(const TwistAcc &lhs, const TwistAcc &rhs)
IMETHOD friend TwistAcc operator-(const TwistAcc &arg)
VectorAcc rot
rotational velocity and its 1st and 2nd derivative
Definition frameacc.hpp:194
IMETHOD TwistAcc & operator+=(const TwistAcc &arg)
Definition frameacc.inl:461
IMETHOD friend TwistAcc operator*(const TwistAcc &lhs, double rhs)
IMETHOD friend void SetToZero(TwistAcc &v)
IMETHOD void ReverseSign()
Definition frameacc.inl:438
IMETHOD friend TwistAcc operator/(const TwistAcc &lhs, const doubleAcc &rhs)
IMETHOD friend bool Equal(const Twist &a, const TwistAcc &b, double eps)
IMETHOD friend TwistAcc operator*(double lhs, const TwistAcc &rhs)
static IMETHOD TwistAcc Zero()
Definition frameacc.inl:432
IMETHOD friend bool Equal(const TwistAcc &a, const TwistAcc &b, double eps)
IMETHOD TwistAcc & operator-=(const TwistAcc &arg)
Definition frameacc.inl:454
IMETHOD Twist GetTwistDot() const
Definition frameacc.inl:580
IMETHOD TwistAcc RefPoint(const VectorAcc &v_base_AB)
Definition frameacc.inl:444
IMETHOD Twist GetTwist() const
Definition frameacc.inl:576
TwistAcc(const VectorAcc &_vel, const VectorAcc &_rot)
Definition frameacc.hpp:198
VectorAcc vel
translational velocity and its 1st and 2nd derivative
Definition frameacc.hpp:193
IMETHOD friend TwistAcc operator*(const TwistAcc &lhs, const doubleAcc &rhs)
IMETHOD friend TwistAcc operator/(const TwistAcc &lhs, double rhs)
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)
VectorAcc(const Vector &_p)
Definition frameacc.hpp:50
IMETHOD friend VectorAcc operator+(const VectorAcc &r1, const VectorAcc &r2)
IMETHOD friend bool Equal(const VectorAcc &r1, const Vector &r2, double eps)
IMETHOD friend doubleAcc dot(const Vector &lhs, const VectorAcc &rhs)
IMETHOD friend VectorAcc operator*(const Rotation &R, const VectorAcc &x)
IMETHOD friend doubleAcc dot(const VectorAcc &lhs, const Vector &rhs)
Vector dv
acceleration vector
Definition frameacc.hpp:47
IMETHOD VectorAcc & operator-=(const VectorAcc &arg)
Definition frameacc.inl:110
Vector v
velocity vector
Definition frameacc.hpp:46
IMETHOD VectorAcc & operator+=(const VectorAcc &arg)
Definition frameacc.inl:104
IMETHOD void ReverseSign()
Definition frameacc.inl:121
IMETHOD friend bool Equal(const Vector &r1, const VectorAcc &r2, double eps)
IMETHOD doubleAcc Norm()
Definition frameacc.inl:127
VectorAcc(const Vector &_p, const Vector &_v)
Definition frameacc.hpp:51
IMETHOD friend doubleAcc dot(const VectorAcc &lhs, const VectorAcc &rhs)
IMETHOD friend VectorAcc operator-(const VectorAcc &r1, const VectorAcc &r2)
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)
IMETHOD VectorAcc & operator=(const VectorAcc &arg)
Definition frameacc.inl:90
static IMETHOD VectorAcc Zero()
Definition frameacc.inl:117
IMETHOD friend VectorAcc operator*(const VectorAcc &r1, const VectorAcc &r2)
A concrete implementation of a 3 dimensional vector class.
Definition frames.hpp:143
local_group_size(16, 16) .push_constant(Type b
local_group_size(16, 16) .push_constant(Type rhs
#define rot(x, k)
#define R
Definition chain.cpp:27
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
IMETHOD bool Equal(const VectorAcc &, const VectorAcc &, double=epsilon)
const btScalar eps
Definition poly34.cpp:11
#define IMETHOD
Definition utility.h:43