# LumiScan VGR 1.8.4.6 – complete documentation

> All pages of the LumiScan VGR 1.8.4.6 manual (language: en) by HD Vision Systems GmbH, in navigation order. Each page starts with a level-1 heading followed by its URL; cite that URL. Manual: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/

# LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/index.html

|   |   |   |
| --- | --- | --- |
| ![LumiScan X camera above a bin of jumbled parts](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/intro/step-1.svg)<br><br>**Capture the bin in 3D.** LumiScan X builds a point cloud of the parts. | ![Point cloud with one part detected and its grip point marked](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/intro/step-2.svg)<br><br>**Find the parts and the best grip.** Pose of each object, grip points and a collision-free path. | ![Robot arm picking a part from the bin](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/intro/step-3.svg)<br><br>**The robot picks.** The PLC gets the best grip point over PROFINET or OPC UA. |

LumiScan VGR is vision-guided robotics software for bin picking and automated assembly. It builds point clouds from the LumiScan X 3D camera, localizes the parts by matching 3D models or with machine learning for complex scenes, computes grip points and plans a collision-free path for the robot. The PLC controls each step and receives the best grip point over PROFINET or OPC UA.

For licensing, see [Licence](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/system-requirements.html#licence). Questions or an error message? See the [FAQ](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/faq.html).

# Description – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/description.html

LumiScan VGR is software that can be used for a variety of applications, such as bin picking or automated assembly.

The high-quality data received from the camera is used to generate accurate point clouds for object localization.

Two approaches are used:

- The generated point cloud is compared with 3D models of the objects.
- Machine learning algorithms are used for more complex scenes.

This makes LumiScan VGR highly adaptable to different object textures.

The robot kinematics and collision network calculate the robot’s path and enable collision-free movement.

LumiScan VGR is organized into modules that contain one or more cameras, pipelines, and robots (Fig. 1).

**LumiScan VGR: modules, PLC and robot**

```mermaid
%% LumiScan VGR - modules, PLC and robot. Rendered by Mermaid in the browser; edit and preview at https://mermaid.live
flowchart LR
  sensor["LumiScan X"]
  subgraph vgr["LumiScan VGR"]
    direction LR
    cam["`**Camera module**
    changeable`"]
    pipe["`**Pipeline module**
    changeable`"]
    robotmod["`**Robot module**
    changeable`"]
    cam -- data --> pipe -- objects --> robotmod
  end
  plc["`**PLC**`"]
  robot["Robot"]
  sensor --- cam
  plc -- TriggerCamera --> cam
  plc -- ComputeObjects --> pipe
  plc -- "GetBestResult, GripBestResult" --> robotmod
  robotmod -- grip points --> plc
  plc -- grip points --> robot
  class cam,pipe,robotmod key
  classDef key fill:#faf6dc,stroke:#a8961f,color:#1f2328
```

At any given time, one set of modules is active, and all functions refer to this active configuration. The active modules can be switched through either the user interface or the PLC.

The general workflow is as follows:

1. A LumiScan camera captures an image and generates a point cloud.
2. Objects are detected in the captured image.
3. The 6-DoF pose of each detected object is calculated using the point cloud.
4. A set of possible grip points is calculated for each object.
5. The best available grip point is transmitted to the PLC via PROFINET.

The software can be configured extensively using JSON settings files.

# System Requirements – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/system-requirements.html

## IPC

The IPC running LumiScan VGR requires:

- Windows 11
- An NVIDIA GPU that supports CUDA 11.8
- CUDA Toolkit 11.8
- cuDNN 8.8.1

The required CUDA and cuDNN installers are provided by HD Vision Systems.

## Communication Interface

At least one of the following interfaces is required for communication with the control system:

- PROFINET
- OPC UA

## Camera

LumiScan VGR requires a LumiScanX camera connected to the IPC via Ethernet.

Before installing and operating LumiScan VGR, make sure that the camera network is configured correctly. Also check the relevant Windows Firewall and virus protection settings.

For detailed information about the required network, firewall, and virus protection settings, refer to the LumiScanX camera manual.

## Licence {#licence}

How LumiScan VGR is licensed depends on where you bought it and where it runs:

| Bought from | Runs on | Licensing |
| --- | --- | --- |
| HD Vision Systems | Windows 11 | The licence is held on your LumiScan Key. It is a one-time purchase and needs no renewal.<br><br>[Licensing path: bought from HD Vision Systems](https://docs.hdvisionsystems.com/en/lumiscan-licensing/1.0.4/path-hdvs.html) |
| ctrlX Store | Windows 11 | The licence is held in ctrlX WORKS. The LumiScan Key is required in addition; it protects the software against reverse engineering.<br><br>[Licensing path: ctrlX Store, Windows](https://docs.hdvisionsystems.com/en/lumiscan-licensing/1.0.4/path-ctrlx-windows.html) |

Each device on which LumiScan VGR runs at the same time needs its own LumiScan Key. Keys can be exchanged between devices.

How to install CodeMeter Runtime and how to request, renew and move licences is described in [LumiScan Licensing](https://docs.hdvisionsystems.com/en/lumiscan-licensing/1.0.4/index.html).

# Installation – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/installation.html

## Installing CodeMeter Runtime {#installing-codemeter-runtime}

LumiScan VGR is licensed with the LumiScan Key and needs CodeMeter Runtime 9.00 or later. Install CodeMeter Runtime and connect the LumiScan Key as described in [Installing CodeMeter Runtime](https://docs.hdvisionsystems.com/en/lumiscan-licensing/1.0.4/installing-codemeter.html).

## Installing LumiScan VGR {#installing-lumiscan-vgr}

Before installing LumiScan VGR, install and configure the LumiScanX camera according to the LumiScanX manual.

To install LumiScan VGR:

1. Close all open applications.
2. Navigate to the location of the LumiScan VGR installer.
3. Double-click `Installer_LumiScan_VGR_va_b_c_d.exe`\*.
4. Wait until the licence agreement window opens.
5. Accept the licence terms by clicking **Accept**.
6. To change the default installation location, click **Browse**, select the desired location, and click **OK**.
7. Click **Next** to continue.
8. If desired, select a **Start Menu** folder for the program links.
9. To avoid creating shortcuts, select **Do not create links**.
10. Click **Install**.
11. When the installation is complete, click **OK**.
12. Click **Finish**.

**where \*a**, **b**, **c**, and **d** depend on the software version.

> [!NOTE]
> The Start Menu selection can be omitted depending on the installation package.

# JSON Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings.html

The JSON settings provide the central configuration interface for LumiScan VGR. They contain information about cameras, recordings, neural networks, robots, objects, pipelines, and other application settings (Fig. 2).

The required parameters depend on the application and project configuration.

![A flowchart showing settings for cameras, networks, robots, objects, geometry, graphics, and motion and their connections to detection, calibration, and other application functions](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/vgr.png)

A project folder is created for each application. It contains all files and folders required for the project.

The main sections of the JSON settings are described in Table 1. Click a parameter name to open the detailed configuration reference for that section.

**Table 1. Table 1: LumiScan VGR Default JSON Settings**

| Parameter | Description |
| --- | --- |
| [`meta`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/meta.html) | Contains metadata about the settings file, including the settings format, target machine, application name, and software version. |
| [`cameras`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/cameras.html) | Contains the physical cameras used by the application. Usually, only one camera is required, but multiple cameras can be configured.<br> Each entry contains the camera `id`, corresponding to the serial number of the LumiScan camera, and the `calibrationFile`. |
| [`recordings`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/recordings.html) | Defines how image and point cloud data are acquired from a LumiScan camera. Settings include filters, depth range, and exposure parameters.<br> Multiple recording configurations can be created to support different scenes or objects. |
| [`networks`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/networks.html) | Contains the neural networks used by the application and defines how they are loaded into LumiScan VGR.<br> Different objects or detection tasks may require different networks or network architectures. |
| [`robots`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/robots.html) | Contains information about the robot geometry and its position relative to the cameras.<br> A physical robot can be represented by multiple robot configurations, for example to describe different grippers.<br><br>Each configuration requires a valid hand-eye calibration transformation and references a robot description file in `.urdf` format.<br><br>Additional 3D geometry can be provided for collision detection. Robots and grippers can also be visualized using CAD models in `.stl` format.<br><br>Objects such as containers can also be represented as robots if their geometry is required for collision detection. |
| [`objects`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/objects.html) | Defines the objects or results that can be detected by the application.<br><br>Objects to be picked are listed individually. LumiScan VGR can use both 2D and 3D data to detect and localize objects in space.<br><br>Depending on the application, detection can be based on:<br><br>- 2D detection using neural networks<br>- 3D object detection<br>- a combination of both methods<br><br>Abstract objects can also be defined, for example composite object characteristics or classification results such as `emptyContainer`. |
| [`pipelines`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/pipelines.html) | Defines how image and point cloud data are processed to determine object poses.<br> A pipeline can contain point cloud processing steps, a region of interest (ROI), and a list of objects to be detected.<br><br>Multiple pipelines can be configured and selected by the PLC. Together with the camera and robot configuration, the active pipeline defines how a gripping operation is performed. |
| [`user`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/user.html) | Optional. Contains user access settings, including password protection for functions requiring elevated permissions, such as `adminPassword` and `manualModePassword`. |
| [`system`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/system.html) | Optional. Contains system settings used for recording and debugging, including which diagnostic data should be recorded. |

## Detailed JSON Settings

Detailed descriptions of the available properties and configuration options are provided on the following pages:

- [Meta Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/meta.html)
- [Camera Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/cameras.html)
- [Recording Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/recordings.html)
- [Network Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/networks.html)
- [Robot Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/robots.html)
- [Object Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/objects.html)
- [Pipeline Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/pipelines.html)
- [User Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/user.html)
- [System Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/system.html)

# Meta Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/meta.html

The `meta` section contains information about the JSON settings file and the LumiScan VGR version for which the configuration is intended.

It identifies the settings format, associates the configuration with a target machine, and records the corresponding application and software version.

## Properties

| Property | Description |
| --- | --- |
| `inputFileType` | Identifies the type of settings file. For LumiScan VGR settings, the value is `LumiScanVGRSettings`. |
| `inputFileVersion` | Specifies the version of the JSON settings format. |
| `targetMachine` | Specifies the machine or system for which the configuration is intended. |
| `programName` | Specifies the application that uses the configuration. For LumiScan VGR, the value is `LumiScanVGR`. |
| `programVersion` | Specifies the LumiScan VGR version associated with the configuration. |

## Metadata Format

The JSON metadata format changed after LumiScan VGR version 1.7.0.0.

**Old Format**

```json
{
  "inputFileType": "LumiScanVGRSettings",
  "inputFileVersion": "1.2.0",
  "VGRVersion": "1.7.0.4",
  ...
}
```

**New Format**

```json
{
  "meta": {
    "inputFileType": "LumiScanVGRSettings",
    "inputFileVersion": "1.2.0",
    "targetMachine": "Inspection1",
    "programName": "LumiScanVGR",
    "programVersion": "1.7.0.5"
  },
  ...
}
```

New configurations should use the current `meta` structure.

# Camera Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/cameras.html

The `cameras` section defines the physical LumiScan cameras used by the project and the settings required to acquire calibrated image and depth information.

These settings include camera identification, exposure control, depth estimation, and corrections applied to the camera data.

## Camera Parameters

- [CameraSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/camera-settings.html)
  - [AutoexposureSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/autoexposure-settings.html)
  - [DepthEstimationSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/depth-estimation-settings.html)
  - [CorrectionSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-base.html)
    - [CorrectionSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings.html)
    - [CorrectionFeature](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-feature.html)
    - [Cloud Scale Correction](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-scale.html)
    - [Cloud Z Calibration](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-z-calibration.html)
      - [Image Distance Pair](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-z-calibration-imagedistancepair.html)

# Recording Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/recordings.html

The `recordings` section defines how image and point cloud data are acquired and prepared for further processing.

Recording configurations can be adapted to different scenes, objects, and acquisition conditions. They can include parameters for image acquisition and filtering of the generated point cloud.

## Recording Parameters

- [RecordingSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/recording-settings.html)

### Point Cloud Filters

- [CloudFilterParameterBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/cloud-filter-parameter-base.html)
  - [ConcreteCloudFilterParameterBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/concrete-cloud-filter-parameter-base.html)
    - [BoxFilterParameter](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/box-filter-parameter.html)
    - [RadiusOutlierRemovalParameters](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/radius-outlier-removal-parameters.html)
    - [RemoveNaNFilterParameter](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/remove-na-n-filter-parameter.html)

# Network Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/networks.html

The `networks` section defines the neural networks available to LumiScan VGR and how they are loaded and used by the application.

Different objects or detection tasks can use different networks or network architectures.

## Network Parameters

- [NetworkSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/network-settings.html)
  - [ModelTrainingParameters](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/model-training-parameters.html)

### Legacy Network Description

The following settings describe the legacy network configuration format.

- [NetworkDescription](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-network-description.html)
  - [InputLayout](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-input-layout.html)
  - [OutputLayout](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-output-layout.html)
  - [TensorLayout](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-tensor-layout.html)

# Robot Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/robots.html

The `robots` section defines the robots, grippers, coordinate transformations, and motion information required for robot interaction.

A physical robot can be represented by multiple configurations, for example when different grippers are used. Robot settings also describe the positions and motion segments required to approach and execute a grip.

## Robot Parameters

- [RobotSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/robot-settings.html)

### Coordinate Transformations

- [Transform](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/transform.html)

### Waypoints

- [WaypointSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-base.html)
  - [WaypointSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings.html)
    - [Absolute Waypoint](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-absolute.html)
    - [Relative Waypoint](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-relative.html)
    - [Clone Waypoint](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-clone.html)
    - [Grip Point Waypoint](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-grip-point.html)

### Path Segments

- [PathSegmentSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/path-segment-settings.html)

# Object Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/objects.html

The `objects` section defines the objects and other results that LumiScan VGR can detect and localize.

Object settings can specify how objects are detected in 2D, how their pose is determined from 3D data, how detection results are filtered or sorted, and how object symmetries are handled.

Depending on the application, 2D detection, 3D detection, or a combination of both methods can be used.

## Object Parameters

- [ObjectSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/object-settings.html)
  - [ObjectDetectionParameters](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/object-detection-parameters.html)

### 2D Detection

- [Detection2DSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-settings.html)
  - [Detection2DStepSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-base.html)
    - [Detection2DStepSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings.html)
      - [Add Instances from File](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html)
      - [Feature Matching](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html)
      - [Filter Classification](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html)
      - [Reorient Aspect](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html)
      - [Reorient Classification](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html)
      - [Rotate Angle](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html)
      - [Scale](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html)
      - [Scale Aspect](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html)
      - [Scale To](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html)
      - [Set Full](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html)
      - [Set Network](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html)
      - [Set Other](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html)
      - [Set ROI](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html)
      - [Set ROI Pipeline](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html)
      - [Translate](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html)

### 2D Filtering and Sorting

- [FilteringObject2DParameterBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/filtering-object-2d-parameter-base.html)
- [SortingObject2DParameterBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sorting-object-2d-parameter-base.html)
  - [SortingBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sorting-base.html)
    - [SortingBaseCRTP](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sorting-base-crtp.html)
    - [NullSort](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/null-sort.html)
    - [SortDirection](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sort-direction.html)
    - [SortPosition](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sort-position.html)
    - [TopNParameter](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/top-n-parameter.html)
    - [DistanceToReferencePointParameter](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/distance-to-reference-point-parameter.html)

### 3D Detection

- [Detection3DSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-base.html)
  - [Detection3DSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings.html)
    - [Grip from Environment](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html)
    - [Line Fit Long Axis](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html)
    - [Mixed Plane Fit](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html)
    - [Object Matching](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html)
    - [Object Refinement](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html)
    - [Plane Fit](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html)
    - [RANSAC Cylinder Fit](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html)
    - [RANSAC Plane Fit](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html)
  - [Detection3DSettingsGeom](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-geom.html)
  - [ObjectRefinementParameters](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/object-refinement-parameters.html)

### Symmetry

- [SymmetrySettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings-base.html)
  - [SymmetrySettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings.html)
    - [Rotational Symmetry](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings-symmetry-type-rotation.html)

# Pipeline Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/pipelines.html

The `pipelines` section defines how image and point cloud data are processed to determine object poses and calculate suitable gripping results.

A pipeline combines the required processing steps for a specific application. Multiple pipelines can be configured and selected by the PLC.

## Pipeline Parameters

- [PipelineSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/pipeline-settings.html)

### Grip Point Calculation

- [GripPointSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-settings.html)
  - [GripPointFilterSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-filter-settings-base.html)
    - [GripPointFilterSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-filter-settings.html)
      - [Z-Axis Filter](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-filter-settings-filter-type-z-axis.html)
  - [GripPointCorrection](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-correction.html)
    - [OffsetMap](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-correction-offset-map.html)

# User Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/user.html

The optional `user` section defines access restrictions for functions that require additional permissions.

Passwords can be configured for administrative and manual operation so that these functions are only available to authorized users.

## User Parameters

- `adminPassword`
- `manualModePassword`

# System Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/system.html

The optional `system` section contains settings related to general application behavior, recording, pipeline execution, and diagnostics.

These settings are primarily used to configure system-wide behavior rather than an individual camera, object, robot, or pipeline.

## System Parameters

- [SystemSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/system-settings.html)
  - [RecordingSystemSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/recording-system-settings.html)
  - [PipelineSystemSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/pipeline-system-settings.html)

# Starting LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/start-menu.html

LumiScan VGR can be started either through the Start Menu or from the command line.

## Starting from the Start Menu

When the software starts, the Start Menu window opens (Fig. 3).

To start LumiScan VGR:

1. Enter the path to the configuration file.
2. Alternatively, click **Load** and select the configuration file.
3. If required, enable additional startup options.
4. Click **Start**.

By default, only the path to the configuration file is required. Additional options are available for camera simulation, PLC simulation, and debug mode.

![LumiScan VGR Start Menu with a settings file path, options for camera simulation, PLC simulation, and debug mode, and the Cancel and Start buttons](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/Screenshot_2024-02-26_161132.png)

## Starting from the Command Line

LumiScan VGR can also be started from the command line.

At minimum, the settings file must be specified using the `-s` or `--settings` option.

The available command-line options are listed in Table 2.

**Table 1. Table 2: Command-Line Arguments**

| Command-line option | Effect |
| --- | --- |
| `-s`, `--settings <filepath>` | Required. Specifies the path to the settings file. |
| `--gen-settings` | Creates a settings file. |
| `-v`, `--version` | Displays information about the current software version. |
| `--simulate-camera` | Optional. Simulates a camera so that no physical camera needs to be connected. Images and point clouds are loaded from disk.<br> Intended for testing purposes. |
| `--simulate-sps` | Optional. Simulates the PLC so that no physical PLC needs to be connected. PLC communication can be simulated through the PROFINET tab. |
| `-d`, `--debug` | Optional. Starts LumiScan VGR in debug mode. |
| `-?`, `-h`, `--help` | Displays command-line help. |
| `--help-all` | Displays additional help, including Qt-specific options. |

# User Interface – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html

By default, the user interface contains the **Image** tab, status information, and the **Manual Mode** button (Fig. 4).

The purple rectangle indicates the region of interest (ROI). It defines the area of the captured image in which the network searches for objects.

When debug mode is enabled, a yellow auto-exposure polygon is also displayed (Fig. 5). This is useful when configuring the initial exposure parameters.

![LumiScan VGR user interface with the Image tab, status information, and Manual Mode controls](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/LumIScanVGRps.png)

For a detailed description of the user interface, see Fig. 6 and Table 4.

![LumiScan VGR user interface showing a captured image, detected objects, status information, and manual and administrative controls](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/Screenshot_2024-02-26_160226.png)

**Table 1. Table 4: LumiScan VGR User Interface Elements**

| Element | Description |
| --- | --- |
| T0 | **Image Tab**<br><br>Displays the image from the active camera together with the current object detection results.<br><br>- In manual mode, object bounding boxes can be drawn and modified in this view. |
| T1 | **Scene Tab** ([Fig. 9](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/admin-mode.html))<br><br>Displays 3D information about the scene and the calculated grip points for detected objects.<br><br>The view can be controlled using the mouse:<br><br>- Scroll with the middle mouse button to zoom in or out.<br>- Hold the middle mouse button and move the mouse to rotate the view.<br>- Hold **Shift** and the middle mouse button while moving the mouse to move the displayed section.<br><br>Opening this tab displays additional Scene controls (Sc1 to Sc6).<br><br>- Only visible in [Admin Mode](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/admin-mode.html). |
| T2 | **PROFINET Tab** ([Fig. 10](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/admin-mode.html))<br><br>Displays the current data exchanged with the PLC.<br><br>- Only visible in [Admin Mode](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/admin-mode.html). |
| S1 | Displays general status information. |
| S2 | Displays the current application status. See [Table 6: Return Values](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html#status-information) for more information. |
| S3 | Opens the log window, which provides additional information about processes and events in the application. |
| S4 | Collects diagnostic information about the application.<br><br>- The collected data can be encrypted and sent to HD Vision Systems for diagnostic purposes.<br>- The **Camera png** and **Camera ply** options under **Export** in **Admin Settings** (A1) must be enabled to include the corresponding camera data. |
| M1 | Activates manual mode. See [Manual Mode](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/manual-mode.html). |
| M2 | Contains the controls available in manual mode. See [Manual Mode](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/manual-mode.html). |
| M3 | **Step 1** of the manual workflow: Select a user.<br><br>- A user must be selected before continuing.<br>- New users can be added using the **…** button.<br>- The selected user is stored as metadata when new training data is exported.<br>- Only visible in manual mode. |
| M4 | **Step 2** of the manual workflow: Capture and analyze an image.<br><br>- Captures a new image and detects objects.<br>- Detected objects can then be corrected, and missing objects can be annotated using the labels in M5.<br>- The function can be executed multiple times.<br>- Only visible in manual mode. |
| M5 | **Step 3** of the manual workflow: Select a label.<br><br>- Contains all available object labels.<br>- The selected label is used when creating new bounding boxes in the Image tab (T0).<br>- Only visible in manual mode. |
| M6 | **Step 4** of the manual workflow: Complete the operation.<br><br>If the image is annotated correctly, click **DONE**. A confirmation message indicates that the training data has been exported and the grip points have been calculated.<br><br>If no grip points can be calculated because the 3D information is invalid, for example because of a poor point cloud or incorrect configuration, the status changes to **RESULTS_EMPTY**. No confirmation is displayed and no training data is exported.<br><br>- Training data is exported to the training data output folder. See [Generated Data and Files](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/output-data.html).<br>- Only visible in manual mode. |
| A1 | **Admin Settings**<br><br>Contains options for enabling and disabling data export.<br><br>- Settings can be changed while the application is running.<br>- The available output may differ when debug mode is enabled. See [Admin and Debug Modes](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/admin-mode.html).<br>- Only visible in admin mode. |
| A2 | **Admin Controls**<br><br>Contains controls for manually executing individual application functions.<br><br>- Only visible in admin mode.<br>- Only active in manual mode to ensure that the automatic process is paused. |
| A3 | Changes the active camera.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A4 | Changes the active pipeline.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A5 | Changes the active robot.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A6 | Initializes the application.<br><br>Initialization is required before functions A7 to A13 can be used.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A7 | Captures an image using the active camera.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A8 | Analyzes the most recently captured image using the active pipeline.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A9 | Exports the currently annotated image as training data.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A10 | Calculates the pose of all detected objects in the currently annotated image.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A11 | Highlights the object with the highest grip priority.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A12 | Simulates the robot gripping the object with the highest grip priority.<br><br>The corresponding bounding box is removed from the Image tab (T0), and the position is stored as the most recent grip position.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A13 | Clears all internal buffers.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| A14 | Executes user-defined commands.<br><br>- Only visible in admin mode.<br>- Only active in manual mode. |
| Sc1 | **Scene Settings**<br><br>Contains the controls for configuring the Scene tab.<br><br>- Only visible in admin mode. |
| Sc2 | **Reference Frame**<br><br>Selects the reference frame used to display the scene.<br><br>Available reference frames include:<br><br>- **Camera**<br>- **Robot**<br>- Only visible in admin mode. |
| Sc3 | **General**<br><br>- **Show Cloud**: Displays the generated point cloud.<br>- Only visible in admin mode. |
| Sc4 | **Object**<br><br>Contains visualization options for detected objects.<br><br>- **Mesh**: Displays the CAD model generated from the point cloud.<br>- **Highlight**: Highlights in red the point cloud points used for object matching.<br> **Show Cloud** (Sc3) must be disabled to use this option.<br>- **Bounding Box**: Displays the bounding box of each object in yellow.<br>- **Show Origin**: Displays the coordinate frame of each detected object.<br>- **Show Grip Candidates**: Displays the available grip candidates.<br> **Show Origin** must be disabled to display them.<br>- Only visible in admin mode. |
| Sc5 | **Robot**<br><br>Contains visualization options for the robot and its environment.<br><br>- **Static Geometries**: Displays static elements in the robot environment. This option is available when **Collision Meshes** or **Visualization Meshes** are enabled.<br>- **Collision Meshes**: Displays simplified robot geometry used for collision detection. Available only after **Show Best Grip** (A11) has been executed.<br>- **Visualization Meshes**: Displays the robot visualization model. Available only after **Show Best Grip** (A11) has been executed.<br>- **Coordinate Frames**: Displays the robot coordinate frames.<br>- **Collision Octree**: Displays information used to evaluate potential collisions during robot movement.<br>- **Animate**: Automatically simulates the robot movement. This option is available after **Show Best Grip** (A11) or **Simulate Grip** (A12) has been executed.<br>- Only visible in admin mode. |
| Sc6 | Moves the robot arm through the simulated motion.<br> This option is available after **Show Best Grip** (A11) or **Simulate Grip** (A12) has been executed and when **Animate** is disabled. |

> [!NOTE]
> Manual mode requires the application to be initialized, for example by executing **Setup** in admin mode or from the PLC. If the application has not been initialized, the camera may not be recognized and no images can be captured.

# Admin and Debug Modes – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/admin-mode.html

LumiScan VGR provides additional modes for configuration, testing, maintenance, and diagnostics. These modes can be activated using the keyboard shortcuts shown in Table 3.

**Table 1. Table 3: Keyboard Shortcuts**

| Keyboard shortcut | Effect |
| --- | --- |
| Ctrl + Shift + A | Switches to admin mode. |
| Ctrl + Shift + D | Switches to debug mode. |
| Ctrl + Shift + V | Displays the current build version. |

## Admin Mode

Admin mode is intended for configuration, testing, and maintenance.

Press **Ctrl + Shift + A** to activate or deactivate admin mode.

When admin mode is active, additional controls and views become available. These include the admin controls and Scene tab functions described in [Table 4](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html) (A1 to A14 and Sc1 to Sc6).

![LumiScan VGR user interface in admin mode showing the camera image and additional camera, robot, and processing controls](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/adminmodus1.png)

![LumiScan VGR admin interface showing Scene settings, active device selection, and administrative controls](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/Screenshot_2024-02-26_160405.png)

![LumiScan VGR user interface showing the captured image and additional administrative controls](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/Screenshot_2024-02-26_160226.png)

## Debug Mode

Debug mode provides additional diagnostic information and visualizations that are useful during initial configuration and troubleshooting.

Press **Ctrl + Shift + D** to activate or deactivate debug mode.

When debug mode is active:

- The console log level is changed to debug. The console then displays the same detailed output that is written to the log file.
- A yellow auto-exposure polygon is displayed in the **Image** tab. This can be useful when configuring and checking the initial exposure parameters.
- The export options in the **Admin Settings** group (A1) can generate additional diagnostic output.

Debug mode is not required during normal operation.

# Manual Mode – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/manual-mode.html

Manual mode is used to create new training data when the neural network does not yet provide sufficiently robust detection results. It allows detected objects and labels to be corrected manually.

Manual mode can also be used to continue the workflow manually if automatic detection is unsuccessful, for example if an object is not detected correctly in 2D.

To activate manual mode, click the **Manual Mode** button ([M1](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html)).

If a manual mode password is configured in the settings file, the password must be entered when activating manual mode. No password is required if admin mode is already active.

While manual mode is active:

- The manual controls ([M2](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html)) and workflow steps [M3](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html) to [M6](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html) are displayed.
- PLC-controlled operation is paused, and most functions cannot be triggered by the PLC.
- The manual workflow is performed using steps M3 to M6 as described in [Table 4](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html).

![LumiScan VGR manual mode showing a captured image with the manual workflow controls](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/mmobraz.png)

# Image Annotation – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/image-annotation.html

In manual mode (see [Manual Mode](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/manual-mode.html)), oriented bounding boxes can be added or modified in the **Image** tab ([T0](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html)).

**Adding a bounding box:** Add a new bounding box in three steps:

1. Double-click where you want the bottom edge of the bounding box to be. This edge is displayed in purple.
2. Click the upper edge of the object to set the height of the bounding box.
3. Click a point on either side of the object to set the width of the bounding box.

**Selecting a bounding box:** Left-click an existing box to select it. A selected box is highlighted in a slightly different color and displays four yellow circular corner handles.

**Changing the label:** While a bounding box is selected, you can change its label by selecting another label from the label panel or by entering a new label.

**Modifying a bounding box:** A selected box can be modified in several ways:

- Drag inside the box to move it.
- Drag an edge to resize the box in that direction.
- Drag a corner to rotate the box around its center.

**Deleting a bounding box:** Right-click a selected box to delete it.

> [!NOTE]
> Most functions in the admin control group are only available while manual mode is active. This prevents conflicts with PLC-controlled operation.

# PLC Settings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html

The PLC parameters are available in the **PROFINET** tab, which can be used to monitor the data exchanged between LumiScan VGR and the PLC.

**PLC parameters can only be changed while manual mode is disabled.**

## Process Flow {#process-flow}

Each process uses three variables:

1. `OUT_*Ready`
2. `IN_*Request`
3. `OUT_*Running`

The execution sequence is the same for all processes.

**Table 1. Table 5: PLC Data Transmission Process**

| Step | HD Vision Systems → PLC (OUT) | PLC → HD Vision Systems (IN) | Note |
| --- | --- | --- | --- |
| 1 |   | Wait until `OUT_*Ready == 1` | Not applicable to reset functions |
| 2 |   | Set `IN_*Request → 1` |   |
| 3 | Check `IN_*Request == 1` |   |   |
| 4 | Set `OUT_*Ready → 0` |   |   |
| 5 | Set `OUT_*Running → 1` |   |   |
| 6 |   | Wait until `OUT_*Ready == 0` | Not applicable to reset functions |
| 7 |   | Check `OUT_*Running == 1` | Otherwise, the trigger is discarded |
| 8 |   | Set `IN_*Request → 0` |   |
| 9 | Wait until `IN_*Request == 0` |   |   |
| 10 | Execute the requested function |   |   |
| 11 | Set the output variables |   |   |
| 12 | Set `OUT_*Running → 0` |   |   |
| 13 | Set `OUT_*Ready → 1` |   |   |
| 14 |   | Wait until `OUT_*Running == 0` |   |
| 15 |   | Check that the return values are valid |   |
| 16 |   | Read the output variables |   |

## Status Information {#status-information}

The result of each action is displayed in two places:

- as a status message in the status window, for example **SUCCESS**
- as a numeric value in `OUT_ReturnCode` in the **PROFINET** tab, for example `0`

The available return values are listed in [Table 6](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html#status-information).

![LumiScan VGR PROFINET interface showing PLC data, status information, and return values](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/profinetcode.png)

**Table 2. Table 6: Return Values**

| Status | Value | Meaning |
| --- | --- | --- |
| `SUCCESS` | 0 | No error occurred. |
| `UNKNOWN_ERROR` | 1 | An unknown error occurred. |
| `CAMERA_NOT_INITIALIZED` | 2 | The currently active camera has not been initialized or does not exist. |
| `CAMERA_NOT_CONNECTED` | 3 | A connection to the camera could not be established. |
| `CAMERA_ACQUISITION_ERROR` | 4 | An error occurred while communicating with or acquiring data from the camera. |
| `PIPELINE_NOT_INITIALIZED` | 5 | The currently active pipeline has not been initialized or does not exist. |
| `ROBOT_NOT_INITIALIZED` | 6 | The currently active robot has not been initialized or does not exist. |
| `MISSING_DATA` | 7 | Additional data required to execute the function is missing, for example recorded data or results from a previous calculation step. |
| `ID_DOES_NOT_EXIST` | 8 | The specified ID does not exist. This can occur, for example, when attempting to activate a camera, pipeline, or robot that is not configured. |
| `MISSING_TRANSFORM` | 9 | The required coordinate transformation is not available. This can occur, for example, if hand-eye calibration data is missing for a robot-camera pair. |
| `RESULTS_EMPTY` | 10 | No valid grip points are available for the active robot. |
| `CAMERA_HARDWARE_TRIGGER_AGAIN` | 12 | Auto-exposure was unsuccessful. Trigger the camera again to capture another image. |
| `CAMERA_BAD_EXPOSURETIME_SETTING` | 13 | The requested exposure time cannot be reached, for example because the configured range is too short or too long for the current lighting conditions.<br> Check the auto-exposure settings or contact HD Vision Systems. |

## Manual Mode and PLC Operation

During automatic operation, manual mode can be activated through the user interface. The operation mode then changes to `OUT_OperationMode → 2`.

While manual mode is active, PLC-controlled processing is paused and most processing functions cannot be started.

When manual mode is exited, the system returns to idle mode (`OUT_OperationMode → 0`). To resume normal operation, switch the system back to automatic mode through the PLC using `OUT_SetParameter`.

## Projects with Multiple Components

All calculations use the currently active camera, pipeline, and robot.

If a project contains multiple cameras, pipelines, or robots, make sure the correct components are selected through `OUT_SetParameter` before executing a function.

For detailed information about PLC configuration, signals, and function descriptions, refer to the PROFINET Interface Description datasheets.

# Generated Data and Files – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/output-data.html

The locations of the data generated at runtime are listed in Table 7.

In this chapter, `HDVAppData` refers to the following path:

`C:\Users\<UserName>\AppData\Local\HD Vision Systems GmbH`

**Table 1. Table 7: Generated Data and Files**

| Output type | Description |
| --- | --- |
| Log data | Log files are stored in `<HDVAppData>\LumiScan VGR\logs`.<br><br>The log files use a rotating file system. Each file has a maximum size of 10 MB. When this size is reached, a new log file is created. A maximum of five log files is retained; when an additional file is created, the oldest file is deleted. |
| Crash dumps | If the application crashes, a memory dump is created in `<HDVAppData>\LumiScan VGR` for further analysis. |
| Data | Contains recorded and calculated output data.<br><br>The output folder and the types of data to be exported are defined in the settings file. Some output options can also be enabled or disabled through the user interface in admin mode (see [A1](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html)).<br><br>Related output files use the same base name, for example a common timestamp. |
| Training data | Training data is stored in the `training_data` folder within the project **Settings** folder. |

# Troubleshooting – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html

This page describes known problems with LumiScan VGR, grouped by category. Start with the [general checks](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#general-checks): they explain where to find the information that the diagnostic steps use. Then find your symptom in the categories below and follow the steps of the entry.

## General checks {#general-checks}

- **Admin mode:** Press **Ctrl + Shift + A** to switch admin mode on or off. The **PROFINET** tab (T2) and the **Scene** tab (T1) are only visible in admin mode. The admin controls (A2 to A14) are only active in manual mode. For PLC diagnostics, activate admin mode but do not activate manual mode: while manual mode is active, PLC-controlled processing is paused.
- **Status and return code:** The result of each action is shown as a status message in the status window (S2), for example **SUCCESS**. For PROFINET, it is also shown as a number in `OUT_ReturnCode` in the **PROFINET** tab. OPC UA methods return the code as the string `ReturnCode`. The meaning of each value is listed in [PLC Settings: Status Information](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html#status-information) and in the [FAQ](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/faq.html#faq-return-codes).
- **Operation mode:** Most functions require the operation mode `AUTOMATIC` (`1`). For PROFINET, the current mode is shown in `OUT_OperationMode`. For OPC UA, `GetOperationMode` returns it.
- **Log files:** Log files are stored in `<HDVAppData>\LumiScan VGR\logs`, where `HDVAppData` is `C:\Users\<UserName>\AppData\Local\HD Vision Systems GmbH`. The log files rotate: each file has a maximum size of 10 MB, and at most five files are kept. The log window opens with S3. In debug mode (**Ctrl + Shift + D**, or the start option `-d` / `--debug`), the console shows the same detailed output that is written to the log file. If the application crashes, a memory dump is created in `<HDVAppData>\LumiScan VGR`.
- **Camera:** LumiScan VGR requires a LumiScanX camera connected to the IPC via Ethernet. The camera network, the Windows Firewall and the virus protection must be configured as described in the LumiScanX manual: [Network Settings](https://docs.hdvisionsystems.com/en/lumiscan-x/2.0.0/installation.html#sec-network-settings), [Windows Firewall](https://docs.hdvisionsystems.com/en/lumiscan-x/2.0.0/installation.html#sec-windows-firewall) and [Virus Protection](https://docs.hdvisionsystems.com/en/lumiscan-x/2.0.0/installation.html#sec-virus-protection).
- **Licence:** For problems with the LumiScan Key or CodeMeter Runtime, see [Licensing: Troubleshooting](https://docs.hdvisionsystems.com/en/lumiscan-licensing/1.0.4/troubleshooting.html).

## Start-up and camera {#startup-and-camera}

### Problem: The camera is not recognized or no image is captured after start-up {#faq-setup-required}

**Symptoms**

After LumiScan VGR has started, the camera is not recognized and no image can be captured. Trigger Camera (PROFINET) or `CaptureImage` (OPC UA) returns `CAMERA_NOT_INITIALIZED` (`2`).

**Possible causes**

- The application has not been initialized (Setup). Automatic setup at start (`enableAutomaticSetup`) is disabled by default.
- The camera was reset with the Reset Camera function, and Setup has not been executed again.

**Diagnostic procedure**

1. PROFINET: In the **PROFINET** tab (admin mode), check `OUT_IsSetup`. Expected: `1` (system setup has been completed).
2. OPC UA: Check that the client has called `SetupSystem` at least once since the application started. Expected: `SetupSystem` returned `SUCCESS`.
3. In the settings file, check `enableAutomaticSetup` in the `system` section. If it is missing or `false` (default), Setup is not executed automatically at start.
4. Check whether the camera was reset since the last Setup (PROFINET: Reset Camera function with `IN_ResetCameraRequest`; OPC UA: `ResetCamera`).

**Resolution**

- **If the application has not been initialized:** Run Setup before you capture an image:
  - PLC: Run the Setup function with `IN_SetupRequest`. Check: `OUT_IsSetup` is `1`.
  - OPC UA: Call `SetupSystem`. Check: it returns `SUCCESS`.
  - User interface: Activate manual mode (M1), then initialize the application with A6 in admin mode.
  - After Setup, capture an image again. Check: the image is displayed in the **Image** tab (T0), and the status window (S2) shows **SUCCESS**.
- **If the camera was reset:** Run Setup again as described above. After resetting the camera, Setup must be executed again.
- **If Setup should run automatically at start:** Set [`enableAutomaticSetup`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/system-settings.html#system-settings-enable-automatic-setup) to `true` in the `system` section.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the return code of Trigger Camera or `CaptureImage` and the settings file.

### Problem: Image capture fails with a camera return code {#ts-camera-error-code}

**Symptoms**

No images are acquired from the LumiScanX sensor system. Trigger Camera (PROFINET) or `CaptureImage` (OPC UA) returns one of these codes:

- `CAMERA_NOT_CONNECTED` (`3`): A connection to the camera could not be established.
- `CAMERA_ACQUISITION_ERROR` (`4`): An error occurred while communicating with or acquiring data from the camera.
- `CAMERA_HARDWARE_TRIGGER_AGAIN` (`12`): Auto-exposure was unsuccessful.
- `CAMERA_BAD_EXPOSURETIME_SETTING` (`13`): The requested exposure time cannot be reached.
- OPC UA only: `CAMERA_RESTART_REQUIRED`: The camera driver or firmware requires a restart.

**Possible causes**

- The camera hardware is not reachable, for example because of the cabling or the camera network.
- Image acquisition failed because of an exposure, trigger or transport problem.
- Auto-exposure did not reach a valid exposure.
- The configured exposure range is too short or too long for the current lighting conditions.
- The camera driver or firmware requires a restart.

**Diagnostic procedure**

1. Read the return code in the status window (S2), in `OUT_ReturnCode` (PROFINET) or in `ReturnCode` (OPC UA). Expected: `SUCCESS` (`0`). Note the code: it identifies the cause.
2. Check the cabling of the LumiScanX camera. Expected: the camera is connected to the IPC via Ethernet.
3. Check the camera network as described in [LumiScanX: Network Settings](https://docs.hdvisionsystems.com/en/lumiscan-x/2.0.0/installation.html#sec-network-settings).
4. Open the log window (S3) and check the entries at the time of the capture.
5. For `CAMERA_HARDWARE_TRIGGER_AGAIN` or `CAMERA_BAD_EXPOSURETIME_SETTING`: Check the [auto-exposure settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/autoexposure-settings.html) of the camera in the `cameras` section. In debug mode, the yellow auto-exposure polygon in the **Image** tab shows the region used for the auto-exposure computation (`polygon`).

**Resolution**

- **If the camera is not reachable (`CAMERA_NOT_CONNECTED`):**
  1. Check the cabling and the camera network as described in the LumiScanX manual.
  2. Reset the camera: PROFINET: Reset Camera function (`IN_ResetCameraRequest`, camera ID in `IN_ParamArgString`); OPC UA: `ResetCamera` (an empty string resets all cameras).
  3. Run Setup again. After resetting the camera, Setup must be executed again.
  4. Capture an image. Check: the return code is `SUCCESS` (`0`).
- **If image acquisition failed (`CAMERA_ACQUISITION_ERROR`):** Reset the camera and run Setup again as described above. If the error remains, check the LumiScanX documentation.
- **If auto-exposure was unsuccessful (`CAMERA_HARDWARE_TRIGGER_AGAIN`):** Trigger the camera again (Trigger Camera or `CaptureImage`). Check: the return code is `SUCCESS` (`0`).
- **If the exposure time cannot be reached (`CAMERA_BAD_EXPOSURETIME_SETTING`):** Check the auto-exposure settings, or contact HD Vision Systems.
- **If a restart of the camera is required (`CAMERA_RESTART_REQUIRED`, OPC UA):** Call `ResetCamera`.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the return code, the camera serial number and the `cameras` section of the settings file.

### Problem: A timeout message appears or only a black image is captured, although the camera is detected {#faq-black-image-timeout}

**Symptoms**

A timeout message appears. During capture, only a black image is displayed, although the connected sensor is detected and appears in the drop-down menu.

**Possible causes**

- The Windows Firewall is not configured correctly and blocks the devices.
- The virus protection blocks the devices.

**Diagnostic procedure**

1. Check the network configuration of the LumiScanX camera as described in [LumiScanX: Network Settings](https://docs.hdvisionsystems.com/en/lumiscan-x/2.0.0/installation.html#sec-network-settings).
2. Check the Windows Firewall settings as described in [LumiScanX: Windows Firewall](https://docs.hdvisionsystems.com/en/lumiscan-x/2.0.0/installation.html#sec-windows-firewall). Expected: the devices are not blocked by the firewall.
3. Check the virus protection settings as described in [LumiScanX: Virus Protection](https://docs.hdvisionsystems.com/en/lumiscan-x/2.0.0/installation.html#sec-virus-protection).

**Resolution**

- **If the Windows Firewall blocks the devices:** Configure the Windows Firewall as described in the LumiScanX manual. Then capture an image again. Check: the image is not black, and no timeout message appears.
- **If the virus protection blocks the devices:** Configure the virus protection as described in the LumiScanX manual, then capture an image again.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the exact timeout message and the camera serial number.

## PLC communication (PROFINET) {#plc-communication-profinet}

### Problem: LumiScan VGR does not respond after GripBestResult {#faq-no-reaction-plc-request}

**Symptoms**

The PLC has sent a GripBestResult request (`IN_GripBestResultRequest`), but the application does not return the expected result. LumiScan VGR seems to hang. The same procedure applies when LumiScan VGR does not respond to another PLC request, for example Trigger Camera, Compute Objects, Get Best Result, Set Parameter, Get Parameter or Setup. Replace `GripBestResult` in the signal names below with the name of that function.

**Possible causes**

- The PROFINET connection is interrupted.
- The application is still executing the function.
- The PLC handshake is incomplete, for example the PLC has not reset `IN_GripBestResultRequest` to `0`, or has set it before `OUT_GripBestResultReady` was `1`.
- The PLC has not set the request, for example because a condition in the PLC program is not met.
- LumiScan VGR is not in the operation mode `AUTOMATIC`.
- The application is in an unexpected internal state.

**Diagnostic procedure**

1. **Verify the PROFINET connection.** Activate admin mode with **Ctrl + Shift + A**. Do not activate manual mode. Open the **PROFINET** tab (T2). Expected: the tab shows the data currently exchanged with the PLC. Ask the PLC programmer whether the PLC still has a connection to LumiScan VGR.

2. **Check the heartbeat signals.** In the **PROFINET** tab, watch `IN_HeartBeat` and `OUT_HeartBeat`. Expected: both blink red and green; `OUT_HeartBeat` follows `IN_HeartBeat`. If they do not blink, the PROFINET connection is lost. The PLC heartbeat is enabled with [`enableHeartbeat`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/system-settings.html#system-settings-enable-heartbeat) in the `system` section (default `true`).

3. **Verify the request and response signals.** In the **PROFINET** tab, check the signals and compare them with [Table 5: PLC Data Transmission Process](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html#process-flow):
   - `OUT_OperationMode`: expected `1` (`AUTOMATIC`).
   - `OUT_Error`: expected `0`; `1` means that LumiScan VGR is in an error state.
   - Before the request: `OUT_GripBestResultReady` is `1` and `OUT_GripBestResultRunning` is `0`.
   - After the PLC has set `IN_GripBestResultRequest` to `1` (shown as **True**, green): `OUT_GripBestResultReady` changes to `0` and `OUT_GripBestResultRunning` to `1`. If `IN_GripBestResultRequest` stays **False**, LumiScan VGR has not received the request.
   - The PLC then resets `IN_GripBestResultRequest` to `0`. LumiScan VGR executes the function only after the request is back at `0`.
   - When the function is finished: `OUT_GripBestResultRunning` is `0` and `OUT_GripBestResultReady` is `1`.
   - If the PLC considers the last step as not finished: check that `OUT_SetParameterReady`, `OUT_TriggerCameraReady`, `OUT_ComputeObjectsReady`, `OUT_GetBestResultReady`, `OUT_GripBestResultReady` and `OUT_GetParameterReady` are `1`, and that `OUT_SetParameterRunning`, `OUT_TriggerCameraRunning`, `OUT_ComputeObjectsRunning`, `OUT_GetBestResultRunning`, `OUT_GripBestResultRunning` and `OUT_GetParameterRunning` are `0`.
   - Note the handshake step at which the signals stop changing.

4. **Inspect the application logs.** Open the log window (S3), or open the log file `LumiScanVGR.log` in `<HDVAppData>\LumiScan VGR\logs`. Search for `PLC - Procedure "GripBestResult" called` and `PLC - Procedure "GripBestResult" finished`. Expected: both entries exist for the time of the request. If `called` is missing, the function was not called by the PLC. If `called` exists but `finished` is missing, the function has not finished.

   Possible function names in these entries: `TriggerCamera`, `ComputeObjects`, `GetBestResult`, `GripBestResult`, `SetParameter`, `GetParameter`, `Setup`.

5. **Record the return code.** After `OUT_GripBestResultRunning` has changed to `0`, read `OUT_ReturnCode` in the **PROFINET** tab and the status message in the status window (S2). Expected: `0` (`SUCCESS`) or `10` (`RESULTS_EMPTY`). For `10`, see [Problem: `RESULTS_EMPTY` is returned](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-results-empty). For other values, see [Table 6: Return Values](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html#status-information).

**Resolution**

- **If the PROFINET connection is interrupted** (`IN_HeartBeat` and `OUT_HeartBeat` do not blink):
  1. Ask the PLC programmer to check the PROFINET connection on the PLC side.
  2. If `enableHeartbeat` is set to `false` in the `system` section, set it to `true` and start LumiScan VGR again with the changed settings file.
  3. Check: `IN_HeartBeat` and `OUT_HeartBeat` blink red and green again.
  4. Send the request again, starting with step 1 of the handshake.

- **If the application is still executing** (`OUT_GripBestResultRunning` is `1`, the request is back at `0`, and the log contains `called` but not yet `finished`): Wait until `OUT_GripBestResultRunning` is `0`. Then check the return code and read the output variables (handshake steps 14 to 16). Check: the log contains `PLC - Procedure "GripBestResult" finished`.

- **If the PLC handshake is incomplete:** Make sure that the PLC program follows the handshake:
  1. Wait until `OUT_GripBestResultReady` is `1`.

  2. Set `IN_GripBestResultRequest` to `1`.

  3. Wait until `OUT_GripBestResultReady` is `0`, and check that `OUT_GripBestResultRunning` is `1`. If `OUT_GripBestResultRunning` does not become `1`, the trigger is discarded; start again with step 1.

  4. Set `IN_GripBestResultRequest` to `0`.

  5. Wait until `OUT_GripBestResultRunning` is `0`, check the return code and read the output variables.

     Check: `OUT_GripBestResultReady` is `1` again, and `OUT_ReturnCode` is `0` or `10`.

- **If the PLC has not set the request** (`IN_GripBestResultRequest` stays **False** in the **PROFINET** tab, and the log contains no `called` entry): Ask the PLC programmer to check whether the PLC program has an unmet condition for setting the request, whether the PLC is waiting for a signal, and whether a PLC-internal check that is not related to LumiScan VGR blocks the process (for example a robot error or a cylinder error). Check: `IN_GripBestResultRequest` changes to **True** (green) in the **PROFINET** tab.

- **If LumiScan VGR is not in the operation mode `AUTOMATIC`:** See [Problem: The PLC cannot start any functions after manual mode](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-manual-mode-plc).

- **If the application is in an unexpected internal state:** If the PLC sets the request to **True**, but the **PROFINET** tab still shows it as **False**, LumiScan VGR has an internal error due to execution concurrency. If `OUT_Error` is `1`, LumiScan VGR is in an error state. In both cases, inform HD Vision Systems and send the information listed below.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with:

- the software version (**Ctrl + Shift + V**) and the operating system of the IPC,
- the relevant logs: the exported log file `LumiScanVGR.log` that covers the time of the request,
- the date and time of the error,
- the communication status: a screenshot of the **PROFINET** tab in admin mode, the values of `OUT_ReturnCode`, `OUT_OperationMode` and `OUT_Error`, and, if possible, the saved status of the PLC variables,
- the handshake step at which the PLC or LumiScan VGR stops,
- whether the PLC still has a connection to LumiScan VGR, whether the PLC is waiting for signals, and whether the PLC has already set the request signal,
- whether the PLC has internal checks or process status checks that are not related to LumiScan VGR (for example a robot error or a cylinder error).

### Problem: The PLC cannot start any functions after manual mode {#faq-manual-mode-plc}

**Symptoms**

After manual mode has been used, the PLC can no longer start processing functions. `OUT_OperationMode` shows `2` (`MANUAL`) while manual mode is active, or `0` (`IDLE`) after manual mode has been exited.

**Possible causes**

- Manual mode is still active. While manual mode is active, PLC-controlled processing is paused.
- Manual mode has been exited. The system then changes to `IDLE` (`0`), in which only parameter-setting functions are available.

**Diagnostic procedure**

1. In the **PROFINET** tab (admin mode), check `OUT_OperationMode`. Expected: `1` (`AUTOMATIC`).
2. In the user interface, check whether manual mode is active. Manual mode is active when the manual controls (M2) and the workflow steps M3 to M6 are displayed.

**Resolution**

- **If manual mode is still active:** Exit manual mode in the user interface. The PLC cannot switch the system out of manual mode. The system then changes to `IDLE` (`0`); continue with the next step.
- **If the system is in `IDLE`:** Set the operation mode back to `AUTOMATIC` from the PLC with the Set Parameter function:
  1. Set `IN_ParamId` to `0` (`SET_OPERATION_MODE`) and `IN_ParamArgByte` to `1` (`AUTOMATIC`).
  2. Run Set Parameter with `IN_SetParameterRequest`, following the handshake ([Table 5](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html#process-flow)).
  3. Check: `OUT_ReturnCode` is `0`, and `OUT_OperationMode` is `1`.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the values of `OUT_OperationMode` and `OUT_ReturnCode` after Set Parameter.

## OPC UA {#opc-ua}

### Problem: OPC UA calls fail with `BadTimeout` or `BadResourceUnavailable` {#faq-opcua-timeout}

**Symptoms**

A method call fails on the client with `BadTimeout` or a transport disconnect, or it is rejected with `BadResourceUnavailable`.

**Possible causes**

- The client method call timeout is too short. Many methods take significantly longer than standard PLC operations; the typical execution time is 3 to 10 seconds. Default SDK timeouts (often 2 to 5 seconds) are too short.
- Another client is currently executing a method, or the client calls methods in parallel. The server processes one method at a time; parallel calls are rejected with `BadResourceUnavailable`.

**Diagnostic procedure**

1. Check the method call timeout configured in the OPC UA client. Expected: at least 15 seconds.
2. Check whether the client calls methods in parallel, and whether a second client is connected (at most 2 clients can be connected at the same time). Expected: only one method is executed at a time.

**Resolution**

- **If the call timeout is too short:** Set the client method call timeout to at least 15 seconds. Check: the method returns a `ReturnCode` instead of `BadTimeout`.
- **If another client is executing a method, or methods are called in parallel:** Do not call methods in parallel. If another client is executing a method, wait and retry. Check: the call is no longer rejected with `BadResourceUnavailable`.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the method that fails, the error reported by the client and the configured client timeouts.

### Problem: OPC UA methods return `OPERATION_MODE_INVALID` {#ts-opcua-operation-mode-invalid}

**Symptoms**

OPC UA methods return `OPERATION_MODE_INVALID`. Only `SetOperationMode` and `GetOperationMode` are accepted.

**Possible causes**

- The server is not in the operation mode `AUTOMATIC`, for example because it is in `IDLE` or `MANUAL` (local or user-interface control active).

**Diagnostic procedure**

1. Call `GetOperationMode`. Expected: `Mode` is `1` and `ModeName` is `AUTOMATIC`.

**Resolution**

- **If the server is not in `AUTOMATIC`:** Call `SetOperationMode` with the value `1` (`AUTOMATIC`), then retry the method. Check: `GetOperationMode` returns `1`, and the method no longer returns `OPERATION_MODE_INVALID`.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the result of `GetOperationMode` and the `ReturnCode` of `SetOperationMode`.

### Problem: `CameraTemperature` is `-273.1528` {#ts-opcua-camera-temperature}

**Symptoms**

`GetCameraTemperature` returns `-273.1528` in `CameraTemperature`.

**Possible causes**

- The camera does not report a temperature.

**Diagnostic procedure**

1. Check the value of `CameraTemperature`. `-273.1528` means that the value is unavailable; it is not a physical reading.

**Resolution**

- **If the camera does not report a temperature:** Treat the value as "unavailable", not as a measured temperature.

**If the problem persists**

Contact support with the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information).

### Problem: `Shutdown` has no effect {#ts-opcua-shutdown-no-effect}

**Symptoms**

After a call of the OPC UA method `Shutdown`, LumiScan VGR keeps running.

**Possible causes**

- Remote shutdown is not yet implemented. `Shutdown` is a placeholder and has no effect on the running process.

**Diagnostic procedure**

1. Check on the host machine whether the LumiScan VGR process is still running after the `Shutdown` call. Expected: it is still running; `Shutdown` has no effect.

**Resolution**

- **If remote shutdown is required:** Stop the server process on the host machine.

**If the problem persists**

Contact support with the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information).

## Configuration and detection results {#configuration-and-detection}

### Problem: `RESULTS_EMPTY` is returned {#faq-results-empty}

**Symptoms**

Get Best Result or Grip Best Result (PROFINET), or `GetBestResult` or `GripBestResult` (OPC UA), returns `RESULTS_EMPTY` (`10`): no valid grip points are available for the active robot. In manual mode, the status changes to **RESULTS_EMPTY** after **DONE** (M6); no confirmation is displayed and no training data is exported.

**Possible causes**

- The objects have not been computed yet.
- All candidates of the last detection have already been consumed. Each Grip Best Result call returns the next candidate.
- No objects have been detected (object count `0`).
- The 3D information is invalid, for example because of a poor point cloud or an incorrect configuration.

**Diagnostic procedure**

1. Check that Compute Objects (PROFINET) or `ComputeObjects` (OPC UA) was executed after the last image capture. Expected: it returned `SUCCESS`.
2. Check the number of objects:
   - PROFINET: `OUT_NumObjects` is the number of objects in the scene that have not yet been gripped. With Get Parameter, `IN_ParamId` `0` (`GET_NUM_OBJECTS_2D_TOTAL`) returns the total number of objects detected in 2D, and `1` (`GET_NUM_OBJECTS_3D_TOTAL`) the number of 3D-detected objects that have not yet been gripped.
   - OPC UA: `ComputeObjects` returns `NumObjects2D` and `NumObjects3D`; `GetReport` with `ParamId` `0` or `1` returns the totals.
3. Compare the object counts. If no objects have been detected in 2D, see [Problem: No objects are detected (object count is `0`)](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-no-objects-detected). If objects have been detected but none is left to grip, all candidates have been consumed.
4. In admin mode, open the **Scene** tab (T1). Enable **Show Cloud** (Sc3) to display the point cloud, and **Show Grip Candidates** (Sc4, with **Show Origin** disabled) to display the grip candidates. Expected: the point cloud covers the objects, and grip candidates are displayed.

**Resolution**

- **If the objects have not been computed, or all candidates have been consumed:** Capture a new image and compute the objects again (PROFINET: Trigger Camera and Compute Objects; OPC UA: `CaptureImage` and `ComputeObjects`). Check: Get Best Result returns `SUCCESS` (`0`).
- **If no objects have been detected:** See [Problem: No objects are detected (object count is `0`)](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-no-objects-detected).
- **If the 3D information is invalid:** Check the point cloud in the **Scene** tab, and check the configuration of the active camera, pipeline and robot in the settings file.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the object counts and the recorded data of the capture (see [Generated Data and Files](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/output-data.html)).

### Problem: No objects are detected (object count is `0`) {#ts-no-objects-detected}

**Symptoms**

After Compute Objects, the object count is `0`: OPC UA `ComputeObjects` returns `NumObjects2D` and `NumObjects3D` as `0`, or PROFINET Get Parameter `GET_NUM_OBJECTS_2D_TOTAL` returns `0` in `OUT_NumObjects`. The **Image** tab (T0) shows no detection results.

**Possible causes**

- The camera placement or the lighting does not allow the objects to be detected.
- The objects are outside the region of interest (ROI), the purple rectangle in the **Image** tab in which the network searches for objects.
- The wrong pipeline is active, or the pipeline configuration does not match the objects.
- The neural network does not yet provide sufficiently robust detection results for the objects.

**Diagnostic procedure**

1. In the **Image** tab (T0), check the captured image. Expected: the objects are visible and lie inside the purple ROI rectangle.
2. Check the active pipeline. OPC UA: read `ActivePipeline`. Expected: the pipeline that is configured for these objects.
3. Check the pipeline configuration in the `pipelines` section of the settings file. Expected: the pipeline contains the objects to be detected.

**Resolution**

- **If the camera placement or the lighting is not suitable:** Correct the camera placement or the lighting, then capture an image and compute the objects again. Check: the object count is greater than `0`.
- **If the objects are outside the ROI:** Place the objects inside the ROI, or correct the ROI of the pipeline in the settings file.
- **If the wrong pipeline is active:** Select the correct pipeline before you compute the objects (PROFINET: Set Parameter with `IN_ParamId` `2` = `SET_PIPELINE_ID`, ID in `IN_ParamArgString`; OPC UA: `SetActivePipeline`).
- **If the detection is not robust enough:** Use [manual mode](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/manual-mode.html) to correct the detected objects and labels and to create new training data.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the captured image and the `pipelines` and `objects` sections of the settings file.

### Problem: No point cloud matching can be performed {#ts-no-point-cloud-matching}

**Symptoms**

No point cloud matching can be performed: the generated point cloud is not compared with the 3D models of the objects.

**Possible causes**

- The HALCON licence is not installed.
- The HALCON installation is not part of the `PATH` environment variable.

**Diagnostic procedure**

1. Check that a valid HALCON licence is installed on the IPC.
2. In PowerShell, display the `PATH` environment variable. Expected: it contains the absolute path to the HALCON `bin` directory.

**Resolution**

- **If the HALCON licence is not installed:** Install a valid HALCON licence.
- **If the HALCON installation is not in `PATH`:** Add the absolute path to the HALCON `bin` directory to the `PATH` environment variable. Check: in PowerShell, `PATH` contains this directory.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the content of the `PATH` environment variable.

### Problem: A function returns `ID_DOES_NOT_EXIST` {#ts-id-does-not-exist}

**Symptoms**

Selecting a camera, pipeline, robot or recipe returns `ID_DOES_NOT_EXIST` (`8`): PROFINET Set Parameter with `SET_CAMERA_ID`, `SET_PIPELINE_ID` or `SET_ROBOT_ID`, or OPC UA `SetActiveCamera`, `SetActivePipeline`, `SetActiveRobot`, `ExecuteSimpleRecipe` or `ExecuteRecipe`.

**Possible causes**

- The camera, pipeline, robot or recipe ID is not configured in the settings file.
- OPC UA: the ID was added or changed in the configuration after the server started. The arrays `PossibleCameras`, `PossiblePipelines` and `PossibleRobots` are filled at server startup.

**Diagnostic procedure**

1. Compare the ID with the `id` entries in the `cameras`, `pipelines` and `robots` sections of the settings file, and with the recipe IDs in the project configuration. Expected: the ID matches exactly.
2. PROFINET: In the **PROFINET** tab, check `IN_ParamId` and `IN_ParamArgString`. Expected: `IN_ParamArgString` contains the ID.
3. OPC UA: Read `PossibleCameras`, `PossiblePipelines` or `PossibleRobots`. Expected: the ID is listed.

**Resolution**

- **If the ID is not configured:** Use an ID that is configured, or add the component to the settings file. Check: the function returns `SUCCESS` (`0`).
- **If the ID was added or changed after the server started:** Restart the server so that it picks up the new configuration. Check: the ID is listed in the `Possible*` arrays.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the ID used and the settings file.

### Problem: A function returns `MISSING_TRANSFORM` {#ts-missing-transform}

**Symptoms**

A function returns `MISSING_TRANSFORM` (`9`): the required coordinate transformation is not available.

**Possible causes**

- Hand-eye calibration data is missing for the active robot-camera pair.

**Diagnostic procedure**

1. Check which camera and robot are active (OPC UA: read `ActiveCamera` and `ActiveRobot`; PROFINET: the IDs last set with `SET_CAMERA_ID` and `SET_ROBOT_ID`).
2. In the `robots` section of the settings file, check [`cameraToRobot`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/robot-settings.html#robot-settings-camera-to-robot) of the active robot. Expected: it contains an entry for the active camera ID with a valid 4x4 transformation matrix.

**Resolution**

- **If the hand-eye calibration data is missing:** Add the hand-eye transformation for the camera ID to `cameraToRobot` of the robot, or select a robot-camera pair for which hand-eye calibration data exists. Check: the function returns `SUCCESS` (`0`).

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with the `robots` section of the settings file.

## Hand-eye calibration {#hand-eye-troubleshooting}

These problems occur in LumiScan Hand-Eye Calibration. The **Pose Status** of each captured image is shown in the image list on the **Hand-Eye** tab.

### Problem: Pose Status shows "Can not be interpreted" {#ts-hand-eye-cannot-be-interpreted}

**Symptoms**

After capture, **Pose Status** shows the message `Can not be interpreted`.

**Possible causes**

- The position read out by the PLC appears to be wrong because the PLC is not used for **Pose Mode**.
- LumiScan Hand-Eye Calibration is not connected to the PLC.
- The cifX card name is wrong.

**Diagnostic procedure**

1. On the **Setup** tab, check **Pose Mode**. Expected: `SPS` (the PLC is used for Pose Mode).

2. On the **PROFINET** tab, check the message area. Expected: no connection error message. If a message such as `Hilscher card not connected!` is shown, the connection to the PLC has not been established.

   ![PROFINET tab of LumiScan Hand-Eye Calibration with the connection error message highlighted in red](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/Problem_tabelle03.png)

3. On the **Setup** tab, check **CifX Card Name** in the **SPS Layout** group. Expected: the name of the Hilscher card, normally `cifx0;0` if you have only one Hilscher card.

   ![Setup tab of LumiScan Hand-Eye Calibration with the CifX Card Name field in the SPS Layout group highlighted in red](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/Problem_tabelle04.png)

**Resolution**

- **If the PLC is not used for Pose Mode:** Set **Pose Mode** to `SPS`, then capture again. Check: **Pose Status** no longer shows `Can not be interpreted`.
- **If LumiScan Hand-Eye Calibration is not connected to the PLC:** Establish the connection to the PLC. Check: the **PROFINET** tab shows no connection error message. Then capture again.
- **If the cifX card name is wrong:** Enter the correct card name in **CifX Card Name** (normally `cifx0;0` with one Hilscher card). Check: the **PROFINET** tab shows no connection error message. Then capture again.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with screenshots of the **Setup** and **PROFINET** tabs.

### Problem: Pose Status shows "Bad pose quality." {#ts-hand-eye-bad-pose-quality}

**Symptoms**

After capture, **Pose Status** shows the message `Bad pose quality.`

**Possible causes**

- The program cannot detect the pattern of the calibration plate well. This can lead to a poor calibration.

**Diagnostic procedure**

1. On the **Hand-Eye** tab, check the **Pose Status** of each image in the image list. Note the images that show `Bad pose quality.`

**Resolution**

- **If the pattern is not detected well:**
  1. Delete the image.
  2. Change the orientation of the calibration plate.
  3. Capture a new image. Check: **Pose Status** of the new image does not show `Bad pose quality.`

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with a screenshot of the **Hand-Eye** tab.

### Problem: No image is added after capture {#ts-hand-eye-no-image-added}

**Symptoms**

After capture, no image is added to the image list.

**Possible causes**

- The calibration pattern is not found.

**Diagnostic procedure**

1. Check whether the image is overexposed or underexposed (too bright or too dark).
2. Check that the camera can see the pattern points on the calibration plate.

**Resolution**

- **If the calibration pattern is not found:**
  1. Correct the exposure if the image is too bright or too dark.
  2. Make sure that the camera can see the pattern points on the plate.
  3. Change the orientation of the calibration plate.
  4. Capture again. Check: the image is added to the image list.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with a captured image of the calibration plate.

### Problem: The calibration result is very poor {#ts-hand-eye-poor-result}

**Symptoms**

The calibration result is very poor, for example T:Max > 0.02 (the limit depends on the application). The dialog **Success** shows the calibration error as RMS and MAX values for `T` and `R`:

![Success dialog showing the calibration error with RMS and MAX values for T and R](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/Problem_tabelle01.png)

**Possible causes**

- Too many or too few calibration images have been captured.
- The calibration plate is too far away from the camera.
- The viewing angles of the calibration images differ too little.

**Diagnostic procedure**

1. Count the captured calibration images. Expected: between 6 and 15 images.
2. Check whether the captured images match the recommended orientation of the calibration plate.
3. Check that the viewing angles of the images differ clearly, and that the plate is not too far away from the camera.

**Resolution**

- **If too many or too few images have been captured:** Capture between 6 and 15 images.
- **If the plate is too far away from the camera:** Move the calibration plate closer to the camera and capture the images again.
- **If the viewing angles differ too little:** Capture the images at clearly different viewing angles, in the recommended orientations of the calibration plate.

After the calibration, check the calibration error in the dialog **Success**. Expected: it is within the limit of your application.

**If the problem persists**

Send the information listed under [Information for support](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#support-information) to support, together with a screenshot of the dialog **Success** and the number of images captured.

## Information for support {#support-information}

Send this information to support:

- **Software version:** Press **Ctrl + Shift + V** to display the build version, or start LumiScan VGR with `-v` / `--version`. Via OPC UA, read `Version`, `GitRevision` and `BuildTime` under `LumiScanVGR/Version`.
- **Operating system:** The Windows version of the IPC (LumiScan VGR requires Windows 11), and the installed NVIDIA GPU, CUDA and cuDNN versions.
- **Logs:** The log files from `<HDVAppData>\LumiScan VGR\logs` (`LumiScanVGR.log`), and the memory dump from `<HDVAppData>\LumiScan VGR` if the application crashed. `HDVAppData` is `C:\Users\<UserName>\AppData\Local\HD Vision Systems GmbH`.
- **Diagnostic information:** S4 collects diagnostic information about the application; the collected data can be encrypted and sent to HD Vision Systems. To include camera data, enable **Camera png** and **Camera ply** under **Export** in **Admin Settings** (A1) first.
- **Time of the error:** The date and time at which the error occurred.
- **Communication status:**
  - PROFINET: a screenshot of the **PROFINET** tab in admin mode, the values of `OUT_ReturnCode`, `OUT_OperationMode` and `OUT_Error`, and, if possible, the saved status of the PLC variables.
  - OPC UA: the method called, its `ReturnCode` or the error reported by the client (for example `BadTimeout`), and the result of `GetOperationMode`.
- **Configuration:** The JSON settings file that was loaded at start.
- **Messages and serial numbers:** The exact message from the status window or the log, a screenshot, the camera serial number and, for licence problems, the serial number of the LumiScan Key.

Contact HD Vision Systems customer success at [customer.success@hdvisionsystems.com](mailto:customer.success@hdvisionsystems.com) or +49 6221 6721905. For licences, contact [licenses@hdvisionsystems.com](mailto:licenses@hdvisionsystems.com).

# FAQ – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/faq.html

Short answers to common questions and error messages for LumiScan VGR. Each entry links to the page with the details.

> [!TIP]
> Search this page for the exact error message. Each entry has a fixed anchor (for example `#faq-return-codes`).

## Requirements, installation and licensing

### What does the IPC need to run LumiScan VGR? {#faq-system-requirements}

- **Answer:**
  - Windows 11
  - An NVIDIA GPU that supports CUDA 11.8, with CUDA Toolkit 11.8 and cuDNN 8.8.1 (the installers are provided by HD Vision Systems)
  - A LumiScanX camera connected to the IPC via Ethernet
  - At least one interface to the control system: PROFINET or OPC UA
- **More:** [System Requirements](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/system-requirements.html)

### What must be installed and checked before installing LumiScan VGR? {#faq-install-prerequisites}

- **Answer:**
  - CodeMeter Runtime 9.00 or later, with the LumiScan Key connected.
  - CUDA 11.8.0 and cuDNN 8.8.1.
  - The LumiScanX camera, installed and configured according to the LumiScanX manual, including its network, Windows Firewall and virus protection settings.
- **More:** [Installation](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/installation.html#installing-lumiscan-vgr)

### How is LumiScan VGR licensed? {#faq-licence}

- **Answer:**
  - Bought from HD Vision Systems: the licence is on the LumiScan Key. Install CodeMeter Runtime 9.00 or later and connect the key.
  - Bought in the ctrlX Store for Windows 11: you need ctrlX WORKS and a LumiScan Key.
  - One LumiScan Key is needed per device that runs the software at the same time. Keys can be exchanged between devices.
- **More:** [Licence](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/system-requirements.html#licence), [Licensing FAQ](https://docs.hdvisionsystems.com/en/lumiscan-licensing/1.0.4/faq.html)

## Starting and configuration

### How do I start LumiScan VGR? {#faq-start}

- **Answer:** In the Start Menu window, enter the path to the configuration file (or click **Load** and select it) and click **Start**. From the command line, specify at least the settings file with `-s` or `--settings <filepath>`; `-v` shows the version and `-h` the command-line help.
- **More:** [Starting LumiScan VGR](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/start-menu.html)

### Can I test LumiScan VGR without a camera or PLC? {#faq-simulation}

- **Answer:** Yes. Enable the simulation options in the Start Menu, or use the command-line options:
  - `--simulate-camera`: images and point clouds are loaded from disk instead of a camera. The path is set with `loadFilePath`; a center image (`.png`) and a point cloud (`.ply`) with the same base name must exist.
  - `--simulate-sps`: no physical PLC is needed; PLC communication can be simulated through the **PROFINET** tab.
- **More:** [Starting LumiScan VGR](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/start-menu.html), [RecordingSystemSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/recording-system-settings.html#recording-system-settings-load-file-path)

### What does the JSON settings file contain, and how do I convert an old one? {#faq-settings-file}

- **Answer:** The settings file contains the sections `cameras`, `recordings`, `networks`, `robots`, `objects` and `pipelines`, plus the optional `user` and `system` sections. The metadata format changed after version 1.7.0.0: the file information (`inputFileType`, `inputFileVersion`, `targetMachine`, `programName`, `programVersion`) is now grouped in a `meta` object instead of top-level fields such as `VGRVersion`. New configurations should use the `meta` structure. `--gen-settings` creates a settings file.
- **More:** [JSON Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings.html), [Meta Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/json-settings/meta.html)

### How do I open admin mode or debug mode, and why are the admin controls inactive? {#faq-admin-debug-mode}

- **Answer:**
  - **Ctrl + Shift + A** switches admin mode on or off, **Ctrl + Shift + D** debug mode, and **Ctrl + Shift + V** shows the build version.
  - The **Scene** and **PROFINET** tabs are only visible in admin mode.
  - The admin controls (A2 to A14) are only active in manual mode, so that the automatic process is paused.
  - Passwords can be set with `adminPassword` and `manualModePassword` in the `user` section; if left empty, no password is required. If `system/enableExternalAdminModeControl` is `true`, the PLC switches admin mode with `IN_EnableAdminMode` and admin password protection is disabled.
- **More:** [Admin and Debug Modes](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/admin-mode.html), [User Interface](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html)

## Operation and PLC communication (PROFINET)

### What is the difference between Get Best Result and Grip Best Result? {#faq-get-vs-grip-best-result}

- **Answer:** Both calculate grip points for the active robot from the most recent object poses and return the highest-priority valid grip. Grip Best Result additionally tells the system that the selected result has been or will be gripped; via OPC UA, each `GripBestResult` call returns the next candidate in ranked order. Get Best Result does not consume the result.
- **More:** [PROFINET Interface Reference](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/profinet.html), [OPC UA Client Integration Guide](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/opcua/opc-ua-client-integration-guide.html)

### My project has several cameras, pipelines or robots. Which one is used? {#faq-multiple-components}

- **Answer:** All calculations use the currently active camera, pipeline and robot. Select them before each function: via PROFINET with `OUT_SetParameter` (`IN_ParamId` `1` = `SET_CAMERA_ID`, `2` = `SET_PIPELINE_ID`, `3` = `SET_ROBOT_ID`, ID in `IN_ParamArgString`), via OPC UA with `SetActiveCamera`, `SetActivePipeline` and `SetActiveRobot`. An unknown ID returns `ID_DOES_NOT_EXIST`.
- **More:** [PLC Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html)

## OPC UA

### How do I connect an OPC UA client to LumiScan VGR? {#faq-opcua-connect}

- **Answer:** Connect to `opc.tcp://<host>:4840`. Security policy and mode are None with anonymous login; at most 2 clients can be connected at the same time, and the recommended session timeout is 10 s. All nodes are under `Objects/LumiScanVGR` (namespace index 1). Because there is no authentication, make the server accessible only within the plant network.
- **More:** [OPC UA Client Integration Guide](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/opcua/opc-ua-client-integration-guide.html)

### In which order do I call the OPC UA methods? {#faq-opcua-call-sequence}

- **Answer:** For standard production, `ExecuteSimpleRecipe` (camera, pipeline and robot IDs) or `ExecuteRecipe` (pre-configured recipe ID) runs the capture-and-grip sequence in one call. For finer control, use the individual steps:
  1. Check the mode with `GetOperationMode`; if it is not `AUTOMATIC`, call `SetOperationMode`.
  2. Call `SetupSystem` and wait for `SUCCESS`.
  3. Select the configuration with `SetActiveCamera`, `SetActivePipeline` and `SetActiveRobot`.
  4. Call `CaptureImage`, then `ComputeObjects`.
  5. Call `GetBestResult` (does not consume the result) and/or `GripBestResult` (returns the next candidate on each call).
- **More:** [OPC UA Client Integration Guide](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/opcua/opc-ua-client-integration-guide.html)

## Return codes and log files

### What do the return codes mean? {#faq-return-codes}

- **Answer:** The result of each action is shown in the status window (for example **SUCCESS**) and, for PROFINET, as a number in `OUT_ReturnCode`. OPC UA methods return the code as the string `ReturnCode`.
  - `0` `SUCCESS`: no error
  - `1` `UNKNOWN_ERROR`: unknown error; check the log
  - `2` `CAMERA_NOT_INITIALIZED`: active camera not initialized or does not exist; run Setup first
  - `3` `CAMERA_NOT_CONNECTED`: no connection to the camera
  - `4` `CAMERA_ACQUISITION_ERROR`: error while communicating with or acquiring data from the camera
  - `5` `PIPELINE_NOT_INITIALIZED` / `6` `ROBOT_NOT_INITIALIZED`: active pipeline or robot not initialized or does not exist
  - `7` `MISSING_DATA`: required data, such as a recording or a previous calculation result, is missing
  - `8` `ID_DOES_NOT_EXIST`: the camera, pipeline or robot ID is not configured
  - `9` `MISSING_TRANSFORM`: coordinate transformation not available, for example missing hand-eye calibration data for a robot-camera pair
  - `10` `RESULTS_EMPTY`: no valid grip points for the active robot
  - `12` `CAMERA_HARDWARE_TRIGGER_AGAIN`: auto-exposure was unsuccessful; trigger the camera again
  - `13` `CAMERA_BAD_EXPOSURETIME_SETTING`: the requested exposure time cannot be reached; check the auto-exposure settings
  - OPC UA only: `CAMERA_RESTART_REQUIRED` (call `ResetCamera`) and `OPERATION_MODE_INVALID` (server is not in `AUTOMATIC`; call `SetOperationMode` with `1`)
- **More:** [PLC Settings: Status Information](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html#status-information), [OPC UA Client Integration Guide](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/opcua/opc-ua-client-integration-guide.html)

### Where are log files, recordings and training data stored? {#faq-logs-output-data}

- **Answer:** `HDVAppData` is `C:\Users\<UserName>\AppData\Local\HD Vision Systems GmbH`.
  - Log files: `<HDVAppData>\LumiScan VGR\logs` (rotating, max. 10 MB per file, max. five files). The log window opens with S3 in the user interface; debug mode shows the detailed log output in the console.
  - Crash dumps: `<HDVAppData>\LumiScan VGR`.
  - Recorded and calculated data: the output folder set in the settings file (`saveFilePath`, default `data`). Some export options can be switched in **Admin Settings** (A1) in admin mode.
  - Training data: the `training_data` folder in the project **Settings** folder.
- **More:** [Generated Data and Files](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/output-data.html), [RecordingSystemSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/recording-system-settings.html#recording-system-settings-save-file-path)

## Troubleshooting {#troubleshooting}

Problems and error messages are described step by step in [Troubleshooting](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html):

- [The camera is not recognized or no image is captured after start-up](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-setup-required)
- [Image capture fails with a camera return code](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-camera-error-code)
- [A timeout message appears or only a black image is captured, although the camera is detected](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-black-image-timeout)
- [LumiScan VGR does not respond after GripBestResult](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-no-reaction-plc-request)
- [The PLC cannot start any functions after manual mode](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-manual-mode-plc)
- [OPC UA calls fail with `BadTimeout` or `BadResourceUnavailable`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-opcua-timeout)
- [OPC UA methods return `OPERATION_MODE_INVALID`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-opcua-operation-mode-invalid)
- [`CameraTemperature` is `-273.1528`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-opcua-camera-temperature)
- [`Shutdown` has no effect](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-opcua-shutdown-no-effect)
- [`RESULTS_EMPTY` is returned](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-results-empty)
- [No objects are detected (object count is `0`)](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-no-objects-detected)
- [No point cloud matching can be performed](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-no-point-cloud-matching)
- [A function returns `ID_DOES_NOT_EXIST`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-id-does-not-exist)
- [A function returns `MISSING_TRANSFORM`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-missing-transform)
- [Pose Status shows "Can not be interpreted"](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-hand-eye-cannot-be-interpreted)
- [Pose Status shows "Bad pose quality."](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-hand-eye-bad-pose-quality)
- [No image is added after capture](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-hand-eye-no-image-added)
- [The calibration result is very poor](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-hand-eye-poor-result)

## Support

### Where can I get further help? {#faq-support}

- **Answer:** See the site-wide [LumiScan FAQ](https://docs.hdvisionsystems.com/en/faq.html). Diagnostic information can be collected with S4 in the user interface and sent encrypted to HD Vision Systems. Contact customer success at [customer.success@hdvisionsystems.com](mailto:customer.success@hdvisionsystems.com) or +49 6221 6721905; for licences, contact [licenses@hdvisionsystems.com](mailto:licenses@hdvisionsystems.com).
- **More:** [User Interface](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/user-interface.html)

# Disclaimer – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/disclaimer.html

> [!NOTE]
> This is a convenience translation. In case of doubt or dispute, the German wording of this section in the printed manual applies.

1. The operator, and not the manufacturer, is liable for all damage resulting in injury to life, body or health as well as for any property damage arising from use other than as intended. Please note that operating and/or connection errors are outside our sphere of influence. Understandably, we cannot accept any liability for damage arising from them.
2. All damage arising from unauthorised debugger-based activities to inspect, analyse or manipulate the software provided by HD Vision Systems is the sole responsibility of the user. Any attempt to use a debugger is strictly prohibited and may entail irreversible consequences such as loss of data, interruption of service and even legal consequences. The manufacturers, developers and distributors of the software are not liable for damage and losses arising from the user’s failure to observe this warning.
3. Claims for damages by the purchaser arising from fault on conclusion of the contract, breach of ancillary contractual obligations and tort are excluded unless they are based on intent or gross negligence on the part of HD Vision Systems GmbH itself or one of our vicarious agents.
4. Claims for recourse within the meaning of § 12 of the German Product Liability Act are excluded unless the party entitled to recourse proves that the defect was caused by HD Vision Systems GmbH and was at least grossly negligently culpable.
5. Should individual provisions of this contract be or become invalid or unenforceable, whether at the outset or after conclusion of the contract, the validity of the remainder of the contract shall not be affected. The invalid or unenforceable provision shall be replaced by the valid and enforceable provision whose effects come closest to the economic objective that the contracting parties pursued with the invalid or unenforceable provision. The foregoing provisions apply accordingly in the event that the contract proves to be incomplete. German courts have exclusive jurisdiction over disputes in connection with this disclaimer.

For further information on the warranty, please contact the manufacturer.

# OPC UA Client Integration Guide – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/opcua/opc-ua-client-integration-guide.html

This document describes how to connect to and operate the LumiScan VGR OPC UA server. Because OPC UA is self-describing, clients can browse the available nodes and methods directly. This guide covers the configuration settings and call patterns clients **must** follow to integrate reliably.

## Client Configuration & Execution Behavior

Due to physical hardware operations (camera triggers, robot communication) and heavy computational tasks (neural network inference), clients **must** respect the following execution constraints:

- **Execution Time & Call Timeouts**: Many methods take significantly longer than standard PLC operations.
  - **Typical execution time**: 3 to 10 seconds.
  - **Recommended client call timeout**: At least **15 seconds**.
  - *Failure to configure this timeout will result in client-side errors such as `BadTimeout` or transport disconnects.*
- **Concurrency**: The server processes **one method at a time**. Parallel or concurrent method calls are not supported and will be rejected with `BadResourceUnavailable`.

## Connection Profile

| Property | Value |
| --- | --- |
| Endpoint | `opc.tcp://<host>:4840` |
| Security Policy / Mode | None (anonymous, unauthenticated) |
| Authentication | **None** (Anonymous login) |
| Max. simultaneous clients | **2** (additional connection attempts will be refused) |
| Recommended Session Timeout | **10s** (adjust up or down based on your polling interval) |

> **Note:** The server currently requires no authentication. Ensure it is accessible only within your plant network perimeter.

## Address Space Layout

All nodes are hosted under `Objects/LumiScanVGR` (namespace index 1).

### Manufacturer

Child object: `LumiScanVGR/Manufacturer`

| Variable | Type | Access | Description |
| --- | --- | --- | --- |
| `Name` | `String` | Read | Manufacturer name. |
| `Address` | `String` | Read | Manufacturer address. |

### Version

Child object: `LumiScanVGR/Version`

| Variable | Type | Access | Description |
| --- | --- | --- | --- |
| `Version` | `String` | Read | Version string of the running software build. |
| `GitRevision` | `String` | Read | Commit hash of the running build. |
| `BuildTime` | `String` | Read | Build timestamp of the running build. |

### Capability Catalogs

These arrays are populated at server startup from the project configuration. If hardware IDs are added or changed, the server must be restarted to reflect them.

| Variable | Type | Access | Description |
| --- | --- | --- | --- |
| `PossibleCameras` | `String[]` | Read | All configured camera IDs. |
| `PossiblePipelines` | `String[]` | Read | All configured pipeline IDs. |
| `PossibleRobots` | `String[]` | Read | All configured robot IDs. |

### Live Configuration

These nodes are updated on every read and reflect the current active selections.

| Variable | Type | Access | Description |
| --- | --- | --- | --- |
| `ActiveCamera` | `String` | Read | Currently active camera. |
| `ActivePipeline` | `String` | Read | Currently active pipeline/recipe. |
| `ActiveRobot` | `String` | Read | Currently active robot definition. |

## Method Reference

All methods return their status as the first output argument `ReturnCode` (type `String`). See `Return Codes` for all possible values.

| Method | Input Arguments | Output Arguments | Description |
| --- | --- | --- | --- |
| `ExecuteSimpleRecipe` | `CameraId` (`String`), `PipelineId` (`String`), `RobotId` (`String`) | `ReturnCode` | Convenience method. Runs the full capture-and-grip sequence using the IDs supplied by the client. Passing an empty string reuses the last known ID for that parameter — explicitly providing all IDs is strongly recommended. |
| `ExecuteRecipe` | `RecipeId` (`String`) | `ReturnCode` | Convenience method. Runs the full capture-and-grip sequence using a pre-configured server-side recipe identified by `RecipeId`. Recipe IDs and their associated camera/pipeline/robot combinations are defined in the LumiScan VGR project configuration. Empty strings are **not** allowed. |
| `SetOperationMode` | `Mode` (`Byte`) | `ReturnCode` | Switches the server between `IDLE` (0), `AUTOMATIC` (1), `MANUAL` (2), and `SHUTDOWN` (3). All other methods are only accepted in `AUTOMATIC` mode. |
| `GetOperationMode` | — | `ReturnCode`, `Mode` (`Byte`), `ModeName` (`String`) | Returns the current operation mode as a numeric value and a human-readable name. |
| `SetActiveCamera` | `ActiveCamera` (`String`) | `ReturnCode` | Selects the camera for subsequent operations. |
| `SetActivePipeline` | `ActivePipeline` (`String`) | `ReturnCode` | Selects the vision pipeline/recipe for subsequent captures. |
| `SetActiveRobot` | `ActiveRobot` (`String`) | `ReturnCode` | Selects the robot definition used to express grip poses. |
| `SetupSystem` | — | `ReturnCode` | Initializes all hardware and software resources. Must be called at least once after the application starts. |
| `ResetCamera` | `CameraId` (`String`, optional) | `ReturnCode` | Performs a deep reset of the specified camera. Pass an empty string to reset all cameras. |
| `Shutdown` | — | `ReturnCode` | **Placeholder** — not yet implemented. Has no effect on the running process. |
| `CaptureImage` | — | `ReturnCode` | Acquires a fresh image from the active camera. |
| `GetCameraTemperature` | — | `ReturnCode`, `CameraTemperature` (`Double`) | Returns the current temperature of the active camera in °C. Returns `-273.1528` when the value is unavailable — treat this as "unknown". |
| `ComputeObjects` | — | `ReturnCode`, `NumObjects2D` (`Byte`), `NumObjects3D` (`Byte`) | Runs object detection on the last captured image. Returns the number of detected 2D and 3D objects (capped at 255). |
| `GetBestResult` | — | `ReturnCode`, `GripPointPose` (`Float[7]`) | Returns the highest-ranked grip pose from the most recent detection. Use for inspection or simulation without consuming the result. |
| `GripBestResult` | — | `ReturnCode`, `GripPointPose` (`Float[7]`) | Returns the next grip pose in ranked order and advances the internal iterator. Call repeatedly to step through all candidates. |
| `GetReport` | `ParamId` (`Byte`), `ArgByte` (`Byte`), `ArgFloat` (`Float`), `ArgString` (`String`) | `ReturnCode`, `ValueByte` (`Byte`), `ValueInt` (`Int32`), `ValueFloat` (`Float`), `ValueString` (`String`) | Generic getter for querying object counters and similar values. See `Parameter IDs` below. |

### Pose Array Layout

`GripPointPose` always contains exactly seven `Float` values:

| Index | Field | Description |
| --- | --- | --- |
| 0 | `x` | Translation X in robot coordinate system (meters) |
| 1 | `y` | Translation Y in robot coordinate system (meters) |
| 2 | `z` | Translation Z in robot coordinate system (meters) |
| 3 | `rx` | Rotation X (Euler / axis-angle, robot-driver dependent) |
| 4 | `ry` | Rotation Y |
| 5 | `rz` | Rotation Z |
| 6 | `w` | Optional fourth component (quaternion W or unused). Remains `0` when not supplied. |

Interpret the pose according to your robot plug-in documentation.

### Parameter IDs

Used via `GetReport` to query detection results.

| `ParamId` | ParamId Description | Input Field `ArgString` | Result field | Description |
| --- | --- | --- | --- | --- |
| `0` | `GET_NUM_OBJECTS2D_TOTAL` | — | `ValueByte` | Total number of detected 2D objects. |
| `1` | `GET_NUM_OBJECTS3D_TOTAL` | — | `ValueByte` | Total number of detected 3D objects. |
| `2` | `GET_NUM_OBJECTS2D_TYPE` | \<Object Id> | `ValueByte` | Number of 2D objects matching the given class. |
| `3` | `GET_NUM_OBJECTS3D_TYPE` | \<Object Id> | `ValueByte` | Number of 3D objects matching the given class. |
| `4` | `GET_DEPTH_DIFFERENCE` | — | `ValueFloat` | Thickness of gripped object |

`SetParameter` is not supported via OPC UA.

### Operation Mode

The server enforces an operation mode that must be set before most methods are usable.

| Mode | Value (`Byte`) | Description |
| --- | --- | --- |
| `IDLE` | `0` | Standby. Most methods rejected. |
| `AUTOMATIC` | `1` | Normal production mode. All methods accepted. |
| `MANUAL` | `2` | Local/GUI control active. Most methods rejected. |
| `SHUTDOWN` | `3` | Shutdown in progress. |

Only `SetOperationMode` and `GetOperationMode` are accepted in any mode. All other methods return `OPERATION_MODE_INVALID` when the mode is not `AUTOMATIC`. The server starts in `AUTOMATIC` by default.

## Recommended Call Sequence

> **Shortcut for standard production:** Replace steps 2–6 with a single call:\* ExecuteSimpleRecipe(CameraId, PipelineId, RobotId) — client provides IDs directly. + \* ExecuteRecipe(RecipeId) — use a pre-configured server-side recipe(settings.json). Use the step-by-step sequence below when you need finer control, e.g. to inspect intermediate counts or repeat only the capture step.

1. **Get/Set Operation Mode** — Verify the server is in `AUTOMATIC`. If it reports `IDLE` or `MANUAL`, call `SetOperationMode` before anything else.
2. **SetupSystem** — Initialize hardware and load all resources. Wait for `SUCCESS` before continuing.
3. **SetActiveCamera / SetActivePipeline / SetActiveRobot** — Define the working configuration. Required at least once per production order; skip if the previous selection is still valid.
4. **CaptureImage** — Acquire the current scene.
5. **ComputeObjects** — Run detection. `NumObjects2D` and `NumObjects3D` are available on `SUCCESS`. Repeat from step 4 if a fresh scene is required.
6. **GetBestResult** — Read the highest-ranked grip pose without consuming it (useful for logging or simulation).
7. **GripBestResult** — Retrieve the next executable grip pose for the robot. Call repeatedly to step through all candidates.
8. *(Optional)* **GripBestResult** — Required for measuring object’s thickness by calling this function after robot grip the current object away.
9. *(Optional)* **GetReport(ParamId:4)** — It will return object thickness in `ValueFloat` field

Read `ActiveCamera`, `ActivePipeline`, and `ActiveRobot` at any time to confirm which configuration is currently active.

## Return Codes

Every method returns a `ReturnCode` string as its first output. The table below lists all possible values and their meaning.

| ReturnCode | Description |
| --- | --- |
| `SUCCESS` | Operation completed without errors. |
| `UNKNOWN_ERROR` | Unclassified failure. Check the server-side application log for details. |
| `CAMERA_NOT_INITIALIZED` | Camera was not initialized. Call `SetupSystem` first. |
| `CAMERA_NOT_CONNECTED` | Camera hardware is not reachable. Use `ResetCamera` or check cabling. |
| `CAMERA_ACQUISITION_ERROR` | Image acquisition failed (exposure, trigger, or transport problem). |
| `PIPELINE_NOT_INITIALIZED` | The selected pipeline is not ready. Verify `SetActivePipeline` succeeded. |
| `ROBOT_NOT_INITIALIZED` | Robot configuration is missing or invalid. |
| `MISSING_DATA` | Required data (image, point cloud, etc.) is not available yet. |
| `ID_DOES_NOT_EXIST` | The supplied camera/pipeline/robot/recipe ID is not known. Verify against the `Possible*` arrays. |
| `MISSING_TRANSFORM` | The robot-to-world transform could not be determined. |
| `RESULTS_EMPTY` | No grip candidates are available. Run `ComputeObjects` first. |
| `CAMERA_HARDWARE_TRIGGER_AGAIN` | Hardware trigger produced no frame. Retry `CaptureImage`. |
| `CAMERA_BAD_EXPOSURETIME_SETTING` | Exposure setting prevented a valid image from being acquired. |
| `CAMERA_RESTART_REQUIRED` | Camera driver/firmware requires a restart. Call `ResetCamera`. |
| `OPERATION_MODE_INVALID` | Method was rejected because the server is not in `AUTOMATIC` mode. Call `GetOperationMode` to check the current state, then `SetOperationMode` to switch back. |

## Troubleshooting

Problems with OPC UA calls are described step by step in [Troubleshooting](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#opc-ua):

- Calls time out, or `BadResourceUnavailable`: [OPC UA calls fail with `BadTimeout` or `BadResourceUnavailable`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-opcua-timeout)
- `OPERATION_MODE_INVALID`: [OPC UA methods return `OPERATION_MODE_INVALID`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-opcua-operation-mode-invalid)
- `ID_DOES_NOT_EXIST`, or the `Possible*` arrays are stale: [A function returns `ID_DOES_NOT_EXIST`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-id-does-not-exist)
- Object counts are 0 after `ComputeObjects`: [No objects are detected (object count is `0`)](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-no-objects-detected)
- `GripBestResult` returns `RESULTS_EMPTY`: [`RESULTS_EMPTY` is returned](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#faq-results-empty)
- `CameraTemperature` is `-273.1528`: [`CameraTemperature` is `-273.1528`](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-opcua-camera-temperature)
- `Shutdown` has no effect: [`Shutdown` has no effect](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#ts-opcua-shutdown-no-effect)

---

# AutoexposureSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/autoexposure-settings.html

Define how to apply autoexposure, i.e. how to compute the current image intensity and when/how to apply the new exposure time.

## Member Variables

- **`polygon`:** `std::vector< cv::Point >`, default: `\{\{50, 50\}, \{1230, 50\}, \{1230, 910\}, \{50, 910\}\}` *JSON Type*: array +*Requirement*: The array must contain tuples of integers (i.e. arrays of two integers). Contains image coordinate pairs that describe the polygon-shaped ROI used for autoexposure computation.

- **`referenceIntensity`:** `int`, default: `{60}` *JSON Type*: integer +*Requirement*: The value must be inside (0, 255). Reference intensity value. The current intensity of an image captured by the camera ideally matches the value.

- **`maxRetryTimeout_ms`:** `size_t`, default: `{800}` within this time, auto-exposure software trigger will retry to get better exposure time for Mono8 lumiscanX takes 170~200ms, so it might retry 2-4 times;

- **`referenceIntensityTolerance`:** `uint8_t`, default: `{5}` If target autoexposrue reference value after capture is within referenceIntensity+-targetTolerance, then auto exposure will stop early, instead of keeping retry until timeout.

- **`allowedIntensityUpperBound`:** `uint8_t`, default: `{255}` This is the upper bound for the allowed intensity. *JSON Type*: integer +*Requirement*: The value must be inside (0, 255). and must be larger than allowedIntensityLowerBound and larger than referenceIntensity After image capture, autoexposure will test whether new image’s value is close to reference value If value is larger than this value, then it will consider as invalid autoexposure, camera will try to capture again

- **`allowedIntensityLowerBound`:** `uint8_t`, default: `{0}` This is the lower bound for the allowed intensity. *JSON Type*: integer +*Requirement*: The value must be inside (0, 255). and must be smaller than allowedIntensityUpperBound and referenceIntensity After image capture, autoexposure will test whether new image’s value is close to reference value If value is smaller than this value, then it will consider as invalid autoexposure, camera will try to capture again

- **`intensityMeasurementAlgorithm`:** `IntensityMeasurementAlgorithm`, default: `\{IntensityMeasurementAlgorithm::Mean\}` *JSON Type*: string +*Requirement*: The value must be selected from following set: \\{Mean, Median\\} Defines which method is used for determining the reference intensity.

- **`lowerExposureTimeLimit_us`:** `int`, default: `{500}` *JSON Type*: integer +*Requirement*: The value must be higher/equal than 500us and lower than upperExposureTimeLimit_us. Lower boundary of calculated autoexposure time.

- **`upperExposureTimeLimit_us`:** `int`, default: `{1500000}` *JSON Type*: integer +*Requirement*: The value must be lower/equal than 1500000us and higher than lowerExposureTimeLimit_us. Upper boundary of calculate autoexposure time.

## Enumerations

**Table 1. IntensityMeasurementAlgorithm**

| Value | Description |
| --- | --- |
| `Mean` |   |
| `Median` |   |

# BoxFilterParameter – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/box-filter-parameter.html

Remove points within/outside of the given bounding box.

## Member Variables

- **`minVertex`:** `std::array< float, 3 >` [m] (x, y, z) Bottom left vertex of the box

- **`maxVertex`:** `std::array< float, 3 >` [m] (x, y, z) Top right vertex of the box

- **`transform`:** `Transform`, default: `\{\}` which coordinate system box vertices used

- **`keepInside`:** `bool`, default: `{true}` if false, it will keep outside

- **`filterType`:** `CloudFilterType` type of cloud filter

## Enumerations

**Table 1. CloudFilterType**

| Value | Description |
| --- | --- |
| `BOX` | Box filter. |
| `REMOVE_NAN` | Remove NaN points. |

# CameraSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/camera-settings.html

LumiScan settings. Entries correspond to the settings from the LumiScan Viewer.

## Member Variables

- **`id`:** `std::string`, default: `\{""\}` *JSON Type*: string Unique camera name in settings

- **`serial`:** `std::string`, default: `\{""\}` *JSON Type*: string The serial number of the camera, if not given, it will use 'id' as serial

- **`calibrationFile`:** `std::filesystem::path`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be a path to a regular file. File path to the calibration file associated with the LumiScan device.

- **`simulateCamera`:** `bool`, default: `{false}` *JSON Type*: (optional) bool Force the application to simulate a camera. This does not require a physical camera. When capturing an image the data specified by loadFilePath/datasetName is loaded instead. If no datasetName is specified the recording setting id is used as datasetName.

- **`genTLSettings`:** `std::optional< hdv::camera::genicam::GenTLSettings >`, default: `\{std::nullopt\}`

# CloudFilterParameterBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/cloud-filter-parameter-base.html

Abstract base class for all cloud filter parameters.

## Member Functions

- **`CloudFilterParameterBase(CloudFilterType filterType_)`:**

- **`virtual ~CloudFilterParameterBase()=default`:** == Member Variables
- **`filterType`:** `CloudFilterType` type of cloud filter

## Enumerations

**Table 1. CloudFilterType**

| Value | Description |
| --- | --- |
| `BOX` | Box filter. |
| `REMOVE_NAN` | Remove NaN points. |

# ConcreteCloudFilterParameterBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/concrete-cloud-filter-parameter-base.html

(no description)

## Member Functions

- **`ConcreteCloudFilterParameterBase()`:** == Member Variables
- **`filterType`:** `CloudFilterType` type of cloud filter

## Enumerations

**Table 1. CloudFilterType**

| Value | Description |
| --- | --- |
| `BOX` | Box filter. |
| `REMOVE_NAN` | Remove NaN points. |

# CorrectionFeature – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-feature.html

(no description)

## Member Variables

- **`objectId`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must not be empty. Object Id of the feature.

- **`position`:** `Eigen::Vector2f`, default: `\{Eigen::Vector2f::Zero()\}` *JSON Type*: array +*Requirement*: Must have two elements. Position of the feature in oriented bounding box frame (i.e. box corners are located at [±1, ±1]).

# CorrectionSettingsBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-base.html

Define how a point cloud can be corrected (e.g. if we experience some nonlinear offsets when gripping). Base class. See [CAMERA_CORRECTION_TYPE](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-base.html#correction-settings-base-camera-correction-type) for instances.

## Member Functions

- **`virtual ~CorrectionSettingsBase()=default`:**

- **`virtual CAMERA_CORRECTION_TYPE type() const =0`:** *JSON Type*: string +*Requirement*: Must be a CAMERA_CORRECTION_TYPE. Type of the correction.

## Enumerations

**Table 1. CAMERA_CORRECTION_TYPE**

| Value | Description |
| --- | --- |
| `CLOUD_SCALE` | Scale each point of the point cloud by a fixed amount. See [CorrectionSettings\<CAMERA_CORRECTION_TYPE::CLOUD_SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-scale.html). |
| `CLOUD_Z_CALIBRATION` | Add a correction factor to the z component of each point. See [CorrectionSettings\<CAMERA_CORRECTION_TYPE::CLOUD_Z_CALIBRATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-z-calibration.html). |

# CorrectionSettings< CAMERA_CORRECTION_TYPE::CLOUD_SCALE > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-scale.html

Camera correction.

Applies a scaling to all points of the point cloud.

## Member Functions

- **`virtual CAMERA_CORRECTION_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SET_FULL. Type of the 2D detection step.

## Member Variables

- **`scale`:** `std::array< float, 3 >`, default: `\{1.0f, 1.0f, 1.0f\}` *JSON Type*: array +*Requirement*: Must contain three elements. Each element must be largere than zero. Scaling factors for x, y and z.

## Enumerations

**Table 1. CAMERA_CORRECTION_TYPE**

| Value | Description |
| --- | --- |
| `CLOUD_SCALE` | Scale each point of the point cloud by a fixed amount. See [CorrectionSettings\<CAMERA_CORRECTION_TYPE::CLOUD_SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-scale.html#). |
| `CLOUD_Z_CALIBRATION` | Add a correction factor to the z component of each point. See [CorrectionSettings\<CAMERA_CORRECTION_TYPE::CLOUD_Z_CALIBRATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-z-calibration.html). |

# CorrectionSettings< CAMERA_CORRECTION_TYPE::CLOUD_Z_CALIBRATION >::ImageDistancePair – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-z-calibration-imagedistancepair.html

(no description)

## Member Variables

- **`imagePath`:** `std::filesystem::path` *JSON Type*: string +*Requirement*: Must point to a valid calibration image (e.g. 1 channel). The image contains offset values for points at distance zDistance.

- **`zDistance`:** `float`, default: `\{0.0f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Calibration depth of the image.

- **`maxCalibrationDistance`:** `float`, default: `\{0.02\}` *JSON Type*: float +*Requirement*: Must be greater than minCalibrationDistance. The distance the maximum image intensity (e.g. 255) corresponds to. A positive distance will result in a shift of the pointcloud away from the camera.

- **`minCalibrationDistance`:** `float`, default: `\{0.00\}` *JSON Type*: float +*Requirement*: Must be less than minCalibrationDistance. The distance the minimum image intensity (e.g. 0) corresponds to. A positive distance will result in a shift of the pointcloud away from the camera.

- **`decayDistance`:** `float`, default: `\{0.1\}` *JSON Type*: float +*Requirement*: Must be larger than zero. This calibration layer affects all points up to a distance of decayDistance to zDistance. The value decays linearly.

# CorrectionSettings< CAMERA_CORRECTION_TYPE::CLOUD_Z_CALIBRATION > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-z-calibration.html

Camera correction.

Applies a scaling and z-offset addition to all points of the point cloud. All dimensions are given in meters.

## Member Functions

- **`virtual CAMERA_CORRECTION_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SET_FULL. Type of the 2D detection step.

## Member Variables

- **`scale`:** `std::array< float, 3 >`, default: `\{1.0f, 1.0f, 1.0f\}` *JSON Type*: array +*Requirement*: Must contain three elements. Each element must be larger than zero. Scaling factors for x, y and z.

- **`layers`:** `std::vector< ImageDistancePair >` *JSON Type*: array of ImageDistancePair objects. +*Requirement*: Must not be empty.

## Enumerations

**Table 1. CAMERA_CORRECTION_TYPE**

| Value | Description |
| --- | --- |
| `CLOUD_SCALE` | Scale each point of the point cloud by a fixed amount. See [CorrectionSettings\<CAMERA_CORRECTION_TYPE::CLOUD_SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-scale.html). |
| `CLOUD_Z_CALIBRATION` | Add a correction factor to the z component of each point. See [CorrectionSettings\<CAMERA_CORRECTION_TYPE::CLOUD_Z_CALIBRATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-z-calibration.html#). |

# CorrectionSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings.html

(no description)

# DepthEstimationSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/depth-estimation-settings.html

The depth estimation method.

## Member Variables

- **`rayRadius`:** `float`, default: `\{0.1f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. All points that have a distance less than rayRadius to the ray from camera to the previous object center are considered for the object depth estimation.

# Detection2DSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-settings.html

Defines the individual steps that are performed for the 2D detection. The steps are in chronologial order, i.e. each output of processing step i is processed individually by processing step i + 1.

## Member Variables

- **`steps`:** `std::vector< std::shared_ptr< Detection2DStepSettingsBase > >` *JSON Type*: array of Detection2DStepSettingsBase objects

- **`sort`:** `std::optional< DistanceToReferencePointParameter >`, default: `\{std::nullopt\}`

- **`filter`:** `std::optional< TopNParameter >`, default: `\{std::nullopt\}`

# Detection2DStepSettingsBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-base.html

Common base class for 2D detection settings. See [OBJ_DET_2D_TYPE](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-base.html#detection-2d-step-settings-base-obj-det-2d-type) for specific detectors.

## Member Functions

- **`virtual ~Detection2DStepSettingsBase()=default`:**

- **`virtual OBJ_DET_2D_TYPE type() const =0`:** *JSON Type*: string +*Requirement*: Must be a OBJ_DET_2D_TYPE. Type of the 2D detection step.

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html

Step of the 2D detection pipeline.

Load preset oriented bounding box with given class id from CSV file

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::FEATURE_MATCHING;. Type of the 2D detection step.

## Member Variables

- **`instancesFile`:** `std::filesystem::path` *JSON Type*: vector of string +*Requirement*: Must not be empty and tsv-file must exist. Must contains header, column centerX/centerY/width/height/angleRad/label currently only support tab separator.

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html#). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::FEATURE_MATCHING > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html

Step of the 2D detection pipeline.

Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::FEATURE_MATCHING;. Type of the 2D detection step.

## Member Variables

- **`optimizationParameters`:** `std::vector< FEATURE_MATCHING_OPT_PARAM >` *JSON Type*: vector of string +*Requirement*: Must not be empty. Each element must be a FEATURE_MATCHING_OPT_PARAM Indicate which parameters are optimized during feature matching.

- **`iterations`:** `int`, default: `{3}` *JSON Type*: int +*Requirement*: Must be greater than zero. Number of Gauss-Newton iterations.

- **`features`:** `std::vector< CorrectionFeature >` *JSON Type*: vector of CorrectionFeature +*Requirement*: Must not be empty. Description of features and their location within each oriented bounding box.

## Enumerations

**Table 1. FEATURE_MATCHING_OPT_PARAM**

| Value | Description |
| --- | --- |
| `SCALEX` | Scale the oriented bounding box in x direction. |
| `SCALEY` | Scale the oriented bounding box in y direction. |
| `TX` | Translate the oriented bounding box in x direction. |
| `TY` | Translate the oriented bounding box in y direction. |
| `ANGLE` | Rotate the oriented bounding box. |

**Table 2. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html#). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html

Step of the 2D detection pipeline.

Applies a classification filter to all current oriented bounding boxes. Filters out all boxes where the classification detects a different object.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION. Type of the 2D detection step.

## Member Variables

- **`networkId`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be a valid object classification network ID (see NetworkSettings). Id of the object classification network.

- **`labelId`:** `std::optional< std::string >`, default: `\{""\}` *JSON Type*: (optional) string Label of the object. If not specified the object Id is used as label Id. All available labels can be found in the network decription json class list that comes with each network.

- **`detectionThreshold`:** `float`, default: `\{0.3f\}` *JSON Type*: float +*Requirement*: Must be in [0.0, 1.0]. Threshold for the object classification score.

- **`local`:** `bool`, default: `{false}` *JSON Type*: bool If true, the full image is used for the inference. If false, the current oriented bounding box is used.

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html#). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::REORIENT_ASPECT > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html

Step of the 2D detection pipeline.

Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::REORIENT_ASPECTE. Type of the 2D detection step.

## Member Variables

- **`topSide`:** `REORIENT_ASPECT_TOP_SIDE`, default: `\{REORIENT_ASPECT_TOP_SIDE::LONG\}` *JSON Type*: string +*Requirement*: Must be a REORIENT_ASPECT_TOP_SIDE. Determine which side of the oriented bounding box should be considered the top size.

## Enumerations

**Table 1. REORIENT_ASPECT_TOP_SIDE**

| Value | Description |
| --- | --- |
| `LONG` | Long side of the oriented bounding box. |
| `SHORT` | Short side of the oriented bounding box. |

**Table 2. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html#). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html

Step of the 2D detection pipeline.

Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten".

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION. Type of the 2D detection step.

## Member Variables

- **`orientationNetwork`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be a valid object classification network ID (see NetworkSettings). Id of the object classification network.

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html#). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::ROTATE_ANGLE > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html

Step of the 2D detection pipeline.

Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative to their current orientation and size.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::ROTATE_ANGLE. Type of the 2D detection step.

## Member Variables

- **`angleDeg`:** `float`, default: `\{0.0f\}` *JSON Type*: float Rotation angle in degree.

- **`fixedPoint`:** `Eigen::Vector2f`, default: `\{0.0, 0.0\}` *JSON Type*: array +*Requirement*: Must have two elements. Fixed point in oriented bounding box frame (i.e. box corners are located at [±1, ±1]).

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html#). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::SCALE_ASPECT > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html

Step of the 2D detection pipeline.

Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative to their current orientation and size.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SCALE_ASPECT. Type of the 2D detection step.

## Member Variables

- **`aspectRatio`:** `float`, default: `\{1.0f\}` *JSON Type*: float Target aspect ration.

- **`keepSide`:** `SCALE_ASPECT_KEEP_SIDE`, default: `\{SCALE_ASPECT_KEEP_SIDE::LONG\}` *JSON Type*: string +*Requirement*: Must be a SCALE_ASPECT_KEEP_SIDE. Determine which side of the oriented bounding box should be stay the same size.

- **`fixedPoint`:** `Eigen::Vector2f`, default: `\{0.0, 0.0\}` *JSON Type*: array +*Requirement*: Must have two elements. Fixed point in oriented bounding box frame (i.e. box corners are located at [±1, ±1]).

## Enumerations

**Table 1. SCALE_ASPECT_KEEP_SIDE**

| Value | Description |
| --- | --- |
| `LONG` | Long side of the oriented bounding box. |
| `SHORT` | Short side of the oriented bounding box. |
| `WIDTH` | "Width" side of the oriented bounding box |
| `HEIGHT` | "Height" side of the oriented bounding box |

**Table 2. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html#). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::SCALE_TO > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html

Step of the 2D detection pipeline.

Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative to their current orientation and size.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SCALE_TO. Type of the 2D detection step.

## Member Variables

- **`keepAspectRatio`:** `bool`, default: `{true}` *JSON Type*: bool Toggle if the aspect ratio should be kept. This value is ignored if one of the sides has size zero.

- **`newSize`:** `float`, default: `\{100.0\}` *JSON Type*: float +*Requirement*: Must be larger than zero. Size the oriented bounding box is scaled to in pixel.

- **`modifySide`:** `SCALE_TO_SIDE_MODIFY`, default: `\{SCALE_TO_SIDE_MODIFY::LONG\}` *JSON Type*: string +*Requirement*: Must be a SCALE_TO_SIDE_MODIFY. Determine which side of the oriented bounding box should be stay the same size.

- **`fixedPoint`:** `Eigen::Vector2f`, default: `\{0.0, 0.0\}` *JSON Type*: array +*Requirement*: Must have two elements. Fixed point in oriented bounding box frame (i.e. box corners are located at [±1, ±1]).

## Enumerations

**Table 1. SCALE_TO_SIDE_MODIFY**

| Value | Description |
| --- | --- |
| `LONG` | Long side of the oriented bounding box. |
| `SHORT` | Short side of the oriented bounding box. |
| `WIDTH` | "Width" side of the oriented bounding box |
| `HEIGHT` | "Height" side of the oriented bounding box |

**Table 2. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html#). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::SCALE > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html

Step of the 2D detection pipeline.

Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative to their current orientation and size.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SCALE. Type of the 2D detection step.

## Member Variables

- **`scale`:** `Eigen::Vector2f`, default: `\{Eigen::Vector2f::Zero()\}` *JSON Type*: array +*Requirement*: Must have two elements. Scaling factor in x and y direction (in oriented bounding box frame).

- **`fixedPoint`:** `Eigen::Vector2f`, default: `\{0.0, 0.0\}` *JSON Type*: array +*Requirement*: Must have two elements. Fixed point in oriented bounding box frame (i.e. box corners are located at [±1, ±1]).

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html#). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_FULL > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html

Step of the 2D detection pipeline.

All current oriented bounding boxes are set to the full image size (top is up).

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SET_FULL. Type of the 2D detection step.

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html#). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_NETWORK > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html

Step of the 2D detection pipeline.

Applies an object detection network to all current oriented bounding boxes. Returns all detected objects with scores above a specified detection threshold.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SET_NETWORK. Type of the 2D detection step.

## Member Variables

- **`networkId`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be a valid object detection network ID (see NetworkSettings). Id of the object detection network.

- **`labelId`:** `std::optional< std::string >`, default: `\{""\}` *JSON Type*: (optional) string Label of the object. If not specified the object Id is used as label Id. All available labels can be found in the network decription json class list that comes with each network.

- **`detectionThreshold`:** `float`, default: `\{0.3f\}` *JSON Type*: float +*Requirement*: Must be in [0.0, 1.0]. Threshold for the object detection score.

- **`local`:** `bool`, default: `{false}` *JSON Type*: bool If true, the full image is used for the inference. If false, the current oriented bounding box is used.

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html#). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_OTHER > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html

Step of the 2D detection pipeline.

All current oriented bounding boxes are set to the result of another 2D detection pipeline.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SET_OTHER. Type of the 2D detection step.

## Member Variables

- **`objectId`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must not be empty. Id of the object whose results are used.

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html#). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_ROI_PIPELINE > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html

Step of the 2D detection pipeline.

All current oriented bounding boxes are set to the ROI of the pipeline (top is up).

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SET_ROI. Type of the 2D detection step.

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html#). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_ROI > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html

Step of the 2D detection pipeline.

All current oriented bounding boxes are set to a specified ROI (top is up).

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::SET_ROI. Type of the 2D detection step.

## Member Variables

- **`imageROI`:** `cv::Rect`, default: `\{0, 0, 1280, 960\}` *JSON Type*: image ROI (fields: x, y, width, height) +*Requirement*: Must define a ROI inside the image dimensions 1280 x 960.

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html#). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings< OBJ_DET_2D_TYPE::TRANSLATE > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html

Step of the 2D detection pipeline.

Translate all current oriented bounding boxes relative to their current orientation and size.

## Member Functions

- **`virtual OBJ_DET_2D_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJ_DET_2D_TYPE::TRANSLAT. Type of the 2D detection step.

## Member Variables

- **`translate`:** `Eigen::Vector2f`, default: `\{Eigen::Vector2f::Zero()\}` *JSON Type*: array +*Requirement*: Must have two elements. Translation vector in oriented bounding box frame (i.e. box corners are located at [±1, ±1]).

## Enumerations

**Table 1. OBJ_DET_2D_TYPE**

| Value | Description |
| --- | --- |
| `SET_FULL` | All current oriented bounding boxes are set to the full image size (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_FULL>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html). |
| `SET_ROI` | All current oriented bounding boxes are set to a specified ROI (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html). |
| `SET_ROI_PIPELINE` | All current oriented bounding boxes are set to the ROI of the pipeline (top is up). >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_ROI_PIPELINE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html). |
| `SET_OTHER` | All current oriented bounding boxes are set to the result of another 2D detection pipeline. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_OTHER>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html). |
| `SET_NETWORK` | Applies an object detection network to all current oriented bounding boxes. Returns all detected >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SET_NETWORK>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html). |
| `FILTER_CLASSIFICATION` | Applies a classification filter to all current oriented bounding boxes. Filters out all boxes >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html). |
| `TRANSLATE` | Translate all current oriented bounding boxes relative to their current orientation and size. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::TRANSLATE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html#). |
| `ROTATE_ANGLE` | Rotate all current oriented bounding boxes by a fixed angle around a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ROTATE_ANGLE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html). |
| `SCALE` | Scale all current oriented bounding boxes by a fixed value from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html). |
| `SCALE_TO` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_TO>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html). |
| `SCALE_ASPECT` | Scale all current oriented bounding boxes to a fixed aspect ratio from a fixed point that is relative >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::SCALE_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html). |
| `REORIENT_ASPECT` | Modify all oriented bounding boxes "up-direction", such that the long or short size becomes the top. Note that all box corners stay the same. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_ASPECT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html). |
| `REORIENT_CLASSIFICATION` | Modify all oriented bounding boxes "up-direction" using a classification network. The network classes must be "Links", "Rechts", "Oben", "Unten". >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html). |
| `FEATURE_MATCHING` | Define a set of CorrectionFeature that define features of an object. If all features are uniquely detected in a current oriented bounding box it is optimized such that the distance to these defined features is minimized. Internally an iterative Gauss-Newton algorithm is applied. >>> See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::FEATURE_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html). |
| `ADD_INSTANCES_FROM_FILE` | See [Detection2DStepSettings\<OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html). |

# Detection2DStepSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings.html

(no description)

# Detection3DSettingsBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-base.html

Common base class for 3D detection settings. See [OBJECT_FIT_METHOD](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html#detection-3d-settings-object-fit-method-ransac-cylinder-fit-object-fit-method) for specific detectors.

## Member Functions

- **`virtual ~Detection3DSettingsBase()=default`:**

- **`virtual OBJECT_FIT_METHOD type() const =0`:** *JSON Type*: string +*Requirement*: Must be a OBJECT_FIT_METHOD. Type of the 3D object detection.

## Member Variables

- **`maxNumObjects`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int UNIMPLEMENTED +*Requirement*: Must be greater than zero. Maximum number of objects that should be computed in the 3D detection pipeline.

[[-2]] `roiPercentage`:: `float`, default: `\{0.8f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Dilate 2D object detection results by this factor. The resulting area is used to determine all points that are considered for the geometric fit.

[[-3]] `minNumPoints`:: `int`, default: `{50}` *JSON Type*: (optional) int +*Requirement*: Must be greater than zero. Minimum number of points required for the geometric fit.

## Enumerations

**Table 1. OBJECT_FIT_METHOD**

| Value | Description |
| --- | --- |
| `PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html). |
| `RANSAC_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html). |
| `MIXED_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::MIXED_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html). |
| `LINE_FIT_LONG_AXIS` | See [Detection3DSettings\<OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html). |
| `GRIP_FROM_ENVIRONMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html). |
| `RANSAC_CYLINDER_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html). |
| `OBJECT_MATCHING` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html). |
| `OBJECT_REFINEMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_REFINEMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html). |

# Detection3DSettingsGeom – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-geom.html

Common base class for 3D Geometry detection settings.

## Member Variables

- **`centerStrategy`:** `CENTER_STRATEGY`, default: `\{CENTER_STRATEGY::REPROJECT_2D_CENTER\}` *JSON Type*: (optional) string +*Requirement*: Must be a CENTER_STRATEGY. Type of the 3D center estimation strategy.

[[-2]] `sizeStrategy`:: `SIZE_STRATEGY`, default: `\{SIZE_STRATEGY::REPROJECT_2D_DETECTION\}` *JSON Type*: (optional) string +*Requirement*: Must be a SIZE_STRATEGY. Type of the 3D object size estimation strategy.

[[-3]] `useKdeCorrection`:: `bool`, default: `{false}` *JSON Type*: (optional) bool DEPRECATED: see shiftCorrection

[[-4]] `shiftCorrection`:: `SHIFT_CORRECTION`, default: `\{SHIFT_CORRECTION::NONE\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_CORRECTION. Correct the detected object by shifts in teh direction specified in shiftReference

[[-5]] `kdeAllowedShiftRange`:: `std::array< float, 2 >`, default: `\{0, 0.1\}`

[[-6]] `kdeShiftCorrectionFallback`:: `float`, default: `\{0.0\}` If shift correction fails(i.e. outside of kdeAllowedShiftRange), shift correction will fallback to this value. *Requirement*: Must >= 0

[[-7]] `shiftCorrectionPercentage`:: `float`, default: `\{1.0\}` *JSON Type*: (optional) float +*Requirement*: Must be a within [0, 1]. While doing a shift correction, the only the x farthest/closest percent of the pointcloud will be considered (depending on the shift correction settings: CLOSEST/FARTHEST). This makes the shifting process less sensitive to outliers.

[[-8]] `shiftReference`:: `SHIFT_REFERENCE`, default: `\{SHIFT_REFERENCE::OBJECT_NORMAL\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_REFERENCE. Set he direction detected objects are to be shifted in.

[[-9]] `shortAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning short axis of the detected object by the camera position.

[[-10]] `longAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning long axis of the detected object by the camera position.

## Enumerations

**Table 1. SIZE_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_DETECTION` | Determine the size of the 3D object by reprojecting all centers of the 2D oriented bounding box sides into the object plane. |
| `FROM_3D_POINTS` | Determine the size of the 3D object from the 3D bounding box of all points that that lie inside the roiPercentage of the detected object. |

**Table 2. CENTER_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_CENTER` | The 3D object center is determined by reprojecting the oriented bounding box center onto the object plane. |
| `REPROJECT_2D_DETECTION` | DEPRECATED! The 3D object center is determined by reprojecting the centers of all sides of the oriented bounding box onto the object plane. The average of all projected points defines the center point. |
| `FROM_3D_BBOX` | The 3D object center is chosen as the center of the topmost xy-plane of the computed 3D bounding box. |

**Table 3. SHIFT_CORRECTION**

| Value | Description |
| --- | --- |
| `NONE` | Do not shift the object. |
| `KDE` | This feature shifts a detected object plane in the direction of its normal to the first echo. Consider the case when an object has holes and the camera observes points that lie under the object. Then a RANSAC_PLANE_FIT should be used to robustly detect one of the planes (either top or parallel one below). The kde correction then shifts the detected plane to the top. |
| `CLOSEST` | Shift the object along its normal direction such that it has the same height as the top-most point (i.e. closest to camera) of the subset of points used for the fit. |
| `FARTHEST` | Shift the object along its normal direction such that it has the same height as the bottom-most point (i.e. furthest to camera) of the subset of points used for the fit. |

**Table 4. SHIFT_REFERENCE**

| Value | Description |
| --- | --- |
| `OBJECT_NORMAL` | Shift objects along object normal |
| `OBJECT_RAY` | Shift objects along the connection line between object and origin (camera position) |

**Table 5. AXIS_ALIGNMENT**

| Value | Description |
| --- | --- |
| `TO_CAMERA_AXIS` | Align the indicated axis towards the camera axis |
| `TO_CAMERA_PLANE` | Align the indicated axis towards the camera plane |
| `FROM_FIT_METHOD` | Do not change axis alignments |

# Detection3DSettings< OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html

Infere grippoint from environment.

Instead of fitting something to an object this returns a placeholder grippoint. Its normal points towards the camera, its origin does not say anything. Together with the shift correction and axis alignment steps this can be useful. This detection method should be used for objects that are hard to detect on pointclouds, but have a rather well defined position in space, once located on an image

## Member Functions

- **`virtual OBJECT_FIT_METHOD type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT. Type of the 3D detection.

## Member Variables

- **`maxNumObjects`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int UNIMPLEMENTED +*Requirement*: Must be greater than zero. Maximum number of objects that should be computed in the 3D detection pipeline.

[[-2]] `roiPercentage`:: `float`, default: `\{0.8f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Dilate 2D object detection results by this factor. The resulting area is used to determine all points that are considered for the geometric fit.

[[-3]] `minNumPoints`:: `int`, default: `{50}` *JSON Type*: (optional) int +*Requirement*: Must be greater than zero. Minimum number of points required for the geometric fit.

- **`centerStrategy`:** `CENTER_STRATEGY`, default: `\{CENTER_STRATEGY::REPROJECT_2D_CENTER\}` *JSON Type*: (optional) string +*Requirement*: Must be a CENTER_STRATEGY. Type of the 3D center estimation strategy.

- **`sizeStrategy`:** `SIZE_STRATEGY`, default: `\{SIZE_STRATEGY::REPROJECT_2D_DETECTION\}` *JSON Type*: (optional) string +*Requirement*: Must be a SIZE_STRATEGY. Type of the 3D object size estimation strategy.

- **`useKdeCorrection`:** `bool`, default: `{false}` *JSON Type*: (optional) bool DEPRECATED: see shiftCorrection

- **`shiftCorrection`:** `SHIFT_CORRECTION`, default: `\{SHIFT_CORRECTION::NONE\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_CORRECTION. Correct the detected object by shifts in teh direction specified in shiftReference

- **`kdeAllowedShiftRange`:** `std::array< float, 2 >`, default: `\{0, 0.1\}`

- **`kdeShiftCorrectionFallback`:** `float`, default: `\{0.0\}` If shift correction fails(i.e. outside of kdeAllowedShiftRange), shift correction will fallback to this value. *Requirement*: Must >= 0

- **`shiftCorrectionPercentage`:** `float`, default: `\{1.0\}` *JSON Type*: (optional) float +*Requirement*: Must be a within [0, 1]. While doing a shift correction, the only the x farthest/closest percent of the pointcloud will be considered (depending on the shift correction settings: CLOSEST/FARTHEST). This makes the shifting process less sensitive to outliers.

- **`shiftReference`:** `SHIFT_REFERENCE`, default: `\{SHIFT_REFERENCE::OBJECT_NORMAL\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_REFERENCE. Set he direction detected objects are to be shifted in.

- **`shortAxisAlignment`:** `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning short axis of the detected object by the camera position.

- **`longAxisAlignment`:** `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning long axis of the detected object by the camera position.

## Enumerations

**Table 1. OBJECT_FIT_METHOD**

| Value | Description |
| --- | --- |
| `PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html). |
| `RANSAC_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html). |
| `MIXED_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::MIXED_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html). |
| `LINE_FIT_LONG_AXIS` | See [Detection3DSettings\<OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html). |
| `GRIP_FROM_ENVIRONMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html#). |
| `RANSAC_CYLINDER_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html). |
| `OBJECT_MATCHING` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html). |
| `OBJECT_REFINEMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_REFINEMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html). |

**Table 2. SIZE_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_DETECTION` | Determine the size of the 3D object by reprojecting all centers of the 2D oriented bounding box sides into the object plane. |
| `FROM_3D_POINTS` | Determine the size of the 3D object from the 3D bounding box of all points that that lie inside the roiPercentage of the detected object. |

**Table 3. CENTER_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_CENTER` | The 3D object center is determined by reprojecting the oriented bounding box center onto the object plane. |
| `REPROJECT_2D_DETECTION` | DEPRECATED! The 3D object center is determined by reprojecting the centers of all sides of the oriented bounding box onto the object plane. The average of all projected points defines the center point. |
| `FROM_3D_BBOX` | The 3D object center is chosen as the center of the topmost xy-plane of the computed 3D bounding box. |

**Table 4. SHIFT_CORRECTION**

| Value | Description |
| --- | --- |
| `NONE` | Do not shift the object. |
| `KDE` | This feature shifts a detected object plane in the direction of its normal to the first echo. Consider the case when an object has holes and the camera observes points that lie under the object. Then a RANSAC_PLANE_FIT should be used to robustly detect one of the planes (either top or parallel one below). The kde correction then shifts the detected plane to the top. |
| `CLOSEST` | Shift the object along its normal direction such that it has the same height as the top-most point (i.e. closest to camera) of the subset of points used for the fit. |
| `FARTHEST` | Shift the object along its normal direction such that it has the same height as the bottom-most point (i.e. furthest to camera) of the subset of points used for the fit. |

**Table 5. SHIFT_REFERENCE**

| Value | Description |
| --- | --- |
| `OBJECT_NORMAL` | Shift objects along object normal |
| `OBJECT_RAY` | Shift objects along the connection line between object and origin (camera position) |

**Table 6. AXIS_ALIGNMENT**

| Value | Description |
| --- | --- |
| `TO_CAMERA_AXIS` | Align the indicated axis towards the camera axis |
| `TO_CAMERA_PLANE` | Align the indicated axis towards the camera plane |
| `FROM_FIT_METHOD` | Do not change axis alignments |

# Detection3DSettings< OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html

3D detection

The object pose is computed based on a line fit of all points that lie inside the roiPercentage of the detected object. The line is fit such that it projects onto a line from the center top to the center bottom points of the 2D object detection result. The objects coordinate system is positioned in the center, where x points to the right of the object (width direction), y points to the top of the object (height direction) and z is the object surface normal. This detection method should be used when the object has a very high / very low aspect ratio since the plane detection algorithms would then be unstable (i.e. rotation around long axis).

## Member Functions

- **`virtual OBJECT_FIT_METHOD type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS. Type of the 3D detection.

## Member Variables

- **`maxNumObjects`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int UNIMPLEMENTED +*Requirement*: Must be greater than zero. Maximum number of objects that should be computed in the 3D detection pipeline.

[[-2]] `roiPercentage`:: `float`, default: `\{0.8f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Dilate 2D object detection results by this factor. The resulting area is used to determine all points that are considered for the geometric fit.

[[-3]] `minNumPoints`:: `int`, default: `{50}` *JSON Type*: (optional) int +*Requirement*: Must be greater than zero. Minimum number of points required for the geometric fit.

[[-4]] `centerStrategy`:: `CENTER_STRATEGY`, default: `\{CENTER_STRATEGY::REPROJECT_2D_CENTER\}` *JSON Type*: (optional) string +*Requirement*: Must be a CENTER_STRATEGY. Type of the 3D center estimation strategy.

[[-5]] `sizeStrategy`:: `SIZE_STRATEGY`, default: `\{SIZE_STRATEGY::REPROJECT_2D_DETECTION\}` *JSON Type*: (optional) string +*Requirement*: Must be a SIZE_STRATEGY. Type of the 3D object size estimation strategy.

[[-6]] `useKdeCorrection`:: `bool`, default: `{false}` *JSON Type*: (optional) bool DEPRECATED: see shiftCorrection

[[-7]] `shiftCorrection`:: `SHIFT_CORRECTION`, default: `\{SHIFT_CORRECTION::NONE\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_CORRECTION. Correct the detected object by shifts in teh direction specified in shiftReference

[[-8]] `kdeAllowedShiftRange`:: `std::array< float, 2 >`, default: `\{0, 0.1\}`

[[-9]] `kdeShiftCorrectionFallback`:: `float`, default: `\{0.0\}` If shift correction fails(i.e. outside of kdeAllowedShiftRange), shift correction will fallback to this value. *Requirement*: Must >= 0

[[-10]] `shiftCorrectionPercentage`:: `float`, default: `\{1.0\}` *JSON Type*: (optional) float +*Requirement*: Must be a within [0, 1]. While doing a shift correction, the only the x farthest/closest percent of the pointcloud will be considered (depending on the shift correction settings: CLOSEST/FARTHEST). This makes the shifting process less sensitive to outliers.

[[-11]] `shiftReference`:: `SHIFT_REFERENCE`, default: `\{SHIFT_REFERENCE::OBJECT_NORMAL\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_REFERENCE. Set he direction detected objects are to be shifted in.

[[-12]] `shortAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning short axis of the detected object by the camera position.

[[-13]] `longAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning long axis of the detected object by the camera position.

## Enumerations

**Table 1. OBJECT_FIT_METHOD**

| Value | Description |
| --- | --- |
| `PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html). |
| `RANSAC_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html). |
| `MIXED_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::MIXED_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html). |
| `LINE_FIT_LONG_AXIS` | See [Detection3DSettings\<OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html#). |
| `GRIP_FROM_ENVIRONMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html). |
| `RANSAC_CYLINDER_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html). |
| `OBJECT_MATCHING` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html). |
| `OBJECT_REFINEMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_REFINEMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html). |

**Table 2. SIZE_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_DETECTION` | Determine the size of the 3D object by reprojecting all centers of the 2D oriented bounding box sides into the object plane. |
| `FROM_3D_POINTS` | Determine the size of the 3D object from the 3D bounding box of all points that that lie inside the roiPercentage of the detected object. |

**Table 3. CENTER_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_CENTER` | The 3D object center is determined by reprojecting the oriented bounding box center onto the object plane. |
| `REPROJECT_2D_DETECTION` | DEPRECATED! The 3D object center is determined by reprojecting the centers of all sides of the oriented bounding box onto the object plane. The average of all projected points defines the center point. |
| `FROM_3D_BBOX` | The 3D object center is chosen as the center of the topmost xy-plane of the computed 3D bounding box. |

**Table 4. SHIFT_CORRECTION**

| Value | Description |
| --- | --- |
| `NONE` | Do not shift the object. |
| `KDE` | This feature shifts a detected object plane in the direction of its normal to the first echo. Consider the case when an object has holes and the camera observes points that lie under the object. Then a RANSAC_PLANE_FIT should be used to robustly detect one of the planes (either top or parallel one below). The kde correction then shifts the detected plane to the top. |
| `CLOSEST` | Shift the object along its normal direction such that it has the same height as the top-most point (i.e. closest to camera) of the subset of points used for the fit. |
| `FARTHEST` | Shift the object along its normal direction such that it has the same height as the bottom-most point (i.e. furthest to camera) of the subset of points used for the fit. |

**Table 5. SHIFT_REFERENCE**

| Value | Description |
| --- | --- |
| `OBJECT_NORMAL` | Shift objects along object normal |
| `OBJECT_RAY` | Shift objects along the connection line between object and origin (camera position) |

**Table 6. AXIS_ALIGNMENT**

| Value | Description |
| --- | --- |
| `TO_CAMERA_AXIS` | Align the indicated axis towards the camera axis |
| `TO_CAMERA_PLANE` | Align the indicated axis towards the camera plane |
| `FROM_FIT_METHOD` | Do not change axis alignments |

# Detection3DSettings< OBJECT_FIT_METHOD::MIXED_PLANE_FIT > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html

3D detection

Uses the RANSAC_PLANE_FIT and PLANE_FIT method. The MIXED_PLANE_FIT uses the plane, which is more parallel to the camera.

## Member Functions

- **`virtual OBJECT_FIT_METHOD type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJECT_FIT_METHOD::MIXED_PLANE_FIT. Type of the 3D detection.

## Member Variables

- **`referenceNormal`:** `REFERENCE_NORMAL`, default: `\{REFERENCE_NORMAL::CAMERA_PLANE\}` *JSON Type*: (optional) string +*Requirement*: Must be a REFERENCE_NORMAL Only relevant for OBJECT_FIT_METHOD::MIXED_PLANE_FIT. The plane normals are compared with the selected reference normal. The plane normal which is closer to the reference normal is chosen in the end.

- **`planeCenter`:** `PLANE_CENTER`, default: `\{PLANE_CENTER::RANSAC_PLANE_FIT\}` *JSON Type*: (optional) string +*Requirement*: Must be a PLANE_CENTER Only relevant for OBJECT_FIT_METHOD::MIXED_PLANE_FIT. Select which center point should be used. This influences only the height of the plane. The default is to use the center point from the ransac plane fit, since this point is usually more accurate (in regards to the height). The x and y coordinates are set by the ROI in the 2d detection step.
- **`maxNumObjects`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int UNIMPLEMENTED +*Requirement*: Must be greater than zero. Maximum number of objects that should be computed in the 3D detection pipeline.

[[-2]] `roiPercentage`:: `float`, default: `\{0.8f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Dilate 2D object detection results by this factor. The resulting area is used to determine all points that are considered for the geometric fit.

[[-3]] `minNumPoints`:: `int`, default: `{50}` *JSON Type*: (optional) int +*Requirement*: Must be greater than zero. Minimum number of points required for the geometric fit.

[[-4]] `centerStrategy`:: `CENTER_STRATEGY`, default: `\{CENTER_STRATEGY::REPROJECT_2D_CENTER\}` *JSON Type*: (optional) string +*Requirement*: Must be a CENTER_STRATEGY. Type of the 3D center estimation strategy.

[[-5]] `sizeStrategy`:: `SIZE_STRATEGY`, default: `\{SIZE_STRATEGY::REPROJECT_2D_DETECTION\}` *JSON Type*: (optional) string +*Requirement*: Must be a SIZE_STRATEGY. Type of the 3D object size estimation strategy.

[[-6]] `useKdeCorrection`:: `bool`, default: `{false}` *JSON Type*: (optional) bool DEPRECATED: see shiftCorrection

[[-7]] `shiftCorrection`:: `SHIFT_CORRECTION`, default: `\{SHIFT_CORRECTION::NONE\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_CORRECTION. Correct the detected object by shifts in teh direction specified in shiftReference

[[-8]] `kdeAllowedShiftRange`:: `std::array< float, 2 >`, default: `\{0, 0.1\}`

[[-9]] `kdeShiftCorrectionFallback`:: `float`, default: `\{0.0\}` If shift correction fails(i.e. outside of kdeAllowedShiftRange), shift correction will fallback to this value. *Requirement*: Must >= 0

[[-10]] `shiftCorrectionPercentage`:: `float`, default: `\{1.0\}` *JSON Type*: (optional) float +*Requirement*: Must be a within [0, 1]. While doing a shift correction, the only the x farthest/closest percent of the pointcloud will be considered (depending on the shift correction settings: CLOSEST/FARTHEST). This makes the shifting process less sensitive to outliers.

[[-11]] `shiftReference`:: `SHIFT_REFERENCE`, default: `\{SHIFT_REFERENCE::OBJECT_NORMAL\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_REFERENCE. Set he direction detected objects are to be shifted in.

[[-12]] `shortAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning short axis of the detected object by the camera position.

[[-13]] `longAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning long axis of the detected object by the camera position.

## Enumerations

**Table 1. REFERENCE_NORMAL**

| Value | Description |
| --- | --- |
| `CAMERA_CENTER` | Normals which are closer to the camera center will be selected. |
| `CAMERA_PLANE` | Normals which are closer to the camera plane will be selected. |

**Table 2. PLANE_CENTER**

| Value | Description |
| --- | --- |
| `RANSAC_PLANE_FIT` | Use the center point coordinates of the ransac plane fit. |
| `PLANE_FIT` | Use the center point coordinates of the plane fit. |

**Table 3. OBJECT_FIT_METHOD**

| Value | Description |
| --- | --- |
| `PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html). |
| `RANSAC_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html). |
| `MIXED_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::MIXED_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html#). |
| `LINE_FIT_LONG_AXIS` | See [Detection3DSettings\<OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html). |
| `GRIP_FROM_ENVIRONMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html). |
| `RANSAC_CYLINDER_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html). |
| `OBJECT_MATCHING` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html). |
| `OBJECT_REFINEMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_REFINEMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html). |

**Table 4. SIZE_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_DETECTION` | Determine the size of the 3D object by reprojecting all centers of the 2D oriented bounding box sides into the object plane. |
| `FROM_3D_POINTS` | Determine the size of the 3D object from the 3D bounding box of all points that that lie inside the roiPercentage of the detected object. |

**Table 5. CENTER_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_CENTER` | The 3D object center is determined by reprojecting the oriented bounding box center onto the object plane. |
| `REPROJECT_2D_DETECTION` | DEPRECATED! The 3D object center is determined by reprojecting the centers of all sides of the oriented bounding box onto the object plane. The average of all projected points defines the center point. |
| `FROM_3D_BBOX` | The 3D object center is chosen as the center of the topmost xy-plane of the computed 3D bounding box. |

**Table 6. SHIFT_CORRECTION**

| Value | Description |
| --- | --- |
| `NONE` | Do not shift the object. |
| `KDE` | This feature shifts a detected object plane in the direction of its normal to the first echo. Consider the case when an object has holes and the camera observes points that lie under the object. Then a RANSAC_PLANE_FIT should be used to robustly detect one of the planes (either top or parallel one below). The kde correction then shifts the detected plane to the top. |
| `CLOSEST` | Shift the object along its normal direction such that it has the same height as the top-most point (i.e. closest to camera) of the subset of points used for the fit. |
| `FARTHEST` | Shift the object along its normal direction such that it has the same height as the bottom-most point (i.e. furthest to camera) of the subset of points used for the fit. |

**Table 7. SHIFT_REFERENCE**

| Value | Description |
| --- | --- |
| `OBJECT_NORMAL` | Shift objects along object normal |
| `OBJECT_RAY` | Shift objects along the connection line between object and origin (camera position) |

**Table 8. AXIS_ALIGNMENT**

| Value | Description |
| --- | --- |
| `TO_CAMERA_AXIS` | Align the indicated axis towards the camera axis |
| `TO_CAMERA_PLANE` | Align the indicated axis towards the camera plane |
| `FROM_FIT_METHOD` | Do not change axis alignments |

# Detection3DSettings< OBJECT_FIT_METHOD::OBJECT_MATCHING > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html

3D detection

Perform a fit with the CAD model of the object. This detection method should be used if we have completely rigid objects that always match a CAD model.

## Member Functions

- **`virtual OBJECT_FIT_METHOD type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJECT_FIT_METHOD::OBJECT_MATCHING. Type of the 3D detection.

## Member Variables

- **`cadPath`:** `std::filesystem::path`, default: `\{""\}` *JSON Type*: (optional) string +*Requirement*: Must be a path to a regular file. File path to the CAD file of the object used for the matching. Either cadPath or pointcloudPath need to be set. If both set point cloud path is used.

- **`pointcloudPath`:** `std::filesystem::path`, default: `\{""\}` *JSON Type*: (optional) string +*Requirement*: Must be a path to a regular file. File path to the Pointcloud file of the object used for the matching. Either cadPath or pointcloudPath need to be set. If both set point cloud path is used.

- **`trainingParameters`:** `ModelTrainingParameters` *JSON Type*: (optional) ModelTrainingParameters object Parameters used for training a model. All values of this object are optional as well.

- **`detectionParameters`:** `ObjectDetectionParameters` *JSON Type*: (optional) ObjectDetectionParameters object Parameters used for detecting a model. All values of this object are optional as well.
- **`maxNumObjects`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int UNIMPLEMENTED +*Requirement*: Must be greater than zero. Maximum number of objects that should be computed in the 3D detection pipeline.

[[-2]] `roiPercentage`:: `float`, default: `\{0.8f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Dilate 2D object detection results by this factor. The resulting area is used to determine all points that are considered for the geometric fit.

[[-3]] `minNumPoints`:: `int`, default: `{50}` *JSON Type*: (optional) int +*Requirement*: Must be greater than zero. Minimum number of points required for the geometric fit.

## Enumerations

**Table 1. OBJECT_FIT_METHOD**

| Value | Description |
| --- | --- |
| `PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html). |
| `RANSAC_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html). |
| `MIXED_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::MIXED_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html). |
| `LINE_FIT_LONG_AXIS` | See [Detection3DSettings\<OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html). |
| `GRIP_FROM_ENVIRONMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html). |
| `RANSAC_CYLINDER_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html). |
| `OBJECT_MATCHING` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html#). |
| `OBJECT_REFINEMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_REFINEMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html). |

# Detection3DSettings< OBJECT_FIT_METHOD::OBJECT_REFINEMENT > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html

3D detection for approximately known position

Refine the position of an object with approximately known position. This detection method should be used if we have completely rigid objects that always match a CAD model and are alway at the approximately same position. The maximum number of detections is the number of initial poses, set in refinementParameters. However not every initialPose has to result i a found object, depending on score threshold and filters in refinementParameters.

## Member Functions

- **`virtual OBJECT_FIT_METHOD type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJECT_FIT_METHOD::OBJECT_REFINEMENT. Type of the 3D detection.

## Member Variables

- **`cadPath`:** `std::filesystem::path`, default: `\{""\}` *JSON Type*: (optional) string +*Requirement*: Must be a path to a regular file. File path to the CAD file of the object used for the matching. Either cadPath or pointcloudPath need to be set.

- **`pointcloudPath`:** `std::filesystem::path`, default: `\{""\}` *JSON Type*: (optional) string +*Requirement*: Must be a path to a regular file. File path to the Pointcloud file of the object used for the matching. Either cadPath or pointcloudPath need to be set.

- **`trainingParameters`:** `ModelTrainingParameters` *JSON Type*: (optional) ModelTrainingParameters object Parameters used for training a model. All values of this object are optional as well.

- **`refinementParameters`:** `ObjectRefinementParameters` *JSON Type*: (optional) ObjectRefinementParameters object Parameters used for detecting a model. All values of this object are optional as well.
- **`maxNumObjects`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int UNIMPLEMENTED +*Requirement*: Must be greater than zero. Maximum number of objects that should be computed in the 3D detection pipeline.

[[-2]] `roiPercentage`:: `float`, default: `\{0.8f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Dilate 2D object detection results by this factor. The resulting area is used to determine all points that are considered for the geometric fit.

[[-3]] `minNumPoints`:: `int`, default: `{50}` *JSON Type*: (optional) int +*Requirement*: Must be greater than zero. Minimum number of points required for the geometric fit.

## Enumerations

**Table 1. OBJECT_FIT_METHOD**

| Value | Description |
| --- | --- |
| `PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html). |
| `RANSAC_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html). |
| `MIXED_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::MIXED_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html). |
| `LINE_FIT_LONG_AXIS` | See [Detection3DSettings\<OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html). |
| `GRIP_FROM_ENVIRONMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html). |
| `RANSAC_CYLINDER_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html). |
| `OBJECT_MATCHING` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html). |
| `OBJECT_REFINEMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_REFINEMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html#). |

# Detection3DSettings< OBJECT_FIT_METHOD::PLANE_FIT > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html

3D detection

The object pose is computed based on a plane fit of all points that lie inside the roiPercentage of the detected object. The objects coordinate system is positioned in the center, where x points to the right of the object (width direction), y points to the top of the object (height direction) and z is the object surface normal. This detection method should be used when the object is not rigid and does not contain perfect planar surfaces (e.g. bags that can crease).

## Member Functions

- **`virtual OBJECT_FIT_METHOD type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJECT_FIT_METHOD::PLANE_FIT. Type of the 3D detection.

## Member Variables

- **`maxNumObjects`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int UNIMPLEMENTED +*Requirement*: Must be greater than zero. Maximum number of objects that should be computed in the 3D detection pipeline.

[[-2]] `roiPercentage`:: `float`, default: `\{0.8f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Dilate 2D object detection results by this factor. The resulting area is used to determine all points that are considered for the geometric fit.

[[-3]] `minNumPoints`:: `int`, default: `{50}` *JSON Type*: (optional) int +*Requirement*: Must be greater than zero. Minimum number of points required for the geometric fit.

[[-4]] `centerStrategy`:: `CENTER_STRATEGY`, default: `\{CENTER_STRATEGY::REPROJECT_2D_CENTER\}` *JSON Type*: (optional) string +*Requirement*: Must be a CENTER_STRATEGY. Type of the 3D center estimation strategy.

[[-5]] `sizeStrategy`:: `SIZE_STRATEGY`, default: `\{SIZE_STRATEGY::REPROJECT_2D_DETECTION\}` *JSON Type*: (optional) string +*Requirement*: Must be a SIZE_STRATEGY. Type of the 3D object size estimation strategy.

[[-6]] `useKdeCorrection`:: `bool`, default: `{false}` *JSON Type*: (optional) bool DEPRECATED: see shiftCorrection

[[-7]] `shiftCorrection`:: `SHIFT_CORRECTION`, default: `\{SHIFT_CORRECTION::NONE\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_CORRECTION. Correct the detected object by shifts in teh direction specified in shiftReference

[[-8]] `kdeAllowedShiftRange`:: `std::array< float, 2 >`, default: `\{0, 0.1\}`

[[-9]] `kdeShiftCorrectionFallback`:: `float`, default: `\{0.0\}` If shift correction fails(i.e. outside of kdeAllowedShiftRange), shift correction will fallback to this value. *Requirement*: Must >= 0

[[-10]] `shiftCorrectionPercentage`:: `float`, default: `\{1.0\}` *JSON Type*: (optional) float +*Requirement*: Must be a within [0, 1]. While doing a shift correction, the only the x farthest/closest percent of the pointcloud will be considered (depending on the shift correction settings: CLOSEST/FARTHEST). This makes the shifting process less sensitive to outliers.

[[-11]] `shiftReference`:: `SHIFT_REFERENCE`, default: `\{SHIFT_REFERENCE::OBJECT_NORMAL\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_REFERENCE. Set he direction detected objects are to be shifted in.

[[-12]] `shortAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning short axis of the detected object by the camera position.

[[-13]] `longAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning long axis of the detected object by the camera position.

## Enumerations

**Table 1. OBJECT_FIT_METHOD**

| Value | Description |
| --- | --- |
| `PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html#). |
| `RANSAC_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html). |
| `MIXED_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::MIXED_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html). |
| `LINE_FIT_LONG_AXIS` | See [Detection3DSettings\<OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html). |
| `GRIP_FROM_ENVIRONMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html). |
| `RANSAC_CYLINDER_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html). |
| `OBJECT_MATCHING` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html). |
| `OBJECT_REFINEMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_REFINEMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html). |

**Table 2. SIZE_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_DETECTION` | Determine the size of the 3D object by reprojecting all centers of the 2D oriented bounding box sides into the object plane. |
| `FROM_3D_POINTS` | Determine the size of the 3D object from the 3D bounding box of all points that that lie inside the roiPercentage of the detected object. |

**Table 3. CENTER_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_CENTER` | The 3D object center is determined by reprojecting the oriented bounding box center onto the object plane. |
| `REPROJECT_2D_DETECTION` | DEPRECATED! The 3D object center is determined by reprojecting the centers of all sides of the oriented bounding box onto the object plane. The average of all projected points defines the center point. |
| `FROM_3D_BBOX` | The 3D object center is chosen as the center of the topmost xy-plane of the computed 3D bounding box. |

**Table 4. SHIFT_CORRECTION**

| Value | Description |
| --- | --- |
| `NONE` | Do not shift the object. |
| `KDE` | This feature shifts a detected object plane in the direction of its normal to the first echo. Consider the case when an object has holes and the camera observes points that lie under the object. Then a RANSAC_PLANE_FIT should be used to robustly detect one of the planes (either top or parallel one below). The kde correction then shifts the detected plane to the top. |
| `CLOSEST` | Shift the object along its normal direction such that it has the same height as the top-most point (i.e. closest to camera) of the subset of points used for the fit. |
| `FARTHEST` | Shift the object along its normal direction such that it has the same height as the bottom-most point (i.e. furthest to camera) of the subset of points used for the fit. |

**Table 5. SHIFT_REFERENCE**

| Value | Description |
| --- | --- |
| `OBJECT_NORMAL` | Shift objects along object normal |
| `OBJECT_RAY` | Shift objects along the connection line between object and origin (camera position) |

**Table 6. AXIS_ALIGNMENT**

| Value | Description |
| --- | --- |
| `TO_CAMERA_AXIS` | Align the indicated axis towards the camera axis |
| `TO_CAMERA_PLANE` | Align the indicated axis towards the camera plane |
| `FROM_FIT_METHOD` | Do not change axis alignments |

# Detection3DSettings< OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html

3D detection

Perform a fit with a cylinder. This detection method should be used if we observe parts of a cylinder. The object coordinate system is positioned in the cylinder center, with the z-axis being the main axis. The height of the cylinder is limited by the points used for the fit.

## Member Functions

- **`virtual OBJECT_FIT_METHOD type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT. Type of the 3D detection.

## Member Variables

- **`normalSearchRadius`:** `float`, default: `\{0.01\}` *JSON Type*: float +*Requirement*: Must be greater than zero. The RANSAC cylinder fit requires the computation of normals. This value determines the radius used for normal computation for each point of the cloud.

- **`radiusMin`:** `float`, default: `\{0.01\}` *JSON Type*: float +*Requirement*: Must be greater than zero and less or equal to radiusMax. Minimum cylinder radius.

- **`radiusMax`:** `float`, default: `\{0.50\}` *JSON Type*: float +*Requirement*: Must be greater than zero and greater or equal to radiusMin. Maximum cylinder radius.

- **`initialAxis`:** `Eigen::Vector3f`, default: `\{1.0f, 0.0f, 0.0f\}` *JSON Type*: array +*Requirement*: Must have three elements. Norm must not be zero. Initial guess of the cylinder main axis (in camera coordinates).

- **`epsAngleDeg`:** `float`, default: `\{90.0\}` *JSON Type*: float +*Requirement*: Must be greater or equal to zero. Maximum angular deviation of the main axis from the initial guess initialAxis.

- **`distanceThreshold`:** `float`, default: `\{0.01\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Maximum distance of a point to the cylinder to be considered an inlier.

- **`maxNumObjects`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int UNIMPLEMENTED +*Requirement*: Must be greater than zero. Maximum number of objects that should be computed in the 3D detection pipeline.

- **`roiPercentage`:** `float`, default: `\{0.8f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Dilate 2D object detection results by this factor. The resulting area is used to determine all points that are considered for the geometric fit.

- **`minNumPoints`:** `int`, default: `{50}` *JSON Type*: (optional) int +*Requirement*: Must be greater than zero. Minimum number of points required for the geometric fit.

## Enumerations

**Table 1. OBJECT_FIT_METHOD**

| Value | Description |
| --- | --- |
| `PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html). |
| `RANSAC_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html). |
| `MIXED_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::MIXED_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html). |
| `LINE_FIT_LONG_AXIS` | See [Detection3DSettings\<OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html). |
| `GRIP_FROM_ENVIRONMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html). |
| `RANSAC_CYLINDER_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html#). |
| `OBJECT_MATCHING` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html). |
| `OBJECT_REFINEMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_REFINEMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html). |

# Detection3DSettings< OBJECT_FIT_METHOD::RANSAC_PLANE_FIT > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html

3D detection

The object pose is computed based on a RANSAC plane fit of all points that lie inside the roiPercentage of the detected object. The objects coordinate system is positioned in the center, where x points to the right of the object (width direction), y points to the top of the object (height direction) and z is the object surface normal. This detection method should be used when the object contains perfectly planar surfaces.

## Member Functions

- **`virtual OBJECT_FIT_METHOD type() const override`:** *JSON Type*: string +*Requirement*: Must be OBJECT_FIT_METHOD::RANSAC_PLANE_FIT. Type of the 3D detection.

## Member Variables

- **`maxNumObjects`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int UNIMPLEMENTED +*Requirement*: Must be greater than zero. Maximum number of objects that should be computed in the 3D detection pipeline.

[[-2]] `roiPercentage`:: `float`, default: `\{0.8f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Dilate 2D object detection results by this factor. The resulting area is used to determine all points that are considered for the geometric fit.

[[-3]] `minNumPoints`:: `int`, default: `{50}` *JSON Type*: (optional) int +*Requirement*: Must be greater than zero. Minimum number of points required for the geometric fit.

[[-4]] `centerStrategy`:: `CENTER_STRATEGY`, default: `\{CENTER_STRATEGY::REPROJECT_2D_CENTER\}` *JSON Type*: (optional) string +*Requirement*: Must be a CENTER_STRATEGY. Type of the 3D center estimation strategy.

[[-5]] `sizeStrategy`:: `SIZE_STRATEGY`, default: `\{SIZE_STRATEGY::REPROJECT_2D_DETECTION\}` *JSON Type*: (optional) string +*Requirement*: Must be a SIZE_STRATEGY. Type of the 3D object size estimation strategy.

[[-6]] `useKdeCorrection`:: `bool`, default: `{false}` *JSON Type*: (optional) bool DEPRECATED: see shiftCorrection

[[-7]] `shiftCorrection`:: `SHIFT_CORRECTION`, default: `\{SHIFT_CORRECTION::NONE\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_CORRECTION. Correct the detected object by shifts in teh direction specified in shiftReference

[[-8]] `kdeAllowedShiftRange`:: `std::array< float, 2 >`, default: `\{0, 0.1\}`

[[-9]] `kdeShiftCorrectionFallback`:: `float`, default: `\{0.0\}` If shift correction fails(i.e. outside of kdeAllowedShiftRange), shift correction will fallback to this value. *Requirement*: Must >= 0

[[-10]] `shiftCorrectionPercentage`:: `float`, default: `\{1.0\}` *JSON Type*: (optional) float +*Requirement*: Must be a within [0, 1]. While doing a shift correction, the only the x farthest/closest percent of the pointcloud will be considered (depending on the shift correction settings: CLOSEST/FARTHEST). This makes the shifting process less sensitive to outliers.

[[-11]] `shiftReference`:: `SHIFT_REFERENCE`, default: `\{SHIFT_REFERENCE::OBJECT_NORMAL\}` *JSON Type*: (optional) string +*Requirement*: Must be a SHIFT_REFERENCE. Set he direction detected objects are to be shifted in.

[[-12]] `shortAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning short axis of the detected object by the camera position.

[[-13]] `longAxisAlignment`:: `AXIS_ALIGNMENT`, default: `\{AXIS_ALIGNMENT::FROM_FIT_METHOD\}` *JSON Type*: (optional) string +*Requirement*: Must be a AXIS_ALIGNMENT. Aligning long axis of the detected object by the camera position.

## Enumerations

**Table 1. OBJECT_FIT_METHOD**

| Value | Description |
| --- | --- |
| `PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html). |
| `RANSAC_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html#). |
| `MIXED_PLANE_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::MIXED_PLANE_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html). |
| `LINE_FIT_LONG_AXIS` | See [Detection3DSettings\<OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html). |
| `GRIP_FROM_ENVIRONMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html). |
| `RANSAC_CYLINDER_FIT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html). |
| `OBJECT_MATCHING` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_MATCHING>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html). |
| `OBJECT_REFINEMENT` | See [Detection3DSettings\<OBJECT_FIT_METHOD::OBJECT_REFINEMENT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html). |

**Table 2. SIZE_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_DETECTION` | Determine the size of the 3D object by reprojecting all centers of the 2D oriented bounding box sides into the object plane. |
| `FROM_3D_POINTS` | Determine the size of the 3D object from the 3D bounding box of all points that that lie inside the roiPercentage of the detected object. |

**Table 3. CENTER_STRATEGY**

| Value | Description |
| --- | --- |
| `REPROJECT_2D_CENTER` | The 3D object center is determined by reprojecting the oriented bounding box center onto the object plane. |
| `REPROJECT_2D_DETECTION` | DEPRECATED! The 3D object center is determined by reprojecting the centers of all sides of the oriented bounding box onto the object plane. The average of all projected points defines the center point. |
| `FROM_3D_BBOX` | The 3D object center is chosen as the center of the topmost xy-plane of the computed 3D bounding box. |

**Table 4. SHIFT_CORRECTION**

| Value | Description |
| --- | --- |
| `NONE` | Do not shift the object. |
| `KDE` | This feature shifts a detected object plane in the direction of its normal to the first echo. Consider the case when an object has holes and the camera observes points that lie under the object. Then a RANSAC_PLANE_FIT should be used to robustly detect one of the planes (either top or parallel one below). The kde correction then shifts the detected plane to the top. |
| `CLOSEST` | Shift the object along its normal direction such that it has the same height as the top-most point (i.e. closest to camera) of the subset of points used for the fit. |
| `FARTHEST` | Shift the object along its normal direction such that it has the same height as the bottom-most point (i.e. furthest to camera) of the subset of points used for the fit. |

**Table 5. SHIFT_REFERENCE**

| Value | Description |
| --- | --- |
| `OBJECT_NORMAL` | Shift objects along object normal |
| `OBJECT_RAY` | Shift objects along the connection line between object and origin (camera position) |

**Table 6. AXIS_ALIGNMENT**

| Value | Description |
| --- | --- |
| `TO_CAMERA_AXIS` | Align the indicated axis towards the camera axis |
| `TO_CAMERA_PLANE` | Align the indicated axis towards the camera plane |
| `FROM_FIT_METHOD` | Do not change axis alignments |

# Detection3DSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings.html

(no description)

# DistanceToReferencePointParameter – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/distance-to-reference-point-parameter.html

(no description)

## Member Variables

- **`referencePoint`:** `std::array< float, 2 >`, default: `\{0.0f, 0.0f\}`
- **`type`:** `Object2DSortType`, default: `\{Object2DSortType::None\}`

# FilteringObject2DParameterBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/filtering-object-2d-parameter-base.html

(no description)

## Member Variables

- **`type`:** `Object2DFilterType`, default: `\{Object2DFilterType::None\}`

# GripPointCorrection::OffsetMap – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-correction-offset-map.html

(no description)

## Member Functions

- **`cv::Mat getImage() const`:**

- **`bool loadImage()`:** == Member Variables

- **`imagePath`:** `std::filesystem::path` *JSON Type*: string +*Requirement*: Must point to a valid 8-bit calibration image. Grayscale, single channel image is recommended. +*Note*: For color image, it will be converted to grayscale. The image contains offset values for points at distance zDistance.

- **`zDistance`:** `float`, default: `\{0.5F\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Calibration depth of the image.

- **`maxOffset`:** `float`, default: `\{0.002F\}` *JSON Type*: float +*Requirement*: Must be greater than minCalibrationDistance. The distance the maximum image intensity (e.g. 255) corresponds to.

- **`minOffset`:** `float`, default: `\{0.000F\}` *JSON Type*: float +*Requirement*: Must be less than minCalibrationDistance. The distance the minimum image intensity (e.g. 0) corresponds to.

- **`decayDistance`:** `float`, default: `\{0.1F\}` *JSON Type*: float +*Requirement*: Must be larger than zero. This calibration layer affects all points between distance of [zDistance-decayDistance, zDistance+decayDistance] to zDistance. The value decays linearly. *Note*: for both decay direction, same signess of offset will be applied. i.e. zDistance = 0.5, maxOffset=0.3, minOffset=0.0, decayDistance=0.2 for x correction, pixel value =127 -→ zDistance@0.6, grippoint.x=1.0 -→ correctionValue = max(0, abs(\\{gripPoint.z\\}-{zDistance})/{decayDistance}) \* (minOffset + {maxOffset-minOffset}\*({pixelValueInCorrectionImage}/255) After correction It becomes \\{original gripPoint.x\\} + {correctionValue} -→ 0.5 + (0.6-0.5)/0.2 \* (0.0 + (0.3-0.0) \* (127/255)) → final value 0.8990196078431373

# GripPointCorrection – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-correction.html

apply grip point correction per pixel in x,y,z direction in camera coordinate systems

## Member Variables

- **`applyBeforeCollisionCheck`:** `bool`, default: `{true}`

- **`xOffsetMaps`:** `std::vector< OffsetMap >`, default: `\{\}` *JSON Type*: array of GripOffsetMap objects. +*Requirement*: Must be empty.

- **`yOffsetMaps`:** `std::vector< OffsetMap >`, default: `\{\}`

- **`zOffsetMaps`:** `std::vector< OffsetMap >`, default: `\{\}`

# GripPointFilterSettingsBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-filter-settings-base.html

(no description)

## Member Functions

- **`virtual ~GripPointFilterSettingsBase()=default`:**

- **`virtual FILTER_TYPE type() const =0`:** *JSON Type*: string +*Requirement*: Must be a #FILTER_TYPE. Type of the filter.

## Enumerations

**Table 1. FILTER_TYPE**

| Value | Description |
| --- | --- |
| `Z_AXIS` |   |

# GripPointFilterSettings< FILTER_TYPE::Z_AXIS > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-filter-settings-filter-type-z-axis.html

Define a filter based on a reference orientation for the z-Orientation of a grip point.

## Member Functions

- **`FILTER_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be FILTER_TYPE::ROTATION. Type of the filter.

## Member Variables

- **`referenceFrame`:** `REFERENCE_FRAME`, default: `\{REFERENCE_FRAME::ROBOT\}` *JSON Type*: string +*Requirement*: Must be REFERENCE_FRAME. Frame the reference orientation is given in.

- **`referenceOrientation`:** `Eigen::Vector3f`, default: `\{Eigen::Vector3f::UnitZ()\}` *JSON Type*: array +*Requirement*: Must have three elements. Reference Orientation for the z-axis of a grip point.

- **`acceptedAngle`:** `float`, default: `\{180.0f\}` *JSON Type*: float +*Requirement*: Must larger than 0. maximal accepted z-orientation from referenceOrientation

## Enumerations

**Table 1. REFERENCE_FRAME**

| Value | Description |
| --- | --- |
| `ROBOT` |   |
| `CAMERA` |   |

**Table 2. FILTER_TYPE**

| Value | Description |
| --- | --- |
| `Z_AXIS` |   |

# GripPointFilterSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-filter-settings.html

(no description)

# GripPointSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-settings.html

Define a grip point.

## Member Variables

- **`frame`:** `GRIP_POINT_FRAME`, default: `\{GRIP_POINT_FRAME::OBJECT_ABSOLUTE\}` *JSON Type*: string / array of string +*Requirement*: Must be a GRIP_POINT_FRAME or vector of GRIP_POINT_FRAME items. determine which translatory dimensions are abosluze (in meter) and which are relative to the size of the 2D detection.

- **`pose`:** `Eigen::Transform< float, 3, Eigen::Affine >`, default: `\{Eigen::Transform<float, 3, Eigen::Affine>::Identity()\}` *JSON Type*: array of array +*Requirement*: Must be a valid 4x4 transformation matrix. Transformation matrix that defines the grip position (grip to object transformation).

- **`translationCorrectionFrame`:** `GRIP_POINT_FRAME`, default: `\{GRIP_POINT_FRAME::BASE_RELATIVE\}`

- **`translationCorrection`:** `Eigen::Vector3f`, default: `\{Eigen::Vector3f::Zero()\}`

- **`rotationCorrectionFrame`:** `GRIP_POINT_FRAME`, default: `\{GRIP_POINT_FRAME::BASE_RELATIVE\}`

- **`rotationCorrection`:** `Eigen::Matrix3f`, default: `\{Eigen::Matrix3f::Identity()\}`

- **`symmetry`:** `std::shared_ptr< SymmetrySettingsBase >` *JSON Type*: (optional) SymmetrySettingsBase object

- **`filter`:** `std::shared_ptr< GripPointFilterSettingsBase >` *JSON Type*: (optional) GripPointFilterSettingsBase object

- **`priority`:** `uint32_t`, default: `{0}` *JSON Type*: uint32_t Priority of the associated grip. The next grip is always computed based on this value and not based on the object. If priorities of two grips are equal other factors are taken into account. The higher the value, the higher the priority.

- **`path`:** `std::vector< PathSegmentSettings >` *JSON Type*: (optional) array of PathSegmentSettings objects Path used for the picking of the object. If left empty or not specified the grip point is considered the sole path planning point.

## Enumerations

**Table 1. GRIP_POINT_FRAME**

| Value | Description |
| --- | --- |
| `OBJECT_ABSOLUTE` | Absolute values, express the grip point pose in object coordinates. |
| `OBJECT_RELATIVE_X` | Relative x value, orientation is same as OBJECT_ABSOLUTE, but translation is relative to the object size which is determined by bounding box3D from the 2D/3D detection. |
| `OBJECT_RELATIVE_Y` | Relative y value. |
| `OBJECT_RELATIVE_Z` | Relative z value. |
| `OBJECT_RELATIVE` | Relative x, y and z values. orientation is same as OBJECT_ABSOLUTE, but translation is relative to the object size which is determined by bounding box3D from the 2D/3D detection. |
| `BASE_ABSOLUTE` = = 1 << 3 | = 1 << 3 |
| `BASE_RELATIVE` = = 1 << 4 | = 1 << 4 |
| `TCP_ABSOLUTE` = = 1 << 5 | = 1 << 5 |
| `TCP_RELATIVE` = = 1 << 6 | = 1 << 6 |

# ModelTrainingParameters – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/model-training-parameters.html

(no description)

## Member Variables

- **`relativeSamplingDistance`:** `float`, default: `\{0.03f\}` *JSON Type*: float +*Requirement*: Must be in (0, 1). Determines the minimum distance between points on the model relative to the model diameter during sampling.

- **`invertNormals`:** `bool`, default: `{true}` *JSON Type*: bool Determines whether to invert all normals of the model.

- **`poseRefinementRelativeSamplingDistance`:** `float`, default: `\{0.01f\}` *JSON Type*: float +*Requirement*: Must be in (0, 1). Determines the sampling distance for the pose refinement step. Lower value ⇒ larger model, slower but more accurate.

- **`featStepRelativeSize`:** `float`, default: `\{0.03f\}` *JSON Type*: float +*Requirement*: Must be in (0, 1). Set the discretization distance of the point pair distance relative to the object’s diameter. This value defaults to the value of RelSamplingDistance. It is not recommended to change this value. For very noisy scenes, the value can be increased to improve the robustness of the matching against noisy points.

- **`featAngleResolution`:** `int`, default: `{30}` *JSON Type*: int +*Requirement*: Must be larger than 1. Determines the angular discretization. Higher values ⇒ more accurate matching, less robustness against noise.

# NetworkSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/network-settings.html

Defines how a single neural network is imported into LumiScan VGR.

## Member Variables

- **`id`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the network object.

- **`networkPath`:** `std::filesystem::path`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must point to a valid network. Path to the neural network (i.e. the .onnx file or the .json file describing the network).

# NullSort – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/null-sort.html

Null sort class that does nothing.

## Member Variables

- **`sortType`:** `SortSelection`

## Enumerations

**Table 1. SortSelection**

| Value | Description |
| --- | --- |
| `None` |   |
| `Position` | sort by position of grip pose |
| `Direction` | sort by orientation of grip pose |

# ObjectDetectionParameters – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/object-detection-parameters.html

(no description)

## Member Variables

- **`relativeSamplingDistance`:** `float`, default: `\{0.05f\}` *JSON Type*: float +*Requirement*: Must be in (0, 1). Determines the minimum distance between points on the model relative to the model diameter during sampling.

- **`keyPointFraction`:** `float`, default: `\{0.2f\}` *JSON Type*: float +*Requirement*: Must be in (0, 1]. Determines the fraction of sampled scene points to be used as key points for detection..

- **`minScore`:** `float`, default: `\{0.2f\}` *JSON Type*: float +*Requirement*: Must be larger than 0.0. Determines the minimum score a detected object must have in order to be accepted..

- **`sceneNormalComputation`:** `OBJECT_MATCHING_NORMAL_MODE`, default: `\{OBJECT_MATCHING_NORMAL_MODE::MLS\}` *JSON Type*: string +*Requirement*: Must be a #OBJECT_MATCHING_NORMAL_MODE. Determines the mode for the scene normal computation.

- **`sparsePoseRefinement`:** `bool`, default: `{true}` *JSON Type*: bool Enables or disables the sparse pose refinement..

- **`densePoseRefinement`:** `bool`, default: `{true}` *JSON Type*: bool Enables or disables the dense pose refinement.

- **`densePoseRefinementSteps`:** `int`, default: `{5}` *JSON Type*: int +*Requirement*: Must be larger than 0. Number of iterations for the dense pose refinement. Increasing the number of iteration leads to a more accurate pose at the expense of runtime. However, once convergence is reached, the accuracy can no longer be increased, even if the number of steps is increased.

- **`densePoseRefinementSubsampling`:** `int`, default: `{2}` *JSON Type*: int +*Requirement*: Must be larger than 0. Set the rate of scene points to be used for the dense pose refinement. For example, if this value is set to 5, every 5th point from the scene is used for pose refinement. This parameter allows an easy tradeoff between speed and accuracy of the pose refinement: Increasing the value leads to less points being used and in turn to a faster but less accurate pose refinement. Decreasing the value has the inverse effect.

- **`densePoseRefinementDistanceThreshold`:** `float`, default: `\{0.1f\}` *JSON Type*: float +*Requirement*: Must be larger than 0.0. Set the distance threshold for dense pose refinement relative to the diameter of the surface model. Only scene points that are closer to the object than this distance are used for the optimization. Scene points further away are ignored.

- **`maxNumMatches`:** `int`, default: `{10}` *JSON Type*: int +*Requirement*: Must be larger than 0. Maximum number of matches to be considered during detection. Increasing this parameter can result in higher detection times.

## Enumerations

**Table 1. OBJECT_MATCHING_NORMAL_MODE**

| Value | Description |
| --- | --- |
| `MLS` | Compute normals based on larger neighborhood. More complex but more accurate. |
| `FAST` | Consider small neighborhood of points. |

# ObjectRefinementParameters – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/object-refinement-parameters.html

(no description)

## Member Variables

- **`minScore`:** `float`, default: `\{0.2f\}` *JSON Type*: float +*Requirement*: Must be larger than 0.0. Determines the minimum score a detected object must have in order to be accepted..

- **`poseRefinementSteps`:** `int`, default: `{5}` *JSON Type*: int +*Requirement*: Must be larger than 0. Number of iterations for the pose refinement. Increasing the number of iteration leads to a more accurate pose at the expense of runtime. However, once convergence is reached, the accuracy can no longer be increased, even if the number of steps is increased.

- **`poseRefinementSubsampling`:** `int`, default: `{2}` *JSON Type*: int +*Requirement*: Must be larger than 0. Set the rate of scene points to be used for the pose refinement. For example, if this value is set to 5, every 5th point from the scene is used for pose refinement. This parameter allows an easy tradeoff between speed and accuracy of the pose refinement: Increasing the value leads to less points being used and in turn to a faster but less accurate pose refinement. Decreasing the value has the inverse effect.

- **`poseRefinementDistanceThreshold`:** `float`, default: `\{0.1f\}` *JSON Type*: float +*Requirement*: Must be larger than 0.0. Set the distance threshold for the pose refinement relative to the diameter of the surface model. Only scene points that are closer to the object than this distance are used for the optimization. Scene points further away are ignored.

- **`initialPoses`:** `std::vector< std::array< double, 6 > >` *JSON Type*: array of array of double Set initial poses to be subsequently refined

- **`checkRefinedPose`:** `bool`, default: `{true}` *JSON Type*: bool Flag to check if the detected (refined) pose is within limits (10% of the objects size and 15 degrees of the original rotation) of the initial pose. It should not be necessary to use this option in an production environment, however it is useful for debugging purposes or to see why objects might be filtered out during setup.

- **`topResultOnly`:** `bool`, default: `{false}` *JSON Type*: bool Flag to only return the refined pose with best score

# ObjectSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/object-settings.html

Corresponds to an object that we want to detect.

Note that we can also define abstract objects such as features of composed parts or classification results (e.g. "emptyContainer").

## Member Functions

- **`ObjectSettings()`:** == Member Variables

- **`id`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the object.

- **`plcId`:** `int`, default: `\{-1\}` *JSON Type*: (optional) int Identifier for the object that will be transmitted to the PLC (see HDV_ObjectId).

- **`cadPath`:** `std::optional< std::filesystem::path >`, default: `\{""\}` *JSON Type*: (optional) string +*Requirement*: Must be a path to a regular file. File path to the CAD file of the object. This model is used for visualization and collision purposes.

- **`depthEstimation`:** `std::optional< DepthEstimationSettings >` *JSON Type*: (optional) DepthEstimationSettings object

- **`detection2d`:** `Detection2DSettings` *JSON Type*: Detection2DSettings object

- **`detection3d`:** `std::shared_ptr< Detection3DSettingsBase >` *JSON Type*: (optional) Detection3DSettingsBase object

- **`gripPoints`:** `std::vector< GripPointSettings >` *JSON Type*: (optional) array of GripPointSettings object

# old_network_description::InputLayout – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-input-layout.html

(no description)

## Member Variables

- **`image`:** `TensorLayout`, default: `\{"image"\}`

# old_network_description::NetworkDescription – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-network-description.html

(no description)

## Member Variables

- **`classList`:** `std::unordered_map< std::string, std::string >`, default: `\{\}`

- **`nonMaximumSuppression`:** `uint32_t`, default: `{9}`

- **`input`:** `InputLayout`

- **`output`:** `OutputLayout`

- **`evaluation_result`:** `std::unordered_map< std::string, double >`, default: `\{\}`

- **`networkArch`:** `NetworkArchitecture`, default: `\{NetworkArchitecture::LumiScanOOD\}`

# old_network_description::OutputLayout – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-output-layout.html

(no description)

## Member Variables

- **`heatmap`:** `TensorLayout`, default: `\{"heatmap", std::array<uint32_t, 4>\{1, 1, 180, 240\}, std::array<uint32_t, 4>\{1, 1, 180, 240\}\}`

- **`boxparams`:** `TensorLayout`, default: `\{"boxparams", std::array<uint32_t, 4>\{1, 8, 180, 240\}, std::array<uint32_t, 4>\{1, 8, 180, 240\}\}`

- **`offset`:** `TensorLayout`, default: `\{"heatmap", std::array<uint32_t, 4>\{1, 2, 180, 240\}, std::array<uint32_t, 4>\{1, 2, 180, 240\}\}`

# old_network_description::TensorLayout – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-tensor-layout.html

(no description)

## Member Variables

- **`tensorName`:** `std::string`, default: `\{""\}`

- **`sizeMin`:** `std::array< uint32_t, 4 >`, default: `\{1, 3, 720, 960\}`

- **`sizeMax`:** `std::array< uint32_t, 4 >`, default: `\{1, 3, 720, 960\}`

- **`batchDim`:** `uint8_t`, default: `{0}`

- **`channelDim`:** `uint8_t`, default: `{1}`

- **`heightDim`:** `uint8_t`, default: `{2}`

- **`widthDim`:** `uint8_t`, default: `{3}`

- **`dataType`:** `InputDataType`

# PathSegmentSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/path-segment-settings.html

Define a continuous path segment from the current pose to a waypoint.

## Member Variables

- **`type`:** `PATH_SEGMENT_TYPE`, default: `\{PATH_SEGMENT_TYPE::MOVE_LINEAR_STATE\}` *JSON Type*: string +*Requirement*: Must be a PATH_SEGMENT_TYPE Determine how the path segment should be executed.

- **`destination`:** `std::string`, default: `\{\}` *JSON Type*: string +*Requirement*: Must be a valid waypoint id. Id of the destination waypoint.

- **`sendActionId`:** `int`, default: `{0}` *JSON Type*: (optional) int Id that is transmitted to the PLC when this waypoint is returned.

- **`enableCollisionCheck`:** `bool`, default: `{true}` *JSON Type*: (optional) bool Turn collision check for this segment off/on, default is on.

- **`numberOfAllowedCollisions`:** `size_t`, default: `{0}` Configure how many collisions are allowed accumulated from start point to end point(end point not included). *JSON Type*: (optional) size_t

## Enumerations

**Table 1. PATH_SEGMENT_TYPE**

| Value | Description |
| --- | --- |
| `MOVE_LINEAR_STATE` | The path segment is executed linear in state space. |
| `MOVE_LINEAR_JOINT` | The path segment is executed linear in joint space (UNIMPLEMENTED). |
| `MOVE_NONLINEAR` | The path segment is executed nonlinear (UNIMPLEMENTED). |

# PipelineSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/pipeline-settings.html

A pipeline defines how to process a point cloud in order to obtain object orientations (in camera frame). It contains point cloud postprocessing steps, a definition of the ROI and a list of objects that should be computed.

*Note*: filtering sequence BoxFilters→ROR→downsampling→ RemoveNaN → SOR

## Member Functions

- **`bool hasObjectFrameBasedCollisionCloudFilter() const`:** == Member Variables

- **`id`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the recording object.

- **`radiusOutlierRemoval`:** `std::optional< RadiusOutlierRemovalParameters >`, default: `\{std::nullopt\}` Parameters for radius outlier removal filter. *JSON Type*: (optional) object

- **`filters`:** `std::vector< std::shared_ptr< CloudFilterParameterBase > >`, default: `\{\}` filtering point cloud before any processing steps. *JSON Type*: array +*pre*: BaseFrame of Transform must not be BaseFrame::OBJECT (for now) *Note*: This will affect 3D object detection and collision checking.

- **`downsampling`:** `std::optional< std::array< float, 3 > >`, default: `\{std::nullopt\}` Parameters for downsampling the point cloud using voxel grid. *JSON Type*: array +*Requirement*: Must contain three elements. The three elements define the voxel leaf size in x, y and z direction [m], it will

- **`enableSOR`:** `bool`, default: `{false}` *JSON Type*: bool Enable or disable the statistic outlier removal filter that is applied to the recorded point cloud. It removes outliers for a better grip computation but increases processing time.

- **`sorMeanK`:** `int`, default: `{5}` *JSON Type*: integer +*Requirement*: Must be larger than zero. Number of neighbours considered for the SOR filter.

- **`sorStddevMulThresh`:** `float`, default: `\{0.2f\}` *JSON Type*: float +*Requirement*: Must be larger than zero. Threshold used to specify when a point is considered an outlier inthe SOR filter.

- **`imageROI`:** `cv::Rect`, default: `\{0, 0, 1280, 960\}` *JSON Type*: image ROI (fields: x, y, width, height) +*Requirement*: Must define a ROI inside the image dimensions 1280 x 960.

- **`collisionCloudFilters`:** `std::vector< std::shared_ptr< CloudFilterParameterBase > >`, default: `\{\}` filtering point cloud before collision check. *JSON Type*: array +*Note*: This will affect only collision checking.

- **`collisionRobotFilter`:** `std::vector< std::string >`, default: `\{\}` *JSON Type*: (optional) array of strings Contains names of all robots that should be considered for collision checks. The active robot is tested against all robots specified in this filter.

- **`collisionCloud`:** `bool`, default: `{false}` *JSON Type*: (optional) bool Indicates if the point cloud is considered for collision checks.

- **`collisionPart`:** `bool`, default: `{false}` *JSON Type*: (optional) bool UNIMPLEMENTED Indicates if the gripped part is considered for collision checks.

- **`collisionObjects`:** `bool`, default: `{false}` *JSON Type*: bool Defines if the detected objects are used for robot collision detection.

- **`objectFilter`:** `std::vector< std::string >`, default: `\{\}` *JSON Type*: (optional) array of strings Contains names of all objects that should be computed. Considers all objects if left empty or missing.

- **`reject2DObjectsOutsideROI`:** `bool`, default: `{true}` Whether reject 2D objects if its polygon is outside the ROI. *JSON Type*: (optional) bool Indicates if objects outside the ROI should be rejected.

- **`numGripsPrecomputeMin`:** `std::size_t`, default: `{0}` *JSON Type*: (optional) int +*Requirement*: Must be larger or equal to zero. Number of grips that should at least be precomputed for the pipeline.

- **`numGripsPrecomputeMax`:** `std::size_t`, default: `{100}` *JSON Type*: (optional) int +*Requirement*: Must be larger than zero. Number of grips that should at most be precomputed for the pipeline.

- **`gripPointOrdering`:** `std::optional< std::vector< std::array< float, 4 > > >`, default: `\{std::nullopt\}` *JSON Type*: (optional) array of arrays (direction + epsilon) +*Requirement*: May contain n arrays of length 4 (3 \* orientation + 1 \* epsilon) The orientation part of the vector contains a direction to be sorted along, the epsilon part of the vector states how much deviation along one row defined by a vector may occur. The sorting/definition of rows is going to be in the same order as they appear in the array. The vectors are defined in the camera base. This means that sorting along z, y, x, would first fill up a row along x, then go the he next row one up in y, the finally go to the next layer in z. Positive x direction is from right to left, positive y direction is from bottom to top, positive z direction is from camera to scene. epsilon is corresponding to value of cosine(theta). -→ epsilon = 0.1 -→ angle tolerance = arccos(0.1) = 84.3 degrees

- **`sorting`:** `std::shared_ptr< SortingBase >`, default: `\{new` Sort final result. default coordinates: GripTCPinRobotBase.

# PipelineSystemSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/pipeline-system-settings.html

Defines interactions between your OS and the pipeline.

## Member Variables

- **`saveFilePath`:** `std::filesystem::path`, default: `\{"data"\}` *JSON Type*: string Path where all generated output data will be stored.

[[-2]] `exportObjectDetectionText`:: `bool`, default: `{false}` *JSON Type*: bool Indicates if the 2D object detection result has to be saved to the disk as txt file. The output folder is specified by saveFilePath.

[[-3]] `exportObjectDetectionImage`:: `bool`, default: `{false}` *JSON Type*: bool Indicates if the 2D object detection result has to be saved to the disk as png file. The output folder is specified by saveFilePath.

# ProjectSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/project-settings.html

Global settings object for LumiScan VGR.

## Member Functions

- **`static ProjectSettings generatePreset()`:** == Member Variables

- **`m_meta`:** `hdv::application::SettingMeta`, default: `\{"LumiScanVGR", SETTINGS_FILE_VERSION, "NoMachineId", "LumiScanVGR", VGR::Version::String()\}`

- **`communicationProtocol`:** `CommunicationType`, default: `\{CommunicationType::Profinet\}`

- **`m_projectSettingsFile`:** `std::string`, default: `\{""\}`

- **`cameras`:** `std::vector< CameraSettings >` *JSON Type*: array of camera objects +*Requirement*: Must contain at least one element.

- **`recordings`:** `std::vector< RecordingSettings >` *JSON Type*: array of recording objects +*Requirement*: Must contain at least one element.

- **`networks`:** `std::vector< NetworkSettings >` *JSON Type*: array of NetworkSettings objects

- **`objects`:** `std::vector< ObjectSettings >` *JSON Type*: array of ObjectSettings objects

- **`pipelines`:** `std::vector< PipelineSettings >` *JSON Type*: array of PipelineSettings objects

- **`robots`:** `std::vector< RobotSettings >` *JSON Type*: array of RobotSettings objects +*Requirement*: Must contain at least one element.

- **`user`:** `UserSettings` *JSON Type*: UserSettings object

- **`system`:** `SystemSettings` *JSON Type*: SystemSettings object

# RadiusOutlierRemovalParameters – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/radius-outlier-removal-parameters.html

(no description)

## Member Variables

- **`radius`:** `float`, default: `\{0.01f\}` *JSON Type*: float +*Requirement*: Must be larger than zero. The radius search distance for each point in the point cloud.

- **`minNeighbors`:** `int`, default: `{10}` *JSON Type*: integer +*Requirement*: Must be larger than zero. The number of neighbours to search for in the radius search.

# RecordingSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/recording-settings.html

Define how a LumiScan camera should acquire new data. Each entry corresponds to one physical LumiScan camera.

## Member Variables

- **`id`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the recording object.

- **`cameraId`:** `std::string`, default: `\{""\}` *JSON Type*: string Camera ID of the used LumiScan camera.

- **`depthMin_mm`:** `int`, default: `{150}` *JSON Type*: integer +*Requirement*: The value must be larger than zero and less than depthMax_mm. Minimum distance of area where depth is observed.

- **`depthMax_mm`:** `int`, default: `{300}` *JSON Type*: integer +*Requirement*: The value must be larger than zero and larger than depthMin_mm. Maximum distance of area where depth is observed.

- **`confidenceThreshold`:** `double`, default: `\{0.7\}` *JSON Type*: float +*Requirement*: The value must be larger than zero and less than one. Threshold for the confidence in our depth estimate. Larger values lead to less points that are more accurate. Smaller values result in more pointswith a lower accuracy.

- **`pixelFormat`:** `HDV_PIXEL_FORMAT`, default: `{HDV_MONO12}` *JSON Type*: string +*Requirement*: Must be one of [MONO8, MONO12]. Internal image format (8 bit or 12 bit). While 8 bit results in a higherframerate the point cloud accuracy is better at 12 bit.

- **`preProcessingFilter`:** `HDV_PRE_PROCESSING_FILTER`, default: `{HDV_PRE_PROCESS_BLUR}` *JSON Type*: string +*Requirement*: Must be one of [NONE, BLUR]. Type of the preprocessing filter.

- **`postProcessingFilter`:** `HDV_POST_PROCESSING_FILTER`, default: `{HDV_POST_PROCESS_NONE}` *JSON Type*: string +*Requirement*: Must be one of [NONE, MEDIAN, SMOOTH_OUTLIER]. Type of the postprocessing filter.

- **`triggerMode`:** `HDV_TRIGGER_MODE`, default: `{HDV_TRIGGER_SOFTWARE}` *JSON Type*: string +*Requirement*: Must be one of [OFF, SOFTWARE, HARDWARE]. Trigger mode of the camera:\* OFF: The camera continously captures images. The most recent result is returned when requesting a frame. + \* SOFTWARE: The camera is triggered directly and only once when a frame is requested. + \* HARDWARE: The camera must be triggered externally using a hardwaretrigger. The most recent result is returned when requesting a frame

- **`initialExposureTime_us`:** `int`, default: `{11000}` *JSON Type*: integer +*Requirement*: Must be larger than zero. Initial camera exposure time in microseconds.

- **`autoexposureEnabled`:** `bool`, default: `{false}` *JSON Type*: (optional) bool +*Requirement*: Can only be true, if an autoexposure object is specified. Enable/disable autoxposure specified by the autoexposure object. If enabled the cameras exposure time is recomputed after each trigger. In order to initialize the brightness of a scene correctly it is adviced to trigger twice at the beginning of a new process.

- **`autoexposure`:** `std::shared_ptr< AutoexposureSettings >`, default: `\{new` *JSON Type*: (optional) AutoexposureSettings object

- **`correctionEnabled`:** `bool`, default: `{false}` *JSON Type*: (optional) bool +*Requirement*: Enable the camera correction. If enabled each point of the cloud is corrected according to the steps defined in correction. Each point is at most corrected by one correction step.

- **`correction`:** `std::shared_ptr< CorrectionSettingsBase >`, default: `{nullptr}` *JSON Type*: (optional) CorrectionSettingsBase objects.

- **`timeoutTimer`:** `int`, default: `{500}` *JSON Type*: (optional) int +*Requirement*: Set timeout value for image acquisition in ms.

# RecordingSystemSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/recording-system-settings.html

Defines interactions between your OS and the cameras.

## Member Functions

- **`void exportAll(bool val)`:** == Member Variables

- **`exportHdf5`:** `bool`, default: `{false}` *JSON Type*: (optional) bool Indicates if a camera frame has to be saved to the disk. The output folder is specified by saveFilePath.

- **`exportCenterView`:** `bool`, default: `{false}` *JSON Type*: (optional) bool Indicates if a camera center view has to be saved to the disk. The output folder is specified by saveFilePath.

- **`exportPcl`:** `bool`, default: `{false}` *JSON Type*: (optional) bool Indicates if a camera point cloud has to be saved to the disk. The output folder is specified by saveFilePath.

- **`pointcloudFiletype`:** `POINTCLOUD_FILETYPE`, default: `\{POINTCLOUD_FILETYPE::PLY\}` *JSON Type*: (optional) POINTCLOUD_FILETYPE Indicates what file format is to be used for storing and loading point cloud files

- **`saveFilePath`:** `std::filesystem::path`, default: `\{"data"\}` *JSON Type*: (optional) string Path where all generated output data will be stored.

- **`numRecordingsToKeep`:** `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int +*Requirement*: Must be larger or equal to zero Number of recordings to keep in the saveFilePath folder. Keep all files if nothing is specified.

- **`loadFilePath`:** `std::filesystem::path` *JSON Type*: (optional) string Path to image and point cloud data which shall be used when sim-ulating the camera. Must be a path without filename extension. Both a centerimage (.png) and a point cloud (.ply) with the same base name must exist inorder to be load correctly.

- **`extraDatasets`:** `std::unordered_map< std::string, std::filesystem::path >`, default: `\{\}` path to simulation datasets key: dataset name, value: path to dataset *Note*: : dataset name cannot exist in both loadFilePath and extraDatasets

- **`verboseGenICamLog`:** `bool`, default: `{false}`

# RemoveNaNFilterParameter – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/remove-na-n-filter-parameter.html

Remove NaN points from the point cloud.

## Member Variables

- **`filterType`:** `CloudFilterType` type of cloud filter

## Enumerations

**Table 1. CloudFilterType**

| Value | Description |
| --- | --- |
| `BOX` | Box filter. |
| `REMOVE_NAN` | Remove NaN points. |

# RobotSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/robot-settings.html

Contains information on the robots geometry, spatial position relative to cameras and its communication interface.

One physical robot may be described by multiple robot objects. For example, multiple robot objects can be created to represent different grippers.

## Member Variables

- **`id`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the recording object.

- **`poseInterpreter`:** `std::shared_ptr< hdv::PoseInterpreter >`, default: `\{new hdv::QuaternionInterpreter\{hdv::TRANSLATION_UNIT::MILLIMETER, hdv::QUATERNION_TYPE::WXYZ\}\}` *JSON Type*: (optional) poseInterpreter object This object defines how poses can be interfaced with the robot. The required fields of this object depend on the rotation type:\* Quaternions: "type" - must be "QUATERNION" "quaternionType" "translationUnit" "labels" + \* Axis Angle (Rodrigues Rotation): "type" - must be "RODRIGUES" "translationUnit" "labels" + \* Euler Angles "type" - must be "EULER" "eulerType" "translationUnit" "rotationUnit" "labels" The individual fields must have the following values:\* "translationUnit": must be one of ["MILLIMETER", "CENTIMETER", "METER"] + \* "rotationUnit": must be one of ["RAD", "DEG"] + \* "quaternionType": must be one of ["XYZW", "WXYZ"] + \* "eulerType": must be one of the following: Proper Euler Angles (intrinsic): ["INT_ZXZ", "INT_ZYZ", "INT_YZY", "INT_YXY", "INT_XYX", "INT_XZX"] Kardan Euler Angles (intrinsic): ["INT_ZYX", "INT_ZXY", "INT_YZX", "INT_YXZ", "INT_XYZ", "INT_XZY"] Proper Euler Angles (extrinsic): ["EXT_ZXZ", "EXT_ZYZ", "EXT_YZY", "EXT_YXY", "EXT_XYX", "EXT_XZX"] Kardan Euler Angles (extrinsic): ["EXT_XYZ", "EXT_YXZ", "EXT_XZY", "EXT_ZXY", "EXT_ZYX", "EXT_YZX"] + \* "labels": array of strings that matches the dimension of the pose (6 elements for Euler Angles and Axis Angle formulation, 7 elements for the Quaternion format). The format always follows [tx, ty, tz, r1, r2, r3, (r4)], i.e. first the translation components, then the rotation components. The rotation components order is defined by the rotation type.

- **`worldUp`:** `Eigen::Vector3f`, default: `\{Eigen::Vector3f::UnitZ()\}` *JSON Type*: (optional) array +*Requirement*: Must have three elements. Direction of "up" in the robot base coordinate system. Used to compute the topmost objects.

- **`urdfPath`:** `std::filesystem::path`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be a path to a regular file. File path to the urdf file associated with this robot.

- **`baseFrame`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be not empty. Name of the urdf base frame (i.e. base link in the urdf file).

- **`moveFrame`:** `std::string`, default: `\{""\}` *JSON Type*: (optional) string +*Requirement*: Must be not empty. Name of the urdf move frame (i.e. move link in the urdf file).

- **`tcpFrame`:** `std::string`, default: `\{""\}` *JSON Type*: (optional) string +*Requirement*: Must not empty. Name of the urdf tcp frame (i.e. tcp link in the urdf file).

- **`gripTransform`:** `EigenTf`, default: `\{Eigen::Matrix4f::Identity()\}` *JSON Type*: (optional) array of array +*Requirement*: Must be a valid 4x4 transformation matrix. Transformation matrix that is applied to each computed grip position from the right (i.e. tcp frame to grip frame transform).

- **`enableGripPointCorrection`:** `bool`, default: `{false}`

- **`gripPointCorrection`:** `GripPointCorrection`, default: `\{\}`

- **`cameraToRobot`:** `std::unordered_map< std::string, EigenTf >` *JSON Type*: (optional) dictionary +*Requirement*: Each value must be a valid 4x4 transformation matrix. Contains cameraId / hand-eye-transform pairs.

- **`objectFilter`:** `std::vector< std::string >`, default: `\{\}` *JSON Type*: (optional) array of strings Contains names of all objects that should be grippable by the robot. Considers all objects if left empty or missing.

- **`waypoints`:** `std::vector< std::shared_ptr< WaypointSettingsBase > >` *JSON Type*: (optional) array of WaypointSettingsBase objects Contains definitions of all waypoints associated with the robot.

# SortDirection – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sort-direction.html

Sort points based on their orientation of grip frame.

## Member Variables

- **`referenceDirection`:** `Transform::AxisSelection`, default: `\{` Axis in GripFrame used to compare orientation.

- **`referenceAxis`:** `Transform::AxisSelection`, default: `\{` Axis in referenceFrame used as reference axis. [SortDirection](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sort-direction.html#) is sorting based on angle between 'referenceDirection' and 'referenceAxis'.

- **`invertReferenceAxis`:** `bool`, default: `{false}` true: the negative direction of selected axis is used.

- **`referenceFrame`:** `Transform::BaseFrame`, default: `\{` coordinate systems used for sorting *JSON Type*: string [CAMERA|ROBOT] coordinate systems used for sorting
- **`sortType`:** `SortSelection`

## Enumerations

**Table 1. SortSelection**

| Value | Description |
| --- | --- |
| `None` |   |
| `Position` | sort by position of grip pose |
| `Direction` | sort by orientation of grip pose |

# SortPosition – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sort-position.html

Sort points based on their position of grip frame.

## Member Variables

- **`gripPointOrdering`:** `std::vector< std::array< float, 4 > >`, default: `\{std::array<float, 4>\{0.F, 0.F, 1.F, 0.F\}\}` *JSON Type*: (optional) array of arrays (direction + epsilon) +*Requirement*: May contain n arrays of length 4 (3 \* orientation + 1 \* epsilon) The orientation part of the vector contains a direction to be sorted along, the epsilon part of the vector states how much deviation along one row defined by a vector may occur. The sorting/definition of rows is going to be in the same order as they appear in the array. The vectors are defined in the camera base. This means that sorting along z, y, x, would first fill up a row along x, then go the he next row one up in y, the finally go to the next layer in z. Positive x direction is from right to left, positive y direction is from bottom to top, positive z direction is from camera to scene. epsilon is corresponding to value of cosine(theta). -→ epsilon = 0.1 -→ angle tolerance = arccos(0.1) = 84.3 degrees

- **`referenceFrame`:** `Transform::BaseFrame`, default: `\{` *JSON Type*: string [CAMERA|ROBOT] coordinate systems used for sorting
- **`sortType`:** `SortSelection`

## Enumerations

**Table 1. SortSelection**

| Value | Description |
| --- | --- |
| `None` |   |
| `Position` | sort by position of grip pose |
| `Direction` | sort by orientation of grip pose |

# SortingBaseCRTP – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sorting-base-crtp.html

(no description)

## Member Functions

- **`SortingBaseCRTP()`:** == Member Variables

- **`sortType`:** `SortSelection`

## Enumerations

**Table 1. SortSelection**

| Value | Description |
| --- | --- |
| `None` |   |
| `Position` | sort by position of grip pose |
| `Direction` | sort by orientation of grip pose |

# SortingBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sorting-base.html

Abstract Sorting.

## Member Functions

- **`SortingBase(SortSelection sortType_)`:**

- **`virtual ~SortingBase()=default`:** == Member Variables
- **`sortType`:** `SortSelection`

## Enumerations

**Table 1. SortSelection**

| Value | Description |
| --- | --- |
| `None` |   |
| `Position` | sort by position of grip pose |
| `Direction` | sort by orientation of grip pose |

# SortingObject2DParameterBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sorting-object-2d-parameter-base.html

(no description)

## Member Variables

- **`type`:** `Object2DSortType`, default: `\{Object2DSortType::None\}`

# SymmetrySettingsBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings-base.html

Common base class for grip point symmetry settings. See [SYMMETRY_TYPE](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings-base.html#symmetry-settings-base-symmetry-type) for specific symmetry types.

## Member Functions

- **`virtual ~SymmetrySettingsBase()=default`:**

- **`virtual SYMMETRY_TYPE type() const =0`:** *JSON Type*: string +*Requirement*: Must be a SYMMETRY_TYPE. Type of the symmetry.

## Enumerations

**Table 1. SYMMETRY_TYPE**

| Value | Description |
| --- | --- |
| `ROTATION` | see [SymmetrySettings\<SYMMETRY_TYPE::ROTATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings-symmetry-type-rotation.html) |

# SymmetrySettings< SYMMETRY_TYPE::ROTATION > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings-symmetry-type-rotation.html

Define a rotation symmetry.

## Member Functions

- **`virtual SYMMETRY_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be SYMMETRY_TYPE::ROTATION. Type of the symmetry.

## Member Variables

- **`center`:** `Eigen::Vector3f`, default: `\{Eigen::Vector3f::Zero()\}` *JSON Type*: array +*Requirement*: Must have three elements. Center of the rotation.

- **`axis`:** `Eigen::Vector3f`, default: `\{Eigen::Vector3f::UnitZ()\}` *JSON Type*: array +*Requirement*: Must have three elements. Norm must not be zero. Axis of the rotation.

- **`angleMinDeg`:** `float`, default: `\{0.0f\}` *JSON Type*: float +*Requirement*: Must be less or equal to angleMaxDeg. Minimum rotation angle around the rotation axis.

- **`angleMaxDeg`:** `float`, default: `\{360.0f\}` *JSON Type*: float +*Requirement*: Must be greater or equal to angleMinDeg. Maximum rotation angle around the rotation axis.

- **`angleStepDeg`:** `float`, default: `\{10.0f\}` *JSON Type*: float +*Requirement*: Must be greater than zero. Angle discretization stepsize.

- **`sortingRefDirInRobotBase`:** `Eigen::Vector3f`, default: `\{Eigen::Vector3f::UnitX()\}` Reference direction for sorting symmetric grip points. *JSON Type*: array

- **`sortedDirInTcp`:** `Eigen::Vector3f`, default: `\{Eigen::Vector3f::UnitX()\}` Direction use to sort, align with. It is represent Tcp coordinate at grip position. After sorting, the sortedDirInTcp with least angle toward sortingRefDirInRobotBase will has higher priority *JSON Type*: array

## Enumerations

**Table 1. SYMMETRY_TYPE**

| Value | Description |
| --- | --- |
| `ROTATION` | see [SymmetrySettings\<SYMMETRY_TYPE::ROTATION>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings-symmetry-type-rotation.html#) |

# SymmetrySettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings.html

(no description)

# SystemSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/system-settings.html

(no description)

## Member Functions

- **`void exportAll(bool val)`:** == Member Variables

- **`enableHeartbeat`:** `bool`, default: `{true}` *JSON Type*: (optional) bool Enable the PLC heartbeat.

- **`enableAutomaticSetup`:** `bool`, default: `{false}` *JSON Type*: (optional) bool Enable program automatic setup at start This is old behavior of VGR that connect automatically

- **`enableFullScreen`:** `bool`, default: `{false}` If enable, the VGR will start in full screen mode. *JSON Type*: (optional) bool

- **`enableExternalAdminModeControl`:** `bool`, default: `{false}` If enable, PLC can enable/disable the Admin mode by switch value of 'IN_EnableAdminMode'. *Note*: This will disable password protection for the admin mode

[[-2]] `exportHdf5`:: `bool`, default: `{false}` *JSON Type*: (optional) bool Indicates if a camera frame has to be saved to the disk. The output folder is specified by saveFilePath.

[[-3]] `exportCenterView`:: `bool`, default: `{false}` *JSON Type*: (optional) bool Indicates if a camera center view has to be saved to the disk. The output folder is specified by saveFilePath.

[[-4]] `exportPcl`:: `bool`, default: `{false}` *JSON Type*: (optional) bool Indicates if a camera point cloud has to be saved to the disk. The output folder is specified by saveFilePath.

[[-5]] `pointcloudFiletype`:: `POINTCLOUD_FILETYPE`, default: `\{POINTCLOUD_FILETYPE::PLY\}` *JSON Type*: (optional) POINTCLOUD_FILETYPE Indicates what file format is to be used for storing and loading point cloud files

[[-6]] `saveFilePath`:: `std::filesystem::path`, default: `\{"data"\}` *JSON Type*: (optional) string Path where all generated output data will be stored.

[[-7]] `numRecordingsToKeep`:: `std::optional< int >`, default: `{100}` *JSON Type*: (optional) int +*Requirement*: Must be larger or equal to zero Number of recordings to keep in the saveFilePath folder. Keep all files if nothing is specified.

[[-8]] `loadFilePath`:: `std::filesystem::path` *JSON Type*: (optional) string Path to image and point cloud data which shall be used when sim-ulating the camera. Must be a path without filename extension. Both a centerimage (.png) and a point cloud (.ply) with the same base name must exist inorder to be load correctly.

[[-9]] `extraDatasets`:: `std::unordered_map< std::string, std::filesystem::path >`, default: `\{\}` path to simulation datasets key: dataset name, value: path to dataset *Note*: : dataset name cannot exist in both loadFilePath and extraDatasets

[[-10]] `verboseGenICamLog`:: `bool`, default: `{false}`

- **`saveFilePath`:** `std::filesystem::path`, default: `\{"data"\}` *JSON Type*: string Path where all generated output data will be stored.

- **`exportObjectDetectionText`:** `bool`, default: `{false}` *JSON Type*: bool Indicates if the 2D object detection result has to be saved to the disk as txt file. The output folder is specified by saveFilePath.

- **`exportObjectDetectionImage`:** `bool`, default: `{false}` *JSON Type*: bool Indicates if the 2D object detection result has to be saved to the disk as png file. The output folder is specified by saveFilePath.

# TopNParameter – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/top-n-parameter.html

(no description)

## Member Variables

- **`numOfInstances`:** `int`, default: `{1}`
- **`type`:** `Object2DFilterType`, default: `\{Object2DFilterType::None\}`

# Transform – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/transform.html

Transformation between coordinate systems.

## Member Variables

- **`translation`:** `std::array< float, 3 >`, default: `\{0.F, 0.F, 0.F\}` [m] (x, y, z)

- **`orientation`:** `std::array< float, 3 >`, default: `\{0.F, 0.F, 0.F\}` [degrees] ExtrinsicXYZ (Rx, Ry, Rz)

- **`baseFrame`:** `BaseFrame`, default: `\{` FrameType[CAMERA|ROBOT|OBJECT]: [Transform](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/transform.html#) into specified base frame(coordinate system). Currently only CAMERA supported.

- **`objectId`:** `std::optional< std::string >`, default: `\{std::nullopt\}`

## Enumerations

**Table 1. BaseFrame**

| Value | Description |
| --- | --- |
| `ROBOT` | select robot base coordinate system |
| `CAMERA` | select camera coordinate system |
| `OBJECT` | select object coordinate system |
| `GRIP` | select TCP @ grip position |

**Table 2. AxisSelection**

| Value | Description |
| --- | --- |
| `X` | select x axis of coordinate system |
| `Y` | select y axis of coordinate system |
| `Z` | select z axis of coordinate system |

# UserSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/user-settings.html

(no description)

## Member Variables

- **`adminPassword`:** `std::string`, default: `\{""\}` *JSON Type*: string Passwort for activating the admin mode. No password is required if left empty.

- **`manualModePassword`:** `std::string`, default: `\{""\}` *JSON Type*: string Passwort for activating the manual mode. No password is required if left empty.

# WaypointSettingsBase – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-base.html

Abstract base class to define unique waypoints. See [WAYPOINT_TYPE](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-relative.html#waypoint-settings-waypoint-type-wp-relative-waypoint-type) for specific waypoint types.

## Member Functions

- **`virtual ~WaypointSettingsBase()=default`:**

- **`virtual WAYPOINT_TYPE type() const =0`:** *JSON Type*: string +*Requirement*: Must be a #OBJ_DET_2D_TYPE. Type of the 2D detection step.

## Member Variables

- **`id`:** `std::string` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the waypoint.

## Enumerations

**Table 1. WAYPOINT_TYPE**

| Value | Description |
| --- | --- |
| `WP_GRIP_POINT` | See [WaypointSettings\<WAYPOINT_TYPE::WP_GRIP_POINT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-grip-point.html). |
| `WP_CLONE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_CLONE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-clone.html). |
| `WP_ABSOLUTE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_ABSOLUTE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-absolute.html). |
| `WP_RELATIVE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_RELATIVE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-relative.html). |

# WaypointSettings< WAYPOINT_TYPE::WP_ABSOLUTE > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-absolute.html

Defines the absolute waypoint. This waypoint defines a fixed pose in the robot coordinate system.

## Member Functions

- **`virtual WAYPOINT_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be WAYPOINT_TYPE::WP_ABSOLUTE. Type of the waypoint.

## Member Variables

- **`transform`:** `EigenTf`, default: `\{Eigen::Matrix4f::Identity()\}` *JSON Type*: array of array +*Requirement*: Must be a valid 4x4 transformation matrix. Defines a static transformation from the robot "move-frame" to the robot "base-frame".
- **`id`:** `std::string` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the waypoint.

## Enumerations

**Table 1. WAYPOINT_TYPE**

| Value | Description |
| --- | --- |
| `WP_GRIP_POINT` | See [WaypointSettings\<WAYPOINT_TYPE::WP_GRIP_POINT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-grip-point.html). |
| `WP_CLONE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_CLONE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-clone.html). |
| `WP_ABSOLUTE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_ABSOLUTE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-absolute.html#). |
| `WP_RELATIVE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_RELATIVE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-relative.html). |

# WaypointSettings< WAYPOINT_TYPE::WP_CLONE > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-clone.html

Defines the clone waypoint.

## Member Functions

- **`virtual WAYPOINT_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be WAYPOINT_TYPE::WP_CLONE. Type of the waypoint.

## Member Variables

- **`cloneId`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be a valid waypoint id. Name of the waypoint this ones position is defined relative to.
- **`id`:** `std::string` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the waypoint.

## Enumerations

**Table 1. WAYPOINT_TYPE**

| Value | Description |
| --- | --- |
| `WP_GRIP_POINT` | See [WaypointSettings\<WAYPOINT_TYPE::WP_GRIP_POINT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-grip-point.html). |
| `WP_CLONE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_CLONE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-clone.html#). |
| `WP_ABSOLUTE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_ABSOLUTE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-absolute.html). |
| `WP_RELATIVE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_RELATIVE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-relative.html). |

# WaypointSettings< WAYPOINT_TYPE::WP_GRIP_POINT > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-grip-point.html

Defines the grip point waypoint. For each individual object this waypoint is defined as the grip point.

## Member Functions

- **`virtual WAYPOINT_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be WAYPOINT_TYPE::WP_GRIP_POINT. Type of the waypoint.

## Member Variables

- **`id`:** `std::string` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the waypoint.

## Enumerations

**Table 1. WAYPOINT_TYPE**

| Value | Description |
| --- | --- |
| `WP_GRIP_POINT` | See [WaypointSettings\<WAYPOINT_TYPE::WP_GRIP_POINT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-grip-point.html#). |
| `WP_CLONE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_CLONE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-clone.html). |
| `WP_ABSOLUTE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_ABSOLUTE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-absolute.html). |
| `WP_RELATIVE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_RELATIVE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-relative.html). |

# WaypointSettings< WAYPOINT_TYPE::WP_RELATIVE > – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-relative.html

Defines a waypoint relative to another waypoint (e.g. relative to the grip point).

A reference transformation "tfRef" is constructed such that its translation is equal to the translation of the referencePosition waypoint and its orientation is equivalent to the referenceOrientation waypoint. Depending on the value of "applyFrom" the full relative waypoint transform is given as:\* "LEFT" : transform \* tfRef + \* "RIGHT": tfRef \* transform The effect of this is, that "LEFT" implies a transformation in relation to ROBOT coordinates (extrinsic), while "RIGHT" implies a transformation in OBJECT coordinates (intrinsic). Visual examples for these settings can (soon) be found in the manual of VGR.

## Member Functions

- **`virtual WAYPOINT_TYPE type() const override`:** *JSON Type*: string +*Requirement*: Must be WAYPOINT_TYPE::WP_RELATIVE. Type of the waypoint.

## Member Variables

- **`transform`:** `EigenTf`, default: `\{Eigen::Matrix4f::Identity()\}` *JSON Type*: array of array +*Requirement*: Must be a valid 4x4 transformation matrix. Defines a static transformation from the robot "move-frame" to the robot "base-frame".

- **`referencePosition`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be a valid waypoint id. Name of the waypoint this ones position is defined relative to.

- **`referenceOrientation`:** `std::string`, default: `\{""\}` *JSON Type*: string +*Requirement*: Must be not empty. Name of the waypoint this ones orientation is defined relative to.

- **`applyFrom`:** `REL_WAYPOINT_ORDER`, default: `\{REL_WAYPOINT_ORDER::LEFT\}` *JSON Type*: string +*Requirement*: Must be a REL_WAYPOINT_ORDER. Define if the relative transform is applied from the left or the right.

- **`id`:** `std::string` *JSON Type*: string +*Requirement*: Must be unique and not empty. Identifier for the waypoint.

## Enumerations

**Table 1. REL_WAYPOINT_ORDER**

| Value | Description |
| --- | --- |
| `LEFT` | The relative transform is multiplied from the left to its reference. |
| `RIGHT` | The relative transform is multiplied from the right to its reference. |

**Table 2. WAYPOINT_TYPE**

| Value | Description |
| --- | --- |
| `WP_GRIP_POINT` | See [WaypointSettings\<WAYPOINT_TYPE::WP_GRIP_POINT>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-grip-point.html). |
| `WP_CLONE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_CLONE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-clone.html). |
| `WP_ABSOLUTE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_ABSOLUTE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-absolute.html). |
| `WP_RELATIVE` | See [WaypointSettings\<WAYPOINT_TYPE::WP_RELATIVE>](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-relative.html#). |

# WaypointSettings – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings.html

(no description)

# OPC UA Interface Reference – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/opcua.html

The OPC UA interface provides communication between LumiScan VGR and an OPC UA client.

The reference documentation covers:

- connection settings
- the OPC UA address space
- available methods and their arguments
- the recommended call sequence
- return codes
- troubleshooting (see [Troubleshooting: OPC UA](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/troubleshooting.html#opc-ua))

The documentation is generated from the Doxygen source documentation of the LumiScan VGR OPC UA interface.

## OPC UA Documentation

- [OPC UA Client Integration Guide](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/opcua/opc-ua-client-integration-guide.html)

# PROFINET Interface Reference – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/profinet.html

The PROFINET interface provides communication between LumiScan VGR and the PLC.

This chapter describes:

- the memory layout of the exchanged signals
- the PROFINET device modules
- the process flow for function calls
- the available functions
- return codes
- operation modes

For an explanation of how the interface is used during operation, see [PLC Settings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html).

## Memory Layout

The signal memory is organized into slots.

Two groups of signals are exchanged:

- **PLC inputs (`OUT_`**):\* Values written by LumiScan VGR and read by the PLC.
- **PLC outputs (`IN_`**):\* Values written by the PLC and read by LumiScan VGR.

### PLC Inputs (`OUT_*`)

| Slot / Group | Byte Address | Bit | Data Type | Name | Description |
| --- | --- | --- | --- | --- | --- |
| Slot 1 - System Signals | 0 | 0 | bool | `OUT_HeartBeat` | Mirrors the value of `IN_HeartBeat`. |
| Slot 1 - System Signals | 0 | 1 | bool | `OUT_Error` | Set to `1` when LumiScan VGR is in an error state. |
| Slot 1 - System Signals | 0 | 2 | bool | `OUT_ResetReady` | Indicates whether the reset function is ready to be executed. |
| Slot 1 - System Signals | 0 | 3 | bool | `OUT_ResetRunning` | Indicates whether the reset function is currently running. |
| Slot 1 - System Signals | 0 | 4 | bool | `OUT_SetupReady` | Indicates whether the setup function is ready to be executed. |
| Slot 1 - System Signals | 0 | 5 | bool | `OUT_SetupRunning` | Indicates whether the setup function is currently running. |
| Slot 1 - System Signals |   |   |   |   | Reserved |
| Slot 1 - Status Signals | 4 |   | byte/uchar | `OUT_OperationMode` | Contains the current operation mode. It can be changed using the Set Parameter function.<br> `0` - `IDLE`: Only parameter-setting functions are available.<br> `1` - `AUTOMATIC`: All processing functions are available.<br> `2` - `MANUAL`: LumiScan VGR is controlled through the user interface. |
| Slot 1 - Status Signals | 5 | 0 | bool | `OUT_IsSetup` | Indicates whether system setup has been completed. |
| Slot 1 - Status Signals |   |   |   |   | Reserved |
| Slot 1 - Trigger Signals | 8 | 0 | bool | `OUT_SetParameterReady` | Indicates whether the Set Parameter function is ready. |
| Slot 1 - Trigger Signals | 8 | 1 | bool | `OUT_SetParameterRunning` | Indicates whether the Set Parameter function is running. |
| Slot 1 - Trigger Signals | 9 | 0 | bool | `OUT_TriggerCameraReady` | Indicates whether camera triggering is ready. |
| Slot 1 - Trigger Signals | 9 | 1 | bool | `OUT_TriggerCameraRunning` | Indicates whether camera triggering is running. |
| Slot 1 - Trigger Signals | 10 | 0 | bool | `OUT_ComputeObjectsReady` | Indicates whether object computation is ready. |
| Slot 1 - Trigger Signals | 10 | 1 | bool | `OUT_ComputeObjectsRunning` | Indicates whether object computation is running. |
| Slot 1 - Trigger Signals | 11 | 0 | bool | `OUT_GetBestResultReady` | Indicates whether the best-result calculation is ready. |
| Slot 1 - Trigger Signals | 11 | 1 | bool | `OUT_GetBestResultRunning` | Indicates whether the best-result calculation is running. |
| Slot 1 - Trigger Signals | 12 | 0 | bool | `OUT_GripBestResultReady` | Indicates whether the Grip Best Result function is ready. |
| Slot 1 - Trigger Signals | 12 | 1 | bool | `OUT_GripBestResultRunning` | Indicates whether the Grip Best Result function is running. |
| Slot 1 - Trigger Signals | 13 | 0 | bool | `OUT_GetParameterReady` | Indicates whether the Get Parameter function is ready. |
| Slot 1 - Trigger Signals | 13 | 1 | bool | `OUT_GetParameterRunning` | Indicates whether the Get Parameter function is running. |
| Slot 1 - Trigger Signals | 14 | 0 | bool | `OUT_ResetCameraReady` | Indicates whether the Reset Camera function is ready. |
| Slot 1 - Trigger Signals | 14 | 1 | bool | `OUT_ResetCameraRunning` | Indicates whether the Reset Camera function is running. |
| Slot 1 - Trigger Signals | … |   |   | `OUT_GripPriority` | Grip priority of the selected result. |
| Slot 2 - Data | 64 |   | byte/uchar | `OUT_ReturnCode` | Contains the return code of the last executed function. |
| Slot 2 - Data | 65 |   | byte/uchar | `OUT_ObjectId` | ID of the object as defined in the JSON settings. |
| Slot 2 - Data | 66 |   | 6 x float | `OUT_BBoxGripFrame` | Not implemented. |
| Slot 2 - Data | 90 |   | 6 x float | `OUT_BBoxObjectFrame` | Bounding box of the object in the object coordinate system:<br> `[xmin, ymin, zmin, xmax, ymax, zmax]` in meters. |
| Slot 2 - Data | 114 |   | float | `OUT_PrevObjectDepth` | Depth of the previously gripped object in meters. Valid only when the value is greater than or equal to `0.0`. |
| Slot 2 - Data | 118 |   | byte/uchar | `OUT_NumObjects` | Number of objects in the scene that have not yet been gripped. |
| Slot 2 - Data | … |   |   |   | Reserved |
| Slot 3 - Data | 128 |   | 7 x float | `OUT_PoseMoveInRobot` | Pose of the move frame for a grip point in robot coordinates:<br> `[tx, ty, tz, r1, r2, r3, r4]`<br> `t` represents the translational component and `r` the rotational component. Units and rotation conventions depend on the robot configuration. If the rotation convention does not use quaternions, `r4` contains no information. |
| Slot 3 - Data | 156 |   | 7 x float | `OUT_PoseObjectInTcp` | Pose of the object in TCP coordinates. Uses the same pose format as `OUT_PoseMoveInRobot`. |
| Slot 3 - Data | … |   |   |   | Reserved |
| Slot 4 - Data | 192 |   | float | `OUT_ObjectScore2D` | Score of the 2D object detection result. |
| Slot 4 - Data | 196 |   | float | `OUT_PrevObjectCurvature` | Curvature of the previously gripped object. |
| Slot 4 - Data | 200 |   | int | `OUT_PrevObjectInnerNearestNeighbour` | Nearest-neighbor value of the previously gripped object. |
| Slot 4 - Data | 204 |   | int | `OUT_DepthLimitMM` | Currently configured lower or upper depth limit. |
| Slot 4 - Data | 208 |   | int | `OUT_ImageReference` | Currently configured image reference. |
| Slot 4 - Data | 212 |   | float | `OUT_ObjectScore3D` | Score of the 3D object detection result. |
| Slot 4 - Data | 216 |   | float | `OUT_CameraTemperature` | Current camera temperature in °C. The value is updated when an image is captured. |
| Slot 4 - Data | … |   |   |   | Reserved |

### PLC Outputs (`IN_*`)

| Slot / Group | Byte Address | Bit | Data Type | Name | Description |
| --- | --- | --- | --- | --- | --- |
| Slot 5 - System Signals | 0 | 0 | bool | `IN_HeartBeat` | Heartbeat signal from the PLC. `OUT_HeartBeat` follows this value. |
| Slot 5 - System Signals | 0 | 1 | bool | `IN_Error` | Reserved for PLC errors. |
| Slot 5 - System Signals | 0 | 2 | bool | `IN_ResetRequest` | Requests execution of the reset function. |
| Slot 5 - System Signals | 0 | 3 | bool | `IN_EnableAdminMode` | If `system/enableExternalAdminModeControl` is set to `true` in the JSON settings, this signal can be used to enable or disable admin mode.<br> The PLC should only change this value when no function is currently running. |
| Slot 5 - System Signals | 0 | 4 | bool | `IN_SetupRequest` | Requests execution of the setup function. |
| Slot 5 - System Signals |   |   |   |   | Reserved |
| Slot 5 - Status Signals | 4 |   |   |   | Reserved |
| Slot 5 - Status Signals | … |   |   |   |   |
| Slot 5 - Trigger Signals | 8 | 0 | bool | `IN_SetParameterRequest` | Requests execution of the Set Parameter function. |
| Slot 5 - Trigger Signals | 9 | 0 | bool | `IN_TriggerCameraRequest` | Requests a new image from the active camera. |
| Slot 5 - Trigger Signals | 10 | 0 | bool | `IN_ComputeObjectsRequest` | Requests object computation. |
| Slot 5 - Trigger Signals | 11 | 0 | bool | `IN_GetBestResultRequest` | Requests calculation of the best grip result. |
| Slot 5 - Trigger Signals | 12 | 0 | bool | `IN_GripBestResultRequest` | Requests confirmation of the best grip result. |
| Slot 5 - Trigger Signals | 13 | 0 | bool | `IN_GetParameterRequest` | Requests a parameter value. |
| Slot 5 - Trigger Signals | 14 | 0 | bool | `IN_ResetCameraRequest` | Requests a reset of the specified camera. |
| Slot 5 - Trigger Signals | … |   |   |   | Reserved |
| Slot 6 - Data | 64 |   | byte/uchar | `IN_ParamId` | Specifies the parameter or operation used by the Set Parameter or Get Parameter function. |
| Slot 6 - Data | 65 |   | byte/uchar | `IN_ParamArgByte` | Byte argument used by parameter functions. |
| Slot 6 - Data | 66 |   | int | `IN_ParamArgInt` | Integer argument used by parameter functions. |
| Slot 6 - Data | 70 |   | float | `IN_ParamArgFloat` | Float argument used by parameter functions. |
| Slot 6 - Data | 74 |   | 32 x byte/uchar | `IN_ParamArgString` | String argument used by parameter functions. |
| Slot 6 - Data | … |   |   |   | Reserved |
| Slot 7 - Data | 128 |   | 7 x float | `IN_PoseMoveInRobot` | Current pose in robot coordinates using the move frame. This value should always be available. |
| Slot 7 - Data | … |   |   |   | Reserved |
| Slot 8 - Reserved | 192 |   |   |   | Reserved |
| Slot 8 - Reserved | … |   |   |   | Reserved |

## Device Modules

### Inputs

| Slot | Module | Type | Length | Address |
| --- | --- | --- | --- | --- |
| 1 | 64 Bytes Input | QB | 64 | 0 |
| 2 | 64 Bytes Input | QB | 64 | 64 |
| 3 | 64 Bytes Input | QB | 64 | 128 |
| 4 | 64 Bytes Input | QB | 64 | 192 |

### Outputs

| Slot | Module | Type | Length | Address |
| --- | --- | --- | --- | --- |
| 5 | 64 Bytes Output | IB | 64 | 0 |
| 6 | 64 Bytes Output | IB | 64 | 64 |
| 7 | 64 Bytes Output | IB | 64 | 128 |
| 8 | 64 Bytes Output | IB | 64 | 192 |

## Process Flow

Each process uses three signals:

- `OUT_*Ready`
- `IN_*Request`
- `OUT_*Running`

The execution sequence is the same for all functions.

| Step | OUT | IN | Note |
| --- | --- | --- | --- |
| 1 |   | Wait until `OUT_*Ready == 1` | Not applicable to reset functions |
| 2 |   | Set `IN_*Request → 1` |   |
| 3 | Check `IN_*Request == 1` |   |   |
| 4 | Set `OUT_*Ready → 0` |   |   |
| 5 | Set `OUT_*Running → 1` |   |   |
| 6 |   | Wait until `OUT_*Ready == 0` | Not applicable to reset functions |
| 7 |   | Check `OUT_*Running == 1` | Otherwise, the trigger is discarded |
| 8 |   | Set `IN_*Request → 0` |   |
| 9 | Wait until `IN_*Request == 0` |   |   |
| 10 | Execute the requested function |   |   |
| 11 | Set output variables |   |   |
| 12 | Set `OUT_*Running → 0` |   |   |
| 13 | Set `OUT_*Ready → 1` |   |   |
| 14 |   | Wait until `OUT_*Running == 0` |   |
| 15 |   | Check the return code |   |
| 16 |   | Read the output variables |   |

For a more detailed explanation of the handshake behavior, see [PLC Settings: Process Flow](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html#process-flow).

## Function Descriptions

| Function | Input | Output | Description | Prerequisite |
| --- | --- | --- | --- | --- |
| `IN_Reset` |   |   | Resets all `OUT_*` variables to their default values. All output values are set to zero and `OUT_OperationMode` is set to `IDLE`. |   |
| `OUT_Reset` |   |   | Resets all `IN_*` variables to their default values. |   |
| `OUT_SetParameter` | `IN_ParamId`<br> `IN_ParamArgByte`<br> `IN_ParamArgInt`<br> `IN_ParamArgFloat`<br> `IN_ParamArgString` | `OUT_ReturnCode` | Sets a parameter. `IN_ParamId` specifies which parameter is changed:<br><br><br>`0` - `SET_OPERATION_MODE`: Sets `OUT_OperationMode` to the value of `IN_ParamArgByte`. The PLC cannot switch the system out of manual mode; manual mode must be exited through the user interface.<br><br><br>`1` - `SET_CAMERA_ID`: Sets the active camera to the ID specified by `IN_ParamArgString`.<br><br><br>`2` - `SET_PIPELINE_ID`: Sets the active pipeline to the ID specified by `IN_ParamArgString`.<br><br><br>`3` - `SET_ROBOT_ID`: Sets the active robot to the ID specified by `IN_ParamArgString`. | `OUT_OperationMode = AUTOMATIC` or `IDLE` |
| `OUT_GetParameter` | `IN_ParamId`<br> `IN_ParamArgByte`<br> `IN_ParamArgInt`<br> `IN_ParamArgFloat`<br> `IN_ParamArgString` | `OUT_ReturnCode` plus the output specified by the selected parameter | Reads a parameter. `IN_ParamId` specifies the requested value:<br><br><br>`0` - `GET_NUM_OBJECTS_2D_TOTAL`: Returns the total number of objects detected in 2D via `OUT_NumObjects`.<br><br><br>`1` - `GET_NUM_OBJECTS_3D_TOTAL`: Returns the number of 3D-detected objects that have not yet been gripped via `OUT_NumObjects`.<br><br><br>`2` - `GET_NUM_OBJECTS_2D_TYPE`: Returns the number of 2D-detected objects of the type specified in `IN_ParamArgString`.<br><br><br>`3` - `GET_NUM_OBJECTS_3D_TYPE`: Returns the number of 3D-detected objects of the type specified in `IN_ParamArgString` that have not yet been gripped.<br><br><br>`4` - `GET_DEPTH_MIN_MM`: Returns the minimum depth via `OUT_DepthLimitMM`.<br><br><br>`5` - `GET_DEPTH_MAX_MM`: Returns the maximum depth via `OUT_DepthLimitMM`. | `OUT_OperationMode = AUTOMATIC` |
| `OUT_TriggerCamera` |   | `OUT_ReturnCode` | Captures an image with the currently active camera. | `OUT_OperationMode = AUTOMATIC` |
| `OUT_ComputeObjects` |   | `OUT_ReturnCode` | Calculates the poses of all detected objects from the most recent image using the active pipeline. | `OUT_OperationMode = AUTOMATIC` |
| `OUT_GetBestResult` | `IN_ParamArgByte`<br> `IN_ParamArgFloat` | `OUT_ReturnCode`<br> `OUT_ObjectId`<br> `OUT_ObjectScore2D`<br> `OUT_ObjectScore3D`<br> `OUT_BBoxGripFrame`<br> `OUT_BBoxObjectFrame`<br> `OUT_PrevObjectDepth`<br> `OUT_PrevObjectCurvature`<br> `OUT_PrevObjectInnerNearestNeighbour`<br> `OUT_NumObjects`<br> `OUT_PoseMoveInRobot`<br> `OUT_PoseObjectInTcp`<br> `OUT_GripPriority` | Calculates grip points for the active robot using the most recently calculated object poses and returns information about the highest-priority valid grip.<br><br>If path planning is configured, the input arguments can be used to evaluate the trajectory at a specific point:<br><br>\* `IN_ParamArgByte`: ID of the path segment (`0` to `n - 1`) \* `IN_ParamArgFloat`: Interpolation factor from `0.0` to `1.0`<br><br>`0.0` represents the start of the path segment and `1.0` the end.<br><br>Path segment `0` always exists, even if no path planning is configured. In that case, it returns a constant result for all interpolation factors.<br><br>If invalid arguments are supplied, they are set to `0` before execution. No error is returned for this case.<br><br>`OUT_GripPriority` indicates the grip priority assigned to the selected grip point. The priority is configured for each grip point of an object. | `OUT_OperationMode = AUTOMATIC` |
| `OUT_GripBestResult` | `IN_ParamArgByte`<br> `IN_ParamArgFloat` |   | Performs the same calculation as `OUT_GetBestResult` and additionally informs the system that the selected result has been or will be gripped. | `OUT_OperationMode = AUTOMATIC` |
| `OUT_ResetCamera` | `IN_ParamArgString` |   | Resets the camera specified by its ID in `IN_ParamArgString`. After resetting the camera, Setup must be executed again. | `OUT_OperationMode = AUTOMATIC` |

## Return Codes

The return codes are described in [PLC Settings: Status Information](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/plc-settings.html#status-information).

## Application Example

The following diagram shows an example process using one camera, one pipeline, and one robot.

The example assumes that the operation mode does not change during the process. After each function call, check the return code and handle any reported error before continuing.

If auto-exposure is enabled in the configuration, it is applied after each image capture. When the scene changes, an initial image can therefore be captured to adjust the exposure before the picking process begins.

Multiple objects can be picked from a single captured image. Depending on the required cycle time, it may also be practical to capture a new image before each grip.

![Example PROFINET process using one camera, one pipeline, and one robot](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/_images/profinet-example-process.png)

### Manual Mode

During operation, manual mode can be activated through the user interface. The operation mode then changes to `MANUAL` (`2`).

While manual mode is active, processing functions cannot be started from the PLC.

When manual mode is exited, the system changes to `IDLE` (`0`). To resume automatic processing, set the operation mode back to `AUTOMATIC` through the PLC.

See also [Manual Mode](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/manual-mode.html).

### Multiple Components

All calculations use the currently active camera, pipeline, and robot.

If a project contains multiple cameras, pipelines, or robots, make sure that the correct active components are selected using `OUT_SetParameter` before executing each function.

## Reference Lists

### Operation Modes

| ID | Mode | Description |
| --- | --- | --- |
| 0 | `IDLE` | The system is idle. Processing functions are not available. |
| 1 | `AUTOMATIC` | Automatic PLC-controlled operation. Processing functions are available. |
| 2 | `MANUAL` | Manual operation through the user interface. |
| 3 | `SHUTDOWN` | The application shuts down. |

# Settings API – LumiScan VGR

URL: https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/settings.html

The Settings API documentation provides a complete reference for all JSON configuration parameters used by LumiScan VGR.

This includes settings for:

- Camera configuration
- Object detection (2D and 3D)
- Robot waypoint settings
- Grip point settings
- Path segment settings
- Symmetry settings
- Cloud processing filters

The complete reference is integrated natively on this site — every configuration class and struct has its own page, listed below. The pages are generated from the Doxygen source documentation of `settings.h`.

## All Settings Pages

- [AutoexposureSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/autoexposure-settings.html)
- [BoxFilterParameter](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/box-filter-parameter.html)
- [CameraSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/camera-settings.html)
- [CloudFilterParameterBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/cloud-filter-parameter-base.html)
- [ConcreteCloudFilterParameterBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/concrete-cloud-filter-parameter-base.html)
- [CorrectionFeature](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-feature.html)
- [CorrectionSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings.html)
- [CorrectionSettings< CAMERA_CORRECTION_TYPE::CLOUD_SCALE >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-scale.html)
- [CorrectionSettings< CAMERA_CORRECTION_TYPE::CLOUD_Z_CALIBRATION >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-z-calibration.html)
- [CorrectionSettings< CAMERA_CORRECTION_TYPE::CLOUD_Z_CALIBRATION >::ImageDistancePair](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-camera-correction-type-cloud-z-calibration-imagedistancepair.html)
- [CorrectionSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/correction-settings-base.html)
- [DepthEstimationSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/depth-estimation-settings.html)
- [Detection2DSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-settings.html)
- [Detection2DStepSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::ADD_INSTANCES_FROM_FILE >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-add-instances-from-file.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::FEATURE_MATCHING >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-feature-matching.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::FILTER_CLASSIFICATION >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-filter-classification.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::REORIENT_ASPECT >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-aspect.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::REORIENT_CLASSIFICATION >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-reorient-classification.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::ROTATE_ANGLE >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-rotate-angle.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::SCALE >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::SCALE_ASPECT >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-aspect.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::SCALE_TO >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-scale-to.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_FULL >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-full.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_NETWORK >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-network.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_OTHER >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-other.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_ROI >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::SET_ROI_PIPELINE >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-set-roi-pipeline.html)
- [Detection2DStepSettings< OBJ_DET_2D_TYPE::TRANSLATE >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-obj-det-2d-type-translate.html)
- [Detection2DStepSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-2d-step-settings-base.html)
- [Detection3DSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings.html)
- [Detection3DSettings< OBJECT_FIT_METHOD::GRIP_FROM_ENVIRONMENT >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-grip-from-environment.html)
- [Detection3DSettings< OBJECT_FIT_METHOD::LINE_FIT_LONG_AXIS >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-line-fit-long-axis.html)
- [Detection3DSettings< OBJECT_FIT_METHOD::MIXED_PLANE_FIT >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-mixed-plane-fit.html)
- [Detection3DSettings< OBJECT_FIT_METHOD::OBJECT_MATCHING >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-matching.html)
- [Detection3DSettings< OBJECT_FIT_METHOD::OBJECT_REFINEMENT >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-object-refinement.html)
- [Detection3DSettings< OBJECT_FIT_METHOD::PLANE_FIT >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-plane-fit.html)
- [Detection3DSettings< OBJECT_FIT_METHOD::RANSAC_CYLINDER_FIT >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-cylinder-fit.html)
- [Detection3DSettings< OBJECT_FIT_METHOD::RANSAC_PLANE_FIT >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-object-fit-method-ransac-plane-fit.html)
- [Detection3DSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-base.html)
- [Detection3DSettingsGeom](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/detection-3d-settings-geom.html)
- [DistanceToReferencePointParameter](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/distance-to-reference-point-parameter.html)
- [FilteringObject2DParameterBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/filtering-object-2d-parameter-base.html)
- [GripPointCorrection](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-correction.html)
- [GripPointCorrection::OffsetMap](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-correction-offset-map.html)
- [GripPointFilterSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-filter-settings.html)
- [GripPointFilterSettings< FILTER_TYPE::Z_AXIS >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-filter-settings-filter-type-z-axis.html)
- [GripPointFilterSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-filter-settings-base.html)
- [GripPointSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/grip-point-settings.html)
- [ModelTrainingParameters](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/model-training-parameters.html)
- [NetworkSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/network-settings.html)
- [NullSort](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/null-sort.html)
- [ObjectDetectionParameters](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/object-detection-parameters.html)
- [ObjectRefinementParameters](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/object-refinement-parameters.html)
- [ObjectSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/object-settings.html)
- [old_network_description::InputLayout](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-input-layout.html)
- [old_network_description::NetworkDescription](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-network-description.html)
- [old_network_description::OutputLayout](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-output-layout.html)
- [old_network_description::TensorLayout](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/old-network-description-tensor-layout.html)
- [PathSegmentSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/path-segment-settings.html)
- [PipelineSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/pipeline-settings.html)
- [PipelineSystemSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/pipeline-system-settings.html)
- [ProjectSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/project-settings.html)
- [RadiusOutlierRemovalParameters](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/radius-outlier-removal-parameters.html)
- [RecordingSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/recording-settings.html)
- [RecordingSystemSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/recording-system-settings.html)
- [RemoveNaNFilterParameter](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/remove-na-n-filter-parameter.html)
- [RobotSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/robot-settings.html)
- [SortDirection](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sort-direction.html)
- [SortingBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sorting-base.html)
- [SortingBaseCRTP](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sorting-base-crtp.html)
- [SortingObject2DParameterBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sorting-object-2d-parameter-base.html)
- [SortPosition](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/sort-position.html)
- [SymmetrySettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings.html)
- [SymmetrySettings< SYMMETRY_TYPE::ROTATION >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings-symmetry-type-rotation.html)
- [SymmetrySettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/symmetry-settings-base.html)
- [SystemSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/system-settings.html)
- [TopNParameter](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/top-n-parameter.html)
- [Transform](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/transform.html)
- [UserSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/user-settings.html)
- [WaypointSettings](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings.html)
- [WaypointSettings< WAYPOINT_TYPE::WP_ABSOLUTE >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-absolute.html)
- [WaypointSettings< WAYPOINT_TYPE::WP_CLONE >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-clone.html)
- [WaypointSettings< WAYPOINT_TYPE::WP_GRIP_POINT >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-grip-point.html)
- [WaypointSettings< WAYPOINT_TYPE::WP_RELATIVE >](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-waypoint-type-wp-relative.html)
- [WaypointSettingsBase](https://docs.hdvisionsystems.com/en/lumiscan-vgr/1.8.4/api/settings/waypoint-settings-base.html)
