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 #ifndef __MUSCLEDARM_H
00027 #define __MUSCLEDARM_H
00028
00029 #include "oderobot.h"
00030 #include <selforg/configurable.h>
00031 #include "primitive.h"
00032 #include "joint.h"
00033
00034 namespace lpzrobots{
00035
00036
00037
00038 #define SIDE (0.2)
00039 #define MASS (1.0)
00040 #define includeMusclesGraphics false
00041
00042
00043
00044
00045 enum parts {base, upperArm, lowerArm,
00046 mainMuscle11,
00047 mainMuscle12,
00048 mainMuscle21,
00049 mainMuscle22,
00050 smallMuscle11,
00051 smallMuscle12,
00052 smallMuscle21,
00053 smallMuscle22,
00054 smallMuscle31,
00055 smallMuscle32,
00056 smallMuscle41,
00057 smallMuscle42,
00058 hand,
00059 NUMParts};
00060
00061 enum joints {HJ_BuA,
00062 HJ_uAlA,
00063
00064 HJ_BmM11,
00065 HJ_lAmM12,
00066 HJ_BmM21,
00067 HJ_lAmM22,
00068
00069 HJ_BsM11,
00070 HJ_uAsM12,
00071 HJ_BsM21,
00072 HJ_uAsM22,
00073 HJ_lAsM31,
00074 HJ_uAsM32,
00075 HJ_lAsM41,
00076 HJ_uAsM42,
00077
00078 SJ_mM1,
00079 SJ_mM2,
00080
00081 SJ_sM1,
00082 SJ_sM2,
00083 SJ_sM3,
00084 SJ_sM4,
00085
00086 FJ_lAH,
00087 NUMJoints};
00088
00089
00090
00091 typedef struct {
00092 bool jointAngleSensors;
00093 bool jointAngleRateSensors;
00094 bool muscleLengthSensors;
00095 bool jointActuator;
00096
00097
00098 } MuscledArmConf;
00099
00100 class MuscledArm : public OdeRobot{
00101 public:
00102
00103 double force_[6];
00104
00105 MuscledArm(const OdeHandle& odeHandle, const OsgHandle& osgHandle, const MuscledArmConf& conf,
00106 const std::string& name);
00107
00108 static MuscledArmConf getDefaultConf(){
00109 MuscledArmConf conf;
00110 conf.jointAngleSensors=false;
00111 conf.jointAngleRateSensors=true;
00112 conf.muscleLengthSensors=false;
00113 conf.jointActuator=false;
00114 return conf;
00115 }
00116
00117 virtual ~MuscledArm(){};
00118
00119
00120
00121 virtual void update();
00122
00123
00124
00125
00126
00127 virtual void place(const osg::Matrix& pose);
00128
00129
00130
00131
00132
00133
00134
00135 virtual int getSensors(sensor* sensors, int sensornumber);
00136
00137
00138
00139
00140
00141 virtual void setMotors(const motor* motors, int motornumber);
00142
00143
00144
00145 virtual int getSensorNumber(){
00146 return sensorno;
00147 };
00148
00149
00150
00151 virtual int getMotorNumber(){
00152 return motorno;
00153 };
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 virtual int getSegmentsPosition(std::vector<Position> &poslist);
00165
00166
00167
00168
00169
00170 virtual void doInternalStuff(GlobalData& globalData);
00171
00172
00173 virtual Primitive* getMainObject() const;
00174
00175 protected:
00176
00177
00178 virtual Primitive* getMainPrimitive() const { return object[hand]; }
00179
00180
00181
00182
00183 virtual void create(const osg::Matrix& pose);
00184
00185
00186
00187 virtual void destroy();
00188
00189 static void mycallback(void *data, dGeomID o1, dGeomID o2);
00190
00191 double dBodyGetPositionAll ( dBodyID basis , int para );
00192 double dGeomGetPositionAll ( dGeomID basis , int para );
00193
00194 void BodyCreate(int n, dMass m, dReal x, dReal y, dReal z,
00195 dReal qx, dReal qy, dReal qz, dReal qangle);
00196
00197 MuscledArmConf conf;
00198
00199 static const int armanzahl= 3;
00200
00201
00202 Primitive* object[NUMParts];
00203 Joint* joint[NUMJoints];
00204
00205 Position old_dist[NUMParts];
00206
00207 paramval factorMotors;
00208 paramval factorSensors;
00209 paramval damping;
00210 paramval print;
00211
00212 int segmentsno;
00213
00214
00215
00216 double gelenkabstand;
00217 double SOCKEL_LAENGE;
00218 double SOCKEL_BREITE;
00219 double SOCKEL_HOEHE;
00220 double SOCKEL_MASSE;
00221
00222 int sensorno;
00223 int motorno;
00224
00225 bool created;
00226
00227
00228
00229 dSpaceID parentspace;
00230
00231 int printed;
00232
00233 double max_l;
00234 double max_r, min_l, min_r;
00235
00236 double base_width;
00237 double base_length;
00238 double upperArm_width;
00239 double upperArm_length;
00240 double lowerArm_width;
00241 double lowerArm_length;
00242 double joint_offset;
00243 double mainMuscle_width;
00244 double mainMuscle_length;
00245 double smallMuscle_width;
00246 double smallMuscle_length;
00247
00248 };
00249
00250 }
00251 #endif