7 changed files with 257 additions and 0 deletions
-
0lwrserv/include/Point.h
-
0lwrserv/include/Singleton.h
-
0lwrserv/include/global.h
-
0lwrserv/include/resource.h
-
0lwrserv/include/sgn.h
-
21lwrserv/include/trajectory.h
-
236lwrserv/include/vec.h
@ -0,0 +1,21 @@ |
|||||
|
#ifndef _TRAJECTORY_H_ |
||||
|
#define _TRAJECTORY_H_ |
||||
|
|
||||
|
#include "vec.h" |
||||
|
|
||||
|
class Trajectory |
||||
|
{ |
||||
|
public: |
||||
|
virtual unsigned int getSteps(); |
||||
|
|
||||
|
virtual Vec<T, SIZE> getJointValues(); |
||||
|
virtual Vec<T, SIZE> getJointVelocity(unsigned int jointID); |
||||
|
virtual Vec<T, SIZE> getJointAcceleration(unsigned int jointID); |
||||
|
|
||||
|
virtual Vec<T, SIZE> getCarthesianValues(); |
||||
|
virtual Vec<T, SIZE> getCarthesianVelocity(unsigned int jointID); |
||||
|
virtual Vec<T, SIZE> getCarthesianAcceleration(unsigned int jointID); |
||||
|
}; |
||||
|
|
||||
|
class TrajectoryBangBang :: Trajectory; |
||||
|
#endif |
@ -0,0 +1,236 @@ |
|||||
|
#ifndef _VEC_H_ |
||||
|
#define _VEC_H_ |
||||
|
#include <math.h> |
||||
|
#include <ostream> |
||||
|
#include "mat.h" |
||||
|
|
||||
|
template<class T, unsigned SIZE> class Vec; |
||||
|
template <class T, unsigned SIZE> class Mat; |
||||
|
|
||||
|
|
||||
|
// Vector class for SIMPLE data types |
||||
|
template <class T, unsigned SIZE> class Vec |
||||
|
{ |
||||
|
public: |
||||
|
|
||||
|
// standard constructor |
||||
|
Vec<T,SIZE> () |
||||
|
{ // initialize all elements with zero |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
m_atData[i] = T(0); |
||||
|
} |
||||
|
|
||||
|
// construction with data array |
||||
|
Vec<T, SIZE> (const T atData[SIZE]) |
||||
|
{ |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
m_atData[i] = atData[i]; |
||||
|
} |
||||
|
|
||||
|
// copy constructor |
||||
|
Vec<T, SIZE> (const Vec<T, SIZE> &vec) |
||||
|
{ |
||||
|
if (this==&vec) |
||||
|
return; // nothing to do, it's me |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
m_atData[i] = vec.m_atData[i]; |
||||
|
} |
||||
|
|
||||
|
// destructor |
||||
|
~Vec () |
||||
|
{ // nothing to do here ... |
||||
|
} |
||||
|
|
||||
|
void setData (const T atData[SIZE]) |
||||
|
{ |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
m_atData[i] = atData[i]; |
||||
|
} |
||||
|
|
||||
|
void getData (const T atData[SIZE]) |
||||
|
{ |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
atData[i] = m_atData[i]; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
unsigned getDimension () |
||||
|
{ |
||||
|
return SIZE; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
Vec<T, SIZE> &operator = (const Vec<T, SIZE> &vec) |
||||
|
{ |
||||
|
if (this==&vec) |
||||
|
return (*this); // ok, it's me, so no L-value action |
||||
|
for (unsigned int i=0; i<SIZE; i++) // not me, so L-Value action: copy data |
||||
|
m_atData[i] = vec.m_atData[i]; |
||||
|
|
||||
|
return (*this); // also an R-value in e.g |
||||
|
// vec1 = vec2 = vec3; |
||||
|
// L-Value = R-Value/L-Value = R-Value |
||||
|
} |
||||
|
|
||||
|
Vec<T, SIZE> &operator = (const T atData[SIZE]) |
||||
|
{ |
||||
|
for (unsigned int i=0; i<SIZE; i++) // not me, so L-Value action: copy data |
||||
|
m_atData[i] = atData[i]; |
||||
|
|
||||
|
return (*this); // also an R-value in e.g. |
||||
|
// vec1 = vec2 + (vec2=atData); // parenthesis () needed to evaluate expression vec2=atData |
||||
|
// L-Val = R-Val + R-Val |
||||
|
// " = " + (L-Val = R-Val) |
||||
|
} |
||||
|
|
||||
|
// usage of operator: |
||||
|
// vec(i) = var; // 0 <= i <= SIZE-1 |
||||
|
// var = vec(i); |
||||
|
// vec1(i) = vec2(j); |
||||
|
T &operator () (unsigned i) |
||||
|
{ |
||||
|
if (i>=SIZE) |
||||
|
i = SIZE-1; // !!! operator clips index ... |
||||
|
return m_atData[i]; // ... so we can safely return a reference |
||||
|
} |
||||
|
|
||||
|
T operator () (unsigned i) const |
||||
|
{ |
||||
|
if (i>=SIZE) |
||||
|
i = SIZE-1; |
||||
|
return m_atData[i]; |
||||
|
} |
||||
|
|
||||
|
void operator += (const Vec<T, SIZE> &vec) |
||||
|
{ |
||||
|
for (int i=0; i<SIZE; i++) |
||||
|
m_atData[i] += vec.m_atData[i]; |
||||
|
} |
||||
|
|
||||
|
Vec<T, SIZE> operator + (const Vec<T, SIZE> &vec) |
||||
|
{ |
||||
|
Vec<T, SIZE> buf (m_atData); |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
buf.m_atData[i] += vec.m_atData[i]; |
||||
|
return buf; |
||||
|
} |
||||
|
|
||||
|
void operator -= (const Vec<T, SIZE> &vec) |
||||
|
{ |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
m_atData[i] -= vec.m_atData[i]; |
||||
|
} |
||||
|
|
||||
|
// binary - |
||||
|
// vec1 - vec2 i.e. (*this) - vec |
||||
|
Vec<T, SIZE> operator - (const Vec<T, SIZE> &vec) |
||||
|
{ |
||||
|
Vec<T, SIZE> buf (m_atData); |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
buf.m_atData[i] -= vec.m_atData[i]; |
||||
|
return buf; |
||||
|
} |
||||
|
|
||||
|
// unary - |
||||
|
// -vec i.e. -(*this) |
||||
|
Vec<T, SIZE> operator - () |
||||
|
{ |
||||
|
T atBuffer[SIZE]; |
||||
|
for (int i=0; i<SIZE; i++) |
||||
|
atBuffer[i] = -m_atData[i]; |
||||
|
return Vec<T, SIZE> (atBuffer); |
||||
|
} |
||||
|
|
||||
|
T operator * (const Vec<T, SIZE> & vec) |
||||
|
{ |
||||
|
T dp = T(0); |
||||
|
for (int i=0; i<SIZE; i++) |
||||
|
dp += m_atData[i]*vec.m_atData[i]; |
||||
|
return dp; |
||||
|
} |
||||
|
|
||||
|
void operator *= (T tScale) |
||||
|
{ |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
m_atData[i] *= tScale; |
||||
|
} |
||||
|
|
||||
|
Vec<T, SIZE> operator * (T tScale) |
||||
|
{ |
||||
|
T atBuffer[SIZE]; |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
atBuffer[i] = m_atData[i]*tScale; |
||||
|
return Vec<T, SIZE> (atBuffer); |
||||
|
} |
||||
|
|
||||
|
Vec<T, SIZE> operator * (const Mat<T, SIZE> &mat) |
||||
|
{ |
||||
|
Vec<T, SIZE> vec; |
||||
|
for (unsigned int j=0; j<SIZE; j++) |
||||
|
for (unsigned int i=0; i<SIZE; i++) |
||||
|
vec(j) += m_atData[i]*mat(i,j); |
||||
|
return vec; |
||||
|
} |
||||
|
|
||||
|
T norm () |
||||
|
{ |
||||
|
T retval = 0; |
||||
|
|
||||
|
// this * this |
||||
|
for (int i=0; i<SIZE; i++) |
||||
|
retval += m_atData[i] * m_atData[i]; |
||||
|
sqrt(retval); |
||||
|
return retval; |
||||
|
} |
||||
|
|
||||
|
Vec<T, SIZE> x(const Vec<T, SIZE> &vec) |
||||
|
{ |
||||
|
T temp[SIZE]; |
||||
|
temp[0] = m_atData[1]*vec(2) - m_atData[2]*vec(1); |
||||
|
temp[1] = m_atData[2]*vec(0) - m_atData[0]*vec(2); |
||||
|
temp[2] = m_atData[0]*vec(1) - m_atData[1]*vec(0); |
||||
|
temp[3] = vec(3); |
||||
|
return Vec<T, SIZE> (temp); |
||||
|
} |
||||
|
|
||||
|
private: |
||||
|
|
||||
|
T m_atData[SIZE]; |
||||
|
|
||||
|
}; // class Vec |
||||
|
|
||||
|
|
||||
|
// some common vector classes (abbr. names) |
||||
|
typedef Vec<float, 2> Vec2f; |
||||
|
typedef Vec<float, 3> Vec3f; |
||||
|
typedef Vec<float, 4> Vec4f; |
||||
|
|
||||
|
typedef Vec<double, 2> Vec2d; |
||||
|
typedef Vec<double, 3> Vec3d; |
||||
|
typedef Vec<double, 4> Vec4d; |
||||
|
|
||||
|
typedef Vec<int, 2> Vec2i; |
||||
|
typedef Vec<int, 3> Vec3i; |
||||
|
typedef Vec<int, 4> Vec4i; |
||||
|
|
||||
|
typedef Vec<bool, 2> Vec2b; |
||||
|
typedef Vec<bool, 3> Vec3b; |
||||
|
typedef Vec<bool, 4> Vec4b; |
||||
|
|
||||
|
|
||||
|
template <class T, unsigned SIZE> |
||||
|
static std::ostream& operator<< (std::ostream& output,const Vec<T,SIZE> &vec) |
||||
|
{ |
||||
|
output << "( "; |
||||
|
for(unsigned int i = 0 ; i< SIZE; ++i) |
||||
|
{ |
||||
|
output << vec(i); |
||||
|
if (i<SIZE-1) |
||||
|
output << " , "; |
||||
|
else |
||||
|
output << " )"; |
||||
|
} |
||||
|
return output; |
||||
|
} |
||||
|
|
||||
|
#endif |
Write
Preview
Loading…
Cancel
Save
Reference in new issue