|
Maki
Formally verfied low-code orchestration
|
KODA is a domain-specific language (DSL) for modelling the structure, behaviour, and data of robotic systems. It forms the underlying modelling language of MAKI and provides a representation that is independent of a particular execution or verification technology.
A KODA model describes a robotic application in terms of reusable capabilities, tasks, data, and behavioural flows. These models can then be processed by different backends to generate executable implementations, verification models, or other artefacts.
MAKI provides a visual environment for creating and working with these models, while KODA provides their textual representation and compiler infrastructure.
A KODA application is built from a few of concepts:
Together, these concepts allow the structure, behaviour, and data of a robotic application to be represented in a single model.
Capabilities describe functionality that can be provided by a robot or one of its components.
For example, a navigation capability may expose an operation for moving to a position:
Capabilities describe the interface expected by a task rather than a specific robot implementation. This allows tasks to be reused with different systems that provide compatible capabilities.
See koda_capabilities for more information.
Tasks describe application-level behaviour by combining capabilities.
A task declares the capabilities it requires together with its parameters, events, local data, and behavioural strategy.
For example:
The task is independent of the concrete implementations of Drive, Vision, and Grip. Those dependencies can be bound to components of the target robotic system.
See koda_tasks for more information.
The behaviour of a task is defined using flows.
Flows compose capability calls and other flows using orchestration constructs. A simple sequence uses the --> operator:
More complex behaviour can be constructed using reusable flows and control-flow constructs such as:
For example, a reusable flow can isolate part of a larger behaviour:
This keeps task behaviour compositional while allowing exceptional behaviour such as errors and aborts to be handled explicitly.
See koda_flows for more information.
KODA models can define and exchange structured data independently of the underlying middleware representation.
The type system contains built-in types and allows project-specific types to be defined and reused throughout a model. Types can be used by task parameters, capabilities, events, and shared data.
This allows behavioural orchestration to depend on explicitly modelled data rather than on backend-specific messages or implementation details.
See koda_types for more information.
KODA properties describe requirements over observable system behaviour.
For example:
Properties are expressed independently of a particular model checker. A verification backend can translate them into the formalism required by its target technology.
For example, a backend targeting nuXmv can translate supported properties into LTL while generating the corresponding state-machine model from the same KODA representation.
See KODA Property Definitions for the complete property notation.
KODA is designed to separate application models from the technologies used to execute or analyse them.
The compiler transforms KODA source models into an intermediate representation that can be consumed by different backend plugins:
This allows the same KODA model to support multiple workflows. An execution backend can generate an implementation for a robotic system, while a verification backend can generate a formal model for analysing properties of the same behaviour.
See koda_codegen for more information.
MAKI and KODA serve complementary roles.
KODA defines the modelling concepts, textual language, compiler, and intermediate representation.
MAKI provides the graphical development environment used to construct and work with KODA models.
A model created visually in MAKI therefore has the same underlying concepts as a textual KODA model. This makes it possible to combine low-code modelling with textual editing, static analysis, code generation, and formal verification.
The KODA documentation is divided into the following sections: