alrobotmodel
2.1.1.16
|
00001 00005 #ifndef ALROBOTMODEL_H 00006 #define ALROBOTMODEL_H 00007 00008 #include <almath/types/altransform.h> 00009 #include <almath/types/alposition3d.h> 00010 #include <string> 00011 00012 #include <qi/macro.hpp> 00013 00014 #ifdef alrobotmodel_EXPORTS 00015 # define ALROBOTMODEL_API QI_EXPORT_API 00016 #elif defined(alrobotmodel_IMPORTS) 00017 # define ALROBOTMODEL_API QI_IMPORT_API 00018 #else 00019 # define ALROBOTMODEL_API 00020 #endif 00021 00022 namespace Sim 00023 { 00024 00025 class Actuator; 00026 class ActuatorGroup; 00027 class AngleActuator; 00028 class AngleSensor; 00029 class AngleSpeedActuator; 00030 class AngleSpeedSensor; 00031 class ArrayDepthSensor; 00032 class BumperSensor; 00033 class CameraSensor; 00034 class CameraDepthSensor; 00035 class CoupledActuator; 00036 class CoupledSensor; 00037 class FSRSensor; 00038 class InertialSensor; 00039 class SonarSensor; 00040 class TactileSensor; 00041 class LEDActuator; 00042 class MicrophoneSensor; 00043 class Joint; 00044 class JointGroup; 00045 class JointSymmetry; 00046 class Link; 00047 class Sensor; 00048 class SingleDepthSensor; 00049 class TorqueActuator; 00050 class TorqueSensor; 00051 class WheelTorqueActuator; 00052 class WheelVelocityActuator; 00053 class WheelVelocitySensor; 00054 00055 typedef SingleDepthSensor DepthInfraredSensor; 00056 00059 class ALROBOTMODEL_API Model 00060 { 00061 public: 00062 00067 Model(const std::string& pathToModel); 00069 ~Model(); 00070 00073 const std::string& name() const; 00074 00079 std::string prettyName(int verbosity = 0) const; 00080 00083 const std::string& configFile() const; 00084 00087 std::vector<const Joint*> joints() const; 00090 const Joint* joint(const std::string& jointName) const; 00091 00094 std::vector<const JointSymmetry*> jointSymmetries() const; 00097 const JointSymmetry* jointSymmetry(const std::string& jointName) const; 00098 00101 std::vector<const JointGroup*> jointGroups() const; 00104 const JointGroup* jointGroup(const std::string& jointGroupName) const; 00109 std::vector<const JointGroup*> 00110 jointGroupsOfJoint(const std::string& jointName) const; 00111 00114 std::vector<const Link*> links() const; 00117 const Link* link(const std::string& linkName) const; 00121 const Link* rootLink() const; 00122 00125 std::vector<const Actuator*> actuators() const; 00128 const Actuator* actuator(const std::string& actuatorName) const; 00129 00132 std::vector<const ActuatorGroup*> actuatorGroups() const; 00135 const ActuatorGroup* actuatorGroup( 00136 const std::string& actuatorGroupName) const; 00142 std::vector<const ActuatorGroup*> 00143 actuatorGroupsOfJoint(const std::string& jointName) const; 00144 00147 std::vector<const AngleActuator*> angleActuators() const; 00150 const AngleActuator* angleActuator(const std::string& actuatorName) const; 00151 00154 std::vector<const CoupledActuator*> coupledActuators() const; 00157 const CoupledActuator* coupledActuator( 00158 const std::string& actuatorName) const; 00159 00162 std::vector<const TorqueActuator*> torqueActuators() const; 00165 const TorqueActuator* torqueActuator( 00166 const std::string& actuatorName) const; 00167 00170 std::vector<const AngleSpeedActuator*> angleSpeedActuators() const; 00173 const AngleSpeedActuator* angleSpeedActuator( 00174 const std::string& actuatorName) const; 00175 00178 std::vector<const WheelTorqueActuator*> wheelTorqueActuators() const; 00181 const WheelTorqueActuator* wheelTorqueActuator( 00182 const std::string& actuatorName) const; 00183 00186 std::vector<const WheelVelocityActuator*> wheelVelocityActuators() const; 00189 const WheelVelocityActuator* wheelVelocityActuator( 00190 const std::string& actuatorName) const; 00191 00196 std::vector<const LEDActuator*> ledActuators( 00197 const std::string& groupName = std::string()) const; 00200 const LEDActuator* ledActuator(const std::string& actuatorName) const; 00201 00204 std::vector<const Sensor*> sensors() const; 00207 const Sensor* sensor(const std::string& sensorName) const; 00208 00211 std::vector<const AngleSensor*> angleSensors() const; 00214 const AngleSensor* angleSensor(const std::string& sensorName) const; 00215 00218 std::vector<const CoupledSensor*> coupledSensors() const; 00221 const CoupledSensor* coupledSensor(const std::string& sensorName) const; 00222 00225 std::vector<const TorqueSensor*> torqueSensors() const; 00228 const TorqueSensor* torqueSensor(const std::string& sensorName) const; 00229 00232 std::vector<const AngleSpeedSensor*> angleSpeedSensors() const; 00235 const AngleSpeedSensor* angleSpeedSensor( 00236 const std::string& sensorName) const; 00237 00240 std::vector<const WheelVelocitySensor*> wheelVelocitySensors() const; 00243 const WheelVelocitySensor* wheelVelocitySensor( 00244 const std::string& sensorName) const; 00245 00248 std::vector<const CameraSensor*> cameraSensors() const; 00251 const CameraSensor* cameraSensor(const std::string& sensorName) const; 00252 00255 std::vector<const CameraDepthSensor*> cameraDepthSensors() const; 00258 const CameraDepthSensor* cameraDepthSensor( 00259 const std::string& sensorName) const; 00260 00263 std::vector<const FSRSensor*> fsrSensors() const; 00266 const FSRSensor* fsrSensor(const std::string& sensorName) const; 00267 00270 std::vector<const InertialSensor*> inertialSensors() const; 00273 const InertialSensor* inertialSensor(const std::string& sensorName) const; 00274 00277 std::vector<const SonarSensor*> sonarSensors() const; 00280 const SonarSensor* sonarSensor(const std::string& sensorName) const; 00281 00284 std::vector<const BumperSensor*> bumperSensors() const; 00287 const BumperSensor* bumperSensor(const std::string& sensorName) const; 00288 00291 std::vector<const TactileSensor*> tactileSensors() const; 00294 const TactileSensor* tactileSensor(const std::string& sensorName) const; 00295 00298 std::vector<const SingleDepthSensor*> singleDepthSensors() const; 00301 const SingleDepthSensor* singleDepthSensor( 00302 const std::string& sensorName) const; 00303 00306 std::vector<const ArrayDepthSensor*> arrayDepthSensors() const; 00309 const ArrayDepthSensor* arrayDepthSensor( 00310 const std::string& sensorName) const; 00311 00315 std::vector<const DepthInfraredSensor*> depthInfraredSensors() const; 00319 const DepthInfraredSensor* depthInfraredSensor( 00320 const std::string& sensorName) const; 00321 00324 std::vector<const MicrophoneSensor*> microphoneSensors() const; 00327 const MicrophoneSensor* microphoneSensor( 00328 const std::string& sensorName) const; 00329 00331 class ModelImpl* a_impl; 00332 }; 00333 00336 class ALROBOTMODEL_API JointSymmetry 00337 { 00338 00339 public: 00340 00344 JointSymmetry(); 00345 00347 ~JointSymmetry(); 00348 00350 enum SymmetryType 00351 { 00352 MIRROR_SYM, 00353 MIRROR_ANTISYM, 00354 }; 00355 00357 std::pair<const Joint*, const Joint*> symmetricJoints() const; 00358 00360 const Joint* symmetricJoint(const Joint* joint) const; 00361 00363 SymmetryType symmetryType() const; 00364 00366 class JointSymmetryImpl* a_impl; 00367 00368 }; 00369 00373 class ALROBOTMODEL_API JointGroup 00374 { 00375 00376 public: 00377 00381 JointGroup(); 00382 00384 ~JointGroup(); 00385 00387 const std::string& name() const; 00388 00390 std::vector<const Joint*> joints() const; 00391 00393 class JointGroupImpl* a_impl; 00394 }; 00395 00398 class ALROBOTMODEL_API Frame 00399 { 00400 public: 00403 Frame(); 00405 ~Frame(); 00407 const std::string& name() const; 00412 const AL::Math::Transform& position() const; 00414 const Frame* parentFrame() const; 00418 const AL::Math::Transform& localPosition() const; 00423 static AL::Math::Transform globalPosition( 00424 const Frame* frame); 00426 class FrameImpl* a_impl; 00427 }; 00428 00431 class ALROBOTMODEL_API Joint 00432 { 00433 public: 00436 Joint(); 00438 ~Joint(); 00442 const Frame* frame() const; 00444 const std::string& name() const; 00449 const Link* parentLink() const; 00454 const Link* childLink() const; 00456 class JointImpl* a_impl; 00457 }; 00458 00462 ALROBOTMODEL_API bool frictionCoeff( 00463 const std::string& frictionMaterial1, 00464 const std::string& frictionMaterial2, 00465 float& frictionCoeff); 00466 00470 class ALROBOTMODEL_API MassData 00471 { 00472 public: 00476 MassData(); 00478 virtual ~MassData(); 00480 float mass() const; 00485 const AL::Math::Position3D& CoM() const; 00488 const std::vector<float>& inertiaMatrix() const; 00490 class MassDataImpl* a_impl; 00491 }; 00492 00496 class ALROBOTMODEL_API VisualData 00497 { 00498 public: 00502 VisualData(); 00504 virtual ~VisualData(); 00511 const std::string& meshPath() const; 00514 const AL::Math::Transform& meshTransform() const; 00516 class VisualDataImpl* a_impl; 00517 }; 00518 00521 class ALROBOTMODEL_API Link 00522 { 00523 public: 00526 enum LinkType 00527 { 00528 CLASSIC, 00529 WHEEL_OMNI, 00530 }; 00533 Link(); 00535 virtual ~Link(); 00541 const Frame* frame() const; 00543 const std::string& name() const; 00546 const Joint* parentJoint() const; 00549 const std::vector<const Joint*> childrenJoints() const; 00551 const MassData* mass() const; 00553 const std::string& frictionMaterial() const; 00555 const VisualData* visual() const; 00557 LinkType type() const; 00559 class LinkImpl* a_impl; 00560 }; 00561 00565 class ALROBOTMODEL_API Actuator 00566 { 00567 public: 00569 enum Type 00570 { 00571 ANGLE_MOTOR, 00572 COUPLED_MOTOR, 00573 TORQUE_MOTOR, 00574 ANGLE_SPEED_MOTOR, 00575 WHEEL_TORQUE, 00576 WHEEL_VELOCITY, 00578 LED, 00579 00580 }; 00582 Actuator(class ActuatorImpl* impl); 00584 Actuator(const Actuator& other); 00586 ~Actuator(); 00588 const Frame* frame() const; 00590 const virtual std::string& name() const; 00592 Type type() const; 00595 virtual int bufferSize() const = 0; 00597 ActuatorImpl* a_impl; 00598 }; 00599 00603 class ALROBOTMODEL_API ActuatorGroup 00604 { 00605 00606 public: 00607 00611 ActuatorGroup(); 00612 00614 ~ActuatorGroup(); 00615 00617 const std::string& name() const; 00618 00620 const ActuatorGroup * parent() const; 00621 00623 std::vector<const Actuator*> actuators() const; 00624 00626 class ActuatorGroupImpl* a_impl; 00627 00628 }; 00629 00633 class ALROBOTMODEL_API DCMActuator: public Actuator 00634 { 00635 public: 00637 DCMActuator(class DCMActuatorImpl* impl); 00639 DCMActuator(const DCMActuator& other); 00641 ~DCMActuator(); 00644 const std::vector<std::string>& dcmKeys() const; 00647 virtual int bufferSize() const = 0; 00648 }; 00649 00653 class ALROBOTMODEL_API AngleActuator: public DCMActuator 00654 { 00655 public: 00657 AngleActuator(class AngleActuatorImpl* impl); 00659 AngleActuator(const AngleActuator& other); 00661 ~AngleActuator(); 00664 const AngleActuator* reflectedSymmetric() const; 00667 bool reflectedSymmetricReversed() const; 00669 bool reflectionForced() const; 00672 virtual int bufferSize() const; 00674 float startValue() const; 00676 float minValue() const; 00678 float maxValue() const; 00681 float maxSpeed() const; 00683 const Joint* controlledJoint() const; 00684 }; 00685 00689 class ALROBOTMODEL_API CoupledActuator: public DCMActuator 00690 { 00691 public: 00693 CoupledActuator(class CoupledActuatorImpl* impl); 00695 CoupledActuator(const CoupledActuator& other); 00697 ~CoupledActuator(); 00700 const CoupledActuator* reflectedSymmetric() const; 00703 bool reflectedSymmetricReversed() const; 00705 bool reflectionForced() const; 00708 virtual int bufferSize() const; 00711 float startValue() const; 00714 float minValue() const; 00717 float maxValue() const; 00719 float maxSpeed() const; 00722 std::vector<std::pair<const Joint*, float> > 00723 controlledJointAndRatios() const; 00724 }; 00725 00729 class ALROBOTMODEL_API TorqueActuator: public DCMActuator 00730 { 00731 public: 00733 TorqueActuator(class TorqueActuatorImpl* impl); 00735 TorqueActuator(const TorqueActuator& other); 00737 ~TorqueActuator(); 00740 const TorqueActuator* reflectedSymmetric() const; 00743 bool reflectedSymmetricReversed() const; 00746 virtual int bufferSize() const; 00749 float startValue() const; 00752 float minValue() const; 00755 float maxValue() const; 00757 const Joint* controlledJoint() const; 00758 }; 00759 00763 class ALROBOTMODEL_API AngleSpeedActuator: public DCMActuator 00764 { 00765 public: 00767 AngleSpeedActuator(class AngleSpeedActuatorImpl* impl); 00769 AngleSpeedActuator(const AngleSpeedActuator& other); 00771 ~AngleSpeedActuator(); 00774 const AngleSpeedActuator* reflectedSymmetric() const; 00777 bool reflectedSymmetricReversed() const; 00780 virtual int bufferSize() const; 00783 float startValue() const; 00786 float minValue() const; 00789 float maxValue() const; 00791 const Joint* controlledJoint() const; 00792 }; 00793 00797 class ALROBOTMODEL_API WheelTorqueActuator: public DCMActuator 00798 { 00799 public: 00801 WheelTorqueActuator(class WheelTorqueActuatorImpl* impl); 00803 WheelTorqueActuator(const WheelTorqueActuator& other); 00805 ~WheelTorqueActuator(); 00806 virtual int bufferSize() const; 00808 // Newton per meter). 00809 float maxTorque() const; 00811 const Joint* controlledJoint() const; 00812 }; 00813 00817 class ALROBOTMODEL_API WheelVelocityActuator: public DCMActuator 00818 { 00819 public: 00821 WheelVelocityActuator(class WheelVelocityActuatorImpl* impl); 00823 WheelVelocityActuator(const WheelVelocityActuator& other); 00825 ~WheelVelocityActuator(); 00828 virtual int bufferSize() const; 00831 float maxVelocity() const; 00833 const Joint* controlledJoint() const; 00834 }; 00835 00838 class ALROBOTMODEL_API LEDActuator: public DCMActuator 00839 { 00840 public: 00842 enum Color 00843 { 00844 RED, 00845 GREEN, 00846 BLUE 00847 }; 00848 00849 public: 00851 LEDActuator(class LEDActuatorImpl* impl); 00853 LEDActuator(const LEDActuator& other); 00855 ~LEDActuator(); 00858 virtual int bufferSize() const; 00860 const std::string& shortname() const; 00862 const std::vector<std::string>& groups() const; 00864 Color color() const; 00865 }; 00866 00870 class ALROBOTMODEL_API Sensor 00871 { 00872 public: 00874 enum Type 00875 { 00876 ANGLE, 00877 COUPLED, 00878 SONAR, 00879 CAMERA, 00880 FSR, 00881 INERTIAL, 00882 BUMPER, 00883 TORQUE, 00884 ANGLE_SPEED, 00885 WHEEL_VELOCITY, 00886 TACTILE, 00887 DEPTH_INFRARED, // deprecated 00888 SINGLE_DEPTH, 00889 ARRAY_DEPTH, 00890 CAMERA_DEPTH, 00891 MICROPHONE, 00897 }; 00901 Sensor(); 00903 ~Sensor(); 00905 const Frame* frame() const; 00907 virtual const std::string& name() const; 00909 Type type() const; 00912 virtual int bufferSize() const = 0; 00914 class SensorImpl* a_impl; 00915 }; 00916 00920 class ALROBOTMODEL_API DCMSensor: public Sensor 00921 { 00922 public: 00926 DCMSensor(); 00928 ~DCMSensor(); 00931 const std::vector<std::string>& dcmKeys() const; 00934 std::vector<std::string> fullDcmKeys() const; 00937 const std::vector<std::string>& dcmStateKeys() const; 00941 const std::vector<std::string>& dcmCommandKeys() const; 00944 virtual int bufferSize() const = 0; 00945 }; 00946 00947 00951 class ALROBOTMODEL_API AngleSensor: public DCMSensor 00952 { 00953 public: 00957 AngleSensor(); 00959 ~AngleSensor(); 00962 virtual int bufferSize() const; 00963 }; 00964 00967 class ALROBOTMODEL_API CoupledSensor: public DCMSensor 00968 { 00969 public: 00973 CoupledSensor(); 00975 ~CoupledSensor(); 00978 virtual int bufferSize() const; 00979 }; 00980 00984 class ALROBOTMODEL_API TorqueSensor: public DCMSensor 00985 { 00986 public: 00990 TorqueSensor(); 00992 ~TorqueSensor(); 00995 virtual int bufferSize() const; 00996 }; 00997 01002 class ALROBOTMODEL_API AngleSpeedSensor: public DCMSensor 01003 { 01004 public: 01008 AngleSpeedSensor(); 01010 ~AngleSpeedSensor(); 01013 virtual int bufferSize() const; 01014 }; 01015 01020 class ALROBOTMODEL_API WheelVelocitySensor: public DCMSensor 01021 { 01022 public: 01026 WheelVelocitySensor(); 01028 ~WheelVelocitySensor(); 01031 virtual int bufferSize() const; 01032 }; 01033 01036 class ALROBOTMODEL_API BaseCamera: public Sensor 01037 { 01038 public: 01042 BaseCamera(); 01044 ~BaseCamera(); 01047 virtual int bufferSize() const = 0; 01048 }; 01049 01052 class ALROBOTMODEL_API CameraSensor: public BaseCamera 01053 { 01054 public: 01058 CameraSensor(); 01060 ~CameraSensor(); 01063 virtual int bufferSize() const; 01065 int width() const; 01067 int height() const; 01068 }; 01069 01072 class ALROBOTMODEL_API CameraDepthSensor: public BaseCamera 01073 { 01074 public: 01078 CameraDepthSensor(); 01080 ~CameraDepthSensor(); 01083 virtual int bufferSize() const; 01085 int width() const; 01087 int height() const; 01088 }; 01089 01092 class ALROBOTMODEL_API FSRSensor: public DCMSensor 01093 { 01094 public: 01098 FSRSensor(); 01100 ~FSRSensor(); 01103 virtual int bufferSize() const; 01104 }; 01105 01108 class ALROBOTMODEL_API InertialSensor: public DCMSensor 01109 { 01110 public: 01114 InertialSensor(); 01116 ~InertialSensor(); 01119 virtual int bufferSize() const; 01120 }; 01121 01124 class ALROBOTMODEL_API SonarSensor: public DCMSensor 01125 { 01126 public: 01130 SonarSensor(); 01132 ~SonarSensor(); 01135 virtual int bufferSize() const; 01136 }; 01137 01140 class ALROBOTMODEL_API BumperSensor: public DCMSensor 01141 { 01142 public: 01146 BumperSensor(); 01148 ~BumperSensor(); 01151 virtual int bufferSize() const; 01152 }; 01153 01156 class ALROBOTMODEL_API TactileSensor: public DCMSensor 01157 { 01158 public: 01162 TactileSensor(); 01164 ~TactileSensor(); 01167 virtual int bufferSize() const; 01168 }; 01169 01173 class ALROBOTMODEL_API SingleDepthSensor: public DCMSensor 01174 { 01175 public: 01179 SingleDepthSensor(); 01181 ~SingleDepthSensor(); 01184 virtual int bufferSize() const; 01185 }; 01186 01190 class ALROBOTMODEL_API ArrayDepthSensor: public DCMSensor 01191 { 01192 public: 01196 ArrayDepthSensor(); 01198 ~ArrayDepthSensor(); 01201 virtual int bufferSize() const; 01203 int width() const; 01205 int height() const; 01206 }; 01207 01210 class ALROBOTMODEL_API MicrophoneSensor: public Sensor 01211 { 01212 public: 01216 MicrophoneSensor(); 01218 ~MicrophoneSensor(); 01221 virtual int bufferSize() const; 01222 }; 01223 01224 } 01225 01226 #endif // ALROBOTMODEL_H