Revision f7954788
| cfg/humotion.cfg | ||
|---|---|---|
| 54 | 54 |
add_entry(eye_group, "scale_acceleration_eye", "scaling factor for eye acceleration (in percent, 1.0 = full human acceleration)", 0.1, 1.0) |
| 55 | 55 |
add_entry(eye_group, "limit_velocity_eye", "limit for eye velocity (in deg/s)", 100.0, 1000.0) |
| 56 | 56 |
add_entry(eye_group, "limit_acceleration_eye", "limit for eye acceleration (in deg/s^2)", 100.0, 80000.0) |
| 57 |
add_entry_bool(eye_group, "use_neck_target_instead_of_position_eye", "use neck target in difference calc instead of real position") |
|
| 58 |
|
|
| 57 | 59 |
|
| 58 | 60 |
eyeblink_group = gen.add_group("eyeblink")
|
| 59 | 61 |
add_entry(eyeblink_group, "eyeblink_duration", "duration for an eyeblink (in seconds)", 0.01, 1.0) |
| include/humotion/server/config.h | ||
|---|---|---|
| 59 | 59 |
float scale_acceleration_eye; |
| 60 | 60 |
float limit_velocity_eye; |
| 61 | 61 |
float limit_acceleration_eye; |
| 62 |
bool use_neck_target_instead_of_position_eye; |
|
| 62 | 63 |
|
| 63 | 64 |
// parameters fo the breathing pattern |
| 64 | 65 |
float breath_period; |
| src/server/config.cpp | ||
|---|---|---|
| 81 | 81 |
// limit the maximum acceleration, value is given in deg/s^2 |
| 82 | 82 |
limit_acceleration_eye = 80000; |
| 83 | 83 |
|
| 84 |
// calculate the overall target distance based on neck target instead of using the real neck |
|
| 85 |
// position |
|
| 86 |
use_neck_target_instead_of_position_eye = true; |
|
| 84 | 87 |
|
| 85 | 88 |
// parameters fo the breathing pattern |
| 86 | 89 |
// healthy adult human: 12-15 breaths/min (see e.g. "Ganong's review of medical physiology") |
| src/server/eye_motion_generator.cpp | ||
|---|---|---|
| 82 | 82 |
//! calculate joint targets |
| 83 | 83 |
void EyeMotionGenerator::calculate_targets() {
|
| 84 | 84 |
// use the target values for a faster response |
| 85 |
float neck_pan_now = joint_interface_->get_target_position(JointInterface::ID_NECK_PAN); |
|
| 86 |
float neck_tilt_now = joint_interface_->get_target_position(JointInterface::ID_NECK_TILT); |
|
| 85 |
float neck_pan_now = 0.0; |
|
| 86 |
float neck_tilt_now = 0.0; |
|
| 87 |
|
|
| 88 |
if (use_neck_target_instead_of_position_eye) {
|
|
| 89 |
// position calc based on target |
|
| 90 |
neck_pan_now = joint_interface_->get_target_position(JointInterface::ID_NECK_PAN); |
|
| 91 |
neck_tilt_now = joint_interface_->get_target_position(JointInterface::ID_NECK_TILT); |
|
| 92 |
} else {
|
|
| 93 |
// position calc based on real position |
|
| 94 |
neck_pan_now = |
|
| 95 |
joint_interface_->get_ts_position(JointInterface::ID_NECK_PAN).get_newest_value(); |
|
| 96 |
neck_tilt_now = |
|
| 97 |
joint_interface_->get_ts_position(JointInterface::ID_NECK_TILT).get_newest_value(); |
|
| 98 |
} |
|
| 87 | 99 |
|
| 88 | 100 |
// calculate target angles for the eyes |
| 89 | 101 |
// right eye is dominant -> direct output |
| ... | ... | |
| 99 | 111 |
// tilt |
| 100 | 112 |
float eye_tilt_target = requested_gaze_state_.tilt - (neck_tilt_now); |
| 101 | 113 |
|
| 102 |
if (0) {
|
|
| 103 |
eye_pan_r_target = 0.0; |
|
| 104 |
eye_pan_l_target = 0.0; |
|
| 105 |
eye_tilt_target = 0.0; |
|
| 106 |
} |
|
| 107 |
|
|
| 108 | 114 |
// check and take care of limits |
| 109 | 115 |
eye_pan_l_target = limit_target(JointInterface::ID_EYES_LEFT_LR, eye_pan_l_target); |
| 110 | 116 |
eye_pan_r_target = limit_target(JointInterface::ID_EYES_RIGHT_LR, eye_pan_r_target); |
Also available in: Unified diff