台风来临前,
先看清树枝离电线还有多远
风树线把“照片中的静态距离”和“受风摆动时的动态距离”放进同一套研究框架:照片智能分析负责快速筛查,4×MPU6050树模与3D仿真负责连续观察摆动。二者是独立入口、互补证据,共同服务于树线风险预判。
本项目是研究与演示原型,结果用于辅助比较和风险提示,不替代电力巡检、专业测绘与安全鉴定。
把笼统的“树木可能碰线”,拆成可测量的问题
枝条生长、树体摆动和线路位置共同决定接触风险;只看静态照片,无法反映风中距离变化。
单张照片缺少连续运动,单个姿态传感器又无法直接给出树枝与电线的空间关系。
先用照片估算间隙、预测生长和模拟剪枝,再用四传感器树模观察不同枝干相对主干的持续摆动。
不是单一识别模型,而是一条可交互的证据链
从“看见”走到“量出”
照片功能不止框出目标,还继续完成树冠分割、骨架提取、枝尖识别、树线最小间隙和比例尺换算。
四传感器对应四根胶棒
CH0固定为主干;CH1~CH3通过拨动识别,让用户确认现实枝干与网页枝干的对应关系,避免接线顺序被写死。
数据留在本机
照片推理、视觉计算、Web Serial采集、Three.js渲染和CSV导出均在桌面浏览器内完成。
同一个网站中的两个独立功能
照片智能分析不需要传感器,适合快速筛查;3D风载实测不需要上传照片,适合连接实体树模做连续实验。在线分析台提供两个入口,用户可单独使用,也可将结论互相参照。
2.1 流程图
采用标准流程图符号呈现两个独立功能:圆角框表示开始或结束,矩形表示处理步骤,菱形表示条件判断,“否”分支返回相应步骤继续等待或重试。
照片智能分析流程
并初始化本地运行环境
是否就绪?
树木分割与电线提取
是否有效?
与最小间隙计算
输出风险结果
3D风载实测流程
和4块MPU6050
是否有效?
和通道方向修正
有效更新?
风载量级与CSV记录
本次实验?
2.2 软件基础设置信息
| 设置项 | 当前值 | 说明 |
|---|---|---|
| 网页技术 | HTML5、CSS3、原生JavaScript | 使用ES Modules组织照片分析与3D模块 |
| 构建工具 | Vite 8.1.5 | 构建项目介绍页和在线分析台两个界面 |
| 检测模型 | YOLOv8n ONNX | 当前类别为树木和电线杆 |
| 模型输入尺寸 | 640 × 640 | 推理前进行等比例缩放和填充 |
| 检测置信度 | 0.30 | 项目当前配置值 |
| NMS IOU | 0.45 | 用于抑制重复目标框 |
| 推理引擎 | ONNX Runtime Web 1.19.2 | WebGPU优先,WASM回退,资源由网站自托管 |
| 图像处理 | OpenCV.js 4.10 / WebAssembly | 用于分割、形态学处理和线段检测 |
| 3D渲染 | Three.js | 根据四路相对姿态持续重建树模运动 |
| 串口接口 | Web Serial API | 桌面Chrome/Edge在HTTPS环境中授权使用 |
| 数据与隐私 | 浏览器本地处理 | 照片和传感器数据默认不上传服务器 |
2.3 软件系统设置
| 设置分类 | 设置项 | 当前值 | 作用与边界 |
|---|---|---|---|
| 照片分析 | 最大工作分辨率 | 2200像素 | 避免大照片造成浏览器内存压力 |
| 电线杆参照高度 | 140 mm | 当前微缩场景的像素—毫米标定参数 | |
| 风险阈值 | 0 / 15 / 30 px | 触线、危险、警告的项目规则;毫米值随标定换算 | |
| 生长步数 | 5步 | 用于演示趋势,不代表长期实测预测 | |
| 运行库超时 | 60 000 ms | 加载失败后显示错误并允许重试 | |
| 传感器与3D | 串口格式 | 115200-8-N-1 | CH340和HC-05使用相同格式 |
| A2协议结构 | A2,seq,validMask,ch0Pitch,ch0Roll,...,ch3Pitch,ch3Roll | 包含帧序号、四通道有效位与各通道俯仰/横滚角 | |
| 姿态滤波 | 互补滤波 α=0.96 | 融合加速度倾角与陀螺仪积分 | |
| 零点校准 | 20个完整有效帧 | 求平均并消除传感器安装初始姿态 | |
| 数据超时 | 700 ms | 超时即标记数据过时,避免旧结果冒充实时值 | |
| 模型尺寸 | 主干170 mm;枝干115 / 85 / 85 mm | 对应当前实物树模,并允许界面调整 | |
| 通道映射 | CH0主干;CH1~CH3拨动识别 | 用户确认现实枝干与传感器通道关系 | |
| 资源路径 | AI / 视觉运行库 | /models/tree.onnx/vendor/opencv/opencv.js | 静态资源由网站自托管 |
| 3D运行库 | /vendor/three/three.module.js | 由在线分析台按需加载 |
系统设置来自当前网页与STM32实现。可调参数用于匹配实体模型;风力相关参数在完成真机标定前仍属于量级估算。
2.4 软件设计
| 功能 | 模块/文件 | 设计职责 | 输入与输出 |
|---|---|---|---|
| 照片智能分析 | analyze.js | 任务调度、状态管理和结果呈现 | 照片 → 完整分析结果 |
yolo.js | 加载ONNX模型并执行树木/电线杆检测 | 图像张量 → 目标框 | |
vision.js | 树木分割、电线检测、比例尺和间隙测量 | 目标框/图像 → 树线间隙 | |
skeleton.js | 骨架细化并建立枝段、枝尖和分叉关系 | 树木掩膜 → 骨架图 | |
growth.js | 按加权方向进行五步启发式外推 | 枝尖/方向 → 生长路径 | |
prune.js | 处理划线或圈选剪枝并重新计算指标 | 剪枝操作 → 前后风险对比 | |
| 3D风载实测 | main.c | 四通道轮询、互补滤波、故障恢复和A2输出 | 六轴原始量 → A2姿态帧 |
MPU6050.c | 配置量程并读取加速度与角速度 | I²C寄存器 → 传感器数据 | |
tca9548a.c | 选择复用器通道,隔离四个相同地址设备 | 通道号 → 独立I²C链路 | |
serial.js | 授权端口、累积字符流并按行持续解析 | 串口字符 → 完整数据行 | |
sensor_runtime.js | 检查有效位、通道映射和相对主干姿态 | A2帧 → 可用枝干姿态 | |
wind3d.js | 管理3D场景、实时指标、参数和CSV记录 | 相对姿态 → 3D/间隙/风载 | |
tree_visual.js | 生成树干、树枝、树叶和树冠视觉层 | 传感器骨架 → 树木外观 |
2.5 硬件照片与组成

| 硬件 | 数量/规格 | 功能与安装位置 |
|---|---|---|
| STM32F103C8T6 | 1块,72 MHz | 负责四路采集、互补滤波、协议封装和UART输出 |
| PCA9548A / TCA9548A | 1块,8路I²C复用 | 隔离四块地址相同的MPU6050 |
| MPU6050 | 4块 | CH0安装在主干;其余三块安装在三根枝干端部 |
| 胶棒主干 | 170 mm | 模拟树木主干,作为枝干相对姿态参考 |
| 胶棒枝干 | 115 / 85 / 85 mm | 三根枝干的通道由拨动识别后人工确认 |
| CH340 / HC-05 | 有线 / 蓝牙SPP | 把相同的115200波特率A2数据帧传入浏览器 |
尺寸:主干 170 mm;三根枝干分别为 115 mm、85 mm、85 mm。通道:CH0 固定为主干;CH1 到 CH3 通过拨动识别后由用户确认。硬件照片只用于项目介绍,3D模型与运动逻辑未修改。
照片智能分析
这是一条完全在浏览器本地运行的视觉测量链。它先定位树木和电线杆,再从像素结构中提取树枝、电线和最小间隙,最后提供生长与剪枝的交互式比较。
照片智能分析流程
- 01选择照片读取本地图片,不上传服务器
- 02目标检测YOLOv8n定位树与电线杆
- 03树木分割结合检测框与颜色特征提取树体
- 04骨架细化识别枝段、枝尖与分叉结构
- 05电线检测形态学增强并拟合暗色细线
- 06尺度标定用参考杆高度完成像素到毫米换算
- 07风险计算寻找枝尖到电线的最小间隙
- 08生长与剪枝外推趋势并重算剪枝后的指标
3D风载实测仿真
实体模型由一根主干、三根枝干和四块MPU6050组成。STM32持续采集姿态,网页按通道映射驱动3D树模,实时更新枝端与电线的距离,并给出风载量级估算。
3D风载实测流程
- 01硬件初始化启动STM32、I²C、串口和复用器
- 02四通道采集循环读取CH0~CH3六轴数据
- 03姿态滤波融合加速度倾角与陀螺仪积分
- 04协议封装生成带序号和有效位的A2帧
- 05持续串口解析网页逐行读取、校验掉帧与超时
- 06校准与映射零点校准、拨动识别和方向修正
- 073D同步以相对主干角度平滑驱动树模
- 08评估与记录持续更新间隙、风载与CSV记录
科学原理:测距离与摆角,不直接“测台风”
目标检测与视觉测量
YOLOv8n负责定位树木与电线杆;HSV颜色分割、Zhang-Suen骨架细化、黑帽形态学和概率霍夫变换继续提取枝条与细电线,以参考杆高度完成像素到毫米标定。
生长趋势与剪枝重算
生长方向按“0.4·向上 + 0.3·远离重心 + 0.3·原枝方向”逐段外推;剪枝后在剩余骨架上重算重心、枝尖和最小距离。这是交互式启发模型,不是长期生长预测。
MPU6050互补滤波
加速度计提供长期倾角参考,陀螺仪提供短时平滑变化。α=0.96时,96%来自陀螺仪积分,4%来自加速度倾角校正;3D姿态主要使用pitch与roll。
相对姿态与悬臂梁近似
枝干姿态先减去主干姿态,避免整棵树整体倾斜被重复计算;再把胶棒近似为等截面悬臂梁,由摆角反推端部等效力并换算风速量级。
姿态融合与风载换算
端部集中力下,悬臂梁端转角满足 θ = FL²/2EI,所以 F = 2EIθ/L²。由迎风面积A得到风压,再按空气密度ρ换算风速。E、直径、胶棒根数和面积都可在分析台调整,当前结果只表示量级。
F = 2·E·I·θ / L²
v = √(2F / ρ·A)
算法、器件与标准来源
从传感器到浏览器的系统实现
| 层级 | 当前设置 | 作用 |
|---|---|---|
| 固件平台 | C、STM32 HAL、Keil MDK | 采集、滤波、故障恢复和UART输出 |
| 控制器 | STM32F103C8T6,72 MHz | 轮询四路传感器并封装连续数据 |
| 传感器总线 | I²C + PCA9548A/TCA9548A | 解决四块MPU6050地址相同的问题 |
| 串口链路 | 115200-8-N-1;CH340或HC-05 | 有线和蓝牙使用相同A2数据格式 |
| 网页环境 | JavaScript ES Modules、Three.js、Web Serial | 本地解析、持续渲染、交互和导出 |
| 浏览器要求 | 桌面Chrome/Edge、HTTPS | Web Serial需要安全上下文与用户授权 |
| 零点校准 | 20个完整有效帧求平均 | 消除传感器安装初始姿态 |
| 超时判断 | 700 ms | 未收到新帧时标记数据过时,避免旧结果伪装实时 |
| 会话记录 | 最高20 Hz写入内存 | 导出姿态、间隙、风载和等级CSV |
隐私与数据:照片、串口数据和实验记录默认只在浏览器当前会话中处理;网站不建立云端历史库。
明确区分“已运行”“已实现”和“已证明”
上传、检测、骨架、间隙、生长预测和剪枝重算已在网页端跑通;仍需扩大真实场景样本。
A2帧、有效位、掉帧统计、超时判断、通道识别、相对姿态和3D连续更新均已实现。
需要用量角器、固定间距标尺和可重复风源,对角度、距离和风速估算分别标定并记录误差。
将各胶棒固定在已知角度,比较量角器读数、串口姿态和3D显示。
设置多组已知枝线间距,比较实物标尺与网页最小距离。
同一动作重复多次,统计峰值、稳态值和回零偏差。
用可控风源和参考风速仪修正弹性模量、迎风面积等参数。
当前边界与下一步
当前边界
- 照片尺度受拍摄透视、遮挡和参考物误差影响
- MPU6050没有磁力计,yaw长期积分会漂移
- 胶棒被简化为悬臂梁,无法代表所有真实树种
- 风险分级是研究提示,不是电力安全规范判定
下一步实验
- 建立带真实距离标注的照片测试集
- 完成四通道角度、动态距离与丢帧测试
- 用参考风速仪标定风载参数并报告误差范围
- 记录不同枝长、安装高度和风向下的对比结果