第四天 从CAN总线到Spark/Flink实时处理
前言
在智能网联汽车快速发展的今天,每辆汽车每天产生的数据量高达数GB。这些数据蕴藏着驾驶行为、车辆健康、道路状况等宝贵信息。本文将带您从零开始,系统学习车辆数据采集与分析的全流程技术体系,包含:
- CAN总线数据解析与采集
- Telematics数据获取方法
- 使用Spark/Flink进行实时分析
- 典型行业应用案例
文章配套Python/Java代码示例,并提供完整的学习路径建议。无论您是汽车工程师还是大数据开发者,都能从中获得可直接落地的技术方案。
一、车辆数据采集基础
1.1 CAN总线协议解析
CAN(Controller Area Network)是车辆内部ECU(电子控制单元)的标准通信协议。其物理层采用双绞线传输,数据链路层使用CSMA/CA机制。
典型CAN数据帧结构:
CAN ID (11/29位) | 数据长度码DLC (4位) | 数据字段 (0-64位) | CRC校验 (15位)
Python解析示例:
import canbus = can.interface.Bus(channel='can0', bustype='socketcan')
for msg in bus:print(f"ID:{msg.arbitration_id} Data:{msg.data.hex()}")
1.2 Telematics数据采集
Telematics系统通过GPS+蜂窝网络实现车辆联网,主要数据类型:
数据类型 | 采集频率 | 典型内容 |
---|---|---|
位置数据 | 1Hz | 经纬度、速度、方向 |
诊断数据 | 0.1Hz | 故障码、电池状态、里程数 |
驾驶行为数据 | 事件触发 | 急加速、急刹车、急转弯 |
OBD-II数据采集代码:
// 使用ELM327适配器读取数据
ATZ // 重置适配器
ATSP0 // 自动协议检测
010C // 读取发动机转速
二、大数据处理技术选型
2.1 Spark vs Flink对比
特性 | Apache Spark | Apache Flink |
---|---|---|
处理模式 | 微批处理 | 真正的流处理 |
延迟 | 秒级 | 毫秒级 |
状态管理 | 需要额外处理 | 内置状态管理 |
典型应用场景 | 离线分析、ETL | 实时监控、CEP |
2.2 实时处理架构设计
[数据源] --> [Kafka] --> [Flink实时处理] --> [Redis/HBase] --> [可视化大屏]|--> [HDFS冷存储]
三、实战:实时驾驶行为分析
3.1 Flink流处理实现
数据流拓扑:
DataStream<CanMessage> rawStream = env.addSource(new KafkaSource()).keyBy(msg -> msg.vehicleId);// 窗口统计
DataStream<DriverBehavior> analysisStream = rawStream.window(TumblingEventTimeWindows.of(Time.minutes(5))).process(new BehaviorAnalyzer());// 复杂事件处理
Pattern<CanMessage, ?> pattern = Pattern.<CanMessage>begin("start").where(msg -> msg.speed > 120).next("brake").where(msg -> msg.brakePressure > 80);CEP.pattern(rawStream, pattern).select(new OverspeedAlert());
3.2 Spark离线分析示例
急加速行为分析:
val df = spark.read.parquet("hdfs:///telematics").filter($"speed" > 80)val accelerations = df.groupBy(window($"timestamp", "10 minutes")).agg(count(when($"accel_pedal" > 90, 1)).as("hard_accels"),avg($"speed").as("avg_speed")).orderBy(desc("hard_accels"))
四、行业应用案例
4.1 实时故障预警系统
- 特征提取:滑动窗口统计(1分钟均值/方差)
- 模型部署:TensorFlow模型嵌入Flink
- 报警触发:CEP检测连续异常
4.2 驾驶评分系统
评分维度:
- 平稳性(60%) 急加速/刹车/转弯次数
- 经济性(30%) 平均转速、刹车时长
- 合规性(10%) 超速、疲劳驾驶
相关文章:
第四天 从CAN总线到Spark/Flink实时处理
前言 在智能网联汽车快速发展的今天,每辆汽车每天产生的数据量高达数GB。这些数据蕴藏着驾驶行为、车辆健康、道路状况等宝贵信息。本文将带您从零开始,系统学习车辆数据采集与分析的全流程技术体系,包含: CAN总线数据解析与采集…...
pandas中的数据聚合函数:`pivot_table` 和 `groupby`有啥不同?
pivot_table 和 groupby 是 pandas 中两种常用的数据聚合方法,它们都能实现数据分组和汇总,但在使用方式和输出结构上有显著区别。 0. 基本介绍 groupby分组聚合 groupby 是 Pandas 库中的一个功能强大的方法,用于根据一个或多个列对数据进…...
AI客服问答自动生成文章(基于deepseek实现)
小编一直在用AI做网站平台文章的润色或者二创。一直有一个想法,在自己网站加一个AI智能客服,通过文心或者deepseek来智能回答网友提出的问题,这样就能减少很多人工回复的麻烦,提高互动效率。 开发背景 其实很多网友提出的问题非…...
镜头内常见的马达类型(私人笔记)
① 螺杆式马达 驱动来源:机身内马达。镜头尾部有一个接收“螺杆”的接口,通过机械传动带动镜头对焦组。缺点:慢、吵、不能用于无机身马达的相机。✅ 典型镜头:尼康 AF、AF-D 系列;美能达老镜头。尼康传统的AF镜头通过…...
从 JMS 到 ActiveMQ:API 设计与扩展机制分析(一)
引言 在当今的分布式系统开发中,消息中间件扮演着举足轻重的角色,它为应用程序之间提供了可靠的异步通信机制。JMS(Java Message Service)作为 Java 平台上的消息服务规范,定义了一套通用的 API,使得开发者…...
第J7周:ResNeXt解析
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标 具体实现 (一)环境 语言环境:Python 3.10 编 译 器: PyCharm 框 架: Tensorflow (二)具体…...
机器学习-无量纲化与特征降维(一)
一.无量纲化-预处理 无量纲,即没有单位的数据 无量纲化包括"归一化"和"标准化",这样做有什么用呢?假设用欧式距离计算一个公司员工之间的差距,有身高(m)、体重(kg&#x…...
Shiro(八):JWT介绍
1、什么是JWT? JWT(JSON Web Token,JSON Web令牌)是一种开放标准(RFC 7519),用于在网络应 用环境间安全地传递声明(claims)作为JSON对象;JWT会按指定的加密算…...
linux0.11内核源码修仙传第十六章——获取硬盘信息
🚀 前言 书接第十四章:linux0.11内核源码修仙传第十四章——进程调度之fork函数,在这一节博客中已经通过fork进程创建了一个新的进程1,并且可以被调度,接下来接着主线继续走下去。希望各位给个三连,拜托啦&…...
画家沈燕的山水实验:在传统皴法里植入时代密码
导语:当宋代山水遇上AI算法,当青绿颜料邂逅生态数据,沈燕在宣纸与人工智能的交界处,开启了一场关于水墨基因的“基因突变”实验。她的画笔既似考古学家的洛阳铲,又似未来学家的扫描仪,在古今对话中重构山水…...
聊聊四种实时通信技术:短轮询、长轮询、WebSocket 和 SSE
这篇文章,我们聊聊 四种实时通信技术:短轮询、长轮询、WebSocket 和 SSE 。 1 短轮询 浏览器 定时(如每秒)向服务器发送 HTTP 请求,服务器立即返回当前数据(无论是否有更新)。 优点࿱…...
国联股份卫多多与北京经纬智诚签署战略合作协议
5月9日,北京经纬智诚电子商务有限公司(以下简称“经纬智诚”)总经理王学文一行到访国联股份卫多多,同卫多多/纸多多副总裁、产发部总经理段任飞,卫多多机器人产业链总经理郭碧波展开深入交流,双方就未来合作…...
在 Envoy 的配置文件中出现的 “@type“ 字段
在 Envoy 的配置文件中出现的 "type" 字段是 Protocol Buffers(Protobuf)的 JSON/YAML 编码规范的一部分,属于 Typed Struct 的表示方式。它的作用是明确指定当前配置对象的 Protobuf 类型,以便 Envoy 正确解析配置。以…...
编译原理实验 之 语法分析程序自动生成工具Yacc实验
文章目录 实验环境准备复现实验例子分析总的文件架构实验任务 什么是Yacc Yacc(Yet Another Compiler Compiler)是一个语法分析程序自动生成工具,Yacc实验通常是在编译原理相关课程中进行的实践项目,旨在让学生深入理解编译器的语法分析阶段以及掌握Yac…...
【大模型】LLM概念相关问题(上)
1.主流的大语言模型 截至2025年,主流的大型语言模型(LLM)体系涵盖了多个国家和机构的成果,具有多样的架构设计、参数规模和应用场景。以下是一些具有代表性的开源和闭源 LLM 体系: 🇺🇸 OpenA…...
AWS IoT Core与MSK集成实战:打造高可靠实时IoT数据管道
在物联网快速发展的今天,如何高效、安全地处理海量设备数据成为企业面临的一大挑战。本文将带您深入探索AWS IoT Core与Amazon MSK(Managed Streaming for Apache Kafka)的集成方案,手把手教您搭建一个可靠、可扩展的实时IoT数据处理管道。无论您是IoT开发者、大数据工程师还是…...
智慧交通-车门开关状态检测数据集VOC+YOLO格式1006张2类
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1006 标注数量(xml文件个数):1006 标注数量(txt文件个数):1006 …...
【传感器】代码——DHT11温湿度传感器
目录 一、代码流程 二、模块.c代码 三、模块.h代码 四、主函数代码 一、代码流程 1.模块复位:主机发送开始通信时序,从机做出响应(需检测是否有响应) 2.MCU读取1Bit数据 3.MCU读取1Byte数据 4.MCU读取8Byte数据组成完整Dat…...
MySQL 的事务(Transaction)
1. 什么是事务? 事务是一组原子性的数据库操作序列,这些操作要么全部执行成功,要么全部失败回滚。事务的目的是确保数据库从一个一致状态转换到另一个一致状态,即使在执行过程中发生错误或中断。 …...
vue知识点总结 依赖注入 动态组件 异步加载
一 依赖注入 使用场景:当需要多层组件需要传值 如 祖宗-》父亲-》儿子-》孙子如祖宗的数据需要直接传给孙子 在祖宗组件中写: data(){return {}} provide(){ return {shujukey:数据值 } }在孙子组件中接收,模板代码中直接使用{{shujukey}}获取数据 dat…...
【软件设计师:存储】16.计算机存储系统
一、主存储器 存储器是计算机系统中的记忆设备,用来存放程序和数据。 计算机中全部信息,包括输入的原始数据、计算机程序、中间运 行结果和最终运行结果都保存在存储器中。 存储器分为: 寄存器Cache(高速缓冲存储器)主存储器辅存储器一、存储器的存取方式 二、存储器的性…...
快速开发-基于gin的中间件web项目开发
一、概述 在 Gin 框架中,中间件(Middleware)是一种在处理 HTTP 请求之前或之后执行的函数。使用中间件可以方便地实现诸如身份验证(Auth)、日志记录、请求限流等功能。 二、编写中间件 // 中间件 func StartCost1(c …...
耀圣-气动带刮刀硬密封法兰球阀:攻克颗粒高粘度介质的自清洁 “利器”
气动带刮刀硬密封法兰球阀:攻克颗粒高粘度介质的自清洁 “利器” 在化工、矿业、食品加工等行业中,带颗粒高粘度介质、料浆及高腐蚀性介质的输送与控制一直是行业难题。普通阀门极易因介质附着、颗粒堆积导致卡阻失效,密封面磨损加剧&#x…...
MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解
MySQL Elasticsearch:为什么要使用ES,使用场景与架构设计详解 前言一、MySQL Elasticsearch的背景与需求1.1 为什么要使用Elasticsearch(ES)?1.2 为什么MySQL在某些场景下不足以满足需求?1.3 MySQL Elas…...
【C语言】--指针超详解(三)
目录 一.数组名的理解 二.使用指针访问数组 三.一维数组传参的本质 四.冒泡排序 五.二级指针 六.指针数组 6.1--指针数组的定义 6.2--指针数组模拟二维数组 🔥个人主页:草莓熊Lotso的个人主页 🎬作者简介:C方向学习者 &…...
污水处理厂逆袭:Ethernet/IP 转 CANopen 开启“智净”时代
在我们的日常生活中,污水处理厂发挥着至关重要的作用,它们处理着城市污水,确保我们的水源安全。然而,这些关键设施的运行和管理并非易事,尤其是在数字化转型的大潮中。现在,我们有了一款创新的解决方案——…...
ROS导航局部路径规划算法
在导航功能包中,局部路径规划器的位置如图红框所示。它接受全局路径规划器生成的全局路径以及里程计信息和局部代价地图,最后输出速度控制信息 一、DWA(Dynamic Window Approach) 原理介绍 DWA 是一种基于动态窗口采样的局部路…...
《深挖Java中的对象生命周期与垃圾回收机制》
大家好呀!👋 今天我们要聊一个Java中超级重要的话题——对象的生命周期和垃圾回收机制。 一、先来认识Java世界的"居民"——对象 👶 在Java世界里,一切皆对象。就像现实世界中的人一样,每个Java对象也有自…...
Java——包装类
目录 3.5 包装类 3.5 包装类 有时需要把基本类型转换为对象。所有基本类型都有一个与之对应的类。这些类称为包装器/类。这些类是不可变类,即一旦构造了包装器/类,就不允许改变包装在其中的值。其次包装类还是final,不用可以被继承。 为什么要…...
【谭浩强】第七章第14题
实验结果:当M1时输出的结果 实验总结:用define定义要频繁使用的值可以节省时间;求完一门课平均成绩之后要让sum重新等于0;求最高分对应的学生和对应的课程要循环完一遍覆盖一遍r和c的值; 程序代码 #include <stdi…...
Linux 内核中的 security_sk_free:安全模块与 Socket 释放机制解析
引言 在 Linux 内核中,网络通信和进程间交互(IPC)的核心数据结构之一是 struct sock(即 socket)。其生命周期管理涉及复杂的资源分配与释放逻辑。本文聚焦于 security_sk_free 这一函数,探讨其作用、调用场景以及与安全模块的交互机制,并解答一个常见疑问:在单机间 TC…...
学习笔记:黑马程序员JavaWeb开发教程(2025.4.1)
11.10 案例-配置文件-yml配置文件 Yml语法: 数据格式: 11.11 案例-配置文件-ConfigurationProperties 配置项自动注入,需要保持KEY的属性名一样,需要在文件中加上Data注解,要将这个类交给IOC容器管理,使其成…...
深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件
文章目录 1 任务背景2 使用chatflow聊天流2.1 开始节点2.2 文档提取器2.3 LLM2.4 参数提取器2.5 代码执行2.6 直接回复2.7 应用展示3 生成html文件可视化图表3.1 使用workflow工作流3.1.1 LLM3.1.2 效果展示3.2 使用chatflow聊天流3.2.1 LLM3.2.2 效果展示4 参考附录分别使用聊…...
关于VScode的调试
调试代码要有这么几个工具:源代码、带调试符号的程序、MAP表,调试器。 在启动调试器之前,要首先编译带有符号表的程序,生成对应map。然后启动调试器。 不同的语言有不同的特性,比如解释型语言不需要编译成可执行程序…...
(x ^ 2 + 2y − 1) ^ 3 − x ^ 2 * y ^ 3 = 1
二元高次方程 EquationSolver20250509.java package math;import org.apache.commons.math3.analysis.MultivariateFunction; import org.apache.commons.math3.optim.InitialGuess; import org.apache.commons.math3.optim.MaxEval; import org.apache.commons.math3.optim.P…...
弹窗表单的使用,基于element-ui二次封装
el-dialog-form 介绍 基于element-ui封装的弹窗式表单组件 示例 git地址 https://gitee.com/chenfency/el-dialog-form.git 更新日志 2021-8-12 版本1.0.0 2021-8-17 优化组件,兼容element原组件所有Attributes及Events 2021-9-9 新增tip提示 安装教程 npm install …...
关系模式-无损连接和保持函数依赖的判断
1、怎样判断一个关系模式的分解是否是无损连接? 方法一:公式定理法 关系模式R<U,F>的一个分解具有无损连接的充分必要条件是: 或 方法二:表格法(常用与分解成3个及以上关系模式) a. 通过立一张j…...
Vmware 最新下载教程和安装教程,外带免下载文件
一、VMware 的简介 VMware 是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试 、部署新的应用程序的最佳解决方案。VMware可在一部实体机器上模拟完整的网络环境,以及可便于携带的虚拟机…...
开平机:从原理到实践的全面技术剖析
一、开平机核心模块技术解析 1. 校平辊系的力学建模与辊型设计 校平机精度核心在于辊系设计,需通过弹塑性力学模型计算变形量。典型校平辊配置参数: 辊径比:校平辊直径(D)与板材厚度(t)需满足…...
Edu教育邮箱申请2025年5月
各位好,这里是aigc创意人竹相左边 如你所见,这里是第3部分 现在是选择大学的学科专业 选专业的时候记得考虑一下当前的时间日期。 比如现在是夏天,所以你选秋天入学是合理的。...
文本框碰撞测试
1.核心代码: // 初始化舞台和变量 var stage, textField, bounds, velocity;function init() {// 创建舞台stage = new createjs.Stage("canvas");// 设置矩形边界bounds = {x: 50, y: 50, width: 400, height: 300};// 绘制边界矩形var border = new createjs.Shap…...
LeRobot 项目部署运行逻辑(六)——visualize_dataset_html.py/visualize_dataset.py
可视化脚本包括了两个方法:远程下载 huggingface 上的数据集和使用本地数据集 脚本主要使用两个: 目前来说,ACT 采集训练用的是统一时间长度的数据集,此外,这两个脚本最大的问题在于不能裁剪,这也是比较好…...
Python函数:从基础到进阶的完整指南
在Python编程中,函数是构建高效、可维护代码的核心工具。无论是开发Web应用、数据分析还是人工智能模型,函数都能将复杂逻辑模块化,提升代码复用率与团队协作效率。本文将从函数基础语法出发,深入探讨参数传递机制、高阶特性及最佳…...
图灵爬虫练习平台第七题千山鸟飞绝js逆向
题目七:千山鸟飞绝 还是先进入开发者模式,一进来还是一个无限debugger,直接右键点击一律不在此处停留 然后点击下一页,复制curl进行代码生成,然后就会发现加密内容是headers中的m,ts,还有参数中的x…...
使用Python和OpenCV实现实时人脸检测与识别
前言 在计算机视觉领域,人脸检测与识别是两个非常重要的任务。人脸检测是指在图像中定位人脸的位置,而人脸识别则是进一步识别出人脸的身份。随着深度学习的发展,这些任务的准确性和效率都有了显著提升。OpenCV是一个开源的计算机视觉库&…...
Excel实现单元格内容拼接
一、应用场景: 场景A:将多个单元格拼接,比如写测试用例时,将多个模块拼接,中间用“-”隔开 场景B:将某单元格内容插入另一单元格固定位置(例如在B1中添加A1的内容) 二、实际应用&a…...
C语言实现:打印素数、最大公约数
本片博客起源于作者在经历了学校的测试之后猛然发现自己居然忘记了一些比较基础的代码,因此写了本片博客加强记忆 以下算法仅供参考 打印素数 打印:0到200之间所有的素数 #define _CRT_SECURE_NO_WARNINGS#include<stdio.h> #include<math.h&…...
TDengine 在智慧油田领域的应用
简介 智慧油田,亦称为数字油田或智能油田,是一种采用尖端信息技术与先进装备的现代油田开发模式。该模式通过实时更新油气田层析图及动态生产数据,显著提高了油气田的开发效率与经济价值。 信息技术在此领域发挥着至关重要的作用࿰…...
将 iconfont 图标转换成element-plus也能使用的图标组件
在做项目时发现,element-plus的图标组件,不能像文档示例中那样使用 iconfont 的图标。经过研究发现,element-plus的图标封装成了vue组件,组件内容是一个svg,然后以组件的方式引入和调用图标。根据这个思路,…...
使用程序绘制中文字体——中文字体的参数化设计方案初探
目录 写在前面基本设计思路笔画骨架参数设计笔画风格参数设计起笔风格转角风格字重变化弯曲程度 字形的“组装拟合”基于骨架的结构调整笔画绘制二三事撇的两侧轮廓绘制——不是两条贝塞尔曲线那么简单转角的处理,怎样能显得不突兀?笔画骨架关键点的拖拽…...