From 835e4803b4258549679608e66b6e2fb8a50fb042 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joan=20Vallv=C3=A9=20Navarro?= <jvallve@iri.upc.edu>
Date: Tue, 1 Oct 2019 18:14:52 +0200
Subject: [PATCH] returning initial guess if valid != 1

---
 src/icp.cpp | 29 +++++++++++++++++++----------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/src/icp.cpp b/src/icp.cpp
index 4cd599a..32a4184 100644
--- a/src/icp.cpp
+++ b/src/icp.cpp
@@ -93,19 +93,28 @@ icpOutput ICP::align(const LaserScan &_last_ls, const LaserScan &_origin_ls, con
     sm_icp(&csm_input, &csm_output);
 
     icpOutput result{};
-    result.res_transf(0) = csm_output.x[0];
-    result.res_transf(1) = csm_output.x[1];
-    result.res_transf(2) = csm_output.x[2];
-
     result.nvalid = csm_output.nvalid;
+    result.valid  = csm_output.valid;
     result.error  = csm_output.error;
 
-
-    for(int i = 0; i < 3; ++i)
-        for(int j = 0; j < 3; ++j)
-            result.res_covar(i,j) =
-                    //gsl_matrix_get(csm_output.cov_x_m, i, j);                 // NOT COMPILING
-                    csm_output.cov_x_m->data[i * csm_output.cov_x_m->tda + j];  // This does the same
+    if (result.valid == 1)
+    {
+        result.res_transf(0) = csm_output.x[0];
+        result.res_transf(1) = csm_output.x[1];
+        result.res_transf(2) = csm_output.x[2];
+
+        for(int i = 0; i < 3; ++i)
+            for(int j = 0; j < 3; ++j)
+                result.res_covar(i,j) =
+                        //gsl_matrix_get(csm_output.cov_x_m, i, j);                 // NOT COMPILING
+                        csm_output.cov_x_m->data[i * csm_output.cov_x_m->tda + j];  // This does the same
+    }
+    else
+    {
+        std::cout << "ICP valid != 1, providing first guess transformation and identity covariance\n";
+        result.res_transf = _last_transf;
+        result.res_covar = Eigen::Matrix3s::Identity();
+    }
 
     // std::cout << "Number of valid correspondences: " << csm_output.nvalid << '\n';
     // std::cout << "Number of iterations: " << csm_output.iterations << '\n';
-- 
GitLab