IndustrialKit – A Swift framework for design and control of robotic means of production

Hello, I would like to present to your attention a new open-source framework that enables bringing industrial capabilities into the Swift and Apple ecosystem.

Concept
IndustrialKit implements an object model of a robotic technological complex as a composition of means of production (ProductionObject) arranged within a unified space – Workspace. The means of production are represented by means of labor – Robot and Tool, and by objects of labor – Part, which are transformed by them in order to obtain a product:

Robot – an automatically controlled programmable manipulator that performs positioning and orientation of the end-effector in space. The robot operates with PositionPoint for the Tool Center Point (TCP), to which it moves its end-effector. Target positions can be organized into named sequences – PositionProgram.

Tool – a class of other robotic devices with arbitrary functionality. They are controlled via OperationCode and their named sequences – OperationProgram. The supported digital values of codes and their associated functions are defined by the device. Tools can also be mounted on the robot’s mechanical interface as an end-effector.

Programming of a Robotic Technological Complex (RTC) is carried out by means of IMA ProgramElement, organized into a ProductionProgram. The elements are of three types:

  • Performers – control robotic devices, both as individual operations and as programs.
  • Modifiers – form and transform data stored in the Workspace register memory, including mathematical computations and data acquisition from robotic devices.
  • Logic – control the execution flow of the production program and include conditional and unconditional branching.

For visualization and physical simulation of the robotic technological complex, IndustrialKit utilizes the RealityKit framework. Virtual means of production control their entities via ModelController and their specialized variants RobotModelController and ToolModelController.

IndustrialKit enables linking virtual robotic devices with real ones via Connector (RobotConnector and ToolConnector). When switching a virtual means of labor into Real mode and connecting it to a physical device, it becomes a digital twin of the latter, through which it can be controlled.

The digital twin can utilize a model controller, thereby transferring the state of the real device to the virtual entity.

Extensibility
Extensible support for types of means of production is achieved by creating subclasses of ProductionObject, as well as Robot, Tool, and Part. The same approach applies to model controllers and connectors.

Support for new device models within a single class of means of production is provided through a system of industrial modules, which can be declared in code or connected and imported from external sources.

Application
The framework serves as a foundation for:

  • RCWorkspace – a development environment for designing and controlling robotic technological complexes.
  • Industrial Builder – an environment for configuring and deploying production systems.
  • ABB App – a simple application for ABB robot handling.

These applications demonstrate the use of IndustrialKit as a platform for constructing engineering tools for production system design.

Wrap Up
IndustrialKit tutorials, detailed information about our Swift-based industrial developments and their applications, as well as reference materials and our scientific activity in industrial robotics, can be found on the website.

I would appreciate feedback from the community, particularly regarding API design, system modeling abstractions and architectural decisions.

9 Likes

Interesting, I see some papers linked from your site: is there any video of a physical system running this Swift code, whether in R&D or production? Would make for a cool demo :grinning_face:

1 Like

On regular iPhone is hard to read section Sience:

A problem repeatedly occurred on "https://celadon-

production-

systems.blogspot.com/p/scien

ce.html".

Jumps, reloads and thtows an error

We've updated the page, you can check it again.
If you still experience issues accessing the scientific materials, please use the following google drive folder link instead.

Yes, I do have recordings of operation on lab robotic cells – including demonstration from the defense of my bachelor's thesis, WorldSkills competitions and current tests on an ABB robot with force-torque sensing.

2 Likes

Nice, watched all three videos, do you use Swift only on a Mac to remotely control robotic hardware or do you run any Swift on the robotic arms too? Just wondering how much of your software stack is Swift and if you have to mix in any other languages for your development too.

I assume you have some 3D world model and other planning subsystems, all that written in Swift? I hope you have not fallen for the neural net hype and do not use those for anything beyond some sensing.

1 Like

As for the software stack... I use Swift on macOS and iPadOS, while the robot itself runs the counterpart of the connector written in its native language (for example, RAPID for ABB, TP/Karel for FANUC, etc.). The on-robot-connector communicates with the on-mac-connector via a protocol that depends on the specific robot – typically Ethernet + HTTP/HTTPS.

The on-mac-connector itself is simply a subclass of the Connector class with its own implementation of connection functions and can therefore be directly used within an IndustrialKit application (Swift).

Yes, Swift is used across all existing and planned IndustrialKit subsystems, with one exception – external modules that provide extensible support for additional means of production and math functions and can be connected to a running application without recompilation. The ExternalModelController and Changer functions in such modules are implemented in JS.

For constructing the 3D world model of the robotic complex (including visualization and physical simulation), RealityKit (previously SceneKit) is used.

2 Likes