I have recently started using the universal robots ros driver to remote control the UR10 arm. I want to control the arm in a feedback control system using the speedl script command to update the tool speed linearly in cartesian space - preferably in real time. Previously I was able to do this using the input/output registers in the RTDE interface - which the script program would read for every loop iteration. However, the ROS driver does not seem to have an interface to the input/output registers of the RTDE. Is this true ? If so, is it possible to control the UR10 arm in the TCP frame using a different interface in real time - perhaps using ros control or the secondary interface.
This is currently not supported directly by the ROS driver.
However, you can still do the same as you did before, as ROS is controlling the robot only when there is a program running on the teach pendant that currently has the “External Control” program node active.
You can still have your own ProgramNode that is interpreting the GP registers of RTDE and make a separate RTDE connection for using your control scheme.
I did not think it was possible to have a separate connection to the RTDE interface. From what I understand the driver has an RTDE connection to get IO states, joint states etc. and if I make a another connection to the RTDE interface I get the error that the socket is already in use?
You can indeed make a second RTDE connection, you just cannot control the same input data fields as other RTDE clients already do. You can see here which input fields we use for the driver and are therefor blocked. All the
input_double_register_X fields are still available for whatever you would like to do