00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __INTERFACES_HUMANOIDMOTIONINTERFACE_H_
00025 #define __INTERFACES_HUMANOIDMOTIONINTERFACE_H_
00026
00027 #include <interface/interface.h>
00028 #include <interface/message.h>
00029 #include <interface/field_iterator.h>
00030
00031 namespace fawkes {
00032
00033 class HumanoidMotionInterface : public Interface
00034 {
00035
00036 INTERFACE_MGMT_FRIENDS(HumanoidMotionInterface)
00037
00038 public:
00039
00040
00041
00042 typedef enum {
00043 LEG_LEFT ,
00044 LEG_RIGHT
00045 } LegEnum;
00046
00047
00048 typedef enum {
00049 STANDUP_DETECT ,
00050 STANDUP_BACK ,
00051 STANDUP_FRONT
00052 } StandupEnum;
00053
00054
00055 typedef enum {
00056 WALK ,
00057 KICK
00058 } StiffnessMotionPatternEnum;
00059
00060 private:
00061
00062 typedef struct {
00063 unsigned int msgid;
00064
00065
00066
00067 float max_step_length;
00068
00069
00070 float max_step_height;
00071
00072
00073 float max_step_side;
00074
00075
00076 float max_step_turn;
00077
00078
00079 float zmp_offset_forward;
00080
00081
00082 float zmp_offset_sideward;
00083
00084
00085 float l_hip_roll_compensation;
00086
00087
00088
00089 float r_hip_roll_compensation;
00090
00091
00092
00093 float hip_height;
00094
00095
00096
00097 float torso_sideward_orientation;
00098
00099
00100
00101 float shoulder_pitch_median;
00102
00103
00104 float shoulder_pitch_amplitude;
00105
00106
00107 float elbow_roll_median;
00108
00109
00110 float elbow_roll_amplitude;
00111
00112
00113 bool moving;
00114 bool arms_enabled;
00115
00116
00117 LegEnum supporting_leg;
00118 } HumanoidMotionInterface_data_t;
00119
00120 HumanoidMotionInterface_data_t *data;
00121
00122 public:
00123
00124 class SetWalkParamsMessage : public Message
00125 {
00126 private:
00127
00128 typedef struct {
00129 float max_step_length;
00130
00131
00132 float max_step_height;
00133
00134
00135 float max_step_side;
00136
00137
00138 float max_step_turn;
00139
00140
00141 float zmp_offset_forward;
00142
00143
00144 float zmp_offset_sideward;
00145
00146
00147 float l_hip_roll_compensation;
00148
00149
00150
00151 float r_hip_roll_compensation;
00152
00153
00154
00155 float hip_height;
00156
00157
00158
00159 float torso_sideward_orientation;
00160
00161
00162
00163 } SetWalkParamsMessage_data_t;
00164
00165 SetWalkParamsMessage_data_t *data;
00166
00167 public:
00168 SetWalkParamsMessage(const float ini_max_step_length, const float ini_max_step_height, const float ini_max_step_side, const float ini_max_step_turn, const float ini_zmp_offset_forward, const float ini_zmp_offset_sideward, const float ini_l_hip_roll_compensation, const float ini_r_hip_roll_compensation, const float ini_hip_height, const float ini_torso_sideward_orientation);
00169 SetWalkParamsMessage();
00170 ~SetWalkParamsMessage();
00171
00172 SetWalkParamsMessage(const SetWalkParamsMessage *m);
00173
00174 float max_step_length() const;
00175 void set_max_step_length(const float new_max_step_length);
00176 size_t maxlenof_max_step_length() const;
00177 float max_step_height() const;
00178 void set_max_step_height(const float new_max_step_height);
00179 size_t maxlenof_max_step_height() const;
00180 float max_step_side() const;
00181 void set_max_step_side(const float new_max_step_side);
00182 size_t maxlenof_max_step_side() const;
00183 float max_step_turn() const;
00184 void set_max_step_turn(const float new_max_step_turn);
00185 size_t maxlenof_max_step_turn() const;
00186 float zmp_offset_forward() const;
00187 void set_zmp_offset_forward(const float new_zmp_offset_forward);
00188 size_t maxlenof_zmp_offset_forward() const;
00189 float zmp_offset_sideward() const;
00190 void set_zmp_offset_sideward(const float new_zmp_offset_sideward);
00191 size_t maxlenof_zmp_offset_sideward() const;
00192 float l_hip_roll_compensation() const;
00193 void set_l_hip_roll_compensation(const float new_l_hip_roll_compensation);
00194 size_t maxlenof_l_hip_roll_compensation() const;
00195 float r_hip_roll_compensation() const;
00196 void set_r_hip_roll_compensation(const float new_r_hip_roll_compensation);
00197 size_t maxlenof_r_hip_roll_compensation() const;
00198 float hip_height() const;
00199 void set_hip_height(const float new_hip_height);
00200 size_t maxlenof_hip_height() const;
00201 float torso_sideward_orientation() const;
00202 void set_torso_sideward_orientation(const float new_torso_sideward_orientation);
00203 size_t maxlenof_torso_sideward_orientation() const;
00204 virtual Message * clone() const;
00205 };
00206
00207 class SetWalkArmsParamsMessage : public Message
00208 {
00209 private:
00210
00211 typedef struct {
00212 float shoulder_pitch_median;
00213
00214
00215 float shoulder_pitch_amplitude;
00216
00217
00218 float elbow_roll_median;
00219
00220
00221 float elbow_roll_amplitude;
00222
00223
00224 bool arms_enabled;
00225
00226
00227 } SetWalkArmsParamsMessage_data_t;
00228
00229 SetWalkArmsParamsMessage_data_t *data;
00230
00231 public:
00232 SetWalkArmsParamsMessage(const bool ini_arms_enabled, const float ini_shoulder_pitch_median, const float ini_shoulder_pitch_amplitude, const float ini_elbow_roll_median, const float ini_elbow_roll_amplitude);
00233 SetWalkArmsParamsMessage();
00234 ~SetWalkArmsParamsMessage();
00235
00236 SetWalkArmsParamsMessage(const SetWalkArmsParamsMessage *m);
00237
00238 bool is_arms_enabled() const;
00239 void set_arms_enabled(const bool new_arms_enabled);
00240 size_t maxlenof_arms_enabled() const;
00241 float shoulder_pitch_median() const;
00242 void set_shoulder_pitch_median(const float new_shoulder_pitch_median);
00243 size_t maxlenof_shoulder_pitch_median() const;
00244 float shoulder_pitch_amplitude() const;
00245 void set_shoulder_pitch_amplitude(const float new_shoulder_pitch_amplitude);
00246 size_t maxlenof_shoulder_pitch_amplitude() const;
00247 float elbow_roll_median() const;
00248 void set_elbow_roll_median(const float new_elbow_roll_median);
00249 size_t maxlenof_elbow_roll_median() const;
00250 float elbow_roll_amplitude() const;
00251 void set_elbow_roll_amplitude(const float new_elbow_roll_amplitude);
00252 size_t maxlenof_elbow_roll_amplitude() const;
00253 virtual Message * clone() const;
00254 };
00255
00256 class StopMessage : public Message
00257 {
00258 public:
00259 StopMessage();
00260 ~StopMessage();
00261
00262 StopMessage(const StopMessage *m);
00263
00264 virtual Message * clone() const;
00265 };
00266
00267 class WalkStraightMessage : public Message
00268 {
00269 private:
00270
00271 typedef struct {
00272 unsigned int num_samples;
00273
00274
00275 float distance;
00276 } WalkStraightMessage_data_t;
00277
00278 WalkStraightMessage_data_t *data;
00279
00280 public:
00281 WalkStraightMessage(const float ini_distance, const unsigned int ini_num_samples);
00282 WalkStraightMessage();
00283 ~WalkStraightMessage();
00284
00285 WalkStraightMessage(const WalkStraightMessage *m);
00286
00287 float distance() const;
00288 void set_distance(const float new_distance);
00289 size_t maxlenof_distance() const;
00290 unsigned int num_samples() const;
00291 void set_num_samples(const unsigned int new_num_samples);
00292 size_t maxlenof_num_samples() const;
00293 virtual Message * clone() const;
00294 };
00295
00296 class WalkSidewaysMessage : public Message
00297 {
00298 private:
00299
00300 typedef struct {
00301 unsigned int num_samples;
00302
00303
00304 float distance;
00305 } WalkSidewaysMessage_data_t;
00306
00307 WalkSidewaysMessage_data_t *data;
00308
00309 public:
00310 WalkSidewaysMessage(const float ini_distance, const unsigned int ini_num_samples);
00311 WalkSidewaysMessage();
00312 ~WalkSidewaysMessage();
00313
00314 WalkSidewaysMessage(const WalkSidewaysMessage *m);
00315
00316 float distance() const;
00317 void set_distance(const float new_distance);
00318 size_t maxlenof_distance() const;
00319 unsigned int num_samples() const;
00320 void set_num_samples(const unsigned int new_num_samples);
00321 size_t maxlenof_num_samples() const;
00322 virtual Message * clone() const;
00323 };
00324
00325 class WalkArcMessage : public Message
00326 {
00327 private:
00328
00329 typedef struct {
00330 unsigned int num_samples;
00331
00332
00333 float angle;
00334 float radius;
00335 } WalkArcMessage_data_t;
00336
00337 WalkArcMessage_data_t *data;
00338
00339 public:
00340 WalkArcMessage(const float ini_angle, const float ini_radius, const unsigned int ini_num_samples);
00341 WalkArcMessage();
00342 ~WalkArcMessage();
00343
00344 WalkArcMessage(const WalkArcMessage *m);
00345
00346 float angle() const;
00347 void set_angle(const float new_angle);
00348 size_t maxlenof_angle() const;
00349 float radius() const;
00350 void set_radius(const float new_radius);
00351 size_t maxlenof_radius() const;
00352 unsigned int num_samples() const;
00353 void set_num_samples(const unsigned int new_num_samples);
00354 size_t maxlenof_num_samples() const;
00355 virtual Message * clone() const;
00356 };
00357
00358 class TurnMessage : public Message
00359 {
00360 private:
00361
00362 typedef struct {
00363 unsigned int num_samples;
00364
00365
00366 float angle;
00367 } TurnMessage_data_t;
00368
00369 TurnMessage_data_t *data;
00370
00371 public:
00372 TurnMessage(const float ini_angle, const unsigned int ini_num_samples);
00373 TurnMessage();
00374 ~TurnMessage();
00375
00376 TurnMessage(const TurnMessage *m);
00377
00378 float angle() const;
00379 void set_angle(const float new_angle);
00380 size_t maxlenof_angle() const;
00381 unsigned int num_samples() const;
00382 void set_num_samples(const unsigned int new_num_samples);
00383 size_t maxlenof_num_samples() const;
00384 virtual Message * clone() const;
00385 };
00386
00387 class KickMessage : public Message
00388 {
00389 private:
00390
00391 typedef struct {
00392 float strength;
00393 LegEnum leg;
00394 } KickMessage_data_t;
00395
00396 KickMessage_data_t *data;
00397
00398 public:
00399 KickMessage(const LegEnum ini_leg, const float ini_strength);
00400 KickMessage();
00401 ~KickMessage();
00402
00403 KickMessage(const KickMessage *m);
00404
00405 LegEnum leg() const;
00406 void set_leg(const LegEnum new_leg);
00407 size_t maxlenof_leg() const;
00408 float strength() const;
00409 void set_strength(const float new_strength);
00410 size_t maxlenof_strength() const;
00411 virtual Message * clone() const;
00412 };
00413
00414 class ParkMessage : public Message
00415 {
00416 private:
00417
00418 typedef struct {
00419 float time_sec;
00420 } ParkMessage_data_t;
00421
00422 ParkMessage_data_t *data;
00423
00424 public:
00425 ParkMessage(const float ini_time_sec);
00426 ParkMessage();
00427 ~ParkMessage();
00428
00429 ParkMessage(const ParkMessage *m);
00430
00431 float time_sec() const;
00432 void set_time_sec(const float new_time_sec);
00433 size_t maxlenof_time_sec() const;
00434 virtual Message * clone() const;
00435 };
00436
00437 class GetUpMessage : public Message
00438 {
00439 private:
00440
00441 typedef struct {
00442 float time_sec;
00443 } GetUpMessage_data_t;
00444
00445 GetUpMessage_data_t *data;
00446
00447 public:
00448 GetUpMessage(const float ini_time_sec);
00449 GetUpMessage();
00450 ~GetUpMessage();
00451
00452 GetUpMessage(const GetUpMessage *m);
00453
00454 float time_sec() const;
00455 void set_time_sec(const float new_time_sec);
00456 size_t maxlenof_time_sec() const;
00457 virtual Message * clone() const;
00458 };
00459
00460 class StandupMessage : public Message
00461 {
00462 private:
00463
00464 typedef struct {
00465 StandupEnum from_pos;
00466 } StandupMessage_data_t;
00467
00468 StandupMessage_data_t *data;
00469
00470 public:
00471 StandupMessage(const StandupEnum ini_from_pos);
00472 StandupMessage();
00473 ~StandupMessage();
00474
00475 StandupMessage(const StandupMessage *m);
00476
00477 StandupEnum from_pos() const;
00478 void set_from_pos(const StandupEnum new_from_pos);
00479 size_t maxlenof_from_pos() const;
00480 virtual Message * clone() const;
00481 };
00482
00483 class YawPitchHeadMessage : public Message
00484 {
00485 private:
00486
00487 typedef struct {
00488 float yaw;
00489 float pitch;
00490 float time_sec;
00491 } YawPitchHeadMessage_data_t;
00492
00493 YawPitchHeadMessage_data_t *data;
00494
00495 public:
00496 YawPitchHeadMessage(const float ini_yaw, const float ini_pitch, const float ini_time_sec);
00497 YawPitchHeadMessage();
00498 ~YawPitchHeadMessage();
00499
00500 YawPitchHeadMessage(const YawPitchHeadMessage *m);
00501
00502 float yaw() const;
00503 void set_yaw(const float new_yaw);
00504 size_t maxlenof_yaw() const;
00505 float pitch() const;
00506 void set_pitch(const float new_pitch);
00507 size_t maxlenof_pitch() const;
00508 float time_sec() const;
00509 void set_time_sec(const float new_time_sec);
00510 size_t maxlenof_time_sec() const;
00511 virtual Message * clone() const;
00512 };
00513
00514 class SetStiffnessParamsMessage : public Message
00515 {
00516 private:
00517
00518 typedef struct {
00519 float head_yaw;
00520 float head_pitch;
00521 float l_shoulder_pitch;
00522 float l_shoulder_roll;
00523 float l_elbow_yaw;
00524 float l_elbow_roll;
00525 float l_hip_yaw_pitch;
00526 float l_hip_roll;
00527 float l_hip_pitch;
00528 float l_knee_pitch;
00529 float l_ankle_pitch;
00530 float l_ankle_roll;
00531 float r_hip_yaw_pitch;
00532 float r_hip_roll;
00533 float r_hip_pitch;
00534 float r_knee_pitch;
00535 float r_ankle_pitch;
00536 float r_ankle_roll;
00537 float r_shoulder_pitch;
00538 float r_shoulder_roll;
00539 float r_elbow_yaw;
00540 float r_elbow_roll;
00541 StiffnessMotionPatternEnum motion_pattern;
00542 } SetStiffnessParamsMessage_data_t;
00543
00544 SetStiffnessParamsMessage_data_t *data;
00545
00546 public:
00547 SetStiffnessParamsMessage(const StiffnessMotionPatternEnum ini_motion_pattern, const float ini_head_yaw, const float ini_head_pitch, const float ini_l_shoulder_pitch, const float ini_l_shoulder_roll, const float ini_l_elbow_yaw, const float ini_l_elbow_roll, const float ini_l_hip_yaw_pitch, const float ini_l_hip_roll, const float ini_l_hip_pitch, const float ini_l_knee_pitch, const float ini_l_ankle_pitch, const float ini_l_ankle_roll, const float ini_r_hip_yaw_pitch, const float ini_r_hip_roll, const float ini_r_hip_pitch, const float ini_r_knee_pitch, const float ini_r_ankle_pitch, const float ini_r_ankle_roll, const float ini_r_shoulder_pitch, const float ini_r_shoulder_roll, const float ini_r_elbow_yaw, const float ini_r_elbow_roll);
00548 SetStiffnessParamsMessage();
00549 ~SetStiffnessParamsMessage();
00550
00551 SetStiffnessParamsMessage(const SetStiffnessParamsMessage *m);
00552
00553 StiffnessMotionPatternEnum motion_pattern() const;
00554 void set_motion_pattern(const StiffnessMotionPatternEnum new_motion_pattern);
00555 size_t maxlenof_motion_pattern() const;
00556 float head_yaw() const;
00557 void set_head_yaw(const float new_head_yaw);
00558 size_t maxlenof_head_yaw() const;
00559 float head_pitch() const;
00560 void set_head_pitch(const float new_head_pitch);
00561 size_t maxlenof_head_pitch() const;
00562 float l_shoulder_pitch() const;
00563 void set_l_shoulder_pitch(const float new_l_shoulder_pitch);
00564 size_t maxlenof_l_shoulder_pitch() const;
00565 float l_shoulder_roll() const;
00566 void set_l_shoulder_roll(const float new_l_shoulder_roll);
00567 size_t maxlenof_l_shoulder_roll() const;
00568 float l_elbow_yaw() const;
00569 void set_l_elbow_yaw(const float new_l_elbow_yaw);
00570 size_t maxlenof_l_elbow_yaw() const;
00571 float l_elbow_roll() const;
00572 void set_l_elbow_roll(const float new_l_elbow_roll);
00573 size_t maxlenof_l_elbow_roll() const;
00574 float l_hip_yaw_pitch() const;
00575 void set_l_hip_yaw_pitch(const float new_l_hip_yaw_pitch);
00576 size_t maxlenof_l_hip_yaw_pitch() const;
00577 float l_hip_roll() const;
00578 void set_l_hip_roll(const float new_l_hip_roll);
00579 size_t maxlenof_l_hip_roll() const;
00580 float l_hip_pitch() const;
00581 void set_l_hip_pitch(const float new_l_hip_pitch);
00582 size_t maxlenof_l_hip_pitch() const;
00583 float l_knee_pitch() const;
00584 void set_l_knee_pitch(const float new_l_knee_pitch);
00585 size_t maxlenof_l_knee_pitch() const;
00586 float l_ankle_pitch() const;
00587 void set_l_ankle_pitch(const float new_l_ankle_pitch);
00588 size_t maxlenof_l_ankle_pitch() const;
00589 float l_ankle_roll() const;
00590 void set_l_ankle_roll(const float new_l_ankle_roll);
00591 size_t maxlenof_l_ankle_roll() const;
00592 float r_hip_yaw_pitch() const;
00593 void set_r_hip_yaw_pitch(const float new_r_hip_yaw_pitch);
00594 size_t maxlenof_r_hip_yaw_pitch() const;
00595 float r_hip_roll() const;
00596 void set_r_hip_roll(const float new_r_hip_roll);
00597 size_t maxlenof_r_hip_roll() const;
00598 float r_hip_pitch() const;
00599 void set_r_hip_pitch(const float new_r_hip_pitch);
00600 size_t maxlenof_r_hip_pitch() const;
00601 float r_knee_pitch() const;
00602 void set_r_knee_pitch(const float new_r_knee_pitch);
00603 size_t maxlenof_r_knee_pitch() const;
00604 float r_ankle_pitch() const;
00605 void set_r_ankle_pitch(const float new_r_ankle_pitch);
00606 size_t maxlenof_r_ankle_pitch() const;
00607 float r_ankle_roll() const;
00608 void set_r_ankle_roll(const float new_r_ankle_roll);
00609 size_t maxlenof_r_ankle_roll() const;
00610 float r_shoulder_pitch() const;
00611 void set_r_shoulder_pitch(const float new_r_shoulder_pitch);
00612 size_t maxlenof_r_shoulder_pitch() const;
00613 float r_shoulder_roll() const;
00614 void set_r_shoulder_roll(const float new_r_shoulder_roll);
00615 size_t maxlenof_r_shoulder_roll() const;
00616 float r_elbow_yaw() const;
00617 void set_r_elbow_yaw(const float new_r_elbow_yaw);
00618 size_t maxlenof_r_elbow_yaw() const;
00619 float r_elbow_roll() const;
00620 void set_r_elbow_roll(const float new_r_elbow_roll);
00621 size_t maxlenof_r_elbow_roll() const;
00622 virtual Message * clone() const;
00623 };
00624
00625 virtual bool message_valid(const Message *message) const;
00626 private:
00627 HumanoidMotionInterface();
00628 ~HumanoidMotionInterface();
00629
00630 public:
00631
00632 bool is_moving() const;
00633 void set_moving(const bool new_moving);
00634 size_t maxlenof_moving() const;
00635 LegEnum supporting_leg() const;
00636 void set_supporting_leg(const LegEnum new_supporting_leg);
00637 size_t maxlenof_supporting_leg() const;
00638 float max_step_length() const;
00639 void set_max_step_length(const float new_max_step_length);
00640 size_t maxlenof_max_step_length() const;
00641 float max_step_height() const;
00642 void set_max_step_height(const float new_max_step_height);
00643 size_t maxlenof_max_step_height() const;
00644 float max_step_side() const;
00645 void set_max_step_side(const float new_max_step_side);
00646 size_t maxlenof_max_step_side() const;
00647 float max_step_turn() const;
00648 void set_max_step_turn(const float new_max_step_turn);
00649 size_t maxlenof_max_step_turn() const;
00650 float zmp_offset_forward() const;
00651 void set_zmp_offset_forward(const float new_zmp_offset_forward);
00652 size_t maxlenof_zmp_offset_forward() const;
00653 float zmp_offset_sideward() const;
00654 void set_zmp_offset_sideward(const float new_zmp_offset_sideward);
00655 size_t maxlenof_zmp_offset_sideward() const;
00656 float l_hip_roll_compensation() const;
00657 void set_l_hip_roll_compensation(const float new_l_hip_roll_compensation);
00658 size_t maxlenof_l_hip_roll_compensation() const;
00659 float r_hip_roll_compensation() const;
00660 void set_r_hip_roll_compensation(const float new_r_hip_roll_compensation);
00661 size_t maxlenof_r_hip_roll_compensation() const;
00662 float hip_height() const;
00663 void set_hip_height(const float new_hip_height);
00664 size_t maxlenof_hip_height() const;
00665 float torso_sideward_orientation() const;
00666 void set_torso_sideward_orientation(const float new_torso_sideward_orientation);
00667 size_t maxlenof_torso_sideward_orientation() const;
00668 bool is_arms_enabled() const;
00669 void set_arms_enabled(const bool new_arms_enabled);
00670 size_t maxlenof_arms_enabled() const;
00671 float shoulder_pitch_median() const;
00672 void set_shoulder_pitch_median(const float new_shoulder_pitch_median);
00673 size_t maxlenof_shoulder_pitch_median() const;
00674 float shoulder_pitch_amplitude() const;
00675 void set_shoulder_pitch_amplitude(const float new_shoulder_pitch_amplitude);
00676 size_t maxlenof_shoulder_pitch_amplitude() const;
00677 float elbow_roll_median() const;
00678 void set_elbow_roll_median(const float new_elbow_roll_median);
00679 size_t maxlenof_elbow_roll_median() const;
00680 float elbow_roll_amplitude() const;
00681 void set_elbow_roll_amplitude(const float new_elbow_roll_amplitude);
00682 size_t maxlenof_elbow_roll_amplitude() const;
00683 unsigned int msgid() const;
00684 void set_msgid(const unsigned int new_msgid);
00685 size_t maxlenof_msgid() const;
00686 virtual Message * create_message(const char *type) const;
00687
00688 virtual void copy_values(const Interface *other);
00689
00690 };
00691
00692 }
00693
00694 #endif