🐛 Fix walking condition

This commit is contained in:
Rune Harlyk
2026-01-29 13:52:15 +01:00
parent f033e8b0ae
commit a5e62d87fd
2 changed files with 8 additions and 6 deletions
+1 -1
View File
@@ -72,7 +72,7 @@ struct alignas(16) body_state_t {
!IS_ALMOST_EQUAL(zm, other.zm)) {
return false;
}
return arrayEqual(feet, other.feet, 0.1f);
return arrayEqual(feet, other.feet, 0.001f);
}
};
+7 -5
View File
@@ -115,14 +115,16 @@ class WalkState : public MotionState {
target_gait_state.step_depth = KinConfig::default_step_depth;
}
static inline bool isZero(float num) { return std::fabs(num) < 0.01; }
static inline bool isZero(float num) { return std::fabs(num) < 0.001; }
void updatePhase(float dt) {
if (isZero(gait_state.step_x) && isZero(gait_state.step_z) && isZero(gait_state.step_angle)) {
const bool moving = !isZero(gait_state.step_x) || !isZero(gait_state.step_z) || !isZero(gait_state.step_angle);
if (!moving) {
phase_time = 0;
return;
}
phase_time = std::fmod(phase_time + dt * gait_state.step_velocity * speed_factor, 1.0f);
const float velocity = std::max(gait_state.step_velocity, 0.5f);
phase_time = std::fmod(phase_time + dt * velocity * speed_factor, 1.0f);
}
LegStates getLegStates() {
@@ -242,7 +244,7 @@ class WalkState : public MotionState {
float angle = std::atan2(gait_state.step_z, step_length) * 2.0f;
curve(length, angle, arg, phase, delta_pos);
length = gait_state.step_angle * 2.0f;
length = gait_state.step_angle * KinConfig::max_step_length;
angle = yawArc(default_feet_pos[index], body_state.feet[index]);
curve(length, angle, arg, phase, delta_rot);
@@ -275,7 +277,7 @@ class WalkState : public MotionState {
point[1] += b * BEZIER_HEIGHTS[i] * *height;
point[2] += b * BEZIER_STEPS[i] * length * Z_POLAR;
phase_power *= phase;
phase_power *= t;
inv_phase_power /= one_minus_phase;
}
}