From d11370781ae13bc31fed495a81edb7e5522fb7fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joan=20Sol=C3=A0?= <jsola@iri.upc.edu>
Date: Sun, 7 Aug 2022 22:01:56 +0200
Subject: [PATCH] Add IMU noise and drift cov to PrcFTI

---
 .../processor_force_torque_inertial_preint_dynamics.h |  2 ++
 ...rocessor_force_torque_inertial_preint_dynamics.cpp | 11 +++++++++++
 2 files changed, 13 insertions(+)

diff --git a/include/bodydynamics/processor/processor_force_torque_inertial_preint_dynamics.h b/include/bodydynamics/processor/processor_force_torque_inertial_preint_dynamics.h
index db76c49..11f2484 100644
--- a/include/bodydynamics/processor/processor_force_torque_inertial_preint_dynamics.h
+++ b/include/bodydynamics/processor/processor_force_torque_inertial_preint_dynamics.h
@@ -71,6 +71,8 @@ class ProcessorForceTorqueInertialPreintDynamics : public ProcessorMotion
   protected:
     ParamsProcessorForceTorqueInertialPreintDynamicsPtr params_force_torque_inertial_preint_dynamics_;
     SensorForceTorqueInertialPtr                        sensor_fti_;
+    Matrix6d imu_drift_cov_;
+    Matrix3d gyro_noise_cov_;
 
   public:
     /** \brief convert raw CaptureMotion data to the delta-state format.
diff --git a/src/processor/processor_force_torque_inertial_preint_dynamics.cpp b/src/processor/processor_force_torque_inertial_preint_dynamics.cpp
index a0d8065..8ae3141 100644
--- a/src/processor/processor_force_torque_inertial_preint_dynamics.cpp
+++ b/src/processor/processor_force_torque_inertial_preint_dynamics.cpp
@@ -111,6 +111,17 @@ void ProcessorForceTorqueInertialPreintDynamics::setCalibration(const CaptureBas
 void ProcessorForceTorqueInertialPreintDynamics::configure(SensorBasePtr _sensor)
 {
     sensor_fti_ = std::static_pointer_cast<SensorForceTorqueInertial>(_sensor);
+
+    auto gyro_noise_std = sensor_fti_->getParamsSensorForceTorqueInertial()->gyro_noise_std;
+    auto acc_drift_std  = sensor_fti_->getParamsSensorForceTorqueInertial()->acc_drift_std;
+    auto gyro_drift_std = sensor_fti_->getParamsSensorForceTorqueInertial()->gyro_drift_std;
+
+    gyro_noise_cov_ = Eigen::Array3d(gyro_noise_std, gyro_noise_std, gyro_noise_std).square().matrix().asDiagonal();
+    imu_drift_cov_ =
+        Eigen::Array<double,6,1>(acc_drift_std, acc_drift_std, acc_drift_std, gyro_drift_std, gyro_drift_std, gyro_drift_std)
+            .square()
+            .matrix()
+            .asDiagonal();
 }
 
 void ProcessorForceTorqueInertialPreintDynamics::data2tangent(const Eigen::VectorXd& _data,
-- 
GitLab