Atlas Sim Interface  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 {
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