It’s been an exciting week for us. Not only did we change how configurations work, but we also decoupled the motor system from the environment interface.
If you’ve experienced tbp.monty prior to this change, you my have noticed that the various environment interfaces in embodied_data.py did things like:
# ...
actions = self.motor_system(ctx, self._observations)
self._observations, self._proprioceptive_state = self.env.step(actions)
if self.transform is not None:
self._observations = self.apply_transform(self.transform, self._observations, self._proprioceptive_state)
self.motor_system._state = MotorSystemState(self._proprioceptive_state)
return self._observations, self._proprioceptive_state
# ...
This has been greatly simplified by removing the motor system entirely.
observations, state = self.env.step(actions)
if self.transform is not None:
observations = self.apply_transform(self.transform, observations, state)
return observations, state
Note: In the future we will move transforms inside sensor modules and that’ll end up as
return self.env.step(actions)
Now, the proprioceptive_state is passed to Monty which passes it to the motor system. The simplest place to see the new flow is in the MontyExperiment:
while True:
observations, proprioceptive_state = self.env_interface.step(actions)
actions = self.model.step(ctx, observations, proprioceptive_state)
Experiments are now the only connection between Monty and the environment.
We believe this will greatly simplify development going forward and look forward to making additional changes to improve the framework.
If you run into any issues or have questions, let us know here.
Cheers!