Skip to content

Commit a0f8f5c

Browse files
authored
magicbot: Reset will_reset_to after robotPeriodic (#202)
This changes the behaviour of will_reset_to to be reset after all user methods are called. The intent is to avoid feedback methods observing the reset value before the end of the control loop iteration.
1 parent 2917887 commit a0f8f5c

File tree

1 file changed

+23
-27
lines changed

1 file changed

+23
-27
lines changed

magicbot/magicrobot.py

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -397,10 +397,7 @@ def autonomous(self) -> None:
397397
except:
398398
self.onException(forceReport=True)
399399

400-
auto_functions: Tuple[Callable[[], None], ...] = (
401-
self._execute_components,
402-
self._update_feedback,
403-
) + tuple(p[0] for p in self.__periodics)
400+
auto_functions: Tuple[Callable[[], None], ...] = (self._enabled_periodic,)
404401

405402
if self.use_teleop_in_autonomous:
406403
auto_functions = (self.teleopPeriodic,) + auto_functions
@@ -456,12 +453,8 @@ def _disabled(self) -> None:
456453
self.onException()
457454
watchdog.addEpoch("disabledPeriodic()")
458455

459-
self._update_feedback()
460-
for periodic, name in self.__periodics:
461-
periodic()
462-
watchdog.addEpoch(name)
456+
self._do_periodics()
463457
# watchdog.disable()
464-
465458
watchdog.printIfExpired()
466459

467460
delay.wait()
@@ -509,14 +502,8 @@ def _operatorControl(self) -> None:
509502
self.onException()
510503
watchdog.addEpoch("teleopPeriodic()")
511504

512-
self._execute_components()
513-
514-
self._update_feedback()
515-
for periodic, name in self.__periodics:
516-
periodic()
517-
watchdog.addEpoch(name)
505+
self._enabled_periodic()
518506
# watchdog.disable()
519-
520507
watchdog.printIfExpired()
521508

522509
delay.wait()
@@ -558,12 +545,8 @@ def _test(self) -> None:
558545
self.onException()
559546
watchdog.addEpoch("testPeriodic()")
560547

561-
self._update_feedback()
562-
for periodic, name in self.__periodics:
563-
periodic()
564-
watchdog.addEpoch(name)
548+
self._do_periodics()
565549
# watchdog.disable()
566-
567550
watchdog.printIfExpired()
568551

569552
delay.wait()
@@ -724,23 +707,36 @@ def _setup_reset_vars(self, component) -> None:
724707
component.__dict__.update(reset_dict)
725708
self._reset_components.append((reset_dict, component))
726709

727-
def _update_feedback(self) -> None:
710+
def _do_periodics(self) -> None:
711+
"""Run periodic methods which run in every mode."""
712+
watchdog = self.watchdog
713+
728714
for method, entry in self._feedbacks:
729715
try:
730716
value = method()
731717
except:
732718
self.onException()
733-
continue
734-
entry.setValue(value)
735-
self.watchdog.addEpoch("@magicbot.feedback")
719+
else:
720+
entry.setValue(value)
721+
722+
watchdog.addEpoch("@magicbot.feedback")
723+
724+
for periodic, name in self.__periodics:
725+
periodic()
726+
watchdog.addEpoch(name)
727+
728+
def _enabled_periodic(self) -> None:
729+
"""Run components and all periodic methods."""
730+
watchdog = self.watchdog
736731

737-
def _execute_components(self) -> None:
738732
for name, component in self._components:
739733
try:
740734
component.execute()
741735
except:
742736
self.onException()
743-
self.watchdog.addEpoch(name)
737+
watchdog.addEpoch(name)
738+
739+
self._do_periodics()
744740

745741
for reset_dict, component in self._reset_components:
746742
component.__dict__.update(reset_dict)

0 commit comments

Comments
 (0)