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过滤器提供了一个灵活且强大的平台,用于构建和集成数据处理流程。无论是在汽车、工业自动化等领域,过滤器都能够提供定制化的解决方案,满足特定的技术需求。通过合理设计和配置过滤器,可以大大提高数据处理的效率和可靠性。


我是分享自动驾驶技术的康谋,关注我,了解更多信息!

康谋分享 | ADTF过滤器全面解析:构建、配置与数据处理应用的更多相关文章

  1. jQuery2.x源码解析(构建篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 笔者阅读了园友艾伦 Aaron的系列博客< ...

  2. 一个.NET通用JSON解析/构建类的实现(c#)转

    转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...

  3. Python 解析构建数据大杂烩 -- csv、xml、json、excel

    Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记语言 Html ,但主要对文档和数据 ...

  4. STM32 CAN总线标识符过滤器难点解析

    STM32 CAN总线标识符过滤器难点解析 原创 2016年05月31日 15:12:24 标签: stm32 / CAN 4910 CAN总线是目前应用非常多的一种总线,在汽车电子,航空航天中应用广 ...

  5. 一个.NET通用JSON解析/构建类的实…

    一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...

  6. C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题

    C#字符串数组排序   //排序只带字符的数组,不带数字的 private   string[]   aa   ={ "a ", "c ", "b & ...

  7. 分析Python中解析构建数据知识

    分析Python中解析构建数据知识 Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记 ...

  8. BeanDefinition 解析流程【解析所有配置类】

    BeanDefinition 解析流程 BeanDefinition 解析入口:ConfigurationClassPostProcessor#postProcessBeanDefinitionReg ...

  9. Spring源码解析 – @Configuration配置类及注解Bean的解析

    在分析Spring 容器创建过程时,我们知道容器默认会加载一些后置处理器PostPRocessor,以AnnotationConfigApplicationContext为例,在构造函数中初始化rea ...

  10. Spring MVC的多视图解析器配置及与Freemarker的集成

    一.从freemarker谈起 Freemarker使用模板技术进行视图的渲染.自从看了Struts标签.Freemarker.JSTL的性能对比后,我毅然决定放弃Struts标签了!效率太差…… S ...

随机推荐

  1. 二叉树神级遍历算法:morris遍历算法

    morris遍历的实质 建立一种机制,对于没有左子树的节点只到达一次,对于有左子树的节点会到达两次 morris遍历的实现原则 记作当前节点为cur. 如果cur无左孩子,cur向右移动(cur=cu ...

  2. TortoiseGit拉取出现“Could not open repository. libgit2 returned: repository path……”错误的解决办法

    TortoiseGit拉取出现"Could not open repository. libgit2 returned: repository path--"错误的解决办法 1.问 ...

  3. Mac启用或停用root用户

    1.选取苹果菜单 () >"系统偏好设置",然后点按"用户与群组"(或"帐户"). 2.点按 ,然后输入管理员名称和密码. 3.点按 ...

  4. Salt key 系统的接口

    官方文档:https://docs.saltstack.com/en/3000/ref/wheel/all/salt.wheel.key.html Wheel 系统包装了Salt key 系统,以编程 ...

  5. java http协议,添加header以及post传参,以及服务端获取

    一.客户端请求 public static String test(){ JSONObject obj = new JSONObject(); obj.put("cusName", ...

  6. autMan奥特曼机器人-青龙运行结果推送到autMan

    一.使用到的autMan云插件为"青龙推送autMan"或"JD未来活动定时运行" 二选一即可,两都不可同时安装,有冲突 青龙推送autMan:这个插件仅用于将 ...

  7. 解释 Git 的基本概念和使用方式

    Git是一种分布式版本控制系统,常用于管理和追踪软件开发项目的代码.以下是Git的基本概念和使用方式的解释: 仓库(Repository):Git管理代码的基本单位,可以理解为一个存储代码历史和版本信 ...

  8. 傻妞教程——对接mongoDB使用返佣系统

    使用docker安装mongo 1.安装 1.1 拉取mongo镜像 docker pull mongo:4.4 1.2 创建mongo数据持久化目录 mkdir -p /docker_volume/ ...

  9. CentOS7搭建CDH5.15.0集群

    CentOS7搭建CDH5.15.0集群 一.节点说明 节点 Server/Agent Memory master Server & agent 4G node1 agent 2G node2 ...

  10. win7系统安装mysql新建数据库/数据表及故障处理,安装mysql后net start mysql服务无法启动

    问题描述:win7系统安装mysql,安装mysql后net start mysql服务无法启动 1.下载mysql: 官网地址:https://dev.mysql.com/downloads/mys ...