在imu.hpp的push_data函数里,建议把remove_spikes里的(5 * kG) 改成 abs(5*kG),因为当kG定义为负时,imu的acc的范数会一直大于一个负数,这样acc永远都是last_am也就是(0,0,0),进而在if (std_acc.isZero(std::numeric_limits<float>::epsilon()))中一直失败
virtual bool push_data(Data::ConstPtr data_ptr) {
auto acc = data_ptr->data_.head(3);
auto gyr = data_ptr->data_.tail(3);
auto imu_ptr = std::make_shared<ImuData>(data_ptr->timestamp_, acc, gyr);
// remove spikes
static Eigen::Vector3d last_am = Eigen::Vector3d::Zero();
if (imu_ptr->acc.norm() > abs(5 * kG)) {
imu_ptr->acc = last_am;
} else {
last_am = imu_ptr->acc;
}
imu_buf_.push_back(imu_ptr);
if (imu_buf_.size() > kImuBufSize) imu_buf_.pop_front();
return true;
}
不过可能大多数人都不会遇到就当作我的碎碎念吧.
在imu.hpp的push_data函数里,建议把remove_spikes里的(5 * kG) 改成 abs(5*kG),因为当kG定义为负时,imu的acc的范数会一直大于一个负数,这样acc永远都是last_am也就是(0,0,0),进而在
if (std_acc.isZero(std::numeric_limits<float>::epsilon()))中一直失败不过可能大多数人都不会遇到就当作我的碎碎念吧.