00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00070
00071 #define ManipulatorData_h
00072
00073 #include "FileData/XMLData.h"
00074 #include "FileData/XMLDHData.h"
00075 #include "Math/Xform.h"
00076 #include "FileData/LimitsData.h"
00077 #include "FileData/SpecificationsData.h"
00078 #include "ObstacleAvoidance/Node.hpp"
00079
00080 XERCES_CPP_NAMESPACE_USE
00081
00082
00083 namespace OSCAR {
00084
00092 class ManipulatorData : public XMLData
00093 {
00094 public:
00095
00259 ManipulatorData(const String& inputFileName, OSCARError &err = DUMMY_ERROR(noError), const String& rootElementName = String("Manipulator"), const String name = String(" "));
00260
00280 ManipulatorData(const char* xmlDataString, OSCARError &err = DUMMY_ERROR(noError), const String& rootElementName = String("Manipulator"), const String name = String(" "));
00281
00298 ManipulatorData(const DOMElement* manipulatorNode, OSCARError &err = DUMMY_ERROR(noError), const String& rootElementName = String("Manipulator"), const String name = String(" "));
00299
00300
00308 ManipulatorData(const ManipulatorData& rhs);
00309
00315 virtual ~ManipulatorData();
00316
00324 ManipulatorData& operator=(const ManipulatorData& rhs);
00325
00335 const XMLDHData* GetDHParameters() const;
00336
00346 void SetDHParameters(const XMLDHData& dhParameters);
00347
00357 const LimitsData* GetLimits() const;
00358
00368 void SetLimits(const LimitsData& limits);
00369
00370
00379 const Xform* GetBasePose() const;
00380
00390 void SetBasePose(const Xform& basePose);
00391
00400 const Xform* GetToolPlatePose() const;
00401
00411 void SetToolPlatePose(const Xform& toolPlatePose);
00412
00419 void SetFramesOfInterest(const std::vector<Xform>& framesOfInterest);
00420
00427 const std::vector<Xform>* GetFramesOfInterest() const;
00428
00429
00435 void SetSpecifications(const SpecificationsData& specs);
00436
00442 const SpecificationsData* GetSpecifications() const;
00443
00444
00450 class Configuration
00451 {
00452 public:
00453 Configuration() : jointValue(0)
00454 {}
00455
00456 Configuration& operator=(const Configuration& rhs)
00457 {
00458 if(this != &rhs){
00459 if(jointValue){
00460 delete jointValue;
00461 jointValue = 0;
00462 }
00463 if(rhs.jointValue)
00464 jointValue = new Vector(*rhs.jointValue);
00465 configName = rhs.configName;
00466 }
00467 return *this;
00468 }
00469 Configuration(const Configuration& rhs) : jointValue(0)
00470 {
00471 if(rhs.jointValue)
00472 jointValue = new Vector(*rhs.jointValue);
00473 configName = rhs.configName;
00474 }
00475
00476 ~Configuration()
00477 {
00478 if(jointValue)
00479 delete jointValue;
00480 }
00481 Vector* jointValue;
00482 String configName;
00483 };
00484
00491 void SetConfigurationsOfInterest(const std::vector<Configuration>& configurationsOfInterest, AngleUnits angUnits = Degrees);
00492
00499 const std::vector<Configuration>* GetConfigurationsOfInterest() const;
00500 AngleUnits GetConfigurationsOfInterestAngleUnits() const;
00501 void SetConfigurationsOfInterestAngleUnits(AngleUnits angUnits);
00502
00508 const Node* GetObstacleModel() const;
00509
00516 void SetObstacleModel(const Node& obstacleModel);
00517
00518
00530 bool Output(std::ostream& out, bool nameSpaceHeader = false) const;
00531
00532 protected:
00533 Xform basePose;
00534 Xform toolPlatePose;
00535 XMLDHData *dhParameters;
00536 LimitsData *limitsData;
00537 Node* obstacleModel;
00538 std::vector< Xform > framesOfInterest;
00539 std::vector< Configuration > configurationsOfInterest;
00540 AngleUnits configurationOfInterestAngleUnits;
00541 SpecificationsData* specs;
00542
00548 virtual bool parseParameters(const DOMElement* manipulatorNode);
00549 void clearConfigurationsOfInterest();
00550
00551 };
00552
00553 }
00554 #endif // ManipulatorData_h