复现了一下山岳老师的强化学习训练机械臂https://zhuanlan.zhihu.com/p/491909457
遇到了一个很傻的问题,之前在用panda-gym训练时候,最后show真实效果时遇到了gym.error.UnregisteredEnv: No registered env with id: PandaReach-v2的报错。
Traceback (most recent call last):
return self.env_specs[id]
KeyError: 'PandaReach-v2'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
raise error.UnregisteredEnv("No registered env with id: {}".format(id))
gym.error.UnregisteredEnv: No registered env with id: PandaReach-v2
于是我重新跑了一遍:
import gym
all_envs = gym.envs.registry.all()
for env_spec in all_envs:
print(env_spec.id)
print出来的env里竟然真的没有PandaReach-v2,但是PandaReach-v2其实是panda-gym下载时候就会帮你注册好的环境,而且在我trian的时候我也用了这个环境,这非常奇怪,我仔细地查了python和gym的版本以及stablebaseline的版本(事实上我觉得不可能是这部分出问题)
然后我仔细地看了下我的训练代码,发现我在训练时import panda-gym,而show的python文件没有重新显示导入panda-gym。
gym.make("PandaReach-v2")
在训练中没有问题,但在列出所有环境时,却找不到 "PandaReach-v2"。这说明 "PandaReach-v2" 环境在训练时被正确地注册和使用,但在列出所有环境时,却没有被列出。
这可能是由于环境注册的时间和地点不同导致的。在训练的代码中,panda-gym
可能被正确地导入和使用,从而注册了 "PandaReach-v2" 环境。但在列出所有环境的代码中,panda-gym
可能没有被正确地导入,因此 "PandaReach-v2" 环境没有被注册。
所以我在show的python文件加了一行:
import panda_gym # 显式地导入 panda-gym
解决了。。。
其他类似的环境问题,很可能也是因为你没有正确导入panda-gym或之类的,大家可以把环境id输出看看,排查一下是不是这个问题。