google-deepmind / envlogger

A tool for recording RL trajectories.
Apache License 2.0
91 stars 13 forks source link

'action' KeyError in <Dataset> #8

Closed buckleytoby closed 7 months ago

buckleytoby commented 7 months ago

Working on ROS2 integration, I get the following error any time I try to close my envlogger object.

Exception has occurred: RuntimeError
Failed to encode example:
KeyError: In <Dataset> with name "steps":
'action'
{'steps': [{'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': True, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'discount': 1.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(False)}, 'discount': 0.0, 'is_first': False, 'is_last': False, 'is_terminal': False, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(True)}, 'reward': 0.0}, {'action': {'/ROS2EnvLoggerServer/episode_active': array(False)}, 'discount': array(0.), 'is_first': False, 'is_last': True, 'is_terminal': True, 'observation': {'/ROS2EnvLoggerServer/episode_active': array(False)}, 'reward': array(0.)}]}
KeyError: 'action'
buckleytoby commented 7 months ago

Issue wasn't in the 'steps' list but rather in the feature spec. It's not clear in the documentation what happens when the action_spec is {}, though

kenjitoyama commented 7 months ago

Hi @buckleytoby, thanks for the report. Sorry for not replying earlier, but it looks like you figured out your problem.

If you want, feel free to send a PR or to explain here how the documentation should change. Cheers!