File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -166,6 +166,7 @@ namespace Modelec
166166 rclcpp::Publisher<std_msgs::msg::Bool>::SharedPtr start_odo_pub_;
167167
168168 modelec_interfaces::msg::OdometryPos last_enemy_pos_;
169+ bool has_enemy_ = false ;
169170
170171 bool await_rotate_ = false ;
171172 std::vector<Waypoint> send_back_waypoints_;
@@ -182,6 +183,7 @@ namespace Modelec
182183 {
183184 std::shared_ptr<T> closest_obstacle = nullptr ;
184185 auto robotPos = Point (pos->x , pos->y , pos->theta );
186+ auto enemyPos = Point (last_enemy_pos_.x , last_enemy_pos_.y , last_enemy_pos_.theta );
185187 float distance = std::numeric_limits<float >::max ();
186188
187189 for (const auto & obstacle : GetPathfinding ()->GetObstacles ())
@@ -191,6 +193,13 @@ namespace Modelec
191193 if (!obs->IsAtObjective ())
192194 {
193195 auto dist = Point::distance (robotPos, obs->GetPosition ());
196+
197+ if (has_enemy_)
198+ {
199+ auto enemyDist = Point::distance (enemyPos, obs->GetPosition ());
200+ dist *= (1 .0f + factor_close_enemy_ * std::exp (-enemyDist / enemy_emergency_distance_));
201+ }
202+
194203 if (dist < distance)
195204 {
196205 distance = dist;
Original file line number Diff line number Diff line change @@ -552,6 +552,8 @@ namespace Modelec
552552
553553 void NavigationHelper::OnEnemyPosition (const modelec_interfaces::msg::OdometryPos::SharedPtr msg)
554554 {
555+ if (!has_enemy_) has_enemy_ = true ;
556+
555557 pathfinding_->OnEnemyPosition (msg);
556558 last_enemy_pos_ = *msg;
557559
You can’t perform that action at this time.
0 commit comments