What is the point of such a software library?
This software library saves you development time and guarantees its operation regardless of the model and firmware of your robot.
Quickly create applications that communicate with your Universal Robots cobot in .NET, Python, Labview or Matlab.
.NET
Python
LabVIEW
Connect your robot in just a few minutes. No license manager to install, no USB key. Only reference the library.
Use of network protocols provided as standard by the robot controller.URCaps ROS
Try it free for 30 days, no commitment, no registration required
Perpetual license, no subscription required, regardless of the number of robots, developers, or redistributed software
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.
The library implements all native protocols of Universal Robots cobots in several languages, allowing your computer to synchronize and control the robot arm remotely.
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");}}
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);};}
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");}}
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");}}
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;}}
Discover how our customers integrate UnderAutomation solutions into their industrial projects.
The library has the same functionality in several languages.
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.
This software library saves you development time and guarantees its operation regardless of the model and firmware of your robot.
You can download the latest version from the download page in the programming language of your choice.
We are specialists in this field and can help you free of charge with the technical support included with this SDK. You can also ask us for industrial software development in general. We answer all messages and will be happy to help you.
The download page of this website allows you to get examples in the language of your choice. You can then consult the documentation to get started with the library.
You can immediately request a quote directly from the order page of this website. You can also contact us.
Please check in the properties of the downloaded archive that Windows has not locked the file. If the examples launch correctly, please check that the PING command on the robot is successful. Also check that your firewall and your antivirus software allow a connection with the robot. Finally check the security settings of the robot.
Each version includes patches and new features. You will find on GitHub the history of the versions as well as the changes made. Don't hesitate to contact us to submit your ideas of evolution.
Little by little, the library has been enhanced with new features. Until version 5, all functions and protocols were developed in the same class, which became confusing. From version 6 and higher, all features are independent and developed in separate classes. Please contact us to help you migrate, or download the latest version 5.X.X.X from GitHub, which remains compatible with all older versions.