Atlas Behavior Library  1.0
AtlasControlTypes.h
Go to the documentation of this file.
00001 
00002 #ifndef __AtlasCommonTypes_H
00003 #define __AtlasCommonTypes_H
00004 
00005 #include "AtlasVectorTypes.h"
00006 
00007 #if BDI_OS_TYPE_win32
00008 
00009 //typedef unsigned __int64 uint64_t;
00010 #include "bdiRTTypes.h"
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 
00023 #ifndef NOT_IN_DOXYGEN
00024 namespace Atlas {
00025 #endif
00026 
00032 
00033 
00040 typedef enum
00041 {
00042     LINK_UNKNOWN      = -1,
00043     LINK_PELVIS       = 0,
00044     LINK_LTORSO       = 1,
00045     LINK_MTORSO       = 2,
00046     LINK_UTORSO       = 3,
00047     LINK_HEAD         = 4,
00048     LINK_L_UGLUT      = 5, 
00049     LINK_L_LGLUT      = 6, 
00050     LINK_L_ULEG       = 7, 
00051     LINK_L_LLEG       = 8,
00052     LINK_L_TALUS      = 9, 
00053     LINK_L_FOOT       = 10,
00054     LINK_R_UGLUT      = 11, 
00055     LINK_R_LGLUT      = 12, 
00056     LINK_R_ULEG       = 13, 
00057     LINK_R_LLEG       = 14,
00058     LINK_R_TALUS      = 15, 
00059     LINK_R_FOOT       = 16,
00060     LINK_L_CLAV       = 17,
00061     LINK_L_SCAP       = 18,
00062     LINK_L_UARM       = 19,
00063     LINK_L_LARM       = 20,
00064     LINK_L_FARM       = 21,
00065     LINK_L_HAND       = 22,
00066     LINK_R_CLAV       = 23,
00067     LINK_R_SCAP       = 24,
00068     LINK_R_UARM       = 25,
00069     LINK_R_LARM       = 26,
00070     LINK_R_FARM       = 27,
00071     LINK_R_HAND       = 28,
00072     NUM_LINKS
00073 
00074 } AtlasLinkId;
00075 
00076 
00083 typedef enum
00084 {
00085     JOINT_UNKNOWN     = -1,
00086     JOINT_BACK_LBZ    = 0,
00087     JOINT_BACK_MBY    = 1,
00088     JOINT_BACK_UBX    = 2,
00089     JOINT_NECK_AY     = 3,
00090     JOINT_L_LEG_UHZ   = 4,
00091     JOINT_L_LEG_MHX   = 5,
00092     JOINT_L_LEG_LHY   = 6,
00093     JOINT_L_LEG_KNY   = 7,
00094     JOINT_L_LEG_UAY   = 8,
00095     JOINT_L_LEG_LAX   = 9,
00096     JOINT_R_LEG_UHZ   = 10,
00097     JOINT_R_LEG_MHX   = 11,
00098     JOINT_R_LEG_LHY   = 12,
00099     JOINT_R_LEG_KNY   = 13,
00100     JOINT_R_LEG_UAY   = 14,
00101     JOINT_R_LEG_LAX   = 15,
00102     JOINT_L_ARM_USY   = 16,
00103     JOINT_L_ARM_SHX   = 17,
00104     JOINT_L_ARM_ELY   = 18,
00105     JOINT_L_ARM_ELX   = 19,
00106     JOINT_L_ARM_UWY   = 20,
00107     JOINT_L_ARM_MWX   = 21,
00108     JOINT_R_ARM_USY   = 22,
00109     JOINT_R_ARM_SHX   = 23,
00110     JOINT_R_ARM_ELY   = 24,
00111     JOINT_R_ARM_ELX   = 25,
00112     JOINT_R_ARM_UWY   = 26,
00113     JOINT_R_ARM_MWX   = 27,
00114     NUM_JOINTS
00115 
00116 } AtlasJointId;
00117 
00118 
00125 typedef enum
00126 {
00127     FOOT_LEFT         = 0,
00128     FOOT_RIGHT        = 1,
00129     NUM_FEET
00130 
00131 } AtlasFootId;
00132 
00133 
00140 
00141 
00148 struct AtlasBehaviorStepData
00149 {
00157     int32_t step_index;
00158 
00162     int32_t foot_index;
00163 
00167     float duration;
00168 
00172     AtlasVec3f position;
00173 
00177     float yaw;
00178     
00179 
00183 
00184     AtlasVec3f normal;      
00185     float swing_height;     
00186 
00190     AtlasBehaviorStepData() :
00191         step_index(0l),
00192         foot_index(0),
00193         duration(0.7f),
00194         position(0.0f, 0.0f, 0.0f),
00195         yaw(0.0f),
00196         normal(0.0f, 0.0f, 1.0f),
00197         swing_height(0.0f)
00198     {}
00199 
00203     AtlasBehaviorStepData(int32_t _step_index,
00204         int32_t    _foot_index,
00205         float      _duration,
00206         AtlasVec3f _position,
00207         float      _yaw,
00208         AtlasVec3f _normal,
00209         float      _swing_height)
00210         :
00211         step_index(_step_index),
00212         foot_index(_foot_index),
00213         duration(_duration),
00214         position(_position),
00215         yaw(_yaw),
00216         normal(_normal),
00217         swing_height(_swing_height)
00218     {}
00219 };
00220 
00221 
00228 struct AtlasBehaviorPelvisServoParams
00229 {
00233     float pelvis_height;
00234 
00240     float pelvis_yaw;
00241 
00248     float pelvis_lat;
00249 
00250     AtlasBehaviorPelvisServoParams() :
00251         pelvis_height(0.8f),
00252         pelvis_yaw(0.0f),
00253         pelvis_lat(0.0f)
00254     {}
00255 };
00256 
00257 
00264 struct AtlasBehaviorStandParams
00265 {
00266     int placeholder;
00267 
00268     AtlasBehaviorStandParams() :
00269         placeholder(0)
00270         {}
00271 };
00272 
00273 
00280 struct AtlasBehaviorStandFeedback
00281 {
00290     uint32_t status_flags;
00291 
00292     AtlasBehaviorStandFeedback() :
00293         status_flags(0)
00294     {}
00295 };
00296 
00300 typedef enum
00301 {
00302     STAND_OKAY                  = 0,
00303     STAND_FLAG_PLACEHOLDER      = 1 << 1
00304 
00305 } AtlasBehaviorStandFlags;
00306 
00307 
00314 struct AtlasBehaviorStepParams
00315 {
00319     AtlasBehaviorStepData desired_step;
00320 
00324     bool use_demo_walk;
00325 
00326     AtlasBehaviorStepParams() :
00327         use_demo_walk(true)
00328     {}
00329 };
00330 
00331 
00338 struct AtlasBehaviorStepFeedback
00339 {
00348     uint32_t status_flags;
00349 
00350     AtlasBehaviorStepFeedback() :
00351         status_flags(0)
00352     {}
00353 };
00354 
00358 typedef enum
00359 {
00360     STEP_OKAY                  = 0,
00361     STEP_FLAG_PLACEHOLDER      = 1 << 1
00362 
00363 } AtlasBehaviorStepFlags;
00364 
00365 
00372 #define NUM_REQUIRED_WALK_STEPS 4
00373 
00374 struct AtlasBehaviorWalkParams
00375 {
00379     AtlasBehaviorStepData step_data[NUM_REQUIRED_WALK_STEPS];
00380 
00384     bool use_demo_walk;
00385 
00386     AtlasBehaviorWalkParams() :
00387         use_demo_walk(true)
00388     {}
00389 };
00390 
00391 
00398 struct AtlasBehaviorWalkFeedback
00399 {
00403     float t_step_rem;
00404 
00414     int32_t current_step_index;
00415 
00423     int32_t next_step_index_needed;
00424 
00468     uint32_t status_flags;
00469 
00477     AtlasBehaviorStepData step_data_saturated[NUM_REQUIRED_WALK_STEPS];
00478 
00482     AtlasBehaviorWalkFeedback() :
00483         t_step_rem(0.0f),
00484         current_step_index(0),
00485         next_step_index_needed(1),
00486         status_flags(0)
00487     {}
00488 };
00489 
00496 typedef enum
00497 {
00498     WALK_OKAY                            = 0,
00499     WALK_SUBSTATE_SWAYING                = 1 << 0,
00500     WALK_SUBSTATE_STEPPING               = 1 << 1,
00501     WALK_SUBSTATE_CATCHING               = 1 << 2,
00502     WALK_WARNING_INSUFFICIENT_STEP_DATA  = 1 << 3,
00503     WALK_ERROR_INCONSISTENT_STEPS        = 1 << 4
00504 
00505 } AtlasBehaviorWalkFlags;
00506 
00507 
00514 struct AtlasBehaviorManipulateParams
00515 {
00519     bool use_desired;
00520 
00524     AtlasBehaviorPelvisServoParams desired;
00525 
00529     bool use_demo_mode;
00530 
00534     AtlasBehaviorManipulateParams() :
00535         use_desired(true)
00536         {}
00537 };
00538 
00539 
00546 struct AtlasBehaviorManipulateFeedback
00547 {
00556     uint32_t status_flags;
00557 
00561     AtlasBehaviorPelvisServoParams clamped;
00562 
00566     AtlasBehaviorManipulateFeedback() :
00567         status_flags(0)
00568     {}
00569 };
00570 
00574 typedef enum
00575 {
00576     MANIPULATE_OKAY                  = 0,
00577     MANIPULATE_FLAG_PLACEHOLDER      = 1 << 1
00578 
00579 } AtlasBehaviorManipulateFlags;
00580 
00581 
00588 struct AtlasBehaviorFeedback
00589 {
00645     uint32_t status_flags;
00646 
00654     int trans_from_behavior_index;
00655 
00663     int trans_to_behavior_index;
00664     
00668     AtlasBehaviorStandFeedback stand_feedback;
00669 
00673     AtlasBehaviorStepFeedback step_feedback;
00674 
00678     AtlasBehaviorWalkFeedback walk_feedback;
00679 
00683     AtlasBehaviorManipulateFeedback manipulate_feedback;
00684 
00688     AtlasBehaviorFeedback() :
00689         status_flags(0l)
00690     {}
00691 };
00692 
00699 typedef enum
00700 {
00701     STATUS_OK = 0,       
00702 
00703     STATUS_TRANSITION_IN_PROGRESS        = 1 << 0,
00704     STATUS_TRANSITION_SUCCESS            = 1 << 1,
00705     STATUS_FAILED_TRANS_UNKNOWN_BEHAVIOR = 1 << 2,
00706     STATUS_FAILED_TRANS_ILLEGAL_BEHAVIOR = 1 << 3,
00707     STATUS_FAILED_TRANS_COM_POS          = 1 << 4,
00708     STATUS_FAILED_TRANS_COM_VEL          = 1 << 5,
00709     STATUS_FAILED_TRANS_VEL              = 1 << 6,
00710 
00711     STATUS_WARNING_AUTO_TRANS            = 1 << 7,
00712     STATUS_ERROR_FALLING                 = 1 << 8
00713 
00714 } AtlasBehaviorFlags;
00715 
00716 
00723 
00724 
00738 struct AtlasIMUData
00739 {
00743     uint64_t imu_timestamp;
00744 
00748     AtlasQuaternion orientation_estimate;
00749 
00753     AtlasVec3f angular_velocity;
00754 
00758     AtlasVec3f linear_acceleration;
00759 
00763     AtlasIMUData() :
00764         imu_timestamp(0l),
00765         angular_velocity(0.0f),
00766         linear_acceleration(0.0f)
00767     {}
00768 };
00769 
00770 
00780 struct AtlasPositionData
00781 {
00785     AtlasVec3f      position;
00786 
00790     AtlasVec3f      velocity;
00791 
00795     AtlasPositionData() :
00796         position(0.0f),
00797         velocity(0.0f)
00798     {}
00799 };
00800 
00801 
00811 struct AtlasFootSensor
00812 {
00816     float fz;
00817 
00821     float mx;
00822 
00826     float my;
00827 
00831     AtlasFootSensor() {fz = mx = my = 0.0f;}
00832 };
00833 
00834 
00841 enum
00842 {
00843     FS_LEFT  = 0,
00844     FS_RIGHT,
00845     NUM_FOOT_SENSORS
00846 };
00847 
00848 
00858 struct AtlasWristSensor
00859 {
00863     AtlasVec3f f;
00864 
00868     AtlasVec3f m;
00869 
00873     AtlasWristSensor() :
00874         f(0.0f),
00875         m(0.0f)
00876     {}
00877 };
00878 
00879 
00886 enum
00887 {
00888     WS_LEFT = 0,
00889     WS_RIGHT,
00890     NUM_WRIST_SENSORS
00891 };
00892 
00893 
00895 
00896 #ifndef NOT_IN_DOXYGEN
00897 } // end namespace Atlas
00898 #endif
00899 
00900 
00901 #if __GNUC__ >= 4
00902 #pragma GCC visibility pop
00903 #endif
00904 
00905 #endif // __AtlasCommonTypes_H
00906