Skip to content

Commit 4d7016f

Browse files
author
Felix Exner
committed
Add initialization routine for first messages
1 parent 5621c35 commit 4d7016f

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

ur_robot_driver/include/ur_robot_driver/ros/robot_state_helper.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class RobotStateHelper
5959
virtual ~RobotStateHelper() = default;
6060

6161
private:
62+
ros::NodeHandle nh_;
6263
void robotModeCallback(const ur_dashboard_msgs::RobotMode& msg);
6364
void safetyModeCallback(const ur_dashboard_msgs::SafetyMode& msg);
6465

@@ -85,8 +86,9 @@ class RobotStateHelper
8586
// Action server functions
8687
void setModeGoalCallback();
8788
void setModePreemptCallback();
89+
void startActionServer();
90+
bool is_started_;
8891

89-
ros::NodeHandle nh_;
9092
RobotMode robot_mode_;
9193
SafetyMode safety_mode_;
9294

ur_robot_driver/include/ur_robot_driver/ur/datatypes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace ur_driver
3333
{
3434
enum class RobotMode : int8_t
3535
{
36+
UNKNOWN = -128, // This is not defined by UR but only inside this driver
3637
NO_CONTROLLER = -1,
3738
DISCONNECTED = 0,
3839
CONFIRM_SAFETY = 1,

ur_robot_driver/src/ros/robot_state_helper.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ namespace ur_driver
3232
{
3333
RobotStateHelper::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

6464
void 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

Comments
 (0)