Instantiation

Extrinsic calibration

If no extrinsic calibration is provided, for example the extrinsic calibration parameters are set to their default values, the ODS application will not work! This would mean the camera head is inside the floor (transZ == 0) and looking towards to ceiling, which is not a valid ODS extrinsic calibration use case.

Note

Always forward all 6 extrinsic calibration values at the same time. You can edit the full configuration in a file and provide this file to the ifm3d config command.

{
    "ports": {
        <port_number>: {
            "processing": {
                "extrinsicHeadToUser": {
                    "rotX": <rotX_value>,
                    "rotY": <rotY_value>,
                    "rotZ": <rotZ_value>,
                    "transX": <transX_value>,
                    "transY": <transY_value>,
                    "transZ": <transZ_value>
                }
            }
        }
    }
}

Note

The rotation is in rad (radians) - instead of 90°, you provide Pi/2

For one camera, connected to port2, facing forward (+x) with label up (+z) and shifted 20 cm vertically, the calibration can be set with:

from ifm3dpy.device import O3R
o3r = O3R()
ext_calib =
{
    "ports": {
        "port2": {
            "processing": {
                "extrinsicHeadToUser": {
                    "rotX": 0.0,
                    "rotY": 1.57,
                    "rotZ": -1.57,
                    "transX": 0.0,
                    "transY": 0.0,
                    "transZ": 0.2
                }
            }
        }
    }
}
o3r.set(ext_calib)

Using the viewer of your choice, for example the ifmVisionAssistant, you can see the difference before and after the calibration.

Ports selection

A VPU (OVP8XX) can connect up to 6 3D imager, ranging from port0 to port5. The ports attribute in the ODS configuration defines which of these ports are available for the ODS application. These ports cannot be changed dynamically and require a transition to the configuration CONF state for modifications.

Warning

The current ODS version do not support more than 3 used heads within an ODS application.
"ports": [
            "port2",
            "port3",
            "port4",
            "port5",
            "port6"
          ],

Any connected heads that are not included in the ports list can still be used independently alongside the ODS application.

port6 is the Inertial Measurement Unit (IMU) and is used by ODS. port6 must always be provided to an ODS application.

Note

To optimize system performance and conserve resources, it’s recommended to switch all unused camera heads, especially RGB heads, to CONF state.

Active ports

The activePorts list defines which of the pre-configured ports will be used by the ODS application. Unlike the ports list, activePorts can be modified on the fly without requiring a transition to the configuration CONF state. This allows for dynamic adjustments while keeping the system in the running RUN state.

Each port in the activePorts list must also be included in the ports list to ensure it is recognized by the ODS application.

For ODS operation, at least one active port (excluding the IMU port, port6) must be present in the activePorts list. The maximum number of active ports allowed is determined by the maxNumSimultaneousCameras attribute.

Visual odometry

Visual odometry is an algorithmic approach that, in combination with the IMU, provides ego-motion data to the ODS algorithm. Images from the cameras used for visual odometry are used alongside IMU data to continuously refine the ODS ego-motion estimation. It is required that the selected camera head(s) capture a significant portion of the floor in their images.

The vo parameter expects a list of ports suitable for visual odometry. Visual odometry will be performed using one port that is present in both the voPorts list and the activePorts list.

"vo": {
    "voPorts": ["port2", "port3"]
}

Note

Visual odometry might be unavailable because of insufficient texture on the floor, ambient light, for example sun light, or because only a small portion of the floor is visible, for example when an object covers a large part of the field of view. Short-term outages of visual odometry (up to tens of seconds) should usually be overcome while the vehicle is still moving. In this case, ego motion becomes available again shortly after the first valid visual odometry updates. Long-term outages (of several minutes) probably require the vehicle to be at standstill for the ego motion to become available again.