Skip to main content

Quickly create applications that communicate with your Universal Robots cobot

Project description

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.

https://user-images.githubusercontent.com/47540360/143318635-6d6aaaf4-5642-457a-8ff1-4322f2defe82.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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

underautomation_universalrobots-9.2.0.0.tar.gz (511.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file underautomation_universalrobots-9.2.0.0.tar.gz.

File metadata

File hashes

Hashes for underautomation_universalrobots-9.2.0.0.tar.gz
Algorithm Hash digest
SHA256 1755d557f46f89989e9ae81fc5ae0cff92d4b292bbb59aea21e11e82d3a1c779
MD5 6085c425c56ab1a3e0d1eb59f5a33a6d
BLAKE2b-256 e57e98b690b0ce804bdf9532b385e3c754c2ba2c7e440089c230b992024053f1

See more details on using hashes here.

File details

Details for the file underautomation_universalrobots-9.2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for underautomation_universalrobots-9.2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b2798d4057b35b5f6be9506e67c7e503855ef8cbed86c8ed5053ff06ae4b835c
MD5 4c7e704e7061c60d05d5cfb46866948b
BLAKE2b-256 4a36d8605464a48cc24eea0a57f67dfa9504bcd181e06544d71cdd6a3a3658dd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page