@@ -32,7 +32,8 @@ namespace ur_driver
3232{
3333RobotStateHelper::RobotStateHelper (const ros::NodeHandle& nh)
3434 : nh_(nh)
35- , robot_mode_(RobotMode::POWER_OFF)
35+ , is_started_(false )
36+ , robot_mode_(RobotMode::UNKNOWN)
3637 , safety_mode_(SafetyMode::UNDEFINED_SAFETY_MODE)
3738 , set_mode_as_(nh_, " set_mode" , false )
3839{
@@ -58,7 +59,6 @@ RobotStateHelper::RobotStateHelper(const ros::NodeHandle& nh)
5859
5960 set_mode_as_.registerGoalCallback (std::bind (&RobotStateHelper::setModeGoalCallback, this ));
6061 set_mode_as_.registerPreemptCallback (std::bind (&RobotStateHelper::setModePreemptCallback, this ));
61- set_mode_as_.start ();
6262}
6363
6464void RobotStateHelper::robotModeCallback (const ur_dashboard_msgs::RobotMode& msg)
@@ -68,6 +68,10 @@ void RobotStateHelper::robotModeCallback(const ur_dashboard_msgs::RobotMode& msg
6868 robot_mode_ = RobotMode (msg.mode );
6969 ROS_INFO_STREAM (" Robot mode is now " << robotModeString (robot_mode_));
7070 updateRobotState ();
71+ if (!is_started_)
72+ {
73+ startActionServer ();
74+ }
7175 }
7276}
7377
@@ -78,6 +82,10 @@ void RobotStateHelper::safetyModeCallback(const ur_dashboard_msgs::SafetyMode& m
7882 safety_mode_ = SafetyMode (msg.mode );
7983 ROS_INFO_STREAM (" Robot's safety mode is now " << safetyModeString (safety_mode_));
8084 updateRobotState ();
85+ if (!is_started_)
86+ {
87+ startActionServer ();
88+ }
8189 }
8290}
8391
@@ -260,4 +268,13 @@ bool RobotStateHelper::safeDashboardTrigger(ros::ServiceClient* srv_client)
260268 }
261269 return srv.response .success ;
262270}
271+
272+ void RobotStateHelper::startActionServer ()
273+ {
274+ if (robot_mode_ != RobotMode::UNKNOWN && safety_mode_ != SafetyMode::UNDEFINED_SAFETY_MODE)
275+ {
276+ set_mode_as_.start ();
277+ is_started_ = true ;
278+ }
279+ }
263280} // namespace ur_driver
0 commit comments