Skip to content

Releases: underautomation/UniversalRobots.vi

v9.2.0.0

09 Feb 13:24

Choose a tag to compare

Improved Connection Error Messages

Connection errors now include a clear indication of which protocol failed to connect. Each protocol's internal connect method is wrapped with a specific ConnectException that identifies the service name, IP, and port.

Affected Protocols

Protocol Service Name
Primary Interface "Primary Interface"
RTDE "RTDE"
SSH "SSH"
SFTP "SFTP"
Interpreter Mode "Interpreter Mode"
XML-RPC "XML-RPC"
Socket Communication "Socket Communication"

Example

When a connection to a specific protocol fails, the exception message now clearly states which one:

Failed to connect to RTDE of Universal Robots cobot "192.168.0.1:30004" : No connection could be made because the target machine actively refused it.

v9.1.0.0

27 Jan 13:39

Choose a tag to compare

Raw Package Received Event

A new event RawPackageReceived has been added to the PrimaryInterface. This event is raised for every package received from the robot before any decoding happens, giving you access to the raw data.

Example

var robot = new UR();
robot.PrimaryInterface.RawPackageReceived += (sender, e) => 
{
    // Access raw data
    byte[] rawData = e.Data;
    DateTime receiveDate = e.ReceiveDate;
    byte type = e.Type;
    
    Console.WriteLine($"Received {rawData.Length} bytes of type {type}");
};
robot.Connect("192.168.0.1");

REST API Support for PolyscopeX

This release introduces full support for the Universal Robots REST API, available exclusively on PolyscopeX robots. The REST API is the modern replacement for the legacy Dashboard Server on new UR controllers running PolyscopeX.

Why REST API?

On PolyscopeX-based robots, the traditional Dashboard Server is deprecated. The REST API provides a cleaner, HTTP-based interface to control robot and program states. This SDK now seamlessly supports both:

  • Legacy Dashboard Server for CB-series and e-Series robots
  • REST API for PolyscopeX robots

Available Operations

Category Method Description
Robot State PowerOn() Power on the robot
PowerOff() Power off the robot
BrakeRelease() Release the robot brakes
UnlockProtectiveStop() Unlock from protective stop
RestartSafety() Restart the safety system
Program Control LoadProgram(name) Load a program by name
Play() Start playing the loaded program
Pause() Pause the running program
Stop() Stop the running program
Resume() Resume a paused program
GetProgramState() Get current program state

Quick Start Example

using UnderAutomation.UniversalRobots;

// Create UR instance
var robot = new UR();

// Connect with REST API enabled (for PolyscopeX)
robot.Connect(new ConnectParameters("192.168.0.1")
{
    Rest = { Enable = true }
});

// Power on and release brakes
robot.Rest.PowerOn();
robot.Rest.BrakeRelease();

// Load and run a program
robot.Rest.LoadProgram("my_program");
robot.Rest.Play();

// Check program state (RUNNING, STOPPED, ...)
var state = robot.Rest.GetProgramState();
Console.WriteLine($"Program state: {state.Value.State}");

// Stop and power off
robot.Rest.Stop();
robot.Rest.PowerOff();

Standalone REST Client

You can also use the REST client independently:

using UnderAutomation.UniversalRobots.Rest;

var restClient = new RestClient();
restClient.Enable("192.168.0.1");

restClient.PowerOn();
restClient.BrakeRelease();
restClient.LoadProgram("my_program");
restClient.Play();

restClient.Disable();

Connection Parameters

The RestConnectParameters class provides full configuration:

Property Default Description
Enable false Enable REST API client
Port 80 HTTP port for REST API
Version Latest REST API version (V1 or Latest)
TimeoutMs 5000 Request timeout in milliseconds

Migration from Dashboard Server

If you're migrating from a legacy robot to PolyscopeX, update your connection parameters:

// Before (CB-series / e-Series with Dashboard Server)
robot.Connect(new ConnectParameters("192.168.0.1")
{
    Dashboard = { Enable = true }
});
robot.Dashboard.PowerOn();

// After (PolyscopeX with REST API)
robot.Connect(new ConnectParameters("192.168.0.1")
{
    Rest = { Enable = true }
});
robot.Rest.PowerOn();

REST API is still under development, so it is not yet fully equivalent to the Dashboard Server.


New PRO License

This release introduces a new PRO License tier, providing more flexibility in our licensing model. The previous "Site License" has evolved into two distinct offers: Standard and Pro.

Key Points

  • Perpetual licenses: All licenses are perpetual and allow unlimited redistribution of your compiled application
  • Upgrade path: You can upgrade from Standard → Source or Pro → Source by paying the price difference
  • Pro advantage: Includes 3 years of maintenance and 2 hours of remote support at a discounted bundle price

For complete pricing and details, visit: https://underautomation.com/license

v9.0.1.0

27 Jan 09:56

Choose a tag to compare

REST API Support for PolyscopeX

This release introduces full support for the Universal Robots REST API, available exclusively on PolyscopeX robots. The REST API is the modern replacement for the legacy Dashboard Server on new UR controllers running PolyscopeX.

Why REST API?

On PolyscopeX-based robots, the traditional Dashboard Server is deprecated. The REST API provides a cleaner, HTTP-based interface to control robot and program states. This SDK now seamlessly supports both:

  • Legacy Dashboard Server for CB-series and e-Series robots
  • REST API for PolyscopeX robots

Available Operations

Category Method Description
Robot State PowerOn() Power on the robot
PowerOff() Power off the robot
BrakeRelease() Release the robot brakes
UnlockProtectiveStop() Unlock from protective stop
RestartSafety() Restart the safety system
Program Control LoadProgram(name) Load a program by name
Play() Start playing the loaded program
Pause() Pause the running program
Stop() Stop the running program
Resume() Resume a paused program
GetProgramState() Get current program state

Quick Start Example

using UnderAutomation.UniversalRobots;

// Create UR instance
var robot = new UR();

// Connect with REST API enabled (for PolyscopeX)
robot.Connect(new ConnectParameters("192.168.0.1")
{
    Rest = { Enable = true }
});

// Power on and release brakes
robot.Rest.PowerOn();
robot.Rest.BrakeRelease();

// Load and run a program
robot.Rest.LoadProgram("my_program");
robot.Rest.Play();

// Check program state (RUNNING, STOPPED, ...)
var state = robot.Rest.GetProgramState();
Console.WriteLine($"Program state: {state.Value.State}");

// Stop and power off
robot.Rest.Stop();
robot.Rest.PowerOff();

Standalone REST Client

You can also use the REST client independently:

using UnderAutomation.UniversalRobots.Rest;

var restClient = new RestClient();
restClient.Enable("192.168.0.1");

restClient.PowerOn();
restClient.BrakeRelease();
restClient.LoadProgram("my_program");
restClient.Play();

restClient.Disable();

Connection Parameters

The RestConnectParameters class provides full configuration:

Property Default Description
Enable false Enable REST API client
Port 80 HTTP port for REST API
Version Latest REST API version (V1 or Latest)
TimeoutMs 5000 Request timeout in milliseconds

Migration from Dashboard Server

If you're migrating from a legacy robot to PolyscopeX, update your connection parameters:

// Before (CB-series / e-Series with Dashboard Server)
robot.Connect(new ConnectParameters("192.168.0.1")
{
    Dashboard = { Enable = true }
});
robot.Dashboard.PowerOn();

// After (PolyscopeX with REST API)
robot.Connect(new ConnectParameters("192.168.0.1")
{
    Rest = { Enable = true }
});
robot.Rest.PowerOn();

REST API is still under development, so it is not yet fully equivalent to the Dashboard Server.


New PRO License

This release introduces a new PRO License tier, providing more flexibility in our licensing model. The previous "Site License" has evolved into two distinct offers: Standard and Pro.

Key Points

  • Perpetual licenses: All licenses are perpetual and allow unlimited redistribution of your compiled application
  • Upgrade path: You can upgrade from Standard → Source or Pro → Source by paying the price difference
  • Pro advantage: Includes 3 years of maintenance and 2 hours of remote support at a discounted bundle price

For complete pricing and details, visit: https://underautomation.com/license

v8.2.0.0

29 Dec 13:44

Choose a tag to compare

This version is a maintenance release focused on improving the codebase foundation rather than adding new features.

Key Changes:

  • Code Restructuring: Performed a minimal internal reorganization to improve project maintainability and clarity.
  • Bug Fixes: Resolved several minor issues to enhance overall stability and performance.

v8.1.0.0

13 Oct 11:54

Choose a tag to compare

UnderAutomation Universal Robots communication SDK

  • Improve Invert Kinematics and do not filter position with singularities

v8.0.2.0

25 Sep 07:22

Choose a tag to compare

UnderAutomation Universal Robots communication SDK

  • Implement forward and invert kinematics
using UnderAutomation.UniversalRobots.Kinematics;

// Get DH parameters
IUrDhParameters dhParameters = KinematicsUtils.GetDhParametersFromModel(RobotModelsExtended.Ur5e);

// Forward kinematics
double[] joints = new double[]{0.0, 0.1, 0.0, 0.2, -0.3, 0};
var fkResult = KinematicsUtils.ForwardKinematics(joints, dhParameters);

// inverse kinematics
Pose cartesianPose = Pose.From4x4MatrixToRotationVector(fkResult.ToolTransform);
var matrix = cartesianPose.FromRotationVectorTo4x4Matrix();
double[][] ikResults = KinematicsUtils.InverseKinematics(matrix, dhParameters);

v7.13.1.0

22 Sep 08:46

Choose a tag to compare

UnderAutomation Universal Robots communication SDK

  • Add Enum to support new UR20 and UR30 models
  • Remove .NET6 support

v7.12.0.2

30 Jul 09:26

Choose a tag to compare

UnderAutomation Universal Robots communication SDK

  • Add VI examples
  • Update README

v7.12.0.1

29 Jul 09:44

Choose a tag to compare

update for previous versions of LV

v7.12.0.0

08 Apr 08:22

Choose a tag to compare

Update to new version : 7.12.0.0