Atlas Sim Interface
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 { 00160 int32_t step_index; 00161 00168 int32_t foot_index; 00169 00173 float duration; 00174 00178 AtlasVec3f position; 00179 00183 float yaw; 00184 00185 00189 00190 // Foot ground normal. 00191 AtlasVec3f normal; 00192 00193 // Step apex swing height as measured from the midpoint between the feet. 00194 float swing_height; 00195 00199 AtlasBehaviorStepData() : 00200 step_index(-1), 00201 foot_index(0), 00202 duration(0.7f), 00203 position(0.0f, 0.0f, 0.0f), 00204 yaw(0.0f), 00205 normal(0.0f, 0.0f, 1.0f), 00206 swing_height(0.0f) 00207 {} 00208 00212 AtlasBehaviorStepData(int32_t _step_index, 00213 int32_t _foot_index, 00214 float _duration, 00215 AtlasVec3f _position, 00216 float _yaw, 00217 AtlasVec3f _normal, 00218 float _swing_height) 00219 : 00220 step_index(_step_index), 00221 foot_index(_foot_index), 00222 duration(_duration), 00223 position(_position), 00224 yaw(_yaw), 00225 normal(_normal), 00226 swing_height(_swing_height) 00227 {} 00228 }; 00229 00230 00237 struct AtlasBehaviorPelvisServoParams 00238 { 00242 float pelvis_height; 00243 00249 float pelvis_yaw; 00250 00257 float pelvis_lat; 00258 00259 AtlasBehaviorPelvisServoParams() : 00260 pelvis_height(0.8f), 00261 pelvis_yaw(0.0f), 00262 pelvis_lat(0.0f) 00263 {} 00264 }; 00265 00266 00273 struct AtlasBehaviorStandParams 00274 { 00275 int placeholder; 00276 00277 AtlasBehaviorStandParams() : 00278 placeholder(0) 00279 {} 00280 }; 00281 00282 00289 struct AtlasBehaviorStandFeedback 00290 { 00299 uint32_t status_flags; 00300 00301 AtlasBehaviorStandFeedback() : 00302 status_flags(0) 00303 {} 00304 }; 00305 00309 typedef enum 00310 { 00311 STAND_OKAY = 0, 00312 STAND_FLAG_PLACEHOLDER = 1 << 1 00313 00314 } AtlasBehaviorStandFlags; 00315 00316 00323 struct AtlasBehaviorStepParams 00324 { 00334 AtlasBehaviorStepData desired_step; 00335 00339 bool use_demo_walk; 00340 00341 AtlasBehaviorStepParams() : 00342 use_demo_walk(true) 00343 {} 00344 }; 00345 00346 00353 struct AtlasBehaviorStepFeedback 00354 { 00355 00359 float t_step_rem; 00360 00371 int32_t current_step_index; 00372 00383 int32_t next_step_index_needed; 00384 00409 uint32_t status_flags; 00410 00418 AtlasBehaviorStepData desired_step_saturated; 00419 00423 AtlasBehaviorStepFeedback() : 00424 t_step_rem(0.0f), 00425 current_step_index(0), 00426 next_step_index_needed(1), 00427 status_flags(0) 00428 {} 00429 }; 00430 00437 typedef enum 00438 { 00439 STEP_OKAY = 0, 00440 STEP_SUBSTATE_SWAYING = 1 << 0, 00441 STEP_SUBSTATE_STEPPING = 1 << 1 00442 00443 } AtlasBehaviorStepFlags; 00444 00445 00452 #define NUM_REQUIRED_WALK_STEPS 4 00453 00454 struct AtlasBehaviorWalkParams 00455 { 00465 AtlasBehaviorStepData step_queue[NUM_REQUIRED_WALK_STEPS]; 00466 00470 bool use_demo_walk; 00471 00472 AtlasBehaviorWalkParams() : 00473 use_demo_walk(true) 00474 {} 00475 }; 00476 00477 00484 struct AtlasBehaviorWalkFeedback 00485 { 00489 float t_step_rem; 00490 00500 int32_t current_step_index; 00501 00512 int32_t next_step_index_needed; 00513 00561 uint32_t status_flags; 00562 00570 AtlasBehaviorStepData step_queue_saturated[NUM_REQUIRED_WALK_STEPS]; 00571 00575 AtlasBehaviorWalkFeedback() : 00576 t_step_rem(0.0f), 00577 current_step_index(0), 00578 next_step_index_needed(1), 00579 status_flags(0) 00580 {} 00581 }; 00582 00589 typedef enum 00590 { 00591 WALK_OKAY = 0, 00592 WALK_SUBSTATE_SWAYING = 1 << 0, 00593 WALK_SUBSTATE_STEPPING = 1 << 1, 00594 WALK_SUBSTATE_CATCHING = 1 << 2, 00595 WALK_WARNING_INSUFFICIENT_STEP_DATA = 1 << 3, 00596 WALK_ERROR_INCONSISTENT_STEPS = 1 << 4 00597 00598 } AtlasBehaviorWalkFlags; 00599 00600 00607 struct AtlasBehaviorManipulateParams 00608 { 00612 bool use_desired; 00613 00617 AtlasBehaviorPelvisServoParams desired; 00618 00622 bool use_demo_mode; 00623 00627 AtlasBehaviorManipulateParams() : 00628 use_desired(true) 00629 {} 00630 }; 00631 00632 00639 struct AtlasBehaviorManipulateFeedback 00640 { 00649 uint32_t status_flags; 00650 00654 AtlasBehaviorPelvisServoParams clamped; 00655 00659 AtlasBehaviorManipulateFeedback() : 00660 status_flags(0) 00661 {} 00662 }; 00663 00667 typedef enum 00668 { 00669 MANIPULATE_OKAY = 0, 00670 MANIPULATE_FLAG_PLACEHOLDER = 1 << 1 00671 00672 } AtlasBehaviorManipulateFlags; 00673 00674 00681 struct AtlasBehaviorFeedback 00682 { 00738 uint32_t status_flags; 00739 00747 int trans_from_behavior_index; 00748 00756 int trans_to_behavior_index; 00757 00761 AtlasBehaviorFeedback() : 00762 status_flags(0l), 00763 trans_from_behavior_index(-1), 00764 trans_to_behavior_index(-1) 00765 {} 00766 }; 00767 00774 typedef enum 00775 { 00776 STATUS_OK = 0, 00777 00778 STATUS_TRANSITION_IN_PROGRESS = 1 << 0, 00779 STATUS_TRANSITION_SUCCESS = 1 << 1, 00780 STATUS_FAILED_TRANS_UNKNOWN_BEHAVIOR = 1 << 2, 00781 STATUS_FAILED_TRANS_ILLEGAL_BEHAVIOR = 1 << 3, 00782 STATUS_FAILED_TRANS_COM_POS = 1 << 4, 00783 STATUS_FAILED_TRANS_COM_VEL = 1 << 5, 00784 STATUS_FAILED_TRANS_VEL = 1 << 6, 00785 00786 STATUS_WARNING_AUTO_TRANS = 1 << 7, 00787 STATUS_ERROR_FALLING = 1 << 8 00788 00789 } AtlasBehaviorFlags; 00790 00791 00798 00799 00813 struct AtlasIMUData 00814 { 00818 uint64_t imu_timestamp; 00819 00823 AtlasQuaternion orientation_estimate; 00824 00828 AtlasVec3f angular_velocity; 00829 00833 AtlasVec3f linear_acceleration; 00834 00838 AtlasIMUData() : 00839 imu_timestamp(0l), 00840 angular_velocity(0.0f), 00841 linear_acceleration(0.0f) 00842 {} 00843 }; 00844 00845 00855 struct AtlasPositionData 00856 { 00860 AtlasVec3f position; 00861 00865 AtlasVec3f velocity; 00866 00870 AtlasPositionData() : 00871 position(0.0f), 00872 velocity(0.0f) 00873 {} 00874 }; 00875 00876 00886 struct AtlasFootSensor 00887 { 00891 float fz; 00892 00896 float mx; 00897 00901 float my; 00902 00906 AtlasFootSensor() {fz = mx = my = 0.0f;} 00907 }; 00908 00909 00916 enum 00917 { 00918 FS_LEFT = 0, 00919 FS_RIGHT, 00920 NUM_FOOT_SENSORS 00921 }; 00922 00923 00933 struct AtlasWristSensor 00934 { 00938 AtlasVec3f f; 00939 00943 AtlasVec3f m; 00944 00948 AtlasWristSensor() : 00949 f(0.0f), 00950 m(0.0f) 00951 {} 00952 }; 00953 00954 00961 enum 00962 { 00963 WS_LEFT = 0, 00964 WS_RIGHT, 00965 NUM_WRIST_SENSORS 00966 }; 00967 00968 00970 00971 #ifndef NOT_IN_DOXYGEN 00972 } // end namespace Atlas 00973 #endif 00974 00975 00976 #if __GNUC__ >= 4 00977 #pragma GCC visibility pop 00978 #endif 00979 00980 #endif // __AtlasCommonTypes_H 00981