在ADTF (Automotive Data and Time-Triggered Framework)中,过滤器(Filter)扮演着数据处理的核心角色。过滤器是处理数据流的基本单元,它们接收、处理并发送数据。接下来,将分享ADTF中创建和使用过滤器,包括设置输入输出针脚(Pins)、配置触发器(Triggers)以及处理数据样本(Samples)。
一、过滤器基础
过滤器是ADTF中用于数据处理和转换的小型处理单元,可以通过特定的接口接收和发送数据,如图1所示。
图1 Filter
过滤器核心能力如下:
1. 数据接收:通过输入引脚(In Pins)和对应的样本读取器(Sample Reader)接收数据。
2. 数据发送:通过输出引脚(Out Pins)和对应的样本写入器(Sample Writer)发送数据。
3. 数据处理:在运行器(Runners)(也称为触发上下文、可运行对象或可调用对象)的上下文中处理数据。
在进行过滤器的设计,考虑将数据传输与运行时行为分离。因此引入了触发机制,包括数据触发和时间触发。
1. 数据触发: 功能在传入数据事件上运行。
2. 时间触发: 功能在传入时间事件上运行。
通过这种设计支持构建一个强大且可适应的系统,使用过滤器可以轻松集成和定制。比如在数采系统中,通过不同的时间触发设计,以适应不同频率的传感器数据采集。或者利用cDataTriggerHint类来确保当车辆传感器数据(如摄像头图像)到达时,触发相应的数据处理算法运行,从而实现实时数据流的高效响应和处理。
二、创建过滤器
通常,在ADTF中滤波器会被打包成一个插件。通过ADTF 的插件机制使其能够在 ADTF 的运行时加载。在滤波器中,可以通过可以创建输出引脚或输入引脚,这里我们以输出引脚为例。引脚传输出去的数据,在ADTF中称为样本(Sample)。其代码案例如下,创建一个滤波器并添加一个输出引脚及样本数据。
三、 样本(Sample)
样本(Sample)是 ADTF中用于数据传输的基本单元。它们不仅包含数据本身,还包含与数据流相关的元信息,如图2所示。
图2 Sample
一般来说,样本通过 streaming::ISample 接口进行操作。其样本组成包含以下内容:
1. 时间戳(Timestamp):为每个数据提供时间关联。
2. 样本缓冲区(SampleBuffer):通常是一个内存块的引用,包含用户数据。
3. 样本信息(Sample Info)(可选):提供额外的元数据。
4. 子流 ID(Substream Id)(可选):用于标识特定的数据子流。
比如我们可以轻易实现将内存缓冲区内容复制到样本中,实现数据传输。
四、过滤器应用
ADTF过滤器的应用场景广泛,它们不仅能够处理和转换数据,还能够根据特定的需求定制功能。在图3所示,在人脸识别算法工程中,过滤器被用于处理从摄像头捕获的视频流。
首先,一个过滤器用于解码视频流,将原始数据转换为图像帧。接下来,通过一个复杂的过滤器(OpenCV Face Detector Filter)实现人脸识别算法,识别并跟踪视频中的人脸。通过这些过滤器的协同工作,系统能够实时处理视频数据,并提供有用的输出,如安全监控或人流量统计。
图3 人脸识别算法工程
此外,过滤器可用于多种用途,包括但不限于:
1. 解码来自CAN、MOST或FlexRay等设备的流源数据。
2. 预处理传入数据,为算法实现做准备。
3. 通过复杂的算法实现重新计算和合并传入数据。
4. 实现循环控制器。
5. 接收传入数据并进行数据可视化。
五、总结
ADTF过滤器提供了一个灵活且强大的平台,用于构建和集成数据处理流程。无论是在汽车、工业自动化等领域,过滤器都能够提供定制化的解决方案,满足特定的技术需求。通过合理设计和配置过滤器,可以大大提高数据处理的效率和可靠性。