|  | 
|  | 1 | +:github_url: https://github.com/UniversalRobots/Universal_Robots_ROS2_Driver/blob/main/ur_robot_driver/doc/hardware_interface.rst | 
|  | 2 | + | 
|  | 3 | +UR Hardware interface | 
|  | 4 | +===================== | 
|  | 5 | + | 
|  | 6 | +The UR hardware interface is the core piece of the ROS driver. It is responsible for communicating | 
|  | 7 | +with the robot controller, sending commands and receiving status updates. | 
|  | 8 | + | 
|  | 9 | +The hardware interface is implemented using the ``ros2_control`` framework, which allows for modular | 
|  | 10 | +and flexible control of the robot. | 
|  | 11 | + | 
|  | 12 | +.. note:: | 
|  | 13 | +   The hardware interface itself doesn't define how the robot's motion can be controlled through | 
|  | 14 | +   ROS. For that, a **controller** is needed. There are many controllers to choose from, such as | 
|  | 15 | +   the ``JointTrajectoryController`` or the ``ForceModeController``. See `ros2_controllers | 
|  | 16 | +   <https://control.ros.org/rolling/doc/ros2_controllers/doc/controllers_index.html#controllers-for-manipulators-and-other-robots>`_ | 
|  | 17 | +   for "standard" controllers and :ref:`ur_controllers` for more information on UR-specific | 
|  | 18 | +   controllers | 
|  | 19 | + | 
|  | 20 | +Supported control modes | 
|  | 21 | +----------------------- | 
|  | 22 | + | 
|  | 23 | +The UR hardware interface supports the following control modes: | 
|  | 24 | + | 
|  | 25 | +- **Position control**: The robot's joints are controlled by specifying target positions. | 
|  | 26 | +- **Velocity control**: The robot's joints are controlled by specifying target velocities. | 
|  | 27 | +- **Effort control**: The robot's joints are controlled by specifying target efforts (torques). | 
|  | 28 | +  (Only available when running PolyScope >= 5.23.0 / 10.10.0) | 
|  | 29 | +- **Force control**: The robot's end-effector is controlled by specifying target forces | 
|  | 30 | +  in Cartesian space. | 
|  | 31 | +- **Freedrive mode**: The robot can be moved freely by the user without any active control. | 
|  | 32 | +- **Passthrough Trajectory control**: Complete trajectory points are forwarded to the robot for | 
|  | 33 | +  interpolation and execution. | 
|  | 34 | +- **Tool contact mode**: The robot stops when the tool comes into contact with an object, allowing for | 
|  | 35 | +  safe interaction with the environment. | 
|  | 36 | +- **Speed scaling**: Speed scaling on the robot can be read and written through the hardware | 
|  | 37 | +  interface. | 
|  | 38 | +- **GPIO**: Digital and analog I/O pins can be read and written through the hardware interface. | 
|  | 39 | +- **Payload**: Payload configuration can be changed during runtime through the hardware interface. | 
|  | 40 | +- **Force torque sensor**: Force torque sensor data can be read through the hardware interface. | 
|  | 41 | +  Zeroing the sensor is also supported. | 
|  | 42 | + | 
|  | 43 | +Interacting with the hardware interface | 
|  | 44 | +--------------------------------------- | 
|  | 45 | + | 
|  | 46 | +As stated above, motion control is done through controllers. However, the ros2_control framework | 
|  | 47 | +provides a set of services to interact with the hardware interface directly. These services can be | 
|  | 48 | +comfortably used through the ``ros2 control`` `command line tool | 
|  | 49 | +<https://control.ros.org/rolling/doc/ros2_control/ros2controlcli/doc/userdoc.html>`_. | 
|  | 50 | + | 
|  | 51 | +E.g. ``ros2 control list_hardware_components`` will list all hardware components, including the UR | 
|  | 52 | +hardware interface with its interfaces as listed above. | 
0 commit comments