Universal Robots SDKControl Universal Robots cobots from your own software
Quickly create applications that communicate with your Universal Robots cobot in .NET, Python, Labview or Matlab. A ready-to-use software library: your PC talks to the robot over the network cable.
From 1100 € / $1300, paid once
Matlab
1// dotnet add package UnderAutomation.UniversalRobots2using UnderAutomation.UniversalRobots;34var robot = new UR();5robot.Connect("192.168.0.1");67var pose = robot.PrimaryInterface.CartesianInfo.AsPose();8robot.Dashboard.LoadProgram("pick_and_place.urp");9robot.Dashboard.Play();
What you get
Plug & Play
Connect your robot in just a few minutes. No license manager to install, no USB key. Only reference the library.
No plugins to install on the robot
Use of network protocols provided as standard by the robot controller.
30-day trial
Try it free for 30 days, no commitment, no registration required
Pay once, use forever
Perpetual license, no subscription required, regardless of the number of robots, developers, or redistributed software
Customer Success Stories
Discover how our customers integrate UnderAutomation solutions into their industrial projects.


AbbVie: Automating High-throughput screening
How AbbVie Leverages Universal Robots SDK to Automate High-Concentration Protein Screening.


GE: Aerospace & Healthcare Automation
GE Accelerates Industrial Automation with UnderAutomation SDKs for Universal Robots and FANUC.


Lockheed Martin: Flexible Aerospace Automation
Refining precision manufacturing and handling with collaborative robots.


Microsoft: Physical AI & Azure IoT
From Azure to the Factory Floor: Microsoft's Physical AI Journey with Universal Robots.


Stellantis: Unlocking Cobot Potential
Using software connectivity to standardize Universal Robots integration across global sites.


CNIMI: Smart Manufacturing & Digital Twins
CNIMI promotes smart manufacturing and digital twins enabled by connectivity with Universal Robots.
Universal Robots SDK Features: RTDE, Dashboard & More
Each feature comes with a code sample. Click on it to see the full code.
Remote control
The "REST API" and "DASHBOARD SERVER" protocols allow you to send commands to the robot remotely via TCP/IP. You can for example switch the robot arm on or off, release the brakes, load a program, run it or stop it.
static void Main(string[] args){var robot = new UR();// Primary Interface and Dashboard Serverrobot.Connect("192.168.0.1");// Power on the arm and release the brakesrobot.Dashboard.PowerOn();robot.Dashboard.ReleaseBrake();// Load a program and start itrobot.Dashboard.LoadProgram("pick_and_place.urp");robot.Dashboard.Play();// Name and state of the programvar state = robot.Dashboard.GetProgramState();Console.WriteLine(state.Value.Name + ": " + state.Value.State);// Show a message on the teach pendantrobot.Dashboard.ShowPopup("Started from the PC");}}
Exchanging measurements
"Primary interface" and "RTDE" (Real-Time Data Exchange) allow to receive a measurement stream from the robot up to 500Hz which contains a lot of information: position, status, inputs and outputs, the value of program variables, ... Your application can thus synchronize with the robot. Also, it is possible to write shared registers to the robot at high speed.
robot.Rtde.OutputDataReceived += (sender, e) =>{// Position of the tool: X, Y, Z in m, rotation vector in radPose pose = robot.Rtde.OutputDataValues.ActualTcpPose;// Force at the toolCartesianCoordinates force = robot.Rtde.OutputDataValues.ActualTcpForce;// Write analog output 0 and bit register 64var inputs = new RtdeInputValues();inputs.StandardAnalogOutputMask = 0b01;inputs.StandardAnalogOutput0 = 0.2;inputs.InputBitRegisters.X64 = true;robot.Rtde.WriteInputs(inputs);// Program and installation variablesGlobalVariable[] variables = robot.PrimaryInterface.GlobalVariables.GetAll();foreach (var variable in variables)Console.WriteLine(variable.Name + " = " + variable.Value);};}
Script and program
This library allows you to remotely control program execution on the robot in several ways:
- You can send on TCP/IP socket URScript script lines to be executed.
- Functions allow you to build and edit a *.urp program file locally and then transfer it to the UR controller for execution.
robot.Connect(parameters);// Run a URScript linerobot.PrimaryInterface.Script.Send("movej([-1.5, -1.5, -2, -0.5, 1.8, 0], a=1.4, v=1.05)");// List the programs of the robotSftpFile[] items = robot.Sftp.ListDirectory("/programs/");// Download a program to the PCrobot.Sftp.DownloadFile("/programs/prg.urp", @"C:\temp\prg.urp");// Send a program to the robotrobot.Sftp.UploadFile(@"C:\temp\prg.urp", "/programs/prg.urp");// Rename, check, deleterobot.Sftp.RenameFile("/programs/prg.urp", "/programs/prg2.urp");bool exists = robot.Sftp.Exists("/programs/prg2.urp");robot.Sftp.DeleteFile("/programs/prg2.urp");}}
Custom Socket Communication
Your software can be a server and allow the robot to connect to it to retrieve information:
- XML-RPC: The robot can connect with the "rpc_factory" function and call methods with remote arguments in your program that can return values.
- Socket: Classic TCP/IP server to which the robot can connect with the "socket_open" function and then dialogue with your application in both directions.
robot.Connect(parameters);// The robot connects with the URScript function socket_open()robot.SocketCommunication.SocketClientConnection += (sender, e) =>{e.Client.SocketWrite("Hello robot");};// The robot sends a message with socket_send_string()robot.SocketCommunication.SocketRequest += (sender, e) =>{Console.WriteLine(e.Message);};// Send a message to every connected robotrobot.SocketCommunication.SocketWrite("123456");}}
Kinematics and offline toolbox
This library offers features that can be used without having an UR robot to the network. It is for example possible to convert types of positions. Your software can also open native files program *.URP and installation *. Installation and edit its content. It also makes it possible to convert a Cartesian position into joints positions and vice versa.
static void Main(string[] args){// X, Y, Z in m, rotation vector RX, RY, RZ in radvar pose = new Pose(0.1, 0.2, -0.1, 0, 0.05, 0.1);// Convert the rotation to roll, pitch, yaw, and backPose rpy = pose.FromRotationVectorToRPY();Pose rotationVector = rpy.FromRPYToRotationVector();// Nominal DH parameters of a UR3eIUrDhParameters dh = KinematicsUtils.GetDhParametersFromModel(RobotModelsExtended.UR3e);// Forward kinematics, joint positions in radKinematicsResult fk = KinematicsUtils.ForwardKinematics(new double[] { 0, -1.57, 1.57, 0, 0, 0 }, dh);Pose flange = Pose.From4x4MatrixToRotationVector(fk.ToolTransform);// Inverse kinematics: up to 8 solutionsdouble[][] solutions = KinematicsUtils.InverseKinematics(pose.FromRotationVectorTo4x4Matrix(), dh);// Open program and installation files, as XMLURInstallation installation = URInstallation.Load(@"C:\temp\default.installation");URProgram program = URProgram.Load(@"C:\temp\prg.urp");XElement xml = program.XML;}}
And more...
- Primary / Secondary interface
- RTDE (Real-Time Data Exchange)
- Dashboard server
- REST API (PolyscopeX only)
- Interpreter Mode
- Sockets
- XML-RPC
- SSH
- SFTP
- Forward & Inverse Kinematics
See it in action
Video and screenshots of the demo application delivered with the SDK.
Windows application example
No code to write: test the SDK on your robot with the demo application.

Examples on GitHub
The sources of examples of use of this SDK are available on Github
Python example
Example of operation of this SDK with Python to recover the Cartesian position of a robot.
Labview example
Example of VI which allows most of the functions of this SDK to be tested.
Install it in one command
Choose your language. The 30-day trial starts at the first use, with no registration.
.NET
NuGet package for C# and VB.NET, from .NET Framework to the latest .NET.
dotnet add package UnderAutomation.UniversalRobotsPython
Python package on PyPI, for Windows, Linux and macOS.
pip install UnderAutomation.UniversalRobotsLabVIEW
LabVIEW library (.lvlib) and its example project, on GitHub.
git clone https://github.com/underautomation/UniversalRobots.vi.gitAI agents
Skill for AI coding agents (Claude Code, Cursor, Copilot...): your assistant knows the API of the SDK.
npx skills add underautomation/skills --skill underautomation-universal-robots-csharpBrowse the documentation
The documentation allows you to quickly start developing with the library. The same functionality is available in all supported languages.
Browse the documentation
The documentation allows you to quickly start developing with the library. The same functionality is available in all supported languages.
Getting started with .NET
Code your application in C# or VB with this 100% managed library, without dependencies and available on NuGet.org in the version and architecture of your choice (x86, x64, ARM, Linux, Windows, MacOS, .NET Framework, .NET Core, UWP, ...)
Get started with Python
Quickly develop a program in Python that communicates with your robot using this library. It is available on PyPI.
Getting started with LabVIEW
Equip your LabVIEW VIs with a communication with your robot.

Getting started with Matlab
Allow your Matlab scripts to drive your robot.
Guides and how-to articles
Each article explains how to do one task, step by step, with code you can copy.
Get the robot position
Read the joint positions and the TCP position of a UR cobot in C# or Python, with RTDE up to 500 Hz or with the Primary Interface.
Read and write I/O
Read and write the digital and analog I/O of a UR cobot in C# or Python, with RTDE and its masks, or with the Primary Interface.
Read and write variables
Read the program and installation variables of a UR cobot in C# or Python with the Primary Interface or the Dashboard Server, and how to change them.
Read and write registers
Exchange values between a UR robot program and a PC with the boolean, integer and float registers, with RTDE up to 500 Hz.
Run a program
Power on a UR cobot, release the brakes, load a program and play it from a PC in C# or Python, then follow it until its end.
Read and reset alarms
Read the error messages, the program errors and the safety status of a UR cobot in C# or Python, and reset a protective stop or a safety fault.
Transfer files and backups
Copy the programs of a UR cobot to a PC for a backup, send a program to the robot and load it, in C# or Python with SFTP.
Monitor the state of the robot
Follow the robot mode, the program, the stops, the safety status and the connection of a UR cobot in C# or Python.
Move the robot from a PC
Move a UR cobot from a PC in C# or Python with URScript, the Interpreter Mode, registers or a program, and check the position reached.
Pricing
Libraries can be downloaded for free and can be tested for 30 days. After this period, you can ask us to extend the trial period, or buy the license that suits you best: standard, pro or source. After purchasing, you have a maintenance period, giving you access to the support and the possibility of updating. When you buy a license to use, it is linked to a robot brand, you can use it forever, without recurring fee, regardless of the number of robot, developer or software that you redistribute to your customers. If you are a distributor and wish to offer your customers one of our products, please contact us to discuss special conditions and prices.
Standard Site License
•
Pro License
•
Source license
•
FAQ: Universal Robots .NET, Python, LabVIEW & Matlab SDK
UR+ Certified SDK for Universal Robots Cobots
Universal Robots' technical and sales teams have audited this library. They certify that it is compliant and integrates perfectly with their robots and its ecosystem.

Blog Universal Robots
« Universal Robots integrates French software library underautomation into UR+ ecosystem »
Automation France
« UnderAutomation has developed an industrial-grade software library that is fully compatible with Universal Robots technology. »
Machine Production
« A library for creating applications with Universal Robots cobots »
Mesures.com
« UnderAutomation develops a software library compatible with Universal Robots »
Industrie
« UnderAutomation, a French company specializing in industrial IT, has developed a UR+-certified software library. »
Zone Industrie
« Remote control, real-time measurement exchange, easy programming... so many functions that above all save considerable time. »Libraries on GitHub
Each package is published on GitHub with its changelog.
Latest releases
UniversalRobots.NET
Latest release
underautomation / UniversalRobots.NET
Public.NET library of the Universal Robots SDK.
underautomation / UniversalRobots.py
PublicPython package of the Universal Robots SDK.
underautomation / UniversalRobots.vi
PublicLabVIEW library of the Universal Robots SDK, with example VIs.
underautomation / UniversalRobots.unity
PublicUnity package of the Universal Robots SDK.
Get started now !
Start the 30-day trial today, or ask for a quote.