<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RKNN on Zesean 的博客</title><link>https://zeseanblog.top/tags/rknn/</link><description>Recent content in RKNN on Zesean 的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Sun, 06 Sep 2026 17:23:33 +0800</lastBuildDate><atom:link href="https://zeseanblog.top/tags/rknn/index.xml" rel="self" type="application/rss+xml"/><item><title>聆行 VoxDrive — 分布式车载智能座舱（RK3588 + Jetson Orin 双板）</title><link>https://zeseanblog.top/projects/voxdrive/</link><pubDate>Fri, 04 Sep 2026 23:50:00 +0800</pubDate><guid>https://zeseanblog.top/projects/voxdrive/</guid><description>&lt;h2 id="项目概述"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae%e6%a6%82%e8%bf%b0" class="header-anchor"&gt;&lt;/a&gt;项目概述&#13;&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;聆行 VoxDrive&lt;/strong&gt; 是一套跑在真实硬件上的双 SoC 分布式车载智能座舱：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;RK3588（LubanCat-4）= 媒体 + 端侧语音节点&lt;/strong&gt;：摄像头采集 → MPP 硬件编码 → MP4 循环存储 / RTMP 推流，NPU 跑行人/车辆检测做&lt;strong&gt;事件锁录&lt;/strong&gt;；流式 ASR（fp16 三模型 NPU 分载）与 TTS 合成（SummerTTS）也都落在这块板；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Jetson Orin Nano = 中心 AI 节点&lt;/strong&gt;：LLM / RAG / 意图路由 / 画面问答 / Qt 数字座舱，全离线、不上云；&lt;/li&gt;&#10;&lt;li&gt;两板以太网互联：&lt;strong&gt;视频走 RTMP，控制与事件走 ZeroMQ&lt;/strong&gt;。语音可以控制录像、查状态、抓拍，还能直接问&amp;quot;画面里有什么&amp;quot;（VLM 看行车画面作答）；&lt;/li&gt;&#10;&lt;li&gt;麦克风与音箱是接在 RK 上的同一 USB 设备：说话本板识别、跨板查询、应答本板播报，播报期自动静音防&amp;quot;自己听到自己&amp;quot;（回灌）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;设计原则：&lt;strong&gt;数据密集走专用加速器（RK 的 VPU/RGA/NPU），模型密集走中心算力（Jetson 的 GPU）&lt;/strong&gt;；实时敏感、算力可承担的小模型（ASR/TTS）下沉边缘，大模型（LLM/VLM）留中心。&lt;/p&gt;&#10;&lt;h2 id="双板实物"&gt;&lt;a href="#%e5%8f%8c%e6%9d%bf%e5%ae%9e%e7%89%a9" class="header-anchor"&gt;&lt;/a&gt;双板实物&#13;&#10;&lt;/h2&gt;&lt;p&gt;左上 Jetson Orin Nano（带散热扇），右侧 RK3588 LubanCat-4，两板经路由器以太网互联；左下 7 寸 DSI 触摸屏接 RK，正在运行座舱 UI 的桌面会话；麦克风/音箱 USB 组合设备接 RK 侧：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="双板实物：左上 Jetson Orin Nano、右侧 RK3588 LubanCat-4、左下 7 寸 DSI 触摸屏（座舱 UI 运行中），两板经路由器以太网互联，麦克风/音箱 USB 组合设备接 RK" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/hardware-setup.jpg" srcset="https://zeseanblog.top/projects/voxdrive/images/hardware-setup_hu_9510a3377c499d66.jpg 800w, https://zeseanblog.top/projects/voxdrive/images/hardware-setup.jpg 1600w" width="1600"&gt;&lt;/p&gt;&#10;&lt;h2 id="系统架构"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e6%9e%b6%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;系统架构&#13;&#10;&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; subgraph RK ["RK3588 · 媒体节点 + 语音推理节点"]&#10; CAM["IMX415&lt;br/&gt;MIPI CSI"] --&gt; ISP["rkisp&lt;br/&gt;NV12 1080p"]&#10; ISP --&gt; ENC["MPP H.264 硬编&lt;br/&gt;VBR · 零 CPU 软编"]&#10; ENC --&gt; MP4["MP4 分段循环存储&lt;br/&gt;水位覆盖 · 事件锁录"]&#10; ENC --&gt; RTMP["RTMP 推流&lt;br/&gt;断流自动重连"]&#10; NPU["RKNPU&lt;br/&gt;YOLOv5s INT8"] --&gt;|"行人/车辆检测"| MP4&#10; SVC["recorder_service&lt;br/&gt;REP :6700 / PUB :6701"]&#10; MP4 --- SVC&#10; RTMP --- SVC&#10; MIC["USB 组合设备&lt;br/&gt;麦克风+音箱"] --- VS&#10; VS["voice_service&lt;br/&gt;NPU×3 流式解码"] --&gt;|"识别文本"| ROUTER&#10; TN["tts_node&lt;br/&gt;SummerTTS 多核&lt;br/&gt;本板播报"] -.-&gt;|"合成请求"| TTS&#10; end&#10; subgraph JS ["Jetson Orin · 中心算力节点"]&#10; MM["mediamtx&lt;br/&gt;RTMP/RTSP/HLS"] --&gt; UI["Qt 数字座舱&lt;br/&gt;预览 · 状态 · 告警"]&#10; VLMQ["画面问答"] -.-&gt;|"vlm 直通"| VLM["vlm_service&lt;br/&gt;Qwen2-VL-2B"]&#10; VLM -.-&gt;|"抓帧 :6700"| SVC&#10; ROUTER["意图路由"] --&gt; LLM["LLM&lt;br/&gt;Qwen2.5-1.5B"]&#10; ROUTER --&gt; RAG["RAG&lt;br/&gt;真实车主手册"]&#10; ROUTER --&gt; TB["Tool Bus"]&#10; TB --&gt; TTS["TTS 网关&lt;br/&gt;REQ :6720"]&#10; LLM --&gt; TB&#10; end&#10; RTMP --&gt;|"视频流"| MM&#10; TB &lt;--&gt;|"REQ :6700&lt;br/&gt;状态/抓拍/开关 (RTT 2ms)"| SVC&#10; SVC --&gt;|"PUB :6701&lt;br/&gt;水位/断流/检测事件"| UI&lt;/pre&gt;&lt;p&gt;两个平面刻意分开：视频大流量不进控制面，控制面单条消息只有几百字节——跨板工具往返实测 &lt;strong&gt;0.73-2ms&lt;/strong&gt;。语音链同理：&lt;strong&gt;音频采集、识别、合成、播报都在 RK 本板&lt;/strong&gt;，跨板只传识别文本与应答文本两条轻量通道。&lt;/p&gt;&#10;&lt;h2 id="真机实拍rk3588-7-寸触摸屏真屏拍摄"&gt;&lt;a href="#%e7%9c%9f%e6%9c%ba%e5%ae%9e%e6%8b%8drk3588-7-%e5%af%b8%e8%a7%a6%e6%91%b8%e5%b1%8f%e7%9c%9f%e5%b1%8f%e6%8b%8d%e6%91%84" class="header-anchor"&gt;&lt;/a&gt;真机实拍（RK3588 7 寸触摸屏，真屏拍摄）&#13;&#10;&lt;/h2&gt;&lt;p&gt;行车记录页：左侧 mediamtx 拉流的&lt;strong&gt;实时预览&lt;/strong&gt;（断流自动重连），右侧状态卡轮询 RK（帧率/段数/磁盘水位环）+ 实时事件日志，底部按钮经 tool_bus 直控真设备；语音气泡「你：打开行车记录」是刚说完一句语音导航后 UI 的回显：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="RK 触摸屏·行车记录页：实时预览 LIVE + 存储水位环 + 事件日志 + 语音气泡" class="gallery-image" data-flex-basis="407px" data-flex-grow="169" height="908" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-dashcam.png" srcset="https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-dashcam_hu_bb7794176d726824.png 800w, https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-dashcam.png 1540w" width="1540"&gt;&lt;/p&gt;&#10;&lt;p&gt;主页磁贴：录像状态横条（30.0fps / 138 段 / 5.8GB 可用）与四张磁贴的数据全部来自跨板实时链路，无一张静态图：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="RK 触摸屏·主页磁贴" class="gallery-image" data-flex-basis="407px" data-flex-grow="169" height="908" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-home.png" srcset="https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-home_hu_c8c3f0673f171e6f.png 800w, https://zeseanblog.top/projects/voxdrive/images/dashboard-touch-home.png 1540w" width="1540"&gt;&lt;/p&gt;&#10;&lt;p&gt;行车记录仪原始画质参考（IMX415 直出 1080p 快照，RK 端 NV12→JPEG、跨板抓拍约 0.15s）：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="IMX415 原始 1080p 快照" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="1080" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/snapshot-1080.jpg" srcset="https://zeseanblog.top/projects/voxdrive/images/snapshot-1080_hu_22f00068aaaacc49.jpg 800w, https://zeseanblog.top/projects/voxdrive/images/snapshot-1080_hu_c7de95e0f383a800.jpg 1600w, https://zeseanblog.top/projects/voxdrive/images/snapshot-1080.jpg 1920w" width="1920"&gt;&lt;/p&gt;&#10;&lt;p&gt;车控页 + 语音上屏（Jetson 侧实例同款界面）：问&amp;quot;现在录着吗&amp;quot;走真实链路（识别 → 路由 → 跨板查询 → LLM 组织 → TTS），底栏字幕是用户原话、气泡是基于真实工具应答生成的播报：&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="车控页与语音播报" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://zeseanblog.top/projects/voxdrive/images/dashboard-voice.png" srcset="https://zeseanblog.top/projects/voxdrive/images/dashboard-voice_hu_145be24756cde134.png 800w, https://zeseanblog.top/projects/voxdrive/images/dashboard-voice.png 1600w" width="1600"&gt;&lt;/p&gt;&#10;&lt;h2 id="行车记录视频链路rk3588"&gt;&lt;a href="#%e8%a1%8c%e8%bd%a6%e8%ae%b0%e5%bd%95%e8%a7%86%e9%a2%91%e9%93%be%e8%b7%afrk3588" class="header-anchor"&gt;&lt;/a&gt;行车记录视频链路（RK3588）&#13;&#10;&lt;/h2&gt;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; A["IMX415&lt;br/&gt;RAW Bayer"] --&gt;|MIPI CSI-2| B["rkcif → rkisp&lt;br/&gt;3A/格式"]&#10; B --&gt;|NV12| C["V4L2 用户态&lt;br/&gt;mmap 4 缓冲 + DMA-BUF"]&#10; C --&gt; D["MPP H.264&lt;br/&gt;NV12 直入 · VBR"]&#10; D --&gt; E["Mp4SegmentSink&lt;br/&gt;I 帧边界滚动分段"]&#10; D --&gt; F["RtmpSink&lt;br/&gt;flv + extradata"]&#10; C -.每 30 帧.-&gt; G["最新帧槽"]&#10; G --&gt; H["RGA → RKNN&lt;br/&gt;YOLOv5s INT8 · NPU"]&#10; H --&gt;|"命中行人/车辆"| E&lt;/pre&gt;&lt;p&gt;几个值得说的实现细节：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;NV12 同制式直入 MPP&lt;/strong&gt;：ISP 出的 NV12 不做格式转换直接编码（全链路 CPU ~2.8%），RGA 只用于检测前处理的缩放；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;MP4 分段的坑&lt;/strong&gt;：movenc 不代转 Annex-B，需逐 NAL 转 AVCC 并手工组装 avcC；NAL 边界 off-by-one 的症状是&amp;quot;时长正常但解码全错&amp;quot;——验收判据用&lt;strong&gt;逐段全量解码&lt;/strong&gt;而非 duration；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;事件锁录&lt;/strong&gt;：检测线程经&amp;quot;最新帧槽&amp;quot;旁路挂接（忙时覆盖、不反压主管线），命中即给当前段加 &lt;code&gt;LOCK_&lt;/code&gt; 前缀，循环覆盖天然豁免，另有配额防锁段吃满磁盘；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;rkisp 残留态&lt;/strong&gt;：boot 残留下 S_FMT 原样传回会得到行距矛盾的布局（SEGV/无帧），修复=清零强制重算 + 读回几何校验。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="端侧语音闭环推理与音频-io-都在-rkllm-留-jetson"&gt;&lt;a href="#%e7%ab%af%e4%be%a7%e8%af%ad%e9%9f%b3%e9%97%ad%e7%8e%af%e6%8e%a8%e7%90%86%e4%b8%8e%e9%9f%b3%e9%a2%91-io-%e9%83%bd%e5%9c%a8-rkllm-%e7%95%99-jetson" class="header-anchor"&gt;&lt;/a&gt;端侧语音闭环（推理与音频 I/O 都在 RK，LLM 留 Jetson）&#13;&#10;&lt;/h2&gt;&lt;p&gt;语音链的形态一句话：&lt;strong&gt;音频不出板，跨板只传文本&lt;/strong&gt;。麦克风/音箱（同一 USB 设备）接 RK——&lt;code&gt;voice_service&lt;/code&gt; 进程内采集 16k PCM → kaldi-native-fbank 特征（与 sherpa C++ 前端逐位一致）→ zipformer 三模型 fp16 NPU 三核分载流式解码 → 识别文本 REQ 回 Jetson 意图路由 → 应答文本回到 RK 的 &lt;code&gt;tts_node&lt;/code&gt;（SummerTTS 多核合成）→ 本板播报。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;防回灌&lt;/strong&gt;：麦克风和音箱是同一块硬件，播报期做事件驱动静音，解除须等 play_end 后麦克风连续 1s 真实静音（+超时兜底）；&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ASR 选 fp16 而非 int8&lt;/strong&gt;：INT8 全套量化精度分析实测不满足流式精度（状态累积崩溃），fp16 零量化损失且 RTF 0.3 以内；TTS 评估 matcha RKNN 路线后放弃（声码器输出 STFT 谱需宿主 ISTFT，NPU 图不适用），改用 SummerTTS 引擎源码上板编译——真麦声学自环实测识别逐字正确、无循环。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Jetson 侧保留三个关键架构决策：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;真设备域确定性直通&lt;/strong&gt;。1.5B 小模型在 7 个工具间选择实测不可靠（&amp;ldquo;关闭预览&amp;quot;被选成关车窗、&amp;ldquo;还剩多少存储&amp;quot;选成编数），改为关键词命中即直达跨板工具、LLM 只把真实结果组织成播报——控制类链路降到 &lt;strong&gt;0.43s&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;语义双路路由&lt;/strong&gt;。规则通路兜底 + 语义通路（离线意图中心余弦，阈值留出探针校准）：关键词全 miss 的改述问句直接走 RAG 快路径，&lt;strong&gt;9.4s → 1.2s&lt;/strong&gt;；语义通路故障自动退化为规则单路。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;推理位置按实时性分层&lt;/strong&gt;。ASR/TTS 下沉边缘 NPU/CPU，LLM/RAG 留中心——判据是&amp;quot;实时敏感 × 算力可承担&amp;rdquo;，不是无脑把模型搬到一块板。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;RAG 语料是&lt;strong&gt;真实车主手册&lt;/strong&gt;（官网 PDF → 三级过滤 → 577 块向量库，板上构建），召回阈值 0.48 由&amp;quot;手册内改述句 vs 手册外噪声&amp;quot;的相似度实测分界定出。&lt;/p&gt;&#10;&lt;h2 id="座舱-ui-双端部署rk-触摸屏"&gt;&lt;a href="#%e5%ba%a7%e8%88%b1-ui-%e5%8f%8c%e7%ab%af%e9%83%a8%e7%bd%b2rk-%e8%a7%a6%e6%91%b8%e5%b1%8f" class="header-anchor"&gt;&lt;/a&gt;座舱 UI 双端部署（RK 触摸屏）&#13;&#10;&lt;/h2&gt;&lt;p&gt;同一套 dashboard 代码不改一行，配置切换跑在两种形态：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Jetson 桌面&lt;/strong&gt;与 &lt;strong&gt;RK 7 寸 DSI 触摸屏&lt;/strong&gt;（1024×600，Goodix 触摸）各跑一个实例，&lt;strong&gt;双端同时在线&lt;/strong&gt;、订阅同一套 ZMQ 数据源——UI 是纯客户端，换屏只是多一个实例，服务端拓扑零变化；&lt;/li&gt;&#10;&lt;li&gt;小屏自适应：可用几何过小时自动最大化 + &lt;strong&gt;X 级缩放 1.5625×&lt;/strong&gt; 到 1600×938 逻辑设计尺寸（Qt 自带 &lt;code&gt;QT_SCALE_FACTOR&lt;/code&gt; 在本板组合上首帧后冻结，实测弃用）；&lt;/li&gt;&#10;&lt;li&gt;真机闭环已验证：说&amp;quot;打开行车记录&amp;rdquo;→ RK 触摸屏切页并自动拉起 RTSP 预览，画面色彩正确、跨屏数据实时。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="实测数据"&gt;&lt;a href="#%e5%ae%9e%e6%b5%8b%e6%95%b0%e6%8d%ae" class="header-anchor"&gt;&lt;/a&gt;实测数据&#13;&#10;&lt;/h2&gt;&lt;p&gt;所有数字可复述测量方法，无估算值：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;指标&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;实测值&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;采集（IMX415 → NV12 1080p）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;30.0fps&lt;/strong&gt;，max 帧间距 33ms（驱动时间戳，120 帧）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MPP H.264 硬编&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;延迟 &lt;strong&gt;avg 4.8 / max 8.5ms&lt;/strong&gt;，全链路 CPU &lt;strong&gt;~2.8%&lt;/strong&gt;（单核）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;跨板拉流（RK→Jetson mediamtx）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1080p30 全量解码零错误（30.2s），静态场景 VBR 下探 0.71Mbps&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;跨板控制面（ZMQ REQ）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RTT &lt;strong&gt;2ms&lt;/strong&gt;（路由器组网）；直连组网复测 &lt;strong&gt;avg 0.73ms&lt;/strong&gt;（0.64-0.83，n=20）；抓拍 143ms（含 JPEG 编码 + 183KB base64 跨板）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RKNN 事件锁录检测&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;推理 &lt;strong&gt;25.3ms ewma&lt;/strong&gt;（NPU core0），检测线程挂接下录像 30fps 无损；连续 1.5h+ 录像 ewma 26.2ms / 5154 次&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;语音闭环全程（文本入口→播报结束）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;3.55-5.47s&lt;/strong&gt;（LLM 组织 0.86-1.07s 为大头，跨板工具仅 2-10ms）；修复回灌级联后干净口径：router 应答 1.49-4.14s，→播报结束 7.0-17.9s（=答复文本+合成+实时音频时长，随答复长度自洽）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ASR 推理（RK NPU fp16 三模型分核）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RTF 0.26-0.30&lt;/strong&gt;（10.1s 中英混复测 0.296），线上流式转写与 Jetson ORT fp32 贪心&lt;strong&gt;逐字一致&lt;/strong&gt;；前端特征与 sherpa C++ 逐位一致（对拍 maxabs=0）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TTS 合成（RK SummerTTS 多核 CPU）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RTF 0.22-0.27&lt;/strong&gt;（7 字句 0.63s、28 字句 1.47s），合成 PCM 回传播放时长精确吻合&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;VLM 画面问答（Qwen2-VL-2B，按需换出 llm）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;应答与画面实测一致；周期=快照 0.35s+推理 4.7s+恢复 14.9s（冷启动 ~25-30s）；GPU 铁律=共存 OOM/须 evict 页缓存/ctx 2048+图降采样 960×540&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;真麦声学闭环（USB 组合设备）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;播命令→空气→麦克风→NPU 识别&lt;strong&gt;逐字正确&lt;/strong&gt;→真数据应答→本板播报+防回灌静音→无循环&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LLM&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Qwen2.5-1.5B Q4_K_M，&lt;strong&gt;22.8 token/s&lt;/strong&gt;（首测）；第三轮复测 20.5-21.0 token/s（llama.cpp 纯生成口径 ×3，全栈在线）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;长稳&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16min 双板联跑 fps 稳定 30.00、29417 帧零异常；故障注入 5s 精确超时自愈；第三轮复测时已连续录像 &lt;strong&gt;1.5h+（154k 帧）&lt;/strong&gt; 30.001fps、RTMP 零写错误&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;回归验证&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-09-06 第二轮全量验证全绿：RK 5/5 + Jetson selftest 8/8 + 回归 4/4×2 + E2E 抽查（RTSP 90 帧零错误/色度中性、HLS、跨板语音查询含真实值 rtt 1.6-2.2s、跨板抓拍 123ms）；同日傍晚第三轮性能复测（跨板 RTT/LLM/RAG 208-280ms/ASR/TTS/E2E 全栈在线全项重测）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="五个实战排障叙事"&gt;&lt;a href="#%e4%ba%94%e4%b8%aa%e5%ae%9e%e6%88%98%e6%8e%92%e9%9a%9c%e5%8f%99%e4%ba%8b" class="header-anchor"&gt;&lt;/a&gt;五个实战排障叙事&#13;&#10;&lt;/h2&gt;&lt;p&gt;比数字更有意思的是踩坑（每条都有一手证据链）：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;RKNN「流式状态发散」— 症状像量化精度，根因是内存布局&lt;/strong&gt;。zipformer 转 RKNN 后流式解码首块全对、之后结构性错乱（值集不变、位置全乱），INT8/fp16 同症状——直觉会怪量化或图编译。真因是 &lt;strong&gt;RKNN 对 4D 图输入的布局约定&lt;/strong&gt;：缓存张量必须按 &lt;code&gt;transpose(0,2,3,1)&lt;/code&gt; 预转置喂入。定位：探针模型 chunk 级逐张量对账 → 周期标记指纹排除数值精度 → 4D 直通 tiny 图暴力解出唯一转置；修复后转写与 fp32 &lt;strong&gt;逐字一致&lt;/strong&gt;。教训：多输入非图像模型上 NPU，先做直通等价自测。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ZMQ linger 默认无限&lt;/strong&gt;：对端进程死亡时，客户端析构带着未投递消息&lt;strong&gt;永久阻塞&lt;/strong&gt;，工具总线整体楔死。没有 gdb 条件，靠 &lt;code&gt;/proc/&amp;lt;pid&amp;gt;/wchan&lt;/code&gt; + 残留 context 线程定位；修复 linger=0 + EINTR 重试后，故障注入 5s 精确超时、恢复即自愈。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;1.5B 选错工具&lt;/strong&gt;：LLM 自由选工具实测不可靠（关预览→关车窗），改成&amp;quot;关键词直通执行 + LLM 仅组织结果&amp;quot;——把确定性还给代码，把语言能力留给模型。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;rkisp 残留态&lt;/strong&gt;：S_FMT 原样传回残留行距，驱动照收但布局自相矛盾，症状是段错误 + 无帧。教训：&lt;strong&gt;不信任驱动的&amp;quot;照单全收&amp;quot;，写入前清零重算、读回后几何校验&lt;/strong&gt;。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;防回灌静音窗口被&amp;quot;事件语义差&amp;quot;击穿&lt;/strong&gt;：E2E 对账发现播报结束时间异常，排查见&lt;strong&gt;扬声器播的回答被自家麦克风识别、级联出新查询&lt;/strong&gt;。根因是跨板事件语义差：Jetson 的 &lt;code&gt;play_end&lt;/code&gt; 是&amp;quot;合成+写入完成&amp;quot;（12s 音频 2.9s 就发出），而播报在 RK 实时进行——静音在&amp;quot;写完&amp;quot;后 0.6s 就解除，长答复播到一半麦克风听到自己的声音。修复=静音期顺带能量观测，解除改为 &lt;strong&gt;play_end 后麦克风连续 1s 真实静音&lt;/strong&gt;；同场景对比级联 3 次 → 0 次。教训：跨板系统的&amp;quot;同名词事件&amp;quot;未必同语义，端到端对账日志是最好的透视镜。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="与站内其他项目的关系"&gt;&lt;a href="#%e4%b8%8e%e7%ab%99%e5%86%85%e5%85%b6%e4%bb%96%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%85%b3%e7%b3%bb" class="header-anchor"&gt;&lt;/a&gt;与站内其他项目的关系&#13;&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://zeseanblog.top/projects/vehicle-voice-agent/" &gt;车载 AI 语音助手（Jetson）&lt;/a&gt;：本项目的 Jetson 侧前身，七服务架构与音频链路由它收编重构而来；&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://zeseanblog.top/projects/xray-motion-control/" &gt;X 射线焊缝检测下位机&lt;/a&gt;：另一条嵌入式线（STM32 + FreeRTOS）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>