22
22
* SOFTWARE.
23
23
*/
24
24
25
+ #include < random>
26
+
25
27
#include " cpnp/constrained_pnp.h"
26
28
#include < gtest/gtest.h>
27
29
@@ -140,6 +142,8 @@ TEST(PoseTest, Projection) {
140
142
}
141
143
142
144
TEST (PoseTest, Naive) {
145
+ for (int j = 0 ; j < 20 ; j++) {
146
+
143
147
cpnp::ProblemParams params;
144
148
145
149
params.f_x = 100 ;
@@ -151,9 +155,15 @@ TEST(PoseTest, Naive) {
151
155
frc::Transform3d robot2camera {frc::Pose3d{}, frc::Pose3d{frc::Translation3d{-1 .3_m, 0 .25_m, 0_m}, frc::Rotation3d{0_rad, 0_rad, -1 .5_rad}}};
152
156
auto imgpoints = projectPoints (params.f_x , params.f_y , params.c_x , params.c_y , robot2camera.ToMatrix (), tags);
153
157
158
+ // Add +-1 px of noise to the image points
159
+ std::random_device rd;
160
+ std::mt19937 rng (rd ());
161
+ std::uniform_real_distribution<double > dist (-1.0 , 1.0 );
162
+
154
163
for (int i = 0 ; i < tags.cols (); ++i) {
155
- params.imagePoints .push_back (imgpoints (0 , i));
156
- params.imagePoints .push_back (imgpoints (1 , i));
164
+ // Add some noise to imgpoints, and add it to our list
165
+ params.imagePoints .push_back (imgpoints (0 , i) + dist (rng));
166
+ params.imagePoints .push_back (imgpoints (1 , i) + dist (rng));
157
167
158
168
params.worldPoints .push_back (tags (0 , i));
159
169
params.worldPoints .push_back (tags (1 , i));
@@ -166,12 +176,12 @@ TEST(PoseTest, Naive) {
166
176
167
177
fmt::println (" Polynomial solve time: {}ms" , std::chrono::duration_cast<std::chrono::nanoseconds>(t1-t0).count () / 1e6 );
168
178
169
- auto t2 = std::chrono::high_resolution_clock::now ();
170
- auto naive_ret = cpnp::solve_naive (params);
171
- auto t3 = std::chrono::high_resolution_clock::now ();
172
-
173
- fmt::println (" Naive solve time: {}ms" , std::chrono::duration_cast<std::chrono::nanoseconds>(t3-t2).count () / 1e6 );
179
+ // auto t2 = std::chrono::high_resolution_clock::now();
180
+ // auto naive_ret = cpnp::solve_naive(params);
181
+ // auto t3 = std::chrono::high_resolution_clock::now();
174
182
183
+ // fmt::println("Naive solve time: {}ms", std::chrono::duration_cast<std::chrono::nanoseconds>(t3-t2).count() / 1e6);
175
184
fmt::println (" Polynomial method says robot is at:\n {}" , polynomial_ret.ToMatrix ());
176
- fmt::println (" Naive method says robot is at:\n {}" , naive_ret.ToMatrix ());
185
+ // fmt::println("Naive method says robot is at:\n{}", naive_ret.ToMatrix());
186
+ }
177
187
}
0 commit comments