/*
* Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of NVIDIA CORPORATION nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file
* Libargus Extension: Sync Sensor Calibration Data API
*
* @b Description: This file defines the SyncSensorCalibrationData extension.
*/
#ifndef _ARGUS_SYNC_SENSOR_CALIBRATION_DATA_H
#define _ARGUS_SYNC_SENSOR_CALIBRATION_DATA_H
namespace Argus
{
/**
* The DistortionType of a sync sensor defines the type of distortion model.
*/
DEFINE_NAMED_UUID_CLASS(DistortionType);
DEFINE_UUID(DistortionType, DISTORTION_TYPE_POLYNOMIAL, 23e59580,17ff,11eb,8b6f,08,00,20,0c,9a,66);
DEFINE_UUID(DistortionType, DISTORTION_TYPE_FISHEYE, 23e59581,17ff,11eb,8b6f,08,00,20,0c,9a,66);
DEFINE_UUID(DistortionType, DISTORTION_TYPE_OMINI_DIRECTIONAL, 23e5bc90,17ff,11eb,8b6f,08,00,20,0c,9a,66);
/**
* The MappingType of a sync sensor defines the type of mapping used for fisheye distortion model.
*/
DEFINE_NAMED_UUID_CLASS(MappingType);
DEFINE_UUID(MappingType, MAPPING_TYPE_EQUIDISTANT, 9e7f3c10,17ff,11eb,8b6f,08,00,20,0c,9a,66);
DEFINE_UUID(MappingType, MAPPING_TYPE_EQUISOLID, 9e7f3c11,17ff,11eb,8b6f,08,00,20,0c,9a,66);
DEFINE_UUID(MappingType, MAPPING_TYPE_ORTHOGRAPHIC, 9e7f3c12,17ff,11eb,8b6f,08,00,20,0c,9a,66);
DEFINE_UUID(MappingType, MAPPING_TYPE_STEREOGRAPHIC, 9e7f3c13,17ff,11eb,8b6f,08,00,20,0c,9a,66);
/**
* Adds accessors for sync sensor calibration data.
* - Ext::ISyncSensorCalibrationData : Accesses the sync sensor calibration data.
*
* @defgroup ArgusExtSyncSensorCalibrationData Ext::SyncSensorCalibrationData
* @ingroup ArgusExtensions
*/
DEFINE_UUID(ExtensionName, EXT_SYNC_SENSOR_CALIBRATION_DATA, 10845a70,d52f,11ea,8b6e,08,00,20,0c,9a,66);
namespace Ext
{
/**
* @class ISyncSensorCalibrationData
*
* Interface used to access sync sensor calibration data.
*
* @ingroup ArgusCameraDevice ArgusExtSyncSensorCalibrationData
*/
DEFINE_UUID(InterfaceID, IID_SYNC_SENSOR_CALIBRATION_DATA, 5925f360,d52f,11ea,8b6e,08,00,20,0c,9a,66);
class ISyncSensorCalibrationData : public Interface
{
public:
static const InterfaceID& id() { return IID_SYNC_SENSOR_CALIBRATION_DATA; }
/**
* Returns the sync sensor module id in the provided memory location.
* The maximum supported length of sync sensor id string is 32.
* @param [in,out] syncSensorId Pointer for getting the sync sensor id string associated
* with sensor.
* @param [in] size The size of the syncSensorId.
*/
virtual Status getSyncSensorModuleId(void* syncSensorId, size_t size) const = 0;
/**
* Returns the size of the image in pixels.
*/
virtual Size2D getImageSizeInPixels() const = 0;
/**
* Returns the focal length fx and fy from intrinsic parameters.
*/
virtual Point2D getFocalLength() const = 0;
/**
* Returns the skew from intrinsic parameters.
*/
virtual float getSkew() const = 0;
/**
* Returns the principal point (optical center) x and y from intrinsic parameters.
*/
virtual Point2D getPrincipalPoint() const = 0;
/**
* Returns the lens distortion type as per the model being used.
*/
virtual DistortionType getLensDistortionType() const = 0;
/**
* Returns the mapping type in case of fisheye distortion.
*/
virtual MappingType getFisheyeMappingType() const = 0;
/**
* Returns the radial coefficients count in case of polynomial or fisheye distortion.
*
* @param[in] distortionType The lens distortion type.
*/
virtual uint32_t getRadialCoeffsCount(const DistortionType& distortionType) const = 0;
/**
* Returns the radial coefficients vector as per distortion type and
* size of the vector is given by getRadialCoeffsCount().
*
* @param[out] k The radial coefficient vector from distortion properties.
*
* @param[in] distortionType The lens distortion type.
*/
virtual Status getRadialCoeffs(std::vector* k,
const DistortionType& distortionType) const = 0;
/**
* Returns the tangential coefficients count in case of polynomial distortion.
*/
virtual uint32_t getTangentialCoeffsCount() const = 0;
/**
* Returns the tangential coefficients in case of polynomial distortion and
* size of the vector is given by getTangentialCoeffsCount().
*
* @param[out] p The tangential coefficient vector from distortion properties.
*/
virtual Status getTangentialCoeffs(std::vector* p) const = 0;
/**
* Returns the rotation parameter expressed in Rodrigues notation from extrinsic parameters.
* angle = sqrt(rx^2+ry^2+rz^2).
* unit axis = [rx,ry,rz]/angle.
*/
virtual Point3D getRotationParams() const = 0;
/**
* Returns the translation parameters in x, y and z co-ordinates with respect to a
* reference point from extrinsic params.
*/
virtual Point3D getTranslationParams() const = 0;
/**
* Returns the serial number of the sensor module in the provided memory location.
*/
virtual Status getModuleSerialNumber(void * serialNumber, size_t size) const = 0;
/**
* Returns whether IMU sensor is present or not.
*/
virtual bool isImuSensorAvailable() const = 0;
/**
* Returns the linear acceleration bias for all three axes x, y and z of the IMU device.
*/
virtual Point3D getLinearAccBias() const = 0;
/**
* Returns the angular velocity bias for all three axes x, y and z of the IMU device.
*/
virtual Point3D getAngularVelocityBias() const = 0;
/**
* Returns the gravity acceleration for all three axes x, y and z of the IMU device.
*/
virtual Point3D getGravityAcc() const = 0;
/**
* Returns the IMU rotation parameter expressed in Rodrigues notation from extrinsic parameters.
* angle = sqrt(rx^2+ry^2+rz^2).
* unit axis = [rx,ry,rz]/angle.
*/
virtual Point3D getImuRotationParams() const = 0;
/**
* Returns the IMU translation parameters in x, y and z co-ordinates with respect to a
* reference point from extrinsic params.
*/
virtual Point3D getImuTranslationParams() const = 0;
/**
* Returns the update rate
*/
virtual float getUpdateRate() const = 0;
/**
* Returns the linear acceleration noise density
*/
virtual float getLinearAccNoiseDensity() const = 0;
/**
* Returns the linear acceleration random walk
*/
virtual float getLinearAccRandomWalk() const = 0;
/**
* Returns the angular velocity noise density
*/
virtual float getAngularVelNoiseDensity() const = 0;
/**
* Returns the angular velocity random walk
*/
virtual float getAngularVelRandomWalk() const = 0;
protected:
~ISyncSensorCalibrationData() {}
};
} // namespace Ext
} // namespace Argus
#endif // _ARGUS_SYNC_SENSOR_CALIBRATION_DATA_H