alrobotmodel  2.1.0.18
/home/opennao/work/master/simulation/alrobotmodel/libalrobotmodel/alrobotmodel/alrobotmodel.h
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
 All Classes Functions Variables Enumerations Enumerator