Skip to content

One bug that cause init_rot_from_imudata() fail #65

@jingyang-huang

Description

@jingyang-huang

在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;
  }

不过可能大多数人都不会遇到就当作我的碎碎念吧.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions