Releases: underautomation/UniversalRobots.vi
v9.2.0.0
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
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
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
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
v8.0.2.0
- 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
v7.12.0.2
v7.12.0.1
update for previous versions of LV
v7.12.0.0
Update to new version : 7.12.0.0
