diff --git a/include/vision/sensor/sensor_camera.h b/include/vision/sensor/sensor_camera.h index 4af4641f6691636955f339f77fb300952771c45b..49f1a3ea6911a7548b11d0b3ad6985c910b0cb54 100644 --- a/include/vision/sensor/sensor_camera.h +++ b/include/vision/sensor/sensor_camera.h @@ -27,17 +27,52 @@ struct ParamsSensorCamera : public ParamsSensorBase { width = _server.getParam<unsigned int>(prefix + _unique_name + "/width"); height = _server.getParam<unsigned int>(prefix + _unique_name + "/height"); - pinhole_model_raw = _server.getParam<Eigen::Vector4d>(prefix + _unique_name + "/pinhole_model_raw"); - pinhole_model_rectified = _server.getParam<Eigen::Vector4d>(prefix + _unique_name + "/pinhole_model_rectified"); - distortion = _server.getParam<Eigen::VectorXd>(prefix + _unique_name + "/distortion"); + VectorXd distortion = _server.getParam<Eigen::VectorXd>(prefix + _unique_name + "/distortion_coefficients/data"); + VectorXd intrinsic = _server.getParam<Eigen::VectorXd>(prefix + _unique_name + "/camera_matrix/data"); + VectorXd projection = _server.getParam<Eigen::VectorXd>(prefix + _unique_name + "/projection_matrix/data"); + + pinhole_model_raw[0] = intrinsic[2]; + pinhole_model_raw[1] = intrinsic[5]; + pinhole_model_raw[2] = intrinsic[0]; + pinhole_model_raw[3] = intrinsic[4]; + + pinhole_model_rectified[0] = projection[2]; + pinhole_model_rectified[1] = projection[6]; + pinhole_model_rectified[2] = projection[0]; + pinhole_model_rectified[3] = projection[5]; + + assert (distortion.size() == 5 && "Distortion size must be size 5!"); + + WOLF_WARN_COND( distortion(2) != 0 || distortion(3) != 0 , "Wolf does not handle tangential distortion. Please consider re-calibrating without tangential distortion!"); + + if (distortion(4) == 0) + if (distortion(1) == 0) + if (distortion(0) == 0) + distortion.resize(0); + else + { + distortion.resize(1); + distortion = distortion.head<1>(); + } + else + { + distortion.resize(2); + distortion = distortion.head<2>(); + } + else + { + distortion.resize(3); + distortion.head<2>() = distortion.head<2>(); + distortion.tail<1>() = distortion.tail<1>(); + } } std::string print() const { - return "\n" + ParamsSensorBase::print() + "\n" + return "\n" + ParamsSensorBase::print() + "\n" + "width: " + std::to_string(width) + "\n" + "height: " + std::to_string(height) + "\n" + "pinhole: " + converter<std::string>::convert(pinhole_model_raw) + "\n" - + "pinhole: " + converter<std::string>::convert(pinhole_model_rectified) + "\n" + + "pinhole rect.: " + converter<std::string>::convert(pinhole_model_rectified) + "\n" + "distortion: " + converter<std::string>::convert(distortion) + "\n"; } ~ParamsSensorCamera() override = default;