diff --git a/ur_rtde_driver/README.md b/ur_rtde_driver/README.md
index 5c45fb5..0c4e92a 100644
--- a/ur_rtde_driver/README.md
+++ b/ur_rtde_driver/README.md
@@ -40,10 +40,9 @@ on details.
**Note to e-Series users:**
The robot won't accept script code from a remote source unless the robot is put into
*remote_control-mode*. However, if put into *remote_control-mode*, the program containing the
-**External Control** program node can't be started from the panel. In the future, this will be
-supported in the *headless* mode which doesn't require a panel being connected. Until that, a
-possible workaround is to use a third party dashboard client (e.g. [ur_dash](https://github.com/gocarter/ur_dash))
-to start the program through the dashboard server.
+**External Control** program node can't be started from the panel. If this behavior is required,
+please use the headless mode that does not require having a program running on the teach pendant.
+Note: The current headless mode doesn't offer the full functionality of the teach pendant.
For using the **tool communication interface** on e-Series robots, a `socat` script is prepared to
forward the robot's tool communication interface to a local device on the ROS PC. See [the tool
diff --git a/ur_rtde_driver/doc/ROS_INTERFACE.md b/ur_rtde_driver/doc/ROS_INTERFACE.md
index 2ea4175..bf0bcc8 100644
--- a/ur_rtde_driver/doc/ROS_INTERFACE.md
+++ b/ur_rtde_driver/doc/ROS_INTERFACE.md
@@ -20,6 +20,10 @@ Standalone launchfile to startup a ur3e. This requires a robot reachable via a n
Debug flag that will get passed on to ur_common.launch
+ * "**headless_mode**" (default: "false")
+
+ Automatically send URScript to robot to execute. On e-Series this does require the robot to be in 'remote-control' mode. With this, the URCap is not needed on the robot.
+
* "**kinematics_config**" (default: "$(find ur_e_description)/config/ur3e_default.yaml")
Kinematics config file used for calibration correction. This will be used to verify the robot's calibration is matching the robot_description.
@@ -97,6 +101,10 @@ Standalone launchfile to startup a ur10 robot. This requires a robot reachable v
Debug flag that will get passed on to ur_common.launch
+ * "**headless_mode**" (default: "false")
+
+ Automatically send URScript to robot to execute. On e-Series this does require the robot to be in 'remote-control' mode. With this, the URCap is not needed on the robot.
+
* "**kinematics_config**" (default: "$(find ur_description)/config/ur10_default.yaml")
Kinematics config file used for calibration correction. This will be used to verify the robot's calibration is matching the robot_description.
@@ -138,6 +146,10 @@ Robot bringup launchfile without the robot description. Include this, if you wan
If set to true, will start the driver inside gdb
+ * "**headless_mode**" (default: "false")
+
+ Automatically send URScript to robot to execute. On e-Series this does require the robot to be in 'remote-control' mode. With this, the URCap is not needed on the robot.
+
* "**kinematics_config**"
Kinematics config file used for calibration correction. This will be used to verify the robot's calibration is matching the robot_description. Pass the same config file that is passed to the robot_description.
@@ -223,6 +235,10 @@ Launchfile that starts a robot description with robot_state publisher and the dr
Debug flag that will get passed on to ur_control.launch
+ * "**headless_mode**" (default: "false")
+
+ Automatically send URScript to robot to execute. On e-Series this does require the robot to be in 'remote-control' mode. With this, the URCap is not needed on the robot.
+
* "**kinematics_config**"
Kinematics config file used for calibration correction. This will be used to verify the robot's calibration is matching the robot_description.
@@ -300,6 +316,10 @@ Standalone launchfile to startup a ur5 robot. This requires a robot reachable vi
Debug flag that will get passed on to ur_common.launch
+ * "**headless_mode**" (default: "false")
+
+ Automatically send URScript to robot to execute. On e-Series this does require the robot to be in 'remote-control' mode. With this, the URCap is not needed on the robot.
+
* "**kinematics_config**" (default: "$(find ur_description)/config/ur5_default.yaml")
Kinematics config file used for calibration correction. This will be used to verify the robot's calibration is matching the robot_description.
@@ -341,6 +361,10 @@ Standalone launchfile to startup a ur5e robot. This requires a robot reachable v
Debug flag that will get passed on to ur_common.launch
+ * "**headless_mode**" (default: "false")
+
+ Automatically send URScript to robot to execute. On e-Series this does require the robot to be in 'remote-control' mode. With this, the URCap is not needed on the robot.
+
* "**kinematics_config**" (default: "$(find ur_e_description)/config/ur5e_default.yaml")
Kinematics config file used for calibration correction. This will be used to verify the robot's calibration is matching the robot_description.
@@ -418,6 +442,10 @@ Standalone launchfile to startup a ur5 robot. This requires a robot reachable vi
Debug flag that will get passed on to ur_common.launch
+ * "**headless_mode**" (default: "false")
+
+ Automatically send URScript to robot to execute. On e-Series this does require the robot to be in 'remote-control' mode. With this, the URCap is not needed on the robot.
+
* "**kinematics_config**" (default: "$(find ur_description)/config/ur3_default.yaml")
Kinematics config file used for calibration correction. This will be used to verify the robot's calibration is matching the robot_description.
@@ -459,6 +487,10 @@ Standalone launchfile to startup a ur10e robot. This requires a robot reachable
Debug flag that will get passed on to ur_common.launch
+ * "**headless_mode**" (default: "false")
+
+ Automatically send URScript to robot to execute. On e-Series this does require the robot to be in 'remote-control' mode. With this, the URCap is not needed on the robot.
+
* "**kinematics_config**" (default: "$(find ur_e_description)/config/ur10e_default.yaml")
Kinematics config file used for calibration correction. This will be used to verify the robot's calibration is matching the robot_description.
@@ -529,6 +561,11 @@ This is the actual driver node containing the ROS-Control stack. Interfaces docu
Calling this service will make the "External Control" program node on the UR-Program return.
+ * "**resend_robot_program**" ([std_srvs/Trigger](http://docs.ros.org/api/std_srvs/html/srv/Trigger.html))
+
+ When in headless mode, this sends the URScript program to the robot for execution. Use this
+ after the program has been interrupted, e.g. by a protective- or EM-stop.
+
* "**set_io**" (ur_msgs/SetIO)
Service to set any of the robot's IOs
@@ -542,6 +579,10 @@ This is the actual driver node containing the ROS-Control stack. Interfaces docu
Names of the joints. Usually, this is given in the controller config file.
+ * "**headless_mode**"
+
+ Start robot in headless mode. This does not require the 'External Control' URCap to be running on the robot, but this will send the URScript to the robot directly. On e-Series robots this requires the robot to run in 'remote-control' mode.
+
* "**input_recipe_file**"
Path to the file containing the recipe used for requesting RTDE inputs. This is a required parameter.
diff --git a/ur_rtde_driver/launch/ur10_bringup.launch b/ur_rtde_driver/launch/ur10_bringup.launch
index 46888a2..ec2f656 100644
--- a/ur_rtde_driver/launch/ur10_bringup.launch
+++ b/ur_rtde_driver/launch/ur10_bringup.launch
@@ -9,7 +9,7 @@
-
+
diff --git a/ur_rtde_driver/launch/ur10e_bringup.launch b/ur_rtde_driver/launch/ur10e_bringup.launch
index 07376b0..6b7eb78 100644
--- a/ur_rtde_driver/launch/ur10e_bringup.launch
+++ b/ur_rtde_driver/launch/ur10e_bringup.launch
@@ -19,8 +19,7 @@
-
-
+
diff --git a/ur_rtde_driver/launch/ur3_bringup.launch b/ur_rtde_driver/launch/ur3_bringup.launch
index 7453427..0af8a92 100644
--- a/ur_rtde_driver/launch/ur3_bringup.launch
+++ b/ur_rtde_driver/launch/ur3_bringup.launch
@@ -9,7 +9,7 @@
-
+
diff --git a/ur_rtde_driver/launch/ur3e_bringup.launch b/ur_rtde_driver/launch/ur3e_bringup.launch
index fcf4ff0..061064c 100644
--- a/ur_rtde_driver/launch/ur3e_bringup.launch
+++ b/ur_rtde_driver/launch/ur3e_bringup.launch
@@ -18,7 +18,7 @@
-
+
diff --git a/ur_rtde_driver/launch/ur5_bringup.launch b/ur_rtde_driver/launch/ur5_bringup.launch
index 841d6a5..f06ef46 100644
--- a/ur_rtde_driver/launch/ur5_bringup.launch
+++ b/ur_rtde_driver/launch/ur5_bringup.launch
@@ -9,7 +9,7 @@
-
+
diff --git a/ur_rtde_driver/launch/ur5e_bringup.launch b/ur_rtde_driver/launch/ur5e_bringup.launch
index 3223fcd..84b8a88 100644
--- a/ur_rtde_driver/launch/ur5e_bringup.launch
+++ b/ur_rtde_driver/launch/ur5e_bringup.launch
@@ -18,7 +18,7 @@
-
+
diff --git a/ur_rtde_driver/launch/ur_common.launch b/ur_rtde_driver/launch/ur_common.launch
index 5997b86..fe028ff 100644
--- a/ur_rtde_driver/launch/ur_common.launch
+++ b/ur_rtde_driver/launch/ur_common.launch
@@ -18,7 +18,7 @@
-
+
diff --git a/ur_rtde_driver/launch/ur_control.launch b/ur_rtde_driver/launch/ur_control.launch
index 408ecbc..5881287 100644
--- a/ur_rtde_driver/launch/ur_control.launch
+++ b/ur_rtde_driver/launch/ur_control.launch
@@ -24,7 +24,7 @@
-
+
diff --git a/ur_rtde_driver/src/ros/hardware_interface.cpp b/ur_rtde_driver/src/ros/hardware_interface.cpp
index de5f787..ba166d3 100644
--- a/ur_rtde_driver/src/ros/hardware_interface.cpp
+++ b/ur_rtde_driver/src/ros/hardware_interface.cpp
@@ -90,6 +90,9 @@ bool HardwareInterface ::init(ros::NodeHandle& root_nh, ros::NodeHandle& robot_h
}
bool headless_mode;
+ // Start robot in headless mode. This does not require the 'External Control' URCap to be running
+ // on the robot, but this will send the URScript to the robot directly. On e-Series robots this
+ // requires the robot to run in 'remote-control' mode.
if (!robot_hw_nh.getParam("headless_mode", headless_mode))
{
ROS_ERROR_STREAM("Required parameter " << robot_hw_nh.resolveName("headless_mode") << " not given.");
@@ -296,6 +299,8 @@ bool HardwareInterface ::init(ros::NodeHandle& root_nh, ros::NodeHandle& robot_h
if (headless_mode)
{
+ // When in headless mode, this sends the URScript program to the robot for execution. Use this
+ // after the program has been interrupted, e.g. by a protective- or EM-stop.
resend_robot_program_srv_ =
robot_hw_nh.advertiseService("resend_robot_program", &HardwareInterface::resendRobotProgram, this);
}