Skip to content

Commit 1e54534

Browse files
committed
Fix state machine
1 parent 112282d commit 1e54534

2 files changed

Lines changed: 23 additions & 3 deletions

File tree

biped_walking_controller/preview_control.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,13 +315,18 @@ def __init__(self, params: WalkingFSMParams, initial_state=State.INIT):
315315
self.state = initial_state
316316
self.next_ss_state = State.SS_RIGHT
317317
self.t_start = 0.0
318+
self.steps = None
319+
self.step_idx = None
318320

319321
def update(
320322
self,
321323
t: float,
322324
rf_contact_force: float,
323325
lf_contact_force: float,
324326
):
327+
if self.steps is None:
328+
return
329+
325330
delta_t = t - self.t_start
326331

327332
if self.state == State.INIT:
@@ -347,17 +352,30 @@ def update(
347352
elif self.state == State.SS_RIGHT:
348353
if delta_t > 0.5 * self.params.t_ss and lf_contact_force > self.params.force_threshold:
349354
self.t_start = t
350-
self.state = State.DS
355+
if self.step_idx == len(self.steps) - 2:
356+
self.state = State.END
357+
else:
358+
self.state = State.DS
359+
self.step_idx += 1
351360
elif self.state == State.SS_LEFT:
352361
if delta_t > 0.5 * self.params.t_ss and rf_contact_force > self.params.force_threshold:
353362
self.t_start = t
354-
self.state = State.DS
363+
if self.step_idx == len(self.steps) - 2:
364+
self.state = State.END
365+
else:
366+
self.state = State.DS
367+
self.step_idx += 1
355368
elif self.state == State.END:
356-
pass
369+
if delta_t > self.params.t_end:
370+
self.steps = None
357371

358372
def get_current_state(self) -> State:
359373
return self.state
360374

375+
def update_steps(self, steps_pose):
376+
self.steps = steps_pose
377+
self.step_idx = 0
378+
361379

362380
class CentroidalPlanner:
363381
def __init__(

examples/example_5_walking_controller.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,8 @@ def main():
197197
interp_fn=cubic_spline_interpolation,
198198
)
199199

200+
state_machine.update_steps(steps_pose)
201+
200202
zmp_padded = np.vstack(
201203
[zmp_ref, np.repeat(zmp_ref[-1][None, :], ctrler_params.n_preview_steps, axis=0)]
202204
)

0 commit comments

Comments
 (0)