ETS2LA技术架构深度解析基于插件化系统的卡车模拟自动驾驶平台【免费下载链接】Euro-Truck-Simulator-2-Lane-AssistPlugin based interface program for ETS2/ATS.项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-Lane-AssistETS2LAEuro Truck Simulator 2 Lane Assist是一个为SCS Software卡车模拟游戏系列设计的开源自动驾驶辅助系统。该项目采用模块化架构设计通过计算机视觉、机器学习算法和实时数据处理技术在游戏环境中实现了车道保持、自适应巡航控制、碰撞预警等高级驾驶辅助功能。本文将深入分析其技术架构、实现原理以及扩展机制。技术架构设计原理与实现策略核心进程通信机制ETS2LA采用多进程架构设计通过共享内存和消息队列实现高效的数据交换。核心通信系统建立在ETS2LA/Plugin/process.py中定义的PluginProcess类之上该进程模型负责管理插件生命周期、事件分发和状态同步。# 进程通信示例 class PluginProcess: def __init__(self, path: str, queue: Queue, return_queue: Queue, sender: SharedMemorySender, receiver: SharedMemoryReceiver): self.path path self.queue queue self.return_queue return_queue self.sender sender self.receiver receiver系统通过SharedMemorySender和SharedMemoryReceiver实现进程间高速数据交换特别适用于需要低延迟的实时控制场景。这种设计允许插件在独立进程中运行避免单个插件故障影响整个系统稳定性。插件系统架构设计ETS2LA的插件系统采用面向对象的类继承模型所有插件必须继承自ETS2LAPlugin基类。该基类在ETS2LA/Plugin/classes/plugin.py中定义提供了完整的插件生命周期管理和资源访问接口。# 插件基类定义 class ETS2LAPlugin(object): def __init__(self, path: str, queue: Queue, return_queue: Queue, get_tag: Callable, set_tag: Callable, get_mem_tag: Callable, set_mem_tag: Callable): self.path path self.queue queue self.return_queue return_queue self.tags Tags(get_tag, set_tag) self.description PluginDescription()每个插件通过PluginDescription类定义元数据包括名称、版本、依赖模块和兼容性信息。这种声明式配置允许系统在运行时动态加载和验证插件确保组件间的正确交互。实时数据处理流水线系统采用三层数据处理架构数据采集层、处理层和控制输出层。数据采集通过游戏SDK接口如SCSController和计算机视觉模块如ScreenCapture并行执行确保数据源的多样性和冗余性。处理层由多个专用模块组成Steering模块实现转向控制算法支持平滑滤波和游戏状态补偿Traffic模块处理交通参与者检测和跟踪Semaphores模块管理交通信号灯状态TruckSimAPI模块提供游戏状态抽象接口控制输出层通过游戏控制器接口将处理结果转换为游戏输入实现闭环控制。ETS2LA系统架构采用模块化设计通过共享内存和消息队列实现高效进程间通信计算机视觉与机器学习集成图像处理流水线ETS2LA的视觉系统基于OpenCV和PyTorch构建提供实时图像采集、预处理和特征提取功能。Modules/ScreenCapture/main.py和Modules/BetterScreenCapture/main.py实现了多种屏幕捕获策略包括DXGI、Windows GDI和MSS跨平台方案。# 图像处理核心逻辑 class ScreenCaptureModule: def capture_frame(self): # 使用DXGI或GDI获取屏幕图像 frame self.capture_method.capture() # 应用色彩空间转换和尺寸调整 processed cv2.cvtColor(frame, cv2.COLOR_BGRA2RGB) # 执行车道线检测和障碍物识别 lanes self.lane_detector.detect(processed) vehicles self.object_detector.detect(processed) return processed, lanes, vehicles深度学习模型集成系统通过ETS2LA/Handlers/pytorch.py提供的统一接口管理深度学习模型支持从Hugging Face等平台自动下载和更新预训练模型。这种设计允许社区贡献者轻松集成新的检测算法而无需修改核心系统。# PyTorch模型管理器 class PyTorchHandler: def __init__(self, HF_owner: str, HF_repository: str, HF_model_folder: str, plugin_self: object None, torch_dtype: torch.dtype torch.bfloat16, threaded: bool True): self.model_config { owner: HF_owner, repo: HF_repository, folder: HF_model_folder } self.load_model()模型推理结果通过共享内存传递到控制模块实现从感知到决策的端到端处理流程。系统支持多种检测任务包括车道线检测、车辆识别、交通标志识别等。控制系统设计与实现转向控制算法转向控制模块Modules/Steering/main.py实现了基于PID控制原理的自适应转向算法。系统通过时间窗口平滑和历史数据加权平均确保转向输入的稳定性和响应性。class SteeringValue: def __init__(self, value: float, timestamp: float): self.value value self.timestamp timestamp class Module(ETS2LAModule): SMOOTH_TIME: float 0.1 # 平滑时间窗口 OFFSET: float 0 # 转向偏移补偿 SENSITIVITY: float 1 # 转向灵敏度 MAX_ANGLE: float 1 # 最大转向角度 def CalculateSteeringAngle(self): if not self.IGNORE_SMOOTH: # 加权平均算法 weights np.arange(len(self.steeringValues)) 1 average np.average( [value.value for value in self.steeringValues], weightsweights ) angle average * self.SENSITIVITY self.OFFSET angle np.clip(angle, -self.MAX_ANGLE, self.MAX_ANGLE) return angle自适应巡航控制系统自适应巡航控制ACC插件Plugins/AdaptiveCruiseControl/main.py实现了基于距离和相对速度的智能跟车算法。系统综合考虑前方车辆距离、相对速度、道路曲率和交通信号状态生成平滑的速度控制指令。class Plugin(ETS2LAPlugin): description PluginDescription( name_(Adaptive Cruise Control), version1.0, description_(ACC provides automatic acceleration and braking depending on road conditions and vehicles ahead.), modules[SDKController, TruckSimAPI, Traffic, Semaphores], tags[Base, Speed Control], fps_cap60, )ACC系统使用SmoothedValue类进行数据平滑处理通过PIDGraph类可视化控制过程便于调试和参数优化。碰撞预警与避障碰撞避免系统通过多传感器数据融合实现风险评估。系统实时计算时间到碰撞TTC、安全距离和避障路径在危险情况下通过视觉和听觉警告提示驾驶员。用户界面与交互设计Web前端架构ETS2LA采用现代化的Web技术栈构建用户界面通过FastAPI后端和WebSocket实时通信提供响应式用户体验。界面系统位于ETS2LA/UI/目录使用组件化设计模式。# UI组件系统示例 class Button(Component): def __init__(self, text: str, style: Style None, pressed: Callable | None None): self.text text self.style ensure_style(style) self.pressed pressed def to_dict(self) - dict: return { type: button, text: self.text, style: self.style.to_dict(), on_press: self.get_fully_qualified_name(self.pressed) }实时数据可视化系统提供丰富的可视化组件包括图表、仪表盘和实时监控界面。ETS2LA/Utils/Values/graphing.py中的PIDGraph类专门用于展示控制系统的性能指标帮助用户理解和优化自动驾驶参数。ETS2LA的可视化界面展示系统状态和性能指标支持实时监控和参数调整扩展机制与插件开发插件开发框架ETS2LA为开发者提供了完整的插件开发框架包括事件系统、状态管理和UI集成。插件开发者只需继承ETS2LAPlugin类并实现必要的生命周期方法。# 最小化插件示例 from ETS2LA.Plugin import ETS2LAPlugin, PluginDescription from ETS2LA.Utils.translator import _ class Plugin(ETS2LAPlugin): description PluginDescription( name_(My Custom Plugin), version1.0.0, description_(A custom plugin example), modules[SDKController], tags[Custom, Example] ) def run(self): # 主循环逻辑 while True: game_data self.modules.SDKController.get_data() # 处理数据 self.tags.custom_value processed_data事件系统与消息传递系统的事件系统ETS2LA/Events/event_system.py支持发布-订阅模式允许插件间解耦通信。事件可以通过装饰器或显式注册方式处理。from ETS2LA.Events import events events.on(vehicle_detected) def handle_vehicle(data): # 处理车辆检测事件 pass # 触发事件 events.trigger(vehicle_detected, vehicle_data)国际化支持ETS2LA内置完整的国际化框架支持超过20种语言。翻译系统基于gettext标准通过ETS2LA/Utils/translator.py提供统一的翻译接口。from ETS2LA.Utils.translator import _ # 使用翻译函数 localized_text _(Adaptive Cruise Control)性能优化与系统集成资源管理与内存优化系统通过ETS2LA/Utils/Values/numbers.py中的SmoothedValue类实现高效的数据平滑和内存管理。该算法采用滑动窗口和权重分配策略在保证实时性的同时最小化内存占用。class SmoothedValue: def __init__(self, smoothingType: Literal[frames, time] frames, smoothingAmount: int | float 10): self.smoothingType smoothingType self.smoothingAmount smoothingAmount self.values deque(maxlenint(smoothingAmount))多进程并发处理ETS2LA采用生产者-消费者模式处理高并发数据流。每个插件在独立进程中运行通过共享内存和消息队列实现数据交换避免全局锁竞争和阻塞问题。游戏集成与兼容性系统通过Modules/SDKController/main.py提供的SCSController类与游戏SDK交互支持ETS2和ATS双平台。控制器抽象层处理不同游戏版本和API差异确保功能的向后兼容性。技术演进方向与社区贡献架构演进路线当前系统正在向C#版本迁移以提升性能和跨平台兼容性。重写分支rewrite branch展示了新的架构设计包括更高效的资源管理和改进的插件系统。社区贡献机制ETS2LA采用开放的贡献模型鼓励开发者通过GitHub和GitLab参与项目开发。项目维护者提供了详细的开发文档和代码规范确保代码质量的一致性。技术生态整合系统设计支持与第三方工具和服务的集成包括地图数据服务通过Plugins/Map/模块语音合成系统通过Plugins/TTS/模块Discord集成通过Plugins/DiscordRichPresence/模块增强现实显示通过Plugins/AR/模块部署与开发指南环境配置要求项目要求Python 3.12环境依赖管理通过pyproject.toml文件定义。主要依赖包括计算机视觉OpenCV、PyTorch、TorchVision游戏集成pygame、pynputWeb框架FastAPI、WebSockets数据处理NumPy、SciPy开发工作流环境设置使用uv或pip安装依赖插件开发在Plugins/目录创建新插件本地测试通过开发服务器运行和调试代码提交遵循项目代码规范和提交约定性能调优建议调整插件FPS限制以平衡性能和资源使用使用适当的数据平滑参数避免控制抖动监控系统内存使用优化大型数据处理流程利用多进程优势将计算密集型任务分配到独立进程ETS2LA项目展示了现代软件工程在游戏辅助系统中的应用其模块化设计、实时处理能力和扩展性为类似项目提供了有价值的参考。通过持续的技术创新和社区协作该项目有望推动模拟驾驶辅助技术向更高水平发展。【免费下载链接】Euro-Truck-Simulator-2-Lane-AssistPlugin based interface program for ETS2/ATS.项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-Lane-Assist创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考