Skip to content

Commit 76a22aa

Browse files
authored
Merge pull request #31 from ichiro-its/feature/change-pan-target-when-using-90-deg-kick
[Feature] Change the pan target when using 90 deg kick
2 parents d0f7177 + 2bbb53d commit 76a22aa

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

include/suiryoku/locomotion/process/locomotion.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class Locomotion
7171
const keisan::Angle<double> & max_pan, const keisan::Angle<double> & min_tilt,
7272
const keisan::Angle<double> & max_tilt);
7373
bool position_kick_general(const keisan::Angle<double> & direction);
74-
bool position_kick_range_pan_tilt(const keisan::Angle<double> & direction, bool precise_kick, bool left_kick);
74+
bool position_kick_range_pan_tilt(const keisan::Angle<double> & direction, bool precise_kick, bool left_kick, bool is_positioning_center);
7575

7676
bool is_time_to_follow();
7777
bool pivot_fulfilled();
@@ -151,7 +151,8 @@ class Locomotion
151151
keisan::Angle<double> position_min_range_tilt;
152152
keisan::Angle<double> position_max_range_tilt;
153153
keisan::Angle<double> position_min_range_pan;
154-
keisan::Angle<double> position_center_range_pan;
154+
keisan::Angle<double> position_center_right_range_pan;
155+
keisan::Angle<double> position_center_left_range_pan;
155156
keisan::Angle<double> position_max_range_pan;
156157

157158
double skew_max_x;

src/suiryoku/locomotion/process/locomotion.cpp

+13-6
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,8 @@ void Locomotion::set_config(const nlohmann::json & json)
205205
double position_max_range_tilt_double;
206206
double position_min_range_pan_double;
207207
double position_max_range_pan_double;
208-
double position_center_range_pan_double;
208+
double position_center_right_range_pan_double;
209+
double position_center_left_range_pan_double;
209210

210211
valid_section &= jitsuyo::assign_val(position_section, "min_x", position_min_x);
211212
valid_section &= jitsuyo::assign_val(position_section, "max_x", position_max_x);
@@ -222,7 +223,8 @@ void Locomotion::set_config(const nlohmann::json & json)
222223
valid_section &= jitsuyo::assign_val(position_section, "max_range_tilt", position_max_range_tilt_double);
223224
valid_section &= jitsuyo::assign_val(position_section, "min_range_pan", position_min_range_pan_double);
224225
valid_section &= jitsuyo::assign_val(position_section, "max_range_pan", position_max_range_pan_double);
225-
valid_section &= jitsuyo::assign_val(position_section, "center_range_pan", position_center_range_pan_double);
226+
valid_section &= jitsuyo::assign_val(position_section, "center_right_range_pan", position_center_right_range_pan_double);
227+
valid_section &= jitsuyo::assign_val(position_section, "center_left_range_pan", position_center_left_range_pan_double);
226228

227229
position_min_delta_tilt = keisan::make_degree(position_min_delta_tilt_double);
228230
position_min_delta_pan = keisan::make_degree(position_min_delta_pan_double);
@@ -232,7 +234,8 @@ void Locomotion::set_config(const nlohmann::json & json)
232234
position_max_range_tilt = keisan::make_degree(position_max_range_tilt_double);
233235
position_min_range_pan = keisan::make_degree(position_min_range_pan_double);
234236
position_max_range_pan = keisan::make_degree(position_max_range_pan_double);
235-
position_center_range_pan = keisan::make_degree(position_center_range_pan_double);
237+
position_center_right_range_pan = keisan::make_degree(position_center_right_range_pan_double);
238+
position_center_left_range_pan = keisan::make_degree(position_center_left_range_pan_double);
236239

237240
if (!valid_section) {
238241
std::cout << "Error found at section `position`" << std::endl;
@@ -887,15 +890,15 @@ bool Locomotion::position_kick_custom_pan_tilt(const keisan::Angle<double> & dir
887890
return false;
888891
}
889892

890-
bool Locomotion::position_kick_range_pan_tilt(const keisan::Angle<double> & direction, bool precise_kick, bool left_kick)
893+
bool Locomotion::position_kick_range_pan_tilt(const keisan::Angle<double> & direction, bool precise_kick, bool left_kick, bool is_positioning_center)
891894
{
892895
auto tilt = robot->get_tilt();
893896
auto pan = robot->get_pan();
894897
auto delta_direction = (direction - robot->orientation).normalize().degree();
895898

896899
bool tilt_in_range = tilt > position_min_range_tilt && tilt < position_max_range_tilt;
897-
bool right_kick_in_range = pan > position_min_range_pan && pan < -position_center_range_pan;
898-
bool left_kick_in_range = pan > position_center_range_pan && pan < position_max_range_pan;
900+
bool right_kick_in_range = pan > position_min_range_pan && pan < -position_center_right_range_pan;
901+
bool left_kick_in_range = pan > position_center_left_range_pan && pan < position_max_range_pan;
899902
bool pan_in_range = precise_kick ? (left_kick ? left_kick_in_range : right_kick_in_range) : (right_kick_in_range || left_kick_in_range);
900903
bool direction_in_range = std::fabs(delta_direction) < position_min_delta_direction.degree();
901904

@@ -907,6 +910,10 @@ bool Locomotion::position_kick_range_pan_tilt(const keisan::Angle<double> & dire
907910
if (!precise_kick) left_kick = pan > 0.0_deg;
908911
auto target_pan = left_kick ? left_kick_target_pan : right_kick_target_pan;
909912

913+
if (is_positioning_center) {
914+
target_pan = (left_kick) ? position_center_left_range_pan : -position_center_right_range_pan;
915+
}
916+
910917
double delta_pan = (target_pan - pan).degree();
911918
double y_speed = 0.0;
912919

0 commit comments

Comments
 (0)