@@ -19,6 +19,7 @@ Glider::Glider(const std::string& path)
1919 origin_x_ = params.origin_x ;
2020 origin_y_ = params.origin_y ;
2121 frame_ = params.frame ;
22+ correct_imu_ = params.correct_imu ;
2223
2324 // IMU transformations
2425 ned_to_enu_rot_ << 0.0 , 1.0 , 0.0 ,
@@ -33,6 +34,7 @@ Glider::Glider(const std::string& path)
3334 set_initial_heading_ = true ;
3435
3536 std::cout << " [GLIDER] Using IMU frame: " << frame_ << std::endl;
37+ std::cout << " [GLIDER] Correcting IMU heading with mag: " << std::boolalpha << correct_imu_ << std::endl;
3638 std::cout << " [GLIDER] Glider initialized" << std::endl;
3739}
3840
@@ -91,17 +93,31 @@ void Glider::addIMU(int64_t timestamp, Eigen::Vector3d& accel, Eigen::Vector3d&
9193 Eigen::Vector4d vec_enu;
9294 vec_enu << quat_enu.w (), quat_enu.x (), quat_enu.y (), quat_enu.z ();
9395
94- Eigen::Vector4d quat_corr = correctImuOrientation (vec_enu);
95-
9696 Eigen::Vector3d accel_enu = ned_to_enu_rot_ * accel;
9797 Eigen::Vector3d gyro_enu = ned_to_enu_rot_ * gyro;
9898
99- factor_manager_.addImuFactor (timestamp, accel_enu, gyro_enu, quat_corr);
99+ if (correct_imu_)
100+ {
101+ Eigen::Vector4d quat_corr = correctImuOrientation (vec_enu);
102+ factor_manager_.addImuFactor (timestamp, accel_enu, gyro_enu, quat_corr);
103+ }
104+ else
105+ {
106+ factor_manager_.addImuFactor (timestamp, accel_enu, gyro_enu, vec_enu);
107+ }
108+
100109 }
101110 else if (frame_ == " enu" )
102111 {
103- Eigen::Vector4d quat_corr = correctImuOrientation (quat);
104- factor_manager_.addImuFactor (timestamp, accel, gyro, quat_corr);
112+ if (correct_imu_)
113+ {
114+ Eigen::Vector4d quat_corr = correctImuOrientation (quat);
115+ factor_manager_.addImuFactor (timestamp, accel, gyro, quat_corr);
116+ }
117+ else
118+ {
119+ factor_manager_.addImuFactor (timestamp, accel, gyro, quat);
120+ }
105121 }
106122 else
107123 {
0 commit comments