@@ -334,44 +334,41 @@ def update(
334334 delta_t = t - self .t_start
335335
336336 if self .state == State .INIT :
337- if delta_t > self .params .t_init :
338- if self .next_ss_state == State .SS_RIGHT :
339- self .t_start = t
340- self .state = State .SS_RIGHT
341- self .next_ss_state = State .SS_LEFT
342- elif self .next_ss_state == State .SS_LEFT :
343- self .t_start = t
344- self .state = State .SS_LEFT
345- self .next_ss_state = State .SS_RIGHT
337+ self ._try_transition_to_single_support (t , self .params .t_init )
338+
346339 elif self .state == State .DS :
347- if delta_t > self .params .t_ds :
348- if self .next_ss_state == State .SS_RIGHT :
349- self .t_start = t
350- self .state = State .SS_RIGHT
351- self .next_ss_state = State .SS_LEFT
352- elif self .next_ss_state == State .SS_LEFT :
353- self .t_start = t
354- self .state = State .SS_LEFT
355- self .next_ss_state = State .SS_RIGHT
340+ self ._try_transition_to_single_support (t , self .params .t_ds )
341+
356342 elif self .state == State .SS_RIGHT :
357- if delta_t > 0.5 * self .params .t_ss and lf_contact_force > self .params .force_threshold :
358- self .t_start = t
359- if self .step_idx == len (self .steps ) - 2 :
360- self .state = State .END
361- else :
362- self .state = State .DS
363- self .step_idx += 1
343+ self ._try_transition_to_ds_or_end (t , lf_contact_force )
344+
364345 elif self .state == State .SS_LEFT :
365- if delta_t > 0.5 * self .params .t_ss and rf_contact_force > self .params .force_threshold :
366- self .t_start = t
367- if self .step_idx == len (self .steps ) - 2 :
368- self .state = State .END
369- else :
370- self .state = State .DS
371- self .step_idx += 1
346+ self ._try_transition_to_ds_or_end (t , rf_contact_force )
347+
372348 elif self .state == State .END :
373349 if delta_t > self .params .t_end :
374350 self .steps = None
375351
376352 def get_current_state (self ) -> State :
377353 return self .state
354+
355+ def _switch_single_support_leg (self , t : float ):
356+ self .t_start = t
357+ self .state = self .next_ss_state
358+ self .next_ss_state = State .SS_LEFT if self .state == State .SS_RIGHT else State .SS_RIGHT
359+
360+ def _try_transition_to_single_support (self , t : float , duration : float ):
361+ if t - self .t_start > duration :
362+ self ._switch_single_support_leg (t )
363+
364+ def _is_last_step (self ) -> bool :
365+ return self .step_idx == len (self .steps ) - 2
366+
367+ def _try_transition_to_ds_or_end (self , t : float , contact_force : float ):
368+ if (
369+ t - self .t_start > 0.5 * self .params .t_ss
370+ and contact_force > self .params .force_threshold
371+ ):
372+ self .t_start = t
373+ self .state = State .END if self ._is_last_step () else State .DS
374+ self .step_idx += 1
0 commit comments