Quickly create applications that communicate with your Universal Robots cobot
Project description
Universal Robots Communication SDK for Python
Build delightful, production-ready apps that talk to your Universal Robots cobots in real time.
🚀 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
.urpprograms and.installationfiles 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
- Documentation & licensing: https://underautomation.com/universal-robots
- Product tour & updates: whatsNew.md in this repository
- Need .NET, LabVIEW, or Unity? We have you covered in the badges above.
🛡️ 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file underautomation_universalrobots-9.2.0.0.tar.gz.
File metadata
- Download URL: underautomation_universalrobots-9.2.0.0.tar.gz
- Upload date:
- Size: 511.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1755d557f46f89989e9ae81fc5ae0cff92d4b292bbb59aea21e11e82d3a1c779
|
|
| MD5 |
6085c425c56ab1a3e0d1eb59f5a33a6d
|
|
| BLAKE2b-256 |
e57e98b690b0ce804bdf9532b385e3c754c2ba2c7e440089c230b992024053f1
|
File details
Details for the file underautomation_universalrobots-9.2.0.0-py3-none-any.whl.
File metadata
- Download URL: underautomation_universalrobots-9.2.0.0-py3-none-any.whl
- Upload date:
- Size: 620.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2798d4057b35b5f6be9506e67c7e503855ef8cbed86c8ed5053ff06ae4b835c
|
|
| MD5 |
4c7e704e7061c60d05d5cfb46866948b
|
|
| BLAKE2b-256 |
4a36d8605464a48cc24eea0a57f67dfa9504bcd181e06544d71cdd6a3a3658dd
|