.. _rtde_client: RTDEClient ========== The Real Time Data Exchange Client, ``RTDEClient``, class serves as a standalone `RTDE `_ client. To use the RTDE-Client, you'll have to initialize and start it separately: .. code-block:: c++ rtde_interface::RTDEClient my_client(ROBOT_IP, notifier, OUTPUT_RECIPE, INPUT_RECIPE); my_client.init(); my_client.start(); while (true) { std::unique_ptr data_pkg = my_client.getDataPackage(READ_TIMEOUT); if (data_pkg) { std::cout << data_pkg->toString() << std::endl; } } Upon construction, two recipe files have to be given, one for the RTDE inputs, one for the RTDE outputs. Please refer to the `RTDE guide `_ on which elements are available. Inside the ``RTDEclient`` data is received in a separate thread, parsed by the ``RTDEParser`` and added to a pipeline queue. Right after calling ``my_client.start()``, it should be made sure to read the buffer from the ``RTDEClient`` by calling ``getDataPackage()`` frequently. The Client's queue can only contain a restricted number of items at a time, so a ``Pipeline producer overflowed!`` error will be raised if the buffer isn't read frequently enough. For writing data to the RTDE interface, use the ``RTDEWriter`` member of the ``RTDEClient``. It can be retrieved by calling ``getWriter()`` method. The ``RTDEWriter`` provides convenience methods to write all data available at the RTDE interface. Make sure that the required keys are configured inside the input recipe, as otherwise the send-methods will return ``false`` if the data field is not setup in the recipe. An example of a standalone RTDE-client can be found in the ``examples`` subfolder. To run it make sure to * have an instance of a robot controller / URSim running at the configured IP address (or adapt the address to your needs) * run it from the package's main folder, as for simplicity reasons it doesn't use any sophisticated method to locate the required files. .. note:: The ``URDriver`` class creates a ``RTDEClient`` during initialization using the provided recipes and utilizing the robot model's maximum frequency. If you would like to use a different frequency, please use the ``resetRTDEClient()`` method after the ``UrDriver`` object has been created. RTDEWriter ---------- The ``RTDEWriter`` class provides an interface to write data to the RTDE interface. Data fields that should be written have to be defined inside the ``INPUT_RECIPE`` as noted above. The class offers specific methods for every RTDE input possible to write. Data is sent asynchronously to the RTDE interface.