Universal Robots Forum

Release of URCap SDK 1.6.1, PolyScope 5.3 and 3.9

Release of URCap API 1.6.0, PolyScope 5.3 and PolyScope 3.9

Dear valued developers,

Universal Robots is delighted to announce, that we are now releasing a new software, to continuously deliver more value to you and our customers.
The new release consist of:

  • PolyScope 5.3.0 for e-Series
  • PolyScope 3.9.0 for CB3
  • URCap SDK 1.6.1 including URCap API 1.6.0 for both platforms

Key features

The key features in this release is:


  • Support for configuring TCP’s on Move nodes
    Parent nodes can now select which TCP should be used in a child-Move node.
  • Improved support for Features
    Ability to call getPose() and get the actual Pose of a feature.
  • New “builders” replace “factories” for creating new child Move and Direction configurations.
  • Ability to query robot generation and whether simulation mode is active

Other features

  • Extended the range of general purpose RTDE registers.
    The lower half (i.e. FLOAT 0-23) is now dedicated for Fieldbus usage (Profinet and Ethernet IP).
    The newly added upper half (i.e. FLOAT 24-47) is for general URCap and external client usage.
    We recommend changing existing code, to use this upper half.
  • New palletizing template on e-Series
  • New Direction and Until nodes
  • Support for OSSD safety inputs

Compatibility notice

Please be reminded of this notice, which is in effect from this release.

Get started with the new API

You can download the latest URCaps SDK and URCaps Starter Package under the Download Center.
Find the latest PolyScope software on the UR Support Site.

URCap API and SDK release notes

Please find the release notes related to the URCap API and SDK 1.6 below:

Compatibility Notice:

  • Introduced a behavioral change in the URCap API for the ‘isDefined()’ and ‘getTitle()’ methods in the ‘ProgramNodeContribution’ interface. This change may affect existing URCaps.


  • Any modification to the data model or the child program sub-tree within the scope of calls to the implementation of overridden ‘isDefined()’ or ‘getTitle()’ methods throws an ‘IllegalStateException’ exception. This occurs even if the changes are inside of an ‘UndoableChanges’ scope.
  • This change is introduced to improve system performance, enforce good coding practice, and increase the robustness of the URCap Software Platform. The ‘isDefined()’ or ‘getTitle()’ methods are called frequently, and therefore should only rely on existing values (that are present in the data model) or the current child sub-tree structure.


  • Improved API support for Move Node configurations:
    • Added support for the configuration of TCP settings.
    • Added support to make it easier to create supported node configurations using flexible configuration builders:
      • Compared to the existing configuration factory, it is much easier to modify/update an existing configuration with the new builders (using the ‘copyFrom(…)’ method) when the value of only one or a few parameters needs to be changed in the current configuration of a Move Node.
      • See new ‘domain.program.nodes.builtin.configurations.movenode.builder’ Java package
      • The new configuration builders are accessible in the existing ‘MoveNode’ interface
      • Deprecated existing ‘MoveNodeConfigFactory’ interface
      • In future API versions, no new API functionality will be added to the existing ‘MoveNodeConfigFactory’ interface. The new configuration builders must be used instead. Existing URCaps that wish to configure the TCP settings of a Move Node can “feed” Move Node configurations into the new configuration builders (using the ‘copyFrom(…)’ method) to save time.
  • Added support for querying the robot series:
    • See new method ‘getRobotSeries()’ in the existing ‘RobotModel’ interface (in the ‘domain.robot’ Java package)
    • This new method can be used to determine if the robot is a CB3 or an e-Series robot.
  • Improved API support for Features:
    • Added support for getting the pose for the Cartesian position of Line and Plane features (the existing ‘FeatureLine’ and ‘FeaturePlane’ interfaces).
    • See new ‘getPose()’ method in the ‘Feature’ API interface (in the ‘domain.feature’ Java package)
    • Deprecated all ‘getPointX()’ methods in the ‘FeatureLine’ and ‘FeaturePlane’ interfaces
  • Added support for Direction Nodes:
    • URCaps can create and insert Direction Nodes into the Program Tree.
    • URCaps can read and change the configuration of Direction Nodes.
    • See the new ‘domain.program.nodes.builtin.configurations.directionnode’ Java package
    • See the new ‘DirectionNode’ interface in the ‘domain.program.nodes.builtin’ Java package
  • Added support for Until Nodes:
    • URCaps can create and insert Until Nodes into the Program Tree.
    • URCaps can read and change the configuration of Until Nodes.
    • See the new ‘domain.program.nodes.builtin.configurations.untilnode’ Java package
    • See the new ‘UntilNode’ interface in the ‘domain.program.nodes.builtin’ Java package
  • Added support for single pulse configurations of Set Nodes:
    • URCaps can read the configuration of ‘Set’ program nodes which are configured to generate a single pulse on a Digital Outputput
    • URCaps can apply ‘Set’ node configurations which generates a single pulse on a Digital Outputput
    • See new ‘createSingleDigitalPulseConfig(…)’ methods in the existing ‘SetNodeConfigFactory’ interface (in the ‘domain.program.nodes.builtin.configurations.setnode’ Java package)
  • Added support for PolyScope Simulation Mode:
    • URCaps can query whether PolyScope is controlling the Real Robot or not.
    • See the new ‘RobotSimulation’ API interface in the ‘domain.robot’ Java package.
    • The new ‘RobotSimulation’ API interface is accessible through the existing ‘SystemAPI’ interface.
  • Made various updates and improvements to Javadoc
  • Improved error messages when an ‘IllegalStateException’ exception is thrown for the following:
    • When the ‘get()’ method is called on the contribution provider (‘ContributionProvider’ interface)’ in the implementation of the ‘buildUI()’ method in the ‘SwingProgramNodeView’ interface. The error message now says “The ProgramNodeContribution should not be used directly from within the buildUI() method, but rather from a user action. E.g. a button listener.”
    • When a method is invoked on the implementation of the ‘SwingProgramNodeView’ interface in the constructor for the node contribution, and the implementation of the invoked method calls the ‘get()’ method on the contribution provider. The error message now says “This ProgramNodeView should not be used directly from the ProgramNodeContribution constructor, but rather in openView() or from a user action (e.g., a button listener).”


  • Created new or updated URCap samples:
    • Added new ‘Move Until Detection Swing’ sample demonstrating how to use the new API features for the Distance and Until Nodes.
    • Updated the ‘Ellipse’ and ‘Ellipse Swing’ URCap samples:
      • Changed the configuration of Move Nodes from using the deprecated configuration factory to using the new configuration builder.
      • Updated the sample to demonstrate how to configure the TCP settings of a Move Node.
    • See section “10: URCap examples overview” in the URCap tutorial for more details about the samples
  • Made various improvements to the “10: URCap Examples Overview” section in the URCap tutorial.


RTDE Interface Improvements:
The number of BOOL, INT and FLOAT General Purpose Registers is doubled. Now, these registers can be used from an external client (e.g., URCaps) while one of the built-in Fieldbus interfaces (either Profinet or EthernetIP) is active. Both interfaces reserve the lower halves of the General Purpose Input Registers.

General Purpose Registers:

  • Input registers (128-BOOL, 48-INT, 48-FLOAT).
  • Output registers (128-BOOL, 48-INT, 48-FLOAT).
  • Naming the new GP registers continues after the lower half (input_int_register_24, …, input_int_register_47; output_int_register_24, …, output_int_register_47).
  • The new GP input registers are accessible for reading purposes through the same name in GP output recipe.
  • It is possible to reserve the newly added GP input and output registers of type BOOL individually (e.g., the recipe name: ‘input_bit_register_X’, where X: [64…127]) Created a new version of the RTDE client python library to support the reservation of the new ‘input_bit_register_X’ recipes.

See RTDE Guide for updated documentation.


  • Fixed issue where PolyScope became unresponsive if a URCap modified the data model or the child program sub-tree outside of an ‘UndoableChanges’ scope in the implementation of the overridden ‘isDefined()’ or 'getTitle() methods in the ‘ProgramNodeContribution’ interface. An ‘IllegalStateException’ exception will now be thrown if the data model or the sub-tree is modified within the scope of calls of any of these two methods, even if the changes are inside an ‘UndoableChanges’ scope.
  • Fixed issue where inserting Waypoint Nodes with default names (e.g., “Waypoint_1”, “Waypoint_2”) resulted in undesired linking of the inserted Waypoints when the language in PolyScope was Italian.
  • Fixed issue where the ‘closeView()’ method in the ‘ProgramNodeContribution’ interface never called (only ‘openView()’ got called) when a URCap Node was moved up or down in the Program Tree (through the PolyScope).
  • Fixed issue where building a URCap failed on some systems due to a Maven build error. The ‘newURCap.sh’ script (for creating new empty URCap projects) is fixed in the URCap SDK and all existing URCap samples are updated.

You can find the complete and general release notes here:
Release Notes 5.3
Release Notes 3.9

Happy development,
The Universal Robots+ Team