Skip to content

Commit b849c45

Browse files
author
Summer
authored
Merge pull request #197 from Rayy0527/track-target-switch
Fix track target switch.
2 parents 5507d70 + 19eafe3 commit b849c45

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

rm_gimbal_controllers/include/rm_gimbal_controllers/bullet_solver.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,11 @@ class BulletSolver
103103
double output_yaw_{}, output_pitch_{};
104104
double bullet_speed_{}, resistance_coff_{};
105105
double fly_time_;
106+
double switch_hysteresis_;
106107
int shoot_beforehand_cmd_{};
107108
int selected_armor_;
108109
int count_;
109-
bool track_target_;
110+
bool track_target_ = true;
110111
bool identified_target_change_ = true;
111112
bool is_in_delay_before_switch_{};
112113
bool dynamic_reconfig_initialized_{};

rm_gimbal_controllers/src/bullet_solver.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ BulletSolver::BulletSolver(ros::NodeHandle& controller_nh)
6565
.track_move_target_delay = getParam(controller_nh, "track_move_target_delay", 0.),
6666
.min_fit_switch_count = getParam(controller_nh, "min_fit_switch_count", 3) };
6767
max_track_target_vel_ = getParam(controller_nh, "max_track_target_vel", 5.0);
68+
switch_hysteresis_ = getParam(controller_nh, "switch_hysteresis", 1.0);
6869
config_rt_buffer_.initRT(config_);
6970

7071
marker_desire_.header.frame_id = "odom";
@@ -134,7 +135,16 @@ bool BulletSolver::solve(geometry_msgs::Point pos, geometry_msgs::Vector3 vel, d
134135
double z = pos.z;
135136
double max_switch_angle = config_.max_switch_angle / 180 * M_PI;
136137
double min_switch_angle = config_.min_switch_angle / 180 * M_PI;
137-
track_target_ = std::abs(v_yaw) < max_track_target_vel_;
138+
if (track_target_)
139+
{
140+
if (std::abs(v_yaw) >= max_track_target_vel_ + switch_hysteresis_)
141+
track_target_ = false;
142+
}
143+
else
144+
{
145+
if (std::abs(v_yaw) <= max_track_target_vel_ - switch_hysteresis_)
146+
track_target_ = true;
147+
}
138148
double switch_armor_angle =
139149
track_target_ ?
140150
(acos(r / target_rho) - max_switch_angle +

0 commit comments

Comments
 (0)