Skip to content
Permalink
Browse files
Merge pull request #9147 from jordan-woyak/imu-accel-weight-setting
WiimoteEmu: Expose IMU pointing accelerometer weight setting.
  • Loading branch information
AdmiralCurtiss committed Jul 7, 2022
2 parents ccdb909 + 1fc86ca commit eccf527
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
@@ -320,10 +320,10 @@ void EmulateIMUCursor(IMUCursorState* state, ControllerEmu::IMUCursor* imu_ir_gr
state->rotation = gyro_rotation * state->rotation;

// If we have some non-zero accel data use it to adjust gyro drift.
constexpr auto ACCEL_WEIGHT = 0.02f;
const auto accel_weight = imu_ir_group->GetAccelWeight();
auto const accel = imu_accelerometer_group->GetState().value_or(Common::Vec3{});
if (accel.LengthSquared())
state->rotation = ComplementaryFilter(state->rotation, accel, ACCEL_WEIGHT);
state->rotation = ComplementaryFilter(state->rotation, accel, accel_weight);

// Clamp yaw within configured bounds.
const auto yaw = GetYaw(state->rotation);
@@ -38,11 +38,26 @@ IMUCursor::IMUCursor(std::string name_, std::string ui_name_)
// i18n: Refers to emulated wii remote movements.
_trans("Clamping of rotation about the yaw axis.")},
25, 0, 360);

AddSetting(&m_accel_weight_setting,
{// i18n: Percentage value of accelerometer data (complementary filter coefficient).
_trans("Accelerometer Influence"),
// i18n: The symbol/abbreviation for percent.
_trans("%"),
// i18n: Refers to a setting controling the influence of accelerometer data.
_trans("Influence of accelerometer data on pitch and roll. Higher values will reduce "
"drift at the cost of noise. Consider values between 1% and 3%.")},
2, 0, 100);
}

ControlState IMUCursor::GetTotalYaw() const
{
return m_yaw_setting.GetValue() * MathUtil::TAU / 360;
}

ControlState IMUCursor::GetAccelWeight() const
{
return m_accel_weight_setting.GetValue() / 100;
}

} // namespace ControllerEmu
@@ -19,7 +19,10 @@ class IMUCursor : public ControlGroup
// Yaw movement in radians.
ControlState GetTotalYaw() const;

ControlState GetAccelWeight() const;

private:
SettingValue<double> m_yaw_setting;
SettingValue<double> m_accel_weight_setting;
};
} // namespace ControllerEmu

0 comments on commit eccf527

Please sign in to comment.