summaryrefslogtreecommitdiff
path: root/src/state.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/state.cpp')
-rw-r--r--src/state.cpp48
1 files changed, 40 insertions, 8 deletions
diff --git a/src/state.cpp b/src/state.cpp
index d43be62..5a334c5 100644
--- a/src/state.cpp
+++ b/src/state.cpp
@@ -1049,9 +1049,9 @@ State::quaternion_covariance ( const Matrix<double,4,4> &covq )
*/
void
#if STATESIZE==13
-State::featuresAsMeasurements ( vector<measurement_t> &yk )
+State::featuresAsMeasurements ( vector<measurement_t> &yk, const Camera &cam )
#else
-State::featuresAsMeasurements ( vector<measurement_t> &yk,
+State::featuresAsMeasurements ( vector<measurement_t> &yk, const Camera &cam,
const Quaterniond &q)
#endif
{
@@ -1071,8 +1071,9 @@ State::featuresAsMeasurements ( vector<measurement_t> &yk,
z.id = (*i)->id();
z.source = (*i)->p2x(pbs);
z.reflection = (*i)->p2x(pbr);
- z.z_type = REFLECTION;
- z.patch = (*i)->patch();
+ z.z_type = MONO;
+ z.patch = (*i)->warpedPatch(cam, q);
+ z.refpatch = (*i)->reflectedPatch(cam, q);
// Get ellipse
Matrix<double,6,6> s;
@@ -1101,13 +1102,35 @@ State::doMeasurements ( vector<measurement_t> &z, Vision &viz,
viz.acquireFeatures(cam, newFeatures);
}
// Measure existing features
- vector<measurement_t> currentFeatures, featureZ;
+ vector<measurement_t> currentFeatures;
#if STATESIZE==13
- featuresAsMeasurements(currentFeatures);
+ featuresAsMeasurements(currentFeatures,cam);
#else
- featuresAsMeasurements(currentFeatures,q);
+ featuresAsMeasurements(currentFeatures,cam,q);
+#endif
+ viz.measurements(cam, currentFeatures, z);
+
+#ifdef DORANSAC
+#if STATESIZE==13
+ ransacUpdate(z);
+#else
+ ransacUpdate(z,q);
+#endif
+#else /* ----- not DORANSAC ----- */
+ MatrixXd h;
+#if STATESIZE==13
+ h = H(z);
+#else
+ h = H(q,z);
+#endif
+ MatrixXd S;
+ S = h*P*h.transpose() + R(z);
+#if STATESIZE==13
+ kalmanUpdate(h,S,z);
+#else
+ kalmanUpdate(h,S,z,q);
+#endif
#endif
- viz.measurements(cam, currentFeatures, featureZ);
// Initialize new features
if (features.size()<MINFEATURES) {
@@ -1117,6 +1140,15 @@ State::doMeasurements ( vector<measurement_t> &z, Vision &viz,
addFeatures(newFeatures, q, hgtmeas);
#endif
}
+ vector<measurement_t> updatedFeatures;
+#if STATESIZE==13
+ featuresAsMeasurements(updatedFeatures, cam);
+#else
+ featuresAsMeasurements(updatedFeatures, cam, q);
+#endif
+ viz.drawMeasurements(z, cam, cv::Scalar(0,0,100), cv::Scalar(0,0,0), false);
+ viz.drawMeasurements(updatedFeatures, cam, cv::Scalar(0,255,0), cv::Scalar(0,0,0), true);
+ viz.show();
return ;
} /* ----- end of method State::doMeasurements ----- */