feat: add ROS camera info api.
This commit is contained in:
parent
de24292cca
commit
d36a288336
|
@ -363,6 +363,11 @@ class MYNTEYE_API API {
|
||||||
/** Enable process mode, e.g. imu assembly, temp_drift */
|
/** Enable process mode, e.g. imu assembly, temp_drift */
|
||||||
void EnableProcessMode(const std::int32_t& mode);
|
void EnableProcessMode(const std::int32_t& mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get ROS need camera info struct
|
||||||
|
*/
|
||||||
|
std::shared_ptr<struct CameraROSMsgInfoPair> GetCameraROSMsgInfoPair();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<Device> device_;
|
std::shared_ptr<Device> device_;
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
@ -670,7 +671,6 @@ struct MYNTEYE_API DisparityParamsBM : public DisparityParamsBase {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @defgroup datatypes Datatypes
|
* @defgroup datatypes Datatypes
|
||||||
* @brief Public data types.
|
* @brief Public data types.
|
||||||
|
@ -764,6 +764,38 @@ struct MYNTEYE_API OptionInfo {
|
||||||
MYNTEYE_API
|
MYNTEYE_API
|
||||||
std::ostream &operator<<(std::ostream &os, const OptionInfo &info);
|
std::ostream &operator<<(std::ostream &os, const OptionInfo &info);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup datatypes
|
||||||
|
* ROS camera info.
|
||||||
|
*/
|
||||||
|
struct MYNTEYE_API CameraROSMsgInfo {
|
||||||
|
/** height */
|
||||||
|
unsigned int height = 0;
|
||||||
|
/** width */
|
||||||
|
unsigned int width = 0;
|
||||||
|
/** calib model */
|
||||||
|
std::string distortion_model = "null";
|
||||||
|
double D[5] = {0};
|
||||||
|
double K[9] = {0};
|
||||||
|
double R[9] = {0};
|
||||||
|
double P[12] = {0};
|
||||||
|
};
|
||||||
|
MYNTEYE_API
|
||||||
|
std::ostream &operator<<(std::ostream &os, const CameraROSMsgInfo &info);
|
||||||
|
|
||||||
|
struct CameraROSMsgInfoPair {
|
||||||
|
inline bool isEmpty() {
|
||||||
|
return left.height * left.width * right.height * right.width <= 0;
|
||||||
|
}
|
||||||
|
struct CameraROSMsgInfo left;
|
||||||
|
struct CameraROSMsgInfo right;
|
||||||
|
double T_mul_f = -1.f;
|
||||||
|
double R[9] = {0};
|
||||||
|
double P[12] = {0};
|
||||||
|
};
|
||||||
|
MYNTEYE_API
|
||||||
|
std::ostream &operator<<(std::ostream &os, const CameraROSMsgInfoPair &info);
|
||||||
|
|
||||||
MYNTEYE_END_NAMESPACE
|
MYNTEYE_END_NAMESPACE
|
||||||
|
|
||||||
#endif // MYNTEYE_TYPES_H_
|
#endif // MYNTEYE_TYPES_H_
|
||||||
|
|
|
@ -21,6 +21,11 @@ int main(int argc, char *argv[]) {
|
||||||
auto &&api = API::Create(argc, argv);
|
auto &&api = API::Create(argc, argv);
|
||||||
if (!api) return 1;
|
if (!api) return 1;
|
||||||
|
|
||||||
|
auto info = api->GetCameraROSMsgInfoPair();
|
||||||
|
|
||||||
|
if (!info->isEmpty())
|
||||||
|
std::cout << "ROSMsgInfoPair:"<< std::endl << *info << std::endl;
|
||||||
|
|
||||||
bool ok;
|
bool ok;
|
||||||
auto &&request = api->SelectStreamRequest(&ok);
|
auto &&request = api->SelectStreamRequest(&ok);
|
||||||
if (!ok) return 1;
|
if (!ok) return 1;
|
||||||
|
|
|
@ -600,4 +600,8 @@ void API::EnableProcessMode(const std::int32_t& mode) {
|
||||||
device_->EnableProcessMode(mode);
|
device_->EnableProcessMode(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<struct CameraROSMsgInfoPair> API::GetCameraROSMsgInfoPair() {
|
||||||
|
return synthetic_->GetCameraROSMsgInfoPair();
|
||||||
|
}
|
||||||
|
|
||||||
MYNTEYE_END_NAMESPACE
|
MYNTEYE_END_NAMESPACE
|
||||||
|
|
|
@ -25,7 +25,7 @@ const int DISPARITY_MIN = 0;
|
||||||
const int DISPARITY_MAX = 64;
|
const int DISPARITY_MAX = 64;
|
||||||
|
|
||||||
DepthProcessor::DepthProcessor(
|
DepthProcessor::DepthProcessor(
|
||||||
std::shared_ptr<struct camera_calib_info_pair> calib_infos,
|
std::shared_ptr<struct CameraROSMsgInfoPair> calib_infos,
|
||||||
std::int32_t proc_period)
|
std::int32_t proc_period)
|
||||||
: Processor(std::move(proc_period)),
|
: Processor(std::move(proc_period)),
|
||||||
calib_infos_(calib_infos) {
|
calib_infos_(calib_infos) {
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "mynteye/api/processor.h"
|
#include "mynteye/api/processor.h"
|
||||||
#include "mynteye/api/processor/rectify_processor.h"
|
#include "mynteye/api/processor/rectify_processor.h"
|
||||||
|
#include "mynteye/types.h"
|
||||||
|
|
||||||
MYNTEYE_BEGIN_NAMESPACE
|
MYNTEYE_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -27,7 +28,7 @@ class DepthProcessor : public Processor {
|
||||||
static const char NAME[];
|
static const char NAME[];
|
||||||
|
|
||||||
explicit DepthProcessor(
|
explicit DepthProcessor(
|
||||||
std::shared_ptr<struct camera_calib_info_pair> calib_infos,
|
std::shared_ptr<struct CameraROSMsgInfoPair> calib_infos,
|
||||||
std::int32_t proc_period = 0);
|
std::int32_t proc_period = 0);
|
||||||
virtual ~DepthProcessor();
|
virtual ~DepthProcessor();
|
||||||
|
|
||||||
|
@ -42,7 +43,7 @@ class DepthProcessor : public Processor {
|
||||||
Object *const in, Object *const out,
|
Object *const in, Object *const out,
|
||||||
std::shared_ptr<Processor> const parent) override;
|
std::shared_ptr<Processor> const parent) override;
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<struct camera_calib_info_pair> calib_infos_;
|
std::shared_ptr<struct CameraROSMsgInfoPair> calib_infos_;
|
||||||
};
|
};
|
||||||
|
|
||||||
MYNTEYE_END_NAMESPACE
|
MYNTEYE_END_NAMESPACE
|
||||||
|
|
|
@ -53,7 +53,7 @@ struct DepthTraits<float> {
|
||||||
const char PointsProcessor::NAME[] = "PointsProcessor";
|
const char PointsProcessor::NAME[] = "PointsProcessor";
|
||||||
|
|
||||||
PointsProcessor::PointsProcessor(
|
PointsProcessor::PointsProcessor(
|
||||||
std::shared_ptr<struct camera_calib_info_pair> calib_infos,
|
std::shared_ptr<struct CameraROSMsgInfoPair> calib_infos,
|
||||||
std::int32_t proc_period)
|
std::int32_t proc_period)
|
||||||
: Processor(std::move(proc_period)),
|
: Processor(std::move(proc_period)),
|
||||||
calib_infos_(calib_infos) {
|
calib_infos_(calib_infos) {
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include <opencv2/core/core.hpp>
|
#include <opencv2/core/core.hpp>
|
||||||
|
|
||||||
#include "mynteye/api/processor.h"
|
#include "mynteye/api/processor.h"
|
||||||
#include "mynteye/api/processor/rectify_processor.h"
|
#include "mynteye/types.h"
|
||||||
|
|
||||||
MYNTEYE_BEGIN_NAMESPACE
|
MYNTEYE_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ class PointsProcessor : public Processor {
|
||||||
static const char NAME[];
|
static const char NAME[];
|
||||||
|
|
||||||
explicit PointsProcessor(
|
explicit PointsProcessor(
|
||||||
std::shared_ptr<struct camera_calib_info_pair> calib_infos,
|
std::shared_ptr<struct CameraROSMsgInfoPair> calib_infos,
|
||||||
std::int32_t proc_period = 0);
|
std::int32_t proc_period = 0);
|
||||||
virtual ~PointsProcessor();
|
virtual ~PointsProcessor();
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ class PointsProcessor : public Processor {
|
||||||
std::shared_ptr<Processor> const parent) override;
|
std::shared_ptr<Processor> const parent) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<struct camera_calib_info_pair> calib_infos_;
|
std::shared_ptr<struct CameraROSMsgInfoPair> calib_infos_;
|
||||||
};
|
};
|
||||||
|
|
||||||
MYNTEYE_END_NAMESPACE
|
MYNTEYE_END_NAMESPACE
|
||||||
|
|
|
@ -222,16 +222,16 @@ Eigen::Matrix4d RectifyProcessor::loadT(const mynteye::Extrinsics& in) {
|
||||||
|
|
||||||
void RectifyProcessor::loadCameraMatrix(cv::Mat& K, cv::Mat& D, // NOLINT
|
void RectifyProcessor::loadCameraMatrix(cv::Mat& K, cv::Mat& D, // NOLINT
|
||||||
cv::Size& image_size, // NOLINT
|
cv::Size& image_size, // NOLINT
|
||||||
struct camera_calib_info& calib_data) { // NOLINT
|
struct CameraROSMsgInfo& calib_data) { // NOLINT
|
||||||
K = cv::Mat(3, 3, CV_64F, calib_data.K);
|
K = cv::Mat(3, 3, CV_64F, calib_data.K);
|
||||||
std::size_t d_length = 4;
|
std::size_t d_length = 4;
|
||||||
D = cv::Mat(1, d_length, CV_64F, calib_data.D);
|
D = cv::Mat(1, d_length, CV_64F, calib_data.D);
|
||||||
image_size = cv::Size(calib_data.width, calib_data.height);
|
image_size = cv::Size(calib_data.width, calib_data.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct camera_calib_info RectifyProcessor::getCalibMatData(
|
struct CameraROSMsgInfo RectifyProcessor::getCalibMatData(
|
||||||
const mynteye::IntrinsicsEquidistant& in) {
|
const mynteye::IntrinsicsEquidistant& in) {
|
||||||
struct camera_calib_info calib_mat_data;
|
struct CameraROSMsgInfo calib_mat_data;
|
||||||
calib_mat_data.distortion_model = "KANNALA_BRANDT";
|
calib_mat_data.distortion_model = "KANNALA_BRANDT";
|
||||||
calib_mat_data.height = in.height;
|
calib_mat_data.height = in.height;
|
||||||
calib_mat_data.width = in.width;
|
calib_mat_data.width = in.width;
|
||||||
|
@ -248,7 +248,7 @@ struct camera_calib_info RectifyProcessor::getCalibMatData(
|
||||||
return calib_mat_data;
|
return calib_mat_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<struct camera_calib_info_pair> RectifyProcessor::stereoRectify(
|
std::shared_ptr<struct CameraROSMsgInfoPair> RectifyProcessor::stereoRectify(
|
||||||
camodocal::CameraPtr leftOdo,
|
camodocal::CameraPtr leftOdo,
|
||||||
camodocal::CameraPtr rightOdo,
|
camodocal::CameraPtr rightOdo,
|
||||||
mynteye::IntrinsicsEquidistant in_left,
|
mynteye::IntrinsicsEquidistant in_left,
|
||||||
|
@ -263,8 +263,8 @@ std::shared_ptr<struct camera_calib_info_pair> RectifyProcessor::stereoRectify(
|
||||||
cv::Mat K1, D1, K2, D2;
|
cv::Mat K1, D1, K2, D2;
|
||||||
cv::Size image_size1, image_size2;
|
cv::Size image_size1, image_size2;
|
||||||
|
|
||||||
struct camera_calib_info calib_mat_data_left = getCalibMatData(in_left);
|
struct CameraROSMsgInfo calib_mat_data_left = getCalibMatData(in_left);
|
||||||
struct camera_calib_info calib_mat_data_right = getCalibMatData(in_right);
|
struct CameraROSMsgInfo calib_mat_data_right = getCalibMatData(in_right);
|
||||||
|
|
||||||
loadCameraMatrix(K1, D1, image_size1, calib_mat_data_left);
|
loadCameraMatrix(K1, D1, image_size1, calib_mat_data_left);
|
||||||
loadCameraMatrix(K2, D2, image_size2, calib_mat_data_right);
|
loadCameraMatrix(K2, D2, image_size2, calib_mat_data_right);
|
||||||
|
@ -308,9 +308,26 @@ std::shared_ptr<struct camera_calib_info_pair> RectifyProcessor::stereoRectify(
|
||||||
calib_mat_data_right.R[i*3 +j] = R2.at<double>(i, j);
|
calib_mat_data_right.R[i*3 +j] = R2.at<double>(i, j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
struct camera_calib_info_pair res =
|
|
||||||
{calib_mat_data_left, calib_mat_data_right, T_mul_f};
|
struct CameraROSMsgInfoPair info_pair;
|
||||||
return std::make_shared<struct camera_calib_info_pair>(res);
|
info_pair.left = calib_mat_data_left;
|
||||||
|
info_pair.right = calib_mat_data_right;
|
||||||
|
info_pair.T_mul_f = T_mul_f;
|
||||||
|
for (std::size_t i = 0; i< 3 * 4; i++) {
|
||||||
|
info_pair.P[i] = calib_mat_data_left.P[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
info_pair.R[0] = ex_right_to_left.rotation[0][0];
|
||||||
|
info_pair.R[1] = ex_right_to_left.rotation[0][1];
|
||||||
|
info_pair.R[2] = ex_right_to_left.rotation[0][2];
|
||||||
|
info_pair.R[3] = ex_right_to_left.rotation[1][0];
|
||||||
|
info_pair.R[4] = ex_right_to_left.rotation[1][1];
|
||||||
|
info_pair.R[5] = ex_right_to_left.rotation[1][2];
|
||||||
|
info_pair.R[6] = ex_right_to_left.rotation[2][0];
|
||||||
|
info_pair.R[7] = ex_right_to_left.rotation[2][1];
|
||||||
|
info_pair.R[8] = ex_right_to_left.rotation[2][2];
|
||||||
|
|
||||||
|
return std::make_shared<struct CameraROSMsgInfoPair>(info_pair);
|
||||||
}
|
}
|
||||||
|
|
||||||
camodocal::CameraPtr RectifyProcessor::generateCameraFromIntrinsicsEquidistant(
|
camodocal::CameraPtr RectifyProcessor::generateCameraFromIntrinsicsEquidistant(
|
||||||
|
@ -382,7 +399,7 @@ RectifyProcessor::RectifyProcessor(
|
||||||
std::int32_t proc_period)
|
std::int32_t proc_period)
|
||||||
: Processor(std::move(proc_period)),
|
: Processor(std::move(proc_period)),
|
||||||
calib_model(CalibrationModel::UNKNOW) {
|
calib_model(CalibrationModel::UNKNOW) {
|
||||||
calib_infos = std::make_shared<struct camera_calib_info_pair>();
|
calib_infos = std::make_shared<struct CameraROSMsgInfoPair>();
|
||||||
InitParams(
|
InitParams(
|
||||||
*std::dynamic_pointer_cast<IntrinsicsEquidistant>(intr_left),
|
*std::dynamic_pointer_cast<IntrinsicsEquidistant>(intr_left),
|
||||||
*std::dynamic_pointer_cast<IntrinsicsEquidistant>(intr_right),
|
*std::dynamic_pointer_cast<IntrinsicsEquidistant>(intr_right),
|
||||||
|
|
|
@ -31,22 +31,6 @@
|
||||||
|
|
||||||
MYNTEYE_BEGIN_NAMESPACE
|
MYNTEYE_BEGIN_NAMESPACE
|
||||||
|
|
||||||
struct camera_calib_info {
|
|
||||||
unsigned int height = 0;
|
|
||||||
unsigned int width = 0;
|
|
||||||
std::string distortion_model = "null";
|
|
||||||
double D[4] = {0};
|
|
||||||
double K[9] = {0};
|
|
||||||
double R[9] = {0};
|
|
||||||
double P[12] = {0};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct camera_calib_info_pair {
|
|
||||||
struct camera_calib_info left;
|
|
||||||
struct camera_calib_info right;
|
|
||||||
double T_mul_f;
|
|
||||||
};
|
|
||||||
|
|
||||||
class Device;
|
class Device;
|
||||||
|
|
||||||
class RectifyProcessor : public Processor {
|
class RectifyProcessor : public Processor {
|
||||||
|
@ -69,8 +53,8 @@ class RectifyProcessor : public Processor {
|
||||||
|
|
||||||
cv::Mat R1, P1, R2, P2, Q;
|
cv::Mat R1, P1, R2, P2, Q;
|
||||||
cv::Mat map11, map12, map21, map22;
|
cv::Mat map11, map12, map21, map22;
|
||||||
|
inline std::shared_ptr<struct CameraROSMsgInfoPair>
|
||||||
inline std::shared_ptr<struct camera_calib_info_pair> getCalibInfoPair() {
|
getCameraROSMsgInfoPair() {
|
||||||
return calib_infos;
|
return calib_infos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,12 +87,12 @@ class RectifyProcessor : public Processor {
|
||||||
Eigen::Matrix4d loadT(const mynteye::Extrinsics& in);
|
Eigen::Matrix4d loadT(const mynteye::Extrinsics& in);
|
||||||
void loadCameraMatrix(cv::Mat& K, cv::Mat& D, // NOLINT
|
void loadCameraMatrix(cv::Mat& K, cv::Mat& D, // NOLINT
|
||||||
cv::Size& image_size, // NOLINT
|
cv::Size& image_size, // NOLINT
|
||||||
struct camera_calib_info& calib_data); // NOLINT
|
struct CameraROSMsgInfo& calib_data); // NOLINT
|
||||||
|
|
||||||
struct camera_calib_info getCalibMatData(
|
struct CameraROSMsgInfo getCalibMatData(
|
||||||
const mynteye::IntrinsicsEquidistant& in);
|
const mynteye::IntrinsicsEquidistant& in);
|
||||||
|
|
||||||
std::shared_ptr<struct camera_calib_info_pair> stereoRectify(
|
std::shared_ptr<struct CameraROSMsgInfoPair> stereoRectify(
|
||||||
camodocal::CameraPtr leftOdo,
|
camodocal::CameraPtr leftOdo,
|
||||||
camodocal::CameraPtr rightOdo,
|
camodocal::CameraPtr rightOdo,
|
||||||
mynteye::IntrinsicsEquidistant in_left,
|
mynteye::IntrinsicsEquidistant in_left,
|
||||||
|
@ -119,7 +103,7 @@ class RectifyProcessor : public Processor {
|
||||||
const mynteye::IntrinsicsEquidistant & in);
|
const mynteye::IntrinsicsEquidistant & in);
|
||||||
|
|
||||||
CalibrationModel calib_model;
|
CalibrationModel calib_model;
|
||||||
std::shared_ptr<struct camera_calib_info_pair> calib_infos;
|
std::shared_ptr<struct CameraROSMsgInfoPair> calib_infos;
|
||||||
};
|
};
|
||||||
|
|
||||||
MYNTEYE_END_NAMESPACE
|
MYNTEYE_END_NAMESPACE
|
||||||
|
|
|
@ -32,6 +32,7 @@ RectifyProcessorOCV::RectifyProcessorOCV(
|
||||||
: Processor(std::move(proc_period)),
|
: Processor(std::move(proc_period)),
|
||||||
calib_model(CalibrationModel::UNKNOW) {
|
calib_model(CalibrationModel::UNKNOW) {
|
||||||
VLOG(2) << __func__ << ": proc_period=" << proc_period;
|
VLOG(2) << __func__ << ": proc_period=" << proc_period;
|
||||||
|
calib_infos = std::make_shared<struct CameraROSMsgInfoPair>();
|
||||||
InitParams(
|
InitParams(
|
||||||
*std::dynamic_pointer_cast<IntrinsicsPinhole>(intr_left),
|
*std::dynamic_pointer_cast<IntrinsicsPinhole>(intr_left),
|
||||||
*std::dynamic_pointer_cast<IntrinsicsPinhole>(intr_right),
|
*std::dynamic_pointer_cast<IntrinsicsPinhole>(intr_right),
|
||||||
|
@ -75,6 +76,25 @@ bool RectifyProcessorOCV::OnProcess(
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct CameraROSMsgInfo RectifyProcessorOCV::getCalibMatData(
|
||||||
|
const mynteye::IntrinsicsPinhole& in) {
|
||||||
|
struct CameraROSMsgInfo calib_mat_data;
|
||||||
|
calib_mat_data.distortion_model = "PINHOLE";
|
||||||
|
calib_mat_data.height = in.height;
|
||||||
|
calib_mat_data.width = in.width;
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < 5; i++) {
|
||||||
|
calib_mat_data.D[i] = in.coeffs[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
calib_mat_data.K[0] = in.fx;
|
||||||
|
calib_mat_data.K[4] = in.cx;
|
||||||
|
calib_mat_data.K[2] = in.fy;
|
||||||
|
calib_mat_data.K[5] = in.cy;
|
||||||
|
calib_mat_data.K[8] = 1;
|
||||||
|
return calib_mat_data;
|
||||||
|
}
|
||||||
|
|
||||||
void RectifyProcessorOCV::InitParams(
|
void RectifyProcessorOCV::InitParams(
|
||||||
IntrinsicsPinhole in_left,
|
IntrinsicsPinhole in_left,
|
||||||
IntrinsicsPinhole in_right,
|
IntrinsicsPinhole in_right,
|
||||||
|
@ -84,6 +104,9 @@ void RectifyProcessorOCV::InitParams(
|
||||||
in_right.ResizeIntrinsics();
|
in_right.ResizeIntrinsics();
|
||||||
cv::Size size{in_left.width, in_left.height};
|
cv::Size size{in_left.width, in_left.height};
|
||||||
|
|
||||||
|
struct CameraROSMsgInfoPair info_pair;
|
||||||
|
info_pair.left = getCalibMatData(in_left);
|
||||||
|
info_pair.right = getCalibMatData(in_right);
|
||||||
cv::Mat M1 =
|
cv::Mat M1 =
|
||||||
(cv::Mat_<double>(3, 3) << in_left.fx, 0, in_left.cx, 0, in_left.fy,
|
(cv::Mat_<double>(3, 3) << in_left.fx, 0, in_left.cx, 0, in_left.fy,
|
||||||
in_left.cy, 0, 0, 1);
|
in_left.cy, 0, 0, 1);
|
||||||
|
@ -100,6 +123,16 @@ void RectifyProcessorOCV::InitParams(
|
||||||
ex_right_to_left.rotation[2][1], ex_right_to_left.rotation[2][2]);
|
ex_right_to_left.rotation[2][1], ex_right_to_left.rotation[2][2]);
|
||||||
cv::Mat T(3, 1, CV_64F, ex_right_to_left.translation);
|
cv::Mat T(3, 1, CV_64F, ex_right_to_left.translation);
|
||||||
|
|
||||||
|
info_pair.R[0] = ex_right_to_left.rotation[0][0];
|
||||||
|
info_pair.R[1] = ex_right_to_left.rotation[0][1];
|
||||||
|
info_pair.R[2] = ex_right_to_left.rotation[0][2];
|
||||||
|
info_pair.R[3] = ex_right_to_left.rotation[1][0];
|
||||||
|
info_pair.R[4] = ex_right_to_left.rotation[1][1];
|
||||||
|
info_pair.R[5] = ex_right_to_left.rotation[1][2];
|
||||||
|
info_pair.R[6] = ex_right_to_left.rotation[2][0];
|
||||||
|
info_pair.R[7] = ex_right_to_left.rotation[2][1];
|
||||||
|
info_pair.R[8] = ex_right_to_left.rotation[2][2];
|
||||||
|
|
||||||
VLOG(2) << "InitParams size: " << size;
|
VLOG(2) << "InitParams size: " << size;
|
||||||
VLOG(2) << "M1: " << M1;
|
VLOG(2) << "M1: " << M1;
|
||||||
VLOG(2) << "M2: " << M2;
|
VLOG(2) << "M2: " << M2;
|
||||||
|
@ -113,6 +146,26 @@ void RectifyProcessorOCV::InitParams(
|
||||||
M1, D1, M2, D2, size, R, T, R1, R2, P1, P2, Q, cv::CALIB_ZERO_DISPARITY,
|
M1, D1, M2, D2, size, R, T, R1, R2, P1, P2, Q, cv::CALIB_ZERO_DISPARITY,
|
||||||
0, size, &left_roi, &right_roi);
|
0, size, &left_roi, &right_roi);
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < 3; i++) {
|
||||||
|
for (std::size_t j = 0; j < 4; j++) {
|
||||||
|
info_pair.left.P[i*4 + j] = P1.at<double>(i, j);
|
||||||
|
info_pair.right.P[i*4 + j] = P2.at<double>(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < 3; i++) {
|
||||||
|
for (std::size_t j = 0; j < 3; j++) {
|
||||||
|
info_pair.left.R[i*3 + j] = R1.at<double>(i, j);
|
||||||
|
info_pair.right.R[i*3 +j] = R2.at<double>(i, j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i< 3 * 4; i++) {
|
||||||
|
info_pair.P[i] = info_pair.left.P[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
*calib_infos = info_pair;
|
||||||
|
|
||||||
cv::initUndistortRectifyMap(M1, D1, R1, P1, size, CV_16SC2, map11, map12);
|
cv::initUndistortRectifyMap(M1, D1, R1, P1, size, CV_16SC2, map11, map12);
|
||||||
cv::initUndistortRectifyMap(M2, D2, R2, P2, size, CV_16SC2, map21, map22);
|
cv::initUndistortRectifyMap(M2, D2, R2, P2, size, CV_16SC2, map21, map22);
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,14 @@ class RectifyProcessorOCV : public Processor {
|
||||||
|
|
||||||
std::string Name() override;
|
std::string Name() override;
|
||||||
|
|
||||||
|
inline std::shared_ptr<struct CameraROSMsgInfoPair>
|
||||||
|
getCameraROSMsgInfoPair() {
|
||||||
|
return calib_infos;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct CameraROSMsgInfo getCalibMatData(
|
||||||
|
const mynteye::IntrinsicsPinhole& in);
|
||||||
|
|
||||||
void ReloadImageParams(
|
void ReloadImageParams(
|
||||||
std::shared_ptr<IntrinsicsBase> intr_left,
|
std::shared_ptr<IntrinsicsBase> intr_left,
|
||||||
std::shared_ptr<IntrinsicsBase> intr_right,
|
std::shared_ptr<IntrinsicsBase> intr_right,
|
||||||
|
@ -66,6 +74,8 @@ class RectifyProcessorOCV : public Processor {
|
||||||
IntrinsicsPinhole in_right, Extrinsics ex_right_to_left);
|
IntrinsicsPinhole in_right, Extrinsics ex_right_to_left);
|
||||||
|
|
||||||
CalibrationModel calib_model;
|
CalibrationModel calib_model;
|
||||||
|
|
||||||
|
std::shared_ptr<struct CameraROSMsgInfoPair> calib_infos;
|
||||||
};
|
};
|
||||||
|
|
||||||
MYNTEYE_END_NAMESPACE
|
MYNTEYE_END_NAMESPACE
|
||||||
|
|
|
@ -352,10 +352,10 @@ void Synthetic::InitProcessors() {
|
||||||
RECTIFY_PROC_PERIOD);
|
RECTIFY_PROC_PERIOD);
|
||||||
rectify_processor = rectify_processor_imp;
|
rectify_processor = rectify_processor_imp;
|
||||||
points_processor = std::make_shared<PointsProcessor>(
|
points_processor = std::make_shared<PointsProcessor>(
|
||||||
rectify_processor_imp -> getCalibInfoPair(),
|
rectify_processor_imp -> getCameraROSMsgInfoPair(),
|
||||||
POINTS_PROC_PERIOD);
|
POINTS_PROC_PERIOD);
|
||||||
depth_processor = std::make_shared<DepthProcessor>(
|
depth_processor = std::make_shared<DepthProcessor>(
|
||||||
rectify_processor_imp -> getCalibInfoPair(),
|
rectify_processor_imp -> getCameraROSMsgInfoPair(),
|
||||||
DEPTH_PROC_PERIOD);
|
DEPTH_PROC_PERIOD);
|
||||||
|
|
||||||
root_processor->AddChild(rectify_processor);
|
root_processor->AddChild(rectify_processor);
|
||||||
|
@ -566,4 +566,20 @@ void Synthetic::NotifyStreamData(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<struct CameraROSMsgInfoPair>
|
||||||
|
Synthetic::GetCameraROSMsgInfoPair() {
|
||||||
|
if (calib_model_ == CalibrationModel::PINHOLE) {
|
||||||
|
auto processor = getProcessorWithStream(Stream::LEFT_RECTIFIED);
|
||||||
|
auto proc = static_cast<RectifyProcessorOCV*>(&(*processor));
|
||||||
|
return proc->getCameraROSMsgInfoPair();
|
||||||
|
#ifdef WITH_CAM_MODELS
|
||||||
|
} else if (calib_model_ == CalibrationModel::KANNALA_BRANDT) {
|
||||||
|
auto processor = getProcessorWithStream(Stream::LEFT_RECTIFIED);
|
||||||
|
auto proc = static_cast<RectifyProcessor*>(&(*processor));
|
||||||
|
return proc->getCameraROSMsgInfoPair();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
MYNTEYE_END_NAMESPACE
|
MYNTEYE_END_NAMESPACE
|
||||||
|
|
|
@ -93,6 +93,7 @@ class Synthetic {
|
||||||
std::shared_ptr<Processor> getProcessorWithStream(const Stream& stream);
|
std::shared_ptr<Processor> getProcessorWithStream(const Stream& stream);
|
||||||
void SetDisparityComputingMethodType(
|
void SetDisparityComputingMethodType(
|
||||||
const DisparityComputingMethod &MethoType);
|
const DisparityComputingMethod &MethoType);
|
||||||
|
std::shared_ptr<struct CameraROSMsgInfoPair> GetCameraROSMsgInfoPair();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitCalibInfo();
|
void InitCalibInfo();
|
||||||
|
|
|
@ -317,4 +317,34 @@ std::ostream &operator<<(std::ostream &os, const OptionInfo &info) {
|
||||||
<< ", def: " << info.def;
|
<< ", def: " << info.def;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::ostream &operator<<(std::ostream &os, const CameraROSMsgInfo &info) {
|
||||||
|
os << "width: " << info.width << ", height: " << info.height << std::endl
|
||||||
|
<< "distortion_model: " << info.distortion_model;
|
||||||
|
os << std::endl << "D: ";
|
||||||
|
for (size_t i = 0; i < 5; i++)
|
||||||
|
os << info.D[i] << ",";
|
||||||
|
os << std::endl << "K: ";
|
||||||
|
for (size_t i = 0; i < 9; i++)
|
||||||
|
os << info.K[i] << ",";
|
||||||
|
os << std::endl << "R: ";
|
||||||
|
for (size_t i = 0; i < 9; i++)
|
||||||
|
os << info.R[i] << ",";
|
||||||
|
os << std::endl << "P: ";
|
||||||
|
for (size_t i = 0; i < 12; i++)
|
||||||
|
os << info.P[i] << ",";
|
||||||
|
os << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream &operator<<(std::ostream &os, const CameraROSMsgInfoPair &info) {
|
||||||
|
os << "left:\n" << info.left << std::endl;
|
||||||
|
os << "right:\n" << info.right << std::endl;
|
||||||
|
os << "base R:";
|
||||||
|
for (size_t i = 0; i < 9; i++)
|
||||||
|
os << info.R[i] << ",";
|
||||||
|
os << std::endl << "base P:";
|
||||||
|
for (size_t i = 0; i < 12; i++)
|
||||||
|
os << info.P[i] << ",";
|
||||||
|
os << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
MYNTEYE_END_NAMESPACE
|
MYNTEYE_END_NAMESPACE
|
||||||
|
|
Loading…
Reference in New Issue
Block a user