Vanessa058117/Data-Acquisition-Tasks-UNAM-Motorsports
GitHub: Vanessa058117/Data-Acquisition-Tasks-UNAM-Motorsports
面向 FSAE 赛车的数据采集系统,提供符合赛事规则 T.4.2 的加速踏板安全验证与遥测动力学数据分析功能。
Stars: 0 | Forks: 0
# Data-Acquisition-Tasks-UNAM-Motorsports
遵循 FSAE 规则 T.4.2 的加速踏板安全系统(Accelerator Pedal Position Sensor - APPS)以及用于异常检测的遥测诊断听觉系统
## 遥测与动力学分析项目 - Formula SAE (DAQ)
本代码库包含为 Formula SAE 单座赛车的数据采集 (DAQ) 与遥测系统开发的脚本。主要目标是可视化、过滤和分析赛车的动力学数据,重点关注验证安全规则 T.4.2(APPS/制动合理性)以及加速度分析。
## 项目描述
两个主要组件:APPS 合理性验证系统和遥测诊断与异常检测系统。
## 环境要求
要运行这些脚本,必须安装 Python 以及以下库:
```
pip install streamlit pandas plotly numpy matplotlib scipy
```
# I. APPS 合理性验证系统
该系统旨在用于加速踏板位置传感器 (APPS) 的低级控制。其主要目的是通过读取两个冗余传感器来确保车辆安全,并在检测到异常时切断电机动力,从而符合 Formula SAE 的安全法规。
## 硬件连接
微控制器需要以下引脚配置:
引脚 A3:APPS 传感器 1 的模拟输入。
引脚 A2:APPS 传感器 2 的模拟输入。
引脚 7 (LED):警报或切断信号。必须将其连接到安全电路继电器(Shutdown Circuit)或电机控制器。
## 校准参数
原始模数转换器 (ADC) 的值已针对当前踏板的特定机械范围进行了校准:
传感器 1 (A3):
电阻 1 连接到 VCC,阻值为 6.6k 欧姆;电阻 2 连接到 GND,阻值为 1.1k 欧姆。
标称校准范围是 64 到 642。
传感器 2 (A2):
电阻 1 连接到 VCC,阻值为 12k 欧姆;电阻 2 连接到 GND,阻值为 2.2k 欧姆。
标称校准范围是 93 到 516。
偏差阈值:两个传感器之间允许的最大差异为 10%。
故障窗口:锁定电机前的容忍时间为 100 毫秒。
https://www.tinkercad.com/things/d8Y08h7xwDe-daq-um?sharecode=M_-Mv620Jn_04hugm20Hw1X1XUBqGgB-QnQPFsz5a1Q
## 处理流程
程序流 `loop` 实时执行以下安全任务:
1. 短路或断开检测
`sensorFueraDeRango` 函数会评估原始传感器读数是否低于预期最小值或高于最大值 15 个点以上。这可以立即检测到断线、断开或对地/VCC 短路(Short to GND/VCC)。
2. 信号映射与约束
使用 `map` 和 `constrain` 函数,代码将每个传感器的原始电信号值转换为踏板行程百分比(0% 到 100%)。最后将其除以 10,以获取用于遥测的高精度小数。
3. APPS 偏差检测
代码计算传感器 1 和传感器 2 百分比之间的绝对差值。如果差异大于 10%(定义的极限阈值),则会触发即将发生的故障状态。
4. 故障窗口计时器
为了避免由快速电噪声引起的误报,系统会在故障开始时记录时间戳 (`millis()`)。只有当偏差持续存在且无中断地超过 100 毫秒时,系统才会采取行动。
5. 安全锁定
如果故障超过了规定的时间窗口,`motorBloqueado` 变量将变为 (`true`),并且引脚 7 将被激活 (`HIGH`) 以断开安全电路。系统进入锁定状态,此时它将停止读取踏板数据,并需要手动重置微控制器(关闭并重新打开汽车电源)才能恢复运行。
## 串口监视与使用
要可视化实时数据并校准传感器:
1. 将 Arduino 板连接到计算机。
2. 上传代码。
3. 打开串口监视器,并将波特率设置为 115200 波特。
控制台将以以下格式持续输出数据流,这对于调试或发送到遥测板 (DAQ) 非常有用:
如果发生持续故障,控制台将停止打印遥测数据,并重复显示:
# II. 遥测诊断与异常检测
**文件:** `script_analysis_main.py`
该脚本侧重于清理传感器数据,并提取动力学指标(G 力)以及结构或安全故障信息。
**处理流程:**
1. 噪声过滤(巴特沃斯滤波器):单座赛车中的惯性传感器会吸收大量的底盘和发动机振动。代码使用 `scipy.signal` 创建了一个低通滤波器(截止频率 5 Hz,4 阶),用于清理横向加速度 (`accel_y`) 和纵向加速度 (`accel_x`)。
2. G 力计算:结合 numpy 使用勾股定理 (`np.sqrt(x^2 + y^2)`),从原始信号和滤波后的信号中提取合力大小(G Mag),以比较 G 力峰值。
3. G-G 图:使用 matplotlib 生成散点图。
4. 传感器掉线检测:执行对绝对零值 (`accel_x == 0.0`) 的高效搜索,在实际场景中,这通常表明连接丢失、传感器电源掉电或数据总线饱和,系统会打印出发生故障的精确时刻。
5. 独立合理性检测:该代码块通过将错误进行分组(使用 `.shift().cumsum()`)来隔离“事件”(即错误连续无中断发生的代码块)。如果错误块持续超过 10 个连续的时间记录,它将触发控制台警报,提示在哪些秒之间发生了踏板合理性故障。
## II.I. 交互式遥测仪表板
**文件:** `app.py`
该脚本创建了一个交互式的 Web 应用程序,允许工程师检查特定时间窗口内的踏板行为。
## 初始配置
1. 缓存:配置 Streamlit 页面,并使用 `@st.cache_data` 仅加载一次 CSV,从而优化性能。
2. 合理性验证:Formula SAE 规则规定,如果驾驶员同时加速(Throttle > 90%)和制动(Brake > 90%)并持续一段时间(在本例中,通过 10 个样本的滚动窗口进行验证),系统必须切断动力。代码创建了一个 `plausibility_error` 列来标记这些违规行为。
3. 时间导航:滑块 (`st.slider`) 允许在整个遥测持续时间内进行导航浏览。
4. 动态窗口:为避免图表过于杂乱,代码截取了 3 秒的时间段(从 `t_actual` 到 `t_actual + 3.0`)用于详细分析。
5. 视觉警报:使用 `st.error` 和 `st.success`,如果当前窗口内发生合理性违规,仪表板会立即在屏幕上显示警告。
6. Plotly 图表:构建一个交互式图表(支持缩放、悬停),绘制节气门开度百分比和制动压力随时间的变化,以便更直观地识别异常。
## 命令
1. 要运行分析并获取 G-G 图:
在终端中运行:
python script_analysis_main.py
2. 要启动交互式仪表板:
在终端中运行:
streamlit run telemetry_dashboard.py
https://www.tinkercad.com/things/d8Y08h7xwDe-daq-um?sharecode=M_-Mv620Jn_04hugm20Hw1X1XUBqGgB-QnQPFsz5a1Q
## 处理流程
程序流 `loop` 实时执行以下安全任务:
1. 短路或断开检测
`sensorFueraDeRango` 函数会评估原始传感器读数是否低于预期最小值或高于最大值 15 个点以上。这可以立即检测到断线、断开或对地/VCC 短路(Short to GND/VCC)。
2. 信号映射与约束
使用 `map` 和 `constrain` 函数,代码将每个传感器的原始电信号值转换为踏板行程百分比(0% 到 100%)。最后将其除以 10,以获取用于遥测的高精度小数。
3. APPS 偏差检测
代码计算传感器 1 和传感器 2 百分比之间的绝对差值。如果差异大于 10%(定义的极限阈值),则会触发即将发生的故障状态。
4. 故障窗口计时器
为了避免由快速电噪声引起的误报,系统会在故障开始时记录时间戳 (`millis()`)。只有当偏差持续存在且无中断地超过 100 毫秒时,系统才会采取行动。
5. 安全锁定
如果故障超过了规定的时间窗口,`motorBloqueado` 变量将变为 (`true`),并且引脚 7 将被激活 (`HIGH`) 以断开安全电路。系统进入锁定状态,此时它将停止读取踏板数据,并需要手动重置微控制器(关闭并重新打开汽车电源)才能恢复运行。
## 串口监视与使用
要可视化实时数据并校准传感器:
1. 将 Arduino 板连接到计算机。
2. 上传代码。
3. 打开串口监视器,并将波特率设置为 115200 波特。
控制台将以以下格式持续输出数据流,这对于调试或发送到遥测板 (DAQ) 非常有用:
如果发生持续故障,控制台将停止打印遥测数据,并重复显示:
# II. 遥测诊断与异常检测
**文件:** `script_analysis_main.py`
该脚本侧重于清理传感器数据,并提取动力学指标(G 力)以及结构或安全故障信息。
**处理流程:**
1. 噪声过滤(巴特沃斯滤波器):单座赛车中的惯性传感器会吸收大量的底盘和发动机振动。代码使用 `scipy.signal` 创建了一个低通滤波器(截止频率 5 Hz,4 阶),用于清理横向加速度 (`accel_y`) 和纵向加速度 (`accel_x`)。
2. G 力计算:结合 numpy 使用勾股定理 (`np.sqrt(x^2 + y^2)`),从原始信号和滤波后的信号中提取合力大小(G Mag),以比较 G 力峰值。
3. G-G 图:使用 matplotlib 生成散点图。
4. 传感器掉线检测:执行对绝对零值 (`accel_x == 0.0`) 的高效搜索,在实际场景中,这通常表明连接丢失、传感器电源掉电或数据总线饱和,系统会打印出发生故障的精确时刻。
5. 独立合理性检测:该代码块通过将错误进行分组(使用 `.shift().cumsum()`)来隔离“事件”(即错误连续无中断发生的代码块)。如果错误块持续超过 10 个连续的时间记录,它将触发控制台警报,提示在哪些秒之间发生了踏板合理性故障。
## II.I. 交互式遥测仪表板
**文件:** `app.py`
该脚本创建了一个交互式的 Web 应用程序,允许工程师检查特定时间窗口内的踏板行为。
## 初始配置
1. 缓存:配置 Streamlit 页面,并使用 `@st.cache_data` 仅加载一次 CSV,从而优化性能。
2. 合理性验证:Formula SAE 规则规定,如果驾驶员同时加速(Throttle > 90%)和制动(Brake > 90%)并持续一段时间(在本例中,通过 10 个样本的滚动窗口进行验证),系统必须切断动力。代码创建了一个 `plausibility_error` 列来标记这些违规行为。
3. 时间导航:滑块 (`st.slider`) 允许在整个遥测持续时间内进行导航浏览。
4. 动态窗口:为避免图表过于杂乱,代码截取了 3 秒的时间段(从 `t_actual` 到 `t_actual + 3.0`)用于详细分析。
5. 视觉警报:使用 `st.error` 和 `st.success`,如果当前窗口内发生合理性违规,仪表板会立即在屏幕上显示警告。
6. Plotly 图表:构建一个交互式图表(支持缩放、悬停),绘制节气门开度百分比和制动压力随时间的变化,以便更直观地识别异常。
## 命令
1. 要运行分析并获取 G-G 图:
在终端中运行:
python script_analysis_main.py
2. 要启动交互式仪表板:
在终端中运行:
streamlit run telemetry_dashboard.py标签:Kubernetes, Python, 传感器校验, 命令控制, 嵌入式开发, 异常检测, 数据采集, 无后门, 赛车电子系统, 逆向工具