IMU預積分的作用是計算出IMU數據的觀測值(就是IMU預積分值)以及殘差的協方差矩陣和雅各比矩陣。
void System::PubImuData(double dStampSec, const Eigen::Vector3d &vGyr,
const Eigen::Vector3d &vAcc)
{
shared_ptr<IMU_MSG> imu_msg(new IMU_MSG());
imu_msg->header = dStampSec;
imu_msg->linear_acceleration = vAcc;
imu_msg->angular_velocity = vGyr;
if (dStampSec <= last_imu_t)
{
cerr << "imu message in disorder!" << endl;
return;
}
last_imu_t = dStampSec;
// cout << "1 PubImuData t: " << fixed << imu_msg->header
// << " acc: " << imu_msg->linear_acceleration.transpose()
// << " gyr: " << imu_msg->angular_velocity.transpose() << endl;
m_buf.lock();
imu_buf.push(imu_msg);
// cout << "1 PubImuData t: " << fixed << imu_msg->header
// << " imu_buf size:" << imu_buf.size() << endl;
m_buf.unlock();
con.notify_one();
}
IMU的積分和預積分區別:
積分是在世界座標系下進行的,預積分是相對於上一個時刻
estimator.processIMU(dt, Vector3d(dx, dy, dz), Vector3d(rx, ry, rz));進行預積分