Actin 6.4.0 Release Notes

2022 January 18

Energid is pleased to present Actin 6.4.0.

New Features

Actin Studio

Added actinStudio

actinStudio will replace actinViewer in Actin 7.0. It was added in Actin 6.4 to provide a transition to Actin 7.0.

Actin Viewer

Added a 3D View Cube to Actin Render Windows

The ViewCube is a cube-shaped widget placed in a corner of the window which will work as a 3D orientation indicator and controller. When acting as an orientation indicator, the ViewCube turns to reflect the current view direction as the user re-orients the scene using other tools. When used as an orientation controller, the ViewCube can be clicked on the faces, edges, or corners to easily orient the scene to the corresponding view. This will enable the users to quickly orient the virtual 3D environment as needed.


Added Options to Publish Control Word of CiA402 Servo to Data Store.

The CiA402 servo will publish control word value to the data store if the user assigns names to the corresponding elements in CiA402 servo's XML description.


QML Client for Jogging gRPC Service

A new JoggingClient QML component has been added to Actin Extensions to provide a QML interface to the Actin Jogging gRPC Service.

Motion Script

Add EcScript try

This command is used to try running a script and to handle the error if neccessary.

Command format: (try <try_script> <except_script>)

The command will run the <try_script> first, and if the <try_script> fails, it will run the <except_script>. If both scripts fails, the command will return FAILED. Otherwise, it will return SUCCEEDED.

Expand EcScript move_pose

New format: (move_pose <manip_id:u32> <ee_set_id:u32> <ee_id:u32> <target_pose:pose> (<speed_factor:real> <accel_factor:real>)) Position tolerance is not mandatory any more in move_pose. If no tolerance is provided, a default position tolerance EcBIG is used. From the user point of view, this command just sets the related parameters and returns immediately.

Add a Series of EcScript Commands exists_data_store_

Command syntax: :bool (exists_data_store_<type> <key:string> <path:string>) This command checks whether a data store element of <type> (e.g. bool/u32/real/u32_vec/real_vec/string/trans/rot/pose) with <key> and <path> exists in the data store. If such element exists, it returns TRUE; otherwise, FALSE.


Various New QML Components and Utilities

The following new QML components have been added to Actin QML:

  • Ec.Qml.QmlCore
    • ClipboardProvider: read/write interface to application clipboard
    • TextDocumentInfo: read/write interface to modified property of QML TextDocument
  • Ec.Qml.QmlFoundation
    • CoordSysXFormValue: value type analog of CoordSysXForm QML component
  • Ec.Qml.QmlActinRender
    • RenderTcpFrames: renders tool offset frames for stated system end-effectors
  • Ec.Qml.QmlExperimental
    • EcScriptSyntaxHighlighter: applies ECScript syntax highlighting to given QML TextDocument

Also, the following new utility methods have been added to the Ec.Qml.QmlCore QML module:

  • EcQt.actinVersion(): get major, minor, and patch Actin version numbers
  • EcQt.expandEnvStrings(text): perform environment variable expansion on given string
  • EcQt.readTextFile(callback, url): asynchronously read data from given text file
  • EcQt.systemFont(type): get system-appropriate font for given type case
  • EcQt.writeTextFile(callback, content, url): asynchronously write data to given text file

And the EcQmlCallbackDelegate class have been moved from the qmlExperimental library to qmlCore. (For backwards compatibility, a forwarding header for the class has been added to qmlExperimental.)

Finally, the children property of the NodeTraversalFilter QML component (in Ec.Qml.QmlExperimental) has been renamed filteredNodes to avoid shadowing the children property from its base component osg.Group.

QML Client for Process Manager gRPC Service

A new ProcessManagerClient component has been added to Actin QML to provide a QML interface to the Actin Process Manager gRPC Service.


Actin Viewer

Update Speed Controls to Correspond Mockups

Speed Factor value edit controls in the Active Control Parameters Plugin dock widget toolbar were simplified to match GUI design mockups. Removed labels "1%" and "100%" and added the "%" suffix to the spin box.

Update Tab Menu UI to Correspond Mockups

Tab Menu background color updated for the whole bar width. Removed borders between tabs. Increased icon size for each tab.

Missing Border Paddings in Ribbon Groups

Added 24-pixel width padding to both left and right borders of the Ribbon group.

Look and Feel Improvements

Updated spacing, colors, and style elements in certain plugins

Improve the Default Background Color for actinViewer

The default background color was changed to better fit the style for actinViewer

Updated Icons

Updated icons related to dynamic simulation features

Active Control Parameters Bottom Bar Control Widgets Missing Spacing

Added spacing between widgets in Active Control Parameters Bottom Bar.

Optimize Widget Sizes

Minimized sizes of Friction Properties Widget and Joint Configuration Dialog.

Add Empty State to Recent Files Table in Welcome Screen

Added empty state to recent files table in Welcome Screen. When there are no recently opened files special message is displayed.

Improvement While Saving Changes in MotionScriptPlugin

The short cut key usage for saving (Ctrl+S) changes inside motion Script editor is enabled. User can save the changes while editing scripts using Ctrl + S keys. It happens only if the editor has focus.

Update Home Screen for Actin Viewer

Updated Home Screen for Actin Viewer to correspond mockups. Removed all tabs except File, status bar, Active Control Parameters Bottom Bar when a file is not opened.

Fixed Dragger Size

The size of the dragger remains same while zooming in and zooming out.


New EcLabelPool Data Accessor Method

A new method labelIndexMap() has been added to EcLabelPool to provide direct read-only access to the m_LabelIndexMap data member. The existing methods usedLabels() and usingLabels(), which provided only indirect access to this data member, have been marked deprecated.

Optimization of EcLabelPool Memory Usage

The EcLabelPool class, which maintains the manipulator and link labels used by a stated system, has been updated to use Boost flat containers (rather than std tree-based containers) to reduce the amount of heap memory allocations whenever the label pool grows.

Add Method to Check if an EE Supports Relative Mode

Added a new virtual method to EcEndEffector for derived types to indicate whether or not the type supports relative end effector mode. This is purely informative for callers and/or guis to check and inform the user.

Improvements to Ec::indices

The Ec::indices() utility in "foundCore/ecRange.h" has been updated with the following improvements:

  • Protection against undefined behavior due to signed integer overflow.
  • Generalization (via new Ec::range() utility) to ranges starting with values other than zero.
  • Full-featured iterator (Ec::RangeView::iterator) that can be used with STL and Boost container adaptors and iterator algorithms.



If EC_MANGLE_SPDLOG is set to true, the third-party dependency library spdlog will be patched during the configure-time build to change the namespace "spdlog" to "ecspdlog". This allows Actin to be used in customer environments where the customer also uses their own version of spdlog.

EC_MANGLE_SPDLOG is set to OFF by default for all platforms except Debian 10, which defaults to ON. This means the Debian 10 release binaries ship with the spdlog namespace mangled. This change should be transparent to customers.

Motion Script

Stricter Definition of Script Executor State Entry/Exit Callbacks

The PRE_ENTRY and POST_EXIT event hooks for EcMotionScriptExecutor, as well as the associated beforeEntry and afterExit RCF invokes for EcControlTaskMotionScriptExecution, did not conform to best practices for state machines and were largely redundant with the ON_TRANSITION event hook (and onTransition RCF invoke).

The PRE_ENTRY hook and beforeEntry invoke have been renamed to POST_ENTRY and onEntry, respectively. (The old names have been preserved as deprecated aliases.) The hook now executes immediately after a script executor state has been entered, rather than immediately before.

Likewise, the POST_EXIT hook and afterExit invoke have been renamed to PRE_EXIT and onExit, respectively. (The old names have been preserved as deprecated aliases.) The hook now executes immediately before a script executor state exits, rather than immediately after.


State Filtering for StatedSysManipFilter

The StatedSysManipFilter QML component has been updated to support filtering EcManipulatorSystemState values, as well as EcStatedSystem instances, by manipulator label. This allows the user to obtain the original stated system and associated state updates from a single source and perform all filtering within QML. (Prior to this update, the unfiltered system would need to be obtained from one source and the filtered state updates from another source.)


Added Actin Version Number and Build Number to actinRcf Output

The actinRcf application will now show the Actin version number and build number at the beginning of the console output.

The runMotionScript task now prints the path and update callback id if the script has parse errors.

Resolved Issues

Over the course of this release we have resolved a number of issues. We are including an overview of the highest profile issues that have been fixed for Actin 6.4.0.

  • Fix Qhull Dependency for Installers
  • Fix a Bug in S Profile Joint Trajectory Where 8 Phases Were Planned
  • Release Memory for Stated System Copy After Path Planning Is Completed
  • Check for Extraneous Roots in S-Curve Tool
  • Move_pose With xEE Does Not Converge
  • Use EcMath Methods in EcMotionScriptReal approxEq
  • Fix Parsing With Different Line Endings
  • Fix Bug in EcJointLimitConstraintSolver for Floating Base
  • Fix Derefence of Null Pointer
  • Fix Bug Introduced in #1592
  • Buffered Motion Does Not Come to Full Stop
  • Fix Header Extension Consistency
  • Cannot Disable CiA402 Servo Slave When It Running in IP Mode
  • Acontis Ethercat Errors
  • Fix Warning in EcPositionControlSystem20::calculateVelocityState
  • Hot Fix of Rrt_connect_plan for UTRC
  • Related Issue of Actin_core#1920
  • Base Pose Should Be Interpolated in Extended Modifier
  • Time Delay in Receiving Executor State
  • Build Error Due to Missing Include
  • ActinRcf Doesn't Return the License on Exit
  • Fix qmlSamplePlugin
  • Add Thread Safety to EcXmlObjectQWrapper
  • activeControlParam Widgets Go Blank When the Current Manipulator Is Deleted
  • ManipConfigPlugin Ee Placements Not Updating
  • Creating System Simulation From Position Control System Uses Hardcoded Value for Time Step
  • Import and Export for Selected Manipulator Not Working in Control System Dialog
  • Some Plugin UI Remains Open on File Close
  • Control Descriptor UI - No Option for Fixed Base
  • Attachment UI - Seems to Ignore Additions
  • actinViewer Crashes in 6.4 After Exporting Twice in cameraPlugin
  • Actin Viewer - Use of Shift Key Anywhere Activates Grabber Guide Mode
  • Actin Viewer - Joint Configuration Data Entry Requires Radians Input, but Displays Degrees
  • EcScript : Wait Required Before Changing Ee_set in ActinViewer
  • Import Control System, Double Click on Control Descriptor Crashes actinViewer
  • Articulated Manipulators Are Not Dynamically Simulated in 6.3 and Above
  • Control Parameters Plugin Control Descriptor Empty
  • Deprecated Warnings Repeatedly Printed
  • Actin Studio/Viewer Crashes While Changing Diffuse Color
  • Manipulator Dropdown - Names Not Updated After Manip Name Change
  • Fix Splash Actin Studio Screen - Empty State
  • Editing of Numeric Fields in Property Editor in Shape Primitive Plugin Is Not Correct
  • Modals Have Padding That Shouldn't Be
  • Cannot Add Manipultor Through the Manipulator Combination Plugin
  • Fix the Data Plot Update Issue
  • ASAN Crash Deleting a Manipulator
  • Plotting Data Makes ActinViewer Not Responding
  • Fix the Resets Default Home Pov Issue in viewCubePlugin
  • Scale Dialog -Title
  • Actin Viewer - Control Description Editor Should Not Use Spinners for Floating Point Value Entry.
  • manipulatorCombinationPlugin Not Working
  • Move jointControllerPlugin and linkInteractionsPlugin Button to Model Tab
  • Control Description Editor Spacing
  • File Menu Should Have an Exit Menuitem
  • State Dialog Expands Weirdly on First Startup
  • Fix the Issue With Dataplots
  • Move Shape Widget in shapePrimitivePlugin Not Accepting Move
  • Dragger Is Not Being Displayed When We Select a Manipulator and Click Move
  • Actin Viewer UI - Widget Title Inconsistent - Edit Visible Shapes
  • activeControlSystemParam Plugin Toolbar Not Shown if We Load actinViewer With Command Line Argument --noautoloadPlugins
  • Control Parameters Plugin Doesnt Show Manipulators or Control Descriptors
  • Dragger Move Dockwidget Issue