diff --git a/include/atama/head/process/head.hpp b/include/atama/head/process/head.hpp index ab56a6f..dd8650a 100755 --- a/include/atama/head/process/head.hpp +++ b/include/atama/head/process/head.hpp @@ -130,6 +130,7 @@ class Head void look_to_position_regression(double goal_position_x, double goal_position_y); void look_to_position(double goal_position_x, double goal_position_y); + void look_to_distance(double goal_distance_x, double goal_distance_y); void load_config(const std::string & file_name); diff --git a/src/atama/head/process/head.cpp b/src/atama/head/process/head.cpp index 5a26453..f94e6d4 100755 --- a/src/atama/head/process/head.cpp +++ b/src/atama/head/process/head.cpp @@ -424,8 +424,8 @@ void Head::process() case control::SCAN_TRIANGLE: { if (init_scanning()) { - scan_pan_angle = 0.0; - scan_tilt_angle = scan_bottom_limit; + scan_pan_angle = get_pan_angle(); + scan_tilt_angle = get_tilt_angle(); scan_position = 1; scan_direction = 1; @@ -581,6 +581,20 @@ void Head::look_to_position(double goal_position_x, double goal_position_y) } } +void Head::look_to_distance(double goal_distance_x, double goal_distance_y) +{ + double distance = std::hypot(goal_distance_x, goal_distance_y); + + if (distance > 0) { + function_id = control::LOOK_TO_POSITION; + + double pan = keisan::signed_arctan(goal_distance_y, goal_distance_x).normalize().degree(); + double tilt = calculate_tilt_from_camera_height(distance); + + move_by_angle(pan - pan_center, tilt); + } +} + void Head::set_pan_tilt_angle(double pan, double tilt) { current_pan_angle = pan;