Skip to content

πŸš€πŸ Python library for seamless communication with your Universal Robots cobot. Supports RTDE, URScript execution, Dashboard Server, SFTP, SSH, and more!

Notifications You must be signed in to change notification settings

underautomation/UniversalRobots.py

Repository files navigation

Universal Robots Python SDK hero image

Universal Robots Communication SDK for Python

PyPI

Build delightful, production-ready apps that talk to your Universal Robots cobots in real time.

Universal.Robots.communication.SDK.mp4

πŸš€ Why you'll love it

  • Instant connectivity. Speak RTDE, Primary Interface, SSH, sockets, and SFTP with a single API.
  • Battle-tested. Powering automation stacks in factories, labs, and classrooms around the world.
  • Friendly by design. Pythonic abstractions, rich events, and typed helpers for poses, registers, variables, and more.

🧠 What is inside?

The SDK wraps the Universal Robots communication stack so you can:

  • Stream telemetry up to 500 Hz with RTDE (read & write registers, sync IO, monitor forces).
  • Drive URScript over the Primary Interface, fetch installation & program variables, and react to robot state changes.
  • Run custom socket servers that chat with UR scripts and external tools.
  • Move files back and forth with SFTP, and run shell commands securely via SSH.
  • Decode .urp programs and .installation files into editable XML.
  • Convert poses between rotation vectors and roll-pitch-yaw angles in one line.

πŸ“¦ Install it

From PyPI

pip install UnderAutomation.UniversalRobots

From source

git clone https://github.com/underautomation/UniversalRobots.py.git
cd UniversalRobots.py
pip install -e .

πŸ§ͺ Your first robot handshake

from underautomation.universal_robots.ur import UR
from underautomation.universal_robots.connect_parameters import ConnectParameters
from underautomation.universal_robots.rtde.rtde_input_data import RtdeInputData
from underautomation.universal_robots.rtde.rtde_output_data import RtdeOutputData
from underautomation.universal_robots.rtde.rtde_input_values import RtdeInputValues

robot = UR()

# Configure how we want to talk to the cobot
params = ConnectParameters("192.168.0.1")
params.primary_interface.enable = True               # Live access to variables, IO, and URScript
params.rtde.enable = True
params.rtde.frequency = 5                            # Up to 500 Hz if you need it
params.rtde.input_setup.add(RtdeInputData.StandardAnalogOutput0)
params.rtde.input_setup.add(RtdeInputData.InputBitRegisters, 64)
params.rtde.output_setup.add(RtdeOutputData.ActualTcpPose)
params.rtde.output_setup.add(RtdeOutputData.ActualTcpForce)

robot.connect(params)

# Subscribe to fresh RTDE packets
@robot.rtde.output_data_received
def on_output(sender, event):
    pose = robot.rtde.output_data_values.actual_tcp_pose
    force = robot.rtde.output_data_values.actual_tcp_force

    inputs = RtdeInputValues()
    inputs.standard_analog_output0 = 0.2
    inputs.input_bit_registers.x64 = True
    robot.rtde.write_inputs(inputs)

πŸ•ΉοΈ Talk back to URScript via sockets

from underautomation.universal_robots.socket_communication import SocketClientConnectionEventArgs, SocketRequestEventArgs

params.socket_communication.enable = True
params.socket_communication.port = 50001

@robot.socket_communication.socket_client_connection
def on_client(_, event: SocketClientConnectionEventArgs):
    event.client.socket_write("Hello cobot <3")

@robot.socket_communication.socket_request
def on_message(_, event: SocketRequestEventArgs):
    print("Robot says:", event.message)

robot.socket_communication.socket_write("123456")

πŸ“ File ops & shell superpowers

from underautomation.universal_robots.common.pose import Pose
from underautomation.universal_robots.ur_installation import URInstallation
from underautomation.universal_robots.ur_program import URProgram

params.ssh.enable_sftp = True
robot.connect(params)

items = robot.sftp.list_directory("/home/ur/ursim-current/programs/")
robot.sftp.download_file("/home/ur/ursim-current/programs/prg.urp", "C:/temp/prg.urp")
robot.ssh.run_command("echo Hello > /home/ur/Desktop/NewFile.txt")

pose = Pose(0.1, 0.2, -0.1, 0, 0.05, 0.1)
rpy = pose.from_rotation_vector_to_rpy()
program = URProgram.load("C:/temp/prg.urp")

πŸ“š Resources

πŸ›‘οΈ Licensing

This SDK is a commercial library. A valid license must be purchased to deploy it in production. Once licensed, you can ship an unlimited number of applications with zero royalties or recurring fees.

πŸ‘‰ Learn more & request pricing at UnderAutomation.com.


Made with ❀️ by the UnderAutomation team.

About

πŸš€πŸ Python library for seamless communication with your Universal Robots cobot. Supports RTDE, URScript execution, Dashboard Server, SFTP, SSH, and more!

Topics

Resources

Stars

Watchers

Forks

Contributors 2

  •  
  •  

Languages