openapi: 3.1.0
info:
title: Wandelbots NOVA API
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
description: |
Interact with robots in an easy and intuitive way.
contact:
name: Copyright (c) 2025 Wandelbots GmbH
url: https://www.wandelbots.com
version: 2.5.0
servers:
- url: /api/v2
security:
- BearerAuth: []
tags:
- name: System
description: Endpoints for system-level operations, configuration, and status.
- name: Cell
description: API for managing and monitoring individual robot cells.
- name: Controller
description: Operations related to robot controllers within a cell.
- name: Controller Inputs/Outputs
description: Access and manage controller I/O interfaces and data.
- name: BUS Inputs/Outputs
description: Endpoints for bus-based I/O communication and management.
- name: Motion Group
description: Manage and monitor robot motion groups and their states.
- name: Motion Group Models
description: Access models describing robot motion groups and their properties.
- name: Kinematics
description: Endpoints for robot kinematic calculations and queries.
- name: Trajectory Planning
description: Plan and validate robot movement trajectories.
- name: Trajectory Execution
description: Execute and monitor robot trajectory operations.
- name: Trajectory Caching
description: Manage cached robot trajectories for faster execution.
- name: Jogging
description: Endpoints for manual or incremental robot movement (jogging).
- name: Program
description: Manage and execute robot programs and workflows.
- name: Virtual Controller
description: Simulate and interact with virtual robot controllers.
- name: Virtual Controller Inputs/Outputs
description: Access I/O data for virtual robot controllers.
- name: Virtual Controller Behavior
description: Configure and monitor virtual controller behaviors.
- name: Application
description: Endpoints for managing robot applications and their lifecycle.
- name: Store
description: Manage persistent storage of robot-related data and objects.
- name: Store Object
description: Access and manage individual objects in the robot store.
- name: Store Program
description: Store and retrieve robot programs in persistent storage.
- name: Store Collision Components
description: Manage collision components used for robot safety and planning.
- name: Store Collision Setups
description: Configure and manage collision setups for robot operations.
- name: License
description: Endpoints for license management and activation.
- name: Version
description: Retrieve the current version of the NOVA API.
- name: Session
description: Endpoints for retrieving authenticated user session information.
paths:
/cells:
get:
summary: List Cells
description: |-
**Required permissions:** `can_access_system` - View system status and metadata
___
List all deployed cell names.
If no cells are deployed, an empty list is returned.
operationId: listCells
x-scope: can_access_system
tags:
- Cell
responses:
'200':
description: A Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/NameList'
post:
summary: Add Cell
description: |-
**Required permissions:** `can_manage_cells` - Create, update, or delete cells
___
Deploy an entire cell with all its resources.
A cell can be used to deploy a robot controller, one or more robots, as well as custom applications.
Refer to the [Wandelbots NOVA documentation](https://docs.wandelbots.io/latest/setup-cell) for more information.
operationId: deployCell
x-scope: can_manage_cells
tags:
- Cell
parameters:
- $ref: '#/components/parameters/Timeout'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Cell'
examples:
default:
$ref: '#/components/examples/DefaultCell'
responses:
'200':
description: The creation was successfully completed.
'202':
description: The creation was initiated.
'403':
description: This operation is not allowed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: A cell with this name already exists.
/cells/{cell}:
get:
summary: Configuration
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
List all cell resources.
operationId: getCell
x-scope: can_access_system
tags:
- Cell
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/Cell'
'404':
$ref: '#/components/responses/NotFound'
put:
summary: Update Configuration
description: |
**Required permissions:** `can_manage_cells` - Create, update, or delete cells
___
Update the definition of the entire cell.
> **NOTE**
>
> This endpoint replaces the full cell configuration and is not a partial update.
> To change only one field:
> 1. Get the current configuration via [Cell > Configuration](#/operations/getCell).
> 2. Send the full configuration with your intended changes via [Cell > Update Configuration](#/operations/updateCell).
Omitting existing sections may reset or remove their current configuration.
operationId: updateCell
x-scope: can_manage_cells
tags:
- Cell
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Timeout'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Cell'
examples:
default:
$ref: '#/components/examples/DefaultCell'
responses:
'200':
description: The update was successfully completed.
'202':
description: The update was initiated.
'400':
description: The provided parameters are invalid
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: This operation is not allowed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
$ref: '#/components/responses/NotFound'
delete:
summary: Delete Cell
description: |-
**Required permissions:** `can_manage_cells` - Create, update, or delete cells
___
Delete an entire cell.
operationId: deleteCell
x-scope: can_manage_cells
tags:
- Cell
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Timeout'
responses:
'200':
description: Deletion was successfully completed.
'202':
description: Deletion was initiated.
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/status:
get:
summary: Service Status
description: |-
**Required permissions:** `can_access_system` - View system status and metadata
___
List the status of all cell resources.
operationId: getCellStatus
x-scope: can_access_system
tags:
- Cell
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceStatusResponse'
'404':
$ref: '#/components/responses/NotFound'
put:
summary: Operating State
description: |-
**Required permissions:** `can_manage_cells` - Create, update, or delete cells
___
Deactivate or activate the services of a cell.
operationId: setCellStatus
x-scope: can_manage_cells
tags:
- Cell
parameters:
- $ref: '#/components/parameters/Cell'
- in: query
name: operating_state
required: true
schema:
$ref: '#/components/schemas/OperatingState'
description: Set state of the cell. Active or inactive.
responses:
'202':
description: The update was initiated.
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/update:
put:
summary: Update Cell Version
description: |
**Required permissions:** `can_manage_cells` - Create, update, or delete cells
___
Update the Foundation chart version for a single cell based on a release channel.
The resulting version is capped at the current system version.
operationId: updateCellVersion
x-scope: can_manage_cells
tags:
- Cell
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCellVersionRequest'
responses:
'202':
description: The update was initiated.
'400':
description: The provided parameters are invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
$ref: '#/components/responses/NotFound'
get:
summary: Check Cell Update
description: |
**Required permissions:** `can_manage_cells` - Create, update, or delete cells
___
Check if a more recent Wandelbots NOVA version is available for the cell.
Updates greater than the system version are ignored.
operationId: checkCellVersionUpdate
x-scope: can_manage_cells
tags:
- Cell
parameters:
- $ref: '#/components/parameters/Cell'
- name: channel
in: query
required: true
schema:
$ref: '#/components/schemas/ReleaseChannel'
responses:
'200':
description: An update is available
content:
text/plain:
schema:
type: string
description: The Wandelbots NOVA version.
example: 24.1.0
'204':
description: No update available
/cells/{cell}/controllers:
get:
summary: List Robot Controllers
description: |-
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
List the names of all deployed robot controllers.
operationId: listRobotControllers
x-scope: can_operate_controllers
tags:
- Controller
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/NameList'
post:
summary: Add Robot Controller
description: |
**Required permissions:** `can_manage_controllers` - Create, update, or delete robot controllers
___
Add a robot controller to the cell.
operationId: addRobotController
x-scope: can_manage_controllers
tags:
- Controller
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Timeout'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RobotController'
examples:
Abb:
$ref: '#/components/examples/AbbController'
Fanuc:
$ref: '#/components/examples/FanucController'
Kuka:
$ref: '#/components/examples/KukaController'
UniversalRobots:
$ref: '#/components/examples/UrController'
Virtual:
$ref: '#/components/examples/VirtualController'
Yaskawa:
$ref: '#/components/examples/YaskawaController'
responses:
'200':
description: The creation was successfully completed.
'202':
description: The creation was initiated.
'403':
description: This operation is not allowed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
$ref: '#/components/responses/NotFound'
'409':
description: A robot controller with this name already exists in the cell.
delete:
summary: Clear Robot Controllers
description: |
**Required permissions:** `can_manage_controllers` - Create, update, or delete robot controllers
___
Delete all robot controllers from the cell.
To replace all robot controllers in a cell, use this endpoint in combination with [addRobotController](#/operations/addRobotController).
operationId: clearRobotControllers
x-scope: can_manage_controllers
tags:
- Controller
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Timeout'
responses:
'200':
description: Deletion was successfully completed.
'202':
description: Deletion was initiated.
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}:
get:
summary: Robot Controller
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Get the configuration for a robot controller.
operationId: getRobotController
x-scope: can_operate_controllers
tags:
- Controller
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/RobotController'
'404':
$ref: '#/components/responses/NotFound'
put:
summary: Update Robot Controller
description: |
**Required permissions:** `can_manage_controllers` - Create, update, or delete robot controllers
___
Update the configuration of a robot controller.
Reconfigure certain options of a robot controller, or deploy a specific container image of a robot controller.
To update a virtual controller, the previous controller will be deleted and a new one created.
Changes to the configuration, e.g., TCPs, coordinate systems, mounting, are **not** transferred to the new robot.
> **NOTE**
>
> An update is not a reset. To do a reset:
> 1. Get the current configuration via [getRobotController](#/operations/getRobotController).
> 2. Delete the existing virtual robot controller via [deleteRobotController](#/operations/deleteRobotController).
> 3. Add a virtual robot controller with [addRobotController](#/operations/addRobotController).
operationId: updateRobotController
x-scope: can_manage_controllers
tags:
- Controller
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/Timeout'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RobotController'
examples:
Abb:
$ref: '#/components/examples/AbbController'
Fanuc:
$ref: '#/components/examples/FanucController'
Kuka:
$ref: '#/components/examples/KukaController'
UniversalRobots:
$ref: '#/components/examples/UrController'
Virtual:
$ref: '#/components/examples/VirtualController'
Yaskawa:
$ref: '#/components/examples/YaskawaController'
responses:
'200':
description: The update was successfully completed.
'202':
description: The update was initiated.
'404':
$ref: '#/components/responses/NotFound'
delete:
summary: Delete Robot Controller
description: |
**Required permissions:** `can_manage_controllers` - Create, update, or delete robot controllers
___
Delete a robot controller from the cell.
operationId: deleteRobotController
x-scope: can_manage_controllers
tags:
- Controller
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/Timeout'
responses:
'200':
description: Deletion was successfully completed.
'202':
description: Deletion was initiated.
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/apps:
get:
summary: List Applications
description: |
**Required permissions:** `can_access_apps` - View application configurations
___
List all GUI applications that have been added to a cell with [addApp](#/operations/addApp).
If the cell does not contain GUI applications, the list is returned empty.
operationId: listApps
x-scope: can_access_apps
tags:
- Application
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/NameList'
post:
summary: Add Application
description: |
**Required permissions:** `can_manage_apps` - Install, update, or remove applications
___
Install a basic, containerized web application to the cell to control robots with a customized frontend.
#### Prerequisites
- A Docker hub account or similar container registry account, with valid credentials.
#### Workflow
After adding the application to the cell, open the application on the Wandelbots NOVA home screen.
Read [build your application](https://docs.wandelbots.io/latest/developing-introduction) for more information.
#### Predefined environment variables
> **NOTE**
> - `NOVA_API`: The API endpoint accessible from within the application container.
> - `NATS_BROKER`: The NATS broker endpoint accessible from within the application container.
> - `BASE_PATH`: The application's root path, accessible at http://$host/$BASE_PATH
> - `CELL_NAME`: The name of the cell hosting the deployed application.
operationId: addApp
x-scope: can_manage_apps
tags:
- Application
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Timeout'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/App'
examples:
swagger-ui:
$ref: '#/components/examples/AppSwaggerUI'
responses:
'200':
description: The creation was successfully completed.
'202':
description: The creation was initiated.
'409':
description: An app with this name already exists in this cell.
delete:
summary: Clear Applications
description: |-
**Required permissions:** `can_manage_apps` - Install, update, or remove applications
___
Delete all GUI applications from the cell.
operationId: clearApps
x-scope: can_manage_apps
tags:
- Application
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Timeout'
responses:
'200':
description: Deletion was successfully completed.
'202':
description: Deletion was initiated.
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/apps/{app}:
get:
summary: Configuration
description: |
**Required permissions:** `can_access_apps` - View application configurations
___
Get the configuration for an active GUI application in the cell.
To update the configuration of a GUI application in the cell, use this configuration with [updateApp](#/operations/updateApp).
operationId: getApp
x-scope: can_access_apps
tags:
- Application
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/App'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/App'
'404':
$ref: '#/components/responses/NotFound'
put:
summary: Update Configuration
description: |-
**Required permissions:** `can_manage_apps` - Install, update, or remove applications
___
Update the configuration of a GUI application in the cell.
operationId: updateApp
x-scope: can_manage_apps
tags:
- Application
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/App'
- $ref: '#/components/parameters/Timeout'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/App'
examples:
swagger-ui:
$ref: '#/components/examples/AppSwaggerUI'
responses:
'200':
description: The update was successfully completed.
'202':
description: The update was initiated.
'400':
description: The provided parameters are invalid
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
$ref: '#/components/responses/NotFound'
delete:
summary: Delete Application
description: |-
**Required permissions:** `can_manage_apps` - Install, update, or remove applications
___
Delete a GUI application from the cell.
operationId: deleteApp
x-scope: can_manage_apps
tags:
- Application
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/App'
- $ref: '#/components/parameters/Timeout'
responses:
'200':
description: Deletion was successfully completed.
'202':
description: Deletion was initiated.
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/bus-ios:
get:
summary: Get Service
description: |-
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
Get deployed BUS inputs/outputs service.
operationId: getBusIOService
x-scope: can_operate_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/BusIOType'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
post:
summary: Add Service
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Add the BUS inputs/outputs service to the cell.
Starts a containerized service that enables BUS connections via the specified ethernet port.
operationId: addBusIOService
x-scope: can_manage_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Timeout'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BusIOType'
examples:
PROFINET:
$ref: '#/components/examples/ProfinetClientService'
PROFINET-Virtual:
$ref: '#/components/examples/ProfinetVirtualService'
MODBUS-Server:
$ref: '#/components/examples/ModbusServerService'
MODBUS-Client:
$ref: '#/components/examples/ModbusClientService'
MODBUS-Virtual:
$ref: '#/components/examples/ModbusVirtualService'
Snap7:
$ref: '#/components/examples/Snap7Service'
responses:
'200':
description: The creation was successfully completed.
'202':
description: The creation was initiated.
'403':
description: This operation is not allowed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
$ref: '#/components/responses/NotFound'
'409':
description: A BUS inputs/uutputs service already exists in the cell.
delete:
summary: Clear Service
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Remove the BUS inputs/outputs service from the cell.
operationId: clearBusIOService
x-scope: can_manage_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Timeout'
responses:
'200':
description: Deletion was successfully completed.
'202':
description: Deletion was initiated.
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/system/update:
put:
summary: Update Wandelbots NOVA version
description: |
**Required permissions:** `can_update_system` - Update system versions and services
___
Update the Wandelbots NOVA version and all attached services.
Sending this API Request will trigger an update of all NOVA services that are part of a cell.
Previous cells and cell configurations will remain on the instance.
If the update fails, the previous Wandelbots NOVA version is restored.
System updates only apply to cells without an explicit chart version. Pinned
versions are always preserved; setting `update_cells=false` pins unversioned
cells to the current system version before updating.
operationId: updateNovaVersion
x-scope: can_update_system
tags:
- System
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateNovaVersionRequest'
responses:
'200':
description: The update was triggered successfully.
'204':
description: No update available
'400':
description: An invalid request was provided.
'501':
description: This instance of Wandelbots NOVA cannot be updated.
get:
summary: Check update
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Check if a more recent Wandelbots NOVA Version is available.
operationId: checkNovaVersionUpdate
x-scope: can_access_system
tags:
- System
parameters:
- name: channel
in: query
required: true
schema:
$ref: '#/components/schemas/ReleaseChannel'
responses:
'200':
description: An update is available
content:
text/plain:
schema:
type: string
description: The Wandelbots NOVA version.
example: 24.1.0
'204':
description: No update available
/system/version:
get:
summary: Wandelbots NOVA Version
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Get the current Wandelbots NOVA version.
operationId: getSystemVersion
x-scope: can_access_system
tags:
- System
responses:
'200':
description: The operation was successful.
content:
text/plain:
schema:
type: string
description: The Wandelbots NOVA version.
example: 24.1.0
/system/status:
get:
summary: Wandelbots NOVA status
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Get the status of all system services.
operationId: getSystemStatus
x-scope: can_access_system
tags:
- System
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceStatusList'
/session:
get:
tags:
- Session
summary: Get current user session information
description: |-
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns
- session metadata,
- user identity,
- capabilities, and
- token lifetime.
When authentication and authorization are configured, the response reflects
the currently authenticated user.
On unmanaged instances (no authentication and authorization is configured),
a default anonymous session is returned with empty user
fields, no capabilities, and zero-value timestamps.
operationId: getSession
x-scope: can_access_system
security:
- BearerAuth: []
- {}
responses:
'200':
description: Session information resolved successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/SessionResponse'
'401':
description: Authentication is required or the token is invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Session access is forbidden.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
description: An internal error occurred during session resolution.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/system/diagnosis-package/zip:
get:
summary: Download Diagnosis Package
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Collects information on the current status of all NOVA services and exports them as a .zip file.
Includes information on all cells on the instance such as the service logs and virtual robot controllers.
From each cell the logs of all services are included, as well as the configuration of each connected controller to start virtual robots.
operationId: getDiagnosePackage
x-scope: can_access_system
tags:
- System
responses:
'200':
description: Diagnose package successfully created.
content:
application/zip:
schema:
type: string
format: binary
/experimental/system/network/status:
get:
summary: Network State
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
> **Experimental**
Get the current state of the network.
operationId: getNetworkState
x-scope: can_access_system
tags:
- System
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/NetworkState'
'404':
$ref: '#/components/responses/NotFound'
/experimental/system/network/interfaces:
get:
summary: Network Interfaces
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
> **Experimental**
Get the network interfaces of the system.
operationId: getNetworkInterfaces
x-scope: can_access_system
tags:
- System
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/NetworkInterfaces'
'404':
$ref: '#/components/responses/NotFound'
/experimental/system/network/arp-scan:
get:
tags:
- System
summary: Get ARP-Scan
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
> **Experimental**
Performs an address resolution protocol (ARP) scan on the specified interface/classless inter-domain routing (CIDR)
and returns all discovered devices on the network by CIDR notation.
operationId: getArpScan
x-scope: can_access_system
parameters:
- name: interface
in: query
schema:
type: string
description: |
Network interface to perform the ARP scan on.
example: eth0
- name: cidr
in: query
schema:
type: string
description: |
The CIDR notation of the network device.
- name: timeout
in: query
schema:
type: integer
description: |
Timeout for the ARP scan listen timeout after sending ARP requests, in milliseconds.
minimum: 100
default: 500
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ArpScanResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/system/configuration/resources:
get:
tags:
- System
summary: List Configuration Resources
description: |
**Required permissions:** `can_backup_system` - Create system backups
___
Retrieves a list of all available configuration resources for backup purposes.
operationId: listConfigurationResources
x-scope: can_backup_system
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigurationResourceArray'
examples:
DefaultCell:
$ref: '#/components/examples/CellDefault'
/system/configuration:
get:
tags:
- System
summary: Retrieve Configuration Backup
description: |
**Required permissions:** `can_backup_system` - Create system backups
___
Retrieves a configuration backup based on provided resource identifiers. If
an empty array of resources is provided, a backup for all
resources will be retrieved.
operationId: backupConfiguration
x-scope: can_backup_system
parameters:
- name: resources
in: query
style: form
explode: false
required: false
description: List of resource identifiers to include in the retrieval.
schema:
type: array
items:
$ref: '#/components/schemas/ConfigurationResourceId'
- $ref: '#/components/parameters/Metadata'
responses:
'200':
description: Successful response
headers:
X-Backup-Id:
description: Unique identifier of the backup.
schema:
type: string
format: uuid
content:
application/gzip:
schema:
$ref: '#/components/schemas/ConfigurationArchive'
'400':
description: Invalid configuration resources provided
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
tags:
- System
summary: Restore Configuration Backup
description: |
**Required permissions:** `can_restore_system` - Restore system backups
___
Restores a previously backed up configuration. If an empty array of
resources is provided, all resources from the backup will be restored.
operationId: restoreConfiguration
x-scope: can_restore_system
parameters:
- name: resources
in: query
style: form
explode: false
required: false
description: List of resource identifiers to restore. If empty, all resources from the backup will be restored.
schema:
type: array
items:
$ref: '#/components/schemas/ConfigurationResourceId'
requestBody:
description: Backup file stream containing the configuration to restore.
required: true
content:
application/gzip:
schema:
$ref: '#/components/schemas/ConfigurationArchive'
responses:
'200':
description: Successful response
'400':
description: Invalid configuration resources or backup file provided
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/system/configuration/status:
get:
summary: Retrieve Backup Status
description: |-
**Required permissions:** `can_backup_system` - Create system backups
___
Retrieves the status of a configuration backup. The status can only be requested for 5 minutes after backup creation. After 5 minutes, 404 is returned.
operationId: getConfigurationBackupStatus
x-scope: can_backup_system
tags:
- System
parameters:
- in: query
required: true
name: operation_id
schema:
description: Backup operation identifier
format: uuid
type: string
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/ConfigurationArchiveStatus'
'404':
description: Backup not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/license:
get:
tags:
- License
summary: Get license
description: |-
**Required permissions:** `can_access_license` - View license status
___
Get information on the license used with the Wandelbots NOVA instance, e.g., licensed product, expiration date, license status.
operationId: getLicense
x-scope: can_access_license
responses:
'200':
description: Current license information
content:
application/json:
schema:
$ref: '#/components/schemas/License'
'404':
description: No license found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
tags:
- License
summary: Activate license
description: |
**Required permissions:** `can_manage_license` - Manage license configuration
___
Activates a license using the provided license owner authentication token.
The refresh token is used to enable communication with the license provider without requiring user interaction.
operationId: activateLicense
x-scope: can_manage_license
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ActivateLicenseRequest'
responses:
'200':
description: The license was sucessfully activated
content:
application/json:
schema:
$ref: '#/components/schemas/License'
'403':
description: The provided license owner cannot be authenticated
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: No license found for the provided license owner
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
tags:
- License
summary: Deactivate license
description: |-
**Required permissions:** `can_manage_license` - Manage license configuration
___
Deactivates active license.
operationId: deactivateLicense
x-scope: can_manage_license
responses:
'200':
description: The license was sucessfully deactivated
/license/status:
get:
tags:
- License
summary: Get license status
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Get the license status.
- If `valid`, Wandelbots NOVA can be used.
- If `expired`, the license has to be renewed in order to use Wandelbots NOVA.
operationId: getLicenseStatus
x-scope: can_access_system
responses:
'200':
description: The license is valid
content:
application/json:
schema:
$ref: '#/components/schemas/LicenseStatus'
'403':
description: The license is expired
content:
application/json:
schema:
$ref: '#/components/schemas/LicenseStatus'
/motion-group-models:
get:
tags:
- Motion Group Models
summary: Motion Group Models
operationId: getMotionGroupModels
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns the list of supported motion group models.
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
type: string
description: The name of the motion group model.
'404':
description: Not found
content: {}
'500':
description: Internal server error
post:
tags:
- Motion Group Models
summary: Import Motion Group Model
operationId: importMotionGroupModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Imports a motion group model from a tar.gz archive and registers it as a new custom model.
The tar.gz archive must have been produced by the export endpoint.
requestBody:
required: true
content:
application/gzip:
schema:
type: string
format: binary
responses:
'200':
description: Motion group model imported and registered successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/MotionGroupModelDescription'
'400':
description: Invalid or malformed tar.gz archive.
content: {}
'409':
description: A motion group model with the specified name already exists.
content: {}
'500':
description: Internal server error
content: {}
/motion-group-models/{motion-group-model}/collision:
get:
tags:
- Motion Group Models
summary: Get Collision Model
operationId: getMotionGroupCollisionModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns the default collision link chain for a given motion group model.
See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported motion group models.
The default link chain is derived from 3D models and optimized for collision detection within NOVA.
The default link chain includes link shapes only. It does not include any attached components like wire feeders or sensors.
Attach additional shapes to the link reference frames by extending the link dictionaries before further use.
Additional shapes may overlap each other per link and may also overlap the respective link's default shape.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LinkChain'
'404':
description: Motion group model not found or collision data unavailable
content: {}
'500':
description: Internal server error
/motion-group-models/{motion-group-model}/glb:
get:
tags:
- Motion Group Models
summary: Download GLB Model
operationId: getMotionGroupGlbModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns the GLB asset for the specified motion group model.
See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported identifiers.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
responses:
'200':
description: GLB asset
content:
application/octet-stream:
schema:
type: string
format: binary
'404':
description: Motion group model or GLB asset not found
content: {}
'500':
description: Internal server error
content: {}
/motion-group-models/{motion-group-model}/usd:
get:
tags:
- Motion Group Models
summary: Download USD Model
operationId: getMotionGroupUsdModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns the USD scene model for the specified motion group model.
See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported identifiers.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
responses:
'200':
description: USD asset
content:
application/octet-stream:
schema:
type: string
format: binary
'404':
description: Motion group model or USD asset not found
content: {}
'500':
description: Internal server error
content: {}
/motion-group-models/{motion-group-model}/kinematic:
get:
tags:
- Motion Group Models
summary: Get Kinematics
operationId: getMotionGroupKinematicModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns the kinematics model (DH parameters) for the given motion group model.
See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported motion group models.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/KinematicModel'
'404':
description: Motion group model or kinematics not found
content: {}
'500':
description: Internal server error
/experimental/motion-group-models/{motion-group-model}:
get:
tags:
- Motion Group Models
summary: Export Motion Group Model
operationId: exportMotionGroupModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Exports the specified motion group model as a tar.gz archive.
The resulting tar.gz file can be imported on another system using the import endpoint.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
responses:
'200':
description: Motion group model tar.gz archive.
headers:
Content-Disposition:
schema:
type: string
description: Attachment filename, e.g. `attachment; filename="UniversalRobots_UR10e.tar.gz"`
content:
application/gzip:
schema:
type: string
format: binary
'404':
description: Motion group model not found.
content: {}
'500':
description: Internal server error
content: {}
post:
tags:
- Motion Group Models
summary: Copy Motion Group Model
operationId: copyMotionGroupModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Creates a copy of the specified motion group model and registers the copy under a new name as a custom model.
Both built-in base models and existing custom models can be copied.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CopyMotionGroupModelRequest'
responses:
'201':
description: Motion group model copied and registered successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/MotionGroupModelDescription'
'404':
description: Source motion group model not found.
content: {}
'409':
description: A motion group model with the specified name already exists.
content: {}
'500':
description: Internal server error
content: {}
delete:
tags:
- Motion Group Models
summary: Delete Motion Group Model
operationId: deleteExperimentalMotionGroupModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Deletes a custom motion group model.
Only custom models (where `is_custom` is `true`) can be deleted. Built-in base models cannot be removed.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
responses:
'204':
description: Motion group model deleted successfully.
'404':
description: Motion group model not found.
content: {}
'409':
description: The motion group model is a built-in base model and cannot be deleted.
content: {}
'500':
description: Internal server error
content: {}
/experimental/motion-group-models/{motion-group-model}/homejoints:
get:
tags:
- Motion Group Models
summary: Get Homejoints
operationId: getMotionGroupHomejoints
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns the default joint positions from which a virtual robot is started.
See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported motion group models.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Joints'
'404':
description: Not found
content: {}
'500':
description: Internal server error
/experimental/motion-group-models/{motion-group-model}/dynamic:
get:
tags:
- Motion Group Models
summary: Get Dynamics
operationId: getMotionGroupDynamicModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns the dynamics model (mass, center of mass, inertia, friction parameters) for the given motion group model.
See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported motion group models.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/DynamicModel'
'404':
description: Motion group model or dynamics not found
content: {}
'500':
description: Internal server error
content: {}
/experimental/motion-group-models/{motion-group-model}/limit:
get:
tags:
- Motion Group Models
summary: Get Limits
operationId: getMotionGroupLimitModel
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns the operation limits for the given motion group model.
See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported motion group models.
parameters:
- $ref: '#/components/parameters/MotionGroupModelParameter'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/OperationLimits'
'404':
description: Motion group model or limits not found
content: {}
'500':
description: Internal server error
/robot-configurations:
get:
tags:
- Robot Configurations
summary: List Robot Configurations
operationId: getRobotConfigurations
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns the identifiers of available robot configurations. A robot configuration represents a robot controller with one or more attached motion groups.
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
type: string
description: Name of the robot configuration.
'404':
description: Not found
content: {}
'500':
description: Internal server error
/experimental/system/network/controllers:
post:
tags:
- Robot Configurations
summary: Robot Controller Configurations
operationId: getControllerConfigFromArpScan
x-scope: can_access_system
description: |
**Required permissions:** `can_access_system` - View system status and metadata
___
Returns all robot controller configurations that match the provided [ARP scan result](#/operations/getArpScan).
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RobotControllerConfigurationRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/RobotController'
'404':
description: Not found
content: {}
'500':
description: Internal server error
/cells/{cell}/controllers/{controller}/description:
get:
tags:
- Controller
summary: Description
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Get description of a configured robot controller including a list of connected motion group identifiers.
Use [getMotionGroupDescription](#/operations/getMotionGroupDescription) to get more information about the motion group.
operationId: getControllerDescription
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ControllerDescription'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/free-drive-stream:
get:
tags:
- Controller
summary: Stream Free Drive
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
> Websocket endpoint
Sets the robot controller into freedrive mode and stays in freedrive until the websocket connection is closed by the client.
In freedrive mode, it is possible to move the attached motion groups by hand.
This is a blocking call. As long as the websocket connection is open, no other endpoint can control or move the robot.
> **DANGER**
>
> Danger caused by robot. Improper assessment by the integrator of the application-specific hazards can result in people being
> crushed, drawn in or caught due to the robot's complex movement sequences. Before opening the websocket, ensure that
>
> - The robot is in a safe state,
> - The right payload is set,
> - No humans or object are within the robot's reach or within the cell.
As long as the websocket connection is open you will get the current state of the robot system in the response in the specified `response_rate`.
If the activation failed, the returned status will return possible reasons for the failure.
Free drive mode is only available for robot controllers that support it, in particular cobots.
Use [listRobotControllers](#/operations/listRobotControllers) to check if the robot controller supports free drive mode.
operationId: streamFreeDrive
x-scope: can_operate_controllers
x-serverstream: true
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: response_rate
in: query
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: Update rate for the response message in ms. If not set 200ms are used.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RobotControllerState'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/ios/description:
get:
tags:
- Controller Inputs/Outputs
summary: List Descriptions
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Lists the input/output descriptions of the robot controller.
The input/output descriptions contain information like name, type and unit.\
Available inputs/outputs are defined by the robot controller\
Each input/output has a unique identifier.
- If no identifiers and no filters are specified in the request, all available inputs/outputs are retrieved by this endpoint.
- If a filter, e.g., `direction`, `value_type`, `group` is applied, only matching inputs/outputs are returned.
operationId: listIODescriptions
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: ios
in: query
schema:
type: array
description: |
Array of input/output identifiers to retrieve the descriptions for.
If empty or not provided, descriptions of all available inputs/outputs for the requested robot controller will be returned.
items:
type: string
- name: direction
in: query
schema:
$ref: '#/components/schemas/IODirection'
description: |
Return only inputs/outputs with the specified direction.
- name: value_type
in: query
schema:
$ref: '#/components/schemas/IOValueType'
description: |
Return only inputs/outputs with the specified value type.
- name: group
in: query
schema:
type: string
description: |
Return only inputs/outputs from the specified group.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListIODescriptionsResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/ios/stream:
get:
tags:
- Controller Inputs/Outputs
summary: Stream Input/Output Values
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
> Websocket endpoint
Continuously receive updates of input/output values via websocket.
Updates are sent in the update rate of the controller.
> **NOTE**
>
> If you request many values simultaneously, the request is likely to fail. The amount of values that can be streamed simultaneously depends on the specific robot controller.
> **NOTE**
>
> The inputs and outputs are sent in the update rate of the controller to prevent losing any values. This can lead to a high amount of data transmitted.
operationId: streamIOValues
x-scope: can_operate_controllers
x-serverstream: true
x-paramQuotingRequired: true
x-quotedParam: ios
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: ios
in: query
schema:
type: array
items:
type: string
description: |
Array of input/output identifiers to retrieve the values for.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/StreamIOValuesResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/ios/values:
get:
tags:
- Controller Inputs/Outputs
summary: Get Input/Output Values
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Retrieves the current values of inputs/outputs.
The identifiers of the inputs/outputs must be provided in the request.
Request all available input/output identifiers via [listIODescriptions](#/operations/listIODescriptions).
operationId: listIOValues
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: ios
in: query
schema:
type: array
items:
type: string
description: |
Array of input/output identifiers to retrieve the values for.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListIOValuesResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Controller Inputs/Outputs
summary: Set Output Values
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Set the values of outputs.
All available output identifiers and possible value ranges can be requested via [listIODescriptions](#/operations/listIODescriptions).
The call will return once the values have been set on and accepted by the robot. This can take up to 200 milliseconds.
> **NOTE**
>
> Do not call this endpoint while another request is still in progress. The second call will fail.
operationId: setOutputValues
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
content:
application/json:
schema:
description: List of output values to set.
type: array
items:
$ref: '#/components/schemas/IOValue'
example:
- io: io1
value: true
value_type: boolean
- io: io2
value: '42'
value_type: integer
- io: io3
value: 3.14
value_type: float
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
/cells/{cell}/controllers/{controller}/ios/wait-for:
post:
tags:
- Controller Inputs/Outputs
summary: Wait For
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Wait until an input/output reaches a certain value.
This call returns as soon as the condition is met or the request fails.
The `comparison_type` value is used to define how the current value of the input/output is compared with given value.
Only set the value that corresponds to the `value_type` of the input/output.
See [listIODescriptions](#/operations/listIODescriptions) for more information.
**Examples**
1. Wait until analog input `AI_1` < 10:
```
io: "AI_1"
comparison_type: "COMPARISON_LESS"
value: 10
```
2. Wait until analog input `AI_2` > 5.0:
```
io: "AI_2"
comparison_type: "COMPARISON_GREATER"
value: 5.0
```
3. Wait until digital input `DI_3` is true:
```
io: "DI_3"
comparison_type: "COMPARISON_EQUAL"
value: true
```
operationId: waitForIOEvent
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WaitForIOEventRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
type: boolean
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/mode:
put:
tags:
- Controller
summary: Set Default Mode
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Switch between monitor and control usage as default for a robot controller.
Monitoring mode is used to read information from the robot controller and control mode is used to command the robot system.
As long as the robot controller is connected via network, monitoring mode is always possible.
To switch to control mode
the robot controller must be in `automatic` or `manual` operating mode and safety state `normal` or `reduced`. If the robot controller is in `manual` operating mode,
you have to manually confirm the control usage activation on the robot control panel. This manual confirmation can't be replaced with this API.
Without manual confirmation the robot controller will stay in monitor mode.
The robot system will try to activate the required operation mode for the requested usage unless no active call requires a different mode.
> **NOTE**
>
> `setDefaultMode` enables the robot controller to stay in control mode to keep the motors activated.
> This allows for faster execution of sequential movements as no mode switches are required.
> **NOTE**
>
> Some robot controllers prevent the external activation of automatic operating mode. In this case, changing the operating mode manually at the robot controller is mandatory.
> **NOTE**
>
> The current operation mode and safety state can be requested via [getCurrentRobotControllerState](#/operations/getCurrentRobotControllerState).
If a mode change is not possible, the response lists reasons for the failed change.
operationId: setDefaultMode
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: mode
in: query
required: true
schema:
$ref: '#/components/schemas/SettableRobotSystemMode'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/state:
get:
tags:
- Controller
summary: State
description: |-
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Get the current state of a robot controller.
operationId: getCurrentRobotControllerState
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RobotControllerState'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/state-stream:
get:
tags:
- Controller
summary: Stream State
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
> Websocket endpoint
Receive updates of the state of a robot controller.
The stream can be opened before the controller is registered.
To register a controller, call [addRobotController](#/operations/addRobotController).
While connecting, the stream sends initialization updates.
Once the controller reaches `MODE_MONITOR`, it sends controller state updates.
operationId: streamRobotControllerState
x-scope: can_operate_controllers
x-serverstream: true
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: response_rate
in: query
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
Update rate for the response message in ms. If not, controller cycle rate is used.
- name: add_controller_timeout
in: query
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
Timeout for adding a new controller in ms using [addRobotController](#/operations/addRobotController).
Default: 1 second.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RobotControllerState'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/virtual-robot-configuration:
get:
tags:
- Controller
summary: Virtual Controller Configuration
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Receive data to configure a virtual robot controller based
on another controller. This can be used to create a virtual clone of a
specific physical robot.
When adding a virtual controller, use the Virtual configuration variant of
[addRobotController](#/operations/addRobotController) and pass the content string from
this endpoint as the `json` field. Omit the `type` field that selects a preset configuration,
which is not required when providing a complete configuration.
operationId: getVirtualControllerConfiguration
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/VirtualRobotConfiguration'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/coordinate-systems:
get:
tags:
- Controller
summary: List Coordinate Systems
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Lists all specifications of coordinate systems from robot controllers.
Use parameter `orientation_type` to get the orientation part of the transformation offset of the coordinate system returned
in the requested orientation notation.
If parameter `orientation_type` is not set, the orientation part of the transformation offset of the coordinate system
is returned in rotation vector notation.
The coordinate systems from the robot controller are loaded when the motion group associated with the coordinate system is activated.
With deactivation of the motion group, the associated coordinate systems are removed from NOVA.
The unique identifier of the coordinate systems from the robot controllers
are suffixed with `On` + the unique identifier of the robot controller.
operationId: listCoordinateSystems
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: orientation_type
in: query
schema:
$ref: '#/components/schemas/OrientationType'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListCoordinateSystemsResponse'
'400':
$ref: '#/components/responses/BadRequest'
/cells/{cell}/controllers/{controller}/coordinate-systems/{coordinate-system}:
get:
tags:
- Controller
summary: Coordinate System
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Request a coordinate system specification for a given identifier.
Use parameter `orientation_type` to get the orientation part of the transformation offset of the coordinate system returned in the requested orientation notation.
If parameter `orientation_type` is not set, the orientation part of the transformation offset of the coordinate system is returned in rotation vector notation.
The coordinate systems from the robot controller are loaded when the motion group associated with the coordinate system is activated.
With deactivation of the motion group, the associated coordinate systems are removed from NOVA. The unique identifier of the coordinate systems from the robot controllers
are suffixed with `On` + the unique identifier of the robot controller.
operationId: getCoordinateSystem
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/CoordinateSystem'
- name: orientation_type
in: query
schema:
$ref: '#/components/schemas/OrientationType'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CoordinateSystem'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/motion-groups/{motion-group}/description:
get:
tags:
- Motion Group
summary: Description
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Get the set of parameters that describe the motion group and its configuration including safety zones, limits, etc.
This data can change upon connection to the robot.
operationId: getMotionGroupDescription
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MotionGroupDescription'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/motion-groups/{motion-group}/state:
get:
tags:
- Motion Group
summary: State
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Returns the current state of the selected motion group including the current joint position, velocity, pose, and more.
operationId: getCurrentMotionGroupState
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
- name: response_coordinate_system
in: query
schema:
type: string
description: |
Unique identifier addressing a coordinate system to which the responses should be converted.
If not set, world coordinate system is used.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MotionGroupState'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/motion-groups/{motion-group}/state-stream:
get:
tags:
- Motion Group
summary: Stream State
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
> Websocket endpoint
Receive updates of the motion group state.
The stream will be closed from the server if the controller is disconnected.
operationId: streamMotionGroupState
x-scope: can_operate_controllers
x-serverstream: true
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
- $ref: '#/components/parameters/ResponseRate'
- $ref: '#/components/parameters/ResponseCoordinateSystem'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MotionGroupState'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/trajectory-planning/plan-trajectory:
post:
tags:
- Trajectory Planning
operationId: planTrajectory
x-scope: can_plan_motion
summary: Plan Trajectory
description: |
**Required permissions:** `can_plan_motion` - Plan robot motions and trajectories
___
Plans a new trajectory for a single motion group.
Describe the trajectory as a sequence of motion commands that the robots TCP should follow.
Use the following workflow to execute a planned trajectory:
1. Plan a trajectory.
2. Optional: Load the planned trajectory into the cache using the [addTrajectory](#/operations/addTrajectory) endpoint.
3. Execute the (cached) trajectory using the [executeTrajectory](#/operations/executeTrajectory) endpoint.
If the trajectory is not executable, the response
will contain the joint trajectory up until the error, e.g., all samples until a collision occurs.
> #### Exception
>
> If a CartesianPTP or JointPTP motion command has an invalid target, the response will contain the trajectory up until the start of the invalid PTP motion.
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTrajectoryRequest'
examples:
UR5e_Line:
$ref: '#/components/examples/PlanTrajectoryRequest_UR5e_Line'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTrajectoryResponse'
'404':
description: Not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/Plan422Response'
'500':
description: Internal server error
/cells/{cell}/trajectory-planning/plan-collision-free:
post:
tags:
- Trajectory Planning
operationId: planCollisionFree
x-scope: can_plan_motion
summary: Plan Collision-Free Trajectory
description: |
**Required permissions:** `can_plan_motion` - Plan robot motions and trajectories
___
Plans a collision-free trajectory for a single motion group using point-to-point (PTP) motions.
This endpoint is specifically designed for collision-free path planning algorithms that find
a trajectory from a start joint position to a target position while avoiding obstacles.
Use the following workflow to execute a planned collision-free trajectory:
1. Plan a collision-free trajectory.
2. Optional: Load the planned trajectory into the cache using the [addTrajectory](#/operations/addTrajectory) endpoint.
3. Execute the (cached) trajectory using the [executeTrajectory](#/operations/executeTrajectory) endpoint.
If the trajectory planning fails due to collision or algorithm constraints, the response
will contain error information about the failure.
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PlanCollisionFreeRequest'
examples:
UR5e_Simple:
$ref: '#/components/examples/PlanCollisionFreeRequest_UR5e_Simple'
UR10e_Complex:
$ref: '#/components/examples/PlanCollisionFreeRequest_UR10e_Complex'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/PlanCollisionFreeResponse'
'404':
description: Not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/Plan422Response'
'500':
description: Internal server error
/experimental/cells/{cell}/trajectory-planning/search-collision-free-multi-motion-group:
post:
x-scope: can_plan_motion
tags:
- Trajectory Planning
operationId: searchCollisionFreeMultiMotionGroup
summary: Search Collision-Free Trajectories for Multiple Motion Groups
description: |
**Required permissions:** `can_plan_motion` - Plan robot motions and trajectories
___
> **Experimental**
Searches collision-free trajectories for multiple motion groups simultaneously within a cell.
This is the multi-robot variant of collision-free path search — it coordinates paths so that
several motion groups, e.g., multiple robot arms, can move from start to target positions
without colliding with each other or with the environment.
The caller provides per-motion-group setups (robot model, cycle time, mounting, TCP offset,
limits, payload, collision geometry), per-motion-group point-to-point path definitions
(start and target joint positions), optional cross-group collision setups defining which
link-chain/tool colliders to consider between groups plus static environment colliders,
and optional RRT-Connect algorithm settings (max iterations, step size, smoothing, blending).
On success the response contains a time-synchronized trajectory with joint positions per
motion group at shared timestamps so their motions are temporally coordinated. On failure
it returns feedback indicating why planning failed, e.g., max iterations exceeded.
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MultiSearchCollisionFreeRequest'
examples:
UR5e:
$ref: '#/components/examples/MultiSearchCollisionFreeRequest_UR5e'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MultiSearchCollisionFreeResponse'
'404':
description: Not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/MultiSearchCollisionFree422Response'
'500':
description: Internal server error
/experimental/cells/{cell}/trajectory-planning/merge-trajectories:
post:
tags:
- Trajectory Planning
operationId: mergeTrajectories
x-scope: can_plan_motion
summary: Merge Trajectories
description: |
**Required permissions:** `can_plan_motion` - Plan robot motions and trajectories
___
> **Experimental**
Merges a list of joint trajectories into a single trajectory with collision-aware blending.
This endpoint merges a list of separate trajectories by connecting them via blending.
The blending is performed with collision checking to ensure the merged trajectory is safe to execute.
Timescaling will be applied to the blended area to ensure all limits are respected.
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MergeTrajectoriesRequest'
examples:
UR5e:
$ref: '#/components/examples/MergeTrajectoriesRequest_UR5e'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MergeTrajectoriesResponse'
'404':
description: Not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/MergeTrajectories422Response'
'500':
description: Internal server error
/cells/{cell}/kinematic/inverse:
post:
tags:
- Kinematics
operationId: inverseKinematics
x-scope: can_plan_motion
summary: Inverse kinematics
description: |
**Required permissions:** `can_plan_motion` - Plan robot motions and trajectories
___
Returns the reachable joint positions for a list of given poses.
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InverseKinematicsRequest'
examples:
UR5e:
$ref: '#/components/examples/InverseKinematicsRequest_UR5e'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/InverseKinematicsResponse'
'404':
description: Not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/InverseKinematics422Response'
'500':
description: Internal server error
/experimental/cells/{cell}/kinematic/configured-pose-inverse:
post:
tags:
- Kinematics
operationId: configuredPoseInverse
x-scope: can_plan_motion
summary: Inverse kinematics configured pose
description: |
**Required permissions:** `can_plan_motion` - Plan robot motions and trajectories
___
Returns the reachable joint positions for a list of given poses.
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConfiguredPoseInverseRequest'
examples:
UR5e:
$ref: '#/components/examples/ConfiguredPoseInverseRequest_UR5e'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ConfiguredPoseInverseResponse'
'404':
description: Not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/ConfiguredPoseInverse422Response'
'500':
description: Internal server error
/experimental/cells/{cell}/kinematic/convert-vendor-configured-pose:
post:
tags:
- Kinematics
operationId: convertVendorConfiguredPose
x-scope: can_plan_motion
summary: Convert vendor-configured pose
description: |
**Required permissions:** `can_plan_motion` - Plan robot motions and trajectories
___
Converts a vendor-specific pose with configuration data to a
vendor-independent pose with kinematic configuration.
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConvertVendorConfiguredPoseRequest'
examples:
ABB:
$ref: '#/components/examples/ConvertVendorConfiguredPoseRequest_ABB'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ConfiguredPoseList'
'404':
description: Not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/ConvertVendorConfiguredPose422Response'
'500':
description: Internal server error
/cells/{cell}/kinematic/forward:
post:
tags:
- Kinematics
operationId: forwardKinematics
x-scope: can_plan_motion
summary: Forward kinematics
description: |
**Required permissions:** `can_plan_motion` - Plan robot motions and trajectories
___
Returns the TCP poses for a list of given joint positions.
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ForwardKinematicsRequest'
examples:
UR5e:
$ref: '#/components/examples/ForwardKinematicsRequest_UR5e'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ForwardKinematicsResponse'
'404':
description: Not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/ForwardKinematics422Response'
'500':
description: Internal server error
/experimental/cells/{cell}/kinematic/project-joint-position-direction-constraint:
post:
tags:
- Kinematics
operationId: projectJointPositionDirectionConstraint
x-scope: can_plan_motion
summary: Project joint position to direction constraint
description: |
**Required permissions:** `can_plan_motion` - Plan robot motions and trajectories
___
> **Experimental**
Returns the projected joint position that satisfies the direction constraint for a given target joint position. This may alter the TCP pose.
To project the cartesian pose instead, use the following code snippet:
```python
import numpy as np
from scipy.spatial.transform import Rotation as R
def project_cartesian_pose_direction_constraint(T_world_tcp: models.Pose, constraint: models.DirectionConstraint) -> models.Pose:
constraint_tcp = np.array(constraint.tcp)
target_constraint_world = np.array(constraint.world)
R_world_tcp = R.from_rotvec(T_world_tcp.orientation.root)
current_constraint_world = R_world_tcp.apply(constraint_tcp)
R_corr, _ = R.align_vectors([target_constraint_world], [current_constraint_world])
R_world_tcp_new = R_corr * R_world_tcp
return models.Pose(position=T_world_tcp.position, orientation=R_world_tcp_new.as_rotvec())
```
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectJointPositionDirectionConstraintRequest'
examples:
UR5e:
$ref: '#/components/examples/ProjectJointPositionDirectionConstraintRequest_UR5e'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectJointPositionDirectionConstraintResponse'
'404':
description: Not found
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectJointPositionDirectionConstraint422Response'
'500':
description: Internal server error
/cells/{cell}/controllers/{controller}/trajectories:
post:
tags:
- Trajectory Caching
summary: Add Trajectory
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Loads and validates the data of a trajectory into the execution cache, rendering the trajectory executable.
> #### NOTE
>
> Using the trajectory cache is an optional performance optimization. It is not necessary to use the cache to execute trajectories.
The response contains the result of the validation of the trajectory.
Validation can lead to three different results:
- Fully valid: The whole trajectory can be executed from start to end. The response will contain an unique identifier which is used to move the robot.
- Partially valid: Only parts of the trajectory can be executed. The response will contain an unique identifier to move the robot
and information about the failure for the part that is not executable.
- Invalid: The trajectory can not be executed. The response will tell you the reason of failure.
If the trajectory is at least partially valid, the parts of the trajectory that are valid can be executed using the [executeTrajectory](#/operations/executeTrajectory) endpoint.
The workflow is as follows:
- Generate a trajectory with [planTrajectory](#/operations/planTrajectory) or your own motion planner,
- Send the trajectory to this endpoint to validate it and get a unique identifier for it,
- The unique identifier will appear in the list of available trajectories, see [listTrajectories](#/operations/listTrajectories) endpoint, if it is at least partially executable.
- Execute your trajectory using the [executeTrajectory](#/operations/executeTrajectory) endpoint.
operationId: addTrajectory
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AddTrajectoryRequest'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AddTrajectoryResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
get:
tags:
- Trajectory Caching
summary: List Trajectories
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
List currently cached trajectories.
Use [addTrajectory](#/operations/addTrajectory) to add a new trajectory. Adding trajectories is necessary to execute them.
Trajectories are removed if the corresponding motion group or controller disconnects.
operationId: listTrajectories
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListTrajectoriesResponse'
'400':
$ref: '#/components/responses/BadRequest'
delete:
tags:
- Trajectory Caching
summary: Clear Trajectories
description: |-
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Clear the trajectory cache.
operationId: clearTrajectories
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
/cells/{cell}/controllers/{controller}/trajectories/{trajectory}:
get:
tags:
- Trajectory Caching
summary: Get Trajectory
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Get a previously created trajectory from cache.
Use [listTrajectories](#/operations/listTrajectories) to list all cached trajectories.
operationId: getTrajectory
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/Trajectory'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/GetTrajectoryResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- Trajectory Caching
summary: Delete Trajectory
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
Delete a previously created trajectory from cache.
Use [listTrajectories](#/operations/listTrajectories) to list all cached trajectories.
Trajectories are removed automatically if the motion group or the corresponding controller is disconnected.
operationId: deleteTrajectory
x-scope: can_operate_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/Trajectory'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/execution/trajectory:
get:
tags:
- Trajectory Execution
summary: Execute Trajectory
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
> Websocket endpoint
Provides execution control over a previously [planned trajectory](#/operations/planTrajectory). Enables the caller to attach input/output actions to the trajectory.
### Movement behavior
| Virtual controller | Physical controller |
|------------------|-------------------|
| Desired joint configurations are commanded to each motion group and **applied immediately** | Move to desired **actual joint configuration**, **if possible** |
### Concept of location
- The location or path parameter specifies the exact position along a trajectory.
- The location is a scalar value that ranges from 0 to `n`, where `n` denotes the number of motion commands, or
trajectory segments, e.g., line, p2p, etc. See [planTrajectory](#/operations/planTrajectory).
- Each integer value of the location corresponds to one motion command, e.g., 3.0 to 3.999 could be a line.
### Preconditions
- The motion group's control mode is not claimed by any other endpoint.
- The motion group's joint position are at start location specified with `InitializeMovementRequest`.
- Use [executeToTrajectory](#/operations/executeToTrajectory) to move the robot to the start location.
### Requests
#### 1. Send `InitializeMovementRequest` to lock the trajectory to this connection
The following actions are executed:
- Sets robot controller mode to control mode,
- Sets start location of the execution
Keep in mind that only a single trajectory can be locked to a websocket connection at a time.
Pausing the current movement enables you to send another `InitializeMovementRequest` to execute another trajectory on the same connection.
#### 2. Send `StartMovementRequest` to start the movement
Sets direction of movement, default is forward.
#### **Optional**
- To pause, send `PauseMovementRequest` before the movement has reached its end location.
- Change the movement's velocity with `PlaybackSpeedRequest` after initializing the movement with `InitializeMovementRequest`.
### Responses
To monitor the state of the movement, listen to the [state stream](#/operations/streamMotionGroupState). The state is published via nats as well.
Field `execute` in the `MotionGroupState` indicates whether a movement is ongoing and carries execution details.
Each request has a corresponding acknowledgment response. They signal success or failure of the request.
Especially for `PauseMovementResponse`, it does not signal the end of the movement.
Additionally, `MovementError` messages can be sent in case of unexpected errors during the execution, e.g., controller disconnects during movement.
### Tips and Tricks
- A movement can be paused and resumed by sending `PauseMovementRequest` and `StartMovementRequest`.
- Send `PlaybackSpeedRequest` before `StartMovementRequest` to reduce the velocity of the movement before it starts.
- Send `PlaybackSpeedRequest` repeatedly to implement a slider. The velocity of the motion group can be adjusted with each controller step.
Therefore, if your app needs a slider-like UI to alter the velocity of a currently running movement,
you can send `PlaybackSpeedRequest` with different speed values repeatedly during the movement.
- A closed trajectory (end and start joint position are equal) can be repeated by sending `StartMovementRequest` after the movement has finished.
operationId: executeTrajectory
x-scope: can_operate_controllers
x-bidistream: true
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ExecuteTrajectoryRequest'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ExecuteTrajectoryResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/controllers/{controller}/execution/jogging:
get:
tags:
- Jogging
summary: Execute Jogging
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
> Websocket endpoint
Provides execution control over a dynamically adaptable jogging motion for a motion group.
Jogging describes controlling a motion group by sending real-time commands to move either its joints or the TCP.
The commands contain target velocities that may change at any time during execution, so the resulting motion cannot be computed upfront.
### Preconditions
The motion group is not moved by any other endpoint.
### Requests
#### 1. Send `InitializeJoggingRequest` to configure the jogging.
- Sets the robot controller mode to control mode.
- Claims the motion group for jogging. For robotic arms, TCP is required to ensure that limits, including TCP limits, are respected.
#### 2. Send `JointVelocityRequest` or `TcpVelocityRequest` to start the jogging motion.
- Commands can only be processed in the cycle rate of the controller
- Sending commands faster will not increase the responsiveness of the jogging motion, it will lead to dropped commands
- It is recommended to couple sending commands with the [state stream](#/operations/streamMotionGroupState), which can be subscribed to via nats as well.
#### 3. Change or stop the jogging motion
- Change the jogging direction and/or velocity during the jogging motion with `JointVelocityRequest` or `TcpVelocityRequest`.
- To stop the jogging motion, send zero velocities via either request or `PauseJoggingRequest`.
### Responses
- Each request is acknowledged with a corresponding response:
- `InitializeJoggingResponse` after `InitializeJoggingRequest`
- `JointVelocityResponse` after `JointVelocityRequest`
- `TcpVelocityResponse` after `TcpVelocityRequest`
- `PauseJoggingResponse` after `PauseJoggingRequest`
The responses confirm that the requests were received.
They do not signal that the operation was successful; check the [motion group state](#/operations/streamMotionGroupState) for that.
- `MovementErrorResponse` with error details is sent in case of an unexpected error, e.g., controller disconnects during jogging.
### Tips and Tricks
- Ensure that the websocket connection remains open until the jogging motion is stopped to avoid unexpected stops.
operationId: executeJogging
x-scope: can_operate_controllers
x-bidistream: true
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ExecuteJoggingRequest'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ExecuteJoggingResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/experimental/cells/{cell}/controllers/{controller}/execution/jogging:
get:
tags:
- Jogging
summary: Execute Waypoint Jogging
description: |
**Required permissions:** `can_operate_controllers` - Operate and monitor robot controllers
___
> **Experimental**
>
> This endpoint is experimental and its behavior may change in future releases.
> Websocket endpoint
Provides waypoint-based jogging control for a motion group.
Instead of commanding target velocities (see [executeJogging](#/operations/executeJogging)), waypoint jogging streams a queue of timed waypoints that the robot moves through by best effort.
This can be used for realtime action chunk streaming, e.g., from a Vision-Language-Action (VLA) model.
### Preconditions
The motion group is not moved by any other endpoint.
### Requests
#### 1. Send `InitializeJoggingRequest` to configure the jogging.
- Sets the robot controller mode to control mode.
- Claims the motion group for jogging. For robotic arms, TCP is required to ensure that limits, including TCP limits, are respected.
#### 2. Send `JointWaypointsRequest` or `PoseWaypointsRequest` to stream waypoints.
- The first waypoints message starts an internal clock.
- Each waypoint carries a timestamp relative to that clock for when it should be reached.
- Existing waypoints in the queue that are older than the first new timestamp are removed.
- The current session timestamp is reported in `execute.details.jogger_session_timestamp_ms` of the [streamRobotControllerState](#/operations/streamRobotControllerState) endpoint.
#### 3. Stop the jogging motion
- Send `PauseJoggingRequest` to stop the motion.
### Responses
- Each request is acknowledged with a corresponding response:
- `InitializeJoggingResponse` after `InitializeJoggingRequest`
- `JointWaypointsResponse` after `JointWaypointsRequest`
- `PoseWaypointsResponse` after `PoseWaypointsRequest`
- `PauseJoggingResponse` after `PauseJoggingRequest`
The responses confirm that the requests were received.
They do not signal that the operation was successful; check the [motion group state](#/operations/streamMotionGroupState) for that.
- `MovementErrorResponse` with error details is sent in case of an unexpected error, e.g., controller disconnects during jogging.
### Tips and Tricks
- Ensure that the websocket connection remains open until the jogging motion is stopped to avoid unexpected stops.
operationId: executeWaypointJogging
x-scope: can_operate_controllers
x-bidistream: true
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ExecuteWaypointJoggingRequest'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ExecuteWaypointJoggingResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/experimental/cells/{cell}/programs:
get:
tags:
- Program
summary: List programs
description: |
**Required permissions:** `can_operate_programs` - Execute and monitor programs
___
> **Experimental**
List details of all existing programs.
operationId: listPrograms
x-scope: can_operate_programs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
title: Response of list programs
type: array
items:
$ref: '#/components/schemas/Program'
examples:
two_programs:
summary: Example with two programs
description: Sample response showing two different programs
value:
- program: pick_and_place
name: Pick and Place Operation
description: A program that picks up objects from a conveyor and places them in designated locations
app: app1
- program: welding_sequence
name: Automated Welding Sequence
description: Complex welding program with multiple passes and quality checks
app: app2
'500':
description: Internal server error
/experimental/cells/{cell}/programs/{program}:
get:
tags:
- Program
summary: Get program
description: |
**Required permissions:** `can_operate_programs` - Execute and monitor programs
___
> **Experimental**
Get details of a program.
operationId: getProgram
x-scope: can_operate_programs
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Program'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Program'
example:
program: pick_and_place
name: Pick and Place Demo
description: A demo program for pick and place operations
app: app1
'500':
description: Internal server error
/experimental/cells/{cell}/programs/{program}/start:
post:
tags:
- Program
summary: Start the program
description: |
**Required permissions:** `can_operate_programs` - Execute and monitor programs
___
> **Experimental**
This endpoint starts a new program execution.
The program will be executed asynchronously.
operationId: startProgram
x-scope: can_operate_programs
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Program'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProgramStartRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ProgramRun'
examples:
minimal:
summary: Minimal example
value:
run: run_125
program: app1.pick_and_place
state: PREPARING
start_time: '2024-01-15T12:00:00Z'
'400':
description: Either a syntax or a runtime error
'404':
description: Not found
'406':
description: A program run is already running
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'452':
description: |
Robot is not able to perform the motion due to hard or soft restrictions.
This can be due to a variety of reasons:
- The robot is too close to a singularity,
- The robot is too close to a joint limit,
- Robot operating mode could not be set to the desired mode,
- An operating mode change occurred during the motion.
In the case of an error, the full error will be returned in the response body.
'500':
description: Internal server error
/experimental/cells/{cell}/programs/{program}/stop:
post:
tags:
- Program
summary: Stop program run
description: |
**Required permissions:** `can_operate_programs` - Execute and monitor programs
___
> **Experimental**
Stop a specific program run.
operationId: stopProgram
x-scope: can_operate_programs
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Program'
responses:
'204':
description: Successful Response. Will also be returned if the run is not running.
'404':
description: Not found
'500':
description: Internal server error
/experimental/cloud/connect:
post:
operationId: connectToNovaCloud
x-scope: can_manage_cloud_connection
summary: Connect to NOVA Cloud
tags:
- NOVA Cloud
description: |-
**Required permissions:** `can_manage_cloud_connection` - Manage NOVA Cloud connection
___
> **Experimental**
Register this instance with the NOVA Cloud fleet manager and configure the
local NATS server to establish a leafnode connection. The fleet manager will
then be able to receive event data from this instance, allowing it to monitor
the connected robots.
Establishing the connection can take some time (~30-60 seconds), as the NATS
server pod in the cluster needs to restart to apply the new configuration.
parameters:
- schema:
type: integer
minimum: 1
description: |-
The maximum time (**in seconds**) spent waiting until the operation is complete.
If the parameter is set, the request will wait for completion until the specified time is up.
For POST and PUT requests completion means that all resources are running and usable.
For DELETE completion means that the deletion process is completed.
required: false
description: |-
The maximum time (**in seconds**) spent waiting until the operation is complete.
If the parameter is set, the request will wait for completion until the specified time is up.
For POST and PUT requests completion means that all resources are running and usable.
For DELETE completion means that the deletion process is completed.
name: completion_timeout
in: query
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CloudConnectionRequest'
responses:
'200':
description: The instance was successfully connected to NOVA Cloud.
content:
application/json:
schema:
$ref: '#/components/schemas/CloudRegistrationSuccessResponse'
'202':
description: The instance was registered and the connection process has started.
content:
application/json:
schema:
$ref: '#/components/schemas/CloudRegistrationSuccessResponse'
'400':
description: The request parameters failed to validate.
content:
application/json:
schema:
$ref: '#/components/schemas/ZodValidationError'
'424':
description: The connection to NOVA Cloud could not be established.
content:
application/json:
schema:
$ref: '#/components/schemas/CloudConnectionError'
/experimental/cloud/config:
delete:
operationId: disconnectFromNovaCloud
x-scope: can_manage_cloud_connection
summary: Disconnect from NOVA Cloud
tags:
- NOVA Cloud
description: |-
**Required permissions:** `can_manage_cloud_connection` - Manage NOVA Cloud connection
___
> **Experimental**
Disconnects this instance from NOVA Cloud and removes the local NATS leafnode configuration.
parameters:
- schema:
type: integer
minimum: 1
description: |-
The maximum time (**in seconds**) spent waiting until the operation is complete.
If the parameter is set, the request will wait for completion until the specified time is up.
For POST and PUT requests completion means that all resources are running and usable.
For DELETE completion means that the deletion process is completed.
required: false
description: |-
The maximum time (**in seconds**) spent waiting until the operation is complete.
If the parameter is set, the request will wait for completion until the specified time is up.
For POST and PUT requests completion means that all resources are running and usable.
For DELETE completion means that the deletion process is completed.
name: completion_timeout
in: query
responses:
'200':
description: The instance was successfully disconnected from NOVA Cloud.
content:
application/json:
schema:
$ref: '#/components/schemas/CloudDisconnectionStatusDisconnected'
'202':
description: The connection configuration was removed and the NATS server is restarting to apply the changes.
content:
application/json:
schema:
$ref: '#/components/schemas/CloudDisconnectionStatusDisconnecting'
'424':
description: The instance could not be disconnected from NOVA Cloud.
content:
application/json:
schema:
$ref: '#/components/schemas/CloudDisconnectionError'
get:
operationId: getNovaCloudConfig
x-scope: can_access_system
summary: Get Connection Config
tags:
- NOVA Cloud
description: |-
**Required permissions:** `can_access_system` - View system status and metadata
___
> **Experimental**
Get the current NOVA Cloud connection config for this instance.
responses:
'200':
description: Configuration details
content:
application/json:
schema:
$ref: '#/components/schemas/CloudConfigStatus'
/cells/{cell}/virtual-controllers/{controller}/motion-groups:
get:
tags:
- Virtual Controller
summary: Motion Group Description
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Gets information on the motion group.
operationId: getMotionGroups
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MotionGroupInfos'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
post:
tags:
- Virtual Controller
summary: Add Motion Group
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Adds a motion group configuration for the virtual robot controller.
Fields:
- Only one of **motion_group_model** or **json_data** should be set.
- **motion_group_model**: Identifies a single motion group. See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types.
- **json_data**: Full JSON configuration of the virtual robot controller.
This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration).
- **extracted_motion_group_id** (required when using json_data): The motion group identifier to extract from the provided JSON configuration.
- **motion_group**: Unique identifier for the motion group to be added.
- **initial_joint_position**: Specifies the initial joint position for the added motion group.
> #### NOTE
>
> When a motion group is added, **the virtual robot is restarted** to apply the new configuration.
>
> During this restart:
> - Robot visualization can temporarily disappear or appear outdated in the UI.
> - Motion group changes are not immediately visible in visualizations.
> - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again.
>
> The API call itself **does not wait until the restart and re-synchronization are complete**.
> This means that immediately after a successful response, the new motion group may not yet be available for use.
operationId: addVirtualControllerMotionGroup
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AddVirtualControllerMotionGroupRequest'
examples:
usingType:
summary: Using predefined type
value:
motion_group: '1'
motion_group_model: Yaskawa_TURN2
initial_joint_position: '[0.0, 1.0]'
usingJson:
summary: Using custom JSON configuration
value:
motion_group: '1'
json_data: ... long JSON string ...
extracted_motion_group_id: '2'
initial_joint_position: '[0.0, 1.0]'
responses:
'200':
description: Motion group added successfully
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/safety-zones:
get:
tags:
- Virtual Controller
summary: List Safety Zones
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Gets all safety zones configured in the virtual robot controller.
Safety zones define geometric boundaries that restrict robot motion
or define protected areas in the workspace.
operationId: getVirtualControllerSafetyZones
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SafetyZones'
examples:
fanuc:
summary: Safety zones from a FANUC controller
value:
safety_zones:
- id: 1
name: Cell
priority: 0
restricted: true
geometry:
id: ''
box:
center:
- 900
- -1000
- -1000
neighbour:
- -1000
- -1000
- -1000
- 900
- 400
- -1000
- 900
- -1000
- 1500
inverted: true
mg_uid: 0
uid_ref_cs: '101'
active: true
- id: 2
name: Table
priority: 0
restricted: true
geometry:
id: ''
box:
center:
- -1500
- -1000
- -400
neighbour:
- 2000
- -1000
- -400
- -1500
- 1500
- -400
- -1500
- -1000
- 2000
inverted: true
mg_uid: 0
uid_ref_cs: '101'
active: true
yaskawa:
summary: Safety zones from a Yaskawa controller
value:
safety_zones:
- id: 1
name: ''
priority: 0
restricted: true
geometry:
id: ''
prism:
point:
- 1850
- 1100
- -1000
- 1100
- -1000
- -1200
- 1850
- -1200
top: 1400
bottom: -530
inverted: true
mg_uid: 0
uid_ref_cs: ''
active: true
- id: 2
name: ''
priority: 0
restricted: true
geometry:
id: ''
prism:
point:
- 400
- 1000
- 1850
- 1000
- 1850
- -1000
- 400
- -1000
top: -125
bottom: -530
inverted: false
mg_uid: 0
uid_ref_cs: ''
active: true
- id: 3
name: ''
priority: 0
restricted: true
geometry:
id: ''
prism:
point:
- 400
- -1040
- 1850
- -1040
- 1850
- -1200
- 400
- -1200
top: 1400
bottom: -530
inverted: false
mg_uid: 0
uid_ref_cs: ''
active: true
abb:
summary: Safety zones from an ABB controller (ABB_1)
value:
safety_zones:
- id: 1
name: Safe_Zone
priority: 0
restricted: true
geometry:
id: ''
prism:
point:
- 900
- -1000
- 900
- 800
- -700
- 800
- -700
- -1000
top: 2000
bottom: 0
inverted: true
mg_uid: 0
uid_ref_cs: ''
active: true
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
post:
tags:
- Virtual Controller
summary: Add Safety Zone
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Adds a new safety zone to the virtual robot controller.
Safety zones define geometric boundaries that restrict or permit robot motion in 3D space.
Each zone has a `geometry` that defines its shape, and two flags that control its behavior:
- **`restricted: true`** the robot is not allowed to enter this zone.
- **`inverted: true`** the zone applies to the **outside** of the shape, meaning the shape defines the
*allowed* region; everything outside is the zone. Combined with `restricted: true`, the robot must
stay **inside** the shape.
Common combinations:
| `restricted` | `inverted` | Effect |
|---|---|---|
| `true` | `false` | Keep-out zone, the robot cannot enter the shape, e.g., obstacle, table, wall |
| `true` | `true` | Keep-in zone, the robot must stay inside the shape, e.g., workspace envelope / cell boundary |
The `mg_uid` field specifies which motion group the safety zone is enforced for and must match
an existing motion group UID on the controller.
The `uid_ref_cs` field defines the coordinate system in which the geometry coordinates are
expressed. The coordinate system must be defined on the controller beforehand. If empty (`""`),
the World coordinate system is used. Using an incorrect coordinate system places the safety zone in a different physical location.
---
## Geometry Shape Reference
All coordinates are in **millimetres (mm)**. Choose the shape that best fits the physical boundary.
---
### Box
A rectangular cuboid defined by one **corner point** (`center`) and **three adjacent corners** (`neighbour`).
Despite the field name, `center` is not the geometric centroid but one corner of the box,
and each `neighbour` is the corner directly connected to it by one edge.
This format is used directly by robot controllers (FANUC, KUKA, etc.) and supports arbitrary
orientations, including left-handed coordinate systems that parametric (size + quaternion) formats
cannot represent.
**When to use:** Cell workspace envelope, machine enclosure, table, rectangular obstacle, pallet zone.
**How to define:**
```
center → one corner of the box [x, y, z]
neighbour = [
x1, y1, z1, ← corner connected by the first edge
x2, y2, z2, ← corner connected by the second edge
x3, y3, z3 ← corner connected by the third edge
]
edge_length_i = ||neighbour_i − corner||
```
The three edge vectors and the geometric centroid are:
```
d0 = neighbour[0] − corner
d1 = neighbour[1] − corner
d2 = neighbour[2] − corner
centroid = corner + (d0 + d1 + d2) / 2
```
For an **axis-aligned** box with one corner at `[cx, cy, cz]` and edge lengths `[ex, ey, ez]`:
```
corner = [cx, cy, cz]
neighbour = [cx+ex, cy, cz, cx, cy+ey, cz, cx, cy, cz+ez]
```
---
### Prism
An extruded polygon is a 2D closed polygon (defined in the XY plane) extruded vertically
between `bottom` and `top` Z coordinates. The polygon can be convex or concave.
**When to use:** Irregular floor-plan areas (aisles, loading bays, L-shaped zones),
conveyor corridors, or any zone with a non-rectangular footprint.
**How to define:**
```
point = [x1, y1, x2, y2, x3, y3, ...] ← 2D vertices (XY), flattened, ≥ 3 points
top = upper Z bound [mm]
bottom = lower Z bound [mm]
```
Points must form a closed polygon; the last point implicitly connects to the first.
---
### Sphere
A perfect sphere defined by its **center point** and **radius**.
**When to use:** Protection zones around sensors, cameras, workpieces, point-like
obstacles, singularity avoidance zones around the robot base.
**How to define:**
```
center = [x, y, z] ← center of the sphere [mm]
radius ← radius [mm]
```
---
### Capsule
A cylinder with hemispherical caps at each end, defined by two axis endpoints
(`top`, `bottom`) and a **radius**. The axis can have any orientation.
**When to use:** Pipes, cable trays, vertical columns, horizontal beams, or tube-shaped
obstacles.
**How to define:**
```
top = [x, y, z] ← center of the top hemisphere [mm]
bottom = [x, y, z] ← center of the bottom hemisphere [mm]
radius ← cylinder + hemisphere radius [mm]
```
The total length of the capsule is `||top − bottom|| + 2 × radius`.
---
### Lozenge
A rounded rectangle (stadium/discorectangle shape) in a plane, defined by a
**center pose**, two **dimensions**, and a **corner radius**. The plane orientation is defined by the quaternion in `center`.
**When to use:** Conveyor belt surfaces, worktables with rounded edges, or flat rectangular
zones in arbitrary orientations.
**How to define:**
```
center.x/y/z ← position of the center [mm]
center.qx/qy/qz/qw ← orientation as unit quaternion (identity = XY plane)
x_dimension ← total length along local X axis [mm]
y_dimension ← total width along local Y axis [mm]
radius ← corner rounding radius [mm]
```
For a horizontal lozenge, use identity quaternion `(qx=0, qy=0, qz=0, qw=1)`.
---
### Plane
A mathematical half-space plane defined by its **3D vertices**. All vertices must be coplanar.
The plane is unbounded (infinite extent in all directions parallel to the surface). The points define the plane's orientation and position only.
**When to use:** Floor boundaries, virtual walls, tilted surfaces, e.g., ramps, inclined conveyors,
or flat custom barriers.
**How to define:**
```
point = [x1, y1, z1, x2, y2, z2, x3, y3, z3, ...] ← 3D vertices, flattened, ≥ 3 points
```
Points must be coplanar and form a closed polygon.
---
> #### NOTE
>
> When a safety zone is added, **the virtual robot is restarted** to apply the new configuration.
>
> During this restart:
> - All connections to the virtual robot are closed and re-established, introducing a short delay before the system is fully operational again.
> - The safety checksum is automatically updated to reflect the configuration change.
>
> The API call **does not wait until the restart and re-synchronization are complete**.
operationId: addVirtualControllerSafetyZone
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SafetyZone'
examples:
box_keep_in:
summary: Box, keep-in zone (cell workspace envelope)
description: |
The robot must stay inside this box, e.g., workspace boundary / cell envelope.
restricted=true + inverted=true → outside the box is forbidden.
Corner at (-1200, 900, -800). The three neighbour points are the adjacent corners
connected by edges along X, Y, and Z respectively.
Replace center and neighbour values to match your cell dimensions.
value:
id: 1
name: Cell
priority: 0
restricted: true
active: true
mg_uid: 0
uid_ref_cs: ''
geometry:
id: ''
box:
center:
- -1200
- 900
- -800
neighbour:
- 1700
- 900
- -800
- -1200
- -1600
- -800
- -1200
- 900
- 3000
inverted: true
box_keep_out:
summary: Box, keep-out zone (robot table / obstacle)
description: |
The robot must not enter this box, e.g., robot table or machine enclosure.
restricted=true + inverted=false → inside the box is forbidden.
Corner at (-1200, 800, -800). Neighbour points are the adjacent corners
connected by edges along X, Y, and Z respectively.
Replace center and neighbour values to match your obstacle dimensions.
value:
id: 2
name: robot table
priority: 0
restricted: true
active: true
mg_uid: 0
uid_ref_cs: ''
geometry:
id: ''
box:
center:
- -1200
- 800
- -800
neighbour:
- 1200
- 800
- -800
- -1200
- -450
- -800
- -1200
- 800
- -450
inverted: false
prism_keep_in:
summary: Prism, keep-in zone (workspace envelope)
description: |
The robot must stay inside this prism, e.g., outer workspace boundary.
restricted=true + inverted=true → outside the polygon is forbidden.
A 4-point rectangular footprint is extruded from Z=-500 to Z=3000mm.
Points are XY pairs [x1,y1, x2,y2, ...] that form a closed polygon.
Replace point coordinates `top` and `bottom` to match your workspace.
value:
id: 1
name: workspace boundary
priority: 0
restricted: true
active: true
mg_uid: 0
uid_ref_cs: ''
geometry:
id: ''
prism:
point:
- 1600
- -794.35
- 1600
- 805.65
- -1100
- 805.65
- -1100
- -794.35
top: 3000
bottom: -500
inverted: true
prism_keep_out:
summary: Prism, keep-out zone (inner restricted area)
description: |
The robot must not enter this prism volume, e.g., area below robot table.
restricted=true + inverted=false → inside the polygon is forbidden.
A 4-point rectangular footprint is extruded from Z=-500 to Z=150mm.
Replace point coordinates `top` and `bottom` to match your obstacle.
value:
id: 2
name: restricted area
priority: 0
restricted: true
active: true
mg_uid: 0
uid_ref_cs: ''
geometry:
id: ''
prism:
point:
- 1500
- -694.35
- 1500
- 705.65
- 400
- 705.65
- 400
- -694.35
top: 150
bottom: -500
inverted: false
sphere_keep_out:
summary: Sphere, keep-out zone (sensor / camera protection)
description: |
The robot must not approach within 350mm of a fixed camera at (600, -300, 1200).
restricted=true + inverted=false → inside the sphere is forbidden.
Adjust the center to the sensor or workpiece position and adjust the radius to match the required safety margin.
value:
id: 5
name: Camera protection
priority: 0
restricted: true
active: true
mg_uid: 0
uid_ref_cs: ''
geometry:
id: ''
sphere:
center:
- 600
- -300
- 1200
radius: 350
inverted: false
capsule_keep_out:
summary: Capsule, keep-out zone (vertical pipe / column)
description: |
The robot must not approach the vertical steel column.
The column runs from the floor (Z=0) to the ceiling (Z=3000), centered at (1200, -700).
Radius includes the pipe diameter plus a 100mm safety margin.
Adjust `top` and `bottom` for the pipe length, and adjust the radius to match the pipe size and required clearance.
value:
id: 6
name: Steel column
priority: 0
restricted: true
active: true
mg_uid: 0
uid_ref_cs: ''
geometry:
id: ''
capsule:
top:
- 1200
- -700
- 3000
bottom:
- 1200
- -700
- 0
radius: 200
inverted: false
lozenge_keep_out:
summary: Lozenge , keep-out zone (conveyor belt surface)
description: |
The robot must not contact or cross the horizontal conveyor belt surface.
The lozenge is a planar shape (zero thickness). The controller enforces it as a
one-sided surface barrier, not a volumetric zone. The forbidden side is determined
by the face normal, which poinbts in the +Z direction for identity quaternion.
It is centered at (900, 0, 850) and lies in the XY plane (identity quaternion).
x_dimension=2400mm (belt length), y_dimension=600mm (belt width), radius=50mm (corner rounding).
For a tilted surface, rotate the quaternion to match the belt's tilt angle.
value:
id: 7
name: Conveyor belt
priority: 0
restricted: true
active: true
mg_uid: 0
uid_ref_cs: ''
geometry:
id: ''
lozenge:
center:
x: 900
'y': 0
z: 850
qx: 0
qy: 0
qz: 0
qw: 1
x_dimension: 2400
y_dimension: 600
radius: 50
inverted: false
plane_keep_out:
summary: Plane, keep-out zone (virtual floor boundary)
description: |
The robot must not cross below Z=0 (virtual floor plane).
Defined by three coplanar points in the Z=0 plane, e.g., origin, the +X axis, and the +Y axis.
The plane shape is a one-sided surface barrier. The face normal points in the direction
of the outward-facing side of the polygon (for a floor at Z=0, the normal points upward along +Z).
The forbidden half-space lies on the opposite side of the normal, Z<0 in this case.
For a wall or tilted surface, define the vertices so that the face normal points away from
the permitted workspace. The robot is then blocked from crossing to the other side.
restricted=true + inverted=false → the half-space behind the polygon normal is forbidden.
value:
id: 8
name: Floor plane
priority: 0
restricted: true
active: true
mg_uid: 0
uid_ref_cs: ''
geometry:
id: ''
plane:
point:
- 3000
- 3000
- 0
- -3000
- 3000
- 0
- -3000
- -3000
- 0
- 3000
- -3000
- 0
inverted: false
responses:
'200':
description: Safety zone added successfully
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/safety-zones/{id}:
delete:
tags:
- Virtual Controller
summary: Delete Safety Zone
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Removes a safety zone from the virtual robot controller.
> #### NOTE
>
> When a safety zone is removed, **the virtual robot is restarted** to apply the new configuration.
>
> During this restart:
> - All connections to the virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again.
> - The safety checksum is automatically updated to reflect the configuration change.
>
> The API call itself **does not wait until the restart and re-synchronization are complete**.
operationId: deleteVirtualControllerSafetyZone
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: id
in: path
description: The unique identifier of the safety zone to delete.
required: true
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
responses:
'200':
description: Safety zone deleted successfully
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/ios/values:
get:
tags:
- Virtual Controller Inputs/Outputs
summary: Get Input/Output Values
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Retrieves the current values of inputs/outputs of the virtual controller.
The identifiers of inputs/outputs must be provided in the request.
Request all available input/output identifiers via [listVirtualControllerIODescriptions](#/operations/listVirtualControllerIODescriptions).
operationId: listIOs
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: ios
in: query
required: true
schema:
type: array
items:
type: string
description: |
Array of input/output identifiers to retrieve the values for.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListIOValuesResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Virtual Controller Inputs/Outputs
summary: Set Input/Ouput Values
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Sets a list of values of a virtual controller inputs/outputs.
operationId: setIOValues
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/IOValue'
example:
- io: io1
value: true
value_type: boolean
- io: io2
value: '42'
value_type: integer
- io: io3
value: 3.14
value_type: float
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'501':
$ref: '#/components/responses/NotImplemented'
/cells/{cell}/virtual-controllers/{controller}/ios/description:
get:
tags:
- Virtual Controller Inputs/Outputs
summary: List Descriptions
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Lists the input/output descriptions of the virtual robot controller.
The input/output descriptions contain information like name, type and unit.\
Available inputs/outputs are defined by the virtual robot controller.\
Each input/output has a unique identifier.
- If no identifiers and no filters are specified in the request, all available inputs/outputs are retrieved by this endpoint.
- If a filter, e.g., `direction`, `value_type`, `group` is applied, only matching inputs/outputs are returned.
operationId: listVirtualControllerIODescriptions
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: ios
in: query
schema:
type: array
description: |
Array of input/output identifiers to retrieve the descriptions for.
If empty or not provided, descriptions of all available inputs/outputs for the requested robot controller will be returned.
items:
type: string
- name: direction
in: query
schema:
$ref: '#/components/schemas/IODirection'
description: |
Return only inputs/outputs with the specified direction.
- name: value_type
in: query
schema:
$ref: '#/components/schemas/IOValueType'
description: |
Return only inputs/outputs with the specified value type.
- name: group
in: query
schema:
type: string
description: |
Return only inputs/outputs from the specified group.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListIODescriptionsResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/motion-groups/{motion-group}/state:
get:
tags:
- Virtual Controller
summary: Get Motion Group State
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Get the current motion group state which provides values for the joints' position, velocity and acceleration.
operationId: getMotionGroupState
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/MotionGroupJoints'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Virtual Controller
summary: Set Motion Group State
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Sets the values for joint position, joint velocity or joint acceleration of a motion group state.
The values are immediately applied to the joints of the motion group.
> #### NOTE
>
> Only use the endpoint when the motion group is in monitor mode. If the motion group is controlled, currently jogging or planning motions,
> the values are overridden by the controller or an error may occur.
operationId: setMotionGroupState
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/MotionGroupJoints'
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/motion-groups/{motion-group}:
delete:
tags:
- Virtual Controller
summary: Delete Motion Group
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Removes a motion group configuration from the virtual controller.
> #### NOTE
>
> When a motion group is removed, **the virtual robot is restarted** to apply the new configuration.
>
> During this restart:
> - Robot visualization can temporarily disappear or appear outdated in the UI.
> - Motion group changes are not immediately visible in visualizations.
> - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully
operational again.
>
> The API call itself **does not wait until the restart and re-synchronization are complete**.
operationId: deleteVirtualControllerMotionGroup
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
responses:
'200':
description: Motion group deleted successfully
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/coordinate-systems:
get:
tags:
- Virtual Controller
summary: List Coordinate Systems
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Lists all coordinate systems on the robot controller.
operationId: listVirtualControllerCoordinateSystems
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListCoordinateSystemsResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/coordinate-systems/{coordinate-system}:
put:
tags:
- Virtual Controller
summary: Add Coordinate Systems
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Adds a coordinate system to the robot controller.
> #### NOTE
>
> When a new coordinate system is added, the **virtual robot is restarted** to apply the new configuration.
>
> During this restart:
> - Robot visualization can temporarily disappear or appear outdated in the UI.
> - Coordinate system changes are not immediately visible in visualizations.
> - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again.
>
> The API call itself does **not wait until the restart and re-synchronization are complete**.
> This means that immediately after a successful response, the new coordinate system may not yet be available for visualization or program execution.
operationId: addVirtualControllerCoordinateSystem
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/CoordinateSystem'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CoordinateSystemData'
example:
name: CS-user
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
orientation_type: ROTATION_VECTOR
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- Virtual Controller
summary: Delete Coordinate System
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Deletes a coordinate system from the virtual controller.
This will remove the coordinate system from the list of coordinate systems and also remove
all dependent coordinate systems that use the deleted coordinate system as reference.
> #### NOTE
>
> When a new coordinate system is removed, the **virtual robot is restarted** to apply the new configuration.
>
> During this restart:
> - Robot visualization can temporarily disappear or appear outdated in the UI.
> - Coordinate system changes are not immediately visible in visualizations.
> - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again.
>
> The API call itself does **not wait until the restart and re-synchronization are complete**.
> This means that immediately after a successful response, the new coordinate system may not yet be available for visualization or program execution.
operationId: deleteVirtualControllerCoordinateSystem
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/CoordinateSystem'
- name: delete_dependent
in: query
schema:
type: boolean
default: false
description: If true, all dependent coordinate systems will be deleted as well.
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/motion-groups/{motion-group}/mounting:
get:
tags:
- Virtual Controller
summary: Get Mounting
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Gets motion group mounting.
The motion group is based on the origin of the returned coordinate system.
operationId: getVirtualControllerMounting
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CoordinateSystem'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Virtual Controller
summary: Set Mounting
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Sets the motion group mounting by specifying a coordinate system.
The motion group will be based on the coordinate system's origin.
The coordinate system defines a transformation offset, which consists of:
- A unique identifier
- A user-facing name
- An offset in another coordinate system, referenced by the unique identifier of the reference coordinate system.
> #### Changing the mounting configuration is considered a setup change
>
> When the mounting is set to a new coordinate system, the **virtual robot is restarted** to apply the new configuration.
>
> During this restart:
> - Robot visualization can temporarily disappear or not reflect the new mounting immediately.
> - Motion group state and coordinate system alignment may not be immediately visible in visualizations.
> - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again.
>
> The API call itself does **not wait until the restart and re-synchronization are complete**.
> A successful response indicates that the request was accepted, but the updated mounting may not yet be visible.
operationId: setVirtualControllerMounting
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CoordinateSystem'
example:
coordinate_system: world
name: mounting
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
orientation_type: ROTATION_VECTOR
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CoordinateSystem'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/motion-groups/{motion-group}/tcps:
get:
tags:
- Virtual Controller
summary: List TCPs
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Lists TCPs of the motion group.
An empty TCP list is valid, e.g., for external axes.
operationId: listVirtualControllerTcps
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/RobotTcps'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/motion-groups/{motion-group}/tcps/{tcp}:
put:
tags:
- Virtual Controller
summary: Add TCP
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Adds a new TCP or updates an existing TCP in the motion group.
The position and rotation values in the request body are defined within the flange's coordinate system.
> **NOTE**
>
> Ensure the TCP's position is within the robot's reach. Refer to the robot's documentation or data sheet for details like joint limits or reach.
> #### NOTE
>
> When adding or updating a TCP, the **virtual robot is restarted** to apply the new configuration.
>
> During this restart:
> - Robot visualization can temporarily disappear.
> - The TCP may not be immediately visible or appear outdated in visualizations.
> - All connections to virtual robot are closed and re-established, which introduces a short delay before the TCP is available for operation.
>
> The API call itself does **not wait until the restart and re-synchronization are complete**.
> A successful response indicates that the request was accepted, but the TCP may not yet be visible nor usable.
operationId: addVirtualControllerTcp
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
- $ref: '#/components/parameters/Tcp'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RobotTcpData'
examples:
add-tcp-only:
summary: Add TCP without payload
value:
id: kuka
name: kuka-TOOL
position:
- 2.2
- 0
- 0
orientation:
- 0
- 1.1
- 0
orientation_type: ROTATION_VECTOR
add-tcp-with-payload:
summary: Add TCP with payload
value:
id: kuka
name: kuka-TOOL
position:
- 2.2
- 0
- 0
orientation:
- 0
- 1.1
- 0
orientation_type: ROTATION_VECTOR
payload:
name: kuka-payload
mass: 0.34
center_of_mass:
- 0.1
- 0
- 0
moment_of_inertia:
- 0
- 0
- 2.1
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- Virtual Controller
summary: Remove TCP
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Removes the TCP (Tool Center Point) from the motion group.
An unknown TCP is a valid input and will simply be ignored.
> #### NOTE
>
> When removing a TCP, the **virtual robot is restarted** to apply the new configuration.
>
> During this restart:
> - Robot visualization can temporarily disappear.
> - The removal of the TCP may not be immediately visible or appear outdated in visualizations.
> - All connections to virtual robot are closed and re-established, which introduces a short delay before the system is fully operational again.
>
> The API call itself does **not wait until the restart and re-synchronization are complete**.
> A successful response indicates that the request was accepted, but the then used TCP may not yet be visible nor usable.
operationId: deleteVirtualControllerTcp
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- $ref: '#/components/parameters/MotionGroup'
- $ref: '#/components/parameters/Tcp'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/emergency-stop:
get:
tags:
- Virtual Controller
summary: Get Emergency Stop State
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Requests the Emergency Stop state of the virtual robot controller.
Use [getCurrentMotionGroupState](#/operations/getCurrentMotionGroupState) to get the Emergency Stop state with `safety_state` regardless of the controller type.
> **NOTE**
>
> The Emergency Stop state can only be changed when using virtual robot controllers.
operationId: getEmergencyStop
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Flag'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Virtual Controller
summary: Push or Release Emergency Stop
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Activates or releases the Emergency Stop on the virtual robot controller.
Activating the Emergency Stop stops the execution of all motions.
The stop is executed on physical controllers immediately not gracefully and not on paths.
Due to restricted physical behavior of the virtual robot controller, the Emergency Stop is executed on paths.
To return to normal operation the Emergency Stop needs to be released.
Use [getCurrentMotionGroupState](#/operations/getCurrentMotionGroupState) to get the Emergency Stop state with `safety_state` regardless of the controller type.
> **NOTE**
>
> The Emergency Stop state can only be changed via API when using virtual robot controllers.
operationId: setEmergencyStop
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: active
in: query
schema:
type: boolean
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/operationmode:
get:
tags:
- Virtual Controller
summary: Get Operation Mode
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Requests the operation mode of the virtual robot controller.
To get the operation mode regardless of the controller type, use [getCurrentMotionGroupState](#/operations/getCurrentMotionGroupState).
> **NOTE**
>
> The operation mode can only be changed via API when using virtual robot controllers.
operationId: getOperationMode
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/OpMode'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Virtual Controller
summary: Set Operation Mode
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Changes the operation mode of the virtual robot controller to the specified value.
To get the operation mode regardless of the controller type, use [getCurrentMotionGroupState](#/operations/getCurrentMotionGroupState).
> **NOTE**
>
> The operation mode can only be changed via API when using virtual robot controllers.
operationId: setOperationMode
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: mode
in: query
required: true
schema:
$ref: '#/components/schemas/OperationMode'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/cycle-time:
get:
tags:
- Virtual Controller Behavior
summary: Get Cycle Time
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Get the cycle time of controller communication in [ms].
operationId: getCycleTime
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CycleTime'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/behavior:
get:
tags:
- Virtual Controller Behavior
summary: Get Behavior
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Get the current virtual controller behavior.
See [setVirtualControllerBehavior](#/operations/setVirtualControllerBehavior) and the body for
details.
operationId: getVirtualControllerBehavior
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Behavior'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Virtual Controller Behavior
summary: Set Behavior
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
Set virtual controller behavior.
See query parameters for details.
operationId: setVirtualControllerBehavior
x-scope: can_operate_virtual_controllers
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
- name: behavior
in: query
schema:
$ref: '#/components/schemas/Behavior'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/virtual-controllers/{controller}/external-joints-stream:
get:
tags:
- Virtual Controller Behavior
summary: Stream Joint Configuration
description: |
**Required permissions:** `can_operate_virtual_controllers` - Operate and configure virtual controllers
___
> Websocket endpoint
Sends the **commanded** state, e.g., joint positions, velocities, accelerations, torques, for each motion group of the virtual controller
and sets the joint configuration.
Use [planTrajectory](#/operations/planTrajectory) and [executeTrajectory](#/operations/executeTrajectory) to move motion groups on virtual controllers.
Learn more about the [movement behavior of virtual controllers in comparison to physical controllers](#/operations/executeTrajectory#movement-behavior).
> **NOTE**
>
> Incoming joint configurations are not visualized and their velocity limits are not checked.
#### Use cases
1. Creating a robotic application that dynamically adapts to the configured joints on the robot controller, using this stream to feed new joint configurations back to the motion groups.\
The stream only sends data to the robot controller if a motion is executed.\
If the robot controller's joint configuration differs too much from the incoming joint configuration, a following error occurs.
Joint configurations that result in following errors are executed only for motions with a low velocity.
2. Mimic freedrive motions.
> **DANGER**
>
> If the incoming joint configuration is set to maximum velocity, the movement to reach this incoming joint configuration
> will be executed with maximum speed regardless of safety zones and mechanical limits.
operationId: externalJointsStream
x-scope: can_operate_virtual_controllers
x-bidistream: true
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Controller'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalJointStreamRequest'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalJointStreamDatapoints'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/store/objects:
get:
tags:
- Store Object
summary: List all Object Keys
description: |
**Required permissions:** `can_read_objects` - Read stored objects
___
List the keys for all objects.
operationId: listAllObjectKeys
x-scope: can_read_objects
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Key'
delete:
tags:
- Store Object
summary: Clear all Objects
description: |
**Required permissions:** `can_write_objects` - Write stored objects
___
Delete all objects.
> This will delete ALL your persistently stored data.
operationId: clearAllObjects
x-scope: can_write_objects
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'204':
description: Successful Response
/cells/{cell}/store/objects/{key}:
head:
tags:
- Store Object
summary: Get Object Metadata
description: |
**Required permissions:** `can_read_objects` - Read stored objects
___
Returns metadata. Object content is not returned.
operationId: getObjectMetadata
x-scope: can_read_objects
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Key'
responses:
'200':
description: Successful Response
headers:
Content-Type:
$ref: '#/components/headers/Content-Type'
Content-Length:
$ref: '#/components/headers/Content-Length'
Last-Modified:
$ref: '#/components/headers/Last-Modified'
X-Metadata:
$ref: '#/components/headers/Metadata'
'404':
$ref: '#/components/responses/NotFound'
get:
tags:
- Store Object
summary: Get Object
description: |
**Required permissions:** `can_read_objects` - Read stored objects
___
Returns content and metadata of a stored object.
operationId: getObject
x-scope: can_read_objects
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Key'
responses:
'200':
content:
'*/*':
schema:
$ref: '#/components/schemas/BinaryObject'
headers:
Content-Type:
$ref: '#/components/headers/Content-Type'
Content-Length:
$ref: '#/components/headers/Content-Length'
Last-Modified:
$ref: '#/components/headers/Last-Modified'
X-Metadata:
$ref: '#/components/headers/Metadata'
description: Successful Response
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Store Object
summary: Store Object
description: |
**Required permissions:** `can_write_objects` - Write stored objects
___
Store any data as an object.
Using a key which already contains an object will override the previously stored object.
Use [getObjectMetadata](#/operations/getObjectMetadata) to verify that the key does not contain objects.
#### Optional
Specify metadata as a dictionary with names and values.
operationId: storeObject
x-scope: can_write_objects
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Key'
- $ref: '#/components/parameters/MetadataHeader'
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
any_value: {}
required: true
responses:
'204':
description: Successful Response
'400':
description: Failed to store object
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
tags:
- Store Object
summary: Delete Object
description: |
**Required permissions:** `can_write_objects` - Write stored objects
___
Delete an object
> This will delete persistently stored data.
operationId: deleteObject
x-scope: can_write_objects
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Key'
responses:
'204':
description: Successful Response
'404':
$ref: '#/components/responses/NotFound'
/cells/{cell}/store/collision/colliders:
get:
tags:
- Store Collision Components
summary: List Colliders
operationId: listStoredColliders
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns all stored colliders.
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ColliderDictionary'
/cells/{cell}/store/collision/colliders-keys:
get:
tags:
- Store Collision Components
summary: List Collider Keys
operationId: listStoredCollidersKeys
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns a list of keys for stored colliders.
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
type: string
description: List of collider keys
/cells/{cell}/store/collision/colliders/{collider}:
get:
tags:
- Store Collision Components
summary: Get Collider
operationId: getStoredCollider
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns the collider.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Collider'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Collider'
'404':
description: Not found
content: {}
put:
tags:
- Store Collision Components
summary: Store Collider
operationId: storeCollider
x-scope: can_write_collision_world
description: |
**Required permissions:** `can_write_collision_world` - Write collision models and scenes
___
Stores collider.
- If the collider does not exist, it will be created.
- If the collider exists, it will be updated.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Collider'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Collider'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Collider'
delete:
tags:
- Store Collision Components
summary: Delete Collider
operationId: deleteStoredCollider
x-scope: can_write_collision_world
description: |
**Required permissions:** `can_write_collision_world` - Write collision models and scenes
___
Deletes the stored collider.
> This will delete persistently stored data.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Collider'
responses:
'204':
description: Deleted
content: {}
/cells/{cell}/store/collision/link-chains:
get:
tags:
- Store Collision Components
summary: List Link Chains
operationId: listCollisionLinkChains
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns the stored link chains.
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
additionalProperties:
$ref: '#/components/schemas/LinkChain'
/cells/{cell}/store/collision/link-chains-keys:
get:
tags:
- Store Collision Components
summary: List Link Chain Keys
operationId: listCollisionLinkChainsKeys
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns a list of keys for stored link chains.
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
type: string
description: List of link chain keys
/cells/{cell}/store/collision/link-chains/{link-chain}:
get:
tags:
- Store Collision Components
summary: Get Link Chain
operationId: getStoredCollisionLinkChain
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns the collision link chain.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/LinkChain'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LinkChain'
'404':
description: Not found
content: {}
put:
tags:
- Store Collision Components
summary: Store Link Chain
operationId: storeCollisionLinkChain
x-scope: can_write_collision_world
description: |
**Required permissions:** `can_write_collision_world` - Write collision models and scenes
___
Stores link chain.
- If the link chain does not exist, it will be created.
- If the link chain exists, it will be updated.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/LinkChain'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LinkChain'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/LinkChain'
delete:
tags:
- Store Collision Components
summary: Delete Link Chain
operationId: deleteStoredCollisionLinkChain
x-scope: can_write_collision_world
description: |
**Required permissions:** `can_write_collision_world` - Write collision models and scenes
___
Deletes the stored link chain.
> This will delete persistently stored data.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/LinkChain'
responses:
'204':
description: Deleted
content: {}
/cells/{cell}/store/collision/tools:
get:
tags:
- Store Collision Components
summary: List Tools
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns the list of stored tools.
operationId: listStoredCollisionTools
x-scope: can_read_collision_world
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
additionalProperties:
$ref: '#/components/schemas/Tool'
/cells/{cell}/store/collision/tools-keys:
get:
tags:
- Store Collision Components
summary: List Tool Keys
operationId: listStoredCollisionToolsKeys
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns a list of keys for stored tools.
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
type: string
description: List of tool keys
/cells/{cell}/store/collision/tools/{tool}:
get:
tags:
- Store Collision Components
operationId: getStoredCollisionTool
x-scope: can_read_collision_world
summary: Get Tool
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns the stored tool.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Tool'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Tool'
'404':
description: Not found
content: {}
put:
tags:
- Store Collision Components
operationId: storeCollisionTool
x-scope: can_write_collision_world
summary: Store Tool
description: |
**Required permissions:** `can_write_collision_world` - Write collision models and scenes
___
Stores the tool.
- If the tool does not exist, it will be created.
- If the tool exists, it will be updated.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Tool'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Tool'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Tool'
delete:
tags:
- Store Collision Components
operationId: deleteStoredCollisionTool
x-scope: can_write_collision_world
summary: Delete Tool
description: |
**Required permissions:** `can_write_collision_world` - Write collision models and scenes
___
Deletes the stored tool.
> This will delete persistently stored data.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Tool'
responses:
'204':
description: Deleted
content: {}
/cells/{cell}/store/collision/setups:
get:
tags:
- Store Collision Setups
summary: List Collision Setups
operationId: listStoredCollisionSetups
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns a list of stored collision setups.
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
additionalProperties:
$ref: '#/components/schemas/CollisionSetup'
/cells/{cell}/store/collision/setups-keys:
get:
tags:
- Store Collision Setups
summary: List Collision Setup Keys
operationId: listStoredCollisionSetupsKeys
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns a list of keys for stored collision setups.
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
type: string
description: List of collision setup keys
/cells/{cell}/store/collision/setups/{setup}:
get:
tags:
- Store Collision Setups
summary: Get Collision Setup
operationId: getStoredCollisionSetup
x-scope: can_read_collision_world
description: |
**Required permissions:** `can_read_collision_world` - Read collision models and scenes
___
Returns the stored collision setup.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Setup'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CollisionSetup'
'404':
description: Not found
content: {}
put:
tags:
- Store Collision Setups
summary: Store Collision Setup
operationId: storeCollisionSetup
x-scope: can_write_collision_world
description: |
**Required permissions:** `can_write_collision_world` - Write collision models and scenes
___
Stores collision setup.
- If the collision setup does not exist, it will be created.
- If the collision setup exists, it will be updated.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Setup'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CollisionSetup'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CollisionSetup'
delete:
tags:
- Store Collision Setups
summary: Delete Collision Setup
operationId: deleteStoredCollisionSetup
x-scope: can_write_collision_world
description: |
**Required permissions:** `can_write_collision_world` - Write collision models and scenes
___
Deletes the stored collision setup.
> This will delete persistently stored data.
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/Setup'
responses:
'204':
description: Deleted
content: {}
/cells/{cell}/bus-ios/ios/description:
get:
summary: List Descriptions
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
List all input/output descriptions for configured BUS services.
The input/output descriptions contain information like name, type and unit.
The input/output direction is given in perspective of the BUS service.
operationId: listBusIODescriptions
x-scope: can_operate_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/ListBusIODescriptionsResponse'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/state:
get:
summary: State
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
Get the current state of the BUS Inputs/Outputs service.
operationId: getBusIOState
x-scope: can_operate_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/BusIOsState'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/ios/values:
get:
tags:
- BUS Inputs/Outputs
summary: Get Input/Output Values
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
Retrieves the current values of inputs/outputs.
The identifiers of the inputs/outputs must be provided in the request.
Request all available input/output identifiers via [listBusIODescriptions](#/operations/listBusIODescriptions).
operationId: getBusIOValues
x-scope: can_operate_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
- name: ios
in: query
schema:
type: array
items:
type: string
description: |
Array of input/output identifiers to retrieve the values for.
example:
- bLightGreen
- bLightYellow
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ListIOValuesResponse'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
put:
tags:
- BUS Inputs/Outputs
summary: Set Output Values
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
Set values of outputs. In case of virtual Bus Input/Outputs, also inputs can be set.
All available output identifiers can be requested via [listBusIODescriptions](#/operations/listBusIODescriptions).
The call will return once the values have been set and accepted by the service.
operationId: setBusIOValues
x-scope: can_operate_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/IOValue'
example:
- io: io1
value: true
value_type: boolean
- io: io2
value: '42'
value_type: integer
- io: io3
value: 3.14
value_type: float
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/profinet/description:
get:
tags:
- BUS Inputs/Outputs
summary: Get PROFINET Description
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
Get description of NOVA as a PROFINET device.
operationId: getProfinetDescription
x-scope: can_operate_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProfinetDescription'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/profinet/ios:
get:
summary: List PROFINET Input/Output Configuration
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
List descriptions for all configured input/output variables of the PROFINET service.
The input/output descriptions contain information like name, type, and unit.
The input/output direction is given in perspective of the PROFINET device, e.g., the configured PROFINET service.
- The byte and bit addresses are the locations in the PROFINET input/output process image the variable points to.
- The PROFINET controller, as well as NOVA's PROFINET service, use an input/output variable configuration to interpret the bits of the input and output process image.
- The NOVA PROFINET service's configuration is modified via [addProfinetIO](#/operations/addProfinetIO) and [setProfinetIOsFromFile](#/operations/setProfinetIOsFromFile).
For the PROFINET controller, e.g., a connected PLC, refer to the corresponding third party software, e.g., TIA portal.
operationId: listProfinetIOs
x-scope: can_operate_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/ProfinetIOs'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
delete:
summary: Remove all PROFINET Input/Outputs
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Removes all input/output variable configurations from the PROFINET device, e.g., NOVA's PROFINET service.
operationId: deleteAllProfinetIOs
x-scope: can_manage_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/profinet/ios/{io}:
put:
tags:
- BUS Inputs/Outputs
summary: Add PROFINET Input/Output
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Adds an input/output variable to or updates an input/output variable on the PROFINET device, e.g., NOVA's PROFINET service.
The inputs/outputs map variables to specific memory addresses in the process image.
The default process image has buffer lengths of 64 bytes for input and output.
- The size of the buffer is determined by the `config_file_content` that is passed in [addBusIOService](#/operations/addBusIOService)
and has to be in accordance with the GSDML file describing the PROFINET device.
The PROFINET controller as well as NOVA's PROFINET service use an input/output variable configuration to interpret the bits of the input/output process image.
- The NOVA's PROFINET service's configuration can be viewed via [listProfinetIOs](#/operations/listProfinetIOs).
For the PROFINET controller, e.g., a connected PLC, refer to the corresponding third party software, e.g., TIA portal).
operationId: addProfinetIO
x-scope: can_manage_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/IO'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProfinetIOData'
example:
description: Counter
type: PROFINET_IO_TYPE_INT
direction: PROFINET_IO_DIRECTION_INPUT
byte_address: 0
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
delete:
tags:
- BUS Inputs/Outputs
summary: Remove PROFINET Input/Ouptut
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Removes an input/output variable configuration from the PROFINET device, e.g., NOVA's PROFINET service.
operationId: deleteProfinetIO
x-scope: can_manage_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/IO'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/profinet/iofile:
put:
tags:
- BUS Inputs/Outputs
summary: Set PROFINET Inputs/Outputs from File
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Sets input/output variable configuration on the PROFINET device (i.e. NOVA's PROFINET service) from XML file.
The inputs/outputs map variables to specific memory addresses in the process image.
The default process image has buffer lengths of 64 bytes for input and output.
- The size of the buffer is determined by the `config_file_content` that is passed in [addBusIOService](#/operations/addBusIOService)
and has to be in accordance with the GSDML file describing the PROFINET device.
The PROFINET controller, as well as NOVA's PROFINET service, use an input/output variable configuration to interpret the bits of the input/output process image.
- The NOVA's PROFINET service's configuration can be viewed via [listProfinetIOs](#/operations/listProfinetIOs).
For the PROFINET controller, e.g., a connected PLC, refer to the corresponding engineering system, e.g., TIA portal.
#### Export variables
You can export the variable configuration of the PROFINET controller as an XML file from your engineering system, e.g., TIA portal.
- The endpoint is built so that the perspective of input and output (PROFINET Device's input is PROFINET Controller's output)
is internally handled (PROFINET device input is PROFINET controller output), meaning that you can paste the exported XML file here without modifying.
operationId: setProfinetIOsFromFile
x-scope: can_manage_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProfinetInputOutputConfig'
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
get:
tags:
- BUS Inputs/Outputs
summary: PROFINET Inputs/Outputs to File
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
Get input/output variable configuration of the PROFINET device, e.g., NOVA's PROFINET service as file.
You can specify byte offsets for the input and output variable addresses to get an XML tagmap that is ready to paste to the third party software, e.g., TIA portal.
operationId: getProfinetIOsFromFile
x-scope: can_operate_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
- name: input_offset
in: query
schema:
type: integer
format: int32
default: 0
minimum: 0
description: Offset in bytes for the input (perspective of the controller) variables. The offset is added to the byte addresses of the PROFINET device, e.g., NOVA's PROFINET service.
example: 0
- name: output_offset
in: query
schema:
type: integer
format: int32
default: 0
minimum: 0
description: Offset in bytes for the output (perspective of the controller) variables. The offset is added to the byte addresses of the PROFINET device, e.g., NOVA's PROFINET service.
example: 0
responses:
'200':
description: OK
content:
application/json:
schema:
type: string
description: Content of the input output configuration file.
example:
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/profinet/gsdml:
get:
tags:
- BUS Inputs/Outputs
summary: Get PROFINET GSDML File
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
Returns the Generic Station Description Markup Language (GSDML) file for the PROFINET device.
The GSDML file describes the PROFINET device configuration and capabilities,
and can be imported into PROFINET engineering tools, e.g., TIA Portal, or other PLC programming environments.
The returned GSDML file matches the current slot configuration of the PROFINET device.
operationId: getProfinetGSDML
x-scope: can_operate_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK - GSDML file content
content:
application/xml:
schema:
type: string
description: GSDML XML file content
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/modbus/ios:
get:
summary: List MODBUS Input/Output Configuration
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
List descriptions for all configured input/output variables of the MODBUS service.
The input/output descriptions contain information like name, type, and address.
The input/output direction is given in perspective of the active MODBUS type (service or client).
- The byte and bit addresses are the locations in the MODBUS input/output process image the variable points to.
- The MODBUS controller, as well as NOVA's MODBUS service, use an input/output variable configuration to interpret the bits of the input and output process image.
- The NOVA MODBUS service's configuration is modified via [addModbusIO](#/operations/addModbusIO).
operationId: listModbusIOs
x-scope: can_operate_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/ModbusIOs'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
delete:
summary: Remove all MODBUS Input/Outputs
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Removes all input/output variable configurations from the MODBUS device, e.g., NOVA's MODBUS service.
operationId: deleteAllModbusIOs
x-scope: can_manage_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/modbus/ios/{io}:
put:
tags:
- BUS Inputs/Outputs
summary: Add MODBUS Input/Output
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Adds an input/output variable to or updates an input/output variable on the MODBUS device, e.g., NOVA's MODBUS service.
The inputs/outputs map variables to specific memory addresses in the process image.
The NOVA's MODBUS service's configuration can be viewed via [listModbusIOs](#/operations/listModbusIOs).
operationId: addModbusIO
x-scope: can_manage_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/IO'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ModbusIOData'
example:
description: Counter
address: 0
type: MODBUS_IO_TYPE_UINT16
byte_order: MODBUS_IO_BYTE_ORDER_ABCD
area: MODBUS_IO_AREA_HOLDING_REGISTERS
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
delete:
tags:
- BUS Inputs/Outputs
summary: Remove MODBUS Input/Output
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Removes an input/output variable configuration from the MODBUS device, e.g., NOVA's MODBUS service.
operationId: deleteModbusIO
x-scope: can_manage_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/IO'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/snap7/ios:
get:
summary: List Snap7 Input/Output Configuration
description: |
**Required permissions:** `can_operate_bus_ios` - Read and write BUS IO values
___
List descriptions for all configured input/output variables of the Snap7 service.
The Snap7 service communicates with Siemens PLCs and PLCSIM Advanced instances
via the S7 protocol.
operationId: listSnap7IOs
x-scope: can_operate_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: The operation was successful.
content:
application/json:
schema:
$ref: '#/components/schemas/Snap7IOs'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
delete:
summary: Remove all Snap7 Input/Outputs
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Removes all input/output variable configurations from the Snap7 service.
operationId: deleteAllSnap7IOs
x-scope: can_manage_bus_ios
tags:
- BUS Inputs/Outputs
parameters:
- $ref: '#/components/parameters/Cell'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/cells/{cell}/bus-ios/snap7/ios/{io}:
put:
tags:
- BUS Inputs/Outputs
summary: Add Snap7 Input/Output
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Adds or updates an input/output variable on the Snap7 service.
The inputs/outputs map variables to specific memory locations in a Siemens PLC or
PLCSIM Advanced instance accessed via the S7 protocol.
operationId: addSnap7IO
x-scope: can_manage_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/IO'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Snap7IOData'
example:
description: Counter
area: SNAP7_IO_AREA_DATA_BLOCK
db_number: 1
byte_address: 0
type: SNAP7_IO_TYPE_INT
direction: SNAP7_IO_DIRECTION_INPUT
required: true
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
delete:
tags:
- BUS Inputs/Outputs
summary: Remove Snap7 Input/Output
description: |
**Required permissions:** `can_manage_bus_ios` - Manage BUS IO configuration
___
Removes an input/output variable configuration from the Snap7 service.
operationId: deleteSnap7IO
x-scope: can_manage_bus_ios
parameters:
- $ref: '#/components/parameters/Cell'
- $ref: '#/components/parameters/IO'
responses:
'200':
description: OK
content: {}
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'412':
$ref: '#/components/responses/PreconditionFailed'
/version:
get:
tags:
- Version
summary: API Version
description: |-
**Required permissions:** `can_access_system` - View system status and metadata
___
Retrieves the version of the NOVA API.
operationId: getApiVersion
x-scope: can_access_system
responses:
'200':
description: Successfully retrieved the API version.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiVersion'
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
schemas:
NameList:
description: A list of names
type: array
items:
type: string
CellName:
type: string
description: |
A unique name for the cell used as an identifier for addressing the cell in all API calls.
It must be a valid k8s label name as defined by [RFC 1123](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names).
pattern: ^[a-z][a-z0-9-]{0,30}[a-z0-9]$
default: cell
CellDescription:
type: string
maxLength: 200
description: |
A description of the cell.
AbbController:
title: AbbController
description: |
The configuration of a physical ABB robot controller has to contain IP address.
Additionally an EGM server configuration has to be specified in order to control the robot.
Deploying the server is a functionality of this API.
type: object
required:
- kind
- controller_ip
- controller_port
- egm_server
properties:
kind:
type: string
enum:
- AbbController
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
controller_ip:
type: string
controller_port:
description: |
Default values: 80, 443. If custom value is set, field is required.
type: integer
default: 80
egm_server:
description: The EGM server runs inside of the cell, thus its IP must be in the same network as the 'controller_ip'
type: object
required:
- ip
- port
properties:
ip:
type: string
port:
type: integer
default: 32112
FanucController:
title: FanucController
description: The configuration of a physical FANUC robot controller has to contain IP address of the controller.
type: object
required:
- kind
- controller_ip
properties:
kind:
type: string
enum:
- FanucController
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
controller_ip:
type: string
KukaController:
title: KukaController
description: |
The configuration of a physical KUKA robot controller has to contain an IP address.
Additionally an RSI server configuration has to be specified in order to control the robot.
Deploying the server is a functionality of this API.
type: object
required:
- kind
- controller_ip
- controller_port
- rsi_server
properties:
kind:
type: string
enum:
- KukaController
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
controller_ip:
type: string
controller_port:
type: integer
default: 54600
rsi_server:
description: The RSI server runs inside of the cell.
type: object
required:
- ip
- port
properties:
ip:
type: string
default: 0.0.0.0
port:
type: integer
default: 30152
slow_cycle_rate:
type: boolean
default: false
description: |
If true, uses slower cycle time of 12ms instead of 4ms.
UniversalrobotsController:
title: UniversalrobotsController
description: The configuration of a physical Universal Robots controller has to contain IP address of the controller.
type: object
required:
- kind
- controller_ip
properties:
kind:
type: string
enum:
- UniversalrobotsController
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
controller_ip:
type: string
Manufacturer:
type: string
enum:
- abb
- fanuc
- kuka
- staubli
- universalrobots
- yaskawa
VirtualController:
title: VirtualController
description: |
The configuration of a virtual robot controller has to contain the manufacturer string,
an optional joint position string array, and either a preset `type` **or** the complete JSON configuration.
type: object
required:
- kind
- manufacturer
properties:
kind:
type: string
enum:
- VirtualController
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
manufacturer:
$ref: '#/components/schemas/Manufacturer'
type:
type: string
description: |
Preset type of the virtual robot controller.
See [getRobotConfigurations](#/operations/getRobotConfigurations) for supported types.
examples:
- abb-irb1200_7
- abb-irb1010_037_15
- abb-irb2600ID_200_8
- fanuc-arc_mate_120iD12L
- fanuc-crx10ial
- fanuc-lr_mate_200iD4S
- fanuc-r2000ic125l
- kuka-kr10_r1100_2
- kuka-kr210_r2700_extra
- kuka-lbr_iisy_11_r1300
- universalrobots-ur10cb
- yaskawa-ar1440
- yaskawa-gp180-120
- yaskawa-hc20dtp
json:
type: string
description: |
Complete JSON configuration of the virtual robot controller.
Can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration).
If provided, the `type` field should not be used.
initial_joint_position:
type: string
description: |
Initial joint position of the first motion group from the virtual robot controller.
Provides the joint position as a JSON array of float values in radians, where the array length
must match the robot's degrees of freedom (DOF), e.g., `"[0, 0, 0, 0, 0, 0]"` for a 6-DOF robot.
If the provided array length does not match the robot's DOF, the array will be adjusted: if it is longer, extra values will be truncated;
if it is shorter, missing values will be filled with zeros.
YaskawaController:
title: YaskawaController
description: The configuration of a physical Yaskawa robot controller has to contain IP address of the controller.
type: object
required:
- kind
- controller_ip
properties:
kind:
type: string
enum:
- YaskawaController
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
controller_ip:
type: string
RobotController:
type: object
description: The configuration of a physical or virtual robot controller.
required:
- name
- configuration
properties:
name:
description: |
Unique name of controller within the cell.
It must be a valid k8s label name as defined by [RFC 1035](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#rfc-1035-label-names).
type: string
pattern: ^[a-z][a-z0-9-]{0,61}[a-z0-9]$
configuration:
oneOf:
- $ref: '#/components/schemas/AbbController'
- $ref: '#/components/schemas/FanucController'
- $ref: '#/components/schemas/KukaController'
- $ref: '#/components/schemas/UniversalrobotsController'
- $ref: '#/components/schemas/VirtualController'
- $ref: '#/components/schemas/YaskawaController'
discriminator:
propertyName: kind
x-go-type-name: ControllerConfig
ImageCredentials:
type: object
description: |
User provided credentials for creating a secret to pull an image from a registry.
required:
- registry
- user
- password
properties:
registry:
type: string
user:
type: string
password:
type: string
ContainerImage:
type: object
description: |
A user provided, custom container image and the required credentials to pull it from a registry.
required:
- image
properties:
image:
description: The location of a container image in the form of `/:`.
type: string
minLength: 1
credentials:
$ref: '#/components/schemas/ImageCredentials'
secrets:
type: array
description: Known secrets for authentication with the container registry.
items:
type: object
required:
- name
properties:
name:
type: string
ContainerEnvironment:
type: array
description: |
A list of environment variables with name and their value.
These can be used to configure the containerized application, and turn features on or off.
items:
type: object
required:
- name
- value
properties:
name:
type: string
value:
type: string
Capacity:
type: string
description: The amount of requested storage capacity.
pattern: ^[0-9]+(\\.[0-9]+)?(Ki|Mi|Gi|Ti|Pi|Ei|B)?$
example: 100Mi
ContainerStorage:
type: object
description: |
The path and capacity of a volume that retains data across application restarts.
The maximal requestable capacity is 300Mi.
If you need more capacity consider using [storeObject](#/operations/storeObject).
required:
- mount_path
- capacity
properties:
mount_path:
type: string
format: path
example: /data
capacity:
$ref: '#/components/schemas/Capacity'
description: |
The amount of local storage available for the application.
**NOTE:** The capacity can NEVER be reduced!
ContainerResources:
type: object
description: Additional resources that the application requires.
properties:
intel_gpu:
type: integer
description: Number of GPUs the application requires.
minimum: 0
maximum: 1
memory_limit:
type: string
description: The maximum memory allocated to this application.
example: 1000Mi
App:
type: object
description: |
An App is defined by a webserver, packed inside a container, serving a web-application.
required:
- name
- app_icon
- container_image
properties:
name:
description: |
The name of the provided application.
The name must be unique within the cell and is used as a identifier for addressing the application in all API calls
, e.g., when updating the application.
It also defines where the application is reachable (/$cell/$name).
It must be a valid k8s label name as defined by [RFC 1035](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#rfc-1035-label-names).
type: string
pattern: ^[a-z][a-z0-9-]{0,61}[a-z0-9]$
minLength: 1
app_icon:
description: The path of the icon for the App (/$cell/$name/$app_icon).
type: string
minLength: 1
container_image:
$ref: '#/components/schemas/ContainerImage'
port:
description: The port the containerized webserver is listening on.
type: integer
default: 8080
environment:
$ref: '#/components/schemas/ContainerEnvironment'
storage:
$ref: '#/components/schemas/ContainerStorage'
resources:
$ref: '#/components/schemas/ContainerResources'
health_path:
description: |
Defines the URL path suffix used to check the application's health status. The complete health check URL
is constructed as `/$cell/$name/$health_path`. When the application is working as expected,
the endpoint returns an HTTP 200 status code.
If not specified, the system will default to using the application icon path suffix
(the value of `app_icon`) as the health check endpoint, resulting in `/$cell/$name/$app_icon`.
If the health check fails (no response or non-200 status code), the system will
automatically restart the application container to restore service.
type: string
diagnosis_path:
description: |
Defines the URL path suffix used to provide an endpoint for diagnosis data collection.
The complete diagnosis check URL is constructed as `/$cell/$name/$diagnosis_path`.
The endpoint is called when a diagnosis package is requested via the diagnosis API.
The endpoint needs to return the data within a zip file `application/zip` response.
type: string
Cell:
type: object
description: |
To create a robot cell, only a valid name is required.
Once created, a robot cell provides access to the Wandelbots NOVA foundation services.
The configuration can be customized, e.g., robot controllers, also within apps.
required:
- name
additionalProperties: {}
properties:
name:
$ref: '#/components/schemas/CellName'
default: cell
version:
description: |
Wandelbots NOVA version of the cell.
This version must not exceed the current system version.
type: string
description:
$ref: '#/components/schemas/CellDescription'
controllers:
type: array
items:
$ref: '#/components/schemas/RobotController'
apps:
type: array
items:
$ref: '#/components/schemas/App'
Error:
type: object
required:
- message
properties:
code:
type: string
message:
type: string
OperatingState:
format: enum
type: string
enum:
- ACTIVE
- INACTIVE
description: The operating state.
ServiceGroup:
type: string
enum:
- SystemService
- CellService
- RobotController
- App
ServiceStatusSeverity:
type: string
enum:
- INFO
- WARNING
- ERROR
ServiceStatusPhase:
type: string
enum:
- Terminating
- Initialized
- Running
- NoReady
- Completed
- ContainerCreating
- PodInitializing
- Unknown
- CrashLoopBackOff
- Error
- ImagePullBackOff
- OOMKilled
- Pending
- Evicted
ServiceStatus:
type: object
required:
- service
- group
- status
properties:
service:
type: string
group:
$ref: '#/components/schemas/ServiceGroup'
status:
type: object
required:
- severity
- code
properties:
severity:
$ref: '#/components/schemas/ServiceStatusSeverity'
code:
$ref: '#/components/schemas/ServiceStatusPhase'
reason:
type: string
ServiceStatusList:
type: array
items:
$ref: '#/components/schemas/ServiceStatus'
ServiceStatusResponse:
type: object
description: |
Response containing both the overall operating state of the cell and detailed status information for each service within the cell.
The operating state indicates whether the cell is active or inactive, while the service statuses provide specific health and operational
information for individual service running in the cell.
required:
- operating_state
- service_status
properties:
operating_state:
$ref: '#/components/schemas/OperatingState'
service_status:
$ref: '#/components/schemas/ServiceStatusList'
ReleaseChannel:
type: string
enum:
- stable
- next
description: |
The channel that defines what a new Wandelbots NOVA version is.
* `next` the latest version
* `stable` newest patch of the current version
UpdateCellVersionRequest:
title: updateCellVersionRequest
type: object
description: |
Update a single cell's Foundation chart version based on the indicated release channel.
required:
- channel
properties:
channel:
$ref: '#/components/schemas/ReleaseChannel'
BusIOProfinetIpConfig:
type: object
description: |
Network configuration or IPv4 record of the virtual ethernet interface (pnio1) created by the PROFINET driver.
The IPv4 record is used in combination with the Name of Station (NoS) to identify your device in the PROFINET network.
The `ip_config` will be used as IPv4 record if no REMA XML file is already present on your machine and no `rema_xml_content` is provided.
required:
- ip
- netmask
- gateway
properties:
ip:
type: string
description: IP address for the device's virtual ethernet interface (pnio1).
example: 192.168.1.100
netmask:
type: string
description: Network mask for the device's virtual ethernet interface (pnio1).
example: 255.255.255.0
gateway:
type: string
description: Gateway for connections to other devices outside of the virtual ethernet interface's subnet.
example: 192.168.178.1
BusIOProfinetNetwork:
type: object
properties:
device_name:
type: string
description: |
Name of Station (NoS) of the PROFINET device. The NoS is used in combination with IPv4 record to identify your device in the PROFINET network.
The `device_name` will be used as NoS if no REMA XML file is already present on your machine and no `rema_xml_content` is provided.
example: pnDevice
ip_config:
$ref: '#/components/schemas/BusIOProfinetIpConfig'
rema_xml_content:
type: string
description: |
Content of the PROFINET REMA XML file.
Is used when PROFINET service is added for the first time to create the REMA XML file that holds data to be kept for the next session.
Stores information like IP address, Name of Station (NoS) and hardware configuration.
If you use a PROFINET controller to assign an IP address to the PROFINET device, this information will be written to the REMA XML file.
Refer to the PDF version of the "PN Driver I/O Base programming interface" documentation for more information and an example REMA file.
BusIOProfinetSlot:
title: BusIOProfinetSlot
description: |
Configuration for one PROFINET process data slot.
type: object
required:
- slot
- input_size_bytes
- output_size_bytes
properties:
slot:
type: integer
minimum: 1
maximum: 12
description: |
Slot identifier on the PROFINET device.
example: 1
input_size_bytes:
type: integer
minimum: 0
description: |
Process data size in bytes for the input direction (device → controller).
example: 64
output_size_bytes:
type: integer
minimum: 0
description: |
Process data size in bytes for the output direction (controller → device).
example: 64
BusIOProfinetDefaultRoute:
type: object
description: |
Current default route configuration of your NOVA instance.
The default route is a setting that tells data where to go if there isn’t a specific path already known for its destination.
Usually this will be the path to your router, enabling accessing the internet.
On Linux, use `ip route show` to view your default routes and match the output
`default via dev ...` to get your gateway and interface.
required:
- gateway
- interface
properties:
gateway:
type: string
description: Gateway for the default route.
example: 192.168.124.1
interface:
type: string
description: Interface for the default route.
example: enp3s0
BusIOProfinet:
title: BusIOProfinet
description: |
PROFINET BUS inputs/outputs service configuration.
type: object
required:
- bus_type
- mac
- plc_ip
properties:
bus_type:
type: string
enum:
- profinet
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
network_config:
description: |
Used to enable IP communication through the same physical ethernet interface while PROFINET driver is active.
Optional for SR-IOV-based bus I/O recreation. If omitted and an existing
PROFINET bus I/O configuration for the same MAC address already exists,
the previous network settings are reused.
$ref: '#/components/schemas/BusIOProfinetNetwork'
plc_ip:
type: string
description: |
IP address of the PLC to establish PROFINET communication with.
The IP address is used to configure the host machine's firewall. The firewall configuration is applied while the BUS input/output service is active.
Without proper firewall configuration, PROFINET device discovery, configuration exchanges,
and real-time cyclic data communication will fail.
example: 192.168.1.100
mac:
type: string
description: |
MAC address of the physical ethernet interface that you want to use for PROFINET communication.
example: '00:11:22:33:44:55'
slots:
type: array
description: |
Optional PROFINET slot configuration.
If not provided, the default configuration is used for backward compatibility:
one slot with a size of 64 bytes.
minItems: 1
maxItems: 12
items:
$ref: '#/components/schemas/BusIOProfinetSlot'
default_route:
$ref: '#/components/schemas/BusIOProfinetDefaultRoute'
deprecated: true
BusIOProfinetVirtual:
title: BusIOProfinetVirtual
description: |
Virtual PROFINET BUS inputs/outputs service configuration.
type: object
required:
- bus_type
properties:
bus_type:
type: string
enum:
- profinet_virtual
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
BusIOModbusTCPServer:
type: object
required:
- port
properties:
network_type:
type: string
enum:
- tcp
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
port:
type: integer
format: int32
minimum: 1
maximum: 65534
description: |
Port number of the MODBUS server to establish communication with.
example: 502
BusIOModbusServer:
title: MODBUS-Server
description: |
MODBUS server inputs/outputs service configuration.
type: object
required:
- bus_type
- network
- connections
- coils_size
- discrete_inputs_size
- holding_registers_size
- input_registers_size
properties:
bus_type:
type: string
enum:
- modbus_server
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
network:
$ref: '#/components/schemas/BusIOModbusTCPServer'
connections:
type: integer
format: int32
minimum: 0
maximum: 255
description: |
Number of connections this MODBUS server can handle.
example: 2
coils_size:
type: integer
format: int32
minimum: 0
maximum: 65535
description: |
Size of the Coils memory area.
example: 10
discrete_inputs_size:
type: integer
format: int32
minimum: 0
maximum: 65535
description: |
Size of the Discrete Inputs memory area.
example: 10
holding_registers_size:
type: integer
format: int32
minimum: 0
maximum: 65535
description: |
Size of the Holding Registers memory area.
example: 10
input_registers_size:
type: integer
format: int32
minimum: 0
maximum: 65535
description: |
Size of the Input Registers memory area.
example: 10
BusIOModbusTCPClient:
type: object
required:
- ip
- port
properties:
network_type:
type: string
enum:
- tcp
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
ip:
type: string
description: |
IP address of the MODBUS server to establish communication with.
example: 192.168.1.100
port:
type: integer
format: int32
minimum: 1
maximum: 65534
description: |
Port number of the MODBUS server to establish communication with.
example: 502
BusIOModbusClient:
title: MODBUS-Client
description: |
MODBUS client inputs/outputs service configuration.
type: object
required:
- bus_type
- network
properties:
bus_type:
type: string
enum:
- modbus_client
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
network:
$ref: '#/components/schemas/BusIOModbusTCPClient'
BusIOModbusVirtual:
title: MODBUS-Virtual
description: |
Virtual MODBUS inputs/outputs service configuration.
type: object
required:
- bus_type
properties:
bus_type:
type: string
enum:
- modbus_virtual
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
BusIOSnap7:
title: Snap7
description: |
Snap7 BUS inputs/outputs service configuration.
type: object
required:
- bus_type
- address
properties:
bus_type:
type: string
enum:
- snap7
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
address:
type: string
description: |
IP address or hostname of the Siemens PLC or PLCSIM Advanced endpoint.
example: 192.168.1.100
rack:
type: integer
format: int32
default: 0
minimum: 0
description: |
Rack number of the PLC CPU. Standard value for S7-1200/1500 is 0.
slot:
type: integer
format: int32
default: 1
minimum: 0
description: |
Slot number of the PLC CPU. Standard value for S7-1200/1500 is 1.
BusIOType:
oneOf:
- $ref: '#/components/schemas/BusIOProfinet'
- $ref: '#/components/schemas/BusIOProfinetVirtual'
- $ref: '#/components/schemas/BusIOModbusServer'
- $ref: '#/components/schemas/BusIOModbusClient'
- $ref: '#/components/schemas/BusIOModbusVirtual'
- $ref: '#/components/schemas/BusIOSnap7'
discriminator:
propertyName: bus_type
mapping:
profinet: '#/components/schemas/BusIOProfinet'
profinet_virtual: '#/components/schemas/BusIOProfinetVirtual'
modbus_server: '#/components/schemas/BusIOModbusServer'
modbus_client: '#/components/schemas/BusIOModbusClient'
modbus_virtual: '#/components/schemas/BusIOModbusVirtual'
snap7: '#/components/schemas/BusIOSnap7'
x-go-type-name: BusIOType
UpdateNovaVersionRequest:
title: updateNovaVersionRequest
type: object
description: |
An update is defined by the indicated Wandelbots NOVA release channel.
required:
- channel
properties:
channel:
$ref: '#/components/schemas/ReleaseChannel'
update_cells:
type: boolean
default: true
description: |
Update unpinned cells during system update. Cells with an explicit chart
version are never updated by a system update, regardless of this setting.
User:
type: object
title: User
description: Identity information for the session user. On unmanaged instances all fields are empty strings representing an anonymous user.
required:
- id
- name
- email
properties:
id:
type: string
description: Subject identifier of the user. Empty on unmanaged instances.
example: auth0|507f1f77bcf86cd799439011
name:
type: string
description: Display name of the user. Empty on unmanaged instances.
example: Jane Doe
email:
type: string
description: Email address of the user. Empty on unmanaged instances.
example: jane@example.com
CapabilityEntry:
type: object
title: CapabilityEntry
description: A capability granted to the authenticated user. If `resource_ids` is absent or empty, the capability is granted globally without resource restriction.
required:
- capability
properties:
capability:
type: string
description: Capability relation name.
example: can_manage_cells
resource_ids:
type: array
description: Resource identifiers the capability is scoped to. Absent or empty means the capability is granted globally. Resource IDs are deduplicated and sorted in ascending order.
items:
type: string
example:
- cell-a
- cell-b
SessionResponse:
type: object
title: SessionResponse
description: Session information including user identity, capabilities, and token lifetime metadata. On unmanaged instances (no authentication or authorization configured), a default anonymous session is returned with `session_id` "default", empty user fields, no capabilities, and zero-value timestamps.
required:
- session_id
- user
- capabilities
- issued_at
- expires_at
properties:
session_id:
type: string
description: Unique identifier for the current session. For authenticated sessions this is derived from the access token. Unmanaged instances return "default".
example: sess-507f1f77bcf86cd799439011
user:
$ref: '#/components/schemas/User'
capabilities:
type: array
description: Capability entries resolved for the user. Empty on unmanaged instances.
items:
$ref: '#/components/schemas/CapabilityEntry'
issued_at:
type: string
format: date-time
description: Timestamp when the underlying access token was issued. Zero-value on unmanaged instances.
example: '2026-04-10T10:00:00Z'
expires_at:
type: string
format: date-time
description: Timestamp when the underlying access token expires. Zero-value on unmanaged instances.
example: '2026-04-10T22:00:00Z'
NetworkState:
type: object
required:
- internet_connected
properties:
internet_connected:
type: boolean
description: |
Indicates whether the system is connected to the internet.
connection_type:
type: string
description: |
Type of the active network link (e.g., ethernet, wifi, cellular, vpn, unknown).
enum:
- ethernet
- wifi
- cellular
- vpn
- unknown
signal_strength:
type: integer
format: int32
description: |
Received signal strength in dBm for wireless interfaces; negative values indicate weaker signals.
link_quality:
type: number
format: float
minimum: 0
maximum: 1
description: |
Normalized link quality metric from 0 (poor) to 1 (excellent) when provided by the interface.
latency_ms:
type: number
format: float
description: |
Round-trip latency to the probe endpoint measured in milliseconds.
bandwidth_mbps:
type: number
format: float
description: |
Estimated downstream bandwidth in megabits per second based on the probe.
NetworkInterface:
type: object
required:
- name
- ip
- mac
- cidr
properties:
name:
type: string
description: |
The name of the network interface.
ip:
type: string
format: ipv4
description: |
The IPv4 address assigned to the network interface.
mac:
type: string
description: |
The MAC address of the network interface.
cidr:
type: string
description: |
The CIDR notation of the network interface.
Example: "192.168.1.0/24"
NetworkInterfaces:
type: array
items:
$ref: '#/components/schemas/NetworkInterface'
description: Array of network interface configurations.
NetworkDevice:
type: object
required:
- ip
- mac
properties:
ip:
type: string
format: ipv4
description: |
The IPv4 address assigned to the network device.
mac:
type: string
description: |
The MAC address of the network device.
vendor:
type: string
description: |
The vendor of the network device.
ArpScanResponse:
type: array
items:
$ref: '#/components/schemas/NetworkDevice'
description: Array of network devices.
ConfigurationResourceId:
description: Identifier of a configuration resource.
type: string
ConfigurationResourceArray:
type: array
description: Array of configuration resources.
items:
$ref: '#/components/schemas/ConfigurationResource'
ConfigurationResource:
type: object
description: Configuration resource object.
properties:
id:
$ref: '#/components/schemas/ConfigurationResourceId'
name:
type: string
description: Human-readable name of the configuration resource.
children:
$ref: '#/components/schemas/ConfigurationResourceArray'
required:
- id
- name
Metadata:
description: Additional metadata to add to the backup
type: object
additionalProperties:
type: string
ConfigurationArchive:
description: Binary data representing a configuration archive.
type: string
format: binary
ConfigurationArchiveStatusCreating:
title: ConfigurationArchiveStatusCreating
type: object
required:
- status
- progress
properties:
status:
type: string
enum:
- creating
description: Backup is in progress.
progress:
type: number
format: float
minimum: 0
maximum: 1
description: Current completion ratio (0 – 1).
example:
status: creating
progress: 0.42
ConfigurationArchiveStatusError:
title: ConfigurationArchiveStatusError
type: object
required:
- status
- message
properties:
status:
type: string
enum:
- error
message:
type: string
description: Human-readable explanation of the failure.
example:
status: error
message: Disk quota exceeded
ConfigurationArchiveStatusSuccess:
title: ConfigurationArchiveStatusSuccess
type: object
required:
- status
properties:
status:
type: string
enum:
- success
description: Backup successfully created.
example:
status: success
ConfigurationArchiveStatus:
description: Result of a backup operation.
type: object
discriminator:
propertyName: status
mapping:
creating: '#/components/schemas/ConfigurationArchiveStatusCreating'
error: '#/components/schemas/ConfigurationArchiveStatusError'
success: '#/components/schemas/ConfigurationArchiveStatusSuccess'
oneOf:
- $ref: '#/components/schemas/ConfigurationArchiveStatusCreating'
- $ref: '#/components/schemas/ConfigurationArchiveStatusError'
- $ref: '#/components/schemas/ConfigurationArchiveStatusSuccess'
LicenseStatusEnum:
type: string
enum:
- OK
- EXPIRED
- SUSPENDED
- GRACE_PERIOD_OVER
- NOT_FOUND
LicenseStatus:
description: Status of the license.
type: object
required:
- status
- message
properties:
status:
$ref: '#/components/schemas/LicenseStatusEnum'
message:
type: string
License:
type: object
required:
- product_name
- owner_email
- license_key
- status
- grace_period_expiry_date
- consumed_activations
- allowed_activations
properties:
product_name:
description: Name of the licensed product.
type: string
owner_email:
description: Mail address of the license owner.
type: string
format: email
license_key:
description: Identification key of the license.
type: string
license_expiry_date:
description: Expiration date of the license.
type: string
format: date
grace_period_expiry_date:
description: End date of grace period, given if instance is not connected to internet.
type: string
format: date-time
consumed_activations:
description: Amount of times the license was activated.
type: integer
allowed_activations:
description: Amount of times the license can be activated.
type: integer
feature_limitations:
description: Feature limitations of the license.
type: object
additionalProperties:
type: integer
feature_flags:
description: Features enabled by a license.
type: array
items:
type: string
status:
$ref: '#/components/schemas/LicenseStatus'
ActivateLicenseRequest:
title: activateLicenseRequest
type: object
description: The authentication token to fetch the license from the license server.
required:
- owner_refresh_token
properties:
owner_refresh_token:
type: string
MotionGroupModelDescription:
type: object
description: Metadata about a motion group model.
required:
- name
- manufacturer
- is_custom
properties:
name:
type: string
description: Identifier of the motion group model.
example: UniversalRobots_UR10e
manufacturer:
$ref: '#/components/schemas/Manufacturer'
readable_name:
type: string
description: Readable name for the motion group model.
example: UR10e
is_custom:
type: boolean
description: Indicates whether this motion group model is a user-defined custom model or a built-in base model.
Sphere:
title: Sphere
type: object
properties:
shape_type:
type: string
enum:
- sphere
radius:
type: number
format: double
description: The radius of the sphere in [mm].
required:
- shape_type
- radius
description: Defines a spherical shape centred around the origin.
Box:
title: Box
type: object
properties:
shape_type:
type: string
enum:
- box
size_x:
type: number
format: double
description: The dimension in x-direction in [mm].
size_y:
type: number
format: double
description: The dimension in y-direction in [mm].
size_z:
type: number
format: double
description: The dimension in z-direction in [mm].
box_type:
type: string
enum:
- HOLLOW
- FULL
default: FULL
description: The box type defines if the box is hollow or full.
required:
- shape_type
- size_x
- size_y
- size_z
- box_type
description: |
Defines a cuboid shape centred around an origin.
If a margin is applied to the box type full, it is added to all size values. The shape will keep its edges.
The hollow box type consists of thin boxes that make up its walls.
If a margin is applied to the box type hollow, its size values are reduced by the margin.
Rectangle:
title: Rectangle
type: object
properties:
shape_type:
type: string
enum:
- rectangle
size_x:
type: number
format: double
description: The dimension in x-direction in [mm].
size_y:
type: number
format: double
description: The dimension in y-direction in [mm].
required:
- shape_type
- size_x
- size_y
description: Defines an x/y-plane with finite size. Centred around the z-axis.
Plane:
title: Plane
type: object
properties:
shape_type:
type: string
enum:
- plane
required:
- shape_type
description: Defines an x/y-plane with infinite size.
Cylinder:
title: Cylinder
type: object
properties:
shape_type:
type: string
enum:
- cylinder
radius:
type: number
format: double
description: The radius of the cylinder in [mm].
height:
type: number
format: double
description: The height of the cylinder in [mm].
required:
- shape_type
- radius
- height
description: |
Defines a cylindrical shape.
Centred around origin, symmetric around z-axis.
If a margin is applied, it is added to radius and height. The shape will keep its edges.
Capsule:
title: Capsule
type: object
properties:
shape_type:
type: string
enum:
- capsule
radius:
type: number
format: double
description: The radius of the cylinder and semi-spheres in [mm].
cylinder_height:
type: number
format: double
description: The height of the inner cylinder in [mm].
required:
- shape_type
- radius
- cylinder_height
description: |
Defines a cylindrical shape with 2 semi-spheres on the top and bottom.
Centred around origin, symmetric around z-axis.
RectangularCapsule:
title: RectangularCapsule
type: object
properties:
shape_type:
type: string
enum:
- rectangular_capsule
radius:
type: number
format: double
description: The radius of the inner spheres in [mm].
sphere_center_distance_x:
type: number
format: double
description: The distance of the sphere center in x-direction in [mm].
sphere_center_distance_y:
type: number
format: double
description: The distance of the sphere center in y-direction in [mm].
required:
- shape_type
- radius
- sphere_center_distance_x
- sphere_center_distance_y
description: |
Convex hull around four spheres. Sphere center points in x/y-plane, offset by either combination "+/- sizeX" or "+/- sizeY".
Alternative description: Rectangle in x/y-plane with a 3D padding.
Vector3d:
title: Vector3d
type: array
maxItems: 3
minItems: 3
items:
type: number
format: double
prefixItems:
- title: x
- title: 'y'
- title: z
description: |
A three-dimensional vector [x, y, z] with double precision.
ConvexHull:
title: ConvexHull
type: object
properties:
shape_type:
type: string
enum:
- convex_hull
vertices:
type: array
items:
$ref: '#/components/schemas/Vector3d'
description: The list of encapsulated points.
required:
- shape_type
- vertices
description: Defines a convex hull encapsulating a set of vertices.
RotationVector:
title: RotationVector
type: array
maxItems: 3
minItems: 3
items:
type: number
format: double
prefixItems:
- title: rx
- title: ry
- title: rz
description: |
Defines a rotation in 3D space.
A three-dimensional Vector [rx, ry, rz] with double precision.
Rotation is applied around the vector.
The angle of rotation equals the length of the vector.
Pose:
title: Pose
type: object
properties:
position:
$ref: '#/components/schemas/Vector3d'
orientation:
$ref: '#/components/schemas/RotationVector'
default:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
description: |
Defines a pose in 3D space.
A pose is a combination of a position and an orientation.
The position is applied before the orientation.
Collider:
title: Collider
type: object
description: |
Defines a collider with a single shape.
A collider is an object that is used for collision detection.
It defines the `shape` that is attached with the offset of `pose` to a reference frame.
Use colliders to:
- Define the shape of a workpiece. The reference frame is the scene origin.
- Define the shape of a link in a motion group. The reference frame is the link coordinate system.
- Define the shape of a tool. The reference frame is the flange coordinate system.
properties:
shape:
oneOf:
- $ref: '#/components/schemas/Sphere'
- $ref: '#/components/schemas/Box'
- $ref: '#/components/schemas/Rectangle'
- $ref: '#/components/schemas/Plane'
- $ref: '#/components/schemas/Cylinder'
- $ref: '#/components/schemas/Capsule'
- $ref: '#/components/schemas/RectangularCapsule'
- $ref: '#/components/schemas/ConvexHull'
discriminator:
propertyName: shape_type
mapping:
sphere: '#/components/schemas/Sphere'
box: '#/components/schemas/Box'
rectangle: '#/components/schemas/Rectangle'
plane: '#/components/schemas/Plane'
cylinder: '#/components/schemas/Cylinder'
capsule: '#/components/schemas/Capsule'
rectangular_capsule: '#/components/schemas/RectangularCapsule'
convex_hull: '#/components/schemas/ConvexHull'
pose:
$ref: '#/components/schemas/Pose'
margin:
type: number
description: Increases the shape's size in all dimensions. Applied in [mm]. Can be used to keep a safe distance to the shape.
format: float
default: 0
required:
- shape
examples:
- shape:
shape_type: sphere
radius: 10
Link:
type: object
title: Collision Motion Group Link
additionalProperties:
$ref: '#/components/schemas/Collider'
LinkChain:
title: Link Chain
type: array
description: |
A link chain is a kinematic chain of links that is connected via joints.
A motion group can be used to control the motion of the joints in a link chain.
A link is a group of colliders that is attached to the link reference frame.
The reference frame of a link is obtained after applying all sets of Denavit-Hartenberg-parameters from base to (including) the link index.
This means that the reference frame of the link is on the rotation axis of the next joint in the kinematic chain.
Example: For a motion group with 2 joints, the collider reference frame (CRF) for link 1 is on the rotation axis of joint 2. The chain looks like:
- Origin >> Mounting >> Base >> (CRF Base) Joint 0 >> Link 0 >> (CRF Link 0) Joint 1 >> Link 1 >> (CRF Link 1) Flange (CRF Tool) >> TCP
Adjacent links in the kinematic chain of the motion group are not checked for mutual collision.
items:
$ref: '#/components/schemas/Link'
examples:
- - link_0_sphere:
shape:
shape_type: sphere
radius: 10
pose:
position:
- 0
- 0
- -10
link_0_capsule:
shape:
shape_type: capsule
radius: 5
cylinder_height: 20
- {}
- link_2_capsule:
shape:
shape_type: capsule
radius: 5
cylinder_height: 20
JointTypeEnum:
type: string
enum:
- REVOLUTE_JOINT
- PRISMATIC_JOINT
default: REVOLUTE_JOINT
DHParameter:
type: object
properties:
alpha:
type: number
description: Angle about x-axis in [rad].
format: double
theta:
type: number
description: Angle about z-axis in [rad].
format: double
a:
type: number
description: Offset along x-axis in [mm].
format: double
d:
type: number
description: Offset along z-axis in [mm].
format: double
reverse_rotation_direction:
type: boolean
description: True, if rotation direction of joint is reversed.
type:
$ref: '#/components/schemas/JointTypeEnum'
description: A single set of DH parameters.
KinematicModel:
type: object
properties:
dh_parameters:
type: array
items:
$ref: '#/components/schemas/DHParameter'
kinematic_chain_offset:
description: Constant coordinate transformation between the motion group base frame and the start of the kinematic chain modeled by Denavit-Hartenberg parameters.
$ref: '#/components/schemas/Pose'
flange_offset:
description: |
Constant coordinate transformation between the end of the kinematic chain modelled by Denavit-Hartenberg parameters and the flange frame.
This can be used, e.g., to ensure that the flange frame has a certain orientation.
$ref: '#/components/schemas/Pose'
inverse_solver:
type: string
description: Optional name of the inverse kinematics solver.
description: Kinematics model described by Denavit-Hartenberg parameters.
CopyMotionGroupModelRequest:
type: object
description: Request body for copying a motion group model under a new name.
required:
- name
properties:
name:
type: string
description: The name to register the copied motion group model with.
example: MyCustomRobot_UR10e
Joints:
type: array
items:
type: number
format: double
description: |
This structure describes a set of joint values, e.g., positions, currents, torques, of a motion group.
Float precision is the default.
CenterOfMass:
type: array
items:
type: number
format: double
prefixItems:
- title: x
- title: 'y'
- title: z
minItems: 3
maxItems: 3
description: Center of mass coordinates [x, y, z] in mm
InertiaTensor:
type: object
required:
- xx
- yy
- zz
- xy
- xz
- yz
properties:
xx:
type: number
format: double
description: Inertia tensor component Ixx
yy:
type: number
format: double
description: Inertia tensor component Iyy
zz:
type: number
format: double
description: Inertia tensor component Izz
xy:
type: number
format: double
description: Inertia tensor component Ixy
xz:
type: number
format: double
description: Inertia tensor component Ixz
yz:
type: number
format: double
description: Inertia tensor component Iyz
description: Inertia tensor components in kg⋅mm²
DynamicModel:
type: object
properties:
mass:
type: number
format: float
description: Mass of the link in kg
center_of_mass:
$ref: '#/components/schemas/CenterOfMass'
inertia:
$ref: '#/components/schemas/InertiaTensor'
actuator_inertia:
type: number
format: float
description: Actuator moment of inertia in kg⋅mm²
static_friction:
type: number
format: float
description: Static friction coefficient
viscous_friction:
type: number
format: float
description: Viscous friction coefficient
LimitRange:
type: object
properties:
lower_limit:
type: number
format: double
upper_limit:
type: number
format: double
description: The upper_limit must be greater then the lower_limit.
JointLimits:
title: JointLimits
type: object
properties:
position:
$ref: '#/components/schemas/LimitRange'
velocity:
type: number
format: double
acceleration:
type: number
format: double
jerk:
type: number
format: double
description: |
> **NOTE**
>
> This limit type is experimental and its behavior may change in future releases.
torque:
type: number
format: double
CartesianLimits:
title: CartesianLimits
type: object
properties:
velocity:
type: number
format: double
acceleration:
type: number
format: double
jerk:
type: number
format: double
description: |
> **NOTE**
>
> This limit type is experimental and its behavior may change in future releases.
orientation_velocity:
type: number
format: double
orientation_acceleration:
type: number
format: double
orientation_jerk:
type: number
format: double
description: |
> **NOTE**
>
> This limit type is experimental and its behavior may change in future releases.
LimitSet:
title: LimitSet
type: object
properties:
joints:
type: array
items:
$ref: '#/components/schemas/JointLimits'
tcp:
$ref: '#/components/schemas/CartesianLimits'
elbow:
$ref: '#/components/schemas/CartesianLimits'
flange:
$ref: '#/components/schemas/CartesianLimits'
coupled_shoulder_elbow_joint:
$ref: '#/components/schemas/JointLimits'
OperationLimits:
title: OperationLimits
type: object
properties:
auto_limits:
$ref: '#/components/schemas/LimitSet'
manual_limits:
$ref: '#/components/schemas/LimitSet'
manual_t1_limits:
$ref: '#/components/schemas/LimitSet'
manual_t2_limits:
$ref: '#/components/schemas/LimitSet'
safety_limit_elbow_flange_velocity_in_auto:
type: boolean
default: false
description: Flag to indicate whether the TCP velocity limit is also applied for the elbow and flange in auto mode.
RobotControllerConfigurationRequest:
type: object
description: Information to generate all robot controller configurations that match a given ARP scan result.
required:
- ip
- network_devices
properties:
ip:
type: string
format: ipv4
description: |
The IPv4 address assigned to the network interface where the ARP scan was performed.
network_devices:
$ref: '#/components/schemas/ArpScanResponse'
ControllerDescription:
title: ControllerDescription
required:
- connected_motion_groups
- supports_freedrive
- supports_control
- supports_safety_zones
type: object
properties:
connected_motion_groups:
type: array
items:
type: string
description: |
Unique identifier of the motion group connected to the controller.
Use [getMotionGroupDescription](#/operations/getMotionGroupDescription) to get more information about the motion group.
supports_freedrive:
type: boolean
description: Can this controller be moved through freedrive (true), or not (false).
supports_control:
type: boolean
description: Can this controller be controlled with NOVA (true) or is it only possible to read data (false).
supports_safety_zones:
type: boolean
description: |
True if NOVA supports reading safety zone-, tool- and link-geometries for this motion group.
Safety zones are used to define areas where the robot should slow down or stop.
If false, NOVA can't guarantee that the executed motions respect safety zones defined on the controller.
description: The data type to describe a robot controller.
RobotSystemMode:
enum:
- MODE_CONTROLLER_NOT_CONFIGURED
- MODE_INITIALIZING
- MODE_MONITOR
- MODE_CONTROL
- MODE_FREE_DRIVE
type: string
description: |
Defines the current system mode of the robot system, including NOVA communicating with the robot controller.
### MODE_CONTROLLER_NOT_CONFIGURED
No controller with the specified identifier is configured. Call [addRobotController](#/operations/addRobotController) to register a controller.
### MODE_INITIALIZING
Indicates that a connection to the robot controller is established or reestablished in case of a disconnect.
On success, the controller is set to MODE_MONITOR.
On failure, the initialization process is retried until successful or cancelled by the user.
### MODE_MONITOR
Read-only mode with an active controller connection.
- Receives robot state and I/O signals
- Move requests are rejected
- No commands are sent to the controller
### MODE_CONTROL
Active control mode.
**Movement is possible in this mode**
The robot is cyclically commanded to hold its current position.
The robot state is received in sync with the controller cycle.
Motion and jogging requests are accepted and executed.
Input/Output interaction is enabled.
### MODE_FREE_DRIVE
Read-only mode with servo motors enabled for manual movement (Free Drive).
Move requests are rejected.
Not supported by all robots: Use [getSupportedModes](#/operations/getSupportedModes) to check Free Drive availability.
format: enum
OperationMode:
enum:
- OPERATION_MODE_UNKNOWN
- OPERATION_MODE_NO_CONTROLLER
- OPERATION_MODE_DISCONNECTED
- OPERATION_MODE_POWER_ON
- OPERATION_MODE_PENDING
- OPERATION_MODE_MANUAL
- OPERATION_MODE_MANUAL_T1
- OPERATION_MODE_MANUAL_T2
- OPERATION_MODE_AUTO
- OPERATION_MODE_RECOVERY
type: string
format: enum
description: |
Current operation mode of the configured robot controller.
Operation modes in which the attached motion groups can be moved are:
- OPERATION_MODE_MANUAL (if enabling switch is pressed)
- OPERATION_MODE_MANUAL_T1 (if enabling switch is pressed)
- OPERATION_MODE_MANUAL_T2 (if enabling switch is pressed)
- OPERATION_MODE_AUTO (without needing to press enabling switch)
All other modes are considered as non-operational.
SafetyStateType:
enum:
- SAFETY_STATE_UNKNOWN
- SAFETY_STATE_FAULT
- SAFETY_STATE_NORMAL
- SAFETY_STATE_MASTERING
- SAFETY_STATE_CONFIRM_SAFETY
- SAFETY_STATE_OPERATOR_SAFETY
- SAFETY_STATE_PROTECTIVE_STOP
- SAFETY_STATE_REDUCED
- SAFETY_STATE_STOP
- SAFETY_STATE_STOP_0
- SAFETY_STATE_STOP_1
- SAFETY_STATE_STOP_2
- SAFETY_STATE_RECOVERY
- SAFETY_STATE_DEVICE_EMERGENCY_STOP
- SAFETY_STATE_ROBOT_EMERGENCY_STOP
- SAFETY_STATE_VIOLATION
type: string
format: enum
description: |
Current safety state of the configured robot controller.
Operation modes in which the attached motion groups can be moved are:
- SAFETY_STATE_NORMAL
- SAFETY_STATE_REDUCED
All other modes are considered as non-operational.
MotionGroupState_JointLimitReached:
type: object
required:
- limit_reached
properties:
limit_reached:
type: array
items:
type: boolean
description: If true, operational (soft) jointLimit is reached for specific joint.
description: |
Indicates which joint of the motion group is in a limit.
If a joint is in its limit, only this joint can be moved. Movements that affect any other joints are not executed.
JoggingRunning:
title: JoggingRunning
type: object
required:
- kind
properties:
kind:
type: string
enum:
- RUNNING
description: |
Jogging is active.
JoggingPausedByUser:
title: JoggingPausedByUser
type: object
required:
- kind
properties:
kind:
type: string
enum:
- PAUSED_BY_USER
description: |
User has paused jogging.
JoggingPausedOnIO:
title: JoggingPausedOnIO
type: object
required:
- kind
properties:
kind:
type: string
enum:
- PAUSED_ON_IO
description: |
Jogging was paused because of an I/O event.
JoggingPausedNearJointLimit:
title: JoggingPausedNearJointLimit
type: object
required:
- kind
- joint_indices
properties:
kind:
type: string
enum:
- PAUSED_NEAR_JOINT_LIMIT
joint_indices:
type: array
items:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
Jogging was paused because a joint is near its limit.
JoggingPausedNearCollision:
title: JoggingPausedNearCollision
type: object
required:
- kind
- description
properties:
kind:
type: string
enum:
- PAUSED_NEAR_COLLISION
description:
type: string
description: |
Jogging was paused because the motion group neared a collision.
JoggingPausedNearSingularity:
title: JoggingPausedNearSingularity
type: object
required:
- kind
- description
properties:
kind:
type: string
enum:
- PAUSED_NEAR_SINGULARITY
description:
type: string
description: |
Jogging was paused because the motion group neared a singularity or the workspace boundary.
JoggingDetails:
title: JoggingDetails
type: object
required:
- state
- kind
properties:
state:
oneOf:
- $ref: '#/components/schemas/JoggingRunning'
- $ref: '#/components/schemas/JoggingPausedByUser'
- $ref: '#/components/schemas/JoggingPausedOnIO'
- $ref: '#/components/schemas/JoggingPausedNearJointLimit'
- $ref: '#/components/schemas/JoggingPausedNearCollision'
- $ref: '#/components/schemas/JoggingPausedNearSingularity'
discriminator:
propertyName: kind
mapping:
RUNNING: '#/components/schemas/JoggingRunning'
PAUSED_BY_USER: '#/components/schemas/JoggingPausedByUser'
PAUSED_ON_IO: '#/components/schemas/JoggingPausedOnIO'
PAUSED_NEAR_JOINT_LIMIT: '#/components/schemas/JoggingPausedNearJointLimit'
PAUSED_NEAR_COLLISION: '#/components/schemas/JoggingPausedNearCollision'
PAUSED_NEAR_SINGULARITY: '#/components/schemas/JoggingPausedNearSingularity'
jogger_session_timestamp_ms:
type: integer
format: int64
minimum: 0
maximum: 9223372036854776000
description: |
Timestamp of the current jogger session in milliseconds.
Only waypoint sessions are supported. Other sessions return 0.
> **NOTE**
>
> This field is experimental and its behavior may change in future releases.
kind:
type: string
enum:
- JOGGING
description: |
State of jogging execution.
This state is sent during jogging movement, response-rate closest to the nearest multiple of controller step-rate but not exceeding the configured rate.
The jogging state can be one of the following:
- RUNNING: Jogging is active.
- PAUSED_BY_USER: User has paused jogging.
- PAUSED_NEAR_JOINT_LIMIT: Jogging was paused because a joint is near its limit.
- PAUSED_NEAR_COLLISION: Jogging was paused because the motion group neared a collision.
- PAUSED_NEAR_SINGULARITY: Jogging was paused because the motion group neared a singularity or the workspace boundary.
- PAUSED_ON_IO: Jogging was paused because of an I/O event.
Location:
type: number
format: double
description: |
- The location is a scalar value that defines a position along a path, typically ranging from 0 to `n`,
where `n` denotes the number of motion commands
- Each integer value of the location corresponds to a specific motion command,
while non-integer values interpolate positions within the segments.
- The location is calculated from the joint path
TrajectoryRunning:
title: TrajectoryRunning
type: object
required:
- kind
- time_to_end
properties:
kind:
type: string
enum:
- RUNNING
time_to_end:
type: integer
description: Remaining time in milliseconds (ms) to reach the end of the motion.
format: int64
minimum: 0
maximum: 4294967295
description: |
Trajectory is being executed.
TrajectoryPausedByUser:
title: TrajectoryPausedByUser
type: object
required:
- kind
properties:
kind:
type: string
enum:
- PAUSED_BY_USER
description: |
User has paused execution.
TrajectoryEnded:
title: TrajectoryEnded
type: object
required:
- kind
properties:
kind:
type: string
enum:
- END_OF_TRAJECTORY
description: |
First or last sample (depending on direction) of trajectory has been sent.
TrajectoryWaitForIO:
title: TrajectoryWaitForIO
type: object
required:
- kind
properties:
kind:
type: string
enum:
- WAIT_FOR_IO
description: |
Waiting for an I/O event to start execution.
TrajectoryPausedOnIO:
title: TrajectoryPausedOnIO
type: object
required:
- kind
properties:
kind:
type: string
enum:
- PAUSED_ON_IO
description: |
Execution was paused because of an I/O event.
TrajectoryDetails:
title: TrajectoryDetails
type: object
required:
- trajectory
- location
- state
- kind
properties:
trajectory:
type: string
description: |
Unique identifier of the trajectory being executed.
location:
$ref: '#/components/schemas/Location'
description: |
Location of current joint position commmand on the trajectory being executed.
state:
oneOf:
- $ref: '#/components/schemas/TrajectoryRunning'
- $ref: '#/components/schemas/TrajectoryPausedByUser'
- $ref: '#/components/schemas/TrajectoryEnded'
- $ref: '#/components/schemas/TrajectoryWaitForIO'
- $ref: '#/components/schemas/TrajectoryPausedOnIO'
discriminator:
propertyName: kind
mapping:
RUNNING: '#/components/schemas/TrajectoryRunning'
PAUSED_BY_USER: '#/components/schemas/TrajectoryPausedByUser'
END_OF_TRAJECTORY: '#/components/schemas/TrajectoryEnded'
WAIT_FOR_IO: '#/components/schemas/TrajectoryWaitForIO'
PAUSED_ON_IO: '#/components/schemas/TrajectoryPausedOnIO'
kind:
type: string
enum:
- TRAJECTORY
description: |
Discriminator for OpenApi generators, which is always "TRAJECTORY" for this schema.
description: |
State of trajectory execution.
This state is sent during trajectory movement, response-rate closest to the nearest multiple of controller step-rate but not exceeding the configured rate.
The trajectory state can be one of the following:
- RUNNING: Trajectory is being executed.
- PAUSED_BY_USER: User has paused execution.
- END_OF_TRAJECTORY: First or last sample (depending on direction) of trajectory has been sent.
- WAIT_FOR_IO: Waiting for an I/O event to start execution.
- PAUSED_ON_IO: Execution was paused because of an I/O event.
Execute:
title: Execute
type: object
required:
- joint_position
properties:
joint_position:
type: array
items:
type: number
format: double
description: |
Commanded joint position of each joint. This command was sent in the time step the corresponding state was received.
The unit depends on the type of joint: For revolute joints, the angle is given in [rad]; for prismatic joints, the displacement is given in [mm].
details:
oneOf:
- $ref: '#/components/schemas/JoggingDetails'
- $ref: '#/components/schemas/TrajectoryDetails'
discriminator:
propertyName: kind
mapping:
JOGGING: '#/components/schemas/JoggingDetails'
TRAJECTORY: '#/components/schemas/TrajectoryDetails'
description: |
Details about the state of the motion execution.
The details are either for a jogging or a trajectory.
If NOVA is not controlling this motion group at the moment, this field is omitted.
MotionGroupState:
required:
- timestamp
- sequence_number
- motion_group
- controller
- joint_position
- joint_limit_reached
- standstill
- description_revision
type: object
properties:
timestamp:
type: string
format: date-time
description: Timestamp for when data was received from the robot controller.
sequence_number:
type: integer
format: int64
minimum: 0
maximum: 4294967295
description: |
Sequence number of the controller state. It starts with 0 upon establishing the connection with a physical controller.
The sequence number is reset when the connection to the physical controller is closed and re-established.
motion_group:
type: string
description: Identifier of the motion group.
controller:
type: string
description: 'Convenience: Identifier of the robot controller the motion group is attached to.'
joint_position:
$ref: '#/components/schemas/Joints'
description: |
Current joint position of each joint.
The unit depends on the type of joint: For revolute joints, the angle is given in [rad]; for prismatic joints, the displacement is given in [mm].
joint_limit_reached:
$ref: '#/components/schemas/MotionGroupState_JointLimitReached'
description: |
Indicates whether the joint is in a limit for all joints of the motion group.
joint_torque:
$ref: '#/components/schemas/Joints'
description: |
Current joint torque of each joint in [Nm].
Is only available if the robot controller supports it, e.g., available for UR controllers.
joint_current:
$ref: '#/components/schemas/Joints'
description: |
Current at TCP in [A].
Is only available if the robot controller supports it, e.g., available for UR controllers.
flange_pose:
$ref: '#/components/schemas/Pose'
description: |
Pose of the flange.
Positions are in [mm].
Orientations are in [rad].
The pose is relative to the response_coordinate_system specified in the request.
For robot arms, a flange pose is always returned. For positioners, the flange might not be available, depending on the model.
tcp:
type: string
description: |
Unique identifier addressing the active TCP.
Might not be returned for positioners as some do not support TCPs, depending on the model.
tcp_pose:
$ref: '#/components/schemas/Pose'
description: |
Pose of the TCP selected on the robot control panel.
Positions are in [mm].
Orientations are in [rad].
The pose is relative to the response_coordinate_system specified in the request.
Might not be returned for positioners as some do not support TCPs, depending on the model.
coordinate_system:
type: string
description: |
Unique identifier addressing the reference coordinate system of the cartesian data.
Might not be returned for positioners as some do not support TCPs, depending on the model.
Default: world coordinate system of corresponding controller.
payload:
type: string
description: |
Unique identifier addressing the active payload.
Only fetchable via GET endpoint, not available in WebSocket.
standstill:
type: boolean
description: |
Indicates whether the motion group is in standstill.
Convenience: Signals that NOVA treats measured joint velocities as 0.
execute:
$ref: '#/components/schemas/Execute'
description: |
Data that was commanded to the motion group. Includes additional data on NOVA's execution components for executing trajectories and jogging.
This is a convenience field to indicate the last command sent to the motion group.
It is not available in all cases, e.g., if the motion group is not moved by NOVA.
description_revision:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
Revision number of the motion group description.
The revision is incremented whenever the motion group description changes due to a modification of the tools or the payloads in the robot configuration.
The robot controller is polled every 10 s during Monitoring Mode to detect those changes.
Use to trigger fetching based on robot configuration changes.
description: Presents the current state of the motion group.
RobotControllerState:
required:
- mode
- timestamp
- sequence_number
- controller
- operation_mode
- safety_state
- motion_groups
type: object
properties:
mode:
$ref: '#/components/schemas/RobotSystemMode'
description: Mode of communication and control between NOVA and the robot controller.
last_error:
type: array
items:
type: string
description: |
Last error stack encountered during initialization process or after a controller disconnect.
At this stage, it's unclear whether the error is fatal.
Evaluate `last_error` to decide whether to remove the controller using `deleteController`.
Examples:
- Delete required: Host resolution fails repeatedly due to an incorrect IP.
- Delete not required: Temporary network delay caused a disconnect; the system will auto-reconnect.
timestamp:
type: string
format: date-time
description: Timestamp indicating when the represented information was received from the robot controller.
sequence_number:
type: integer
format: int64
minimum: 0
maximum: 4294967295
description: |
Sequence number of the controller state. It starts with 0 upon establishing the connection with a physical controller.
The sequence number is reset when the connection to the physical controller is closed and re-established.
controller:
type: string
default: controller
description: Identifier of the configured robot controller.
operation_mode:
$ref: '#/components/schemas/OperationMode'
safety_state:
$ref: '#/components/schemas/SafetyStateType'
velocity_override:
type: integer
description: |
If made available by the robot controller, returns the current velocity override in
[percentage] for movements adjusted on robot control panel.
Valid value range: 1 - 100.
format: int32
minimum: 1
maximum: 100
motion_groups:
title: MotionGroupState[]
type: array
items:
$ref: '#/components/schemas/MotionGroupState'
description: |
State of indicated motion groups.
In case of state request via controller all configured motion groups are returned.
In case of executing a motion only the affected motion groups are returned.
description: Returns the whole current state of robot controller.
IODirection:
enum:
- IO_TYPE_INPUT
- IO_TYPE_OUTPUT
type: string
description: Identifies the input/output type.
format: enum
IOValueType:
enum:
- IO_VALUE_BOOLEAN
- IO_VALUE_ANALOG_FLOAT
- IO_VALUE_ANALOG_INTEGER
type: string
description: Data type of the input/output.
format: enum
UnitType:
enum:
- UNIT_NONE
- UNIT_KILOGRAM
- UNIT_AMPERE
- UNIT_KELVIN
- UNIT_HERTZ
- UNIT_NEWTON
- UNIT_VOLT
- UNIT_CELSIUS
- UNIT_NEWTON_METER
- UNIT_METER
type: string
description: The unit of input/output value.
format: enum
BooleanValue:
required:
- value_type
- value
type: object
properties:
value:
type: boolean
value_type:
type: string
enum:
- boolean
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
description: |
Value of a digital input/output.
title: BooleanValue
IntegerValue:
required:
- value_type
- value
type: object
properties:
value:
type: string
value_type:
type: string
enum:
- integer
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
description: |
Value of an input/output with integer representation.
> The integral value is transmitted as a string to avoid precision loss during conversion to JSON.
> Recommended: Use int64 in your implementation. If you want to interact with int64 in numbers,
> JS bigint libraries can help you to parse the string into an integral value.
title: IntegerValue
FloatValue:
required:
- value_type
- value
type: object
properties:
value:
type: number
description: |
Value of an analog input/output in floating number representation.
format: double
value_type:
type: string
enum:
- float
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
title: FloatValue
IOBoundary:
title: IOBoundary
type: object
oneOf:
- $ref: '#/components/schemas/BooleanValue'
- $ref: '#/components/schemas/IntegerValue'
- $ref: '#/components/schemas/FloatValue'
discriminator:
propertyName: value_type
mapping:
boolean: '#/components/schemas/BooleanValue'
integer: '#/components/schemas/IntegerValue'
float: '#/components/schemas/FloatValue'
IODescription:
required:
- io
- name
- direction
- value_type
type: object
properties:
io:
type: string
description: |
Unique identifier of the input/output.
name:
type: string
description: |
Name of the input/output. Customize it on the physical controller or in the virtual robot specification.
group:
type: string
description: |
Name of the input/output group. Customize it on the physical controller or in the virtual robot specification.
direction:
$ref: '#/components/schemas/IODirection'
value_type:
$ref: '#/components/schemas/IOValueType'
unit:
$ref: '#/components/schemas/UnitType'
min:
$ref: '#/components/schemas/IOBoundary'
max:
$ref: '#/components/schemas/IOBoundary'
ListIODescriptionsResponse:
type: array
items:
$ref: '#/components/schemas/IODescription'
IOBooleanValue:
title: IOBooleanValue
required:
- io
- value
- value_type
type: object
properties:
io:
type: string
description: Unique identifier of the input/output.
value:
type: boolean
description: |
Value of a digital input/output.
value_type:
type: string
enum:
- boolean
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
description: Input/Output boolean value representation.
IOIntegerValue:
required:
- value_type
- io
- value
type: object
properties:
io:
type: string
description: Unique identifier of the input/output.
value:
type: string
description: |
Value of an input/output with integer representation.
> The integral value is transmitted as a string to avoid precision loss during conversion to JSON.
> Recommended: Use int64 in your implementation. If you want to interact with int64 in numbers,
> JS bigint libraries can help you to parse the string into an integral value.
value_type:
type: string
enum:
- integer
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
title: IOIntegerValue
IOFloatValue:
required:
- value_type
- io
- value
type: object
properties:
io:
type: string
description: Unique identifier of the input/output.
value:
type: number
description: |
Value of an analog input/output in floating number representation.
format: double
value_type:
type: string
enum:
- float
x-go-type-skip-optional-pointer: true
x-is-discriminator: true
title: IOFloatValue
IOValue:
oneOf:
- $ref: '#/components/schemas/IOBooleanValue'
- $ref: '#/components/schemas/IOIntegerValue'
- $ref: '#/components/schemas/IOFloatValue'
discriminator:
propertyName: value_type
mapping:
boolean: '#/components/schemas/IOBooleanValue'
integer: '#/components/schemas/IOIntegerValue'
float: '#/components/schemas/IOFloatValue'
StreamIOValuesResponse:
required:
- io_values
- timestamp
- sequence_number
type: object
properties:
io_values:
type: array
items:
$ref: '#/components/schemas/IOValue'
timestamp:
type: string
format: date-time
description: Timestamp indicating when the represented information was received from the robot controller.
sequence_number:
type: integer
format: int64
minimum: 0
maximum: 4294967295
description: |
Sequence number of the controller state. It starts with 0 upon establishing the connection with a physical controller.
The sequence number is reset when the connection to the physical controller is closed and re-established.
description: Array of input/output values.
example:
io_values:
- io: io1
value: true
value_type: boolean
- io: io2
value: '42'
value_type: integer
- io: io3
value: 3.14
value_type: float
ListIOValuesResponse:
type: array
items:
$ref: '#/components/schemas/IOValue'
description: Array of input/output values.
example:
- io: io1
value: true
value_type: boolean
- io: io2
value: '42'
value_type: integer
- io: io3
value: 3.14
value_type: float
Comparator:
enum:
- COMPARATOR_EQUALS
- COMPARATOR_NOT_EQUALS
- COMPARATOR_GREATER
- COMPARATOR_GREATER_EQUAL
- COMPARATOR_LESS
- COMPARATOR_LESS_EQUAL
type: string
format: enum
description: |
Comparator for the comparison of two values.
The comparator is used to compare two values and return a boolean result.
The default comparator is unknown.
WaitForIOEventRequest:
title: WaitForIOEventRequest
type: object
required:
- io
- comparator
properties:
io:
$ref: '#/components/schemas/IOValue'
comparator:
$ref: '#/components/schemas/Comparator'
description: |
Comparator for the comparison of two values.
Use the measured I/O as the base value (a) and the expected input/output value as the comparator (b): e.g., a > b.
description: The value to compare with the current value of the input/output.
SettableRobotSystemMode:
enum:
- ROBOT_SYSTEM_MODE_MONITOR
- MODE_MONITOR
- ROBOT_SYSTEM_MODE_CONTROL
- MODE_CONTROL
type: string
format: enum
description: |
Defines available system modes of the robot system.
Short versions (no "ROBOT_SYSTEM_" prefix) are provided, reusing strings from [getMode](#/operations/getMode) responses.
VirtualRobotConfiguration:
required:
- name
- content
type: object
properties:
name:
type: string
description: |
Name of the configuration file generated by the unique identifier of the controller and a time stamp.
content:
type: string
description: |
Content of the configuration file. Copy & paste to the [addRobotController](#/operations/addRobotController) configuration.json parameter.
OrientationType:
enum:
- ROTATION_VECTOR
- QUATERNION
- EULER_ANGLES_INTRINSIC_ZXZ
- EULER_ANGLES_INTRINSIC_XYX
- EULER_ANGLES_INTRINSIC_YZY
- EULER_ANGLES_INTRINSIC_ZYZ
- EULER_ANGLES_INTRINSIC_XZX
- EULER_ANGLES_INTRINSIC_YXY
- EULER_ANGLES_INTRINSIC_XYZ
- EULER_ANGLES_INTRINSIC_YZX
- EULER_ANGLES_INTRINSIC_ZXY
- EULER_ANGLES_INTRINSIC_XZY
- EULER_ANGLES_INTRINSIC_ZYX
- EULER_ANGLES_INTRINSIC_YXZ
- EULER_ANGLES_EXTRINSIC_ZXZ
- EULER_ANGLES_EXTRINSIC_XYX
- EULER_ANGLES_EXTRINSIC_YZY
- EULER_ANGLES_EXTRINSIC_ZYZ
- EULER_ANGLES_EXTRINSIC_XZX
- EULER_ANGLES_EXTRINSIC_YXY
- EULER_ANGLES_EXTRINSIC_ZYX
- EULER_ANGLES_EXTRINSIC_XZY
- EULER_ANGLES_EXTRINSIC_YXZ
- EULER_ANGLES_EXTRINSIC_YZX
- EULER_ANGLES_EXTRINSIC_XYZ
- EULER_ANGLES_EXTRINSIC_ZXY
type: string
description: |
The type of rotation description that is used to specify the orientation.
**Rotation Vector notation**
* The rotation is represented using an axis-angle representation:
> axis = Vector[0:2]
> angle = |axis| in [rad]
> axis.normalized * angle
**Quaternion notation**
* The rotation is represented using a unit quaternion: [x, y, z, w].
* The vector part [x, y, z] is the imaginary part of the quaternion, and the scalar part [w] is the real part.
**Euler notation**
* *extrinsic* fixed external reference system
* *intrinsic* reference system fixed to rotation body
> angles = Vector[0:2] in [rad].
* ZYX, ZXZ,...
- mapping of the given angles values to the (either intrinsic
or extrinsic) axes in the stated order.
> Example ZYX: Z = Vector[0], Y = Vector[1], X = Vector[2].
format: enum
default: ROTATION_VECTOR
Orientation:
title: Orientation
type: array
maxItems: 4
minItems: 3
items:
type: number
format: double
prefixItems:
- title: x
- title: 'y'
- title: z
- title: w
description: |
Describes an orientation in 3D space.
A tree-to-four-dimensional vector [x, y, z, w] with double precision.
CoordinateSystemData:
type: object
properties:
name:
type: string
description: Human readable name of this coordinate system.
reference_coordinate_system:
type: string
description: The identifier of the reference coordinate system. Empty if world is used.
position:
$ref: '#/components/schemas/Vector3d'
orientation:
$ref: '#/components/schemas/Orientation'
orientation_type:
$ref: '#/components/schemas/OrientationType'
CoordinateSystem:
allOf:
- type: object
required:
- coordinate_system
properties:
coordinate_system:
type: string
description: Unique identifier of the coordinate system.
- $ref: '#/components/schemas/CoordinateSystemData'
ListCoordinateSystemsResponse:
type: array
items:
$ref: '#/components/schemas/CoordinateSystem'
MotionGroupModel:
title: MotionGroupModel
type: string
description: |
Identifies a single motion group model.
See [getMotionGroupModels](#/operations/getMotionGroupModels) for supported types.
examples:
- ABB_1010_037_15
- FANUC_ARC_Mate_100iD
- KUKA_KR10_R1100
- UniversalRobots_UR10
- Yaskawa_AR1440
TcpOffset:
title: TcpOffset
required:
- name
- pose
type: object
properties:
name:
type: string
description: A readable and changeable name for frontend visualization.
pose:
$ref: '#/components/schemas/Pose'
ColliderDictionary:
type: object
title: ColliderDictionary
description: A collection of identifiable colliders.
additionalProperties:
$ref: '#/components/schemas/Collider'
Payload:
required:
- name
- payload
type: object
properties:
name:
type: string
payload:
type: number
description: Mass of payload in [kg].
format: double
center_of_mass:
$ref: '#/components/schemas/Vector3d'
description: Center of mass of payload as a three-dimensional position vector [x, y, z] in [mm].
moment_of_inertia:
$ref: '#/components/schemas/Vector3d'
description: Principal moments of inertia of payload as three-dimensional vector [I_xx, I_yy, I_zz] in [kg·m²].
MotionGroupDescription:
required:
- motion_group_model
- operation_limits
type: object
properties:
motion_group_model:
$ref: '#/components/schemas/MotionGroupModel'
mounting:
$ref: '#/components/schemas/Pose'
description: The offset from the world frame to the motion group base.
tcps:
type: object
title: TcpOffsetDictionary
description: |
Maps a TCP name to its offset relative to the flange coordinate system. Key must be a TCP identifier.
Values are TcpOffsets.
additionalProperties:
$ref: '#/components/schemas/TcpOffset'
safety_zones:
$ref: '#/components/schemas/ColliderDictionary'
description: |
SafetyZones are areas which cannot be entered or where certain limits apply.
SafetyZones are defined in the world coordinate system.
safety_link_colliders:
type: array
items:
$ref: '#/components/schemas/ColliderDictionary'
description: |
The shape of the MotionGroups links to validate against safety zones.
Indexed along the kinematic chain, starting with a static base shape before first joint.
safety_tool_colliders:
type: object
title: SafetyToolColliders
additionalProperties:
$ref: '#/components/schemas/ColliderDictionary'
description: |
Maps a TCP name to its tool collider. Key must be a TCP identifier.
Values are ColliderDictionaries that make up the shape of one tool to validate against safety zones.
operation_limits:
$ref: '#/components/schemas/OperationLimits'
payloads:
type: object
title: PayloadDictionary
description: |
Maps a payload name to its configuration. Key must be a payload identifier.
Values are payload objects.
additionalProperties:
$ref: '#/components/schemas/Payload'
cycle_time:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: '[ms] cycle time of the motion group controller. A trajectory for this motion group should be computed to this resolution.'
dh_parameters:
type: array
items:
$ref: '#/components/schemas/DHParameter'
description: The Denavit-Hartenberg parameters describing the motion group kinematics.
kinematic_chain_offset:
description: |
Constant coordinate transformation between the motion group base frame and the start of the kinematic chain modelled by Denavit-Hartenberg parameters.
Unlike the mounting, which is used to set the actual position and orientation of the motion group within a cell, this offset is fixed.
It is part of the description of the kinematical structure of the motion group.
$ref: '#/components/schemas/Pose'
flange_offset:
description: |
Constant coordinate transformation between the end of the kinematic chain modelled by Denavit-Hartenberg parameters and the flange frame.
This can be used, e.g., to ensure that the flange frame has a certain orientation.
$ref: '#/components/schemas/Pose'
serial_number:
type: string
description: |
The serial number of the motion group, if available. If not available, the serial number of the robot controller. If not available, empty.
description_revision:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
Revision number of the motion group description.
The revision is incremented whenever the motion group description changes due to a modification of the tools or the payloads in the robot configuration.
The robot controller is polled every 10 s in Monitoring Mode to detect those changes.
Use to detect changes since the last retrieval.
description: |
The configuration of a motion-group used for motion planning.
The parameters `mounting`, `kinematic_chain_offset`, `dh_parameters`, `flange_offset` and `tcp_offset` are used to model the kinematic structure of the motion group.
They can be used to compute the coordinate transformations from world to tcp frame:
[world frame] -> mounting -> [base frame] -> kinematic chain offset + motion group kinematics (Denavit-Hartenberg parameters) -> [end of kinematic chain frame]
-> flange_offset -> [flange frame] -> tcp_offset -> [tcp frame].
Tool:
type: object
title: Collision Motion Group Tool
description: |
Defines the shape of a tool.
A tool is a dictionary of colliders.
All colliders that make up a tool are attached to the flange frame of the motion group.
additionalProperties:
$ref: '#/components/schemas/Collider'
CollisionSetup:
title: CollisionSetup
type: object
properties:
colliders:
$ref: '#/components/schemas/ColliderDictionary'
description: |
Colliders are checked against links and tool.
link_chain:
$ref: '#/components/schemas/LinkChain'
description: |
The shape of the motion groups links to validate against colliders.
Indexed along the kinematic chain, starting with a static base shape before first joint.
The base of the motion group is not checked for collision against the environment.
tool:
$ref: '#/components/schemas/Tool'
description: |
Shape of the tool to validate against colliders.
self_collision_detection:
type: boolean
description: |
If true, self-collision detection is enabled for the motion group.
Self-collision detection checks if links in the kinematic chain of the motion group collide with each other.
Adjacent links in the kinematic chain of the motion group are not checked for mutual collision.
The tool is treated like a link at the end of the kinematic chain. It is checked against all links except the last one.
Default is true.
default: true
CollisionSetups:
title: CollisionSetups
type: object
additionalProperties:
$ref: '#/components/schemas/CollisionSetup'
description: |
Collision layers to be respected by the motion planner when planning for a single motion group.
Each setup represents one layer, e.g., the safety zones and shapes or a fine grained tool and workpiece model.
Layers are checked individually along the trajectory and independently of other layers.
To respect the safety zones of the controller and check for collision:
1. Fetch the safety zones, link and tool shapes from the controller.
2. Add the fetched zones, links and tools to a layer.
3. Create other layers from your own 3D data as needed.
4. Plan trajectory.
5. The response highlights the layer in which a collision was detected by key.
MotionGroupSetup:
title: MotionGroupSetup
type: object
required:
- motion_group_model
- cycle_time
properties:
motion_group_model:
$ref: '#/components/schemas/MotionGroupModel'
cycle_time:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: '[ms] cycle time of the motion group controller. A trajectory for this motion group should be computed to this resolution.'
mounting:
$ref: '#/components/schemas/Pose'
description: The offset from the world frame to the motion group base.
tcp_offset:
$ref: '#/components/schemas/Pose'
global_limits:
$ref: '#/components/schemas/LimitSet'
payload:
$ref: '#/components/schemas/Payload'
collision_setups:
$ref: '#/components/schemas/CollisionSetups'
DoubleArray:
type: array
items:
type: number
format: double
BlendingAuto:
title: BlendingAuto
type: object
properties:
min_velocity_in_percent:
type: integer
format: int32
minimum: 0
maximum: 100
description: |
Auto-blending is used to keep a constant velocity when blending between two motion commands. To use auto-blending, the TCP velocity limit must be set.
It changes the TCP path around the target point of the motion command.
The value represents the percentage of the original velocity. Auto-blending is always performed in cartesian space.
blending_name:
type: string
enum:
- BlendingAuto
required:
- blending_name
BlendingSpace:
enum:
- JOINT
- CARTESIAN
type: string
description: |
Defines the space in which blending is performed.
- `JOINT`: Zone blending is performed in joint space
- `CARTESIAN`: Auto-blending is performed in cartesian space
BlendingPosition:
title: BlendingPosition
type: object
properties:
position_zone_radius:
type: number
format: double
description: |
Specifies the maximum radius in [mm] around the motion command's target point
where the TCP path can be altered to blend the motion command into the following one.
If auto-blending blends too much of the resulting trajectory, use position-blending to restrict the blending zone radius.
position_zone_percentage:
type: number
format: double
minimum: 0
maximum: 100
description: |
Specifies the maximum blending percentage based on the trajectory length in position space
around the motion command's target point. Percentage indicated in 0.0 - 100.0.
orientation_zone_radius:
type: number
format: double
description: |
Specifies the maximum radius in [rad] for orientation blending around the motion command's
target orientation. At the target's orientation, the TCP orientation can be altered to blend into the following motion.
orientation_zone_percentage:
type: number
format: double
minimum: 0
maximum: 100
description: |
Specifies the maximum blending percentage for orientation blending
based on the trajectory length in orientation space. Percentage indicated in 0.0 - 100.0.
joints_zone_radius:
type: number
format: double
description: |
Specifies the maximum radius in [rad] for joint space blending around the motion command's
target joint configuration. At the target joint configuration, the joint path can be altered to blend into the following motion.
joints_zone_percentage:
type: number
format: double
minimum: 0
maximum: 100
description: |
Specifies the maximum blending percentage for joint space blending
based on the trajectory length in joint space. Percentage indicated in 0.0 to 100.0.
space:
$ref: '#/components/schemas/BlendingSpace'
description: |
Defines the space in which blending is performed.
blending_name:
type: string
enum:
- BlendingPosition
required:
- blending_name
LimitsOverride:
type: object
properties:
joint_velocity_limits:
type: array
items:
type: number
format: double
description: |
Maximum joint velocity in [rad/s] for each joint.
Either leave this field empty or set a value for each joint.
joint_acceleration_limits:
type: array
items:
type: number
format: double
description: |
Maximum joint acceleration in [rad/s^2] for each joint.
Either leave this field empty or set a value for each joint.
joint_jerk_limits:
type: array
items:
type: number
format: double
description: |
Maximum joint jerk in [rad/s^3] for each joint.
Either leave this field empty or set a value for each joint.
> **NOTE**
>
> This limit type is experimental and its behavior may change in future releases.
tcp_velocity_limit:
type: number
format: double
description: |
Maximum allowed TCP velocity in [mm/s].
tcp_acceleration_limit:
type: number
format: double
description: |
Maximum allowed TCP acceleration in [mm/s^2].
tcp_jerk_limit:
type: number
format: double
description: |
Maximum allowed TCP jerk in [mm/s^3].
> **NOTE**
>
> This limit type is experimental and its behavior may change in future releases.
tcp_orientation_velocity_limit:
type: number
format: double
description: |
Maximum allowed TCP rotation velocity in [rad/s].
tcp_orientation_acceleration_limit:
type: number
format: double
description: |
Maximum allowed TCP rotation acceleration in [rad/s^2].
tcp_orientation_jerk_limit:
type: number
format: double
description: |
Maximum allowed TCP rotation jerk in [rad/s^3].
> **NOTE**
>
> This limit type is experimental and its behavior may change in future releases.
description: |
If a limit is not set, the default value will be used.
KinematicBranchWrist:
enum:
- FLIP
- NO_FLIP
type: string
KinematicBranchElbow:
enum:
- UP
- DOWN
type: string
KinematicBranchShoulder:
enum:
- FRONT
- BACK
type: string
KinematicBranch:
type: object
required:
- shoulder_branch
- elbow_branch
- wrist_branch
properties:
wrist_branch:
$ref: '#/components/schemas/KinematicBranchWrist'
elbow_branch:
$ref: '#/components/schemas/KinematicBranchElbow'
shoulder_branch:
$ref: '#/components/schemas/KinematicBranchShoulder'
description: |
A 6-DOF robot with spherical wrist has up to 8 inverse kinematics solutions
for a given TCP pose (2^3 branches). Each branch represents one side of a
kinematic singularity boundary. The three binary choices are shoulder, elbow,
and wrist.
> **NOTE**
>
> `FRONT`/`BACK`, `UP`/`DOWN`, `NO_FLIP`/`FLIP` are conventional
> labels for the two sides of each branch. The labels describe the
> typical geometric interpretation for common poses, but are not absolute spatial
> directions. The labels are consistent within a given solver: The same physical
> arm shape maps to the same branch value. The branch values are purely
> geometric and describe the same physical configuration regardless of
> vendor convention.
AxisRange:
type: object
required:
- axis
- range
properties:
axis:
type: integer
range:
$ref: '#/components/schemas/LimitRange'
description: |
Per-joint constraint beyond the 8 inverse kinematic branches. Maps a joint index (0-based)
to an allowed angle interval (in radians).
KinematicConfiguration:
type: object
required:
- kinematic_branch
properties:
kinematic_branch:
$ref: '#/components/schemas/KinematicBranch'
axis_ranges:
type: array
items:
$ref: '#/components/schemas/AxisRange'
description: |
Vendor-independent kinematic configuration for 6-DOF industrial robots
with spherical wrist. Combines the discrete branch selection with optional
per-joint axis range constraints.
PathCartesianPTP:
title: CartesianPTP
type: object
required:
- target_pose
- path_definition_name
properties:
target_pose:
$ref: '#/components/schemas/Pose'
kinematic_configuration:
$ref: '#/components/schemas/KinematicConfiguration'
path_definition_name:
type: string
enum:
- PathCartesianPTP
description: |
A cartesian point-to-point is representing a joint point-to-point motion from start point to the indicated target pose.
The target pose is a joint point-to-point given in cartesian space. The target joint configuration will be calculated
to be in the same kinematic configuration as the start point is. If that is not possible, planning will fail.
Alternatively, a kinematic configuration can be provided to specify the target kinematic branch
and axis ranges. The kinematic configuration can be obtained from
[convertVendorConfiguredPose](#/operations/convertVendorConfiguredPose).
> **NOTE**
>
> The `kinematic_configuration` property is experimental and its structure or behavior may change in future releases.
CubicSplineParameter:
title: CubicSplineParameter
required:
- pose
- path_parameter
type: object
properties:
pose:
$ref: '#/components/schemas/Pose'
path_parameter:
type: number
format: double
PathCubicSpline:
title: CubicSpline
required:
- parameters
- path_definition_name
type: object
properties:
parameters:
type: array
items:
$ref: '#/components/schemas/CubicSplineParameter'
path_definition_name:
type: string
enum:
- PathCubicSpline
description: |
A [cubic spline](https://de.wikipedia.org/wiki/Spline-Interpolation) represents a cartesian cubic spline
in translative and orientational space from start point to indicated target pose via control points.
PathLine:
title: Line
type: object
required:
- target_pose
- path_definition_name
properties:
target_pose:
$ref: '#/components/schemas/Pose'
path_definition_name:
type: string
enum:
- PathLine
description: |
A line represents a straight line from start position to indicated target position.
The orientation is calculated via a quaternion [slerp](https://en.wikipedia.org/wiki/Slerp) from start orientation to indicated target orientation.
PathCircle:
title: Circle
type: object
required:
- via_pose
- target_pose
- path_definition_name
properties:
via_pose:
$ref: '#/components/schemas/Pose'
target_pose:
$ref: '#/components/schemas/Pose'
path_definition_name:
type: string
enum:
- PathCircle
description: |
A circular constructs a circle in translative space from 1) the start position which is provided via position, and 2) the indicated target position.
The orientation is calculated via a [bezier spline](https://en.wikipedia.org/wiki/B%C3%A9zier_curve) from start orientation to the indicated target orientation.
The via point defines the control point for the bezier spline.
Therefore, the control point will not be hit directly.
PathJointPTP:
title: JointPTP
type: object
required:
- target_joint_position
- path_definition_name
properties:
target_joint_position:
$ref: '#/components/schemas/DoubleArray'
path_definition_name:
type: string
enum:
- PathJointPTP
description: |
A joint point-to-point represents a line in joint space. All joints will be moved synchronously.
ConstrainedPose:
title: ConstrainedPose
type: object
properties:
position:
$ref: '#/components/schemas/Vector3d'
orientation:
type: number
format: double
default:
position:
- 0
- 0
- 0
rotation:
- 0
description: |
Defines a rotationally constrained pose in 3D space.
The orientation is constrained to rotations around a single axis.
required:
- position
- orientation
DirectionConstraint:
title: DirectionConstraint
type: object
properties:
world:
$ref: '#/components/schemas/Vector3d'
description: The direction constraint vector in world frame.
tcp:
$ref: '#/components/schemas/Vector3d'
description: The direction constraint vector in the TCP frame.
tolerance:
type: number
description: |
The tolerance in degrees for the direction constraint.
The planner will try to satisfy the constraint within this tolerance.
Start and target orientations must also satisfy it within this tolerance.
constraint_name:
type: string
enum:
- DirectionConstraint
required:
- constraint_name
- world
- tcp
- tolerance
default:
world:
- 0
- 0
- 1
tcp:
- 0
- 0
- -1
tolerance: 0.00001
description: |
A direction constraint is defined by a vector in world frame and a vector in the TCP frame.
The direction constraint is satisfied when the vectors are aligned with each other, which the planner attempts to achieve.
Example:
If the world vector is [0, 0, 1] and the TCP vector is [0, 0, -1], the planner will try to keep the TCP facing downward during the motion.
The constraint vectors must be normalized.
PathDirectionConstrainedCartesianPTP:
title: DirectionConstrainedCartesianPTP
type: object
required:
- target_pose
- constraint
- path_definition_name
properties:
target_pose:
$ref: '#/components/schemas/ConstrainedPose'
constraint:
$ref: '#/components/schemas/DirectionConstraint'
path_definition_name:
type: string
enum:
- DirectionConstrainedCartesianPTP
description: |
A direction-constrained cartesian point-to-point motion is a joint point-to-point motion to a target pose in cartesian space while satisfying a direction constraint.
The direction constraint is defined by a vector in the world frame and a vector in the TCP frame.
The constraint is satisfied when the vectors are aligned with each other. The vectors must be normalized.
> **NOTE**
>
> This motion type is experimental and its behavior may change in future releases.
PathDirectionConstrainedJointPTP:
title: DirectionConstrainedJointPTP
type: object
required:
- target_joint_position
- constraint
- path_definition_name
properties:
target_joint_position:
$ref: '#/components/schemas/DoubleArray'
constraint:
$ref: '#/components/schemas/DirectionConstraint'
path_definition_name:
type: string
enum:
- DirectionConstrainedJointPTP
description: |
A direction-constrained joint point-to-point motion is a direct motion in joint space while satisfying a direction constraint.
The direction constraint is defined by a vector in the world frame and a vector in the TCP frame.
The constraint is satisfied when the vectors are aligned with each other. The vectors must be normalized.
> **NOTE**
>
> This motion type is experimental and its behavior may change in future releases.
MotionCommand:
title: MotionCommand
type: object
required:
- path
properties:
blending:
oneOf:
- $ref: '#/components/schemas/BlendingAuto'
- $ref: '#/components/schemas/BlendingPosition'
discriminator:
propertyName: blending_name
description: |
Blending alters the TCP path at the target point of a motion command
to ensure that the velocity does not drop to zero between two motion commands.
limits_override:
$ref: '#/components/schemas/LimitsOverride'
description: |
Limits override is used to override the global limits of the motion group for this segment of the motion.
path:
oneOf:
- $ref: '#/components/schemas/PathCartesianPTP'
- $ref: '#/components/schemas/PathCubicSpline'
- $ref: '#/components/schemas/PathLine'
- $ref: '#/components/schemas/PathCircle'
- $ref: '#/components/schemas/PathJointPTP'
- $ref: '#/components/schemas/PathDirectionConstrainedCartesianPTP'
- $ref: '#/components/schemas/PathDirectionConstrainedJointPTP'
discriminator:
propertyName: path_definition_name
PlanTrajectoryRequest:
title: PlanTrajectoryRequest
type: object
required:
- motion_group_setup
- start_joint_position
- motion_commands
properties:
motion_group_setup:
$ref: '#/components/schemas/MotionGroupSetup'
description: The data to assemble the robot setup can be retrieved from [getMotionGroupDescription](#/operations/getMotionGroupDescription) endpoint.
start_joint_position:
$ref: '#/components/schemas/DoubleArray'
description: |
To define a motion the start joints have to be indicated.
Cartesian movements will be in the same kinematic configuration as the start joint position until the first joint point-to-point motion.
Motions can only be executed if the start joint position is the current joint position of the motion group.
To retrieve the current joint position use the endpoint [getCurrentMotionGroupState](#/operations/getCurrentMotionGroupState).
To move the robot to the start joint position use the endpoint [streamMoveToTrajectoryViaJointP2P](#/operations/streamMoveToTrajectoryViaJointP2P).
motion_commands:
type: array
items:
$ref: '#/components/schemas/MotionCommand'
description: |
List of motion commands. A command consists of a path definition (line, circle, joint_ptp, cartesian_ptp, cubic_spline), blending, and limits override.
JointTrajectory:
title: JointTrajectory
required:
- joint_positions
- times
- locations
type: object
properties:
joint_positions:
type: array
items:
$ref: '#/components/schemas/Joints'
description: |
List of joint positions for each sample.
The number of samples must match the number of timestamps provided in the times field.
The unit depends on the type of joint: For revolute joints, the angle is given in [rad]; for prismatic joints, the displacement is given in [mm].
times:
type: array
items:
type: number
format: double
description: Timestamp for each sample [s].
locations:
type: array
items:
$ref: '#/components/schemas/Location'
FeedbackDirectionConstraintNoSolutionExists:
title: FeedbackDirectionConstraintNoSolutionExists
type: object
properties:
target_joint_position:
$ref: '#/components/schemas/DoubleArray'
error_feedback_name:
type: string
enum:
- FeedbackDirectionConstraintNoSolutionExists
description: No ptp motion to the target exists that fulfills the direction constraint.
required:
- error_feedback_name
FeedbackDirectionConstraintNotMet:
title: FeedbackDirectionConstraintNotMet
type: object
properties:
invalid_joint_position:
$ref: '#/components/schemas/DoubleArray'
error_feedback_name:
type: string
enum:
- FeedbackDirectionConstraintNotMet
description: The provided joint position does not satisfy the direction constraint.
required:
- error_feedback_name
FeedbackDirectionConstraintNotNormalized:
title: FeedbackDirectionConstraintNotNormalized
type: object
properties:
direction_constraint:
$ref: '#/components/schemas/Vector3d'
description: |
The direction constraint that is not normalized.
error_feedback_name:
type: string
enum:
- FeedbackDirectionConstraintNotNormalized
description: The provided direction constraint is not normalized.
required:
- error_feedback_name
FeedbackOutOfWorkspace:
title: FeedbackOutOfWorkspace
type: object
properties:
invalid_tcp_pose:
$ref: '#/components/schemas/Pose'
error_feedback_name:
type: string
enum:
- FeedbackOutOfWorkspace
description: Requested TCP pose is outside of motion group's workspace.
required:
- error_feedback_name
FeedbackNoSolutionInCurrentConfiguration:
title: FeedbackNoSolutionInCurrentConfiguration
type: object
properties:
invalid_tcp_pose:
$ref: '#/components/schemas/Pose'
error_feedback_name:
type: string
enum:
- FeedbackNoSolutionInCurrentConfiguration
description: Moving to the requested TCP pose would change the robot's configuration.
required:
- error_feedback_name
SingularityTypeEnum:
type: string
enum:
- WRIST
- ELBOW
- SHOULDER
FeedbackSingularity:
title: FeedbackSingularity
type: object
properties:
singularity_type:
$ref: '#/components/schemas/SingularityTypeEnum'
singular_joint_position:
$ref: '#/components/schemas/DoubleArray'
error_feedback_name:
type: string
enum:
- FeedbackSingularity
description: |
A singularity is a point in the robot's workspace where the robot loses one or more degrees of freedom with regards to moving its TCP.
This means the robot cannot move or rotate the TCP in a certain direction from this specific point.
Use PTP motions if possible. They will almost never fail due to singularities (only if the target point is at a singularity).
Alternatively change the robot TCP's path to avoid moving through this point or try to move the TCP through this point in a different direction.
required:
- error_feedback_name
FeedbackJointLimitExceeded:
title: FeedbackJointLimitExceeded
type: object
properties:
joint_index:
type: integer
format: int32
minimum: 0
maximum: 2147483647
joint_position:
$ref: '#/components/schemas/DoubleArray'
error_feedback_name:
type: string
enum:
- FeedbackJointLimitExceeded
description: |
This error is returned when a joint position limit is exceeded.
The joint index denotes which joint is out of its limits, starting with 0 and followed by the full joint position.
required:
- error_feedback_name
CollisionContact:
title: CollisionContact
type: object
properties:
local:
$ref: '#/components/schemas/Vector3d'
root:
$ref: '#/components/schemas/Vector3d'
Collision:
title: Collision
type: object
properties:
id_of_a:
type: string
id_of_b:
type: string
id_of_layer:
type: string
normal_root_on_b:
$ref: '#/components/schemas/Vector3d'
position_on_a:
$ref: '#/components/schemas/CollisionContact'
position_on_b:
$ref: '#/components/schemas/CollisionContact'
FeedbackCollision:
title: FeedbackCollision
type: object
properties:
collisions:
type: array
items:
$ref: '#/components/schemas/Collision'
joint_position:
$ref: '#/components/schemas/DoubleArray'
tcp_pose:
$ref: '#/components/schemas/Pose'
error_feedback_name:
type: string
enum:
- FeedbackCollision
required:
- error_feedback_name
FeedbackInvalidNanValue:
title: FeedbackInvalidNanValue
type: object
properties:
value:
$ref: '#/components/schemas/DoubleArray'
error_feedback_name:
type: string
enum:
- FeedbackInvalidNanValue
description: |
Some vector provided in the plan command contains not-a-number (NaN).
required:
- error_feedback_name
FeedbackInvalidDof:
title: FeedbackInvalidDof
type: object
properties:
joint_position:
$ref: '#/components/schemas/Joints'
motion_group_dof:
type: integer
error_feedback_name:
type: string
enum:
- FeedbackInvalidDof
description: |
Some vector provided in the plan command has an invalid number of entries.
required:
- error_feedback_name
FeedbackTorqueExceeded:
title: FeedbackTorqueExceeded
type: object
properties:
torque_value:
type: number
torque_limit:
type: number
error_feedback_name:
type: string
enum:
- FeedbackTorqueExceeded
description: |
The trajectory cannot be planned because the torque limit would be exceeded.
required:
- error_feedback_name
FeedbackCommandsMissing:
title: FeedbackCommandsMissing
type: object
properties:
error_feedback_name:
type: string
enum:
- FeedbackCommandsMissing
description: |
No commands have been provided in the plan request.
required:
- error_feedback_name
FeedbackStartJointsMissing:
title: FeedbackStartJointsMissing
type: object
properties:
start_joints_dof:
type: integer
motion_group_dof:
type: integer
error_feedback_name:
type: string
enum:
- FeedbackStartJointsMissing
description: |
The provided start joints have an incorrect dimension.
required:
- error_feedback_name
FeedbackCubicSplineIsNotIncreasing:
title: FeedbackCubicSplineIsNotIncreasing
type: object
properties:
index:
type: integer
previous_value:
type: number
current_value:
type: number
error_feedback_name:
type: string
enum:
- FeedbackCubicSplineIsNotIncreasing
description: |
The path parameter provided in the cubic spline command is not increasing at a certain index.
required:
- error_feedback_name
FeedbackCubicSplineNotAtStartPose:
title: FeedbackCubicSplineNotAtStartPose
type: object
properties:
first_spline_pose:
$ref: '#/components/schemas/Pose'
start_pose:
$ref: '#/components/schemas/Pose'
error_feedback_name:
type: string
enum:
- FeedbackCubicSplineNotAtStartPose
description: |
The first pose provided in the cubic spline command is not the same as the end pose of the preceeding command.
required:
- error_feedback_name
FeedbackInvalidSamplingTime:
title: FeedbackInvalidSamplingTime
type: object
properties:
sampling_time:
type: number
error_feedback_name:
type: string
enum:
- FeedbackInvalidSamplingTime
description: |
The provided sampling time is invalid. It has to be a positive number.
required:
- error_feedback_name
PlanTrajectoryFailedResponse:
title: PlanTrajectoryFailedResponse
type: object
required:
- error_feedback
- error_location_on_trajectory
properties:
error_feedback:
oneOf:
- $ref: '#/components/schemas/FeedbackDirectionConstraintNoSolutionExists'
- $ref: '#/components/schemas/FeedbackDirectionConstraintNotMet'
- $ref: '#/components/schemas/FeedbackDirectionConstraintNotNormalized'
- $ref: '#/components/schemas/FeedbackOutOfWorkspace'
- $ref: '#/components/schemas/FeedbackNoSolutionInCurrentConfiguration'
- $ref: '#/components/schemas/FeedbackSingularity'
- $ref: '#/components/schemas/FeedbackJointLimitExceeded'
- $ref: '#/components/schemas/FeedbackCollision'
- $ref: '#/components/schemas/FeedbackInvalidNanValue'
- $ref: '#/components/schemas/FeedbackInvalidDof'
- $ref: '#/components/schemas/FeedbackTorqueExceeded'
- $ref: '#/components/schemas/FeedbackCommandsMissing'
- $ref: '#/components/schemas/FeedbackStartJointsMissing'
- $ref: '#/components/schemas/FeedbackCubicSplineIsNotIncreasing'
- $ref: '#/components/schemas/FeedbackCubicSplineNotAtStartPose'
- $ref: '#/components/schemas/FeedbackInvalidSamplingTime'
discriminator:
propertyName: error_feedback_name
error_location_on_trajectory:
$ref: '#/components/schemas/Location'
joint_trajectory:
$ref: '#/components/schemas/JointTrajectory'
description: |
The joint trajectory from the start joint position to the error.
PlanTrajectoryResponse:
title: PlanTrajectoryResponse
type: object
required:
- response
properties:
response:
oneOf:
- $ref: '#/components/schemas/JointTrajectory'
- $ref: '#/components/schemas/PlanTrajectoryFailedResponse'
ValidationError:
properties:
loc:
items:
oneOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
type: object
additionalProperties: true
type: object
required:
- loc
- msg
- type
- input
title: ValidationError
ErrorInvalidJointCount:
title: ErrorInvalidJointCount
type: object
properties:
expected_joint_count:
type: integer
description: |
The expected number of joints for this motion group.
provided_joint_count:
type: integer
description: |
The number of provided joints.
error_feedback_name:
type: string
enum:
- ErrorInvalidJointCount
description: |
The provided joint data does not match the expected number of joints
for this motion group.
required:
- expected_joint_count
- provided_joint_count
- error_feedback_name
ErrorJointLimitExceeded:
title: ErrorJointLimitExceeded
type: object
properties:
joint_index:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
Index of the joint exceeding its limits (0-based).
joint_position:
$ref: '#/components/schemas/DoubleArray'
description: |
The joint position violating the limits.
error_feedback_name:
type: string
enum:
- ErrorJointLimitExceeded
description: |
A reference joint position (start or target) exceeds the configured joint limits.
required:
- error_feedback_name
ErrorJointPositionCollision:
title: ErrorJointPositionCollision
type: object
properties:
collisions:
type: array
items:
$ref: '#/components/schemas/Collision'
joint_position:
$ref: '#/components/schemas/DoubleArray'
description: |
The joint position that collides.
error_feedback_name:
type: string
enum:
- ErrorJointPositionCollision
description: |
A reference joint position, e.g., start or target joint position, results in collisions that prevent processing.
required:
- error_feedback_name
ErrorDirectionConstraintNotMet:
title: ErrorDirectionConstraintNotMet
type: object
properties:
joint_position:
$ref: '#/components/schemas/DoubleArray'
description: |
The joint position violating the direction constraint.
error_feedback_name:
type: string
enum:
- ErrorDirectionConstraintNotMet
description: |
A reference joint position (start or target) violates the direction constraint.
required:
- error_feedback_name
ErrorDirectionConstraintNotNormalized:
title: ErrorDirectionConstraintNotNormalized
type: object
properties:
direction_constraint:
$ref: '#/components/schemas/Vector3d'
description: |
The direction constraint that is not normalized.
error_feedback_name:
type: string
enum:
- ErrorDirectionConstraintNotNormalized
description: |
The provided direction constraint is not normalized.
required:
- error_feedback_name
ErrorUnsupportedOperation:
title: ErrorUnsupportedOperation
type: object
properties:
error_feedback_name:
type: string
enum:
- ErrorUnsupportedOperation
description: |
The operation requested is not supported.
required:
- error_feedback_name
PlanValidationError:
allOf:
- $ref: '#/components/schemas/ValidationError'
- type: object
properties:
data:
oneOf:
- $ref: '#/components/schemas/ErrorInvalidJointCount'
- $ref: '#/components/schemas/ErrorJointLimitExceeded'
- $ref: '#/components/schemas/ErrorJointPositionCollision'
- $ref: '#/components/schemas/ErrorDirectionConstraintNotMet'
- $ref: '#/components/schemas/ErrorDirectionConstraintNotNormalized'
- $ref: '#/components/schemas/ErrorUnsupportedOperation'
discriminator:
propertyName: error_feedback_name
description: |
Optional data further specifying the validation error.
title: PlanValidationError
Plan422Response:
properties:
detail:
items:
$ref: '#/components/schemas/PlanValidationError'
type: array
title: Detail
type: object
title: Plan422Response
ColliderValue:
title: ColliderValue
description: An inline Collider object wrapped for discriminator support.
type: object
required:
- source
- collider
properties:
source:
type: string
enum:
- value
description: Discriminator value indicating an inline value.
collider:
$ref: '#/components/schemas/Collider'
description: The inline Collider definition.
StorageKey:
title: StorageKey
description: |
A reference to an object stored in the storage service.
The key is resolved against the appropriate S3 path prefix depending on context (e.g. collision/setups/, collision/colliders/).
type: object
required:
- source
- key
properties:
source:
type: string
enum:
- key
description: Discriminator value indicating a storage reference.
key:
type: string
description: |
The storage key identifying the object.
Resolved against the storage service using the {cell} path parameter of the request URL as the storage bucket.
Keys correspond to identifiers used in the Storage Service API (e.g. the {tool} parameter in GET /api/v2/cells/{cell}/store/collision/tools/{tool}).
ColliderValueOrKey:
title: ColliderValueOrKey
description: |
Either an inline Collider object or a storage key referencing a stored Collider.
Discriminated by the "source" property.
oneOf:
- $ref: '#/components/schemas/ColliderValue'
- $ref: '#/components/schemas/StorageKey'
discriminator:
propertyName: source
mapping:
value: '#/components/schemas/ColliderValue'
key: '#/components/schemas/StorageKey'
CollidersValueOrKey:
title: CollidersValueOrKey
description: |
A dictionary of colliders where each value is either an inline Collider object or a string key referencing a stored Collider.
type: object
additionalProperties:
$ref: '#/components/schemas/ColliderValueOrKey'
LinkChainValue:
title: LinkChainValue
description: An inline link chain wrapped for discriminator support.
type: object
required:
- source
- link_chain
properties:
source:
type: string
enum:
- value
description: Discriminator value indicating an inline value.
link_chain:
$ref: '#/components/schemas/LinkChain'
description: The inline link chain definition.
LinkChainValueOrKey:
title: LinkChainValueOrKey
description: |
Either an inline link chain or a storage key referencing a stored link chain.
Discriminated by the "source" property.
oneOf:
- $ref: '#/components/schemas/LinkChainValue'
- $ref: '#/components/schemas/StorageKey'
discriminator:
propertyName: source
mapping:
value: '#/components/schemas/LinkChainValue'
key: '#/components/schemas/StorageKey'
ToolValue:
title: ToolValue
description: An inline tool collider wrapped for discriminator support.
type: object
required:
- source
- tool
properties:
source:
type: string
enum:
- value
description: Discriminator value indicating an inline value.
tool:
$ref: '#/components/schemas/Tool'
description: The inline tool collider definition.
ToolValueOrKey:
title: ToolValueOrKey
description: |
Either an inline tool collider or a storage key referencing a stored tool.
Discriminated by the "source" property.
oneOf:
- $ref: '#/components/schemas/ToolValue'
- $ref: '#/components/schemas/StorageKey'
discriminator:
propertyName: source
mapping:
value: '#/components/schemas/ToolValue'
key: '#/components/schemas/StorageKey'
CollisionSetupValue:
title: CollisionSetupValue
description: |
An inline collision setup wrapped for discriminator support.
Colliders, tool, and link_chain can each be either inline values or storage key references.
type: object
required:
- source
properties:
source:
type: string
enum:
- value
description: Discriminator value indicating an inline value.
colliders:
$ref: '#/components/schemas/CollidersValueOrKey'
description: |
Colliders checked against links and tool.
Each value is either an inline Collider or a store key.
link_chain:
$ref: '#/components/schemas/LinkChainValueOrKey'
description: |
The shape of the motion group links.
Either an inline LinkChain or a store key.
tool:
$ref: '#/components/schemas/ToolValueOrKey'
description: |
Shape of the tool.
Either an inline tool collider or a store key.
self_collision_detection:
type: boolean
description: |
If true, self-collision detection is enabled.
Default is true.
default: true
CollisionSetupValueOrKey:
title: CollisionSetupValueOrKey
description: |
Either an inline collision setup or a storage key referencing
a complete stored CollisionSetup. Discriminated by the "source" property.
oneOf:
- $ref: '#/components/schemas/CollisionSetupValue'
- $ref: '#/components/schemas/StorageKey'
discriminator:
propertyName: source
mapping:
value: '#/components/schemas/CollisionSetupValue'
key: '#/components/schemas/StorageKey'
CollisionSetupsValueOrKey:
title: CollisionSetupsValueOrKey
description: |
Collision layers with support for storage references.
Each value is either a store key referencing a stored CollisionSetup, or an inline collision setup object with optional store key references.
All storage keys are resolved against the {cell} path parameter of the request URL, which determines the storage bucket.
If set on the request, overrides motion_group_setup.collision_setups.
type: object
additionalProperties:
$ref: '#/components/schemas/CollisionSetupValueOrKey'
Range:
type: object
required:
- min
- max
properties:
min:
type: number
format: double
max:
type: number
format: double
description: Inclusive range defined by minimum and maximum. [max] must be greater than [min].
RRTConnectAlgorithm:
title: RRTConnectAlgorithm
type: object
required:
- algorithm_name
properties:
algorithm_name:
type: string
enum:
- RRTConnectAlgorithm
description: |
Algorithm discriminator.
RRT Connect algorithm configuration for collision-free path planning.
Rapidly-exploring Random Trees (RRT) builds trees of valid configurations by randomly sampling
the joint space and connecting feasible points with JointPTP motions.
RRT Connect grows two trees simultaneously from start and target positions until they meet.
This is a custom implementation optimized for manipulator kinematics and collision checking in industrial contexts.
max_iterations:
type: integer
default: 10000
minimum: 1
description: |
Maximum number of iterations for the RRT Connect algorithm.
Higher values increase likelihood of success, but also computation time.
max_step_size:
deprecated: true
type: number
default: 0.1
description: Deprecated in favor of [step_size]. Maximum step size for tree extension in joint space.
adaptive_step_size:
deprecated: true
type: boolean
default: true
description: Deprecated in favor of [step_size]. Adjust the maximum step size during the search based on the recent success rate of tree expansion.
step_size:
oneOf:
- type: number
- $ref: '#/components/schemas/Range'
- enum:
- null
description: Step size for tree extension in joint space. If a range is given, the step size is adaptively adjusted based on the recent success rate.
apply_smoothing:
type: boolean
default: true
description: Apply smoothing after the search has succeeded. This will remove as many intermediate points as possible while keeping the path valid.
apply_blending:
type: boolean
default: true
description: Apply blending after the search has succeeded and smoothing has been applied. This will apply the largest viable blending at each intermediate point.
MidpointInsertionAlgorithm:
title: MidpointInsertionAlgorithm
type: object
required:
- algorithm_name
properties:
algorithm_name:
type: string
enum:
- MidpointInsertionAlgorithm
description: |
Algorithm discriminator.
Midpoint insertion algorithm configuration for collision-free path planning.
This algorithm adds a single midpoint between the start and target joint position to find collision-free paths.
max_iterations:
type: integer
default: 1000
minimum: 1
description: |
Maximum number of iterations for the midpoint insertion algorithm.
Higher values increase likelyhood of success, but also computation time (linear).
CollisionFreeAlgorithm:
title: CollisionFreeAlgorithm
type: object
oneOf:
- $ref: '#/components/schemas/RRTConnectAlgorithm'
- $ref: '#/components/schemas/MidpointInsertionAlgorithm'
discriminator:
propertyName: algorithm_name
description: |
Configuration for collision-free path planning algorithms.
Different algorithms may have different parameters and behavior.
Recommendation:
- For **cells with many obstacles**, use the RRTConnect algorithm. Use it as a starting point.
- For **simple cells with very few obstacles** and when a faster solution is needed, try the MidpointInsertion algorithm.
PlanCollisionFreeRequest:
title: PlanCollisionFreeRequest
type: object
required:
- motion_group_setup
- start_joint_position
- target
- algorithm
properties:
motion_group_setup:
$ref: '#/components/schemas/MotionGroupSetup'
description: The data to assemble the robot setup can be retrieved from the [getMotionGroupDescription](#/operations/getMotionGroupDescription) endpoint.
collision_setups:
$ref: '#/components/schemas/CollisionSetupsValueOrKey'
description: |
Optional collision setups with support for store keys.
If set, overrides motion_group_setup.collision_setups.
Each value is either an inline CollisionSetup object or a storage key reference.
Storage keys are resolved against the {cell} path parameter of the request URL, which determines the storage bucket.
start_joint_position:
$ref: '#/components/schemas/DoubleArray'
description: |
Starting joint position for the collision-free motion.
Must contain exactly the same number of values as joints in the motion group.
To retrieve the current joint position, use the endpoint [getCurrentMotionGroupState](#/operations/getCurrentMotionGroupState).
target:
$ref: '#/components/schemas/DoubleArray'
description: |
The target joint position of the motion.
Must contain exactly the same number of values as joints in the motion group.
To compute target joint position from a TCP pose, use the endpoint [inverseKinematics](#/operations/inverseKinematics).
constraint:
$ref: '#/components/schemas/DirectionConstraint'
description: |
Optional constraint for the motion. If provided, the motion will be constrained accordingly.
> **NOTE**
>
> Constraints are experimental and their behavior may change in future releases.
algorithm:
$ref: '#/components/schemas/CollisionFreeAlgorithm'
ErrorMaxIterationsExceeded:
title: ErrorMaxIterationsExceeded
type: object
properties:
max_iterations:
type: integer
description: |
The maximum number of iterations that was reached.
error_feedback_name:
type: string
enum:
- ErrorMaxIterationsExceeded
description: |
The collision-free planning algorithm reached its maximum iteration limit
without finding a valid path. Increase max_iterations or
modify the start/target positions.
required:
- error_feedback_name
PlanCollisionFreeFailedResponse:
title: PlanCollisionFreeFailedResponse
type: object
required:
- error_feedback
properties:
error_feedback:
$ref: '#/components/schemas/ErrorMaxIterationsExceeded'
description: |
Response when collision-free trajectory planning fails.
Contains specific feedback about why the planning failed.
PlanCollisionFreeResponse:
title: PlanCollisionFreeResponse
type: object
required:
- response
properties:
response:
oneOf:
- $ref: '#/components/schemas/JointTrajectory'
- $ref: '#/components/schemas/PlanCollisionFreeFailedResponse'
description: |
Response from collision-free trajectory planning.
Contains either a successful joint trajectory or failure information.
MotionGroupSetupDictionary:
type: object
title: MotionGroupSetupDictionary
description: A collection of motion group setups.
additionalProperties:
$ref: '#/components/schemas/MotionGroupSetup'
JointPTPMotion:
title: JointPTPMotion
type: object
required:
- start_joint_position
- target_joint_position
properties:
start_joint_position:
$ref: '#/components/schemas/DoubleArray'
description: |
Starting joint position for the collision-free motion.
Must contain exactly the same number of values as joints in the motion group.
To retrieve the current joint position, use the endpoint [getCurrentMotionGroupState](#/operations/getCurrentMotionGroupState).
target_joint_position:
$ref: '#/components/schemas/DoubleArray'
description: |
The target joint position of the motion.
Must contain exactly the same number of values as joints in the motion group.
To compute target joint position from a TCP pose, use the endpoint [inverseKinematics](#/operations/inverseKinematics).
limits_override:
$ref: '#/components/schemas/LimitsOverride'
JointPTPMotionDictionary:
type: object
title: JointPTPMotionDictionary
description: A collection of joint PTP path definitions.
additionalProperties:
$ref: '#/components/schemas/JointPTPMotion'
CollisionMotionGroup:
title: CollisionMotionGroup
type: object
properties:
link_chain:
$ref: '#/components/schemas/LinkChain'
description: |
The shape of the motion groups links to validate against colliders.
Indexed along the kinematic chain, starting with a static base shape before first joint.
The base of the motion group is not checked for collision against the environment.
tool:
$ref: '#/components/schemas/Tool'
description: |
Shape of the tool to validate against colliders.
self_collision_detection:
type: boolean
description: |
If true, self-collision detection is enabled for the motion group.
Self-collision detection checks if links in the kinematic chain of the motion group collide with each other.
Adjacent links in the kinematic chain of the motion group are not checked for mutual collision.
The tool is treated like a link at the end of the kinematic chain. It is checked against all links except the last one.
Default is true.
default: true
CollisionMotionGroupDictionary:
type: object
title: CollisionMotionGroupDictionary
description: A collection of collision motion groups.
additionalProperties:
$ref: '#/components/schemas/CollisionMotionGroup'
MultiCollisionSetup:
title: MultiCollisionSetup
type: object
properties:
collision_motion_groups_by_motion_group_key:
$ref: '#/components/schemas/CollisionMotionGroupDictionary'
description: |
Dictionary of motion group collision motion groups containing link chain and tool colliders.
colliders:
$ref: '#/components/schemas/ColliderDictionary'
description: |
Colliders are checked against links and tool.
MultiCollisionSetupDictionary:
type: object
title: MultiCollisionSetupDictionary
description: A collection of multi collision setups.
additionalProperties:
$ref: '#/components/schemas/MultiCollisionSetup'
MultiSearchCollisionFreeRequest:
title: MultiSearchCollisionFreeRequest
type: object
required:
- motion_group_setups_by_motion_group_key
- path_definitions_by_motion_group_key
properties:
motion_group_setups_by_motion_group_key:
$ref: '#/components/schemas/MotionGroupSetupDictionary'
description: |
Dictionary of motion group setups.
path_definitions_by_motion_group_key:
$ref: '#/components/schemas/JointPTPMotionDictionary'
description: |
Dictionary of path definitions. The keys must match the ones in `motion_group_setups_by_motion_group_key`.
collision_setups:
$ref: '#/components/schemas/MultiCollisionSetupDictionary'
description: |
Dictionary of collision setups. Defines cross-group collision checking: which link-chain/tool colliders
from each motion group to consider, plus static environment colliders.
algorithm_settings:
$ref: '#/components/schemas/RRTConnectAlgorithm'
description: |
Configuration for the RRT-Connect algorithm (Rapidly-exploring Random Trees).
JointPositionsArray:
title: JointPositionsArray
type: array
items:
$ref: '#/components/schemas/Joints'
description: |
List of joint positions for each sample.
The number of samples must match the number of timestamps provided in the times field.
The unit depends on the type of joint: For revolute joints, the angle is given in [rad]; for prismatic joints, the displacement is given in [mm].
JointPositionArrayDictionary:
type: object
title: JointPositionArrayDictionary
description: A collection of joint position arrays.
additionalProperties:
$ref: '#/components/schemas/JointPositionsArray'
MultiJointTrajectory:
title: MultiJointTrajectory
required:
- joint_positions_by_motion_group_key
- times
- locations
type: object
properties:
joint_positions_by_motion_group_key:
$ref: '#/components/schemas/JointPositionArrayDictionary'
description: |
For each motion group, this dictionary contains a list of joint positions for each sample.
The number of samples must match the number of timestamps provided in the times field.
The unit depends on the type of joint: For revolute joints, the angle is given in [rad]; for prismatic joints, the displacement is given in [mm].
times:
type: array
items:
type: number
format: double
description: Timestamp for each sample [s].
locations:
type: array
items:
$ref: '#/components/schemas/Location'
MultiSearchCollisionFreeResponse:
title: MultiSearchCollisionFreeResponse
type: object
properties:
response:
oneOf:
- $ref: '#/components/schemas/MultiJointTrajectory'
- $ref: '#/components/schemas/PlanCollisionFreeFailedResponse'
description: |
Dictionary of joint trajectories.
ErrorInvalidJointCountDictionary:
title: ErrorInvalidJointCountDictionary
type: object
additionalProperties:
$ref: '#/components/schemas/ErrorInvalidJointCount'
MultiErrorInvalidJointCount:
title: MultiErrorInvalidJointCount
type: object
properties:
invalid_joint_count_errors_by_motion_group_key:
$ref: '#/components/schemas/ErrorInvalidJointCountDictionary'
description: |
The provided joint data does not match the expected number of joints
for the respective motion group.
ErrorJointLimitExceededDictionary:
title: ErrorJointLimitExceededDictionary
type: object
additionalProperties:
$ref: '#/components/schemas/ErrorJointLimitExceeded'
MultiErrorJointLimitExceeded:
title: MultiErrorJointLimitExceeded
type: object
properties:
joint_limit_exceeded_errors_by_motion_group_key:
$ref: '#/components/schemas/ErrorJointLimitExceededDictionary'
description: |
A reference joint position (start or target) exceeds the configured joint limits of the respective motion group.
DoubleArrayDictionary:
type: object
title: DoubleArrayDictionary
description: A collection of single joint positions.
additionalProperties:
$ref: '#/components/schemas/DoubleArray'
MultiErrorJointPositionCollision:
title: MultiErrorJointPositionCollision
type: object
properties:
collisions:
type: array
items:
$ref: '#/components/schemas/Collision'
joint_positions_by_motion_group_key:
$ref: '#/components/schemas/DoubleArrayDictionary'
description: |
The joint positions of all motion groups as the collision occurs.
description: |
A reference joint position, e.g., start or target joint position, results in collisions that prevent processing.
ErrorMotionGroupKeyMismatch:
title: ErrorMotionGroupKeyMismatch
type: object
properties:
invalid_motion_group_keys:
type: array
items:
type: string
description: |
Motion group keys that have no matching motion group setup.
MultiSearchCollisionFreeValidationError:
allOf:
- $ref: '#/components/schemas/ValidationError'
- type: object
properties:
data:
oneOf:
- $ref: '#/components/schemas/MultiErrorInvalidJointCount'
- $ref: '#/components/schemas/MultiErrorJointLimitExceeded'
- $ref: '#/components/schemas/MultiErrorJointPositionCollision'
- $ref: '#/components/schemas/ErrorMotionGroupKeyMismatch'
description: |
Optional data further specifying the validation error.
title: MultiSearchCollisionFreeValidationError
MultiSearchCollisionFree422Response:
properties:
detail:
items:
$ref: '#/components/schemas/MultiSearchCollisionFreeValidationError'
type: array
title: Detail
type: object
title: MultiSearchCollisionFree422Response
MergeTrajectoriesSegment:
title: MergeTrajectoriesSegment
type: object
required:
- trajectory
properties:
trajectory:
$ref: '#/components/schemas/JointTrajectory'
description: |
The trajectory segment to merge. Both the time and location arrays must start at 0 and be strictly increasing.
limits_override:
$ref: '#/components/schemas/LimitsOverride'
description: |
Limits override is used to override the global limits of the motion group for the blending at the end of this segment.
blending:
$ref: '#/components/schemas/BlendingPosition'
description: |
Blending configuration for merging this trajectory segment with the next one. Specifies how the end of this
trajectory should be blended with the start of the next trajectory. Ignored for the last segment.
collision_setups:
$ref: '#/components/schemas/CollisionSetups'
description: |
Collision setups set here override the collsion setups of the Motion Group Configuration.
Collisions are checked only on the trajectory section that deviates from the original path due to blending.
MergeTrajectoriesRequest:
title: MergeTrajectoriesRequest
type: object
required:
- motion_group_setup
- trajectory_segments
properties:
motion_group_setup:
$ref: '#/components/schemas/MotionGroupSetup'
description: The motion group setup required for collision checking and timescaling.
trajectory_segments:
type: array
items:
$ref: '#/components/schemas/MergeTrajectoriesSegment'
description: |
List of trajectory segments to merge together. Each segment contains a trajectory with its own
limits override, blending configuration and collision setup.
MergeTrajectoriesError:
title: MergeTrajectoriesError
type: object
required:
- error_feedback
- error_location_on_trajectory
properties:
error_feedback:
oneOf:
- $ref: '#/components/schemas/FeedbackOutOfWorkspace'
- $ref: '#/components/schemas/FeedbackSingularity'
- $ref: '#/components/schemas/FeedbackJointLimitExceeded'
- $ref: '#/components/schemas/FeedbackCollision'
discriminator:
propertyName: error_feedback_name
error_location_on_trajectory:
$ref: '#/components/schemas/Location'
TrajectorySection:
title: TrajectorySection
type: object
required:
- start_location
- end_location
properties:
start_location:
type: number
format: double
end_location:
type: number
format: double
MergeTrajectoriesResponse:
title: MergeTrajectoriesResponse
type: object
properties:
joint_trajectory:
$ref: '#/components/schemas/JointTrajectory'
description: |
The merged joint trajectory. If a blending was requested on a segment but could not be applied,
the trajectory is merged without blending. The feedback will contain further information
on why blending could not be applied.
feedback:
type: array
items:
oneOf:
- $ref: '#/components/schemas/MergeTrajectoriesError'
- $ref: '#/components/schemas/TrajectorySection'
description: |
For each blending, feedback will either contain the section in which the trajectory
deviates from the original path, or an error message stating why blending could not be applied.
The response will include `trajectory_segments` - 1 elements. If no blending was requested at the corresponding
segment, the feedback will be a null section where `start_location == end_location`.
MergeTrajectoriesValidationError:
allOf:
- $ref: '#/components/schemas/ValidationError'
- type: object
properties:
data:
$ref: '#/components/schemas/ErrorInvalidJointCount'
description: |
Optional data further specifying the merge validation error.
title: MergeTrajectoriesValidationError
MergeTrajectories422Response:
properties:
detail:
items:
$ref: '#/components/schemas/MergeTrajectoriesValidationError'
type: array
title: Detail
type: object
title: MergeTrajectories422Response
JointPositionLimits:
title: JointPositionLimits
type: array
items:
$ref: '#/components/schemas/LimitRange'
description: |
Joint position limits, indexed starting from base.
The unit depends on the type of joint: For revolute joints, the limit is given in [rad]; for prismatic joints, it is given in [mm].
InverseKinematicsRequest:
title: InverseKinematicsRequest
type: object
required:
- motion_group_model
- tcp_poses
properties:
motion_group_model:
$ref: '#/components/schemas/MotionGroupModel'
tcp_poses:
type: array
items:
$ref: '#/components/schemas/Pose'
description: |
List of TCP poses for which the inverse solutions are computed.
tcp_offset:
$ref: '#/components/schemas/Pose'
mounting:
$ref: '#/components/schemas/Pose'
description: Offset from the world frame to the motion group base.
joint_position_limits:
$ref: '#/components/schemas/JointPositionLimits'
collision_setups:
$ref: '#/components/schemas/CollisionSetups'
reference_joint_position:
$ref: '#/components/schemas/DoubleArray'
description: |
If present, all solutions are shifted to the same periodicity
as the reference: Each individual joint angle is shifted
by integer multiples of 2 pi (whole revolutions) until it's
as close to the reference as possible. The solutions are sorted
by ascending distance (L2 norm) from the reference.
InverseKinematicsResponse:
title: InverseKinematicsResponse
type: object
required:
- joints
properties:
joints:
type: array
items:
type: array
items:
$ref: '#/components/schemas/DoubleArray'
InverseKinematicsValidationError:
allOf:
- $ref: '#/components/schemas/ValidationError'
- type: object
properties:
data:
oneOf:
- $ref: '#/components/schemas/ErrorInvalidJointCount'
- $ref: '#/components/schemas/ErrorJointLimitExceeded'
discriminator:
propertyName: error_feedback_name
description: |
Optional data further specifying the validation error.
title: InverseKinematicsValidationError
InverseKinematics422Response:
properties:
detail:
items:
$ref: '#/components/schemas/InverseKinematicsValidationError'
type: array
title: Detail
type: object
title: InverseKinematics422Response
ConfiguredPose:
type: object
required:
- pose
- kinematic_configuration
properties:
pose:
$ref: '#/components/schemas/Pose'
kinematic_configuration:
$ref: '#/components/schemas/KinematicConfiguration'
ConfiguredPoseList:
type: array
items:
$ref: '#/components/schemas/ConfiguredPose'
ConfiguredPoseInverseRequest:
title: ConfiguredPoseInverseRequest
type: object
required:
- motion_group_model
- tcp_poses
properties:
motion_group_model:
$ref: '#/components/schemas/MotionGroupModel'
tcp_poses:
$ref: '#/components/schemas/ConfiguredPoseList'
description: |
List of TCP poses for which the inverse solutions are computed.
tcp_offset:
$ref: '#/components/schemas/Pose'
mounting:
$ref: '#/components/schemas/Pose'
description: Offset from the world frame to the motion group base.
joint_position_limits:
$ref: '#/components/schemas/JointPositionLimits'
collision_setups:
$ref: '#/components/schemas/CollisionSetups'
DoubleArrayList:
type: array
items:
$ref: '#/components/schemas/DoubleArray'
FeedbackAxisRangeExceeded:
title: FeedbackAxisRangeExceeded
type: object
properties:
joint_index:
type: integer
format: int32
minimum: 0
maximum: 2147483647
joint_position:
$ref: '#/components/schemas/DoubleArray'
error_feedback_name:
type: string
enum:
- FeedbackAxisRangeExceeded
description: |
This error is returned when a joint position limit is exceeded.
The joint index denotes which joint is out of its limits, starting with 0 and followed by the full joint position.
required:
- error_feedback_name
InverseFeedbackAtIndex:
title: InverseFeedbackAtIndex
type: object
required:
- error_feedback
- error_index
properties:
error_feedback:
oneOf:
- $ref: '#/components/schemas/FeedbackOutOfWorkspace'
- $ref: '#/components/schemas/FeedbackSingularity'
- $ref: '#/components/schemas/FeedbackJointLimitExceeded'
- $ref: '#/components/schemas/FeedbackAxisRangeExceeded'
- $ref: '#/components/schemas/FeedbackCollision'
discriminator:
propertyName: error_feedback_name
error_index:
type: integer
ConfiguredPoseInverseFailedResponse:
title: ConfiguredPoseInverseFailedResponse
type: object
required:
- joint_positions
properties:
joint_positions:
$ref: '#/components/schemas/DoubleArrayList'
feedbacks:
type: array
items:
$ref: '#/components/schemas/InverseFeedbackAtIndex'
ConfiguredPoseInverseResponse:
title: ConfiguredPoseInverseResponse
type: object
required:
- response
properties:
response:
oneOf:
- $ref: '#/components/schemas/DoubleArrayList'
- $ref: '#/components/schemas/ConfiguredPoseInverseFailedResponse'
ConfiguredPoseInverse422Response:
title: ConfiguredPoseInverse422Response
type: object
properties:
detail:
type: array
title: Detail
items:
$ref: '#/components/schemas/ValidationError'
AbbPose:
title: AbbPose
description: ABB pose with position (`x`, `y`, `z`) and quaternion orientation (`q1`, `q2`, `q3`, `q4`).
type: object
required:
- x
- 'y'
- z
- q1
- q2
- q3
- q4
properties:
x:
type: number
format: double
'y':
type: number
format: double
z:
type: number
format: double
q1:
type: number
format: double
q2:
type: number
format: double
q3:
type: number
format: double
q4:
type: number
format: double
AbbConfdata:
title: AbbConfdata
type: object
required:
- cf1
- cf4
- cf6
- cfx
properties:
cf1:
type: integer
description: |
Quadrant number for axis 1. Quadrant n means the axis angle
is in the interval [n*90deg, (n+1)*90deg). Can be negative.
cf4:
type: integer
description: |
Quadrant number for axis 4. Quadrant n means the axis angle
is in the interval [n*90deg, (n+1)*90deg). Can be negative.
cf6:
type: integer
description: |
Quadrant number for axis 6. Quadrant n means the axis angle
is in the interval [n*90deg, (n+1)*90deg). Can be negative.
cfx:
type: integer
minimum: 0
maximum: 7
description: |
3 branch bits composing the kinematic configuration:
- Bit 0 (Wrist): 0 = positive axis 5 angle `NO_FLIP`, 1 = negative `FLIP`.
- Bit 1 (Elbow): 0 = in front of lower arm `DOWN`, 1 = behind `UP`.
- Bit 2 (Shoulder): 0 = in front of axis 1 `LEFT`, 1 = behind `RIGHT`.
AbbConfiguredPose:
title: AbbConfiguredPose
description: A pose combined with ABB kinematic configuration data, `confdata`.
type: object
required:
- pose
- confdata
properties:
pose:
$ref: '#/components/schemas/AbbPose'
confdata:
$ref: '#/components/schemas/AbbConfdata'
AbbConfiguredPoseList:
type: array
items:
$ref: '#/components/schemas/AbbConfiguredPose'
KukaPose:
title: KukaPose
description: |
KUKA E6POS position and Euler ZYX intrinsic orientation.
Position in [mm], orientation as A (Z), B (Y'), C (X'') in degrees.
type: object
required:
- x
- 'y'
- z
- a
- b
- c
properties:
x:
type: number
format: double
description: X position in mm.
'y':
type: number
format: double
description: Y position in mm.
z:
type: number
format: double
description: Z position in mm.
a:
type: number
format: double
description: Rotation around Z axis in degrees.
b:
type: number
format: double
description: Rotation around Y' axis in degrees.
c:
type: number
format: double
description: Rotation around X'' axis in degrees.
KukaStatusAndTurnBits:
title: KukaStatusAndTurnBits
description: |
KUKA status/turn kinematic configuration bits.
S (3-bit status): Encodes shoulder, elbow, and wrist configuration.
T (6-bit turn): Encodes axis angle signs for A1-A6.
type: object
required:
- s
- t
properties:
s:
type: integer
minimum: 0
maximum: 7
description: |
3 status bits:
- Bit 0 (Shoulder): 0 = `LEFT`, 1 = `RIGHT`
- Bit 1 (Elbow): 0 = `UP`, 1 = `DOWN`
- Bit 2 (Wrist): 0 = `NO_FLIP`, 1 = `FLIP`
t:
type: integer
minimum: 0
maximum: 63
description: |
6 turn bits:
- Bits 0-5: Encode the sign of axes A1-A6.
- Bit N = 0: axis N+1 angle >= 0 deg
- Bit N = 1: axis N+1 angle < 0 deg
KukaConfiguredPose:
title: KukaConfiguredPose
description: A KUKA E6POS pose combined with status/turn kinematic configuration data.
type: object
required:
- pose
- status_and_turn_bits
properties:
pose:
$ref: '#/components/schemas/KukaPose'
status_and_turn_bits:
$ref: '#/components/schemas/KukaStatusAndTurnBits'
KukaConfiguredPoseList:
type: array
items:
$ref: '#/components/schemas/KukaConfiguredPose'
ConvertVendorConfiguredPoseRequest:
type: object
required:
- vendor_configured_poses
properties:
vendor_configured_poses:
oneOf:
- $ref: '#/components/schemas/AbbConfiguredPoseList'
- $ref: '#/components/schemas/KukaConfiguredPoseList'
ConvertVendorConfiguredPose422Response:
title: ConvertVendorConfiguredPose422Response
type: object
properties:
detail:
type: array
title: Detail
items:
$ref: '#/components/schemas/ValidationError'
ForwardKinematicsRequest:
title: ForwardKinematicsRequest
type: object
required:
- motion_group_model
- joint_positions
properties:
motion_group_model:
$ref: '#/components/schemas/MotionGroupModel'
joint_positions:
type: array
items:
$ref: '#/components/schemas/DoubleArray'
description: |
List of joint positions for which TCP poses are computed.
The unit depends on the type of joint: For revolute joints, the angle is given in [rad]; for prismatic joints, the displacement is given in [mm].
tcp_offset:
$ref: '#/components/schemas/Pose'
mounting:
$ref: '#/components/schemas/Pose'
description: Offset from the world frame to the motion group base.
ForwardKinematicsResponse:
title: ForwardKinematicsResponse
type: object
required:
- tcp_poses
properties:
tcp_poses:
type: array
items:
$ref: '#/components/schemas/Pose'
description: |
List of computed TCP poses corresponding to the input joint positions.
ForwardKinematicsValidationError:
allOf:
- $ref: '#/components/schemas/ValidationError'
- type: object
properties:
data:
$ref: '#/components/schemas/ErrorInvalidJointCount'
title: ForwardKinematicsValidationError
ForwardKinematics422Response:
properties:
detail:
items:
$ref: '#/components/schemas/ForwardKinematicsValidationError'
type: array
title: Detail
type: object
title: ForwardKinematics422Response
ProjectJointPositionDirectionConstraintRequest:
title: ProjectJointPositionDirectionConstraintRequest
type: object
required:
- motion_group_model
- joint_positions
- constraint
properties:
motion_group_model:
$ref: '#/components/schemas/MotionGroupModel'
joint_positions:
type: array
items:
$ref: '#/components/schemas/DoubleArray'
description: |
List of joint positions for which the direction constraint is applied.
constraint:
$ref: '#/components/schemas/DirectionConstraint'
tcp_offset:
$ref: '#/components/schemas/Pose'
mounting:
$ref: '#/components/schemas/Pose'
description: Offset from the world frame to the motion group base.
joint_position_limits:
$ref: '#/components/schemas/JointPositionLimits'
collision_setups:
$ref: '#/components/schemas/CollisionSetups'
ProjectJointPositionDirectionConstraintResponse:
title: ProjectJointPositionDirectionConstraintResponse
type: object
required:
- projected_joint_positions
properties:
projected_joint_positions:
type: array
items:
oneOf:
- $ref: '#/components/schemas/DoubleArray'
- enum:
- null
description: |
List of projected joint positions. If the resulting joint position is in collision or violates joint limits, the corresponding entry is null.
ProjectJointPositionDirectionConstraintValidationError:
allOf:
- $ref: '#/components/schemas/ValidationError'
- type: object
properties:
data:
oneOf:
- $ref: '#/components/schemas/ErrorDirectionConstraintNotNormalized'
- $ref: '#/components/schemas/ErrorInvalidJointCount'
- $ref: '#/components/schemas/ErrorUnsupportedOperation'
discriminator:
propertyName: error_feedback_name
description: |
Optional data further specifying the validation error.
title: ProjectJointPositionDirectionConstraintValidationError
ProjectJointPositionDirectionConstraint422Response:
properties:
detail:
items:
$ref: '#/components/schemas/ProjectJointPositionDirectionConstraintValidationError'
type: array
title: Detail
type: object
title: ProjectJointPositionDirectionConstraint422Response
ListTrajectoriesResponse:
type: object
properties:
trajectories:
type: array
items:
type: string
description: |
Identifiers of trajectories which are currently cached.
Use [addTrajectory](#/operations/addTrajectory) to add a new trajectory. Adding trajectories is necessary to execute them.
Trajectories are removed if the corresponding motion group or controller disconnects.
AddTrajectoryRequest:
type: object
required:
- motion_group
- trajectory
properties:
motion_group:
type: string
description: Unique identifier of the motion group the trajectory is planned for.
trajectory:
$ref: '#/components/schemas/JointTrajectory'
description: |
The trajectory consisting of a list of joint positions and
an equal number of corresponding timestamps.
tcp:
type: string
description: Unique identifier of the tool the trajectory is planned for.
TcpRequiredError:
title: TcpRequiredError
type: object
required:
- kind
properties:
kind:
type: string
enum:
- TcpRequiredError
x-is-discriminator: true
tcp_missing:
properties: {}
description: Requested motion group requires TCP to be defined.
InconsistentTrajectorySizeError:
title: InconsistentTrajectorySizeError
type: object
required:
- kind
properties:
kind:
type: string
enum:
- InconsistentTrajectorySizeError
x-is-discriminator: true
inconsistent_trajectory_size:
type: object
properties:
joint_position_size:
type: integer
format: int32
times_size:
type: integer
format: int32
locations_size:
type: integer
format: int32
description: |
Indicates that the trajectory contains an inconsistent number of joint positions, times, or locations.
JointLimitExceededError:
title: JointLimitExceededError
type: object
required:
- kind
properties:
kind:
type: string
enum:
- JointLimitExceededError
x-is-discriminator: true
joint_limit_exceeded:
$ref: '#/components/schemas/FeedbackJointLimitExceeded'
CollisionError:
title: CollisionError
type: object
required:
- kind
properties:
kind:
type: string
enum:
- CollisionError
x-is-discriminator: true
collision:
$ref: '#/components/schemas/FeedbackCollision'
TorqueExceededError:
title: TorqueExceededError
type: object
required:
- kind
properties:
kind:
type: string
enum:
- TorqueExceededError
x-is-discriminator: true
torque_exceeded:
type: object
properties:
torque_value:
type: number
format: double
description: |
The torque value that was exceeded.
torque_limit:
type: number
format: double
description: |
The value of the torque limit that was exceeded.
InvalidDofError:
title: InvalidDofError
type: object
required:
- kind
properties:
kind:
type: string
enum:
- InvalidDofError
x-is-discriminator: true
invalid_dof:
type: object
properties:
valid_dof:
type: integer
format: int32
description: |
The valid degrees of freedom for the motion group.
joint_position:
type: array
items:
type: number
format: double
description: The joint position that is out of its limits.
NanValueError:
title: NanValueError
type: object
required:
- kind
properties:
kind:
type: string
enum:
- NanValueError
x-is-discriminator: true
nan_value:
type: object
properties:
joint_position:
type: array
items:
type: number
format: double
description: The joint position that is out of its limits.
description: Requested joint position contains NaN values.
AddTrajectoryError:
title: AddTrajectoryError
type: object
properties:
message:
type: string
location:
$ref: '#/components/schemas/Location'
description: |
Location on trajectory where the error occurred.
data:
oneOf:
- $ref: '#/components/schemas/TcpRequiredError'
- $ref: '#/components/schemas/InconsistentTrajectorySizeError'
- $ref: '#/components/schemas/JointLimitExceededError'
- $ref: '#/components/schemas/CollisionError'
- $ref: '#/components/schemas/TorqueExceededError'
- $ref: '#/components/schemas/InvalidDofError'
- $ref: '#/components/schemas/NanValueError'
discriminator:
propertyName: kind
mapping:
TcpRequiredError: '#/components/schemas/TcpRequiredError'
InconsistentTrajectorySizeError: '#/components/schemas/InconsistentTrajectorySizeError'
JointLimitExceededError: '#/components/schemas/JointLimitExceededError'
CollisionError: '#/components/schemas/CollisionError'
TorqueExceededError: '#/components/schemas/TorqueExceededError'
InvalidDofError: '#/components/schemas/InvalidDofError'
NanValueError: '#/components/schemas/NanValueError'
AddTrajectoryResponse:
title: AddTrajectoryResponse
type: object
properties:
trajectory:
type: string
description: |
The unique identifier of the trajectory. Use this identifier to execute the trajectory with the [executeTrajectory](#/operations/executeTrajectory) endpoint.
error:
$ref: '#/components/schemas/AddTrajectoryError'
description: |
Always check this field first. If this field is present, the trajectory has an error and is only partially or not executable.
description: |
The response signals if the trajectory is valid or faulty, resulting in an executable, partially executable or non-executable state.
- valid trajectory: response contains only the unique identifier for the trajectory
- trajectory has error on path: response contains the unique identifier for the trajectory and information about the failure. It is executable up to the point of failure.
- trajectory has error at start or invalid data: response contains only information about the failure.
To execute the trajectory, use the unique identifier for calling [executeTrajectory](#/operations/executeTrajectory).
If you want to validate your trajectory before execution, execute it with a virtual motion group and check the state in the response stream of [executeTrajectory](#/operations/executeTrajectory).
GetTrajectoryResponse:
type: object
required:
- motion_group
- trajectory
- tcp
properties:
motion_group:
type: string
description: Unique identifier of the motion group the trajectory is planned for.
trajectory:
$ref: '#/components/schemas/JointTrajectory'
description: |
The trajectory consisting of a list of joint positions and
an equal number of corresponding timestamps.
tcp:
type: string
description: Unique identifier of the tool the trajectory is planned for.
TrajectoryId:
title: TrajectoryId
required:
- id
- message_type
type: object
properties:
message_type:
type: string
enum:
- TrajectoryId
description: |
Type specifier for server, set automatically.
id:
type: string
description: |
The identifier of the trajectory which was returned by the [addTrajectory](#/operations/addTrajectory) endpoint.
TrajectoryData:
title: TrajectoryData
required:
- data
- message_type
type: object
properties:
message_type:
type: string
enum:
- TrajectoryData
description: |
Type specifier for server, set automatically.
motion_group:
type: string
description: Identifier of the motion-group.
data:
$ref: '#/components/schemas/JointTrajectory'
description: |
The trajectory consisting of a list of joint positions and
an equal number of corresponding timestamps.
tcp:
type: string
description: Unique identifier of the tool the trajectory is planned for.
InitializeMovementRequest:
title: InitializeMovementRequest
required:
- message_type
- trajectory
type: object
properties:
message_type:
type: string
enum:
- InitializeMovementRequest
description: |
Type specifier for server, set automatically.
trajectory:
oneOf:
- $ref: '#/components/schemas/TrajectoryId'
- $ref: '#/components/schemas/TrajectoryData'
discriminator:
propertyName: message_type
description: |
The trajectory which should be executed and locked to the connection.
initial_location:
$ref: '#/components/schemas/Location'
description: |
Location on trajectory where the execution will start.
Defaults to 0.0, start of the trajectory.
ATTENTION: The robot has to be at the position of the initial location when initializing the movement.
If not, an error is returned.
response_coordinate_system:
type: string
description: |
Unique identifier addressing a coordinate system to which the responses are transformed.
If not set, world coordinate system is used.
ignore_controller_limits:
type: boolean
default: false
description: |
If the flag is `true`, controller limits are ignored. Changes to controller limits are not applied to the trajectory.
description: |
Sets up connection by locking a trajectory for execution. The robot controller mode is set to control mode.
ATTENTION: This request has to be sent before any StartMovementRequest is sent.
If initializing the movement was successful, no further movements can be initialized. To execute another trajectory, another connection has to be established.
Direction:
format: enum
type: string
enum:
- DIRECTION_FORWARD
- DIRECTION_BACKWARD
default: DIRECTION_FORWARD
description: |
The direction in which the trajectory is executed. Default: Forward.
IOOrigin:
enum:
- CONTROLLER
- BUS_IO
type: string
format: enum
description: |
States the source of the input/output signal.
SetIO:
required:
- io
- location
- io_origin
type: object
properties:
io:
$ref: '#/components/schemas/IOValue'
location:
type: number
description: The location on the trajectory where the input/output should be set.
format: double
io_origin:
$ref: '#/components/schemas/IOOrigin'
description: Defines an input/output that should be set upon reaching a specified location on the trajectory.
StartOnIO:
required:
- io
- comparator
- io_origin
type: object
properties:
io:
$ref: '#/components/schemas/IOValue'
comparator:
$ref: '#/components/schemas/Comparator'
description: |
Comparator for the comparison of two values.
Use the measured I/O as the base value (a) and the expected input/output value as the comparator (b): e.g., a > b.
io_origin:
$ref: '#/components/schemas/IOOrigin'
description: Defines an input/output that the motion should wait for to start the execution.
PauseOnIO:
required:
- io
- comparator
- io_origin
type: object
properties:
io:
$ref: '#/components/schemas/IOValue'
comparator:
$ref: '#/components/schemas/Comparator'
description: |
Comparator for the comparison of two values.
Use the measured I/O as the base value (a) and the expected input/output value as the comparator (b): e.g., a > b.
io_origin:
$ref: '#/components/schemas/IOOrigin'
description: Defines an input/output that the motion will be paused for. The motion will stop gracefully on path.
StartMovementRequest:
title: StartMovementRequest
type: object
required:
- message_type
properties:
message_type:
type: string
enum:
- StartMovementRequest
description: |
Type specifier for server, set automatically.
direction:
$ref: '#/components/schemas/Direction'
target_location:
$ref: '#/components/schemas/Location'
description: |
The target location to which the motion group moves along the trajectory to.
If `direction` and `target_location` are both specified, target location takes precedence.
If neither is specified, the default is `DIRECTION_FORWARD`.
set_outputs:
type: array
items:
$ref: '#/components/schemas/SetIO'
description: |
Attaches a list of output commands to the trajectory. The outputs are set to the specified values right after the specified location was reached.
If the specified location is located before the start location (forward direction: value is smaller, backward direction: value is bigger), the output is not set.
start_on_io:
$ref: '#/components/schemas/StartOnIO'
description: |
Defines an input/output that is listened to before the movement. Execution starts if the defined comparator evaluates to `true`.
pause_on_io:
$ref: '#/components/schemas/PauseOnIO'
description: |
Defines an input/output that is listened to during the movement. Execution pauses if the defined comparator evaluates to `true`.
description: |
Moves the motion group along a trajectory, added via [planTrajectory](#/operations/planTrajectory) or [planMotion](#/operations/planMotion).
Trajectories can be executed forwards or backwards("in reverse").
Pause the execution with PauseMovementRequest.
Resume execution with StartMovementRequest.
Precondition: To start execution, the motion group must be located at the trajectory's start location specified in InitializeMovementRequest.
PauseMovementRequest:
title: PauseMovementRequest
type: object
required:
- message_type
properties:
message_type:
type: string
enum:
- PauseMovementRequest
description: |
Type specifier for server, set automatically.
description: |
Request to pause the movement execution. Movement pauses as soon as a [Standstill](Standstill.yaml) is sent back to the client.
Resume movement with StartMovementRequest.
PlaybackSpeedRequest:
title: PlaybackSpeedRequest
required:
- message_type
- playback_speed_in_percent
type: object
properties:
message_type:
type: string
enum:
- PlaybackSpeedRequest
description: |
Type specifier for server, set automatically.
playback_speed_in_percent:
type: integer
format: int32
minimum: 0
maximum: 100
description: |
Sets velocity for executed movements of the trajectory, in percent. 100% means that the motion group moves as
fast as possible without violating any planning and motion group limits. Setting this value does not affect the overall shape of the velocity profile.
The velocity profile of the trajectory is scaled down by the same factor. Therefore, this should only be used for teaching and trajectory
evaluation purposes. To maintain a specific velocity, set the respective limits when planning the trajectory.
description: |
Sets velocity for executed movements of the motion, in percent. Send after initializing the connection with InitializeMovementRequest.
ExecuteTrajectoryRequest:
title: ExecuteTrajectoryRequest
type: object
oneOf:
- $ref: '#/components/schemas/InitializeMovementRequest'
- $ref: '#/components/schemas/StartMovementRequest'
- $ref: '#/components/schemas/PauseMovementRequest'
- $ref: '#/components/schemas/PlaybackSpeedRequest'
discriminator:
propertyName: message_type
InitializeMovementResponse:
title: InitializeMovementResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid InitializeMovementRequest.
add_trajectory_error:
$ref: '#/components/schemas/AddTrajectoryError'
description: |
Error can occur if joint trajectory was added by InitializeMovementRequest and the trajectory is invalid.
kind:
type: string
enum:
- INITIALIZE_RECEIVED
description: |
Response for InitializeMovementRequest message.
StartMovementResponse:
title: StartMovementResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid StartMovementResquest.
kind:
type: string
enum:
- START_RECEIVED
description: |
Acknowledgment for StartMovementRequest message.
ATTENTION: No confirmation that the movement was started. Confirmation that the StartMovementRequest was received and is processed.
Fields `execute` and `standstill` of response of [streamMotionGroupState](#/operations/streamMotionGroupState) signal start of movement execution.
PauseMovementResponse:
title: PauseMovementResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid PauseMovementRequest.
kind:
type: string
enum:
- PAUSE_RECEIVED
description: |
Acknowledgment for PauseMovementRequest message.
ATTENTION: No confirmation that the movement was paused. Confirmation that the PauseMovementRequest was received and is processed.
End of movement execution is signalled by [state stream](#/operations/streamMotionGroupState) response.
See TrajectoryDetails of details in execute.
PlaybackSpeedResponse:
title: PlaybackSpeedResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid PlaybackSpeedRequest.
kind:
type: string
enum:
- PLAYBACK_SPEED_RECEIVED
description: |
Acknowledgment for PlaybackSpeedRequest message.
MovementErrorResponse:
title: MovementErrorResponse
type: object
required:
- message
- kind
properties:
message:
type: string
description: Detailed error message describing the issue encountered during movement execution.
kind:
type: string
enum:
- MOTION_ERROR
description: |
Error message in case an error occurs during movement execution.
ExecuteTrajectoryResponse:
title: ExecuteTrajectoryResponse
type: object
oneOf:
- $ref: '#/components/schemas/InitializeMovementResponse'
- $ref: '#/components/schemas/StartMovementResponse'
- $ref: '#/components/schemas/PauseMovementResponse'
- $ref: '#/components/schemas/PlaybackSpeedResponse'
- $ref: '#/components/schemas/MovementErrorResponse'
discriminator:
propertyName: kind
mapping:
INITIALIZE_RECEIVED: '#/components/schemas/InitializeMovementResponse'
START_RECEIVED: '#/components/schemas/StartMovementResponse'
PAUSE_RECEIVED: '#/components/schemas/PauseMovementResponse'
PLAYBACK_SPEED_RECEIVED: '#/components/schemas/PlaybackSpeedResponse'
MOTION_ERROR: '#/components/schemas/MovementErrorResponse'
InitializeJoggingRequest:
title: InitializeJoggingRequest
type: object
required:
- message_type
- motion_group
properties:
message_type:
type: string
enum:
- InitializeJoggingRequest
description: |
Type specifier for server, set automatically.
motion_group:
type: string
description: Identifier of the motion group.
tcp:
type: string
description: |
Identifier of the tool. Required for robots (all limits, including TCP limits, are respected at all times regardless of the motion). Not required for external axes.
description: Send this message to start jogging a motion group.
JointVelocityRequest:
title: JointVelocityRequest
type: object
required:
- message_type
- velocity
properties:
message_type:
type: string
enum:
- JointVelocityRequest
description: Type specifier for server, set automatically.
velocity:
$ref: '#/components/schemas/Joints'
description: in [rad/s]
description: Sets target joint velocities for jogging a motion group.
TcpVelocityRequest:
title: TcpVelocityRequest
type: object
required:
- message_type
- translation
- rotation
properties:
message_type:
type: string
enum:
- TcpVelocityRequest
description: |
Type specifier for server, set automatically.
translation:
$ref: '#/components/schemas/Vector3d'
rotation:
$ref: '#/components/schemas/Vector3d'
use_tool_coordinate_system:
type: boolean
default: false
description: |
If true, TCP velocities are interpreted in the tool coordinate system, specified by the TCP.
If false, TCP velocities are interpreted in the world coordinate system.
description: |
Sets target TCP velocities for jogging a motion group.
The motion group needs to have an inverse kinematic solver to be jogged by TCP velocities.
Check `supports_inverse_kinematics` field in response of [listController](#/operations/listController) for the motion group.
PauseJoggingRequest:
title: PauseJoggingRequest
type: object
required:
- message_type
properties:
message_type:
type: string
enum:
- PauseJoggingRequest
description: |
Type specifier for server, set automatically.
description: |
Request to pause jogging. If successful, `execute` jogging state in [MotionGroupState](MotionGroupState.yaml) is set to `PAUSED_BY_USER`.
ExecuteJoggingRequest:
title: ExecuteJoggingRequest
type: object
oneOf:
- $ref: '#/components/schemas/InitializeJoggingRequest'
- $ref: '#/components/schemas/JointVelocityRequest'
- $ref: '#/components/schemas/TcpVelocityRequest'
- $ref: '#/components/schemas/PauseJoggingRequest'
discriminator:
propertyName: message_type
InitializeJoggingResponse:
title: InitializeJoggingResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid InitializeJoggingRequest.
kind:
type: string
enum:
- INITIALIZE_RECEIVED
description: |
Acknowledgment to an InitializeJoggingRequest.
PauseJoggingResponse:
title: PauseJoggingResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid PauseJoggingRequest.
kind:
type: string
enum:
- PAUSE_RECEIVED
description: |
Acknowledgment to a PauseJoggingRequest.
TcpVelocityResponse:
title: TcpVelocityResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid TcpVelocityRequest.
kind:
type: string
enum:
- TCP_VELOCITY_RECEIVED
description: |
Acknowledgment to a TcpVelocityRequest.
JointVelocityResponse:
title: JointVelocityResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid JointVelocityRequest.
kind:
type: string
enum:
- JOINT_VELOCITY_RECEIVED
description: |
Acknowledgment to a JointVelocityRequest.
ExecuteJoggingResponse:
title: ExecuteJoggingResponse
type: object
oneOf:
- $ref: '#/components/schemas/InitializeJoggingResponse'
- $ref: '#/components/schemas/PauseJoggingResponse'
- $ref: '#/components/schemas/TcpVelocityResponse'
- $ref: '#/components/schemas/JointVelocityResponse'
- $ref: '#/components/schemas/MovementErrorResponse'
discriminator:
propertyName: kind
mapping:
INITIALIZE_RECEIVED: '#/components/schemas/InitializeJoggingResponse'
PAUSE_RECEIVED: '#/components/schemas/PauseJoggingResponse'
TCP_VELOCITY_RECEIVED: '#/components/schemas/TcpVelocityResponse'
JOINT_VELOCITY_RECEIVED: '#/components/schemas/JointVelocityResponse'
MOTION_ERROR: '#/components/schemas/MovementErrorResponse'
JointWaypoint:
title: JointWaypoint
type: object
required:
- timestamp
- joints
properties:
timestamp:
type: integer
format: int64
description: Time since session start for when this waypoint should be reached [ms].
joints:
$ref: '#/components/schemas/Joints'
description: Joint positions for this waypoint [rad].
description: |
A waypoint in joint space for jogging.
> **NOTE**
>
> This type is experimental and its behavior may change in future releases.
JointWaypointsRequest:
title: JointWaypointsRequest
type: object
required:
- message_type
- waypoints
properties:
message_type:
type: string
enum:
- JointWaypointsRequest
description: |
Type specifier for server, set automatically.
waypoints:
type: array
items:
$ref: '#/components/schemas/JointWaypoint'
description: |
List of joint waypoints.
description: |
Adds joint waypoints to the jogging queue. The robot will try to move through each waypoint by best effort.
Existing waypoints in the queue that are older than the first new timestamp will be removed.
The first message of this kind starts an internal clock.
The current session timestamp is reported in `execute.details.jogger_session_timestamp_ms` of the [streamRobotControllerState](#/operations/streamRobotControllerState) endpoint.
This can be used for realtime action chunk streaming, e.g., from a Vision-Language-Action (VLA) model.
> **NOTE**
>
> This jogging type is experimental and its behavior may change in future releases.
PoseWaypoint:
title: PoseWaypoint
type: object
required:
- timestamp
- pose
properties:
timestamp:
type: integer
format: int64
description: Time since session start for when this waypoint should be reached [ms].
pose:
$ref: '#/components/schemas/Pose'
description: Cartesian pose for this waypoint.
description: |
A waypoint in Cartesian space for jogging.
> **NOTE**
>
> This type is experimental and its behavior may change in future releases.
PoseWaypointsRequest:
title: PoseWaypointsRequest
type: object
required:
- message_type
- waypoints
properties:
message_type:
type: string
enum:
- PoseWaypointsRequest
description: |
Type specifier for server, set automatically.
waypoints:
type: array
items:
$ref: '#/components/schemas/PoseWaypoint'
description: |
List of pose waypoints.
description: |
Adds pose waypoints to the jogging queue. The robot will try to move through each waypoint by best effort.
Existing waypoints in the queue that are older than the first new timestamp will be removed.
The first message of this kind starts an internal clock.
The current session timestamp is reported in `execute.details.jogger_session_timestamp_ms` of the [streamRobotControllerState](#/operations/streamRobotControllerState) endpoint.
This can be used for realtime action chunk streaming, e.g., from a Vision-Language-Action (VLA) model.
> **NOTE**
>
> This jogging type is experimental and its behavior may change in future releases.
ExecuteWaypointJoggingRequest:
title: ExecuteWaypointJoggingRequest
type: object
oneOf:
- $ref: '#/components/schemas/InitializeJoggingRequest'
- $ref: '#/components/schemas/JointWaypointsRequest'
- $ref: '#/components/schemas/PoseWaypointsRequest'
- $ref: '#/components/schemas/PauseJoggingRequest'
discriminator:
propertyName: message_type
JointWaypointsResponse:
title: JointWaypointsResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid JointWaypointsRequest.
kind:
type: string
enum:
- JOINT_WAYPOINTS_RECEIVED
description: |
Acknowledgment to a JointWaypointsRequest.
PoseWaypointsResponse:
title: PoseWaypointsResponse
type: object
required:
- kind
properties:
message:
type: string
description: Error message in case of invalid PoseWaypointsRequest.
kind:
type: string
enum:
- POSE_WAYPOINTS_RECEIVED
description: |
Acknowledgment to a PoseWaypointsRequest.
ExecuteWaypointJoggingResponse:
title: ExecuteWaypointJoggingResponse
type: object
oneOf:
- $ref: '#/components/schemas/InitializeJoggingResponse'
- $ref: '#/components/schemas/PauseJoggingResponse'
- $ref: '#/components/schemas/JointWaypointsResponse'
- $ref: '#/components/schemas/PoseWaypointsResponse'
- $ref: '#/components/schemas/MovementErrorResponse'
discriminator:
propertyName: kind
mapping:
INITIALIZE_RECEIVED: '#/components/schemas/InitializeJoggingResponse'
PAUSE_RECEIVED: '#/components/schemas/PauseJoggingResponse'
JOINT_WAYPOINTS_RECEIVED: '#/components/schemas/JointWaypointsResponse'
POSE_WAYPOINTS_RECEIVED: '#/components/schemas/PoseWaypointsResponse'
MOTION_ERROR: '#/components/schemas/MovementErrorResponse'
Program:
title: Program
description: A program is a collection of instructions that are executed in the robot cell.
type: object
properties:
program:
title: Unique program identifier
type: string
example: my_program
pattern: ^[a-zA-Z0-9_-]+$
minLength: 1
maxLength: 255
name:
title: Program name
type: string
description:
title: Program description
type: string
app:
title: The app containing the program.
type: string
input_schema:
title: Program input json schema
type: object
preconditions:
title: Preconditions before the program can be started
type: object
required:
- program
- app
ProgramStartRequest:
title: ProgramStartRequest
description: The state of a program run.
type: object
properties:
arguments:
type: object
default: {}
description: The arguments to pass to the program.
required:
- arguments
ProgramRunState:
title: ProgramRunState
description: The state of a program run.
type: string
format: enum
enum:
- PREPARING
- RUNNING
- COMPLETED
- FAILED
- STOPPED
ProgramRun:
title: ProgramRun
description: Holds the state of a program run.
type: object
properties:
run:
title: Run Id
description: Unique identifier of the program run
type: string
program:
title: Program Id
description: Unique identifier of the program
type: string
app:
title: App Id
description: Identifier of the app that produced the program run
type: string
state:
title: State
description: State of the program run
$ref: '#/components/schemas/ProgramRunState'
logs:
title: Logs
description: Logs of the program run
type: string
stdout:
title: Stdout
description: Stdout of the program run
type: string
stderr:
title: Stderr
description: Stderr of the program run
type: string
error:
title: Error
description: Error message of the program run, if any
type: string
traceback:
title: Traceback
description: Traceback of the program run, if any
type: string
start_time:
title: Start Time
description: Start time of the program run in RFC3339 format
type: string
format: date-time
end_time:
title: End Time
description: End time of the program run in RFC3339 format
type: string
format: date-time
input_data:
title: Input Data
description: Input data of the program run
type: object
required:
- run
- program
- state
ValidationError-2:
title: ValidationError
description: A validation error of a program.
type: object
properties:
loc:
items:
type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
required:
- loc
- msg
- type
HTTPValidationError:
title: HTTPValidationError
type: object
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError-2'
type: array
title: Detail
CloudConnectionRequest:
type: object
properties:
cloud_hostname:
type: string
example: novacloud.dev.wandelbots.io
token:
type: string
description: Auth token of the user registering the instance. This must be a valid oauth token granting access to the NOVA Cloud API.
example: eyJ0eXAiOiJKV1QiLCJhbGciOiJ...
instance_name:
type: string
description: Human-readable name to identify the instance in the fleet manager dashboard.
example: Leafnode Test
instance_url:
type: string
format: uri
description: Optional local network url for the instance, used to link users directly from the fleet manager. If not specified, will be inferred from the request URL.
example: http://nova.instance
required:
- cloud_hostname
- token
- instance_name
example:
cloud_hostname: novacloud.dev.wandelbots.io
token: eyJ0eXAiOiJKV1QiLCJhbGciOiJ...
instance_name: Leafnode Test
CloudRegistrationSuccessResponse:
type: object
properties:
instance:
type: integer
minimum: 1
description: Instance identifier received from cloud registration
required:
- instance
example:
instance: 123
title: CloudRegistrationSuccessResponse
ZodValidationError:
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- validation_error
message:
type: string
description: Human-readable summary of the validation errors
details:
type: array
items:
type: object
properties:
code:
type: string
path:
type: array
items:
oneOf:
- type: string
- type: number
message:
type: string
required:
- code
- path
- message
description: Array of Zod issue objects describing the validation errors
required:
- code
- message
- details
required:
- error
CloudConnectionErrorInvalidToken:
type: object
properties:
code:
type: string
enum:
- invalid_cloud_token
message:
type: string
example: The provided NOVA Cloud oauth token is invalid.
details:
type: object
properties:
cloud_response:
type: object
properties:
status:
type: integer
headers: {}
body:
type: string
required:
- status
- body
required:
- cloud_response
required:
- code
- message
- details
title: CloudConnectionErrorInvalidToken
CloudConnectionErrorUnexpectedResponse:
type: object
properties:
code:
type: string
enum:
- unexpected_cloud_response
message:
type: string
example: The NOVA Cloud API returned an unexpected response.
details:
type: object
properties:
cloud_response:
type: object
properties:
status:
type: integer
headers:
type: object
additionalProperties: {}
body:
type: string
required:
- status
- headers
- body
required:
- cloud_response
required:
- code
- message
- details
title: CloudConnectionErrorUnexpectedResponse
CloudConnectionErrorNatsFailed:
type: object
properties:
code:
type: string
enum:
- nats_connection_failed
message:
type: string
example: Failed to connect to the NOVA Cloud NATS server with the provided configuration.
details:
type: object
properties:
nats_server_url:
type: string
nats_error_message:
type: string
required:
- nats_server_url
- nats_error_message
required:
- code
- message
- details
title: CloudConnectionErrorNatsFailed
CloudConnectionErrorLeafnodeRestartTimeout:
type: object
properties:
code:
type: string
enum:
- leafnode_restart_timeout
message:
type: string
example: Timeout waiting for NATS pod to restart
required:
- code
- message
title: CloudConnectionErrorLeafnodeRestartTimeout
CloudConnectionErrorLeafnodeConnectionError:
type: object
properties:
code:
type: string
enum:
- leafnode_connection_error
message:
type: string
example: 'NATS leafnode connection error: Read Error - Account: NOVA_REMOTE'
details:
type: object
properties:
log_line:
type: string
example: '2026/02/11 14:30:58.988180 [INF] 10.20.128.16:443 - lid_ws:212 - Leafnode connection closed: Read Error - Account: NOVA_REMOTE'
required:
- log_line
required:
- code
- message
- details
title: CloudConnectionErrorLeafnodeConnectionError
CloudConnectionErrorLeafnodeConnectionTimeout:
type: object
properties:
code:
type: string
enum:
- leafnode_connection_timeout
message:
type: string
example: Timeout waiting for NATS leafnode connection log message to appear
required:
- code
- message
title: CloudConnectionErrorLeafnodeConnectionTimeout
CloudConnectionError:
type: object
properties:
error:
oneOf:
- $ref: '#/components/schemas/CloudConnectionErrorInvalidToken'
- $ref: '#/components/schemas/CloudConnectionErrorUnexpectedResponse'
- $ref: '#/components/schemas/CloudConnectionErrorNatsFailed'
- $ref: '#/components/schemas/CloudConnectionErrorLeafnodeRestartTimeout'
- $ref: '#/components/schemas/CloudConnectionErrorLeafnodeConnectionError'
- $ref: '#/components/schemas/CloudConnectionErrorLeafnodeConnectionTimeout'
discriminator:
propertyName: code
mapping:
invalid_cloud_token: '#/components/schemas/CloudConnectionErrorInvalidToken'
unexpected_cloud_response: '#/components/schemas/CloudConnectionErrorUnexpectedResponse'
nats_connection_failed: '#/components/schemas/CloudConnectionErrorNatsFailed'
leafnode_restart_timeout: '#/components/schemas/CloudConnectionErrorLeafnodeRestartTimeout'
leafnode_connection_error: '#/components/schemas/CloudConnectionErrorLeafnodeConnectionError'
leafnode_connection_timeout: '#/components/schemas/CloudConnectionErrorLeafnodeConnectionTimeout'
required:
- error
CloudConfiguration:
type: object
properties:
cloud_hostname:
type: string
example: novacloud.dev.wandelbots.io
instance:
type: integer
minimum: 1
description: Instance identifier received from cloud registration
required:
- cloud_hostname
- instance
CloudConfigStatusConfigured:
type: object
properties:
status:
type: string
enum:
- configured
config:
$ref: '#/components/schemas/CloudConfiguration'
required:
- status
- config
title: CloudConfigStatusConfigured
CloudConfigStatusNotConfigured:
type: object
properties:
status:
type: string
enum:
- not_configured
required:
- status
title: CloudConfigStatusNotConfigured
CloudConfigStatus:
oneOf:
- $ref: '#/components/schemas/CloudConfigStatusConfigured'
- $ref: '#/components/schemas/CloudConfigStatusNotConfigured'
discriminator:
propertyName: status
mapping:
configured: '#/components/schemas/CloudConfigStatusConfigured'
not_configured: '#/components/schemas/CloudConfigStatusNotConfigured'
CloudDisconnectionStatusDisconnected:
type: object
properties:
status:
type: string
enum:
- disconnected
required:
- status
CloudDisconnectionStatusDisconnecting:
type: object
properties:
status:
type: string
enum:
- disconnecting
required:
- status
CloudDisconnectionError:
type: object
properties:
error:
$ref: '#/components/schemas/CloudConnectionErrorLeafnodeRestartTimeout'
required:
- error
MotionGroupInfo:
required:
- motion_group
- name
- dof
type: object
properties:
motion_group:
type: string
description: |
The unique identifier of the motion group. Use it to refer to the motion group in other calls.
name:
type: string
description: |
The name of the motion group for display purposes.
dof:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
The number of joints aka degrees of freedom in the motion group.
MotionGroupInfos:
type: array
items:
$ref: '#/components/schemas/MotionGroupInfo'
MotionGroupFromType:
title: Motion Group from Model
type: object
required:
- motion_group_model
- motion_group
properties:
motion_group:
type: string
description: Unique identifier for the motion group to be added.
motion_group_model:
$ref: '#/components/schemas/MotionGroupModel'
initial_joint_position:
type: string
description: |
Initial joint position of the added motion group.
Provides the joint position as a JSON array of float values in radians, where the array length
must match the robot's degrees of freedom (DOF), e.g., `"[0, 0, 0, 0, 0, 0]"` for a 6-DOF robot.
If the provided array length does not match the robot's DOF, the array will be adjusted; if it is longer, extra values will be truncated;
if it is shorter, missing values will be filled with zeros.
MotionGroupFromJson:
title: Motion Group from JSON
type: object
required:
- json_data
- extracted_motion_group_id
- motion_group
properties:
motion_group:
type: string
description: Unique identifier for the motion group to be added.
json_data:
type: string
description: |
Full JSON configuration of the virtual robot controller.
This can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](#/operations/getVirtualControllerConfiguration).
extracted_motion_group_id:
type: string
description: |
The identifier of the motion group that needs to be extracted from the provided JSON configuration.
initial_joint_position:
type: string
description: |
Initial joint position of the added motion group.
Provides the joint position as a JSON array of float values in radians, where the array length
must match the robot's degrees of freedom (DOF), e.g., `"[0, 0, 0, 0, 0, 0]"` for a 6-DOF robot.
If the provided array length does not match the robot's DOF, the array will be adjusted: if it is longer, extra values will be truncated;
if it is shorter, missing values will be filled with zeros.
AddVirtualControllerMotionGroupRequest:
title: AddVirtualControllerMotionGroupRequest
description: |
Request body wrapper for `addVirtualControllerMotionGroup`.
Allow callers to either reference a predefined motion group model or
upload a full JSON configuration that the backend extracts into a
motion group description.
oneOf:
- $ref: '#/components/schemas/MotionGroupFromType'
- $ref: '#/components/schemas/MotionGroupFromJson'
SafetyGeometrySphere:
title: SafetyGeometrySphere
type: object
required:
- center
- radius
properties:
center:
type: array
items:
type: number
format: double
minItems: 3
maxItems: 3
description: Center of the sphere as Vector3 [x, y, z] in [mm].
radius:
type: number
format: double
description: Radius of the sphere in [mm].
description: |
Sphere shape defined by a center point and a radius.
SafetyGeometryCapsule:
title: SafetyGeometryCapsule
type: object
required:
- top
- bottom
- radius
properties:
top:
type: array
items:
type: number
format: double
minItems: 3
maxItems: 3
description: Top endpoint of the capsule axis as Vector3 [x, y, z] in [mm].
bottom:
type: array
items:
type: number
format: double
minItems: 3
maxItems: 3
description: Bottom endpoint of the capsule axis as Vector3 [x, y, z] in [mm].
radius:
type: number
format: double
description: Radius of the capsule in [mm].
description: |
Capsule shape defined by two axis endpoints and a radius.
SafetyZonePose:
title: SafetyZonePose
type: object
required:
- x
- 'y'
- z
- qx
- qy
- qz
- qw
properties:
x:
type: number
format: double
description: X position in [mm].
'y':
type: number
format: double
description: Y position in [mm].
z:
type: number
format: double
description: Z position in [mm].
qx:
type: number
format: double
description: Quaternion X component.
qy:
type: number
format: double
description: Quaternion Y component.
qz:
type: number
format: double
description: Quaternion Z component.
qw:
type: number
format: double
description: Quaternion W component.
description: |
Pose with position (x, y, z) in [mm] and orientation as quaternion (qx, qy, qz, qw).
SafetyGeometryLozenge:
title: SafetyGeometryLozenge
type: object
required:
- center
- x_dimension
- y_dimension
- radius
properties:
center:
$ref: '#/components/schemas/SafetyZonePose'
description: Center pose of the lozenge (position and quaternion orientation).
x_dimension:
type: number
format: double
description: Dimension in x-direction in [mm].
y_dimension:
type: number
format: double
description: Dimension in y-direction in [mm].
radius:
type: number
format: double
description: Corner radius in [mm].
description: |
Lozenge shape defined by a center pose, two dimensions, and a corner radius.
SafetyGeometryBox:
title: SafetyGeometryBox
type: object
required:
- center
- neighbour
properties:
center:
type: array
items:
type: number
format: double
minItems: 3
maxItems: 3
description: Center of the box as Vector3 [x, y, z] in [mm].
neighbour:
type: array
items:
type: number
format: double
minItems: 9
maxItems: 9
description: |
Three edge midpoint coordinates as a flattened array [x1, y1, z1, x2, y2, z2, x3, y3, z3] in [mm].
Each triplet represents the midpoint of one of the three orthogonal box edges originating from the center.
Together, these points define an orthogonal basis that encodes the box’s orientation and size.
The distance from the center to each midpoint equals half of the corresponding edge length.
This representation supports arbitrary orientations, including left-handed coordinate systems used by robot controllers.
description: |
Box shape defined by a center point and three orthogonal edge midpoints.
This representation matches the robot controller's internal format and the `Box`
message in the virtual robot.
Unlike a parametric size-and-pose box definition, this format can represent all
box orientations produced by the robot controller, including left-handed
coordinate systems.
SafetyGeometryPrism:
title: SafetyGeometryPrism
type: object
required:
- point
- top
- bottom
properties:
point:
type: array
minItems: 6
items:
type: number
format: double
description: |
2D points defining the base polygon as a flattened array [x1, y1, x2, y2, ...] in [mm].
Minimum 3 points required (6 values). Points should form a closed polygon in the XY plane.
top:
type: number
format: double
description: Top z-coordinate of the prism in [mm].
bottom:
type: number
format: double
description: Bottom z-coordinate of the prism in [mm].
description: |
Prism (extruded polygon) shape. The base polygon is defined by 2D points in the XY plane, and the prism extends along the Z axis between the bottom and top Z coordinates.
SafetyGeometryPlane:
title: SafetyGeometryPlane
type: object
required:
- point
properties:
point:
type: array
minItems: 9
items:
type: number
format: double
description: |
Vertices defining a plane as a flattened array [x1, y1, z1, x2, y2, z2, x3, y3, z3, ...] in [mm].
Minimum 3 points required (9 values). Points define plane orientation and position; the plane is mathematically unbounded.
description: |
Mathematical half-space plane shape defined by its 3D vertices.
A minimum of three coplanar points is required to define the plane's orientation.
The plane extends infinitely in all directions parallel to the defined surface.
For collision avoidance, planner implementations may approximate it using a large,
thin box proxy.
SafetyGeometry:
title: SafetyGeometry
type: object
required:
- id
- inverted
properties:
id:
type: string
description: Unique identifier of this geometry.
sphere:
$ref: '#/components/schemas/SafetyGeometrySphere'
capsule:
$ref: '#/components/schemas/SafetyGeometryCapsule'
lozenge:
$ref: '#/components/schemas/SafetyGeometryLozenge'
box:
$ref: '#/components/schemas/SafetyGeometryBox'
prism:
$ref: '#/components/schemas/SafetyGeometryPrism'
plane:
$ref: '#/components/schemas/SafetyGeometryPlane'
inverted:
type: boolean
description: If `true`, the geometry is inverted (outside is restricted, inside is safe).
default: false
description: |
Geometric shape definition for a safety zone.
Exactly one shape field (sphere, capsule, lozenge, box, prism, or plane) should be set.
SafetyZone:
title: SafetyZone
type: object
required:
- id
- name
- geometry
properties:
id:
type: integer
format: int32
description: Unique identifier of the safety zone.
name:
type: string
description: Name of the safety zone.
priority:
type: integer
format: int32
description: Priority of the safety zone.
default: 0
restricted:
type: boolean
description: If `true`, the zone is restricted and the robot cannot enter it.
default: false
geometry:
$ref: '#/components/schemas/SafetyGeometry'
description: The geometric shape of the safety zone.
mg_uid:
type: integer
format: int32
description: |
UID of the motion group this safety zone is attached to.
Must match an existing motion group UID on the controller.
uid_ref_cs:
type: string
description: |
UID of the coordinate system in which the geometry coordinates are expressed.
The coordinate system must be defined on the controller beforehand.
If empty (""), the World coordinate system is used.
active:
type: boolean
description: If `true`, the safety zone is active.
default: true
description: |
Defines a safety zone with geometric boundaries and constraints.
Safety zones are used to restrict robot motion or define protected areas.
SafetyZones:
title: SafetyZones
type: object
required:
- safety_zones
properties:
safety_zones:
type: array
items:
$ref: '#/components/schemas/SafetyZone'
description: List of all safety zones.
description: Response containing all safety zones.
MotionGroupJoints:
required:
- positions
type: object
properties:
positions:
type: array
items:
type: number
format: double
description: |
The joint positions of the motion group.
velocities:
type: array
items:
type: number
format: double
description: |
The joint velocities of the motion group.
accelerations:
type: array
items:
type: number
format: double
description: |
The joint accelerations of the motion group.
torques:
type: array
items:
type: number
format: double
description: |
The joint torques of the motion group.
description: |-
Ensure to provide one value for each joint. See [getMotionGroups](#/operations/getMotionGroups) for the number of joints.
Everything but positions is optional.
FlangePayload:
required:
- name
- mass
type: object
properties:
name:
type: string
description: A readable name for the flange payload.
mass:
type: number
description: Mass of payload in [kg].
format: double
center_of_mass:
$ref: '#/components/schemas/Vector3d'
description: Center of mass of payload as a three-dimensional position vector [x, y, z] in [mm].
moment_of_inertia:
$ref: '#/components/schemas/Vector3d'
description: Principal moments of inertia of payload as three-dimensional vector [I_xx, I_yy, I_zz] in [kg·m²].
RobotTcpData:
required:
- position
type: object
properties:
name:
type: string
description: A readable and changeable name for frontend visualization.
position:
$ref: '#/components/schemas/Vector3d'
orientation:
$ref: '#/components/schemas/Orientation'
orientation_type:
$ref: '#/components/schemas/OrientationType'
payload:
$ref: '#/components/schemas/FlangePayload'
RobotTcp:
allOf:
- type: object
required:
- id
properties:
id:
type: string
description: Identifier of this tcp.
- $ref: '#/components/schemas/RobotTcpData'
RobotTcps:
type: array
items:
$ref: '#/components/schemas/RobotTcp'
example:
- id: BASE/schmalz_gripper
name: BASE/schmalz_gripper
position:
- 0
- 0
- 110
orientation:
- 0
- 0
- 0
- 1
orientation_type: QUATERNION
- id: WB_EGM/egm_tool
name: WB_EGM/egm_tool
position:
- 400
- 250
- 0
orientation:
- 1.57079632679
- 0
- 3.14159265359
orientation_type: ROTATION_VECTOR
Flag:
required:
- active
type: object
properties:
active:
type: boolean
OpMode:
required:
- mode
type: object
description: |
Controllers have two operating modes: AUTOMATIC and MANUAL.
MANUAL mode is mainly used for teaching a robot application.
To ensure safe operation the velocity of the robot is limited to 250 mm/s.
Running the finished application is done in AUTOMATIC operating mode without the limited velocity of the MANUAL mode.
properties:
mode:
$ref: '#/components/schemas/OperationMode'
CycleTime:
required:
- cycle_time_ms
type: object
properties:
cycle_time_ms:
type: integer
description: Cycle time of controller communication in [ms].
format: int64
minimum: 0
maximum: 4294967295
Behavior:
enum:
- BEHAVIOR_AUTOMATIC
- BEHAVIOR_AUTOMATIC_NOT_COMPLY_WITH_CYCLETIME
- BEHAVIOR_EXTERNAL_SOURCE
description: |
## BEHAVIOR_AUTOMATIC
This is the default behavior.
The motion groups of the controller take commanded joint configuration as actual joint state.
Configures the compliance of the virtual robot with the normal ControllerState cycle time. If set, the virtual robot will act like a physical one, e.g., with a cycle time of 8ms to respond to a new joint state command.
## BEHAVIOR_AUTOMATIC_NOT_COMPLY_WITH_CYCLETIME
Configures the compliance of the virtual robot with the normal ControllerState cycle time. If set, the robot will respond as fast as possible, limited only by software execution speed. Because of that, the execution of a movement requires less time than with BEHAVIOR_AUTOMATIC.
## BEHAVIOR_EXTERNAL_SOURCE
The external client is the only source of actual joint state changes.
This mode is used to enable third party software indicating the current joint state via [externalJointsStream](#/operations/externalJointsStream).
type: string
format: enum
ExternalJointStreamDatapoint:
required:
- motion_group
- value
type: object
properties:
motion_group:
type: string
description: |
The unique identifier of the motion group.
value:
$ref: '#/components/schemas/MotionGroupJoints'
description: A datapoint inside external joint stream.
ExternalJointStreamDatapoints:
type: array
items:
$ref: '#/components/schemas/ExternalJointStreamDatapoint'
ExternalJointStreamRequest:
type: object
required:
- states
properties:
states:
$ref: '#/components/schemas/ExternalJointStreamDatapoints'
Key:
title: Key
description: |
Unique identifier describing to adress an object.
Special characters, such as `;`, `/`, `?`, `:`, `@`, `=` and `&`, have to be URL encoded.
type: string
MetadataObject:
description: A metadata object.
type: object
additionalProperties:
type: string
example:
alias: Some Other Name
is_hidden: false
BinaryObject:
description: Any value encoded as a binary string.
format: binary
title: BinaryObject
type: string
BusIODescription:
required:
- io
- name
- direction
- value_type
type: object
properties:
io:
type: string
description: |
Unique identifier of the input/output.
name:
type: string
description: |
Name of the input/output. Customize it using the respective BUS service, e.g., [addProfinetIO](#/operations/addProfinetIO) for PROFINET service.
direction:
$ref: '#/components/schemas/IODirection'
value_type:
$ref: '#/components/schemas/IOValueType'
unit:
$ref: '#/components/schemas/UnitType'
min:
$ref: '#/components/schemas/IOBoundary'
max:
$ref: '#/components/schemas/IOBoundary'
ListBusIODescriptionsResponse:
type: array
items:
$ref: '#/components/schemas/BusIODescription'
BusIOsStateEnum:
enum:
- BUS_IOS_STATE_UNKNOWN
- BUS_IOS_STATE_INITIALIZING
- BUS_IOS_STATE_CONNECTED
- BUS_IOS_STATE_DISCONNECTED
type: string
format: enum
description: |
Current state of the BUS input/output service.
BusIOsState:
type: object
required:
- state
properties:
state:
$ref: '#/components/schemas/BusIOsStateEnum'
message:
type: string
description: |
A message providing additional information on the input/output service, e.g., BUS service status, encountered errors.
May be empty if no additional information is available.
ProfinetSubSlotDescription:
type: object
required:
- number
- input_length
- output_length
properties:
number:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
The number/index of the PROFINET subslot.
input_length:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
The amount of bytes allocated for the subslot in the input process image buffer.
output_length:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
The amount of bytes allocated for the subslot in the output process image buffer.
ProfinetSlotDescription:
type: object
description: |
An array of PROFINET slots.
PROFINET models each device’s input/output hardware as a hierarchy of slots (modules) and subslots (submodules).
A slot can represent a physical or virtual input/output card and each subslot one of its individual channels or functions.
Every slot and subslot has unique identifiers that the controller uses to map cyclic input/output data and parameter records to its process image.
This slot/subslot separation enables e.g., addressing each input/output stream when establishing input/output application relations (I/O-AR).
required:
- number
- api
- subslots
properties:
number:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
The number/index of the PROFINET slot. Per default, slot 0 is reserved for the device access point (DAP). Slots that are part of the cyclic input/output data exchange start at number 1.
api:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |
The application process identifier (API) number of the PROFINET input.
The API identifies the application relation (AR) that is using the slot.
subslots:
type: array
items:
$ref: '#/components/schemas/ProfinetSubSlotDescription'
description: |
An array of PROFINET subslots.
ProfinetDescription:
type: object
required:
- vendor_id
- device_id
properties:
vendor_id:
type: string
description: |
The vendor identifier of the PROFINET device, identifying the manufacturer.
device_id:
type: string
description: |
The device identifier of the PROFINET device, identifying the specific device within the vendor's range.
slots:
type: array
items:
$ref: '#/components/schemas/ProfinetSlotDescription'
device_name:
type: string
description: |
Name of Station (NoS) of the PROFINET device. The NoS is used in combination with IPv4 record to identify your device in the PROFINET network.
The `device_name` will be used as NoS if no REMA XML file is already present on your NOVA instance and no `rema_xml_content` is provided.
example: pnDevice
ip_config:
$ref: '#/components/schemas/BusIOProfinetIpConfig'
ProfinetIOTypeEnum:
enum:
- PROFINET_IO_TYPE_UNKNOWN
- PROFINET_IO_TYPE_BOOL
- PROFINET_IO_TYPE_USINT
- PROFINET_IO_TYPE_SINT
- PROFINET_IO_TYPE_UINT
- PROFINET_IO_TYPE_INT
- PROFINET_IO_TYPE_UDINT
- PROFINET_IO_TYPE_DINT
- PROFINET_IO_TYPE_REAL
- PROFINET_IO_TYPE_LREAL
type: string
format: enum
description: |
Value type of the PROFINET input/output variable. Is used to interpret the corresponding bits correctly.
ProfinetIODirection:
enum:
- PROFINET_IO_DIRECTION_INPUT
- PROFINET_IO_DIRECTION_OUTPUT
- PROFINET_IO_DIRECTION_INOUT
type: string
description: The direction of the input/output variable, indicating whether it is an input or output for the PROFINET device, e.g., NOVA's PROFINET service.
format: enum
ProfinetIOData:
type: object
required:
- description
- type
- direction
- byte_address
properties:
description:
type: string
description: |
Descriptive name or note for the input/output variable.
type:
$ref: '#/components/schemas/ProfinetIOTypeEnum'
direction:
$ref: '#/components/schemas/ProfinetIODirection'
description: |
The direction of the input/output variable, indicating whether it is an input or output for the PROFINET device, e.g., NOVA's PROFINET service.
byte_address:
type: integer
format: int32
minimum: 0
maximum: 65535
description: |
The byte address in the PROFINET device's process image, with offset 0.
The slot is automatically determined based on this address and the configured slot layout.
For example, with two slots of 64 bytes each:
- Bytes 0-63: Slot 1
- Bytes 64-127: Slot 2
When importing from a tag table, e.g., TIA Portal, use `input_offset`/`output_offset`
to convert global PLC addresses to device-local addresses:
`device_byte_address` = `plc_byte_address` - offset
example: 68
bit_address:
type: integer
format: int32
minimum: 0
maximum: 7
description: |
The bit offset within the byte specified by `byte_address`.
Only relevant for boolean/bit-type variables. Valid values are 0-7 (8 bits per byte).
For byte/word/dword types, this field is typically omitted or set to 0.
ProfinetIO:
allOf:
- type: object
required:
- io
properties:
io:
type: string
description: |
The unique identifier for the input/output value.
This identifier is used to reference the specific input/output variable in the PROFINET device, e.g., NOVA's PROFINET service.
- $ref: '#/components/schemas/ProfinetIOData'
ProfinetIOs:
type: array
items:
$ref: '#/components/schemas/ProfinetIO'
description: Array of PROFINET input/output variable configurations.
ProfinetInputOutputConfig:
type: object
required:
- config
- input_offset
- output_offset
properties:
config:
type: string
description: |
Content of the input/output variable configuration XML file.
The XML File has to be embedded as a string by escaping quotes, line breaks and so forth.
example: |
\n
bLightRed\n
nCounter\n
input_offset:
type: integer
format: int32
default: 0
minimum: 0
maximum: 2147483647
description: Offset in bytes for the address of the input (perspective of the controller) variables. The offset will be subtracted from to the byte addresses of the sent XML content.
example: 100
output_offset:
type: integer
format: int32
default: 0
minimum: 0
maximum: 2147483647
description: Offset in bytes for the address of the output (perspective of the controller) variables. The offset will be subtracted from to the byte addresses of the sent XML content.
example: 800
ModbusIOTypeEnum:
enum:
- MODBUS_IO_TYPE_UNKNOWN
- MODBUS_IO_TYPE_BOOL
- MODBUS_IO_TYPE_UINT16
- MODBUS_IO_TYPE_FLOAT32
type: string
format: enum
description: |
Value type of the MODBUS input/output variable. Used to interpret the corresponding bits correctly.
ModbusIOByteOrder:
enum:
- MODBUS_IO_BYTE_ORDER_UNKNOWN
- MODBUS_IO_BYTE_ORDER_ABCD
- MODBUS_IO_BYTE_ORDER_BADC
- MODBUS_IO_BYTE_ORDER_CDAB
- MODBUS_IO_BYTE_ORDER_DCBA
type: string
format: enum
description: |
Byte order of the MODBUS input/output variable. Used to interpret the corresponding bits correctly.
ModbusIOArea:
enum:
- MODBUS_IO_AREA_UNKNOWN
- MODBUS_IO_AREA_COILS
- MODBUS_IO_AREA_DISCRETE_INPUTS
- MODBUS_IO_AREA_HOLDING_REGISTERS
- MODBUS_IO_AREA_INPUT_REGISTERS
type: string
format: enum
description: |
Area of the MODBUS input/output variable. Is used to interpret the corresponding bits correctly.
ModbusIOData:
type: object
required:
- description
- address
- type
- byte_order
- area
properties:
description:
type: string
description: |
Descriptive name or note for the input/output variable.
address:
type: integer
format: int32
minimum: 0
maximum: 65535
description: |
The byte address of the input/output variable in the MODBUS device, e.g., NOVA's MODBUS service.
Used to locate the input/output variable within the device's memory or data structure.
type:
$ref: '#/components/schemas/ModbusIOTypeEnum'
byte_order:
$ref: '#/components/schemas/ModbusIOByteOrder'
description: |
The byte sequence of the input/output variable, indicating the order of bytes in memory for the MODBUS device, e.g., NOVA's MODBUS service.
area:
$ref: '#/components/schemas/ModbusIOArea'
description: |
The area of the input/output variable, indicating the memory region it belongs to for the MODBUS device, e.g., NOVA's MODBUS service.
ModbusIO:
allOf:
- type: object
required:
- io
properties:
io:
type: string
description: |
The unique identifier for the input/output value.
Used to reference the input/output variable in the MODBUS device, e.g., NOVA's MODBUS service.
- $ref: '#/components/schemas/ModbusIOData'
ModbusIOs:
type: array
items:
$ref: '#/components/schemas/ModbusIO'
description: Array of MODBUS input/output variable configurations.
Snap7IOArea:
enum:
- SNAP7_IO_AREA_UNKNOWN
- SNAP7_IO_AREA_PROCESS_INPUTS
- SNAP7_IO_AREA_PROCESS_OUTPUTS
- SNAP7_IO_AREA_MERKERS
- SNAP7_IO_AREA_DATA_BLOCK
type: string
format: enum
description: |
PLC memory area of the Snap7 input/output variable.
Snap7IOTypeEnum:
enum:
- SNAP7_IO_TYPE_UNKNOWN
- SNAP7_IO_TYPE_BOOL
- SNAP7_IO_TYPE_BYTE
- SNAP7_IO_TYPE_WORD
- SNAP7_IO_TYPE_DWORD
- SNAP7_IO_TYPE_INT
- SNAP7_IO_TYPE_DINT
- SNAP7_IO_TYPE_REAL
type: string
format: enum
description: |
PLC data type of the Snap7 input/output variable.
Used to interpret the corresponding PLC memory correctly.
Snap7IODirection:
enum:
- SNAP7_IO_DIRECTION_UNKNOWN
- SNAP7_IO_DIRECTION_INPUT
- SNAP7_IO_DIRECTION_OUTPUT
type: string
format: enum
description: |
Direction of the Snap7 input/output variable from the perspective of this service.
Snap7IOData:
type: object
required:
- description
- area
- byte_address
- type
- direction
properties:
description:
type: string
description: |
Descriptive name or note for the input/output variable.
area:
$ref: '#/components/schemas/Snap7IOArea'
description: |
PLC memory area the variable resides in.
db_number:
type: integer
format: int32
minimum: 1
description: |
Data block number. Only required when `area` is `SNAP7_IO_AREA_DATA_BLOCK`.
byte_address:
type: integer
format: int32
minimum: 0
description: |
Byte offset within the selected PLC memory area or data block.
bit_address:
type: integer
format: int32
minimum: 0
maximum: 7
description: |
Bit offset within the byte. Only relevant for `SNAP7_IO_TYPE_BOOL`.
type:
$ref: '#/components/schemas/Snap7IOTypeEnum'
direction:
$ref: '#/components/schemas/Snap7IODirection'
Snap7IO:
allOf:
- type: object
required:
- io
properties:
io:
type: string
description: |
Unique identifier for the input/output variable as used by this service.
- $ref: '#/components/schemas/Snap7IOData'
Snap7IOs:
type: array
items:
$ref: '#/components/schemas/Snap7IO'
description: Array of Snap7 input/output variable configurations.
ApiVersion:
type: object
required:
- version
properties:
version:
type: string
description: The version of the API.
parameters:
Timeout:
name: completion_timeout
in: query
schema:
type: integer
minimum: 1
description: |
The maximum time (**in seconds**) spent waiting until the operation is complete.
If the parameter is set, the request will wait for completion until the specified time is up.
For POST and PUT requests completion means that all resources are running and usable.
For DELETE completion means that the deletion process is completed.
x-go-name: CompletionTimeout
Cell:
name: cell
in: path
description: |
Unique identifier addressing a cell in all API calls.
required: true
schema:
type: string
default: cell
x-go-name: CellID
Controller:
name: controller
in: path
description: Unique identifier to address a controller in the cell.
required: true
schema:
type: string
x-go-name: ControllerID
App:
name: app
in: path
required: true
schema:
type: string
description: |
The name of the provided application.
The name must be unique within the cell and is used as a identifier for addressing the application in all API calls, e.g., when updating the application.
x-go-name: AppID
Metadata:
name: metadata
in: query
style: form
explode: false
description: Additional metadata to add to the backup
schema:
$ref: '#/components/schemas/Metadata'
MotionGroupModelParameter:
name: motion-group-model
in: path
description: |
Unique identifier for the model of a motion group, e.g., `UniversalRobots_UR10e`.
Get the `model` of a configured motion group with [getOptimizerConfiguration](#/operations/getOptimizerConfiguration).
required: true
schema:
type: string
CoordinateSystem:
name: coordinate-system
in: path
description: Unique identifier addressing a coordinate system.
required: true
schema:
type: string
x-go-name: CoordinateSystemID
MotionGroup:
name: motion-group
in: path
description: The motion-group identifier.
required: true
schema:
type: string
x-go-name: MotionGroupID
ResponseRate:
name: response_rate
in: query
schema:
type: integer
format: int32
minimum: 0
maximum: 2147483647
description: |-
Update rate for the response message in milliseconds (ms). Default is 200 ms.
We recommend to use the step rate of the controller or a multiple of the step rate as NOVA updates the state in the controller's step rate as well.
Minimal response rate is the step rate of controller.
ResponseCoordinateSystem:
name: response_coordinate_system
in: query
schema:
type: string
description: |
Unique identifier addressing a coordinate system to which the cartesian data of the responses should be converted.
Default is the world coordinate system.
Trajectory:
name: trajectory
in: path
description: |
This represents the unique identifier of a trajectory.
Every executable or partially executable trajectory is cached and an unique identifier is returned.
Indicate the unique identifier to execute the trajectory or retrieve information on the trajectory.
required: true
schema:
type: string
Program:
name: program
in: path
required: true
x-go-name: ProgramId
schema:
title: Program Name
description: The program identifier in the format `app.program`
type: string
example: app.my_program
pattern: ^[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+$
minLength: 1
maxLength: 255
Tcp:
name: tcp
in: path
description: The unique identifier of a TCP.
required: true
schema:
type: string
example: TRobUtility/current_tool
Key:
name: key
in: path
required: true
explode: false
style: simple
schema:
$ref: '#/components/schemas/Key'
x-go-name: ObjectKey
MetadataHeader:
name: X-Metadata
in: header
required: false
explode: false
schema:
$ref: '#/components/schemas/MetadataObject'
Collider:
name: collider
in: path
description: Unique identifier addressing a collider.
required: true
schema:
type: string
x-go-name: ColliderID
LinkChain:
name: link-chain
in: path
description: Unique identifier addressing a collision link chain.
required: true
schema:
type: string
x-go-name: LinkChainID
Tool:
name: tool
in: path
description: Unique identifier addressing a collision tool.
required: true
schema:
type: string
x-go-name: ToolID
Setup:
name: setup
in: path
required: true
schema:
type: string
description: Identifier of the collision setup
IO:
name: io
in: path
description: Unique identifier to address an Input/Output in the cell.
required: true
schema:
type: string
x-go-name: IOID
examples:
DefaultCell:
summary: A cell with the default configured Foundation Services
value:
name: cell
AbbController:
value:
name: abb-robot
configuration:
kind: AbbController
controller_ip: 192.168.125.1
controller_port: 80
egm_server:
ip: 192.168.125.100
port: 32112
FanucController:
value:
name: fanuc-robot
configuration:
kind: FanucController
controller_ip: 192.168.100.1
KukaController:
value:
name: kuka-robot
configuration:
kind: KukaController
controller_ip: 192.168.1.29
controller_port: 54600
rsi_server:
ip: 0.0.0.0
port: 30152
UrController:
value:
name: ur-robot
configuration:
kind: UniversalrobotsController
controller_ip: 192.168.1.1
VirtualController:
value:
name: virtual-robot
configuration:
kind: VirtualController
manufacturer: universalrobots
type: universalrobots-ur5e
initial_joint_position: ''
YaskawaController:
value:
name: yaskawa-robot
configuration:
kind: YaskawaController
controller_ip: 192.168.255.1
AppSwaggerUI:
summary: SwaggerUI App example
value:
name: swagger-ui
app_icon: favicon-32x32.png
container_image:
image: docker.io/swaggerapi/swagger-ui
environment:
- name: BASE_URL
value: /swagger-ui
ProfinetClientService:
value:
bus_type: profinet
plc_ip: 192.168.1.100
mac: '00:11:22:33:44:55'
network_config:
device_name: pnDevice
ProfinetVirtualService:
value:
bus_type: profinet_virtual
ModbusServerService:
value:
bus_type: modbus_server
network:
network_type: tcp
port: 30502
connections: 2
coils_size: 10
discrete_inputs_size: 10
holding_registers_size: 10
input_registers_size: 10
ModbusClientService:
value:
bus_type: modbus_client
network:
network_type: tcp
ip: 192.168.3.100
port: 30501
ModbusVirtualService:
value:
bus_type: modbus_virtual
Snap7Service:
value:
bus_type: snap7
address: 192.168.1.100
rack: 0
slot: 1
CellDefault:
value:
- id: /cells/default
name: default
children:
- id: /cells/default/controllers/yaskawa-gp7
name: yaskawa-gp7
- id: /cells/default/apps/my-app
name: my-app
PlanTrajectoryRequest_UR5e_Line:
value:
motion_group_setup:
motion_group_model: UniversalRobots_UR5e
cycle_time: 8
mounting:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
tcp_offset:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
global_limits:
joints:
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
- position:
lower_limit: -2.8623399732707004
upper_limit: 2.8623399732707004
velocity: 3.14
acceleration: 40
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
start_joint_position:
- 1.169
- -1.57
- 1.36
- 1.029
- 1.289
- 1.279
motion_commands:
- path:
target_pose:
position:
- 400
- 0
- 100
orientation:
- 0
- 0
- 0
path_definition_name: PathLine
limits_override:
tcp_velocity_limit: 200
PlanCollisionFreeRequest_UR5e_Simple:
value:
motion_group_setup:
motion_group_model: UniversalRobots_UR5e
cycle_time: 8
global_limits:
joints:
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
tcp:
velocity: 300
collision_setups:
default:
colliders:
annoying_obstacle:
shape:
shape_type: sphere
radius: 100
pose:
position:
- 400
- -400
- 400
margin: 0
link_chain:
- link_0_sphere:
shape:
shape_type: sphere
radius: 100
pose:
position:
- 0
- 0
- -10
link_0_capsule:
shape:
shape_type: capsule
radius: 50
cylinder_height: 20
- {}
- link_2_sphere:
shape:
shape_type: sphere
radius: 100
- {}
- {}
- link_5_sphere:
shape:
shape_type: sphere
radius: 100
self_collision_detection: true
start_joint_position:
- 1.169
- -1.57
- 1.36
- 1.029
- 1.289
- 1.279
target:
- 2.86521247
- -0.85477865
- 2.39700269
- 3.17016494
- 1.57079633
- -1.29441614
algorithm:
algorithm_name: MidpointInsertionAlgorithm
max_iterations: 1000
PlanCollisionFreeRequest_UR10e_Complex:
value:
motion_group_setup:
motion_group_model: UniversalRobots_UR10e
cycle_time: 8
mounting:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
tcp_offset:
position:
- 0
- 0
- 100
orientation:
- 0
- 0
- 0
global_limits:
joints:
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
tcp:
velocity: 300
collision_setups:
default:
colliders:
annoying_obstacle:
shape:
shape_type: box
size_x: 400
size_y: 50
size_z: 100
box_type: FULL
pose:
position:
- 500
- 0
- -250
margin: 0
base:
shape:
shape_type: cylinder
radius: 200
height: 300
pose:
position:
- 0
- 0
- -300
margin: 0
floor:
shape:
shape_type: box
size_x: 2000
size_y: 2000
size_z: 10
box_type: FULL
pose:
position:
- 0
- 0
- -550
margin: 0
link_chain:
- link_0_compound_convexHull:
shape:
shape_type: convex_hull
vertices:
- - 56.38827227077839
- 49.10684638328093
- 99.20429438352585
- - 91.81896681711423
- -16.771828400911453
- 22.3514987410473
- - 54.53735054247006
- 77.62744500845461
- 0.05855427502689248
- - -59.66566891395459
- 73.84710741016391
- 0.059186014080281346
- - -43.170050354058795
- -61.10288334529101
- 99.2043378009488
- - 11.699891337372666
- -94.12819662016197
- 0.05860819339107565
- - -11.461974912494453
- 73.93905447360368
- 99.14657312530356
- - 88.24518008515422
- 32.650576992238136
- 20.628508273680055
- - 60.986030927863894
- -43.28880418148677
- 99.20433163642883
- - 92.16440672570201
- -22.390336485437167
- 0.10236673578890854
- - -81.07480003673209
- -49.12690107161393
- 0.00137543488314823
- - 20.62727860069093
- 71.93860546659451
- 99.11235772863627
- - -11.411194938818557
- 93.7783286022478
- 15.134138762722364
- - -53.77230386138555
- 52.01117323669192
- 99.20429438352585
- - 73.93975511075192
- 11.636810109313702
- 99.1970215873067
- - 66.75571409011314
- 64.90732284192217
- 24.58604253656592
- - 11.707645905796948
- -73.90241196918333
- 99.1420714151646
- - 86.70477160188445
- 38.34067501342202
- 0.027568493573354447
- - 61.67356398058195
- -71.85053871135106
- 16.870326452255988
- - 94.14734534239162
- 11.65292671820115
- 0.11816170432611683
- - -41.91118458354338
- -84.42620483528339
- 18.722188391737625
- - 11.723005095299126
- 73.85818996803883
- 99.20427948236465
- - -13.254341009434876
- 93.91527496725296
- 0.14046855674716696
- - -43.44921559095383
- 82.78557658195496
- 24.139175191521648
- - 27.608110768010622
- 90.0492993269122
- 18.67596563820628
- - -73.63406469193744
- -13.262757437021122
- 99.20431789448139
- - 70.27427646196644
- 25.777562061373654
- 99.1776801598409
- - 71.95946057826048
- -20.363261627746876
- 99.20431915215657
- - 77.2925240842348
- 52.49962010127847
- 24.255513432235865
- - 38.138089616330724
- 64.44568083632768
- 99.09962507131587
- - 20.569083680581056
- -71.89711857530371
- 99.20433908700943
- - 77.66607396476127
- -54.4973277932878
- 0.05859575079979196
- - 94.15334950541313
- -10.017663286394086
- 15.490382708152131
- - 90.23446863774923
- 29.657103976551955
- 6.344800489744971
- - 94.10877010548361
- -11.672506509106281
- 0.05858230870874753
- - -34.678228881519594
- -88.2498846903852
- 0.02346915672341021
- - -70.14565468623236
- -61.2642895326637
- 25.00412784446542
- - -13.263927860873087
- -73.63851291198232
- 99.20433805445263
- - -20.33627398326411
- 71.96005815578168
- 99.20427948236465
- - -2.3351790019313095
- 93.60758651825437
- 22.332015362833236
- - 13.461051978576965
- 93.95365331794734
- 0.05086115924667067
- - -63.177174180454735
- 70.0507976900071
- 18.811783085210575
- - -29.46288852345959
- 90.22665545949177
- 0.18408667096642822
- - 45.56914965368784
- 82.7078731284794
- 18.763782965668128
- - 22.703168874717456
- 90.11972351157353
- 25.56642500096593
- - 72.02890358600823
- 20.386050655691786
- 99.176791831316
- - 86.67571118152541
- -34.60800100531924
- 24.23444573583457
- - 81.0359272347894
- 49.14026245852543
- 11.813785645514274
- - 79.360509683957
- 48.83938455548662
- 24.974887561953572
- - 43.33636026261716
- 60.976964600760205
- 99.20428842396869
- - 43.409883975982666
- -61.000101268291466
- 99.20433908700943
- - 22.451519522702984
- -92.05664971117845
- 16.98634841911579
- - 49.17121291642734
- -81.07279700131953
- 0.10645699969873829
- - 91.93806697631932
- -20.416122443738583
- 16.98600151059508
- - 73.96945601530642
- -11.564037665055778
- 99.15791672651875
- - 93.88495215266305
- 11.388283533235107
- 17.022983454545866
- - 90.29172327982874
- 29.39992636683794
- 0.17860174411122448
- - 92.11897463349372
- 22.360723223256763
- 0.058571625346365286
- - -59.65154902338887
- -73.84062644782765
- 0.0586018222783688
- - -7.798265466047937
- -93.72421213770562
- 18.795815865042
- - -54.18648943660606
- -75.58158541223423
- 25.19903574951483
- - -87.97955218656797
- -33.19011304860468
- 20.631183441725515
- - -64.41842957111463
- -38.08956123884809
- 99.12003228600283
- - -30.799486504320754
- -68.1538260462593
- 99.20433908700943
margin: 1
- link_1_compound_convexHull:
shape:
shape_type: convex_hull
vertices:
- - 54.37229484972766
- 84.61314332722765
- -30.993279888156923
- - 72.74231980425552
- 16.930159245686447
- 94.23885046563719
- - 69.48523113949189
- -81.40001251362189
- -27.318010360498555
- - -56.75563065832366
- -81.40001780986783
- -48.781234727133025
- - -63.68454978381185
- 86.8099849635954
- 33.558413948265745
- - -12.692985007608007
- -73.75189261613725
- 94.19541438080272
- - 12.081688868899828
- 29.664824227482132
- -75.24446479410726
- - 74.52490831689661
- 55.00120263962714
- -13.98952241618953
- - 28.146811062572702
- 93.10406603076312
- 64.23647957414391
- - 59.4636285047389
- -45.3596176622245
- 94.00969482981327
- - -15.886517779573978
- -81.39998055696488
- 73.26579199186594
- - -73.67899196840031
- -12.624265154619103
- 94.23886380092094
- - 12.130261743516938
- -81.40002526044843
- -73.72508774203074
- - -40.64754447650306
- 79.83526605342168
- -51.87063488964463
- - 74.75939507029871
- -53.53547346793887
- 5.530533374480235
- - 51.454842737419405
- 41.08027846873664
- -55.04592890544584
- - 67.65598742461151
- 85.5669149980069
- 24.051935299064166
- - 56.008604684812425
- -81.39998800754547
- 49.809368242151514
- - 62.98418343067169
- -40.47745056152345
- 94.23887729644774
- - -75.41551815440091
- 53.370289811601054
- -11.272470706731355
- - -65.23294746752353
- -81.39998833588594
- 36.86873771819061
- - -40.53664999654785
- 62.944103173363466
- 94.23708751820476
- - -30.508040280969148
- -81.40002526044843
- -68.5143290374334
- - 15.341985774741625
- 71.78747767255977
- -68.5079624022116
- - -56.49975441490514
- 86.29642315390595
- -19.333269238260524
- - 74.76495592611217
- 2.0808646379522107
- 94.21098644604916
- - 72.8658973735792
- -81.40000684721548
- -15.94688581101967
- - 61.03945934222921
- 75.82971621628975
- -36.82541074173625
- - 64.52870136929714
- 45.14516485112163
- -40.20465624054712
- - 36.61651478694124
- 33.345159285342945
- -66.95293116000363
- - 60.79429082075865
- 89.70486280446784
- 19.187556860096795
- - 56.14146290552683
- 49.54072154890799
- 94.1891683156922
- - 74.3541870257659
- 64.78872900525758
- 15.277867636271901
- - 30.175912182436736
- -68.5158332608732
- 94.13721051592726
- - 16.77736214100121
- -81.39998055696488
- 72.97633930124537
- - -20.97808926636041
- -71.86612295437862
- 94.23670047262009
- - 64.54567517051046
- -81.39998800754547
- 38.059097907885324
- - -73.82621798394293
- 11.94754371506324
- 94.23885402215363
- - -60.20839874510507
- 40.52784980153289
- -46.92034265937025
- - -73.58306539056277
- -81.40000520811293
- -12.572876579714007
- - -28.074970236503056
- 93.17633497399787
- 64.16680348633936
- - -12.826132387771954
- -81.40002526044843
- -73.65194860905092
- - -29.392851986412996
- 34.82230853649004
- -70.28810748357606
- - 3.8063385484074166
- 81.16763648821099
- -61.02114971130133
- - -70.22737597729711
- 81.73994057052806
- -9.160572793671502
- - 74.62354925293067
- 63.211901021931794
- 5.983206174165373
- - 72.81661009079991
- 49.796086842403476
- -22.601247993828597
- - 74.74399025190212
- -53.54073446084445
- -4.455150328982687
- - 72.99374991592236
- -81.39999926240749
- 15.345324692813286
- - 67.72865550971555
- 83.37191664916594
- -12.370763595463727
- - 41.447999662417494
- 76.5319723513497
- -54.925200144436154
- - 57.89880903165377
- -81.40001780986783
- -47.20778456651658
- - 55.902075695807596
- 70.67345064089137
- -45.063397155060606
- - 30.29901629958476
- -81.40002526044843
- -68.582950008069
- - 25.311625938873934
- 33.730826006505296
- -71.83195489601786
- - 50.0540070678931
- 91.37808349449766
- 47.677121099171885
- - 0.4693661998806197
- 83.03588001956054
- -56.325982683927336
- - 67.84932002753429
- 31.598157627370774
- 94.23064356421906
- - 16.91451080413365
- 72.90606553728854
- 94.15951898969337
- - 71.00158307716768
- 82.83174254530996
- 13.75608002937422
- - 74.77136086070777
- 3.7845249060934028
- 93.08924546707104
- - 46.46120815712717
- -58.63297368712883
- 94.18516667065335
- - 2.000075925245588
- -81.39998055696488
- 74.78975620687655
- - 13.648378037738416
- -73.58525290122121
- 94.17503195217652
margin: 1
- link_2_compound_convexHull_0:
shape:
shape_type: convex_hull
vertices:
- - 633.3170124782349
- 71.59973077276247
- 94.59997713565828
- - 684.5549538880651
- 5.79133558376336
- 236.12422187819095
- - 658.1962324425898
- -59.162265841632866
- 94.59996223449706
- - 516.3576448673398
- -72.48599555157381
- 158.42940047702717
- - 469.348602114183
- 42.675390256900165
- 210.28790035385282
- - 618.8582792823836
- -71.84648302836749
- 254.7436729345781
- - 469.34859816671695
- -6.629573044160848
- 121.40094942600535
- - 685.4363695629456
- 18.170837841250695
- 94.59997713565826
- - 625.0066304016142
- 69.90501763724765
- 254.26809683225252
- - 670.4194767928662
- -44.26704068331676
- 236.08076701560964
- - 632.9906713689086
- -71.68019624468602
- 94.59995478391646
- - 469.3485988019806
- -37.805801777084234
- 215.45047642982877
- - 469.3486013089047
- 49.69472871298105
- 153.06301894483553
- - 678.1821991920472
- 38.98451142311092
- 211.46126091480255
- - 667.1428566953208
- -25.712936717874328
- 257.4298465379794
- - 652.4764389497301
- -64.89125139643252
- 216.32905480357485
- - 684.9707107151355
- -19.398695774821213
- 94.59996968507767
- - 593.7597725550277
- -72.01305656938385
- 94.59994733333586
- - 516.3576375365258
- -71.10924949067135
- 197.39583644764332
- - 469.3485966263832
- -49.87144388178175
- 153.52864003934522
- - 543.0758084473393
- 18.437744870327887
- 267.48928872609315
- - 574.1277203183859
- 63.840249644948905
- 94.59996411121229
- - 516.3575928330422
- 70.93255343158815
- 197.86146386345447
- - 652.3954025147209
- 63.25077131629741
- 94.59997713565828
- - 664.2061977477059
- 43.55014663386143
- 253.3943026380232
- - 684.7455295496566
- 24.656900706549077
- 205.29599430630796
- - 677.7459798862171
- -26.6993141340601
- 247.16783721242902
- - 650.5131344914437
- -59.15632433891301
- 252.8175711631775
- - 677.231600135312
- -39.64981581139477
- 211.86807704011525
- - 639.4152073866896
- -71.49231328047088
- 222.63809245070863
- - 600.3223421906207
- -71.37418031426998
- 255.9318815185916
- - 469.34859764362
- -50.18119181245659
- 197.65452207964063
- - 516.3576447114663
- -65.694192142935
- 140.77488059717894
- - 469.3485967998862
- -37.34210298465777
- 136.13861015855974
- - 579.1470942774798
- 61.130565623167115
- 264.007952112342
- - 469.3486011545749
- 11.8673661599311
- 229.3079036871486
- - 469.3486003496348
- 36.555169656338535
- 135.44157072367113
- - 542.997760683211
- -26.17125578502594
- 94.59994733333588
- - 469.3486020069933
- 50.0044808483825
- 198.12013497512677
- - 516.3576002836228
- 70.62281264521425
- 153.32170219643945
- - 637.8516283261077
- 71.38720834900624
- 226.31654285427916
- - 677.5724723911076
- 37.080549489967304
- 94.59997713565828
- - 676.8130581498147
- 30.03484420776363
- 246.61551415920258
- - 663.3598716639929
- -51.21183762925682
- 243.0930486639869
- - 663.7554717371637
- -46.27798394295854
- 251.62284701579074
- - 632.0029778026518
- -65.70006903602574
- 257.9163379970797
- - 671.2237316613997
- -46.27831331125923
- 94.59996396490149
- - 676.9677493809969
- -32.18523374709213
- 242.61002368582461
- - 684.2899858415135
- -26.36730610578569
- 207.07278852393958
- - 637.4719583190141
- -71.66883974912624
- 226.26419251971816
- - 645.2924587166975
- -64.13166195705361
- 248.5507958753538
- - 565.7929513275624
- -53.46042997837071
- 264.9892568588257
- - 574.7056343413626
- -64.14357709758387
- 94.59994733333586
- - 592.9675007658899
- 70.32949718355994
- 255.99564301701457
- - 632.3773538374068
- 65.5718408135624
- 257.87397872744043
- - 591.3081314075124
- 60.18972059803238
- 264.89607345381086
- - 555.1437691461649
- 43.09088983292568
- 265.7215166442455
- - 469.3485988886904
- 11.650289449175064
- 122.63848116052549
- - 469.3486007518119
- 42.23863485920566
- 141.07924736076163
- - 512.6865918931477
- 71.21391409367821
- 178.24559874234066
- - 574.3690162523809
- 61.65694461944287
- 261.1011648661945
- - 586.6426040581946
- 70.25881669755792
- 94.59996968507768
- - 638.5119866602394
- 70.32699846040819
- 143.09154799567372
- - 650.6825583344623
- 63.2867583037519
- 228.83304047941562
margin: 1
- link_2_compound_convexHull_1:
shape:
shape_type: convex_hull
vertices:
- - 76.92195434570317
- 56.29356351878979
- 165.67906516404648
- - 87.56933637457018
- 31.022420396991755
- 221.3799784188908
- - 87.56933128154469
- -37.3421740557084
- 136.13852993595555
- - -24.461236312061942
- -52.187333879831414
- 112.59985715150832
- - -42.33370761871333
- 36.68697588443752
- 224.03007745742798
- - 13.52388275998328
- 55.96675133411202
- 112.59987950325014
- - 87.56933550854728
- 42.238590773158194
- 141.07928800957998
- - 7.933800253351137
- 55.544048368201494
- 234.746551799982
- - -10.615752108660104
- -51.85108722853973
- 235.89793431403132
- - 51.4375305106654
- -26.740316004065644
- 112.59987217450966
- - -56.44296932693942
- 12.823164410243809
- 112.59986460208893
- - 87.5693374527682
- 48.367436253476555
- 202.0413294575401
- - 87.56933552473902
- 49.694656430715405
- 153.06303766752976
- - -18.482300299859048
- 56.81910694035828
- 202.553624742633
- - 87.5693325269716
- -43.12874051346446
- 209.63139901073853
- - -30.676091886420636
- 38.507715004868125
- 234.96039216887954
- - 49.801773005405494
- -24.905396866719027
- 245.78811018961784
- - 26.231166076010595
- -51.25837970286318
- 112.59986460208891
- - 87.56933344584274
- 11.65029859655789
- 122.63845369509998
- - -55.19256032097485
- -13.16412345243875
- 214.71916777440606
- - 33.925889973035964
- 42.739697098640335
- 243.40470826125244
- - 76.92195434570317
- 56.405336970071644
- 185.4001869725117
- - -30.686676713147904
- 48.91957756353722
- 112.59987341337367
- - -11.395690683106295
- 56.49130327402281
- 112.59987950325014
- - -21.085781315401277
- 49.50756667800304
- 232.61790320124092
- - -30.495862982259382
- -34.60028023078436
- 236.33018005712893
- - 87.56933464740007
- -13.191378451096876
- 228.98156503492874
- - 26.03067574447084
- -49.03881637875417
- 239.34020727470434
- - 43.48683232179542
- -38.35527539092473
- 112.59987205266951
- - 87.56933317560618
- -46.496380315809134
- 204.75253064721736
- - 15.082037700077308
- -58.02749327325538
- 220.99086516414025
- - 87.56933216585162
- -12.974339831168207
- 122.96471145496687
- - 51.9030813096133
- 25.51241868625107
- 112.59987950325012
- - -56.598573175625006
- 18.68561041973122
- 191.55168405737834
- - -48.26118898253037
- 18.169747012757405
- 230.12637966703082
- - -48.450476695378825
- -31.16414718103442
- 112.59985715150833
- - 26.416551293517273
- 48.696260655579785
- 239.76429384021176
- - -41.258890606602904
- 43.07974211773801
- 198.03066125495303
- - -34.49263902952464
- 44.1506534835811
- 226.11790163536432
- - -5.161123550262801
- 55.18206486516514
- 233.9330854710912
- - 16.523258635352363
- -43.70778478650374
- 243.30955784509575
- - -31.6437388121318
- -50.71643712645975
- 197.01767586167162
- - 87.56933387791855
- -31.243736452283677
- 221.2639903542983
- - 50.76050795846038
- 23.135178155348004
- 245.8761967296151
- - 37.65158882558012
- -43.56601197267352
- 112.59986795071498
- - 0.8889247366078052
- -57.94727176905381
- 200.66847961022955
- - 38.34852543166744
- 42.9482336863874
- 112.59987950325014
- - -56.18708402086088
- -19.981645431618475
- 191.586461559423
- - -42.056425968272606
- 31.441314475789774
- 230.38857527824734
- - -55.750792754657596
- 5.184531221099754
- 219.75124476976154
- - -47.605450558183065
- 29.856230633154617
- 220.5058441430439
- - -49.10688893659483
- 30.21276680615023
- 112.59986671221684
- - -29.45103184840093
- 48.509451178344456
- 221.74265111904484
- - -17.10125731611754
- 54.860155984031714
- 214.541752549387
- - 16.22444355456753
- 47.33645437632356
- 242.38059585119942
- - 33.157083638004224
- -41.87618420331975
- 244.13306957994016
- - -34.534463215539745
- -44.19579310083312
- 226.01761366475074
- - -36.38678615061508
- -44.68655331475563
- 112.59985715150832
- - 87.56933563621908
- 11.867347487329146
- 229.30782792949026
- - -18.958136844634964
- -56.913356852531464
- 202.88479328155518
- - 87.56933413239256
- 30.638033000800334
- 130.41806935949023
- - 44.143266417962764
- 37.40391364605725
- 112.59987950325014
- - -56.314632701873734
- -13.880516958236708
- 112.59985715150833
- - -48.13665443858065
- -30.96430774759411
- 207.39164552805008
margin: 1
- link_2_compound_convexHull_2:
shape:
shape_type: convex_hull
vertices:
- - 469.3486013089047
- 49.69472871298105
- 153.06301894483553
- - 469.348602114183
- 42.675390256900165
- 210.28790035385282
- - 469.3485966263832
- -49.87144388178175
- 153.52864003934522
- - 36.79722977316044
- -50.42947937619642
- 146.35510538529306
- - 87.56933648866186
- 50.004364066144305
- 198.12009068546035
- - 87.56933350848942
- -37.805826271824195
- 215.45049371217917
- - 37.14565948997756
- 6.50115784773519
- 112.5998737732187
- - 469.3486020069933
- 50.0044808483825
- 198.12013497512677
- - 469.3485988019806
- -37.805801777084234
- 215.45047642982877
- - 36.79796999640814
- -50.769472321927466
- 204.85110441867843
- - 87.56933563621908
- 11.867347487329146
- 229.30782792949026
- - 469.34859816671695
- -6.629573044160848
- 121.40094942600535
- - 87.56933552473902
- 49.694656430715405
- 153.06303766752976
- - 76.9218947410584
- -50.90167547784124
- 202.82115414980387
- - 35.28923191648482
- -46.76172626082658
- 137.2747469779343
- - 37.145657489391624
- 6.501154060088634
- 207.9480608495382
- - 87.56933637457018
- 31.022420396991755
- 221.3799784188908
- - 87.56933464740007
- -13.191378451096876
- 228.98156503492874
- - 469.3486011545749
- 11.8673661599311
- 229.3079036871486
- - 469.3486003496348
- 36.555169656338535
- 135.44157072367113
- - 76.92195434570317
- -50.46499297977997
- 148.54596354095403
- - 469.34859764362
- -50.18119181245659
- 197.65452207964063
- - 469.3485977449875
- -26.091528557814712
- 128.03180043230188
- - 87.56933685489219
- 42.675291038455335
- 210.28784149037517
- - 469.3486018929183
- 31.022464718508907
- 221.38006286654212
- - 469.3486004517982
- -13.191395150844722
- 228.98159625269764
- - 469.3485988886904
- 11.650289449175064
- 122.63848116052549
- - 87.56933550854728
- 42.238590773158194
- 141.07928800957998
- - 469.3485980453339
- -43.12869070887776
- 209.6313646331131
- - 469.3485967998862
- -37.34210298465777
- 136.13861015855974
- - 469.3486007518119
- 42.23863485920566
- 141.07924736076163
- - 87.56933483126556
- 36.555148147296165
- 135.4415950023511
margin: 1
- link_3_compound_convexHull_0:
shape:
shape_type: convex_hull
vertices:
- - 473.137961895848
- 36.89718162533745
- 15.895021637526984
- - 473.0332122188894
- 20.08269809000303
- 77.19937208169837
- - 472.5927942281463
- -42.24779260763575
- 31.39726533865284
- - 66.73421831600263
- -34.85626584406495
- 12.059432703729472
- - 86.36995459061495
- 36.835621497138405
- 59.70379001352184
- - 86.36995465152359
- -18.694426120767975
- 76.63597485112074
- - 472.55370114907873
- -14.331490420376497
- -2.0958331097323635
- - 472.82166071123356
- -36.437656010761884
- 15.458056950194475
- - 472.7467213117718
- 37.68023500966437
- 60.28679121172071
- - 86.36995159447247
- 24.825018033620466
- 4.427323517825153
- - 472.85460009336293
- -19.191973961742793
- 77.58398331530516
- - 86.36995293361883
- -41.26512494895526
- 48.970528194758494
- - 65.7677281091701
- 27.083752021205196
- 73.76358347726784
- - 472.5792392860259
- -24.847717247351596
- 3.1684350563889203
- - 86.3699519968045
- 35.92027480488738
- 16.569330904243532
- - 67.12886697404565
- -16.20058219183082
- -2.1324202017050897
- - 472.64567523543747
- 15.370536854574482
- -1.8786535641148705
- - 66.68611664999753
- 23.017271321126554
- 76.28558876887368
- - 472.7376831649194
- -42.2651547155035
- 49.21713688680824
- - 86.36995359311709
- -36.48318025793425
- 60.21467264233941
- - 86.36995192576637
- -41.68799686643042
- 32.11135202587985
- - 472.3185818046102
- 26.360659509139662
- 72.9473691901421
- - 65.72203247875473
- -32.38136231277983
- 8.512654601877264
- - 68.51559740208677
- 28.4423594126538
- 62.89071091093035
- - 65.58520288412069
- -25.531773652082933
- 2.3962944733011913
- - 472.83410327797515
- 25.529288905981247
- 3.632355750917005
- - 86.36995107505345
- 15.070607888494692
- -0.938570839504615
- - 472.4304226301907
- -37.2207068837064
- 60.72375940689196
margin: 1
- link_3_compound_convexHull_1:
shape:
shape_type: convex_hull
vertices:
- - 566.4685180762414
- 54.91349542803998
- 52.05549421471479
- - 625.6292034208312
- 20.355039837735323
- 112.61627069397106
- - 587.7223336590731
- -7.843638841001767
- 18.8280190704228
- - 492.70679257009647
- -54.39105534647748
- 20.907465408712493
- - 473.6509496712076
- 8.280321460091567
- 81.65143042247888
- - 591.2472431918145
- -54.408991722431296
- 112.49145120382308
- - 490.0856046676636
- 20.04771344661714
- -14.061901718378062
- - 611.663353815531
- 25.247210738588496
- 55.51938128347746
- - 556.0193966560523
- 55.66048108880935
- 112.43337071018043
- - 625.180436007733
- -18.285964951657053
- 84.48206636864114
- - 569.9956429342543
- -41.66212948405386
- 24.272523071299357
- - 490.03623609155466
- -49.066851948192536
- 66.42535228085671
- - 550.820789499859
- 36.72991806695026
- 6.336037253309877
- - 473.4644375376067
- -18.502752335427232
- -0.6294562693174964
- - 601.9494933725151
- 48.324645032929006
- 84.3624418969748
- - 489.82624178821754
- 55.703049818521116
- 43.51930074697445
- - 522.7031340025696
- 30.974382683759845
- 112.4017056167906
- - 626.0418869278012
- -19.411258282219816
- 112.54836943544014
- - 625.2006526809691
- 14.861474920368249
- 78.69349447865991
- - 571.000900422595
- -52.77165600901498
- 47.36510214142333
- - 611.2072321696762
- -24.86760074434498
- 54.9615629790693
- - 532.4776285734558
- -18.59362317732302
- -12.01073375099886
- - 522.7419822435545
- -30.944554411225337
- 111.96691291365212
- - 489.67592726706414
- -54.76077656867601
- 50.04270121362228
- - 580.6982175915921
- 25.815628046558313
- 19.022523080886927
- - 588.650576402296
- 41.67129336680727
- 42.967039372778785
- - 602.0797930550344
- 49.114940430058226
- 112.22933240103777
- - 473.3151896057567
- 42.19174024741255
- 27.519412620175995
- - 585.4057242280497
- 56.11308221304131
- 112.4914512038231
- - 492.8646786207529
- 49.484684449696005
- 9.681709105110386
- - 474.046465043427
- 35.07886545416251
- 64.9963499258351
- - 620.0993089675903
- -31.505267691612257
- 112.53898590803146
- - 625.0144392610792
- -7.649698310473655
- 73.12900475371777
- - 618.6787549001191
- 31.072603628474393
- 84.38246218966836
- - 546.1406621336131
- -53.29176628851709
- 28.435240500065532
- - 581.0956216387244
- -24.873967379214097
- 18.608694587437927
- - 593.8884523985275
- -41.01465941632868
- 48.29841304601127
- - 531.964910840944
- 15.755181500322951
- -13.130020429291015
- - 490.0856046676636
- -20.047839355468735
- -14.061903581023214
- - 550.6554229685656
- -53.85854426020596
- 112.16757305638222
- - 473.9179010337351
- -24.49540942574753
- 75.29430933773223
- - 515.5326573521158
- -13.939567810560785
- 112.05866093106829
- - 489.79394414923286
- -54.64276853532626
- 25.612941936629728
- - 599.5220740433351
- 9.190796708360317
- 30.794231758923804
- - 606.3519514051247
- 36.90881696888157
- 61.45729631325288
- - 585.0295565837407
- 54.13045541526101
- 71.68782376375621
- - 599.3899256875974
- 30.814727800191424
- 43.183546123478195
- - 569.0176457684312
- 41.628812497315174
- 23.963989221648035
- - 473.5229539977787
- -40.62673131516884
- 54.44788122797273
- - 473.6430448379689
- 19.393469057699946
- -0.2448535086794655
- - 489.944250658995
- 55.585040416753365
- 32.136335345061205
- - 619.7103290557861
- 31.994734334945665
- 112.6074269413948
- - 474.11280609878463
- 25.051353975742455
- 75.09297270503518
- - 473.8823129771247
- 40.90216263930954
- 54.13799039736242
- - 540.5195813504569
- 48.774886131591614
- 112.33426910286768
- - 606.9599310796598
- -41.57829023377654
- 72.88937762377495
- - 618.7937489873449
- -13.63240259601271
- 60.97171659765813
- - 618.8436229775876
- 14.123149313415936
- 61.199701067029594
- - 624.6754675836087
- 21.445432930915253
- 90.69980039038558
- - 619.1680127280017
- 25.642471088180667
- 72.64276770186186
- - 584.3992117115342
- -53.15350361396462
- 65.66244386069228
- - 557.6064515877514
- -46.79723472749544
- 22.875164494477907
- - 598.9065023809881
- -25.001305111868852
- 37.36070683080588
- - 563.245626919265
- -14.132469715964305
- 0.7020112966771612
margin: 1
- link_3_compound_convexHull_2:
shape:
shape_type: convex_hull
vertices:
- - 71.1526907934649
- 41.50183912728877
- 27.781046644708614
- - 86.36995459061495
- 36.835621497138405
- 59.70379001352184
- - 86.36995094593067
- -35.56783910772783
- 16.058458375711478
- - -14.463458642093428
- -41.08084592777817
- -5.215041201226964
- - -36.74268436431885
- 25.979940223693838
- 95.49957513809204
- - 29.891064647068106
- 30.46345575735811
- -15.292405605786472
- - 86.36995159447247
- 24.825018033620466
- 4.427323517825153
- - -15.000614516674887
- 42.09195077221316
- 95.49958258867265
- - 18.522162891601283
- -40.77380142341456
- 95.49959003925322
- - 30.148100787502244
- -30.064000988587534
- -15.147561935902734
- - -31.085398104537944
- 25.42700293238781
- -8.587783997900058
- - 86.3699519968045
- 35.92027480488738
- 16.569330904243532
- - 12.381302682423893
- 43.102241457423226
- 95.49959003925325
- - 86.36995465152359
- -18.694426120767975
- 76.63597485112074
- - -37.67239761352539
- -24.612601470947276
- 95.49957513809204
- - 86.36995192576637
- -41.68799686643042
- 32.11135202587985
- - 17.69962269502753
- -39.92382370751682
- -11.629716617960987
- - 86.36995076886092
- -14.104927679803097
- -1.1766391855096388
- - -20.687150295181254
- 42.0394521392377
- 17.1233705252908
- - -10.134293276192693
- -33.01674534112166
- -13.61365541622133
- - 19.3836784797345
- 38.86629819799853
- -12.465866485260399
- - 71.29192377178128
- 41.73970173981566
- 49.08754784328369
- - 40.08827968001037
- 19.728303087693867
- 95.49959748983383
- - -15.267387557240681
- -41.97621519763427
- 95.49957955651118
- - -43.01666662881303
- -8.117220105621413
- 1.1689776244743262
- - 86.36995359311709
- -36.48318025793425
- 60.21467264233941
- - 16.71028423309326
- -38.28244991302489
- -13.903557322919378
- - 39.535166091190604
- -18.65425813298722
- -15.226652737310106
- - 86.36995107505345
- 15.070607888494692
- -0.938570839504615
- - -42.47850801753748
- 19.6454148429008
- 25.59147844426542
- - -26.217402953155215
- 36.20292095921622
- 95.49957794143397
- - -2.2683677535576408
- 42.47687545643075
- -10.230875639728186
- - -19.616544008470783
- 42.117945976230004
- 14.621330682755238
- - -8.849709585955907
- 34.02344608809801
- -13.59523966588623
- - 13.502366510116417
- 41.240618341370464
- -10.467133594999565
- - 40.71653646192749
- -18.637803558429987
- 95.49959748983383
- - 86.3699553336462
- 19.5510005104514
- 76.18630615561392
- - -30.552227389627205
- -35.541406015013855
- 19.474217386256026
- - 86.36995293361883
- -41.26512494895526
- 48.970528194758494
- - -21.10210667253932
- -41.918111243988996
- 17.70442885557799
- - -31.391353318348365
- -25.09299727325404
- -8.553683537286275
- - -10.391756158568569
- -40.40709483184597
- -9.970234282001522
- - 39.75837740432917
- 18.49967890824789
- -14.870849301838224
- - -30.131040194179604
- 30.313540988490217
- -4.926330757190233
- - -42.82018600403035
- 9.085463735979175
- 1.306915962627083
- - -43.92554712022206
- 8.643551876098208
- 95.49957513809204
- - -37.125951063309685
- 14.87483764246784
- -7.924758632609611
- - -19.505736694664392
- 35.98437588968227
- -9.44255800618926
- - -5.2244613475681945
- 39.1623254030807
- -12.490454305840634
- - 24.12205353866011
- 37.64540909692233
- 95.49959226303885
- - -26.55895443567374
- -35.90549233077376
- 95.49957513809203
- - -42.88485823245014
- -18.297275823922952
- 27.08019887807348
- - -26.032021947252815
- -34.39367897768105
- -4.013282829276614
- - -4.454928397927006
- -38.62169568045604
- -12.94292959560324
- - -20.26158098329597
- -36.07324393212869
- -8.840227260103786
- - -36.089975138166665
- 24.808488171025687
- 0.8258379319531273
- - -24.654253155641754
- 35.288636505503206
- -4.885349094180798
- - -37.603410175518775
- -13.50675842578161
- -7.871372646826353
- - -31.844223501086617
- -34.487477868617255
- 21.70895747465937
- - -36.56613540649414
- -24.706761908531178
- 0.9027507621794885
- - -42.646707249508154
- -14.015274992583862
- 95.49957513809204
- - -30.884010550552375
- -29.3485536449395
- -5.0962322222328345
- - -13.984535634161148
- 41.24428881291587
- -5.403472943315284
- - -42.19236316784463
- -18.819298304604875
- 22.765681427201795
margin: 1
- link_4_compound_convexHull_0:
shape:
shape_type: convex_hull
vertices:
- - 25.76960115228644
- -31.960172979774033
- -55.574874432562396
- - 43.14961747136908
- 7.044977020751268
- -45.69228016651391
- - 43.42374718989004
- -78.89139899015427
- 11.725451011552046
- - -18.832848342007537
- -40.8041877898373
- 56.400086355209346
- - -34.30636106257907
- 14.919941628715401
- -51.17144953540909
- - 43.92254945700415
- 8.612951695191928
- 56.40008952079757
- - 40.817516597954636
- -78.89138408899306
- -18.735917642678267
- - 23.877607941379665
- 25.4280049246912
- -50.689073077540755
- - 46.59677751525646
- -1.9823831731911679
- -29.52122472283304
- - 18.520306306322027
- -78.89139899015429
- 41.00677397697569
- - -44.78794821766519
- -6.98100340408558
- -8.485656250380575
- - 39.63746426252419
- -17.50124077169935
- -51.22385179265488
- - -30.66873264312744
- -78.89136918783187
- -32.780681180954
- - -28.073899764505086
- -25.276248896065628
- -55.747206639860295
- - 28.04703326715162
- 33.277016103072064
- -41.01323999060382
- - 44.667931036944765
- -78.89139153957368
- 4.715480777575771
- - 43.2327860737862
- 12.023770387041248
- 12.123098796997231
- - 26.67421331379046
- -36.20488588741861
- 56.40008611681323
- - -20.92236590443622
- 29.503404356266934
- -49.91538286452821
- - -19.988646574030554
- -39.11587212042019
- 56.33151994812653
- - 27.965345534014205
- -78.89136918783187
- -35.101132640697365
- - 43.30355569058679
- -6.844615725477048
- -48.273816952009895
- - 38.17963886260986
- -3.558720135688764
- -53.203840184211714
- - -43.59861974276055
- -6.858811990947779
- -46.965588078442295
- - -21.745373575815393
- -78.89139899015429
- 39.443900123673124
- - 40.83139686262007
- -78.9623843458622
- 18.748324933364863
- - -10.812881875839139
- -78.89136918783187
- -43.48717293909372
- - 36.10730331536524
- 18.720304461662543
- -48.626722742264285
- - 44.71509816425532
- 4.884157842473346
- 56.400086501702404
- - 43.07846964779674
- 9.579542234001783
- -43.16937661925484
- - 42.893582206391784
- 13.472539852686092
- 43.663134985160475
- - 4.5189431921648975
- -78.89139899015429
- 44.82281343055691
- - 42.975740777347255
- 8.854185470131402
- 56.27337143996393
- - -30.55872320245703
- 19.707892982588355
- -51.052863689464765
- - 22.36852971286271
- 35.60645983803408
- -44.09164286393003
- - 34.952205928688045
- -78.89137663841247
- -28.17675486272575
- - 32.81660048703566
- -25.8562482301075
- -54.244308209147206
- - 42.09955924168776
- -11.436582394460778
- -49.3183709877051
- - 44.64050131251156
- -78.89139153957368
- -4.734026765800798
- - 43.27335688165249
- 2.48608524978561
- -47.5088471405771
- - 34.71478206985262
- -11.94680609674808
- -54.50274377270632
- - -44.36695136784897
- -78.89137663841248
- -7.156363348534746
- - -44.38951263168042
- -2.1086476096134934
- -43.663408648275094
- - -39.11951555604014
- -16.435982222946084
- -52.21960934311
- - 38.558300775810494
- -23.06899312299529
- 56.40008579872816
- - -7.254940010661812
- -42.11136044609058
- -55.889080152928834
- - -22.55457536170843
- -78.89136918783187
- -38.78408167285264
- - 10.440883169118933
- -78.89136918783187
- -43.600566368882575
- - 36.9932495413766
- 8.395439268080816
- -51.838382610994834
- - 44.582358496415054
- -5.5097795398523
- 56.40008635520937
- - 36.181972402548126
- 24.885827731417
- -40.81432335596348
- - 40.623310537353746
- 16.466398922750006
- -43.26002524263617
- - 4.499702445274352
- -44.52760833856607
- 56.400082772010556
- - 11.601304868493116
- -78.89139899015429
- 43.507048135364464
- - -10.900868351221334
- -78.89139899015429
- 43.70825398722629
- - 42.81136226726221
- 13.777466422148999
- 43.66129103742211
- - -33.96433692570213
- 2.5326705169771864
- -53.30911943840485
- - 14.237223054988362
- 29.025235220661266
- -50.7264901789183
- - 27.75633004739734
- 29.312757871489843
- -47.39166187285669
- - 39.64612570829331
- -78.89138408899306
- -21.042583552438522
- - 24.410302170992736
- -78.89136918783187
- -37.645273347854534
- - 43.37357614983739
- -78.89138408899308
- -11.719594141621037
- - 39.80137419409857
- -12.870866381387748
- -52.126126731931016
- - 45.717553236000185
- -10.483776108102417
- -35.780668024627325
margin: 1
- link_4_compound_convexHull_1:
shape:
shape_type: convex_hull
vertices:
- - -34.186270556409454
- -2.2219841817447774
- -53.739173235809034
- - -20.34508591649319
- 33.59210630063097
- -47.53181146292944
- - -21.745373575815393
- -78.89139899015429
- 39.443900123673124
- - -34.14720665240725
- -29.13998382835035
- 56.40009475675731
- - -42.63185391456227
- 14.277153954844582
- 56.400109029380666
- - -19.35815222634028
- -40.50090133283376
- 56.400086355209346
- - -44.36695136784897
- -78.89137663841248
- -7.156363348534746
- - -20.840332968119355
- 19.659156498294173
- -51.82537984954967
- - -43.79198258456063
- 16.459855270540128
- -24.909057129652517
- - -28.187029394206547
- -34.842432465361895
- 56.40008820619394
- - -34.941974848821474
- 26.231223675046355
- 56.11812890328875
- - -41.381505637676355
- -78.89138408899309
- 17.64635709412729
- - -32.17923635786224
- 18.975217278278556
- -50.64278014263001
- - -43.25750991037762
- -79.18054857254029
- -7.354808178656306
- - -17.989663334894658
- -63.993895854159696
- 41.409013062938755
- - -46.40998138874352
- 4.41941284670757
- -26.94983517994569
- - -24.957993310953043
- -37.26780899716243
- 56.40008635520935
- - -20.51657309244274
- 38.52463852160152
- -39.95160124752009
- - -37.02651288563766
- 25.17590218442965
- 56.40011615753177
- - -34.201340938790054
- -78.89139295980482
- 29.22918725509242
- - -44.301744878422824
- -6.828848603131146
- 56.40010125637056
- - -33.96433692570213
- 2.5326705169771864
- -53.30911943840485
- - -20.43375911825524
- 29.975406941153032
- -49.8483421079069
- - -36.39428608589378
- -2.2637675324132025
- -53.40352806519613
- - -43.711763071103405
- -78.89138013580464
- 10.572046528713933
- - -44.881658872099706
- 13.494531235524942
- -23.778991627932207
- - -42.611686955257255
- 8.375780316636813
- -46.41900454906979
- - -31.63927310735471
- 29.41632682643335
- -43.27741680967402
- - -17.93380334406379
- -53.121969830261186
- 41.450078741325974
- - -38.9710636138916
- 22.49946198463437
- 56.40011615753176
- - -28.74639766268342
- 34.5736942565319
- -21.465123601038258
- - -28.23717998559573
- -78.89139899015429
- 35.08409204244125
- - -22.779739366090098
- -79.1805709242821
- 37.53930624888499
- - -43.694378892004806
- 9.685317913443047
- 56.4001052902102
- - -41.28707878570094
- -17.29864536808196
- 56.400101256370554
- - -29.822425838616937
- 21.38842196803241
- -50.71329458026212
- - -36.87971307857515
- 8.39382211255957
- -51.846964516963446
- - -42.79744338989258
- -13.906295084953339
- 56.400101256370554
- - -42.833047512521034
- -2.147775101679009
- -48.92236017414203
- - -44.92133032150218
- 13.129798651164704
- -26.22444455819194
- - -23.520201707989827
- 35.301998023748034
- -43.791637487367225
- - -35.37547302246094
- 20.028268313407914
- -48.49911146163938
- - -38.75953417852929
- 21.098457539305446
- -40.90532305547702
- - -20.154344584531827
- 38.04933815706911
- -42.083689671937904
- - -38.996145237908195
- 25.873331413390485
- -21.15370517098204
- - -30.523876469470224
- 31.61399403281222
- -39.618827024321845
- - -24.80202925302501
- -78.89139899015429
- 37.56492674026605
- - -37.65731259117433
- -78.89138408899309
- 24.662818265975055
- - -46.12777758399261
- 7.512746707052867
- -25.997835211116634
- - -37.712108285041495
- -24.23332549372031
- 56.400099560067616
- - -20.726813112179343
- 25.484005527366968
- -51.006833823283884
- - -26.155588150024414
- 30.600105738639847
- -47.34015874862668
- - -35.136630310196324
- 2.5096072441577015
- -53.1121170558782
- - -41.7290776403504
- -16.349979602975548
- -43.598296116142826
- - -46.03481185644614
- -8.129984944572625
- -34.65278440652873
- - -39.24024864844296
- 1.0964275652651683
- -52.06140930460015
- - -40.16894336572386
- 8.252046045195549
- -49.80251568214819
- - -35.71259126290988
- 14.226126513208863
- -50.628690614071665
- - -41.029012326035854
- 15.438475140403105
- -43.16250083118282
- - -36.55225322170281
- 22.34812685061444
- -45.0240029693208
- - -27.021918365158626
- 34.0523155631362
- -40.90354667722154
- - -21.494005331522658
- 36.41675329046952
- -43.810143313780955
- - -39.92306033244563
- 24.00126133543632
- -19.087579919397076
- - -37.66466505217818
- 27.553002529559627
- -17.82559358974972
margin: 1
- link_4_compound_convexHull_2:
shape:
shape_type: convex_hull
vertices:
- - 43.32667076234861
- 9.047757852528056
- -42.8205848272947
- - -36.60738482633883
- 25.752781548114914
- 56.40011615753177
- - -28.295930965156003
- 33.26117284233427
- -40.10094196521091
- - -35.45362609896847
- 27.340791669903556
- 56.40011615753177
- - 43.92254945700415
- 8.612951695191928
- 56.40008952079757
- - -36.85245028057125
- 28.79013431137833
- -17.535375010171478
- - 43.08676713220734
- -2.4170607946121407
- -32.07296261882186
- - 19.703029797669615
- 42.64686676870895
- -12.728154898064284
- - -16.63303199676193
- 43.82171964890197
- -11.778513565116763
- - 44.93539859891598
- -2.1636094669408337
- -15.782726690901486
- - -37.13089853972565
- 25.25174292232171
- -0.012533952000399196
- - -20.811270770341025
- 29.10667906560746
- -50.13920848339926
- - 39.68208558479205
- 25.024385994169087
- -19.828684218165552
- - 10.234888799334158
- 43.73059165862378
- 56.40010870695118
- - -25.900893719816622
- 39.15390600171529
- -13.912871055149377
- - 5.776300796306259
- 42.45561881877335
- -41.745807979645896
- - -37.02988420306042
- 25.178351593816846
- 54.578170873570585
- - 45.801653732039995
- -2.3569752488150315
- -34.51718841915502
- - -37.22215305232089
- 27.647401053900676
- -21.492574373044693
- - 45.82822598339885
- 9.815948145118977
- -25.774820006730206
- - 30.21519182873476
- 33.01547294496237
- 56.400101256370576
- - -9.5302336438574
- 43.95946845684483
- 56.40011615753178
- - 0.9753457025283296
- 46.69745469245647
- -10.264699091779313
- - -30.619833628628385
- 35.368742399787216
- -15.003367863382477
- - -20.008028317213757
- 38.8341288843378
- -39.8065118393035
- - 21.568149164650777
- 29.02204628922501
- -49.82563039757382
- - 46.46072436621171
- -1.583780950688934
- -29.296781874351495
- - 45.018055603714856
- -2.119648089779685
- -36.514370145268
- - -35.51898481354215
- 30.567479949100324
- -18.859187371481582
- - 42.10947020009098
- 15.450985916411955
- 56.40009514586047
- - 40.97405829582249
- 16.847074291761192
- -41.21598630918938
- - 45.61902205642127
- 2.3178256434653837
- -33.40110557381132
- - 27.944142695335813
- 37.741244977831805
- -14.715517222571533
- - 22.04484316222488
- 38.94882472456845
- 56.400105285322
- - -26.150492083887002
- 36.578237430768326
- 56.40011615753177
- - 8.021859099650783
- 46.13735434408421
- -13.109945408521078
- - -7.375967856652551
- 46.20765243599306
- -13.056220530572041
- - -30.656560171313913
- 35.37481098360988
- -17.555839001212334
- - -16.85647842918752
- 43.760019194661545
- -14.050336236530805
- - -24.863024652462627
- 36.43682835590444
- -37.53616262203418
- - -8.404471551481492
- 40.253983868365985
- -44.93390501533052
- - -19.27730427604797
- 34.54514785304365
- -47.19916880052891
- - 8.274030521768964
- 29.28778255414803
- -50.98300732457584
- - 43.58790492879439
- 8.433940285256275
- -42.45804821889009
- - 45.13317785685035
- -2.2044539983649667
- -36.16909714769636
- - -35.3206290172368
- 30.833057438824007
- -17.308634792885854
- - 43.22859814744265
- 18.111102178138577
- -22.468106193627072
- - 43.42914133422482
- 10.934344889411282
- 56.40009140036164
- - 37.29581151913021
- 24.805566133923495
- 56.400101256370576
- - 44.41861226696983
- 14.242819191369632
- -26.14065046243956
- - 42.09913994792714
- 13.200378988097944
- -42.454941224094874
- - 37.32193545878158
- 28.334781835169885
- -19.074274835703093
- - 28.89679141022725
- 32.86272636337766
- -39.69599217339798
- - 17.53168648754786
- 41.35972059480807
- 56.40010870695118
- - 24.273957971572827
- 40.210781019955085
- -13.724140725976763
- - 25.82499788489963
- 36.76635424280957
- 56.400101828403024
- - -20.025351824666814
- 40.11462470720312
- 56.40011615753178
- - 7.925919925991366
- 46.12301169395261
- -10.683494408583677
- - 15.013160670041998
- 41.344332357328156
- -37.30236810848289
- - 2.1361351527154966
- 43.82294278003805
- -37.443842660419115
- - -13.07203279712894
- 44.9872521283551
- -11.662584850613266
- - -7.2310403170192785
- 46.18199712040403
- -10.617690092322938
- - -10.83546610814551
- 42.54854712750422
- -37.469750561731765
- - -25.825889929571304
- 35.2874015840256
- -39.69592524423142
margin: 1
- link_5_compound_convexHull_0:
shape:
shape_type: convex_hull
vertices:
- - 27.018073081970215
- 63.30498495101927
- -35.94153621196752
- - 44.7536735534668
- 4.699135208129848
- 56.299452996253905
- - 42.80987512117349
- -7.949420619356868
- -46.432865895619074
- - -9.053700914097135
- -42.94550103272132
- -37.820523292132215
- - -42.93086781136776
- 13.272839793612905
- 56.299452996253905
- - 26.10429931774206
- -36.6103167245992
- 56.299438095092704
- - -30.37554592949823
- 27.207819349831933
- -55.13784684799621
- - 44.529693971955794
- 63.285483681462495
- -6.299950337512669
- - 40.70804128248005
- -18.604124962363777
- 56.299438095092704
- - 25.854722181928082
- -35.27148808661706
- -39.85597910814477
- - -26.05817823927805
- -36.636731750981916
- 56.299438095092704
- - 18.904199214046002
- 36.17803066526605
- -56.39701828645594
- - -44.10377418150847
- 63.27752624005407
- 8.66081731674889
- - 46.40174263434824
- -4.256987002109164
- -27.1178583836317
- - 39.63349254012087
- 17.51145042309599
- -51.320507713762346
- - 6.983556741059374
- -46.345581221262364
- -11.076560822120296
- - 36.75747203826904
- -29.16238269805911
- -19.946525478363107
- - 10.322691973505925
- -29.746641740924822
- -50.877841081520565
- - -43.903346891041565
- -16.43227016653845
- -24.948904928791084
- - -5.781422642349526
- 63.30498495101927
- -44.55764532511934
- - -43.02328802278498
- 63.3311543771875
- 12.922715328270769
- - 46.446724107437376
- 4.218985621386004
- -30.52243184861382
- - 44.050147964518146
- -8.01834713043871
- 56.29943809509271
- - 38.55737218681202
- 63.29829366673558
- -23.114675085972735
- - 28.986114959179986
- 31.26621526277918
- -54.43089788333929
- - 24.879940367642348
- -39.72352337524758
- -15.751915556459474
- - 6.798865609967379
- -42.954450879100015
- -39.925042115077
- - -7.855531692504883
- -46.29299602508548
- -11.009077215194775
- - 7.004261645038241
- -44.268489495416915
- 56.29943434910384
- - 33.430399838643325
- -30.125771594484387
- 56.299438095092704
- - 42.92203873145945
- -18.616211492601348
- -21.901718919450335
- - 37.508804103378225
- -21.565121074368346
- -44.64545680191117
- - -20.004911203657457
- 33.085610543156164
- -56.53887465139481
- - 36.887221477551066
- -7.953611761263285
- -52.0535401359796
- - -32.68379759853292
- -18.686398734006136
- -50.7856207792212
- - -42.89115505141626
- -13.468931103016407
- 56.29943809509271
- - -42.82722549850769
- 8.913387249569123
- -48.52215135176864
- - 11.186907474665304
- 63.30498495101927
- -43.48699357998639
- - -36.44669487124588
- 63.30498495101927
- -26.302742956925997
- - 10.124134261080599
- 63.30498495101926
- 43.80189313733764
- - 42.90583152036038
- 8.897156992810206
- -48.58441276711976
- - 44.02831394318059
- -1.5961799210693541
- -45.40951615793335
- - 46.30299808184782
- -7.9342962377917425
- -26.861271674481515
- - 21.919497649253117
- 36.82756204933527
- -55.120529039924996
- - 34.437186763800355
- 26.850403137999404
- -52.31045117014428
- - 28.151672114482608
- -37.59800339662055
- -15.889764503146106
- - 15.502237051804968
- -43.98500421466716
- -14.421889171205075
- - 16.371997181408233
- -36.37841201695628
- -46.808507153908344
- - -0.452878478037519
- -44.21173292700361
- -32.52005126034289
- - -27.91095046020223
- -37.763282185853754
- -14.774560329941645
- - -8.022054253005308
- -44.16146447306845
- 56.29943597089166
- - 38.7730903688514
- -22.777648485338
- 56.299438095092704
- - 43.116019032673194
- -12.413256651190272
- 56.29943809509271
- - 32.08513748070527
- -30.140563251889073
- -39.976361309382135
- - 39.74370595899745
- -24.800614203551877
- -21.269444344397364
- - 41.81359979083186
- -14.252500614023637
- -42.10269346118943
- - 20.083261351938972
- 33.084212492034126
- -56.5086976168572
- - -3.6794942079686734
- 42.220321799618546
- -56.29841434434645
- - -23.81576249997738
- 63.30498495101927
- -38.1069461485106
- - 38.569199915041736
- -14.0792692202422
- -48.9861898292651
- - 36.33742794549357
- 15.1832824142553
- -54.27518604699142
- - -12.397516201661574
- -36.6688410064716
- -47.76178432063737
- - -34.17508237980246
- -4.8630964341518235
- -53.121958749023875
- - -36.44251629774203
- -25.98472664538275
- 56.299438095092704
margin: 1
- link_5_compound_convexHull_1:
shape:
shape_type: convex_hull
vertices:
- - 43.42171267990511
- 63.60169687271116
- -6.433382256231354
- - 44.107025498927214
- 63.304984951019264
- 8.64328558473197
- - 44.529693971955794
- 63.285483681462495
- -6.299950337512669
- - 44.530467601051896
- -6.147506376584015
- -14.032869090954565
- - 19.04764573204443
- 40.675237794098976
- 56.2994665361774
- - 44.7536735534668
- 4.699135208129848
- 56.299452996253905
- - 44.23713083177768
- 9.172407817586762
- -14.038157644684217
- - 18.808853800669567
- 63.30498495101926
- 40.8250406051764
- - 44.55199214933009
- -5.995824273197083
- -14.032580526238975
- - 44.69686650493031
- -5.080696820656714
- 41.5786292013033
- - 19.55479913646377
- 63.60169687271115
- 39.29960969630112
- - 19.55479913646377
- 52.543306732177705
- 39.29960969630112
- - 35.46543987799532
- 63.30498495101926
- 27.619394759326823
- - 43.58943590457693
- 4.855826597937154
- 56.299452996253905
- - 19.442696687427542
- 39.34806376737954
- 56.29945760965425
- - 44.718391053208734
- -4.929014717269746
- 41.578917766020055
- - 19.85599657876628
- 40.79230624047302
- 40.852893053425625
- - 42.93398264060829
- 13.260455433970522
- 56.299452996253905
- - 28.08847362099118
- 63.30498495101926
- 35.09102660715796
- - 40.690299850049314
- 63.29720811789431
- 19.11911976189164
- - 44.533930377637944
- -6.147997762386147
- -0.9478010342309076
- - 19.72067249799693
- 38.65403503892621
- 48.016621644926694
- - 23.724198001801142
- 63.30498495101926
- 38.16885203865583
- - 38.86592236277784
- 22.64056856590895
- 56.29945299625391
- - 43.044026500074324
- 63.304984951019264
- 12.845592274510622
- - 37.62923245820025
- 63.30498495101926
- 24.55957661347928
- - 19.63164050319483
- 63.30498495101926
- 40.4370185115789
- - 34.24784242560281
- 28.99682505685334
- 56.29945299625391
- - 40.78059205433328
- 18.43189035163651
- 56.29945299625391
- - 26.188828169855014
- 36.55220621482475
- 56.2994534748865
- - 30.094206168452956
- 33.12038723502772
- 56.29945299625391
margin: 1
- link_6_compound_convexHull:
shape:
shape_type: convex_hull
vertices:
- - 6.411412797885305
- 44.513967026775944
- -59.69690255095025
- - 43.71572939888688
- 9.99193282924489
- -9.00055117607121
- - 40.84082599918588
- -15.557723548393525
- -61.520855164949324
- - -1.4888183749733344
- -51.097127606603784
- -38.7682058126134
- - -42.6571285922314
- 13.511194984511066
- -8.840240956173258
- - 30.78100753783542
- -32.718144718831624
- -8.977297670596165
- - -37.872172481649386
- -21.755737812006608
- -61.47889759334806
- - 38.90086838167235
- 22.56688014237723
- -59.69836458495626
- - 3.676215473024058
- 44.5047990060588
- -8.850665899384285
- - 42.69213363690665
- -13.594005742782555
- -8.903546469002155
- - 25.378252031662214
- -37.11184433026591
- -59.76445622444158
- - -24.38367287409733
- -35.42349027970492
- -7.057853395953836
- - -3.618370930827041
- 43.5594159790149
- -61.4996790004242
- - 44.639124566792816
- 5.3872293502924995
- -59.764426422119186
- - 25.306017911158733
- 37.0344790518255
- -9.000521373748816
- - 37.12040989351317
- -25.358183853689248
- -59.76445622444158
- - 3.3502730387940574
- -50.95227703658389
- -36.31266717148496
- - 12.6909202113211
- -41.79728091916829
- -61.504567041336465
- - -27.956504021991122
- -35.24736165173976
- -59.655488022489415
- - -40.64309797485362
- -19.131168123314932
- -9.000551176071216
- - 27.97032446073308
- -13.474423528151867
- -0.5450352422919339
- - -43.56489239345524
- 1.7140279933997244
- -61.52082629203801
- - 36.252926300882564
- 24.364040199320172
- -61.46649309360998
- - -6.3168482845699145
- 44.46360947398918
- -59.76439661979679
- - 43.59850430166739
- 10.821013886186348
- -59.764426422119186
- - 44.576925867018645
- -5.516833426841843
- -59.764445067677684
- - 16.321508153842387
- 41.77540628150847
- -8.86257830321812
- - 37.045647535071566
- 25.281302288704328
- -9.000551176071207
- - 39.85270403460004
- -20.7572602825414
- -9.000578047563357
- - 41.86016021786372
- -16.444686968547224
- -59.73666285839881
- - 33.39302806489013
- -28.063633376336767
- -61.48856532880965
- - 34.34190872962563
- -28.96767147560094
- -59.76445622444158
- - 23.68774086208896
- -38.18898778004808
- -8.935966383751643
- - -9.890437612662708
- -43.662858812279524
- -8.888386316762999
- - 10.97577522980373
- -43.626562567992394
- -59.724428104586146
- - -23.63779399260511
- -38.19929391642141
- -8.922405287878698
- - -19.810947288063062
- -38.96854413595099
- -61.50732194948214
- - -30.577357625254535
- -3.6616185212020724
- -0.4901981372123609
- - -37.07417129113264
- -25.37868257555514
- -59.76443520316122
- - 42.79822505790435
- -2.7509577604295696
- -7.023598516682399
- - -44.4376568306709
- -5.434927744316552
- -8.861023756748297
- - 40.88861688883799
- 15.43194288733524
- -61.51062583534056
- - 18.158388497449096
- 39.70852025078017
- -61.48215017256654
- - -3.577996898484116
- 44.50932734421151
- -8.846137561231604
- - -35.17045284172514
- 27.9300042136351
- -59.76439661979679
- - 41.749243160313426
- 16.267641122736226
- -9.000551176071209
- - 43.642548509048765
- -0.8907025192704842
- -61.52082629203801
- - 44.57559673767605
- -4.513425067433564
- -8.824012348827297
- - 10.896859658957737
- 43.48136609003495
- -9.000521373748816
- - 13.465028167466016
- 27.917705431947454
- -0.501787979613419
- - 34.43072687340555
- 28.92100762387004
- -59.741146796206344
- - 36.26729736483048
- -26.41081802507664
- -8.923205664785092
- - 39.068859964267176
- -18.138450136985163
- -7.15980775820447
- - 39.85269727795844
- -20.757237360027514
- -48.75056095123296
- - 41.71623073836372
- -16.362314139698714
- -9.000580978393604
- - 43.60262720751052
- -10.95920738298039
- -59.764456224441574
- - 36.2311340411095
- -24.39004876670129
- -61.40371203010333
- - 19.84738449046972
- -38.93276488007755
- -61.51250513529718
- - 28.932257299107505
- -34.35864650537766
- -59.76445622444158
- - 30.00323986058538
- -33.49674537124163
- -9.000580978393607
- - -2.220424982515624
- -50.94462485547118
- -32.760025592471735
- - 8.091740955919022
- -29.7991987122843
- -0.49039156550356416
- - 2.367977804788552
- -51.11717990636829
- -38.100892706050374
- - -34.288175684959015
- -28.902870703729366
- -9.000559818243751
margin: 1
tool:
tool:
shape:
shape_type: box
size_x: 5
size_y: 5
size_z: 100
box_type: FULL
pose:
position:
- 0
- 0
- 50
margin: 0
self_collision_detection: true
start_joint_position:
- 3.1796927452087402
- -0.4525286555290222
- 1.8372150659561157
- 0.22418241202831268
- 2.355468988418579
- 1.6246520280838013
target:
- 0.95139851
- -1.1544104
- 1.51209009
- 0.0130628
- 0.72503735
- 0.49837699
algorithm:
algorithm_name: RRTConnectAlgorithm
step_size:
min: 0.01
max: 0.2
MultiSearchCollisionFreeRequest_UR5e:
value:
motion_group_setups_by_motion_group_key:
'0':
motion_group_model: UniversalRobots_UR5e
cycle_time: 8
mounting:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
global_limits:
joints:
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
tcp:
velocity: 300
'1':
motion_group_model: UniversalRobots_UR5e
cycle_time: 8
mounting:
position:
- 700
- 0
- 0
orientation:
- 0
- 0
- 0
global_limits:
joints:
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
- position:
lower_limit: -6.283185307179586
upper_limit: 6.283185307179586
tcp:
velocity: 300
path_definitions_by_motion_group_key:
'0':
start_joint_position:
- 2.1396
- -1.2019
- 1.353
- 1.4196
- 1.5708
- 0.5688
target_joint_position:
- 3.5569
- -1.2019
- 1.353
- 1.4196
- 1.5708
- 1.9861
'1':
start_joint_position:
- -1.002
- -1.2019
- 1.353
- 1.4196
- 1.5708
- 3.7104
target_joint_position:
- 0.4153
- -1.2019
- 1.353
- 1.4196
- 1.5708
- 5.1277
collision_setups:
default:
collision_motion_groups_by_motion_group_key:
'0':
self_collision_detection: true
link_chain:
- link_0_sphere:
shape:
shape_type: sphere
radius: 100
pose:
position:
- 0
- 0
- -10
link_0_capsule:
shape:
shape_type: capsule
radius: 50
cylinder_height: 20
- {}
- link_2_sphere:
shape:
shape_type: sphere
radius: 100
- {}
- {}
- link_5_sphere:
shape:
shape_type: sphere
radius: 100
'1':
self_collision_detection: true
link_chain:
- link_0_sphere:
shape:
shape_type: sphere
radius: 100
pose:
position:
- 0
- 0
- -10
link_0_capsule:
shape:
shape_type: capsule
radius: 50
cylinder_height: 20
- {}
- link_2_sphere:
shape:
shape_type: sphere
radius: 100
- {}
- {}
- link_5_sphere:
shape:
shape_type: sphere
radius: 100
algorithm_settings:
algorithm_name: RRTConnectAlgorithm
max_iterations: 10000
MergeTrajectoriesRequest_UR5e:
value:
motion_group_setup:
motion_group_model: UniversalRobots_UR5e
cycle_time: 8
mounting:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
tcp_offset:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
global_limits:
joints:
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
- position:
lower_limit: -2.8623399732707004
upper_limit: 2.8623399732707004
velocity: 3.14
acceleration: 40
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
- position:
lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
velocity: 3.14
acceleration: 40
trajectory_segments:
- trajectory:
joint_positions:
- - 0
- -1.57
- 1.36
- 0
- 0
- 0
- - 0.12
- -1.57
- 1.36
- 0
- 0
- 0
- - 0.24
- -1.57
- 1.36
- 0
- 0
- 0
- - 0.36
- -1.57
- 1.36
- 0
- 0
- 0
- - 0.48
- -1.57
- 1.36
- 0
- 0
- 0
- - 0.6
- -1.57
- 1.36
- 0
- 0
- 0
times:
- 0
- 0.1
- 0.2
- 0.3
- 0.4
- 0.5
locations:
- 0
- 0.2
- 0.4
- 0.6
- 0.8
- 1
blending:
blending_name: BlendingPosition
position_zone_radius: 50
- trajectory:
joint_positions:
- - 0.6
- -1.57
- 1.36
- 0
- 0
- 0
- - 0.6
- -1.496
- 1.288
- 0
- 0
- 0
- - 0.6
- -1.422
- 1.216
- 0
- 0
- 0
- - 0.6
- -1.348
- 1.144
- 0
- 0
- 0
- - 0.6
- -1.274
- 1.072
- 0
- 0
- 0
- - 0.6
- -1.2
- 1
- 0
- 0
- 0
times:
- 0
- 0.1
- 0.2
- 0.3
- 0.4
- 0.5
locations:
- 0
- 0.2
- 0.4
- 0.6
- 0.8
- 1
blending:
blending_name: BlendingPosition
position_zone_radius: 50
- trajectory:
joint_positions:
- - 0.6
- -1.2
- 1
- 0
- 0
- 0
- - 0.48
- -1.274
- 1.072
- 0
- 0
- 0
- - 0.36
- -1.348
- 1.144
- 0
- 0
- 0
- - 0.24
- -1.422
- 1.216
- 0
- 0
- 0
- - 0.12
- -1.496
- 1.288
- 0
- 0
- 0
- - 0
- -1.57
- 1.36
- 0
- 0
- 0
times:
- 0
- 0.1
- 0.2
- 0.3
- 0.4
- 0.5
locations:
- 0
- 0.2
- 0.4
- 0.6
- 0.8
- 1
InverseKinematicsRequest_UR5e:
value:
motion_group_model: UniversalRobots_UR5e
mounting:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
tcp_offset:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
joint_position_limits:
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
- lower_limit: -2.8623399732707004
upper_limit: 2.8623399732707004
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
tcp_poses:
- position:
- 400
- 0
- 100
orientation:
- 0
- 0
- 0
- position:
- 400
- 0
- 150
orientation:
- 0
- 0
- 0
ConfiguredPoseInverseRequest_UR5e:
value:
motion_group_model: UniversalRobots_UR5e
tcp_poses:
- pose:
position:
- 400
- 0
- 400
orientation:
- 0
- 3.141592653589793
- 0
kinematic_configuration:
kinematic_branch:
wrist_branch: FLIP
elbow_branch: DOWN
shoulder_branch: FRONT
- pose:
position:
- 350
- 150
- 500
orientation:
- 0
- 3.141592653589793
- 0
kinematic_configuration:
kinematic_branch:
wrist_branch: NO_FLIP
elbow_branch: UP
shoulder_branch: FRONT
- pose:
position:
- 450
- -100
- 300
orientation:
- 0
- 3.141592653589793
- 0
kinematic_configuration:
kinematic_branch:
wrist_branch: FLIP
elbow_branch: DOWN
shoulder_branch: FRONT
ConvertVendorConfiguredPoseRequest_ABB:
value:
vendor_configured_poses:
- pose:
x: 600
'y': 0
z: 800
q1: 0
q2: 0
q3: 1
q4: 0
confdata:
cf1: 0
cf4: 0
cf6: 0
cfx: 1
- pose:
x: 600
'y': 200
z: 700
q1: 0
q2: 0
q3: 1
q4: 0
confdata:
cf1: 0
cf4: 0
cf6: 0
cfx: 6
- pose:
x: 500
'y': -150
z: 900
q1: 0
q2: 0
q3: 1
q4: 0
confdata:
cf1: -1
cf4: 0
cf6: -1
cfx: 2
ForwardKinematicsRequest_UR5e:
value:
motion_group_model: UniversalRobots_UR5e
joint_positions:
- - 0
- 0
- 0
- 0
- 0
- 0
- - 0
- 0
- 0
- 0
- 0
- 0.1
ProjectJointPositionDirectionConstraintRequest_UR5e:
value:
motion_group_model: UniversalRobots_UR5e
mounting:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
tcp_offset:
position:
- 0
- 0
- 0
orientation:
- 0
- 0
- 0
joint_position_limits:
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
- lower_limit: -2.8623399732707004
upper_limit: 2.8623399732707004
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
- lower_limit: -6.284930636431581
upper_limit: 6.284930636431581
joint_positions:
- - 0
- 0
- 0
- 0
- 0
- 0
- - 0
- 0
- 0
- 0
- 0
- 0.1
constraint:
constraint_name: DirectionConstraint
world:
- 0
- 0
- 1
tcp:
- 0
- 0
- -1
tolerance: 0.00001
responses:
NotFound:
description: Specified resource could not be found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
PreconditionFailed:
description: Request violated precondition(s) and could not be processed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: |
The request was invalid or couldn't be sent due to other reasons. Client side error,
e.g., malformed request syntax, invalid request parameters, or invalid content.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
TooManyRequests:
description: |
Too many requests sent in a given amount of time.
The client needs to wait before sending additional requests.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotImplemented:
description: |
Server does not recognize the request method or lacks the functionality to fulfil it.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
Content-Type:
explode: false
style: simple
schema:
type: string
Content-Length:
explode: false
style: simple
schema:
type: integer
minimum: 0
Last-Modified:
explode: false
style: simple
schema:
type: string
format: date-time
Metadata:
explode: false
style: simple
schema:
$ref: '#/components/schemas/MetadataObject'