RaceCarControl 排坑记录

任务

我需要用MPC完成gym环境下的car racing任务,记得之前看到B站一位UP在github上有开源他的实现,但那个原链接现在好像找不到了,好在github上最终找到了这个RaceCarControl项目,尝试复现他的效果,然后学习MPC,最后在他的代码基础上进行修改。
参考视频
参考代码

踩坑回顾

BOX2D问题

症状描述

我先创建了一个python3.10的conda环境,然后按照项目readme指示,安装了numpy、opencv-python、gym、box2d。因为我python就没有按照要求用3.7的,其他的包我也干脆直接pip3安装最新版的。
然后当我

python main.py

就出现了报错:

AttributeError: module '_Box2D' has no attribute 'RAND_LIMIT_swigconstant'

解决方案

这个问题我上次刚碰到过。但上次用了两个方法,之后才进行的测试。不知道是哪个方法解决了。这次我打算采用:

pip3 uninstall box2d
pip3 install gym[box2d]

因为之前的方法是pip3 install gym[all],官网说要安装gym[box2d]:
在这里插入图片描述
执行之后果然没有这个问题了,只是报错:

ModuleNotFoundError: No module named 'moviepy'

这很简单,安装就行:

pip3 install moviepy

env.step返回参数问题

症状描述

运行

python main.py

虽然画面出来了,但是闪退,并且报错:

Traceback (most recent call last):
  File "/home/lcy-magic/RaceCar_TEST/RaceCarControl/main.py", line 29, in <module>
    observation, reward, done, info = env.step(action)
ValueError: too many values to unpack (expected 4)

这是gym常见问题了,因为gym改过版,改下代码就行。

解决方案

可以看到现在的gym里,是这样实现的:

def step(self, action):
        """Steps through the environment using action, recording observations if :attr:`self.recording`."""
        (
            observations,
            rewards,
            terminateds,
            truncateds,
            infos,
        ) = self.env.step(action)

也就是返回值分别为observation, reward, terminated, truncated, info
所以直接把原代码改为(添加一个truncated):

observation, reward, done, truncated, info = env.step(action)

就行。

CV2问题

问题描述

又报错了:

File "/home/lcy-magic/RaceCar_TEST/RaceCarControl/vision.py", line 79, in reference_line_extractor
    thin = cv2.ximgproc.thinning(self.lane_mask)
AttributeError: module 'cv2' has no attribute 'ximgproc'

解决方案

根据参考回答,要先看下是不是opencv-contrib-python、opencv-python、opencv-python-headless这三个包都安装了:

pip3 list | grep opencv

结果我只有

opencv-python                 4.9.0.80

然后我问GPTximgproc是哪个包的,GPT告诉我是opencv-contrib-python,于是:

pip3 install opencv-contrib-python

这次问题解决!!!成功运行并见证翻车现场(转了好几圈又回到赛道上了,还是很可以的)
在这里插入图片描述

注意

我问了opencv那3个包的区别是什么,这是GPT的回答:

opencv-contrib-python:这个包包含了OpenCV的所有模块,包括核心模块、图像处理模块、计算机视觉模块、机器学习模块等。它包含了一些额外的模块和功能,因此文件较大。如果你需要使用OpenCV的所有功能,可以选择安装这个包。

opencv-python:这个包包含了OpenCV的核心模块和基本功能,但不包含一些额外的模块和功能。它比opencv-contrib-python包小,适合于一些基本的图像处理和计算机视觉任务。

opencv-python-headless:这个包是opencv-python的一个变种,它不包含图形用户界面(GUI)相关的功能。这意味着它不包含显示图像、窗口管理等功能,适合于在服务器等没有图形界面的环境下进行图像处理和计算机视觉任务。

总的来说,这三个包都是OpenCV的Python绑定,它们在功能和包含的模块上有所不同,可以根据你的需求选择合适的包进行安装和使用。

所以,以后安装opencv,如果空间足够,直接一步到位:

pip3 install opencv-python opencv-contrib-python opencv-python-headless
  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Debug的魔法小马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值