diff --git a/src/icp.cpp b/src/icp.cpp
index cf8379812f044aeeeb4a1e8e9001949d1ee9001f..55a92f4b940cbcd23ad0a69a5d3aa738ac06c0d5 100644
--- a/src/icp.cpp
+++ b/src/icp.cpp
@@ -84,6 +84,8 @@ icpOutput ICP::matchPC(LaserScan &_last_ls, LaserScan &_origin_ls, LaserScanPara
     csm_input.outliers_adaptive_order = icp_params.outliers_adaptive_order;
     csm_input.outliers_adaptive_mult = icp_params.outliers_adaptive_mult;
 
+    csm_input.do_compute_covariance = 1;
+
     sm_icp(&csm_input, &csm_output);
 
     icpOutput result{};
@@ -95,7 +97,9 @@ icpOutput ICP::matchPC(LaserScan &_last_ls, LaserScan &_origin_ls, LaserScanPara
     result.error  = csm_output.error;
 
 
-    result.res_covar = Eigen::Matrix3s::Identity()*0.1;
+    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);
 
     // std::cout << "Number of valid correspondences: " << csm_output.nvalid << '\n';
     // std::cout << "Number of iterations: " << csm_output.iterations << '\n';