Atlas Behavior Library
1.0
|
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