Revision 89374d69 src/server/controller.cpp

View differences:

src/server/controller.cpp
86 86
    }
87 87
}
88 88

  
89
GazeState Controller::relative_gaze_to_absolute_gaze(GazeState relative){
90
    GazeState absolute_gaze = relative;
91

  
92
    //incoming gaze state wants to set a relative gaze angle
93
    //in order to calc the new absolute gaze, we need to go back
94
    //in time and find out where the head was pointing at that specific time:
95
    double relative_target_timestamp = relative.timestamp;
96

  
97
    //fetch head / camera pose during that timestamp:
98
    double neck_pan  = joint_interface->get_ts_position(JointInterface::ID_NECK_PAN).get_interpolated_value(relative_target_timestamp);
99
    double eye_l_pan = joint_interface->get_ts_position(JointInterface::ID_EYES_LEFT_LR).get_interpolated_value(relative_target_timestamp);
100
    double eye_r_pan = joint_interface->get_ts_position(JointInterface::ID_EYES_RIGHT_LR).get_interpolated_value(relative_target_timestamp);
101
    double pan       = neck_pan + (eye_l_pan + eye_r_pan)/2.0;
102
    //
103
    double neck_tilt = joint_interface->get_ts_position(JointInterface::ID_NECK_TILT).get_interpolated_value(relative_target_timestamp);
104
    double eye_tilt  = joint_interface->get_ts_position(JointInterface::ID_EYES_BOTH_UD).get_interpolated_value(relative_target_timestamp);
105
    double tilt      = neck_tilt + eye_tilt;
106
    //
107
    double roll      = joint_interface->get_ts_position(JointInterface::ID_NECK_ROLL).get_interpolated_value(relative_target_timestamp);
108

  
109
    //build up absolute target:
110
    absolute_gaze.type  = GazeState::ABSOLUTE;
111
    absolute_gaze.pan   = pan + relative.pan;
112
    absolute_gaze.tilt  = tilt + relative.tilt;
113
    absolute_gaze.roll  = roll + relative.roll;
114

  
115
    //FIXME: use ros TF for that calculation...
116
    //see http://wiki.ros.org/tf/Tutorials/Time%20travel%20with%20tf%20%28C%2B%2B%29
117
    //ros::Time past = now - ros::Duration(5.0);
118
    //listener.waitForTransform("/turtle2", now,J "/turtle1", past, "/world", ros::Duration(1.0));
119
    //listener.lookupTransform("/turtle2", now, "/turtle1", past, "/world", transform);
120

  
121
    return absolute_gaze;
122
}
123

  
124

  
89 125

  
90 126
//! update gaze target:
91 127
//! \param GazeState with target values for the overall gaze
92 128
void Controller::set_gaze_target(GazeState new_gaze_target){
129
    GazeState target_gaze;
130

  
131
    //relative or absolute gaze update?
132
    if (new_gaze_target.type == GazeState::RELATIVE){
133
        //relative gaze target -> calculate target angles
134
        target_gaze = relative_gaze_to_absolute_gaze(new_gaze_target);
135
    }else{
136
        //already absolute gaze, set this
137
        target_gaze = new_gaze_target;
138
    }
139

  
140

  
93 141
    for(motion_generator_vector_t::iterator it = motion_generator_vector.begin(); it<motion_generator_vector.end(); it++){
94
        (*it)->set_gaze_target(new_gaze_target);
142
        (*it)->set_gaze_target(target_gaze);
95 143
    }
96 144
}
97 145

  

Also available in: Unified diff