#ifndef MYNTEYE_TYPES_H_ // NOLINT #define MYNTEYE_TYPES_H_ #pragma once #include #include #include #include "mynteye/mynteye.h" MYNTEYE_BEGIN_NAMESPACE /** * @defgroup enumerations Enumerations * @brief Public enumeration types. */ /** * @ingroup enumerations * @brief Streams define different type of data. */ enum class Stream : std::uint8_t { /** Left stream */ LEFT, /** Right stream */ RIGHT, /** Left stream, rectified */ LEFT_RECTIFIED, /** Right stream, rectified */ RIGHT_RECTIFIED, /** Disparity stream */ DISPARITY, /** Disparity stream, normalized */ DISPARITY_NORMALIZED, /** Depth stream */ DEPTH, /** Point cloud stream */ POINTS, /** Last guard */ LAST }; /** * @ingroup enumerations * @brief Capabilities define the full set of functionality that the device * might provide. */ enum class Capabilities : std::uint8_t { /** Provices stereo stream */ STEREO, /** Provices color stream */ COLOR, /** Provices depth stream */ DEPTH, /** Provices point cloud stream */ POINTS, /** Provices fisheye stream */ FISHEYE, /** Provices infrared stream */ INFRARED, /** Provices second infrared stream */ INFRARED2, /** Provices IMU (accelerometer, gyroscope) data */ IMU, /** Last guard */ LAST }; /** * @ingroup enumerations * @brief Camera info fields are read-only strings that can be queried from the * device. */ enum class Info : std::uint8_t { /** Device name */ DEVICE_NAME, /** Serial number */ SERIAL_NUMBER, /** Firmware version */ FIRMWARE_VERSION, /** Hardware version */ HARDWARE_VERSION, /** Spec version */ SPEC_VERSION, /** Lens type */ LENS_TYPE, /** IMU type */ IMU_TYPE, /** Nominal baseline */ NOMINAL_BASELINE, /** Last guard */ LAST, }; /** * @ingroup enumerations * @brief Camera control options define general configuration controls. */ enum class Option : std::uint8_t { /** Image gain, setting it if manual-exposure */ GAIN, /** Image brightness, setting it if manual-exposure */ BRIGHTNESS, /** Image contrast */ CONTRAST, /** Image frame rate */ FRAME_RATE, /** IMU frequency */ IMU_FREQUENCY, /** * Exposure mode * * 0: enable auto-exposure * 1: disable auto-exposure (manual-exposure) */ EXPOSURE_MODE, /** Max gain, setting it if auto-exposure */ MAX_GAIN, /** Max exposure time, setting it if auto-exposure */ MAX_EXPOSURE_TIME, /** Desired brightness */ DESIRED_BRIGHTNESS, /** IR control */ IR_CONTROL, /** * HDR mode * * 0: 10-bit * 1: 12-bit */ HDR_MODE, /** Zero drift calibration */ ZERO_DRIFT_CALIBRATION, /** Erase chip */ ERASE_CHIP, /** Last guard */ LAST, }; #define MYNTEYE_ENUM_HELPERS(TYPE) \ const char *to_string(const TYPE &value); \ inline bool is_valid(const TYPE &value) { \ using utype = std::underlying_type::type; \ utype val = static_cast(value); \ utype max = static_cast(TYPE::LAST); \ return /*val >= 0 &&*/ val < max; \ } \ inline std::ostream &operator<<(std::ostream &os, const TYPE &value) { \ using utype = std::underlying_type::type; \ if (is_valid(value)) \ return os << to_string(value); \ else \ return os << static_cast(value); \ } MYNTEYE_ENUM_HELPERS(Stream) MYNTEYE_ENUM_HELPERS(Capabilities) MYNTEYE_ENUM_HELPERS(Info) MYNTEYE_ENUM_HELPERS(Option) #undef MYNTEYE_ENUM_HELPERS /** * @defgroup calibration Intrinsics & Extrinsics * @brief Intrinsic and extrinsic properties. */ /** * @ingroup calibration * Video stream intrinsics. */ struct Intrinsics { /** width of the image in pixels */ std::uint16_t width; /** height of the image in pixels */ std::uint16_t height; /** focal length of the image plane, as a multiple of pixel width */ double fx; /** focal length of the image plane, as a multiple of pixel height */ double fy; /** horizontal coordinate of the principal point of the image */ double cx; /** vertical coordinate of the principal point of the image */ double cy; /** distortion model of the image */ std::uint8_t model; /** distortion coefficients: k1,k2,p1,p2,k3 */ double coeffs[5]; }; /** * @ingroup calibration * IMU sensor intrinsics: scale, drift and variances. */ struct ImuSensorIntrinsics { /** * Scale X cross axis cross axis * cross axis Scale Y cross axis * cross axis cross axis Scale Z */ double scale[3][3]; /* Zero-drift: X, Y, Z */ double drift[3]; /** Noise density variances */ double noise[3]; /** Random walk variances */ double bias[3]; }; /** * @ingroup calibration * IMU intrinsics, including accelerometer and gyroscope. */ struct ImuIntrinsics { ImuSensorIntrinsics accel; ImuSensorIntrinsics gyro; }; /** * @ingroup calibration * Cross-stream extrinsics, represent how the different devices are connected. */ struct Extrinsics { double rotation[3][3]; /**< rotation matrix */ double translation[3]; /**< translation vector */ }; /** * @defgroup datatypes Datatypes * @brief Public data types. */ /** * @ingroup datatypes * Image data. */ struct ImgData { /** Image frame id */ std::uint16_t frame_id; /** Image timestamp in 0.01ms */ std::uint32_t timestamp; /** Image exposure time in 0.01ms */ std::uint16_t exposure_time; }; /** * @ingroup datatypes * IMU data. */ struct ImuData { /** Image frame id */ std::uint16_t frame_id; /** IMU timestamp in 0.01ms */ std::uint32_t timestamp; /** IMU accelerometer data for 3-axis: X, Y, Z. */ double accel[3]; /** IMU gyroscope data for 3-axis: X, Y, Z. */ double gyro[3]; /** IMU temperature */ double temperature; }; MYNTEYE_END_NAMESPACE #endif // MYNTEYE_TYPES_H_ NOLINT