用途
Europilot 是一个开源工具包,旨在利用《欧洲卡车模拟 2》(ETS2)来开发和测试自动驾驶算法。它将游戏环境与常用的深度学习框架(如 Keras 或 TensorFlow)连接起来,让开发者能够捕获游戏屏幕输入,并以编程方式控制模拟器中的卡车。项目使用卷积神经网络(CNN)控制 ETS2 内的方向盘,适合作为端到端驾驶模型的研究与实验平台。
主要能力
Europilot 提供两种使用方式:训练和测试。
- 训练模式:实时捕获屏幕输入并输出 numpy 数组,同时获取轮盘游戏杆的值。相关截图与操纵杆值的映射会写入 CSV 文件,每一行记录截图文件名及对应的操纵杆值。这样可以构建训练数据集,用于训练驾驶模型。
- 测试模式:创建一个虚拟操纵杆驱动程序,该驱动可以在游戏中被识别,从而以编程方式控制卡车。利用这个虚拟操纵杆,可以构建实时推理网络,以游戏屏幕作为输入,输出相关的操纵杆命令(如转向)。
Europilot 隐藏了捕获屏幕数据和操纵杆数据的复杂性,提供简化的接口。内部会将操纵杆数据流解析为机器可读格式(最初针对罗技 G27 方向盘;如果使用其他操纵杆,需要修改 joystick.py 以适应需求)。虚拟操纵杆驱动通过在内核中附加用户空间驱动,并向 udev 输出事件来实现。需要注意的是,该驱动必须在游戏启动之前初始化,否则不会出现在控制器页面中。
项目目前提供基于 Keras 的示例 notebook,并希望未来添加其他流行框架的示例。
使用方式
- 首先克隆项目。
- 如果要在本地安装 europilot,可以按照项目说明进行安装;也可以直接在项目路径下安装依赖库并操作。
- 要开始生成训练数据,请查看
scripts目录中的generate_training_data.py。- 注意:使用屏幕选择 GUI 需要编译了 opencv_contrib 模块的 OpenCV。否则,需要为
train.Config.BOX指定一个自定义的 Box 对象,以确定要捕获的屏幕区域。
- 注意:使用屏幕选择 GUI 需要编译了 opencv_contrib 模块的 OpenCV。否则,需要为
- 生成训练数据后,建议手动检查每张图像,确认没有录制到不想要的数据。可以使用
clean_up.ipynb中的简单脚本删除不需要的数据以及 CSV 文件中对应的行。同时可参考preprocess.ipynb和get_mean_std.ipynb中的示例代码对数据进行预处理。 PilotNet.ipynb是 Mariusz Bojarski 的 End to End Learning for Self-Driving Cars 的实现,略有差异。项目提供的演示即由该 notebook 创建。- 若要在模型上运行推理,请查看
scripts目录中的inference.ipynb。
项目还提供了一份包含 162,495 张图像的驾驶数据集(大小 17G),可供感兴趣者使用。
适用场景
Europilot 适用于以下场景:
- 研究和开发端到端自动驾驶算法,尤其是基于视觉输入的转向控制。
- 在模拟环境中收集驾驶数据并训练深度学习模型,而无需真实车辆。
- 测试实时推理网络,将游戏屏幕作为输入,输出操纵杆控制命令。
- 作为教学或实验平台,帮助理解自动驾驶中的感知与控制流程。
项目选择 ETS2 作为首个目标平台的原因包括:ETS2 支持多平台(Windows、OS X、Linux),开发者可以在 Macbook 或 Ubuntu 工作站上运行;ETS2 具有逼真的图形和物理引擎(名称中包含“simulator”),比一些开源游戏的图形或物理引擎更接近真实;并且游戏本身有趣,便于开发者长时间游玩以积累大型数据集。
限制
- Europilot 运行在 Linux 上,支持 Python 2.6-2.7 和 3.3+。
- 虚拟操纵杆驱动必须在游戏启动前初始化,否则游戏内无法识别。
- 默认的操纵杆数据解析针对罗技 G27,如果使用其他操纵杆需要修改
joystick.py。 - 使用屏幕选择 GUI 需要编译了 opencv_contrib 模块的 OpenCV,否则需要手动指定捕获区域。
- 当前示例 notebook 基于 Keras,其他流行框架的示例尚未提供。
- 项目路线图包括:在虚拟机上运行 ETS2 并远程训练/测试模型、Web 排行榜、在 ETS2 中驾驶时捕获自定义视觉数据(如左、右侧摄像头)、支持类似 OpenAI Universe 的强化学习工作流、以及根据需要支持 Windows。
- 项目采用 MIT 许可证。