Skip to content

Commit 0732797

Browse files
committed
Small refactoring
1 parent 2a5e337 commit 0732797

3 files changed

Lines changed: 35 additions & 31 deletions

File tree

biped_walking_controller/plot.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
compute_single_support_polygon,
44
)
55

6+
from biped_walking_controller.preview_control import WalkingState
7+
68

79
def plot_steps(axes, steps_pose, step_shape):
810
# Plot double support polygon
@@ -187,11 +189,11 @@ def traj2d(arr): # drop last 2 samples as in your code
187189

188190

189191
def plot_contact_forces(
190-
t,
191-
force_rf,
192-
force_lf,
193-
states,
194-
title="Contact force Fx",
192+
t: float,
193+
force_rf: float,
194+
force_lf: float,
195+
states: ,
196+
title: str ="Contact force Fx",
195197
):
196198
t = np.asarray(t).ravel()
197199
force_rf = np.asarray(force_rf).ravel()

biped_walking_controller/preview_control.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ def update_control(ctrl_mat: PreviewControllerMatrices, current_zmp, zmp_ref, x,
257257
return u, x_next, y_next
258258

259259

260-
class State(Enum):
260+
class WalkingState(Enum):
261261
INIT = 0
262262
DS = 1
263263
SS_LEFT = 2
@@ -275,10 +275,10 @@ class WalkingStateMachineParams:
275275

276276

277277
class WalkingStateMachine:
278-
def __init__(self, params: WalkingStateMachineParams, initial_state=State.INIT):
278+
def __init__(self, params: WalkingStateMachineParams, initial_state=WalkingState.INIT):
279279
self.params = params
280280
self.state = initial_state
281-
self.next_ss_state = State.SS_RIGHT
281+
self.next_ss_state = WalkingState.SS_RIGHT
282282
self.t_start = 0.0
283283
self.steps = None
284284
self.step_idx = None
@@ -298,29 +298,31 @@ def update(
298298

299299
delta_t = t - self.t_start
300300

301-
if self.state == State.INIT:
301+
if self.state == WalkingState.INIT:
302302
self._try_transition_to_single_support(t, self.params.t_init)
303303

304-
elif self.state == State.DS:
304+
elif self.state == WalkingState.DS:
305305
self._try_transition_to_single_support(t, self.params.t_ds)
306306

307-
elif self.state == State.SS_RIGHT:
307+
elif self.state == WalkingState.SS_RIGHT:
308308
self._try_transition_to_ds_or_end(t, lf_contact_force)
309309

310-
elif self.state == State.SS_LEFT:
310+
elif self.state == WalkingState.SS_LEFT:
311311
self._try_transition_to_ds_or_end(t, rf_contact_force)
312312

313-
elif self.state == State.END:
313+
elif self.state == WalkingState.END:
314314
if delta_t > self.params.t_end:
315315
self.steps = None
316316

317-
def get_current_state(self) -> State:
317+
def get_current_state(self) -> WalkingState:
318318
return self.state
319319

320320
def _switch_single_support_leg(self, t: float):
321321
self.t_start = t
322322
self.state = self.next_ss_state
323-
self.next_ss_state = State.SS_LEFT if self.state == State.SS_RIGHT else State.SS_RIGHT
323+
self.next_ss_state = (
324+
WalkingState.SS_LEFT if self.state == WalkingState.SS_RIGHT else WalkingState.SS_RIGHT
325+
)
324326

325327
def _try_transition_to_single_support(self, t: float, duration: float):
326328
if t - self.t_start > duration:
@@ -335,5 +337,5 @@ def _try_transition_to_ds_or_end(self, t: float, contact_force: float):
335337
and contact_force > self.params.force_threshold
336338
):
337339
self.t_start = t
338-
self.state = State.END if self._is_last_step() else State.DS
340+
self.state = WalkingState.END if self._is_last_step() else WalkingState.DS
339341
self.step_idx += 1

tests/test_preview_control.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
compute_preview_control_matrices,
77
WalkingStateMachineParams,
88
WalkingStateMachine,
9-
State,
9+
WalkingState,
1010
)
1111

1212
from numpy.linalg import eigvals
@@ -104,48 +104,48 @@ def setUp(self):
104104
self.steps = np.ones([5, 3]) # Five steps
105105

106106
def test_begin_init(self):
107-
wsm = WalkingStateMachine(self.params, initial_state=State.INIT)
107+
wsm = WalkingStateMachine(self.params, initial_state=WalkingState.INIT)
108108
wsm.update_steps(self.steps)
109109

110110
wsm.update(t=0.0, rf_contact_force=100.0, lf_contact_force=100.0)
111111

112-
self.assertEqual(wsm.get_current_state(), State.INIT)
112+
self.assertEqual(wsm.get_current_state(), WalkingState.INIT)
113113

114114
def test_init_to_ds(self):
115-
wsm = WalkingStateMachine(self.params, initial_state=State.INIT)
115+
wsm = WalkingStateMachine(self.params, initial_state=WalkingState.INIT)
116116
wsm.update_steps(self.steps)
117117
wsm.update(t=0.0, rf_contact_force=100.0, lf_contact_force=100.0)
118118

119119
wsm.update(t=self.params.t_init + 0.1, rf_contact_force=0.0, lf_contact_force=100.0)
120120

121-
self.assertEqual(wsm.get_current_state(), State.SS_RIGHT)
121+
self.assertEqual(wsm.get_current_state(), WalkingState.SS_RIGHT)
122122

123123
def test_begin_double_support(self):
124-
wsm = WalkingStateMachine(self.params, initial_state=State.DS)
124+
wsm = WalkingStateMachine(self.params, initial_state=WalkingState.DS)
125125
wsm.update_steps(self.steps)
126126

127127
wsm.update(t=0.0, rf_contact_force=100.0, lf_contact_force=100.0)
128128

129-
self.assertEqual(wsm.get_current_state(), State.DS)
129+
self.assertEqual(wsm.get_current_state(), WalkingState.DS)
130130

131131
def test_switch_to_single_support(self):
132-
wsm = WalkingStateMachine(self.params, initial_state=State.DS)
132+
wsm = WalkingStateMachine(self.params, initial_state=WalkingState.DS)
133133
wsm.update_steps(self.steps)
134134

135135
wsm.update(t=self.params.t_ds + 0.1, rf_contact_force=0.0, lf_contact_force=0.0)
136136

137-
self.assertEqual(wsm.get_current_state(), State.SS_RIGHT)
137+
self.assertEqual(wsm.get_current_state(), WalkingState.SS_RIGHT)
138138

139139
def test_do_not_switch_to_ds_if_beginning_of_phase(self):
140-
wsm = WalkingStateMachine(self.params, initial_state=State.SS_RIGHT)
140+
wsm = WalkingStateMachine(self.params, initial_state=WalkingState.SS_RIGHT)
141141
wsm.update_steps(self.steps)
142142

143143
wsm.update(t=0.0, rf_contact_force=0.0, lf_contact_force=self.params.force_threshold + 10)
144144

145-
self.assertEqual(wsm.get_current_state(), State.SS_RIGHT)
145+
self.assertEqual(wsm.get_current_state(), WalkingState.SS_RIGHT)
146146

147147
def test_do_not_switch_to_ds_if_force_too_low(self):
148-
wsm = WalkingStateMachine(self.params, initial_state=State.SS_RIGHT)
148+
wsm = WalkingStateMachine(self.params, initial_state=WalkingState.SS_RIGHT)
149149
wsm.update_steps(self.steps)
150150

151151
wsm.update(
@@ -154,10 +154,10 @@ def test_do_not_switch_to_ds_if_force_too_low(self):
154154
lf_contact_force=self.params.force_threshold - 10,
155155
)
156156

157-
self.assertEqual(wsm.get_current_state(), State.SS_RIGHT)
157+
self.assertEqual(wsm.get_current_state(), WalkingState.SS_RIGHT)
158158

159159
def test_switch_to_ds_if_force_too_low_and_phase_close_to_end(self):
160-
wsm = WalkingStateMachine(self.params, initial_state=State.SS_LEFT)
160+
wsm = WalkingStateMachine(self.params, initial_state=WalkingState.SS_LEFT)
161161
wsm.update_steps(self.steps)
162162

163163
wsm.update(
@@ -166,7 +166,7 @@ def test_switch_to_ds_if_force_too_low_and_phase_close_to_end(self):
166166
lf_contact_force=0.0,
167167
)
168168

169-
self.assertEqual(wsm.get_current_state(), State.DS)
169+
self.assertEqual(wsm.get_current_state(), WalkingState.DS)
170170

171171

172172
if __name__ == "__main__":

0 commit comments

Comments
 (0)