bool StepDetector::pushAndDetect(IMUData &accelData) { TIMESTAMP_T t = accelData.time(); IMUDATA_T magnitude = sqrt(accelData.x() * accelData.x() + accelData.y() * accelData.y() + accelData.z() * accelData.z()); if (!Adir_ && magnitude > Aref_) { Aref_ = magnitude; prev_time_ = t; } else if (!Adir_ && Aref_ - magnitude >= parameter_ptr->step_delta_mag_thresh()) { Adir_ = !Adir_; Aref_ = magnitude; } else if(Adir_ && magnitude < Aref_) { Aref_ = magnitude; } else if(Adir_ && magnitude - Aref_ >= parameter_ptr->step_delta_mag_thresh()) { if (t - prev_time_ >= parameter_ptr->step_delta_t_thresh()) { Adir_ = !Adir_; Aref_ = magnitude; prev_time_ = t; return true; } } return false; }
/** Updates robot position information using IMU data **/ int RobotPosition::update(IMUData newData) { double time = newData.time(); _Roll.push(DataPoint<double>(newData.Roll, time)); _Pitch.push(DataPoint<double>(newData.Pitch, time)); _Yaw.push(DataPoint<double>(newData.Yaw, time)); return 0; }