Deepen AI - Enterprise
Deepen AI
  • Deepen AI Overview
  • FAQ
  • Saas & On Premise
  • Data Management
    • Data Management Overview
    • Creating/Uploading a dataset
    • Create a dataset profile
    • Auto Task Assignments
    • Task Life Cycle
    • Tasks Assignments
    • Creating a group
    • Adding a user
    • Embed labeled dataset
    • Export
    • Export labels
    • Import Labels
    • Import profile
    • Import profile via JSON
    • Access token for APIs
    • Data Streaming
    • Reports
    • Assessments
  • 2D/3D editors
    • Editor Content
    • AI sense (ML-assisted labeling)
    • Assisted 2d Segmentation
    • Scene Labeling
  • 2D Editor
    • 2D Editor Overview
    • 2D Bounding Boxes
    • 2D Polyline/Line
    • 2D Polygon
      • 2D Semantic/Instance Segmentation
        • 2D Segmentation (foreground/background)
    • 2D Points
    • 2D Semantic Painting
      • Segment Anything
      • Propagate Labels in Semantic Segementation
      • 2D Semantic Painting/Segmentation Output Format
    • 3D Bounding boxes on images
    • 2D ML-powered Visual Object Tracking
    • 2D Shortcut Keys
    • 2D Customer Review
  • 3D Editor
    • 3D Editor Overview
    • 3D Bounding Boxes — Single Frame/Individual Frame
    • 3D Bounding Boxes_Sequence
    • 3D Bounding Boxes Features
      • Label View
      • One-Click Bounding Box
      • Sequence Timeline
      • Show Ground Mesh
      • Secondary Views
      • Camera Views
      • Hide/UnHide Points in 3D Lidar
    • 3D Lines
    • 3D Polygons
    • 3D Semantic Segmentation/Painting
    • 3D Instance Segmentation/Painting
    • Fused Cloud
    • 3D Segmentation (Smart Brush)
    • 3D Segmentation (Polygon)
    • 3D Segmentation (Brush)
    • 3D Segmentation (Ground Polygon)
    • 3D Painting (Foreground/Background)
    • 3D Segmentation(3D Brush/Cube)
    • Label Set
    • 3D Shortcut Keys
    • 3D Customer Review
  • 3D input/output
    • JSON input format for uploading a dataset in a point cloud project.
    • How to convert ROS bag into JSON data for annotation
    • Data Output Format - 3D Semantic Segmentation
    • Data Output Format - 3D Instance Segmentation
  • Quality Assurance
    • Issue Creation
    • Automatic QA
  • Calibration
    • Calibration
    • Charuco Dictionary
    • Calibration FAQ
    • Data Collection for Camera intrinsic Calibration
    • Camera Intrinsic calibration
    • Data Collection for Lidar-Camera Calibration (Single Target)
    • Lidar-Camera Calibration (Single target)
    • Data Collection for Lidar-Camera Calibration (Targetless)
    • Lidar-Camera Calibration (Targetless)
    • Data Collection for Multi Target Lidar-Camera Calibration
    • Multi Target Lidar-Camera Calibration
    • Lidar-Camera Calibration(Old)
    • Vehicle-Camera Calibration
      • Data Collection for Vehicle-Camera Calibration
      • Vehicle Camera Targetless Calibration
      • Data collection for lane based targetless vehicle-camera calibration
      • Lane based Targetless Vehicle Camera Calibration
    • Data Collection for Rough Terrain Vehicle-Camera Calibration
    • Rough Terrain Vehicle-Camera Calibration
    • Calibration Toolbar options
    • Calibration Profile
    • Data Collection for Overlapping-Camera Calibration
    • Overlapping-Camera Calibration
    • Data collection guide for Overlapping Camera Calibration (Multiple-Targets)
    • Overlapping Camera Calibration (Multiple-Targets)
    • Data Collection for Vehicle-3D Lidar calibration
    • Data Collection for Vehicle-2D Lidar calibration
    • Vehicle Lidar (3D and 2D) Calibration
    • Data Collection for Vehicle Lidar Targetless Calibration
    • Data Collection for IMU Lidar Targetless Calibration
    • Vehicle Lidar Targetless Calibration
    • Data Collection for Non Overlapping Camera Calibration
    • Non-Overlapping-Camera Calibration
    • Multi Sensor Visualization
    • Data Collection for LiDAR-LiDAR Calibration
    • LiDAR-LiDAR Calibration
    • Data Collection for IMU Intrinsic calibration
    • IMU Intrinsic Calibration
    • Data Collection for Radar-Camera Calibration
    • Radar-Camera Calibration
    • Data Collection for IMU Vehicle calibration
    • Lidar-IMU Calibration
    • IMU Vehicle Calibration
    • Data Collection for vehicle radar calibration
    • Vehicle radar calibration
    • Calibration Optimiser
    • Calibration list page
    • Data collection for rough terrain vehicle-Lidar calibration
    • Rough terrain vehicle Lidar calibration
    • Surround view camera correction calibration
    • Data Collection for Surround view camera correction calibration
    • Data Collection for Lidar-Radar calibration
    • Lidar Radar Calibration
    • Vehicle Lidar Calibration
    • API Documentation
      • Targetless Overlapping Camera Calibration API
      • Target Overlapping Camera Calibration API
      • Lidar Camera Calibration API
      • LiDAR-LiDAR Calibration API
      • Vehicle Lidar Calibration API
      • Global Optimiser
      • Radar Camera Calibration API
      • Target Camera-Vehicle Calibration API
      • Targetless Camera-Vehicle Calibration API
      • Calibration groups
      • Delete Calibrations
      • Access token for APIs
    • Target Generator
  • API Reference
    • Introduction and Quickstart
    • Datasets
      • Create new dataset
      • Delete dataset
    • Issues
    • Tasks
    • Process uploaded data
    • Import 2D labels for a dataset
    • Import 3D labels for a dataset
    • Download labels
    • Labeling profiles
    • Paint labels
    • User groups
    • User / User Group Scopes
    • Download datasets
    • Label sets
    • Resources
    • 2D box pre-labeling model API
    • 3D box pre-labeling model API
    • Output JSON format
Powered by GitBook
On this page
  • Introduction
  • Folder Structure
  • config.json
  • Sample config.json
  • config.json key description
  • Quick start
  • Loop Optimisation
  • Request
  • Response
  • Get Extrinsic Parameters
  • Request
  • Response
Export as PDF
  1. Calibration
  2. API Documentation

Global Optimiser

PreviousVehicle Lidar Calibration APINextRadar Camera Calibration API

Last updated 7 months ago

Introduction

The API requires the client to upload the configuration for Global Optimisation in a zip file (.zip extension) in the format defined below. The contents of the zip file are called a dataset.

  1. The client makes a loop_optimisation API call, which runs the loop optimisation algorithm on the calibrations for the given configuration.

  2. The calibration process is completed without errors if the Loop optimisation API call response contains each calibration-id with updated extrinsics and the before and after residual error of the loop

Folder Structure

config.json contains configuration details of the loop_optimisation (dataset_ids_for_loop_optimisation, lambda_val, renamed_sensor_names and optimisation_name)

Note

The name of the JSON file should be config.json (case sensitive)

config.json

{
    "dataset_ids_for_loop_optimisation":
    [
        "NiTWuK7hYsl03dmnSXmWQ282",
        "HOb2cM5FZ1yRQUHCHupDz79y",
        "CBLukrd36IsAX75hwEDKKOWz"
    ],
    "lambda_val": 1,
    "optimisation_name": "Demo_optimisation",
    "renamed_sensor_names":
    {
        "NiTWuK7hYsl03dmnSXmWQ282":
        [
            "s1",
            "s2"
        ],
        "HOb2cM5FZ1yRQUHCHupDz79y":
        [
            "s2",
            "s3"
        ],
        "CBLukrd36IsAX75hwEDKKOWz":
        [
            "s3",
            "s1"
        ]
    }
}

Sample config.json

config.json key description

Key
Type
Description

dataset_ids_for_loop_optimisation

list of strings

Calibration ids that form a loop

optimisation_name ( Optional)

string

name of the optimisation default value: "Untitled_default_name"

renamed_sensor_names (Optional)

Object

In case the sensor names don't form a loop or there is not sensor name for the calibration this can be used to to define the names of the 1st and 2nd sensor. These names are used for loop optimisation. each key in the object refers to the dataset id for which the loop optimisation will be run. each value for the key is a list of exactly two string values which refers to the new name of the sensor to be used for loop finding in order.

lamda_val ( Optional)

float

This the approximate co-relation between the the angle and distance . Default value is 1 i.e 1 degree ~ 1 meter

Quick start

Loop Optimisation

This POST API call sends a zip file to the server and runs the loop optimisation algorithm. As the response, it returns the updated extrinsics and the residual error before the optimisation and after the optimisation to the user.

https://tools.calibrate.deepen.ai/api/v2/external/clients/{clientId}/loop_optimisation

Request

Path parameters

Parameter name
Parameter type
Description

clientId

string

ClientId obtained from Deepen AI

Body

Key
Value
Description

file

.zip file

Zip file containing config and pcd in a suitable format

Response

{
    "dataset_id": "tS9GBwRqa890URnCRw34tDin",
    "6QIA43UWNwdiks85lHnAc2da": {
        "original_extrinsics": {
            "roll": -91.51176360979406,
            "pitch": -0.7853331754606847,
            "yaw": -89.73580857135546,
            "px": 0.06297976077742809,
            "py": -0.2671144409542271,
            "pz": -0.06347677696290424
        },
        "optimised_extrinsics": {
            "roll": -162.78830086097742,
            "pitch": -67.70468852329144,
            "yaw": -67.75615602883266,
            "px": -0.16792771218395555,
            "py": -0.17175453956126496,
            "pz": -0.15735750873866253
        },
        "first_sensor": "s3",
        "second_sensor": "s1",
        "calibration_type": "lidar_camera_calibration"
    },
    "DIjnSTbKZ9gsci7uy5iQfHCu": {
        "original_extrinsics": {
            "roll": 1.2714894839312245,
            "pitch": -0.7715740726838012,
            "yaw": 3.757236823512545,
            "px": -0.05193859737110649,
            "py": 0.796489794765278,
            "pz": 0.023697180957906575
        },
        "optimised_extrinsics": {
            "roll": 32.69493047307559,
            "pitch": -24.39224818371977,
            "yaw": 2.684326464767165,
            "px": -0.06294408225362882,
            "py": 0.6277749217995089,
            "pz": 0.31418121569303137
        },
        "first_sensor": "s1",
        "second_sensor": "s2",
        "calibration_type": "multi_lidar_calibration"
    },
    "chTmOKGvF9LeY6PiOEObFwJr": {
        "original_extrinsics": {
            "roll": -91.37613268811,
            "pitch": 0.6464214970125648,
            "yaw": -85.92938066631706,
            "px": 0.027734081727064118,
            "py": 0.5336431958220468,
            "pz": -0.043782383437678325
        },
        "optimised_extrinsics": {
            "roll": -136.1776408027225,
            "pitch": -58.7953465856894,
            "yaw": -98.3309580011168,
            "px": 0.4195387376287298,
            "py": 0.23897812124162132,
            "pz": 0.3203764330895245
        },
        "first_sensor": "s2",
        "second_sensor": "s3",
        "calibration_type": "lidar_camera_calibration"
    },
    "residual_error": {
        "before": {
            "roll": 75.1373056595837,
            "pitch": -87.81393486062242,
            "yaw": 12.955394128297483,
            "px": 0.0080040164755718,
            "py": -0.32501818030990653,
            "pz": 0.20784293571718906
        },
        "after": {
            "roll": 1.6803259056739946e-14,
            "pitch": 6.519136608525574e-16,
            "yaw": 2.178289900990984e-16,
            "px": 4.163336342344337e-17,
            "py": 0.0,
            "pz": 1.3877787807814457e-17
        }
    }
}
Key
Description

residual_error

Key for the residual error . Values are the residual error before and after the optimisation.

roll, pitch, yaw , px, py and pz

These are the extrinsic parameters. roll, pitch, and yaw are given in degrees, and px, py, and pz are given in meters.

original_extrinsics

Extrinsics of the calibration before optimisation

optimised_extrinsics

Extrinsics after loop optimisation is done

first_sensor

first sensor name based on renaming you provided

second_sensor

second sensor name based on the renaming you provided

calibration_type

calibration_type of the calibration id

Get Extrinsic Parameters

This GET api call returns the complete dataset information for the global optimisation which is already created.

https://tools.calibrate.deepen.ai/api/v2/external/datasets/{datasetId}/extrinsic_parameters

Request

Path parameters

Parameter name
Parameter type
Description

datasetId

string

datasetId obtained from the response of Global Optimisation

Response


{
    "dataset_id": "c9Cgc9JTAdSeBsdM1vyqpV2l",
    "optimisation_name": "Demo_optimisation",
    "lambda_value": 1,
    "DIjnSTbKZ9gsci7uy5iQfHCu": {
        "original_extrinsics": {
            "roll": 1.2714894839312245,
            "pitch": -0.7715740726838012,
            "yaw": 3.757236823512545,
            "px": -0.05193859737110649,
            "py": 0.796489794765278,
            "pz": 0.023697180957906575
        },
        "optimised_extrinsics": {
            "roll": 1.2714894839312245,
            "pitch": -0.7715740726838012,
            "yaw": 3.757236823512545,
            "px": -0.05193859737110649,
            "py": 0.796489794765278,
            "pz": 0.023697180957906575
        },
        "first_sensor": "s1",
        "second_sensor": "s2",
        "calibration_type": "multi_lidar_calibration"
    },
    "chTmOKGvF9LeY6PiOEObFwJr": {
        "original_extrinsics": {
            "roll": -91.37613268811,
            "pitch": 0.6464214970125648,
            "yaw": -85.92938066631706,
            "px": 0.027734081727064118,
            "py": 0.5336431958220468,
            "pz": -0.043782383437678325
        },
        "optimised_extrinsics": {
            "roll": -91.37613268811,
            "pitch": 0.6464214970125648,
            "yaw": -85.92938066631706,
            "px": 0.027734081727064118,
            "py": 0.5336431958220468,
            "pz": -0.043782383437678325
        },
        "first_sensor": "s2",
        "second_sensor": "s3",
        "calibration_type": "lidar_camera_calibration"
    },
    "6QIA43UWNwdiks85lHnAc2da": {
        "original_extrinsics": {
            "roll": -91.51176360979406,
            "pitch": -0.7853331754606847,
            "yaw": -89.73580857135546,
            "px": 0.06297976077742809,
            "py": -0.2671144409542271,
            "pz": -0.06347677696290424
        },
        "optimised_extrinsics": {
            "roll": -91.51176360979406,
            "pitch": -0.7853331754606847,
            "yaw": -89.73580857135546,
            "px": 0.06297976077742809,
            "py": -0.2671144409542271,
            "pz": -0.06347677696290424
        },
        "first_sensor": "s3",
        "second_sensor": "s1",
        "calibration_type": "lidar_camera_calibration"
    },
    "residual_error": {
        "before": {
            "roll": -89.5656191395611,
            "pitch": 1.2150671022243427,
            "yaw": -87.06145941287474,
            "px": -0.20563179812615864,
            "py": 0.00477186102247,
            "pz": -0.330607546160306
        },
        "after": {
            "roll": 5.157508393488001e-15,
            "pitch": -3.234665344111012e-15,
            "yaw": 2.5737650847597067e-16,
            "px": 2.7755575615628914e-17,
            "py": 2.7755575615628914e-17,
            "pz": -2.7755575615628914e-17
        }
    }
}
Key
Description

dataset_id

A unique value to identify the dataset. dataset_id can be used to retrieve the extrinsic parameters.

optimisation_name

The name of the optimisation for the dataset_id

lambda_value

This the approximate co-relation between the the angle and distance . Default value is 1 i.e 1 degree ~ 1 meter

original_extrinsics

Extrinsics of the calibration before optimisation

optimised_extrinsics

Extrinsics after loop optimisation is done

first_sensor

first sensor name based on renaming you provided

second_sensor

second sensor name based on the renaming you provided

calibration_type

calibration_type of the calibration id

roll, pitch, yaw , px, py and pz

These are the extrinsic parameters. roll, pitch, and yaw are given in degrees, and px, py, and pz are given in meters.

Before invoking the APIs, the client must obtain the clientId and auth token from Deepen AI. If you are a calibration admin, you can create different Access Tokens using the UI and use those instead. clientId is part of the path parameters in most API calls, and the auth token should be prefixed with “Bearer” and passed to the ‘Authorization’ header in all API requests. How to get Access Tokens can be found on the following link:

Access token for APIs
383B
config.json