NASA Astrobee Robot Software  0.19.1
Flight software for the Astrobee robots operating inside the International Space Station.
test_utilities.h
Go to the documentation of this file.
1 /* Copyright (c) 2017, United States Government, as represented by the
2  * Administrator of the National Aeronautics and Space Administration.
3  *
4  * All rights reserved.
5  *
6  * The Astrobee platform is licensed under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with the
8  * License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15  * License for the specific language governing permissions and limitations
16  * under the License.
17  */
18 #ifndef VISION_COMMON_TEST_UTILITIES_H_
19 #define VISION_COMMON_TEST_UTILITIES_H_
20 
28 
29 #include <opencv2/core.hpp>
30 
31 #include <vector>
32 
33 namespace vision_common {
34 void SetFocalLengths(const Eigen::Vector2d& focal_lengths, Eigen::Matrix3d& intrinsics);
35 
36 void SetPrincipalPoints(const Eigen::Vector2d& principal_points, Eigen::Matrix3d& intrinsics);
37 
38 LKOpticalFlowFeatureDetectorAndMatcherParams DefaultLKOpticalFlowFeatureDetectorAndMatcherParams();
39 
40 cv::Mat MarkerImage(const int row_spacing, const int col_spacing, int& num_markers_added,
41  const cv::Point2i& offset = cv::Point2i(0, 0));
42 
43 int AddMarkers(const int row_spacing, const int col_spacing, cv::Mat& image,
44  const cv::Point2i& offset = cv::Point2i(0, 0));
45 
47 
48 RansacPnPParams DefaultRansacPnPParams();
49 
50 ReprojectionPoseEstimateParams DefaultReprojectionPoseEstimateParams();
51 
52 Eigen::VectorXd RandomFovDistortion();
53 
54 Eigen::VectorXd RandomRadDistortion();
55 
56 Eigen::VectorXd RandomRadTanDistortion();
57 
58 // Spaced out poses for targets which when projected into image space cover
59 // the image well with target points. Poses are sampled for each row/col combination
60 // and evenly spaced in cylindrical coordinates
61 std::vector<Eigen::Isometry3d> EvenlySpacedTargetPoses(const int num_rows = 3, const int num_cols = 5,
62  const int num_y_levels = 2);
63 
64 std::vector<Eigen::Vector3d> TargetPoints(const int points_per_row, const int points_per_col,
65  const double row_spacing = 0.1, const double col_spacing = 0.1);
66 
67 template <typename DISTORTER>
69  public:
71  const std::vector<Eigen::Vector3d>& target_t_target_point,
72  const Eigen::VectorXd& distortion = Eigen::VectorXd());
73 
74  const localization_common::ImageCorrespondences& correspondences() const { return correspondences_; }
75 
76  const Eigen::Isometry3d& camera_T_target() const { return camera_T_target_; }
77 
78  const Eigen::Matrix3d& intrinsics() const { return intrinsics_; }
79 
80  private:
82  Eigen::Isometry3d camera_T_target_;
83  Eigen::Matrix3d intrinsics_;
84 };
85 
86 template <typename DISTORTER>
88  const Eigen::Isometry3d& camera_T_target, const Eigen::Matrix3d& intrinsics,
89  const std::vector<Eigen::Vector3d>& target_t_target_points, const Eigen::VectorXd& distortion)
90  : camera_T_target_(camera_T_target), intrinsics_(intrinsics) {
91  for (const auto& target_t_target_point : target_t_target_points) {
92  const Eigen::Vector3d camera_t_target_point = camera_T_target_ * target_t_target_point;
93  if (camera_t_target_point.z() <= 0) continue;
94  const Eigen::Vector2d image_point =
95  ProjectWithDistortion<DISTORTER>(camera_t_target_point, intrinsics_, distortion);
96  correspondences_.AddCorrespondence(image_point, target_t_target_point);
97  }
98 }
99 } // namespace vision_common
100 #endif // VISION_COMMON_TEST_UTILITIES_H_
vision_common::MarkerImage
cv::Mat MarkerImage(const int row_spacing, const int col_spacing, int &num_markers_added, const cv::Point2i &offset=cv::Point2i(0, 0))
Definition: test_utilities.cc:58
vision_common::DefaultOptimizationParams
optimization_common::OptimizationParams DefaultOptimizationParams()
Definition: test_utilities.cc:77
vision_common::SetPrincipalPoints
void SetPrincipalPoints(const Eigen::Vector2d &principal_points, Eigen::Matrix3d &intrinsics)
Definition: test_utilities.cc:35
vision_common::EvenlySpacedTargetPoses
std::vector< Eigen::Isometry3d > EvenlySpacedTargetPoses(const int num_rows=3, const int num_cols=5, const int num_y_levels=2)
Definition: test_utilities.cc:144
vision_common::RegistrationCorrespondences::correspondences
const localization_common::ImageCorrespondences & correspondences() const
Definition: test_utilities.h:74
vision_common
Definition: brisk_feature_detector_and_matcher.h:25
vision_common::DefaultReprojectionPoseEstimateParams
ReprojectionPoseEstimateParams DefaultReprojectionPoseEstimateParams()
Definition: test_utilities.cc:100
optimization_common::OptimizationParams
Definition: optimization_params.h:24
vision_common::RandomFovDistortion
Eigen::VectorXd RandomFovDistortion()
Definition: test_utilities.cc:109
vision_common::TargetPoints
std::vector< Eigen::Vector3d > TargetPoints(const int points_per_row, const int points_per_col, const double row_spacing=0.1, const double col_spacing=0.1)
Definition: test_utilities.cc:131
vision_common::DefaultRansacPnPParams
RansacPnPParams DefaultRansacPnPParams()
Definition: test_utilities.cc:89
vision_common::RegistrationCorrespondences::camera_T_target
const Eigen::Isometry3d & camera_T_target() const
Definition: test_utilities.h:76
vision_common::DefaultLKOpticalFlowFeatureDetectorAndMatcherParams
LKOpticalFlowFeatureDetectorAndMatcherParams DefaultLKOpticalFlowFeatureDetectorAndMatcherParams()
Definition: test_utilities.cc:40
localization_common::ImageCorrespondences
Definition: image_correspondences.h:26
pose_estimation.h
vision_common::AddMarkers
int AddMarkers(const int row_spacing, const int col_spacing, cv::Mat &image, const cv::Point2i &offset=cv::Point2i(0, 0))
Definition: test_utilities.cc:64
localization_common::Isometry3d
Eigen::Isometry3d Isometry3d(const Eigen::Vector3d &translation, const RotationType &rotation)
Definition: utilities.h:226
lk_optical_flow_feature_detector_and_matcher_params.h
vision_common::SetFocalLengths
void SetFocalLengths(const Eigen::Vector2d &focal_lengths, Eigen::Matrix3d &intrinsics)
Definition: test_utilities.cc:30
point_cloud_common::Vector3d
Eigen::Vector3d Vector3d(const PointType &point)
Definition: utilities.h:328
vision_common::RegistrationCorrespondences::RegistrationCorrespondences
RegistrationCorrespondences(const Eigen::Isometry3d &camera_T_target, const Eigen::Matrix3d &intrinsics, const std::vector< Eigen::Vector3d > &target_t_target_point, const Eigen::VectorXd &distortion=Eigen::VectorXd())
Definition: test_utilities.h:87
localization_common::ImageCorrespondences::AddCorrespondence
void AddCorrespondence(const Eigen::Vector2d &image_point, const Eigen::Vector3d &point_3d)
Definition: image_correspondences.h:31
vision_common::RandomRadTanDistortion
Eigen::VectorXd RandomRadTanDistortion()
Definition: test_utilities.cc:122
reprojection_pose_estimate_params.h
vision_common::RegistrationCorrespondences::intrinsics
const Eigen::Matrix3d & intrinsics() const
Definition: test_utilities.h:78
eigen_vectors.h
vision_common::RandomRadDistortion
Eigen::VectorXd RandomRadDistortion()
Definition: test_utilities.cc:115
optimization_params.h
image_correspondences.h
ransac_pnp_params.h
vision_common::RegistrationCorrespondences
Definition: test_utilities.h:68