Atlas Behavior Library  1.0
AtlasSimInterfaceTypes.h
Go to the documentation of this file.
00001 
00002 #ifndef __AtlasSimInterfaceTypes_H
00003 #define __AtlasSimInterfaceTypes_H
00004 
00005 #include "AtlasSimVectorTypes.h"
00006 
00007 #if BDI_OS_TYPE_win32
00008 
00009 typedef unsigned __int64 uint64_t;
00010 
00011 #else
00012 
00013 #include <stdint.h>
00014 #include <sys/types.h>
00015 
00016 #endif
00017 
00018 #if __GNUC__ >= 4
00019 #pragma GCC visibility push(default)
00020 #endif
00021 
00022 //#ifndef NOT_IN_DOXYGEN
00023 //namespace Atlas {
00024 //#endif
00025 
00026 #define ATLAS_SIM_SOFTWARE_VERSION_STRING "1.0.3"
00027 #define ATLAS_SIM_SOFTWARE_VERSION_MAJOR 1
00028 #define ATLAS_SIM_SOFTWARE_VERSION_MINOR 0
00029 #define ATLAS_SIM_SOFTWARE_VERSION_POINT 3
00030 
00031 
00037 
00038 
00045 namespace Atlas {
00046 
00047 typedef enum
00048 {
00049     LINK_UNKNOWN      = -1,
00050     LINK_PELVIS       = 0,
00051     LINK_LTORSO       = 1,
00052     LINK_MTORSO       = 2,
00053     LINK_UTORSO       = 3,
00054     LINK_HEAD         = 4,
00055     LINK_L_UGLUT      = 5, 
00056     LINK_L_LGLUT      = 6, 
00057     LINK_L_ULEG       = 7, 
00058     LINK_L_LLEG       = 8,
00059     LINK_L_TALUS      = 9, 
00060     LINK_L_FOOT       = 10,
00061     LINK_R_UGLUT      = 11, 
00062     LINK_R_LGLUT      = 12, 
00063     LINK_R_ULEG       = 13, 
00064     LINK_R_LLEG       = 14,
00065     LINK_R_TALUS      = 15, 
00066     LINK_R_FOOT       = 16,
00067     LINK_L_CLAV       = 17,
00068     LINK_L_SCAP       = 18,
00069     LINK_L_UARM       = 19,
00070     LINK_L_LARM       = 20,
00071     LINK_L_FARM       = 21,
00072     LINK_L_HAND       = 22,
00073     LINK_R_CLAV       = 23,
00074     LINK_R_SCAP       = 24,
00075     LINK_R_UARM       = 25,
00076     LINK_R_LARM       = 26,
00077     LINK_R_FARM       = 27,
00078     LINK_R_HAND       = 28,
00079     NUM_LINKS
00080 
00081 } AtlasLinkId;
00082 
00083 }
00084 
00091 namespace Atlas {
00092 
00093 typedef enum
00094 {
00095     JOINT_UNKNOWN     = -1,
00096     JOINT_BACK_LBZ    = 0,
00097     JOINT_BACK_MBY    = 1,
00098     JOINT_BACK_UBX    = 2,
00099     JOINT_NECK_AY     = 3,
00100     JOINT_L_LEG_UHZ   = 4,
00101     JOINT_L_LEG_MHX   = 5,
00102     JOINT_L_LEG_LHY   = 6,
00103     JOINT_L_LEG_KNY   = 7,
00104     JOINT_L_LEG_UAY   = 8,
00105     JOINT_L_LEG_LAX   = 9,
00106     JOINT_R_LEG_UHZ   = 10,
00107     JOINT_R_LEG_MHX   = 11,
00108     JOINT_R_LEG_LHY   = 12,
00109     JOINT_R_LEG_KNY   = 13,
00110     JOINT_R_LEG_UAY   = 14,
00111     JOINT_R_LEG_LAX   = 15,
00112     JOINT_L_ARM_USY   = 16,
00113     JOINT_L_ARM_SHX   = 17,
00114     JOINT_L_ARM_ELY   = 18,
00115     JOINT_L_ARM_ELX   = 19,
00116     JOINT_L_ARM_UWY   = 20,
00117     JOINT_L_ARM_MWX   = 21,
00118     JOINT_R_ARM_USY   = 22,
00119     JOINT_R_ARM_SHX   = 23,
00120     JOINT_R_ARM_ELY   = 24,
00121     JOINT_R_ARM_ELX   = 25,
00122     JOINT_R_ARM_UWY   = 26,
00123     JOINT_R_ARM_MWX   = 27,
00124     NUM_JOINTS
00125 
00126 } AtlasJointId;
00127 
00128 }
00129 
00130 
00137 
00138 
00145 struct AtlasJointDesired
00146 {
00147     float q_d;            
00148     float qd_d;           
00149     float f_d;            
00150 
00152     AtlasJointDesired() {q_d = qd_d = f_d = 0.0f;}
00153 };
00154 
00155 
00173 struct AtlasJointControlParams
00174 {
00175     float k_q_p;      
00176     float k_q_i;      
00177     float k_qd_p;     
00178 
00180     AtlasJointControlParams()
00181     {
00182         k_q_p = k_q_i = k_qd_p = 0.0f;
00183     }
00184 };
00185 
00186 
00193 struct AtlasControlDataToRobot
00194 {
00195     uint64_t timestamp;
00196 
00197     AtlasJointDesired       j[Atlas::NUM_JOINTS];
00198     AtlasJointControlParams jparams[Atlas::NUM_JOINTS];
00199 
00201     AtlasControlDataToRobot() {timestamp = 0l;}
00202 };
00203 
00204 
00205 
00206 
00213 
00214 
00221 struct AtlasJointState
00222 {
00223     float q;       
00224     float qd;      
00225     float f;       
00226 
00228     AtlasJointState() {q = qd = f = 0.0f;}
00229 };
00230 
00231 
00248 struct AtlasIMUData
00249 {
00250     uint64_t imu_timestamp;  
00251 
00252     AtlasQuaternion orientation_estimate; 
00253     AtlasVec3f      angular_velocity;     
00254     AtlasVec3f      linear_acceleration;  
00255 
00257     AtlasIMUData() :
00258         imu_timestamp(0l),
00259         angular_velocity(0.0f),
00260         linear_acceleration(0.0f)
00261     {}
00262 };
00263 
00264 
00274 struct AtlasFootSensor
00275 {
00276     float fz;     
00277     float mx;     
00278     float my;     
00279 
00281     AtlasFootSensor() {fz = mx = my = 0.0f;}
00282 };
00283 
00284 
00291 namespace Atlas {
00292 
00293 enum
00294 {
00295     FS_LEFT  = 0,
00296     FS_RIGHT,
00297     NUM_FOOT_SENSORS
00298 };
00299 
00300 }
00301 
00311 struct AtlasWristSensor
00312 {
00313     AtlasVec3f f;               
00314     AtlasVec3f m;               
00315 
00317     AtlasWristSensor() :
00318         f(0.0f),
00319         m(0.0f)
00320     {}
00321 };
00322 
00323 
00330 namespace Atlas {
00331 
00332 enum
00333 {
00334     WS_LEFT = 0,
00335     WS_RIGHT,
00336     NUM_WRIST_SENSORS
00337 };
00338 
00339 }
00340 
00347 struct AtlasControlDataFromRobot
00348 {
00349     uint64_t seq_id;        
00350     
00351     double t;               
00352 
00353     AtlasJointState j[Atlas::NUM_JOINTS];
00354 
00355     AtlasIMUData     imu;                                     
00356     AtlasFootSensor  foot_sensors[Atlas::NUM_FOOT_SENSORS];   
00357     AtlasWristSensor wrist_sensors[Atlas::NUM_WRIST_SENSORS]; 
00358 
00359     AtlasVec3f pelvis_position;
00360     AtlasVec3f pelvis_velocity;
00361 
00362     AtlasControlDataFromRobot() :
00363         seq_id(0l),
00364         t(0.0),
00365         pelvis_position(0.0f),
00366         pelvis_velocity(0.0f)
00367     {}
00368 };
00369 
00370 
00377 namespace Atlas {
00378 
00379 typedef enum
00380 {
00381     BEHAVIOR_PARAM_DESIRED_YAW_RATE = 0,   
00382     BEHAVIOR_PARAM_DESIRED_VELOCITY,       
00383     NUM_BEHAVIOR_PARAMS
00384 
00385 } AtlasBehaviorParameterId;
00386 
00387 }
00388 
00395 namespace Atlas {
00396 
00397 typedef enum
00398 {
00399     NO_ERROR                         =  0,   
00400     ERROR_UNSPECIFIED                = -1,   
00401     ERROR_VALUE_OUT_OF_RANGE         = -2,   
00402     ERROR_INVALID_INDEX              = -3,   
00403     ERROR_FAILED_TO_START_BEHAVIOR   = -4,   
00404     ERROR_NO_ACTIVE_BEHAVIOR         = -5,   
00405     ERROR_NO_SUCH_BEHAVIOR           = -6,   
00406     ERROR_BEHAVIOR_NOT_IMPLEMENTED   = -7,   
00407     ERROR_TIME_RAN_BACKWARD          = -8,   
00408     ERROR_INVALID_PARAMETER          = -9,   
00409     NUM_ERRORS
00410 
00411 } AtlasErrorCode;
00412 
00413 }
00414 
00415 //#ifndef NOT_IN_DOXYGEN
00416 //} // end namespace Atlas
00417 //#endif
00418 
00419 #if __GNUC__ >= 4
00420 #pragma GCC visibility pop
00421 #endif
00422 
00423 #endif // __AtlasSimInterfaceTypes_H
00424