python的工业过程控制场景模拟第九十八篇:巡检机器人路径热点分析,自动提高频繁故障管道区域巡检频次。
巡检机器人路径热点分析与动态频次调整 —— 基于贝叶斯更新与势场规划“那年冬天蒸汽管廊连续爆管三次每次都是巡检机器人刚扫完一圈半小时后就漏了。后来我们在上位机里加了故障热点记忆模块让机器人像老巡检工一样‘哪里漏过检哪里’对高频故障区自动加密巡检再没发生过漏检。”—— 哈尔滨工程大学《工业过程控制》课程核心思想延伸一、实际应用场景描述在石化、电力、供热等长输管线场景巡检机器人沿固定轨道或自由路径执行任务。但故障并非均匀分布┌──────────────────────────────────────────────┐│ 巡检机器人动态路径优化系统 ││ ││ [上位机智能调度中枢] ││ │ 故障统计 / 热度计算 / 路径重规划 ││ ▼ ││ ┌────────────────────────────┐ ││ │ 故障热点分析引擎 │ ││ │ ┌──────────────────────┐ │ ││ │ │ 1. 故障数据库 │ │ ││ │ │ (位置时间类型) │ │ ││ │ └──────────────────────┘ │ ││ │ ┌──────────────────────┐ │ ││ │ │ 2. 贝叶斯概率更新 │ │ ││ │ │ (先验似然→后验) │ │ ││ │ └──────────────────────┘ │ ││ │ ┌──────────────────────┐ │ ││ │ │ 3. 热力衰减模型 │ │ ││ │ │ (时间指数衰减) │ │ ││ │ └──────────────────────┘ │ ││ └────────────┬───────────────┘ ││ │ 区域权重/频次指令 ││ ┌───────┴───────┐ ││ ▼ ▼ ││ ┌─────────┐ ┌─────────┐ ││ │ 路径规划器 │ │ 任务调度器 │ ││ │ (A*势场) │ │ (动态周期) │ ││ │ • 基础路径 │ │ • 热点加密 │ ││ │ • 斥力场 │ │ • 常规稀疏 │ ││ │ • 引力场 │ │ • 紧急插队 │ ││ └────┬────┘ └────┬────┘ ││ │ 融合路径 │ 执行指令 ││ ▼ ▼ ││ ┌────────────────────────────┐ ││ │ 巡检机器人执行层 │ ││ │ • SLAM定位 里程计 │ ││ │ • 红外热成像 气体传感 │ ││ │ • 视频采集 AI识别 │ ││ └────────────┬───────────────┘ ││ │ 检测数据与状态 ││ ▼ ││ ┌────────────────────────────┐ ││ │ 管廊环境 (物理世界) │ ││ │ 热点区A (法兰泄漏史) │ ││ │ 温升区B (保温层破损) │ ││ │ 正常区C (长期稳定) │ ││ └───────────────────────────┘ ││ ││ 核心: 贝叶斯故障预测 动态势场路径规划 │└──────────────────────────────────────────────┘传统固定周期巡检 vs 动态热点加密维度 固定周期巡检 动态热点加密故障发现 ❌ 滞后可能刚巡检完就出事 ✅ 实时热点区高频覆盖资源分配 ❌ 平均主义浪费算力 ✅ 重点突破效率最大化适应性 ❌ 僵化不学历史 ✅ 贝叶斯学习越用越准安全性 ❌ 隐患区可能漏检 ✅ 高风险区自动加密二、引入痛点2.1 现场的真实困境场景 现场发生了什么 根因“刚巡检完就漏” “机器人上午9点刚过10点就喷了” 固定周期无记忆“遍地撒网” “每天跑20公里真正隐患点才3处” 无差别巡检“热点盲区” “某法兰半年漏3次仍按常规频次” 无统计分析“告警疲劳” “每天几百条告警分不清主次” 无风险分级“人力浪费” “老师傅凭经验加密新人不懂” 知识未固化2.2 核心矛盾巡检资源是有限的而管线的风险分布是不均匀的。 传统“一刀切”的固定周期巡检既不能保证高风险区域的覆盖率又浪费了大量算力在低风险区域。解决方案是基于历史故障数据的贝叶斯概率更新构建“故障热力图”再通过人工势场法Artificial Potential Field将热力值转化为路径规划的斥力/引力实现“高风险区自动吸引机器人加密巡检低风险区自然排斥减少频次”。2.3 我们要解决什么用一段精简的 Python 程序构建一个巡检机器人动态路径优化仿真系统实现1. 故障数据建模 —— 记录位置、时间、类型、置信度2. 贝叶斯概率更新 —— 根据新故障动态修正热点概率3. 热力衰减模型 —— 旧故障随时间指数衰减4. 动态势场规划 —— 热点区产生“引力”引导机器人靠近5. 可视化 —— 展示热力图、路径演变、频次变化三、核心逻辑讲解3.1 理论基础贝叶斯更新与热力衰减本工具基于哈工程《工业过程控制》第九章“统计过程控制”和第六章“状态反馈与估计”① 贝叶斯故障概率更新P(Fault|Data) \frac{P(Data|Fault) \cdot P(Fault)}{P(Data)}离散形式网格化管线P_{grid}^{(t)} \frac{P(Data|Fault) \cdot P_{grid}^{(t-1)}}{P(Data)}其中- P_{grid}^{(t)} t时刻该网格的故障概率后验- P_{grid}^{(t-1)} 上一时刻概率先验- P(Data|Fault) 似然由传感器置信度决定② 指数衰减模型遗忘机制为防止历史数据无限累积引入时间衰减P_{grid}^{(t)} P_{grid}^{(t-1)} \cdot e^{-\lambda \Delta t}其中 \lambda 为衰减系数表示“旧故障的记忆半衰期”。③ 巡检频次决策Freq_{grid} Freq_{base} \cdot (1 k \cdot P_{grid})高风险区 P_{grid} \to 1 频次显著提高低风险区接近基础频次。3.2 动态势场路径规划将热力图转化为势场- 引力场Attractive Field热点区产生吸引力引导机器人前往- 斥力场Repulsive Field已覆盖过的区域产生微弱斥力避免过度重复U_{total}(x,y) U_{att}(x,y) U_{rep}(x,y)U_{att} \frac{1}{2} k_{att} \cdot P(x,y) \cdot d^2_{goal}U_{rep} \begin{cases}\frac{1}{2}k_{rep}(\frac{1}{d}-\frac{1}{d_0})^2 d \le d_0 \\0 d d_0\end{cases}四、代码讲解面向对象设计4.1 类结构总览类名 职责 设计模式FaultRecord 故障记录dataclass 值对象GridCell 网格单元状态概率 观察者模式PipelineMap 管线地图网格化 聚合根BayesianUpdater 贝叶斯概率更新器 策略模式HeatmapDecayer 热力衰减器 策略模式PathPlanner 动态势场路径规划器 模板方法InspectionRobot 巡检机器人执行器 状态模式VisualizationEngine 可视化引擎 封装4.2 核心代码实现from dataclasses import dataclass, fieldfrom typing import List, Dict, Tuple, Optional, Setfrom enum import Enum, autoimport numpy as npimport matplotlib.pyplot as pltfrom collections import defaultdict, dequeimport mathfrom datetime import datetime, timedelta# # 1. 基础数据结构# class FaultType(Enum):故障类型LEAK auto() # 泄漏OVERHEAT auto() # 超温CORROSION auto() # 腐蚀VIBRATION auto() # 异常振动UNKNOWN auto()dataclassclass FaultRecord:故障记录 —— 值对象position: Tuple[float, float] # 坐标 (x, y)fault_type: FaultTypetimestamp: datetimeconfidence: float 1.0 # 传感器置信度 [0, 1]severity: float 1.0 # 严重程度 [0, 1]def __post_init__(self):# 确保置信度和严重程度在合理范围内self.confidence max(0.0, min(1.0, self.confidence))self.severity max(0.0, min(1.0, self.severity))dataclassclass GridCell:网格单元 —— 观察者模式grid_id: Tuple[int, int]center: Tuple[float, float]base_prob: float 0.01 # 基础故障概率先验current_prob: float 0.01 # 当前概率后验last_update: Optional[datetime] Nonevisit_count: int 0 # 机器人访问次数fault_history: List[FaultRecord] field(default_factorylist)def update_probability(self, new_prob: float, timestamp: datetime):更新概率并记录时间self.current_prob max(0.0, min(1.0, new_prob))self.last_update timestampdef add_fault_record(self, record: FaultRecord):添加故障记录self.fault_history.append(record)self.visit_count 1# # 2. 贝叶斯更新与热力衰减# class BayesianUpdater:贝叶斯概率更新器 —— 策略模式根据新故障数据更新网格故障概率def __init__(self, prior_weight: float 0.7, likelihood_weight: float 0.3):self.prior_weight prior_weight # 先验权重self.likelihood_weight likelihood_weight # 似然权重def update(self, cell: GridCell, new_record: FaultRecord) - float:执行贝叶斯更新返回新的概率估计公式简化版适用于连续更新P_new α * P_old (1-α) * Likelihood其中 Likelihood ∝ confidence * severity# 计算似然基于传感器数据和故障严重性likelihood new_record.confidence * new_record.severity# 加权平均保留历史记忆融入新证据updated_prob (self.prior_weight * cell.current_prob self.likelihood_weight * likelihood)# 限制范围return max(0.001, min(0.999, updated_prob))def batch_update(self, cell: GridCell, records: List[FaultRecord]) - float:批量更新适用于历史数据导入prob cell.current_probfor record in sorted(records, keylambda r: r.timestamp):prob self.update(cell, record)return probclass HeatmapDecayer:热力衰减器 —— 策略模式实现故障记忆的指数衰减def __init__(self, decay_lambda: float 0.01):self.decay_lambda decay_lambda # 衰减系数1/小时def decay(self, cell: GridCell, current_time: datetime) - float:对单个网格执行时间衰减P(t) P0 * exp(-λ * Δt)if cell.last_update is None:return cell.current_probdelta_hours (current_time - cell.last_update).total_seconds() / 3600.0decay_factor math.exp(-self.decay_lambda * delta_hours)# 衰减但不能低于基础概率decayed_prob max(cell.base_prob, cell.current_prob * decay_factor)return decayed_probdef decay_all(self, cells: Dict[Tuple[int, int], GridCell],current_time: datetime) - None:对所有网格执行衰减for cell in cells.values():cell.current_prob self.decay(cell, current_time)# # 3. 管线地图与热点管理# class PipelineMap:管线地图 —— 聚合根管理网格化地图、故障记录和热点分析def __init__(self, width: float, height: float, grid_size: float 1.0):self.width widthself.height heightself.grid_size grid_sizeself.cols int(width / grid_size) 1self.rows int(height / grid_size) 1# 网格字典 {(row, col): GridCell}self.grids: Dict[Tuple[int, int], GridCell] {}self._initialize_grids()# 故障记录数据库self.fault_db: List[FaultRecord] []# 算法组件self.bayesian_updater BayesianUpdater()self.heatmap_decayer HeatmapDecayer()# 热点缓存self.hotspots: List[Tuple[GridCell, float]] [] # (cell, score)def _initialize_grids(self):初始化网格for row in range(self.rows):for col in range(self.cols):center_x col * self.grid_size self.grid_size / 2center_y row * self.grid_size self.grid_size / 2grid_id (row, col)self.grids[grid_id] GridCell(grid_idgrid_id,center(center_x, center_y),base_prob0.01,current_prob0.01)def get_cell(self, position: Tuple[float, float]) - Optional[GridCell]:根据坐标获取网格col int(position[0] / self.grid_size)row int(position[1] / self.grid_size)return self.grids.get((row, col))def add_fault_record(self, record: FaultRecord) - None:添加故障记录并更新网格概率self.fault_db.append(record)cell self.get_cell(record.position)if cell:cell.add_fault_record(record)# 贝叶斯更新new_prob self.bayesian_updater.update(cell, record)cell.update_probability(new_prob, record.timestamp)def update_heatmap(self, current_time: datetime) - None:更新整个热力图衰减 热点排序# 1. 时间衰减self.heatmap_decayer.decay_all(self.grids, current_time)# 2. 重新计算热点self.hotspots.clear()for cell in self.grids.values():if cell.current_prob cell.base_prob * 1.5: # 高于基线50%视为热点# 热点评分 概率 × log(访问次数1) 平衡概率与关注度score cell.current_prob * math.log(cell.visit_count 1)self.hotspots.append((cell, score))# 按评分降序排列self.hotspots.sort(keylambda x: x[1], reverseTrue)def get_hotspots(self, top_k: int 5) - List[GridCell]:获取Top-K热点区域return [cell for cell, _ in self.hotspots[:top_k]]def get_heatmap_matrix(self) - np.ndarray:获取热力图矩阵用于可视化matrix np.zeros((self.rows, self.cols))for (row, col), cell in self.grids.items():matrix[row, col] cell.current_probreturn matrix# # 4. 动态势场路径规划# class DynamicPotentialFieldPlanner:动态势场路径规划器 —— 模板方法模式结合热点引力与已访问斥力def __init__(self, pipeline_map: PipelineMap):self.map pipeline_mapself.k_att 5.0 # 引力增益self.k_rep 2.0 # 斥力增益self.d0 3.0 # 斥力影响距离网格数def calculate_potential(self, position: Tuple[float, float],target_hotspots: List[GridCell]) - float:计算总势能# 1. 引力来自热点区域U_att 0.0for hotspot in target_hotspots:dist math.sqrt((position[0] - hotspot.center[0])**2 (position[1] - hotspot.center[1])**2)if dist 0.01: # 避免除零# 引力与热点概率成正比与距离平方成反比U_att self.k_att * hotspot.current_prob / (dist**2 0.1)# 2. 斥力来自已过度访问的区域U_rep 0.0current_cell self.map.get_cell(position)if current_cell and current_cell.visit_count 5: # 访问过多dist_to_center 0.1 # 已经在网格内if dist_to_center self.d0:U_rep 0.5 * self.k_rep * (1/dist_to_center - 1/self.d0)**2return U_att U_repdef plan_next_step(self, current_pos: Tuple[float, float],hotspots: List[GridCell],step_size: float 0.5) - Tuple[float, float]:规划下一步位置梯度下降if not hotspots:# 无热点时沿原方向或返回基地return current_pos[0] step_size, current_pos[1]best_pos current_posmin_potential float(inf)# 在周围8个方向采样directions [(0, step_size), (step_size, 0), (0, -step_size), (-step_size, 0),(step_size, step_size), (step_size, -step_size),(-step_size, step_size), (-step_size, -step_size)]for dx, dy in directions:new_pos (current_pos[0] dx, current_pos[1] dy)# 边界检查if 0 new_pos[0] self.map.width and 0 new_pos[1] self.map.height:potential self.calculate_potential(new_pos, hotspots)if potential min_potential:min_potential potentialbest_pos new_posreturn best_pos# # 5. 巡检机器人# class InspectionRobot:巡检机器人 —— 状态模式执行巡检任务并反馈数据def __init__(self, robot_id: str, start_pos: Tuple[float, float]):self.robot_id robot_idself.position start_posself.state IDLEself.path_history: List[Tuple[float, float]] [start_pos]self.inspection_log: List[Dict] []self.base_inspection_interval 3600 # 基础巡检间隔秒def inspect_cell(self, cell: GridCell, current_time: datetime) - Optional[FaultRecord]:巡检单个网格单元self.state INSPECTING# 模拟检测根据概率生成假阳性/阴性detection_threshold 0.3if np.random.rand() cell.current_prob:# 检测到异常fault_type np.random.choice(list(FaultType)) # 随机故障类型confidence min(0.9, 0.5 cell.current_prob) # 置信度与概率正相关severity min(1.0, cell.current_prob * 1.2)record FaultRecord(positioncell.center,fault_typefault_type,timestampcurrent_time,confidenceconfidence,severityseverity)self.inspection_log.append({time: current_time,position: cell.center,action: DETECTED_FAULT,detail: record})return recordelse:# 未发现异常self.inspection_log.append({time: current_time,position: cell.center,action: INSPECTION_CLEAR})return Nonedef move_to(self, new_position: Tuple[float, float]) - None:移动到新位置self.state MOVINGself.position new_positionself.path_history.append(new_position)def calculate_dynamic_interval(self, current_cell: GridCell) - float:根据热点概率计算动态巡检间隔# 高风险区缩短间隔低风险区延长间隔risk_factor current_cell.current_prob / current_cell.base_probdynamic_interval self.base_inspection_interval / max(1.0, risk_factor)return max(300, dynamic_interval) # 最短5分钟# # 6. 可视化引擎# class VisualizationEngine:可视化引擎 —— 封装def __init__(self, pipeline_map: PipelineMap):self.map pipeline_mapdef plot_heatmap(self, save_path: str fault_heatmap.png) - None:绘制热力图heatmap self.map.get_heatmap_matrix()plt.figure(figsize(12, 10))# 1. 热力图主体plt.subplot(2, 2, 1)im plt.imshow(heatmap, cmaphot, interpolationnearest, originlower)plt.colorbar(im, labelFault Probability)plt.title(Fault Hotspot Heatmap)plt.xlabel(X Grid)plt.ylabel(Y Grid)# 标记热点hotspots self.map.get_hotspots(top_k5)for cell in hotspots:row, col cell.grid_idplt.scatter(col, row, s200, facecolorsnone, edgecolorscyan, linewidths2)plt.text(col, row, fP{cell.current_prob:.3f},hacenter, vabottom, fontsize8, colorcyan)# 2. 概率分布直方图plt.subplot(2, 2, 2)probs [cell.current_prob for cell in self.map.grids.values()]plt.hist(probs, bins20, edgecolorblack, alpha0.7)plt.title(Probability Distribution)plt.xlabel(Probability)plt.ylabel(Count)plt.grid(True, alpha0.3)# 3. 访问次数热力图plt.subplot(2, 2, 3)visit_matrix np.zeros((self.map.rows, self.map.cols))for (row, col), cell in self.map.grids.items():visit_matrix[row, col] cell.visit_countim2 plt.imshow(visit_matrix, cmapBlues, interpolationnearest, originlower)plt.colorbar(im2, labelVisit Count)plt.title(Inspection Coverage (Visit Count))plt.xlabel(X Grid)plt.ylabel(Y Grid)# 4. 热点评分plt.subplot(2, 2, 4)if self.map.hotspots:labels [f({c.grid_id[0]},{c.grid_id[1]}) for c, _ in self.map.hotspots[:5]]scores [s for _, s in self.map.hotspots[:5]]bars plt.barh(range(len(labels)), scores, colororange)plt.yticks(range(len(labels)), labels)plt.title(Top 5 Hotspot Scores)plt.xlabel(Score (Prob × log(Visits)))plt.grid(True, alpha0.3)# 添加数值标签for bar, score in zip(bars, scores):plt.text(bar.get_width(), bar.get_y() bar.get_height()/2,f{score:.3f}, vacenter, fontsize8)plt.suptitle(Pipeline Inspection Hotspot Analysis System,fontsize14, fontweightbold)plt.tight_layout()plt.savefig(save_path, dpi150, bbox_inchestight)plt.close()print(f 热力图已保存至: {save_path})def plot_robot_path(self, robot: InspectionRobot,save_path: str robot_path.png) - None:绘制机器人路径plt.figure(figsize(10, 8))# 绘制热力图背景heatmap self.map.get_heatmap_matrix()plt.imshow(heatmap, cmaphot, interpolationnearest,originlower, alpha0.5, extent[0, self.map.cols, 0, self.map.rows])# 绘制机器人路径if len(robot.path_history) 1:xs [p[0]/self.map.grid_size for p in robot.path_history]ys [p[1]/self.map.grid_size for p in robot.path_histo利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛

相关新闻

【当AI替你回答了用户的问题:企业内容建设如何应对“跳过官网“时代】

【当AI替你回答了用户的问题:企业内容建设如何应对“跳过官网“时代】

上个月跟一家本地服务平台负责人聊,对方说了个困惑:SEO团队从3人扩到8人,关键词排名前五的词从47个涨到82个,但搜索渠道的有效咨询量反而比去年同期下滑了22%。数据很诚实。用户的决策路径变了。过去用户找服务商:打开…

2026/10/19 23:01:34 阅读更多 →
Claude Sonnet 4.6 处理 PDF 图表时,财务数据竟被 AI 拼成了科幻小说——多模态 RAG 实战的 5 层修复方案

Claude Sonnet 4.6 处理 PDF 图表时,财务数据竟被 AI 拼成了科幻小说——多模态 RAG 实战的 5 层修复方案

Claude Sonnet 4.6 处理 PDF 图表时,财务数据竟被 AI 拼成了科幻小说--多模态 RAG 实战的 5 层修复方案 上市公司财报智能问答系统的多模态RAG实战:从文本解析到视觉语义重构 背景与挑战:当传统文本RAG遭遇复杂版式文档 上周五临近下班时,产品经理甩来一份42页的上市公司财报…

2026/10/19 23:46:29 阅读更多 →
5分钟掌握ExifToolGUI:Windows平台最强大的图片元数据编辑器

5分钟掌握ExifToolGUI:Windows平台最强大的图片元数据编辑器

5分钟掌握ExifToolGUI:Windows平台最强大的图片元数据编辑器 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否厌倦了命令行操作ExifTool的复杂参数?想要一个直观易用的图形界面…

2026/10/19 23:47:19 阅读更多 →

最新新闻

野营用品租赁管理系统:基于SSM的库存与订单实战解析

野营用品租赁管理系统:基于SSM的库存与订单实战解析

野营用品租赁管理系统这个标题,我第一次看到时还觉得挺常规的,真动手做起来才发现它比想象中要麻烦不少。市面上做销售型电商系统的教程一抓一大把,但租赁类业务的核心逻辑完全不同:一个商品不是卖出去就结束了,而是要…

2026/10/20 12:29:17 阅读更多 →
深度学习革命:从神经网络逆袭到大模型时代的技术突围

深度学习革命:从神经网络逆袭到大模型时代的技术突围

人工智能最近这十几年的热闹,几乎都汇聚在一个词上:深度学习。神经网络这条技术路线,曾经被主流学术圈冷落了很多年,如今却成为视觉、语音、语言、决策等几乎所有AI子领域的基础底座。这个系列写到第三篇,我想认真梳理…

2026/10/20 12:29:17 阅读更多 →
rsync增量同步实战:核心机制、常用命令与备份架构

rsync增量同步实战:核心机制、常用命令与备份架构

rsync 这东西,属于那种"会用之后再也回不去"的命令。说白了,它就是 Linux 下做文件同步和增量备份的标配工具,能本地拷贝,也能走 SSH 把数据推到远程服务器,还能在传输时压缩、限速、断点续传,最…

2026/10/20 12:29:17 阅读更多 →
ChatGPT入门提示词指南:100个模板与实操技巧

ChatGPT入门提示词指南:100个模板与实操技巧

1. 为什么“入门提示词”值得单独拎出来讲1.1 一个被大多数人忽略的事实:工具再好,不会提问也白搭我接触过不少刚开始用 ChatGPT 的朋友,发现一个特别有意思的现象:大家注册完账号,打开对话框,第一反应往往…

2026/10/20 12:29:17 阅读更多 →
数据结构期末考试复习攻略:核心考点与算法解题套路

数据结构期末考试复习攻略:核心考点与算法解题套路

期末备考这段时间,最让人头大的课程里,数据结构绝对排得上号。“数据结构期末考试试题及答案”这个搜索词的热度每年都在涨,说明大家不是缺资料,而是缺一份能真正把知识点串起来、知道考什么、怎么答的复习思路。这篇文章我打算用…

2026/10/20 12:29:17 阅读更多 →
JavaScript Map与Set实战指南:性能优化与内存管理要点

JavaScript Map与Set实战指南:性能优化与内存管理要点

在实际开发里,Map和Set这俩内置对象常常被当成“高级特性”一笔带过。大多数教程讲到这里,无非是列一遍 API、丢几个控制台截图,然后就没了。可真到项目里高强度用它们的时候,你会发现一堆文档里查不到的细节:遍历顺序…

2026/10/20 12:28:17 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →