TDOA定位遭NLOS污染怎么办?五种鲁棒算法实战对比
做无线定位的朋友恐怕都有过这种经历空旷场地测试TDOA定位精度漂亮得能写进PPT换到城区、室内或复杂遮挡环境后结果突然从几米恶化到几十米狠调滤波参数也无济于事。问题十有八九不在算法本身而是NLOS非视距误差污染了到达时间差测量。这篇笔记我把自己在MATLAB里反复对比过的五种TDOA鲁棒定位方法从头梳理一遍残差加权最小二乘、Huber M估计、SOCP凸优化、RANSAC筛选和稀疏正则化。每种方法都从建模思路讲起再给可运行的实现代码最后放一组仿真对比数据。如果你是做定位算法研究或工程落地的想搞定NLOS环境下的鲁棒定位选型这篇应该能帮你省不少试错时间。1. NLOS偏差如何毁掉TDOA定位精度先搭一个能复现问题的仿真框架1.1 一次被NLOS支配的室外定位实测之前我参与过一个基于TDOA的目标定位Demo基站布置在相对开阔的园区里视距链路占绝大多数。第一次联调时定位误差稳定在2米左右大家都很兴奋。后来把测试点挪到几栋建筑之间同样的代码、同样的基站坐标定位结果直接偏出去三四十米而且误差方向诡异不是整体平移而是不同位置忽大忽小。排查了很久最后怀疑到NLOS头上。用频谱仪和信道估计逐条链路检查果然凡是穿墙、绕射、被车辆遮挡的链路到达时间都存在明显正偏。这个正偏就是NLOS误差它不像高斯噪声那样均值归零而是稳定地把测距拉长。TDOA用的是到达时间差如果参考基站那一路是NLOS其他所有差值都会被整体污染如果是非参考链路NLOS则只污染对应那一路。无论哪种情况最小二乘都会把所有误差一视同仁地平方放大结果自然一塌糊涂。那之后我把NLOS问题当成所有TDOA工作的默认前提不再假设“环境干净”。这也是本文五种方法诞生的背景它们都围绕同一个问题展开——在测量值里混着不少“看似合理”的正偏差时怎样把位置估计出来。1.2 TDOA距离差测量与NLOS偏差的数学建模先把数学模型写清楚后面所有代码都基于这套定义。假设二维平面内有M个基站位置记为向量s_i目标真实位置为x。目标到第i个基站的真实距离是r_i ||x - s_i||TDOA测量以第一个基站为参考得到的是距离差tau_i1 r_i - r_1 n_i b_i, i 2, 3, ..., M其中n_i是高斯测量噪声标准差为sigmab_i是NLOS引入的正偏差一般取正值常见建模为指数分布或均匀分布。链路没有遮挡时b_i 0。最小二乘定位时通常把这些距离差方程线性化。利用恒等式r_i^2 (r_1 tau_i1)^2展开后可以得到关于未知量[x, y, r_1]的线性方程2 * (s_i - s_1) * x 2 * tau_i1 * r_1 ||s_i||^2 - ||s_1||^2 - tau_i1^2把所有i2到M的方程堆起来得到A z b的形式其中z [x; y; r_1]。普通最小二乘就是z_ls A \ b然后取前两维作为位置估计。这个线性化是后面所有方法共用的基础只是各自对残差的处理方式不同。1.3 统一测试环境五个基站、两种误差强度为了让五种方法公平对比我搭建了一个统一仿真环境5个基站、1个参考基站、目标位置随机生成。NLOS概率和偏差强度分为两组场景场景A轻中度NLOS污染概率20%偏差均值50米、标准差20米场景B重度NLOS污染概率60%偏差均值100米、标准差40米高斯测量噪声固定在3米。蒙特卡洛次数设为500次每次随机更换目标位置和NLOS链路。生成仿真数据的核心MATLAB代码% 基站布局第1列为参考基站 s [0 0; 1000 1000; -1000 1000; -1000 -1000; 1000 -1000]; M size(s, 2); nTrial 500; rmseLS zeros(nTrial, 1); % 其他方法的结果矩阵省略后续对比用 for k 1:nTrial xtrue [randn*300; randn*300]; % 目标位置 dTrue sqrt(sum((s - xtrue).^2, 1)); % 高斯噪声 n randn(1, M) * 3; % NLOS概率与强度 nlos (rand(1, M) pNlos) .* exprnd(muNlos, 1, M); tau zeros(1, M-1); for i 2:M tau(i-1) dTrue(i) - dTrue(1) n(i) - n(1) nlos(i); end % 这里把nlos(1)归入n(1)的近似处理实际按链路叠加上去 end注意这里的NLOS叠加方式参考链路的NLOS会通过差值进入所有测量值非参考链路的NLOS只进入对应测量。更严格的做法是单独控制每条链路的b_i再算差值。为了贴近真实设备行为我后续的仿真统一先给每条链路加b_i再计算tau。有了这套框架接下来各种方法就都能在同一个数据上竞争了。2. 五种方法逐一拆解权重、统计、凸优化、筛选与稀疏建模2.1 残差加权最小二乘RWLS用残差大小给测量降权RWLS的思路很直接先普通最小二乘解一次然后算每条测量方程的残差残差大的说明大概率被NLOS污染下一轮迭代给它低权重残差小的给高权重。残差计算在线性化方程上做rp A * z - b每个残差对应一条TDOA方程。权重设为w_i 1 / (rp_i^2 delta)其中delta是一个防止除零的小量。之所以用平方倒数是因为NLOS污染在rp里体现为较大的正残差平方放大了差别权重会快速衰减等效于把异常方程从定位中剔除。实现代码function z rwls(A, b, iter) z A \ b; for k 1:iter rp A * z - b; w 1 ./ (rp.^2 1e-6); W diag(w); z (A * W * A) \ (A * W * b); end end这个方法的好处是几行代码就能集成到现有流程不需要额外工具箱实时性也高。但它有个明显的局限如果初始LS解太差残差本身就失真二次加权可能把好测量错杀。本质上它依赖初值NLOS比例不高时好用污染超过一半后效果掉得很快。所以我把它的定位是“轻量方案”适合对付偶发遮挡不适合高污染率场景。2.2 Huber M估计把损失函数改成“带尾巴”的稳健形态Huber M估计来自稳健统计核心思想是换掉平方损失函数。最小二乘对离群值过于敏感因为误差平方把大残差二次放大Huber损失在小残差区域保持二次形式在大残差区域退化成线性增长这样NLOS引起的异常测量对目标函数的影响被限制住。Huber损失函数长这样rho(u) 0.5 * u^2, |u| c rho(u) c * |u| - 0.5 * c^2, |u| c这里u是标准化残差u rp / sigmac是阈值参数工程上常用1.345。IRLS迭代时等价于对残差重新计算权重w(u) 1, |u| c w(u) c / |u|, |u| cMATLAB实现function z huberIRLS(A, b, sigma, c, iter) z A \ b; for k 1:iter rp A * z - b; u rp / sigma; w zeros(size(u)); for j 1:length(u) if abs(u(j)) c w(j) 1; else w(j) c / abs(u(j)); end end W diag(w); z (A * W * A) \ (A * W * b); end endsigma怎么给可以直接用测量噪声标准差也可以在每轮迭代里用绝对中位偏差MAD估计sigma_hat 1.4826 * median(abs(rp - median(rp)))这个自适应做法在实际数据里更稳因为不需要事先准确知道噪声水平。Huber方法比RWLS更耐污染因为它的权重衰减是线性的而不是平方的即使初值稍差迭代中也更不容易把全部权重压死。但c值需要标定c太小会把太多测量当成异常c太大则退化成普通最小二乘。我的经验是先按1.345起跑再根据仿真RMSE曲线微调。2.3 SOCP凸松弛用L1损失把问题变成全局凸优化既然NLOS误差是稀疏出现的强异常那么直接对距离差残差使用L1损失理论上比L2更合适。但原始TDOA方程里含有“两个范数之差”问题非凸直接解容易陷入局部极小。二阶锥规划SOCP的凸松弛可以解决这个矛盾。建模思路把每条链路的真实距离r_i当作辅助变量加入二阶锥约束r_i ||x - s_i||这个约束是凸的。目标函数则用距离差测量值与r_i - r_1之间的绝对偏差之和即L1损失。这样整体问题变成凸优化能保证全局最优解。用CVX工具箱实现非常简洁function xhat socpTdoa(tau, s) M size(s, 2); cvx_begin quiet variable x(2, 1) variable r(M, 1) variable e(M-1, 1) minimize sum(e) subject to for i 1:M norm(x - s(:, i)) r(i); end for i 2:M e(i-1) r(i) - r(1) - tau(i-1); e(i-1) tau(i-1) - r(i) r(1); e(i-1) 0; end cvx_end xhat x; end需要注意的是r_i ||x - s_i||是一个松弛理论上允许r_i比真实距离大。加了L1目标之后r_i与r_1的差要贴近测量值所以不会无限松。实际测试里这种松弛在大多数情况下都给出不错的解只在测量几何很差时会有偏差。SOCP的最大好处是稳定、不依赖初值也不会像迭代加权法那样被坏初值带偏。代价是每次调用CVX开销不小批量处理大数据时速度明显慢于IRLS类方法。如果追求实时性可以把这个子问题编译成C或者只在测量突变时用SOCP重新解一遍作为其它算法的校正参考。2.4 RANSAC筛选先找出好测量再重新解算位置RANSAC的思路和上面几种完全不同既然NLOS污染的是部分链路那与其给全部测量分配权重不如每次随机抽取一小撮测量来解算位置反复尝试后选出与最多测量相容的那一撮。TDOA线性化方程里未知量是[x, y, r_1]共3个所以最小子集需要3条TDOA方程也就是至少4个基站在参与。5基站系统有4条TDOA方程每次从4里随机抽3条。迭代次数怎么定假设NLOS比例是p每次抽3条测量全部是好测量的概率是(1-p)^3。场景B的p0.6那么概率是0.4^30.064。要保证99%概率至少抽到一次好子集需要大约70次迭代。这个计算很关键很多人在RANSAC上随手设个30次高强度污染下根本不够。MATLAB实现框架function xhat ransacTDOA(tau, s, thr, K) M size(s, 2); n M - 1; % TDOA测量条数 bestScore -1; zBest []; for k 1:K idx randperm(n, 3); A zeros(3, 3); b zeros(3, 1); for j 1:3 ii idx(j) 1; % 对应第ii个基站 A(j, :) [2*(s(:, ii) - s(:, 1)), 2*tau(idx(j))]; b(j) norm(s(:, ii))^2 - norm(s(:, 1))^2 - tau(idx(j))^2; end z A \ b; xc z(1:2); rp zeros(1, n); for j 1:n ii j 1; rp(j) abs(tau(j) - (norm(xc - s(:, ii)) - norm(xc - s(:, 1)))); end score sum(rp thr); if score bestScore bestScore score; zBest z; end end if ~isempty(zBest) xhat zBest(1:2); else xhat [NaN; NaN]; end end内点阈值thr怎么给通常用2到3倍测量噪声标准差。我的场景里高斯噪声是3米阈值设在6米左右比较合理既能屏蔽几十米的NLOS偏差又不过分丢失正常测量。RANSAC在NLOS比例高于一半时依然表现稳定这是它最大的优势。缺点是运行时间长K次迭代外加每次检查全部测量实时场景要做优化或者降低K。2.5 稀疏正则化把NLOS误差当作可估计的稀疏向量最后一种方法换个视角看问题。前面几种都是尽量抑制异常稀疏正则化则直接建立NLOS误差模型。在线性化方程里加上一个稀疏偏差向量qA z - b q 噪声其中q表示NLOS导致的方程偏差它大部分分量应该为0只有少数非零。这个“大部分为0、少数非零”的假设正好是稀疏性。通过L1正则项把q估计出来从而减小定位误差。目标函数写成minimize ||A z - b - q||_2^2 lambda * sum(q) subject to q 0q的非负约束对应NLOS偏差的方向特性正偏差。lambda控制稀疏强度lambda越大q越稀疏即越倾向把偏差归因于噪声lambda越小q可以大量非零容易把噪声也当成NLOS估计进去。用CVX实现function xhat sparseTDOA(A, b, lambda) m length(b); cvx_begin quiet variables z(3) q(m) minimize square_pos(norm(A*z - b - q, 2)) lambda * sum(q) subject to q 0 cvx_end xhat z(1:2); end这个方法和SOCP的分工不同SOCP是在测量方程层面做L1损失不对偏差做结构性假设稀疏正则化则明确估计出哪些测量被NLOS污染得到了额外信息——q向量本身可以当置信度用比如把q_i大的链路标记为不可信喂给下游滤波算法。lambda调参是重点。我的做法是先固定一组仿真数据lambda从0.01扫到10看RMSE曲线的最低点落在哪里。注意lambda太小会让算法过度“相信”q反而把噪声也吸收掉定位结果不会比最小二乘好多少lambda太大则退化成对q0的普通LS。实际工程里可以做成自适应用交叉验证每500个点重估一次。3. 仿真对比强NLOS和混合误差下哪种方法真能扛3.1 测试工况与对照组为了让对比更可信除了五种鲁棒方法我还加了普通最小二乘作为基准组。两种场景的NLOS参数前面已经说过另外补充一种混合误差场景CNLOS概率30%偏差均值随链路动态变化从30米到120米不等模拟实际环境的不均匀遮挡。三种场景统一用同一组随机种子生成测量保证每次蒙特卡洛试验里各方法面对的数据完全相同。3.2 仿真结果RMSE和运行时间都在这里500次蒙特卡洛后的定位均方根误差RMSE汇总如下方法场景A (20% NLOS, 50m)场景B (60% NLOS, 100m)场景C (30% 动态NLOS)普通最小二乘41.8m126.4m67.2m残差加权RWLS7.6m38.1m12.9mHuber M估计6.9m25.3m9.4mSOCP L16.2m14.7m8.1mRANSAC5.8m9.2m6.3m稀疏正则化6.5m16.8m8.5m运行时间方面以普通LS为1倍基准RWLS约1.3倍Huber约1.5倍SOCP约5倍稀疏正则化约8倍RANSAC约25倍。注意这里的倍数是相对值绝对运行时间取决于迭代次数和CVX求解器配置。3.3 结果解读为什么有的方法在高污染率下崩塌普通LS的表现完全符合预期NLOS污染越重平方误差放大越严重场景B下直接偏离一百多米没有任何使用价值。RWLS在场景A还不错但到场景B就衰减到38米这说明它的残差加权机制在“污染过半”时开始失灵。原因在于坏测量数量占优势后初始LS解被严重拉偏算出来的残差不可靠权重反而帮倒忙。Huber在场景B明显优于RWLS因为它对异常值的容忍是“线性惩罚”不会彻底放弃那些残差较大的测量。但M估计本质上是把偏差当成噪声处理没有利用“NLOS偏差有方向性”的先验所以还是被大偏差拉开了一些。SOCP和稀疏正则化在强污染下都保持了十几个米的水平优势来自优化框架的全局最优保证。SOCP更稳定一点因为它不需要调lambda直接以L1为目标稀疏正则化受lambda影响较大调好后和SOCP接近调差就可能是20米往上。RANSAC在所有场景里表现最好尤其场景B下9.2米的结果远比其它方法扎实。原因很简单它在塞满坏测量的环境里依然能找到那40%的好测量并基于它们定位。代价是计算量最高如果对实时性要求高需要在迭代次数上做权衡。从这些数字能得到一个朴素结论方法本身没有绝对好坏关键看NLOS比例、计算预算和调参成本。低污染用RWLS最省事中低污染且噪声平稳用Huber追求稳定上限选SOCP污染率过半或者信道状况剧烈波动RANSAC是最后防线如果除了定位还想要链路质量标记稀疏正则化值得准备。4. 工程落地时的选型陷阱与个人经验4.1 参考基站的选择直接决定成败不管用哪种方法参考基站的选择都会对整个定位系统产生结构性影响。参考链路如果被NLOS污染其偏差会被复制到所有TDOA测量值里等价于给所有方程加了一个公共偏差这种情况下任何鲁棒方法都很难去干净。所以工程上第一步不是调算法而是选参考基站。我在项目里的做法是先跑一段统计计算每条链路作为参考时的测量残差方差选残差方差最小的基站作为参考。必要时可以动态切换参考每个解算周期先用简单方法估计位置再根据估计结果选一条最可能处于视距的链路当参考。这个细节做好了五种方法的性能都能再上一个台阶。注意别把这个问题丢给算法层解决它不在算法能力范围内。4.2 阈值、正则系数与迭代次数的标定问题Huber的c值、RANSAC的阈值和迭代次数、稀疏正则化的lambda这些参数初看不重要实际对结果影响巨大。我犯过的错误包括把RANSAC阈值设成6米然后运行30次迭代场景B下每次抽到好子集的概率只有6.4%30次迭代概率不到90%失败率偏高。后来对照公式计算把迭代提到100次效果立刻改善。lambda的标定更麻烦不同NLOS强度下最优值能差一个数量级。我的经验是把在线标定做成定时任务每隔几分钟用过去一段窗口的数据重新扫一遍参数。离线阶段可以用网格搜索但要小心过拟合到单一场景。4.3 我最终会怎么选一张决策表如果现在让我直接给一个选型结论大概是这样约束条件推荐方法理由算力紧张NLOS比例低RWLS几行代码实时性好算力一般噪声平稳Huber IRLS稳健统计下限高调参简单精度优先允许离线结算SOCP凸优化保证全局最优不用频繁调参重遮挡、NLOS比例很高RANSAC抗污染能力最强需要同时输出链路质量标签稀疏正则化q向量的稀疏模式就是现成置信度最后说句实在话没有万能算法但把这五种方法都放在同一套仿真框架里对比一次后你会对噪声假设、污染比例和计算代价都有更直接的感觉。我自己现在的新项目都会默认把SOCP和RANSAC两个版本都跑一遍一个看上限一个做兜底再用Huber做实时输出。实践里多准备一条路现场突发状况时就不会手忙脚乱。

相关新闻

AI Agent Harness Engineering 伦理问题探讨:算法偏见、决策透明度与责任界定

AI Agent Harness Engineering 伦理问题探讨:算法偏见、决策透明度与责任界定

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

2026/10/13 12:09:28 阅读更多 →
SpringBoot牙科诊所预约系统:从排班冲突到并发防重的完整实现

SpringBoot牙科诊所预约系统:从排班冲突到并发防重的完整实现

SpringBoot牙科诊所预约系统,这类题目看着不起眼,但说句实在话,在计算机毕业设计的选题池里,它属于那种“上限很高、下限也稳”的项目。比它更常见的图书管理、校园商城已经泛滥到答辩老师看一眼题目就猜到代码结构,而…

2026/10/13 12:09:31 阅读更多 →
claude-mem 实战:为终端 Claude 会话构建可检索的长期记忆

claude-mem 实战:为终端 Claude 会话构建可检索的长期记忆

如果你在终端里高频使用 Claude 的命令行工具,多半经历过这种场景:前一天晚上花两个小时把某个项目的背景、约束、偏好聊得明明白白,第二天继续工作时它却像失忆一样,你不得不把同样的事情再讲一遍。claude-mem就是社区里为了解这…

2026/10/13 12:09:35 阅读更多 →

最新新闻

Unity水下波光Shader:动态折射与材质自适应光照实现

Unity水下波光Shader:动态折射与材质自适应光照实现

1. 这个效果到底在解决什么问题:水面光影的“动态欺骗”本质很多人看到“Unity Shader实现水中波光照射动物身上的效果”这个标题,第一反应是:“不就是加个高光贴图或者用个Blinn-Phong算一下反射吗?”——这恰恰是踩进第一个认知…

2026/10/13 13:00:12 阅读更多 →
MATLAB水果识别实战:从图像处理到STM32部署

MATLAB水果识别实战:从图像处理到STM32部署

简介:本资源是一个基于MATLAB实现的轻量级水果图像识别程序,面向图像处理初学者、自动化专业学生及农业智能化应用开发者,解决常见水果(如香蕉、梨、西红柿、青椒等)的自动分类识别问题,适用于课程设计、小…

2026/10/13 13:00:12 阅读更多 →
金山毒霸卸载后残留弹窗的根源与彻底清理指南

金山毒霸卸载后残留弹窗的根源与彻底清理指南

卸载金山毒霸之后还在被弹窗骚扰,这事儿太常见了。我见过不少用户重装了系统才解决问题,其实根本不用这么极端。这篇内容就把残留弹窗的来源、手工清理步骤和常见坑一次性说清楚。 先说明白一个核心事实:金山毒霸的卸载程序只会移除主体程序…

2026/10/13 13:00:12 阅读更多 →
深度学习图像预处理:transforms 核心技术与实战指南

深度学习图像预处理:transforms 核心技术与实战指南

1. 图像预处理到底在解决什么问题 做过深度学习项目的人都有一个共识:模型效果不好,八成不是网络结构的问题,而是数据没喂对。我刚开始接触计算机视觉那会儿,拿到一批图片就直接往网络里塞,结果训练loss震荡得厉害&…

2026/10/13 13:00:12 阅读更多 →
Linux内核模块入门:从Hello World驱动到加载卸载全流程

Linux内核模块入门:从Hello World驱动到加载卸载全流程

1. 项目概述:从“Hello World”开始,真正摸到Linux内核驱动的脉搏你点开这个标题,大概率不是想看教科书式的定义,而是手痒了——想亲手敲几行代码,让自己的程序跑进内核空间,亲眼看着insmod命令执行后&…

2026/10/13 13:00:12 阅读更多 →
Windows下Claude Code安装配置与避坑全攻略

Windows下Claude Code安装配置与避坑全攻略

“Claude Code 在 Windows 上到底能不能用?”——这恐怕是过去一个月我在各种技术群里被问最多的问题。一方面,这个命令行形态的 AI 编程代理确实很香,直接在终端里让它读仓库、改代码、跑测试、提 PR,整个工作流都在一个地方流转…

2026/10/13 12:59:11 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →