Skip to content

本月我们在实现真正的自动驾驶方面取得了一些进展。目前,我们已经开发出一个初具雏形的车道辅助插件原型。由于大学课程依然繁忙,本月我不得不放慢了开发进度。

发布计划

我们仍然计划在今年上半年发布不过,目前由于大学课程,我已经耽误了一个半月左右的时间。虽然时间在流逝,但我不想仓促发布,所以如果到六月底我们认为还没有准备好,那么很可能会推迟一~两个月。测试版计划将于今年上半年启动,因此无论我们能否按时完成,任何想尝试 C# 的人都能参与其中。

迈向自动驾驶的第一步

参与开发者:Tumppi066sk-zk 与之前的 ETS2LA 版本相比,一个重大变化是:随着 C# 版本的发布,我们将不再使用预提取的地图数据。这得益于 sk-zkTruckLib 上的出色工作,它使我们能够读取您特定游戏版本和模组的游戏数据。

在过去的一个月里,我把大部分时间都花费在梳理TruckLib提供的所有数据上。我围绕这些数据构建了封装层,以便ETS2LA能更方便地使用,并着手开发利用这些数据的初步概念验证插件。其中一个插件是一个基础的车道保持插件,我仅用几小时就使其成功运行。下方附有该插件运行的视频。

*初始 LKAS 插件在 Linux 上的 ETS2LA 中运行*

我正在逐步为这个初始插件添加更多功能,并希望将部分代码提取出来,整合到 ETS2LA 的主代码库中。请注意,该插件将采用闭源模式,因此您无法查看其源代码。正因如此,我希望将大部分“基础”功能提取到主代码库中,以便第三方开发者无需经历繁琐的流程。

说实话,我原本希望自动驾驶功能能进展得更顺利一些,但鉴于这个初始版本的实现如此简单,我依然充满希望。如果要在当前的 Python 版本中实现同样的功能,恐怕需要数千行代码,而即便如此,当前版本的准确度已经更高了。下个月我会继续向大家汇报进展!

控制方案

我最近还在忙于开发 ETS2LA 的新控制方案。这次,不再要求所有插件都实现各自的控制逻辑,而是由 ETS2LA 中的一个中央 ApplicationState 类来处理最常见的操作。这样一来,不同插件之间的控制逻辑就能保持一致,同时也让第三方开发者更容易加入进来。

提示:可以再看看上面的视频,其中一个窗口可以看见运行状态!

我花了一些时间研究这个 ApplicationState 的控制方案,我觉得自己想出了一个相当不错的方案。我参考了现实中我车上的 ACC 和 LKAS 的实现方式,并调整了逻辑以适应 ETS2LA。描述这些控制方式有点困难,所以我改用“用户流程”来向大家说明它们的工作原理:

  • 用户以 80 公里/小时的速度行驶,按下 SET 键启用 ACC,ETS2LA 将车速设定为 80 公里/小时。
  • 用户想加速,按一次 Increase 键,ETS2LA 将车速提高到 81 公里/小时。
  • 用户想暂停自适应巡航,再次按下 SET,此时即可使用油门和刹车踏板。注意:这与真实车辆不同,在真实车辆中需踩下刹车踏板才能暂停。由于 ETS2LA 无法检测到这一操作,因此我们改用 SET 按钮。
  • 用户若想恢复自适应巡航,只需按一次 IncreaseDecrease,车速即恢复至 81 公里/小时。若用户按的是 SET,车速将设为卡车当前速度,该速度可能与 81 公里/小时不同。
  • 用户可在任何时候按下 Assist 键,在不同级别的车道辅助模式之间切换。注意:出于安全考虑,通过 SET 键禁用 ACC 时也会同时禁用车道辅助功能,但再次启用 ACC 时并不会重新启用车道辅助功能。

以下是一些关于如何将此功能与控制器进行绑定的图片参考。默认绑定的是arrow keys,但你当然可以将其更改为任意按键。在控制器上,D-Pad是个不错的选择;而在方向盘上,则可以使用你所拥有的任意按键。

控制器绑定1控制器绑定2控制器绑定3可能的控制器绑定 此处的布局与方向键的操作方式类似,其中一个按钮必须设置在方向键之外。这在方向键上也是同样的显示效果。NEXT 按钮用于与用户界面交互,其他按钮的行为也会根据是否正在与用户界面交互而发生变化。

抬头显示系统 (HUD)

我最近也在为ETS2LA的新HUD设计寻找灵感。相比Python,改进之处不仅限于样式,但在没有实际运行的软件示例之前,我不想做出过多承诺。因此,我将先收集一些我计划从中汲取灵感的HUD示例。

如果您对这些示例有任何反馈,或者发现我遗漏了其他案例,请在 Discord 服务器上发送您的意见。关于样式和功能的各项细节目前都尚未确定,如果您希望加入某些内容,现在正是提出建议的最佳时机!

小鹏HUD 1小鹏HUD 2小鹏最新 AR-HUD

在我看来,目前所有HUD中,小鹏汽车的设计最为出色。理想情况下,这也是我希望 ETS2LA 中的HUD所采用的方向。既然ETS2LA也将配备独立的LKAS和自动驾驶系统,我认为添加状态指示器和一目了然的视觉提示将有助于用户。

大众HUD 1大众HUD 2大众的 HUD

ETS2LA 确实需要显示大量信息,而且我们的用户很喜欢当前HUD系统所包含的丰富元素。因此,我认为我们会采用类似大众汽车HUD的设计,即在左右两侧设置可切换不同信息的元素。这样我们就能显示大量信息,至少支持两层深度的信息层级。

目前这还只是一个概念,但我希望你们和我一样对这个新的HUD感到兴奋。它将比现有的系统有巨大的改进,并能让我们以更直观的方式显示更多信息。此外,它还将使你们能够无需切换窗口即可更改设置,这将极大提升游戏体验!

社区亮点

本月我没有收到任何特别的社区创作,因此我想重点介绍一些正在协助我们完善 ETS2LA 的伙伴。正是因为有这些人的付出,ETS2LA 才得以实现。请记住,我们的开发团队规模远不止于此,那些未在此提及的成员同样重要!

truckermudgeon/tmudge :是 地图 (GitHub) 的创建者,该项目是我们用于 ETS2LA 内地图的。该仓库还用于提取我们的地图数据,不过这一部分与 C# 无关。

dariowouters/roccovax :负责我们所有的SDK开发工作。如果没有他,ETS2LA绝不可能达到如今的高度。正是得益于Roccovax,我们才能直接从游戏中获取车辆、导航和交通信号灯信息,而无需依赖视觉或其他AI模型。

Glas42 :他是 ETS2LA 增强现实(AR)功能的开发者。Glas 花费了数小时,研究了通过外部叠加层将信息投射到游戏世界所需的所有数学计算。Glas 在核心开发团队中也占据着重要位置,我经常与他一起处理“官方”事务。

sk-zk :如前所述,sk-zk 对 C# 版本的发布起到了关键作用;如果没有 TruckLib,我们就无法直接读取游戏数据,而且我们目前看到的许多改进都直接得益于他在创建和维护该库方面所做的工作。

goodnightan/晚安 :负责维护 ETS2LA 的中国大陆镜像服务(费用由其自己承担),并将这些博客文章翻译成中文。他投入了大量的时间和精力,确保中国大陆的玩家能像我们西方玩家一样享受 ETS2LA 带来的乐趣,因此他对 ETS2LA 整体所产生的影响不可小觑。

这些只是社区中的一部分重要成员。还有许多许多我因为“没时间”提及的人,但请相信,这已经不再是一个人的项目了!有数十位成员正倾注自己的时间和精力,致力于将 ETS2LA 打造成最棒的社区,我对他们所有人深表感激。


INFO

感谢阅读! 如果您对代码的实现方式感兴趣(说不定将来您也能开发 C# 插件!),请查阅 文档,其中包含一些代码片段和说明。虽然文档仍在完善中,但应该能让您对具体内容有个大致的了解。

我们张开双臂欢迎所有 C# 开发者。我的经验主要局限于 Unity,因此我也正在边做边学习如何以“正确的方式”实现功能。请务必记住,我们的代码库不允许使用代理式 AI,我们更重视个人的努力,而非 AI 带来的表面“效率”。