Skip to content

Commit c488a99

Browse files
committed
abort controller if it fails repeatedly
1 parent 65ecdea commit c488a99

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

src/move_base_node.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ class MoveBase
8989
double twist_linear_gain_;
9090
double twist_angular_gain_;
9191
bool reached_position_;
92+
int controller_repeated_failures_;
9293
void startController();
9394
public:
9495
MoveBase();
@@ -117,7 +118,8 @@ MoveBase::MoveBase()
117118
local_target_radius_(0.4),
118119
twist_linear_gain_(0.5),
119120
twist_angular_gain_(1.0),
120-
reached_position_(false)
121+
reached_position_(false),
122+
controller_repeated_failures_(0)
121123
{
122124
pnh_.param("frame_id", frame_id_, frame_id_);
123125
pnh_.param("robot_frame_id", robot_frame_id_, robot_frame_id_);
@@ -158,8 +160,9 @@ void MoveBase::onNavigationFunctionChange(const sensor_msgs::PointCloud2::ConstP
158160

159161
void MoveBase::startController()
160162
{
161-
controller_timer_ = nh_.createTimer(ros::Duration(1.0 / controller_frequency_), &MoveBase::controllerCallback, this);
162163
reached_position_ = false;
164+
controller_repeated_failures_ = 0;
165+
controller_timer_ = nh_.createTimer(ros::Duration(1.0 / controller_frequency_), &MoveBase::controllerCallback, this);
163166
}
164167

165168

@@ -407,8 +410,16 @@ void MoveBase::generateTwistCommand(const geometry_msgs::PointStamped& local_tar
407410

408411
void MoveBase::controllerCallback(const ros::TimerEvent& event)
409412
{
413+
if(controller_repeated_failures_ >= 5)
414+
{
415+
ROS_ERROR("controller keeps failing. giving up :-(");
416+
controller_timer_.stop();
417+
return;
418+
}
419+
410420
if(!getRobotPose())
411421
{
422+
controller_repeated_failures_++;
412423
ROS_ERROR("controllerCallback: failed to get robot pose");
413424
return;
414425
}
@@ -444,6 +455,7 @@ void MoveBase::controllerCallback(const ros::TimerEvent& event)
444455

445456
if(!generateLocalTarget(local_target))
446457
{
458+
controller_repeated_failures_++;
447459
ROS_ERROR("controllerCallback: failed to generate a local target to follow");
448460
return;
449461
}
@@ -477,6 +489,8 @@ void MoveBase::controllerCallback(const ros::TimerEvent& event)
477489
ROS_INFO("controller: ep=%f, eo=%f, status=%s", ep.data, eo.data, status_str);
478490

479491
twist_pub_.publish(twist);
492+
493+
controller_repeated_failures_ = 0;
480494
}
481495

482496

0 commit comments

Comments
 (0)