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.
The library implements all native protocols of Universal Robots cobots in several languages, allowing your computer to synchronize and control the robot arm remotely.
The "Dashboard Server" protocol that allows 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.
// Create a new robot instancevar robot = new UR();// Connect to the robotrobot.Connect("192.168.0.1");// Power on the robot arm and release brakesrobot.Dashboard.PowerOn();robot.Dashboard.ReleaseBrake();// Load program file to polyscoperobot.Dashboard.LoadProgram("fast_bin_picking.urp");// Start the programrobot.Dashboard.Play();// Get program name and statevar state = robot.Dashboard.GetProgramState();Console.WriteLine($"Program name : {state.Value.Name}");Console.WriteLine($"Stopped, Playing or Paused ? : {state.Value.State}");// Display a popup on the pendantrobot.Dashboard.ShowPopup("I just remote-controlled my robot!");
"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.
// Display robot TCP posevar pose = robot.Rtde.OutputDataValues.ActualTcpPose;// pose.X, pose.Y, pose.Z, pose.Rx, ...// Display robot TCP forcevar force = robot.Rtde.OutputDataValues.ActualTcpForce;// Write data in robot controlervar inputs = new RtdeInputValues();inputs.StandardAnalogOutput0 = 0.2;inputs.InputBitRegisters.X64 = true;robot.Rtde.WriteInputs(inputs);// Display all program and installation variablesvar variables = robot.PrimaryInterface.GlobalVariables.GetAll();string name = variables[0].Name;Pose value = variables[0].ToPose();GlobalVariableTypes type = variables[0].Type;
// Ask robot to execute a movejrobot.PrimaryInterface.Script.Send("movej([-1.5,-1.5,-2,-0.5,1.8,0], a=1.4, v=1.05, t=0, r=0)");// Enumerates files and folderSftpFile[] items = robot.Sftp.ListDirectory("/home/ur/ursim-current/programs/");// Download program file prg.urp to your local diskrobot.Sftp.DownloadFile("/home/ur/ursim-current/programs/prg.urp", @"C:\temp\prg.urp");// Send a local file to the robotrobot.Sftp.UploadFile(@"C:\temp\prg.urp", "/home/ur/ursim-current/programs/prg.urp");// Manipulate files and directoriesrobot.Sftp.RenameFile("/home/ur/prg.urp", "/home/ur/prg2.urp");robot.Sftp.Delete("/home/ur/prg.urp");bool exists = robot.Sftp.Exists("/home/ur/prg.urp");robot.Sftp.WriteAllText("/home/ur/file.txt", "Hello robot !");// ...
Your software can be a server and allow the robot to connect to it to retrieve information:
// Robot connects with URScipt function socket_open()robot.SocketCommunication.SocketClientConnection += (o, e) =>{// Reply to the robote.Client.SocketWrite("Hello cobot <3");};// Event raised when the robot sends a message with socket_write()robot.SocketCommunication.SocketRequest += (o, e) =>{string robotMessage = e.Message;};// Send a message to all connected clientsrobot.SocketCommunication.SocketWrite("123456");
This library offers features that can be used without having a UR robot on the network. For example, it is possible to convert position types. Your software can also open the native program *.urp and installation *.installation files and edit their content.
// Create X, Y, Z, RX, RY, RZ posevar pose = new Pose(0.1, 0.2, -0.1, 0, 0.05, 0.1);// Convert cartesian pose type to RPY or rotation vectorvar rpy = pose.FromRotationVectorToRPY();var vectorPose = pose.FromRPYToRotationVector();// Decompile program and installation files and access inner XMLURInstallation installation = URInstallation.Load("C:\\temp\\default.installation");URProgram prg = URProgram.Load("C:\\temp\\prg.urp");XElement internalXml = prg.XML;
It is an industrial-strength software library that requires a license. The purchase of a license allows your company, regardless of the number of developers, to develop in any of the languages offered and to distribute an unlimited number of software products to an unlimited number of your customers without recurring costs.
We support all currencies, please contact us for a customized quote.
We support all currencies, please contact us for a customized quote.
The library has the same functionality in several languages.
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.