Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/MalkarovPark/IndustrialKit
The open source software platform for creating applications that enable the design and control of automated means of production.
https://github.com/MalkarovPark/IndustrialKit
swift-student-challenge wwdc23
Last synced: about 1 month ago
JSON representation
The open source software platform for creating applications that enable the design and control of automated means of production.
- Host: GitHub
- URL: https://github.com/MalkarovPark/IndustrialKit
- Owner: MalkarovPark
- License: apache-2.0
- Created: 2022-12-11T18:00:27.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-07-30T19:37:29.000Z (about 1 month ago)
- Last Synced: 2024-07-31T08:39:47.894Z (about 1 month ago)
- Topics: swift-student-challenge, wwdc23
- Language: Swift
- Homepage:
- Size: 701 KB
- Stars: 6
- Watchers: 5
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![IndustiralKit](https://user-images.githubusercontent.com/62340924/206910209-87495b62-2a9b-42c2-b825-85830a1d2623.png)
# IndustrialKit
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2FMalkarovPark%2FIndustrialKit%2Fbadge%3Ftype%3Dswift-versions)](https://swiftpackageindex.com/MalkarovPark/IndustrialKit) [![](https://img.shields.io/endpoint?url=https%3A%2F%2Fswiftpackageindex.com%2Fapi%2Fpackages%2FMalkarovPark%2FIndustrialKit%2Fbadge%3Ftype%3Dplatforms)](https://swiftpackageindex.com/MalkarovPark/IndustrialKit) ![Xcode 14.1+](https://img.shields.io/badge/Xcode-15.0%2B-blue.svg) [![SPM](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager)
IndustrialKit is an open source software platform for creating applications that enable the design and control of automated means of production. The framework provides modules that can be used out of the box, or extended and customized for more targeted use cases.
# Table of Contents
* [Requirements](#requirements)
* [Getting Started](#getting-started)
* [Robotic Complex Workspace App](#rcworkspace-app)
* [IndustrialKit](#industrialkit)
* [Workspace](#workspace)
* [Robot](#robot)
* [Tool](#tool)
* [Part](#part)
* [Connectors](#connectors)
* [Model Controllers](#model-controllers)
* [Functions](#functions)
* [Extensions](#extensions)
* [Ithi Macro Assembler](#ima)
* [IndustrialKitUI](#industrialkitui)
* [Object Scene View](#industrialkitui-objectsceneview)
* [Cards](#industrialkitui-cards)
* [Position View](#industrialkitui-positionview)
* [Position Control](#industrialkitui-positioncontrol)
* [Registers Selector](#industrialkitui-registersselector)
* [Charts View](#industrialkitui-chartsview)
* [State View](#industrialkitui-stateview)
* [Spatial Pendant](#industrialkitui-spendant)
* [Getting Help](#getting-help)
* [License](#license)The primary IndustrialKit framework codebase supports macOS, iOS/iPadOS, visionOS and requires Xcode 15.0 or newer. The IndustrialKit framework has a Base SDK version of 14.0, 17.0 and 1.0 respectively.
* [Website](https://celadon-production-systems.carrd.co/)
* [Documentation](https://malkarovpark.github.io/documentation/industrialkit)### Installation with SPM
CareKit can be installed via SPM. Create a new Xcode project and navigate to `File > Swift Packages > Add Package Dependency`. Enter the url `https://github.com/MalkarovPark/IndustrialKit` and tap `Next`. Select the `main` branch, and on the next screen, check off the packages as needed.
### [Robotic Complex Workspace App](https://github.com/MalkarovPark/Robotic-Complex-Workspace)
This sample demonstrates a fully constructed IndustrialKit app.
![]()
IndustrialKit is the overarching package that provides all need classes, structures, functions, enums for build industrial applications.
IndustrialKitUI provides some views and modifiers for use in design and data processing tasks.
Described by the *Workspace* class is the basis of the production complex, which consists of robots, tools, parts and controlled by a global program, presented as a sequence of blocks - algorithmic elements. Thus, this class contains four properties of an array of values of types of workspace objects (*WorkspaceObject* class) inherited such as *Robot*, *Tool*, *Part* and elements of the global control program with type *WorkspaceProgramElement*.
For arrays of objects, a standard set of functions is used, including adding, deleting, selecting, deselecting, searching by name. However, some features may not be available for some objects.
The *Robot* class describes an object of the production system that works with the representation of positions in space and is able to move its arm (manipulator) endpoint to them. The robot contains in its property an array of positional programs related to the *PositionsProgram* class.
The positional program contains an array of target positions of type *PositionPoint*. Position describes the location (*x*, *y*, *z*), rotation angles in it (*r*, *p*, *w*), type and speed of movement.
Robot can add, delete and edit its programs. There are functions for selecting and starting, pausing, resetting the program.
Other kinds of industrial equipment used in a technological complex is described by the *Tool* class. Tool can be either free-standing or attached to the endpoint of the robot manipulator.
Interaction with tools is organized by opcides and infocodes. The opcode is responsible for the executable technological operation - when a numerical value is set in the spectial property, the start of the operation associated with the code is initialized. The default value for this property is -1, which means no operation performed. When the operation is done, the value of the opcode is reset to this value.
Operational code sequences are contained in the programs array, the elements are the *OperationProgram* class, with a set of numeric code values with *OperationCode* class. Program management is similar to that of robots - there are functions for adding, deleting, selecting and performing.
Parts form the environment, such as tables, drives, safety fences, etc., and also represent objects with which the executing devices interact directly - an example is the parts assembled by robots. Described by the *Part* class.
This class has a set of properties that describe the appearance and physical properties of the part. A part model can be obtained both parametrically - from an array of lengths and the name of a geometric primitive, and by importing from a scene file.
Connectors are used to connect and control industrial equipment. They are divided into two subtypes - for switching robots and tools, described by the *RobotConnector* and *ToolConnector* classes, respectively.
Connectors of individual models are inherited from these base classes and have their own specific redefinitions of functions and variables.
Connection to the equipment is performed by the connect function, disconnection - disconnect. The connection state returns by Bool property. State of the equipment returns in array of dictionaries. They contain String name of the returned property and the value of Any type. The connection parameters are set in the corresponding array of structures.
This controllers are used to connect to and control robot and tool models in the rendered scene. Represented by *RobotModelController* and *ToolModelController* subclasses.
Also, controllers can change the model in accordance with the specified parameters.
Some functions that can be used both in framework and independently by developers.
* __mismatched_name__ – finds and updates mismatched name;
* __origin_transform__ – transforms input position by origin rotation;
* __apply_bit_mask__ – applies certain category bit mask int value for inputed node and all nested;
* __pass_robot_preferences__ – pass parameters between robots, such as origin location/rotation and working space scaling;
* __pass_positions_programs__ – pass positions programs, specified by names, between robots.
* __element_from_struct__ – universal function, that initializes the workspace program element by corresponding file struct data.
Added methods for Float and uses to convert radians to degrees – __to_deg__ and vice versa – __to_rad__.
Provided new methods for __SCNNode__ – __remove_all_constraints__ to remove constraints and reset default position, __remove_all_child_nodes__ to remove all child nodes from this node.
Extension for provide the __pngData__ missed method for __UIImage__ (UIKit).
Aliases for __NSImage__, __NSColor__ to use them as __UIImage__ and __UIColor__ respectively (AppKit).
# [Ithi Macro Assembler](https://celadon-production-systems.blogspot.com/2023/12/the-ithi-macro-assembler-ima-formalizes.html)
The built-in programming language of the IndustrialKit platform formalizes methods for robotic systems algoritmization and organizes unified connection and control of various robots and equipment tools.
![]()
The simple view for SceneKit nodes. Initalises only by SCNNode and has transparent background.
It has the functionality of double tap to reset camera position for macOS.
![]()
Used to display various objects. Can display a description with an image or a SceneKit scene model.
Can be used in conjunction with objects inherited from WorkspaceObject. The card initializer is passed the values returned by the object's *card_info* method.
The small card has no subtitle.
![]()
The program element card. Marked if corresponding program element is performing.
![]()
The register card allows edit the register value.
![]()
Provides editing of positions, for example for production objects in the workspace or target positions for robots.
The editing window contains two groups of three editable parameters:
* __Location__ with editable position parameters in a rectangular coordinate system - *x*, *y*, *z*;
* __Rotation__ with editable rotation angles at a point - *r*, *p*, *w*.Each editable parameter consists of a field and an associated stepper. The described sequence of groups can be displayed in a vertical, horizontal or some other stack.
![]()
Provides position editing with sliders. For location should set upper limits (lower limits have 0 value). Rotations are limited to the range -180º – 180º.
![]()
Pruposed for elements, registers from which they take data can be specified. This functionality is provided by the Registers Selector control. One or more registers can be selected.
![]()
Output of an arrays of __WorkspaceObjectChart__ charts, with the ability to switch between them by segmented picker (if count of arrays of arrays is more than one). The type of chart is determined by its properties.
![]()
Output statistics by the StateItem array. If the elements are nested within each other, they will be displayed in the corresponding disclosure group. Icons are defined by the name of avaliable [SF Symbols](https://developer.apple.com/sf-symbols/).
![]()
A universal UI control for programming and handling workspace and its constituent industrial equipment. Contents of this pendant vary depending on the specific selected object and its type – Workspace, Robot or Tool. Content of this control is blank if no suitable object is selected.
The spatial pendant allows you to set the sequence of program elements and control their performing.
![]()
# Getting Help
GitHub is our primary forum for IndustrialKit. Feel free to open up issues about questions, problems, or ideas.# License
This project is made available under the terms of an Apache 2.0 license. See the [LICENSE](LICENSE) file.