Adding reprojection error as an output to calibration
Also, bumping the threshold default to 2 pixels, since we're
using higher resolution images, and it generally fails with errors
close to 2 pixels (when it probably shouldn't)
Change-Id: I2bd84e7a6a48ed789ef6636e0892eed574459702
Signed-off-by: Jim Ostrowski <yimmy13@gmail.com>
diff --git a/frc971/vision/intrinsics_calibration_lib.cc b/frc971/vision/intrinsics_calibration_lib.cc
index 6f242f4..c48c12d 100644
--- a/frc971/vision/intrinsics_calibration_lib.cc
+++ b/frc971/vision/intrinsics_calibration_lib.cc
@@ -172,7 +172,8 @@
cv::Mat camera_matrix, cv::Mat dist_coeffs,
aos::realtime_clock::time_point realtime_now, std::string_view cpu_type,
uint16_t cpu_number, std::string_view camera_channel,
- std::string_view camera_id, uint16_t team_number) {
+ std::string_view camera_id, uint16_t team_number,
+ double reprojection_error) {
flatbuffers::FlatBufferBuilder fbb;
flatbuffers::Offset<flatbuffers::String> name_offset =
fbb.CreateString(absl::StrFormat("%s%d", cpu_type, cpu_number));
@@ -200,6 +201,8 @@
camera_calibration_builder.add_team_number(team_number);
camera_calibration_builder.add_camera_number(camera_number.value());
camera_calibration_builder.add_camera_id(camera_id_offset);
+ camera_calibration_builder.add_reprojection_error(
+ static_cast<float>(reprojection_error));
camera_calibration_builder.add_calibration_timestamp(
realtime_now.time_since_epoch().count());
camera_calibration_builder.add_intrinsics(intrinsics_offset);
@@ -228,7 +231,7 @@
img_size, camera_matrix, dist_coeffs, rvecs, tvecs,
std_deviations_intrinsics, std_deviations_extrinsics, per_view_errors,
calibration_flags);
- CHECK_LE(reprojection_error, 1.0)
+ CHECK_LE(reprojection_error, 2.0)
<< ": Reproduction error is bad-- greater than 1 pixel.";
LOG(INFO) << "Reprojection Error is " << reprojection_error;
@@ -239,10 +242,10 @@
CHECK(team_number) << ": Invalid hostname " << hostname_
<< ", failed to parse team number";
aos::FlatbufferDetachedBuffer<calibration::CameraCalibration>
- camera_calibration =
- BuildCalibration(camera_matrix, dist_coeffs, realtime_now,
- cpu_type_.value(), cpu_number_.value(),
- camera_channel_, camera_id_, team_number.value());
+ camera_calibration = BuildCalibration(
+ camera_matrix, dist_coeffs, realtime_now, cpu_type_.value(),
+ cpu_number_.value(), camera_channel_, camera_id_,
+ team_number.value(), reprojection_error);
std::stringstream time_ss;
time_ss << realtime_now;