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