fixed incorrect undistortion/distortion. residual should now be calculated correctly
This commit is contained in:
		@@ -81,5 +81,38 @@ std::vector<cv::Point2f> distortPoints(
 | 
			
		||||
  return pts_out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cv::Point2f distortPoint(
 | 
			
		||||
    const cv::Point2f& pt_in,
 | 
			
		||||
    const cv::Vec4d& intrinsics,
 | 
			
		||||
    const std::string& distortion_model,
 | 
			
		||||
    const cv::Vec4d& distortion_coeffs) {
 | 
			
		||||
 | 
			
		||||
  std::vector<cv::Point2f> pts_in;
 | 
			
		||||
  pts_in.push_back(pt_in);
 | 
			
		||||
 | 
			
		||||
  const cv::Matx33d K(intrinsics[0], 0.0, intrinsics[2],
 | 
			
		||||
                      0.0, intrinsics[1], intrinsics[3],
 | 
			
		||||
                      0.0, 0.0, 1.0);
 | 
			
		||||
 | 
			
		||||
  std::vector<cv::Point2f> pts_out;
 | 
			
		||||
  if (distortion_model == "radtan") {
 | 
			
		||||
    std::vector<cv::Point3f> homogenous_pts;
 | 
			
		||||
    cv::convertPointsToHomogeneous(pts_in, homogenous_pts);
 | 
			
		||||
    cv::projectPoints(homogenous_pts, cv::Vec3d::zeros(), cv::Vec3d::zeros(), K,
 | 
			
		||||
                      distortion_coeffs, pts_out);
 | 
			
		||||
  } else if (distortion_model == "equidistant") {
 | 
			
		||||
    cv::fisheye::distortPoints(pts_in, pts_out, K, distortion_coeffs);
 | 
			
		||||
  } else {
 | 
			
		||||
    ROS_WARN_ONCE("The model %s is unrecognized, using radtan instead...",
 | 
			
		||||
                  distortion_model.c_str());
 | 
			
		||||
    std::vector<cv::Point3f> homogenous_pts;
 | 
			
		||||
    cv::convertPointsToHomogeneous(pts_in, homogenous_pts);
 | 
			
		||||
    cv::projectPoints(homogenous_pts, cv::Vec3d::zeros(), cv::Vec3d::zeros(), K,
 | 
			
		||||
                      distortion_coeffs, pts_out);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return pts_out[0];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
	} // namespace image_handler
 | 
			
		||||
} // namespace msckf_vio
 | 
			
		||||
@@ -929,15 +929,6 @@ void MsckfVio::PhotometricMeasurementJacobian(
 | 
			
		||||
  std::vector<cv::Point2f> out_v;
 | 
			
		||||
  out_v.push_back(out_p);
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
  //prints the feature projection in pixel space
 | 
			
		||||
  std::vector<cv::Point2f> my_p = image_handler::distortPoints( out_v,
 | 
			
		||||
    cam0.intrinsics,
 | 
			
		||||
    cam0.distortion_model,
 | 
			
		||||
    cam0.distortion_coeffs);
 | 
			
		||||
  printf("projection: %f, %f\n", my_p[0].x,  my_p[0].y);
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
  // Compute the Jacobians.
 | 
			
		||||
  Matrix<double, 4, 3> dz_dpc0 = Matrix<double, 4, 3>::Zero();
 | 
			
		||||
  dz_dpc0(0, 0) = 1 / p_c0(2);
 | 
			
		||||
@@ -1025,7 +1016,7 @@ void MsckfVio::PhotometricFeatureJacobian(
 | 
			
		||||
  VectorXd r_j = VectorXd::Zero(jacobian_row_size);
 | 
			
		||||
  int stack_cntr = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  printf("_____FEATURE:_____\n");
 | 
			
		||||
  for (const auto& cam_id : valid_cam_state_ids) {
 | 
			
		||||
 | 
			
		||||
    Matrix<double, 4, 6> H_xi = Matrix<double, 4, 6>::Zero();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user