00001 #ifndef SIGEL_SIMULATION_SIG_DYNAMECHSLINK_H 00002 #define SIGEL_SIMULATION_SIG_DYNAMECHSLINK_H 00003 00004 #include "SIGEL_Robot/SIG_Link.h" 00005 00006 #include <dm.h> 00007 #include <dmRigidBody.hpp> 00008 #include <dmZScrewTxLink.hpp> 00009 00010 #include <qlist.h> 00011 00012 namespace SIGEL_Simulation 00013 { 00014 00015 class SIG_DynaMechsLink 00016 { 00017 00018 public: 00019 00020 SIG_DynaMechsLink( int dynaMechsLinkNumber, 00021 SIGEL_Robot::SIG_Link const *link, 00022 dmRigidBody *dynaMechsLink, 00023 double screwD, 00024 double screwTheta ); 00025 00026 int const dynaMechsLinkNumber; 00027 00028 SIGEL_Robot::SIG_Link const * const link; 00029 00030 double const screwD; 00031 00032 double const screwTheta; 00033 00034 dmZScrewTxLink *screwLink; 00035 00036 dmRigidBody * const dynaMechsLink; 00037 00038 NEWMAT::Matrix transformation; 00039 00040 QList< SIG_DynaMechsLink > successors; 00041 00042 void forwardKinematics( SIG_DynaMechsLink *caller ); 00043 00044 NEWMAT::Matrix buildXRotationMatrix( double angle ); 00045 00046 NEWMAT::Matrix buildZRotationMatrix( double angle ); 00047 00048 NEWMAT::Matrix buildTranslationMatrix( double x, 00049 double y, 00050 double z ); 00051 }; 00052 00053 } 00054 00055 #endif // SIGEL_SIMULATION_SIG_DYNAMECHSLINK_H