PSO与DWA融合:无人机三维动态路径规划与避障实现
搞无人机路径规划的人基本都会碰到这样一个尴尬阶段全局规划算法跑出来的路径看着挺完美一飞起来就被动态障碍物吓得手足无措局部避障倒是反应快可又经常钻进死角出不来。我在这个方向上也折腾了挺久最后落地比较稳的方案就是标题里这套粒子群算法做全局搜索动态窗口法做局部避障两层各干各的活再用前瞻点把两层粘起来。这套方案解决的核心问题很明确三维空间下既要规划一条从起点到终点的可行全局路径又要在执行过程中实时躲避突然出现的动态障碍物。如果说全局路径是无人机飞行的大方向那局部避障就是飞行过程中的随机应变。光有大方向会被动态障碍物打乱光会随机应变容易迷失终点。两者的融合不是简单堆叠而是有一个清晰的协作逻辑和实现套路。这篇文章就把我从原理到Matlab实现、再到调参踩坑的完整过程讲透适合正在做无人机、无人车路径规划相关课题或者仿真验证的同学参考哪怕是刚接触这类算法的新手照着思路也能搭出一套能跑的demo。1. 思路拆解为什么非要把PSO和DWA捏在一起1.1 单一算法的致命短板先说粒子群算法PSO的问题。PSO本质是一种群智能优化算法它把一条完整路径当成一个解通过一群粒子在解空间里来回搜索最终收敛出一条较优路径。这个过程的计算是离线的前提是环境信息完全已知、静态不变。一旦飞行过程中突然冒出一个树障、一架闯入的飞行器PSO规划出来的那条路径就失去意义了因为它根本没考虑过这些意外情况。你总不能在每次碰到新障碍物时都重新跑一遍全局规划那样计算开销大而且重规划出来的路径可能跟当前飞行状态对不上强行切换轨迹反而容易失控。再看动态窗口法DWA的问题。DWA倒是天生适合动态环境它不做长远规划只在当前时刻的速度窗口里采样一批候选速度模拟未来一小段时间的轨迹用评价函数挑一条最合适的来执行。它的优势是反应快能实时避障但短板同样明显DWA没有全局视野它的决策只顾眼前几步。如果环境里只有一个动态障碍物挡在必经之路上DWA很可能会绕着一个看起来局部最优的方向跑偏甚至绕进一个凹形障碍区里出不来。我在实际测试中就遇到过一次典型的DWA拐弯失效场景简单栅栏环境下只靠DWA飞无人机绕过了眼前那根柱子却一头扎进旁边另一根柱子的包围圈里来回震荡迟迟找不到出路。这就是典型的局部最优困局。1.2 融合架构的分工逻辑融合的思路其实不复杂就是经典的前后端分层思想很多机器人框架都是这个套路前端全局规划PSO负责在已知的静态三维地图上生成一条从起点到终点的全局路径。它解决大方向怎么走的问题给出一个由若干路径点组成的参考航线。后端局部规划无人机沿全局路径飞行时DWA负责实时感知周围环境动态调整飞行速度矢量绕过突然出现的障碍物。它解决眼下这一秒怎么飞的问题。两者之间怎么衔接是核心。我采用的是动态前瞻点look-ahead point策略无人机飞行过程中实时从全局路径上找一个距离当前位置约等于前瞻距离的点作为DWA的临时目标点。DWA不直接面向终点导航而是面向这个前瞻点导航。这样既保证了飞行的整体方向不偏又给了局部避障足够的调整空间避障完成后还能自然而然地切回全局路径上。这个融合逻辑还有一个好处全局路径不需要在飞行过程中频繁重算只需要在DWA的评价函数里加入一项与全局路径偏离程度的惩罚项就能在避障绕行的同时保持路径回归能力兼顾了实时性和全局最优性。2. 核心原理两个老牌算法的三维化改造2.1 PSO在三维路径规划里的正确定用法PSO原本是用来做连续优化问题的把它用到三维路径规划上关键在于粒子编码方式。我采用的编码方法比较直观把一条路径离散成N个中间路径点每个路径点有三个坐标分量那么一个粒子就是一个长度3N的向量依次排列就是这条路径的空间坐标序列。粒子迭代更新用的是标准的速度-位置公式v_i w * v_i c1 * r1 * (pbest_i - x_i) c2 * r2 * (gbest - x_i) x_i x_i v_i其中w是惯性权重c1和c2是学习因子r1和r2是[0,1]均匀随机数。这里我不直接控制粒子的坐标而是通过控制坐标的增量来搜索搜索过程比较平滑不容易产生剧烈跳变的路径点。适应度函数是PSO的指挥棒设计得好不好直接决定路径质量。我的适应度函数包含三个分量路径总长度所有相邻路径点之间的欧氏距离累加这是最基础的目标保证路径尽量短。碰撞代价统计所有路径点与所有障碍物球心之间的距离如果小于安全距离障碍物半径无人机安全半径就加惩罚。惩罚值按侵入深度线性增加侵入越深惩罚越重。飞行高度代价无人机不是什么地方都能飞的我会把最低飞行高度和最高飞行高度作为约束路径点超出范围就给惩罚。最终适应度 路径长度 碰撞系数×碰撞惩罚 高度系数×高度惩罚。三个系数需要根据场景规模来调障碍物多的场景碰撞系数要调大否则PSO会倾向于牺牲安全来换取短路径这在后面参数速查表里我会给出推荐范围。惯性权重w也不建议设成固定值我习惯让它从0.9线性衰减到0.4。前期w大粒子探索能力强不容易过早收敛到局部最优后期w小粒子精细搜索收敛到较优路径。2.2 DWA怎么从二维小车变成三维无人机DWA在二维移动机器人里应用很成熟核心思路是在当前状态下根据机器人自身的加速和减速能力划出一个下一时刻可达到的速度范围这个范围就是动态窗口然后在窗口里离散采样多组速度对每组速度模拟一小段轨迹用评价函数打分选最优者执行。扩展到三维无人机最大的变化是自由度从二维(x, y)变成三维(x, y, z)速度矢量从(v, w)变成(vx, vy, vz)。这意味着采样的维度变了动态窗口范围x方向: [vx_now - max_dec * dt, vx_now max_acc * dt] 动态窗口范围y方向: [vy_now - max_dec * dt, vy_now max_acc * dt] 动态窗口范围z方向: [vz_now - max_dec * dt, vz_now max_acc * dt]同时还要满足无人机自身的极限速度约束每个方向的速度绝对值不能超过v_max。窗口范围算出来后在三个维度上按步长离散化采样组成一个个候选速度矢量再分别模拟轨迹。轨迹模拟是一个简单的运动学积分过程。假设无人机在采样周期内匀速运动那么未来轨迹按以下方式递推for i 1 : T x(i1) x(i) vx * dt y(i1) y(i) vy * dt z(i1) z(i) vz * dt endT是预测步数一般取10到20步。步数太短看不清趋势步数太长又会预测到太远的未来评价结果失真。评价函数在三维场景下我做了一些调整包含四项方位角得分轨迹末端点与目标点的水平夹角和垂直夹角加权平均偏离越小得分越高。障碍物距离得分轨迹上所有采样点与所有障碍物的最小距离距离越大越安全。这里特别要注意动态障碍物的位置不能只看当前时刻应该用当前时刻位置外推到轨迹末端时刻的位置来计算否则对高速运动障碍物的避让会滞后。速度得分速度越高得分越高这能避免无人机因为过度保守而龟速前进或者原地打转。全局路径贴合度轨迹末端点与全局路径的横向偏差偏差越小得分越高这是融合的粘合剂。最终得分是这四项的加权和得分最高的候选速度就是当前周期的执行速度。2.3 前瞻点融合策略的细节前瞻点策略在自动驾驶和机器人巡线里都很常见用在PSO和DWA的融合上效果也很好。具体做法是每次DWA执行前先找到无人机当前投影在全局路径上的最近点然后从该点沿路径方向往前取一个前瞻距离的点作为DWA的目标点。前瞻距离的选取很关键。太短DWA会被全局路径的局部曲率牵着走绕障碍时发挥不开太长DWA看不到眼前细节动态避障反应就慢了。我一般设成无人机每秒飞行距离的1.5到2倍这样既能保证方向敏感度又给避障留余量。实现上需要注意一个细节前瞻点对应的路径索引要用累计路径长度来搜而不是用路径点序号硬找。因为全局路径在空间上不是均匀分布的用序号查找会导致实际前瞻距离忽长忽短。3. Matlab代码实现与关键参数配置3.1 地图与动态障碍物建模我习惯把三维地图简化为边界约束加球障碍物的组合。飞行空间定义为一个长方体用上下界约束住无人机的活动范围。障碍物用球体表示每个障碍物有球心坐标和半径这样碰撞检测和可视化都比较方便。动态障碍物在每次仿真循环中更新位置最简单的模型是匀速直线运动obs_center(1) obs_center(1) obs_velocity(1) * dt_update obs_center(2) obs_center(2) obs_velocity(2) * dt_update obs_center(3) obs_center(3) obs_velocity(3) * dt_update为了更贴近实际我会给动态障碍物加一点随机扰动模拟不完美的运动预测。仿真步长我设置为dt_update 0.1秒DWA的控制周期也是0.1秒这样两者同步比较简单。障碍物的可视化用Matlab的sphere和surf函数画出来动态障碍物每帧更新球心位置后重新绘制这样仿真界面上能直观看到避障过程。3.2 PSO部分的代码骨架PSO的主函数框架大致是这样关键部分可直接参考% 初始化粒子群 num_particles 30; num_path_points 8; % 中间路径点数量 dim 3 * num_path_points; % 每个粒子的维度 x zeros(num_particles, dim); v zeros(num_particles, dim); pbest x; pbest_fitness inf(num_particles, 1); % 随机初始化粒子位置和速度 for i 1 : num_particles x(i, :) start rand(1, dim) .* (goal - start); % 初始路径分布在起点终点连线上随机扰动 v(i, :) (rand(1, dim) - 0.5) * 0.2; pbest(i, :) x(i, :); pbest_fitness(i) fitness(x(i, :), start, goal, obstacles, params); end % 全局最优 [gbest_fitness, best_idx] min(pbest_fitness); gbest pbest(best_idx, :); % 迭代优化 for iter 1 : max_iter w w_max - (w_max - w_min) * (iter / max_iter); % 惯性权重线性衰减 for i 1 : num_particles r1 rand(dim, 1); r2 rand(dim, 1); v(i, :) w * v(i, :) c1 * r1 .* (pbest(i, :) - x(i, :)) c2 * r2 .* (gbest - x(i, :)); x(i, :) x(i, :) v(i, :); % 路径点边界约束修正 x(i, :) clamp(x(i, :), map_bound, safety_margin); current_fitness fitness(x(i, :), start, goal, obstacles, params); if current_fitness pbest_fitness(i) pbest(i, :) x(i, :); pbest_fitness(i) current_fitness; end if current_fitness gbest_fitness gbest x(i, :); gbest_fitness current_fitness; end end end注意这里的粒子初始化我没有让粒子随机散落在整个搜索空间而是让初始路径在起点和终点的连线附近随机扰动这样能显著加速收敛。至于fitnes函数的实现核心就是上一节说的三个代价分量累加。一个非常重要的细节PSO迭代完之后得到的路径点序列是离散的直接拿去当DWA的全局参考会有明显的折线感飞行时会让无人机频繁转向。所以我在PSO输出后加了一个平滑处理用三次样条插值对路径点序列做平滑得到更密的路径点序列。这样DWA在前瞻时拿到的方向更顺滑飞行动作也更自然。3.3 DWA部分的代码骨架DWA的核心函数我封装成一个大函数输入当前状态、目标点、障碍物信息、全局路径输出下一时刻的最优速度矢量function [vx_opt, vy_opt, vz_opt] dwa_control(state, target, obstacles, global_path, params) vx_now state(4); vy_now state(5); vz_now state(6); % 1. 计算动态窗口 vx_min max(params.vx_min_bound, vx_now - params.max_dec * params.dt); vx_max min(params.vx_max_bound, vx_now params.max_acc * params.dt); vy_min max(params.vy_min_bound, vy_now - params.max_dec * params.dt); vy_max min(params.vy_max_bound, vy_now params.max_acc * params.dt); vz_min max(params.vz_min_bound, vz_now - params.max_dec * params.dt); vz_max min(params.vz_max_bound, vz_now params.max_acc * params.dt); % 2. 采样候选速度 best_score -inf; best_v [0, 0, 0]; for vx vx_min : params.v_step : vx_max for vy vy_min : params.v_step : vy_max for vz vz_min : params.v_step : vz_max % 3. 模拟轨迹 [traj_x, traj_y, traj_z] simulate_trajectory(state, vx, vy, vz, params.dt, params.pred_steps); % 4. 评价打分 score calculate_score(traj_x, traj_y, traj_z, target, obstacles, global_path, params); if score best_score best_score score; best_v [vx, vy, vz]; end end end end vx_opt best_v(1); vy_opt best_v(2); vz_opt best_v(3); end采样步长v_step的选择直接决定实时性。三维速度空间采样三重大循环如果步长设得太小候选速度组合数会爆炸式增长。我在我的机器上测试v_step取0.2 m/s时每个控制周期大概要计算几百条候选轨迹Matlab跑起来大概几十毫秒足够实时。如果追求更快的响应可以先把速度矢量投影到球坐标上采样减少空采样的比例。评价函数打分这是DWA的灵魂。calculate_score里我要特别提醒一个归一化问题四个评价项量纲完全不同方位角是弧度量级障碍物距离是米量级速度是米每秒量级全局路径偏差也是米量级。如果不做归一化直接加权求和量级大的一项会完全主导结果。我一般先把每个分量内部做归一化减去最小值除以最大值减最小值然后再加权求和。这一步做完权重alpha、beta、gamma、delta的调节才有意义。3.4 主循环与融合部分主循环把PSO和DWA串起来是整个程序的调度中枢% 主初始化 generate_map(); obstacles initialize_obstacles(); global_path pso_planning(start, goal, obstacles, params); global_path_smooth smooth_path(global_path); % 仿真主循环 while norm(uav_pos(1:3) - goal) threshold t t_max % 更新动态障碍物位置 obstacles update_obstacles(obstacles, t); % 计算前瞻点 look_ahead_idx find_look_ahead_index(uav_pos, global_path_smooth, params.look_ahead_dist); local_target global_path_smooth(look_ahead_idx, :); % DWA控制 [vx, vy, vz] dwa_control([uav_pos, uav_vel], local_target, obstacles, global_path_smooth, params); % 更新无人机状态 uav_pos uav_pos [vx, vy, vz] * dt; uav_vel [vx, vy, vz]; % 记录轨迹 flight_trajectory [flight_trajectory; uav_pos]; % 可视化更新 update_plot(); t t dt; end这个循环里最容易被忽略的是find_look_ahead_index这个函数。我之前说过要用累计路径长度来搜索前瞻点具体实现可以预先计算好整条路径的累计长度数组然后用find函数查出第一个累计长度大于当前位置累计长度前瞻距离的索引效率很高。整个程序跑完之后把全局路径、实际飞行轨迹、起点终点、动态障碍物的轨迹全部画到一张三维图上可以直观看到避障效果截图放到论文或者报告里也很有说服力。4. 仿真结果分析这套方案的实战表现4.1 测试场景与评价指标我搭建了三个典型测试场景来验证方案效果场景A单动态障碍物横穿航线。无人机直线飞行途中一个动态障碍物从侧面横向穿过航线考验的是单点避障能力。场景B多动态障碍物交叉运动。三个球体障碍物以不同速度、不同方向在空间里穿梭考验的是连续避障能力。场景C凹形静态障碍区加动态闯入。在静态凹形障碍区旁边一个动态障碍物沿复杂轨迹运动考验的是全局路径与局部避障的协同能力。评价指标我用四个飞行路径长度越短越好、平均避障裕度飞行过程中与障碍物的最小距离的平均越大越安全、规划时间PSO耗时、单步控制耗时DWA耗时。4.2 与纯PSO、纯DWA的对比为了看清融合方案的价值我把三组结果放在一起对比纯PSO方案全局路径在静态地图上质量很高但飞行过程中不感知动态障碍物直接按全局路径飞。在场景A里无人机与横穿障碍物发生了碰撞这是必然的因为PSO完全没有任何动态感知能力。纯DWA方案在场景A里勉强能避开单个障碍物但在场景B里无人机连续避障时开始出现大幅绕行路径长度明显增加原因是它没有全局参考每次避障后无法快速回归正确航线。在场景C里纯DWA被凹形障碍区给卡住了反复震荡最后靠运气才钻出来。融合方案三个场景里均成功避开所有动态障碍物路径长度接近纯PSO的全局最优路径平均避障裕度也维持在安全水平。场景C里无人机避障时果断偏离全局路径绕行越过障碍后很快又平滑地切回全局参考航线整体飞行流畅度远好于纯DWA。从数据上看融合方案的路径长度只比纯PSO理想路径多了不到15%而纯DWA在复杂场景下多绕行了50%以上。这说明两层融合确实做到了既盯着大方向又不被局部障碍困住。4.3 动态障碍物预测的重要性仿真过程中我还专门测试了带预测和不带预测的DWA表现差异。所谓预测就是计算障碍物距离得分时不用障碍物当前时刻的位置而是用投影到轨迹末端时刻的位置。在场景B里高速运动的障碍物对无人机避障决策速度要求很高。不带预测时无人机倾向于等障碍物飞近再避结果因为反应滞后好几次都是以很小的裕度擦身而过看着都吓人。加上预测之后DWA等效于提前看到了障碍物的运动趋势决策更果断避障裕度明显提升。这在原理上也好理解无人机轨迹模拟本身就是在预测未来如果评价时却拿当前的障碍物位置来说事那相当于一个用未来预测轨迹、一个用当下现实位置时间轴对不上决策自然有偏差。5. 踩坑实录与调参速查表5.1 最常见的四个坑第一个坑是PSO迭代发散。我一开始把粒子的速度上限设得太高结果路径点在空间里剧烈跳动适应度曲线一直在高位震荡怎么都收敛不了。解决方法是对粒子的速度做限幅通常让最大速度不超过搜索空间边界的十分之一同时迭代完对位置做边界clamp粒子就不会飞出可飞行区域了。第二个坑是DWA评价权重失衡。方位角权重调太高无人机会变得非常敏感稍微动一点就转向飞行轨迹抖动障碍物距离权重太高无人机过度保守遇到一个障碍物就急停或者绕很远速度权重太高无人机就变成了莽夫贴着障碍物边缘高速冲过去。平衡这些权重没有捷径只能一组一组试我后面会给出推荐起始值。第三个坑是前瞻距离与DWA预测步数不匹配。前瞻点太远而预测步数太短会导致DWA的轨迹模拟根本达不到目标点附近方位角评价失真无人机飞起来像没头苍蝇。解决方法是保证前瞻距离大致等于预测步数乘上期望巡航速度两者在数值上要匹配。第四个坑是动态障碍物碰撞检测突变。因为动态障碍物位置在更新而轨迹模拟是离散的可能出现上一帧安全、下一帧突然侵入了很多的情况导致避障动作过于猛烈甚至前后两个控制指令方向完全相反无人机发生抖振。我的解决思路是给DWA的采样速度变化率加一个软约束让相邻两个控制周期的速度矢量变化幅度受限飞行姿态就平顺多了。5.2 调参顺序与方法论调参这件事我强烈建议按顺序来不要东调一下西调一下不然最后都不知道是哪个参数救回来的。我自己的调参顺序是先固定PSO参数调出合理的全局路径再单独调DWA参数给定直线飞行场景把跟随和避障调到平滑稳妥最后调融合相关参数前瞻距离、路径贴合权重。每一步都在当前层级做对比测试确认没问题再进入下一层。PSO的调参重点在惯性权重和碰撞惩罚系数。DWA的调参重点在权重w和预测步数T。融合层的调参重点是前瞻距离。分层调参有个好处就是问题定位特别快哪一层出了问题直接看那一层的输出曲线就能判断出来。5.3 参数速查表这里把我实测效果不错的参数区间整理出来方便参考。不同的仿真环境、地图尺寸和无人机性能假设参数需要重新调整但至少能给你一个安全的起点。参数推荐范围说明PSO种群数20-40场景复杂取大简单取小PSO迭代次数80-200看收敛曲线平台期后可提前结束惯性权重w0.9衰减到0.4前大后小探索到精修学习因子c1、c21.2-2.0通常取相等也可c2略大于c1碰撞惩罚系数50-200场景障碍物密集时取大DWA预测步数10-20配合前瞻距离调整控制周期dt0.05-0.2秒越小越稳计算量越大DWA最大加速度1-3 m/s^2取决于无人机动力学假设DWA最大速度2-5 m/s取决于场景大小方位角权重alpha0.4-0.6方向敏感性障碍物距离权重beta0.3-0.5安全倾向速度权重gamma0.1-0.2巡航效率全局路径贴合权重delta0.2-0.4融合粘合剂前瞻距离1.5-2倍巡航速度太长迟钝太短束缚这些参数里我最想强调的是DWA的四个权重不是固定不变的在空旷区域和障碍密集区域最佳权重其实不一样。如果你追求更极致的表现可以让权重自适应变化无人机检测到周围障碍物密度高时自动调高beta降低alpha优先保证安全在空旷区域自动调高gamma和alpha飞得更快更准。6. 我最后想分享的几句实在话把这套系统完整跑下来我最深刻的感受是路径规划这个方向真正难的往往不是算法本身而是对问题场景的理解和参数细节的把控。PSO和DWA都不是新算法论文一抓一大把但能把它们融合好、参数调稳、在复杂动态环境里跑出漂亮轨迹靠的还是扎实的编码功底和不厌其烦的仿真对比。对于刚上手的朋友我建议不要一上来就追求完美的三维效果先在简单的二维场景里把PSO和DWA各自的逻辑跑通、可视化做出来再逐步扩展到三维最后再添加动态障碍物和融合策略。这样出问题时定位最快避免一开始就在一堆复杂交互里找bug。另外这套方案的潜力还远不止无人机避障。之前我把同样的框架稍作改动迁移到了地面移动机器人的导航仿真里效果也相当不错。DWA本来就是从移动机器人领域走出来的算法PSO的编码方式换成二维路径点更是顺手。如果你手头有类似的多机器人协同避障课题也可以试着在这套框架上叠加多机协同策略扩展空间很大。最后分享一个小技巧仿真里一定要把全局路径、实际轨迹、动态障碍物轨迹同时可视化出来而且要把每一帧的决策结果显示在图上。这个看似不起眼的细节能帮你节省大量的调参时间。因为这能让你直观看出无人机是在避障的哪个阶段出了问题——是根本没有感知到障碍物还是感知到了但决策太保守还是决策合理但回归全局路径太慢。只有看到这些细节参数调起来才是有方向感的而不是靠猜。

相关新闻

etcd raft源码解读:核心结构体raftLog与raft字段拆解

etcd raft源码解读:核心结构体raftLog与raft字段拆解

1. 为什么读etcd源码要先啃这两个结构体我最初接触raft协议时犯过一个典型错误:对着论文反复背流程,画了一堆状态迁移图,自以为懂了,结果一翻开etcd的raft实现源码就卡壳——找不到"Leader向Follower发消息"对应的代码&…

2026/10/17 9:32:41 阅读更多 →
Claude代码工作流引擎:CLI+MCP+npm动态生成实践

Claude代码工作流引擎:CLI+MCP+npm动态生成实践

1. 项目概述:这不是一个“模板库”,而是一套可执行的 Claude 代码工作流引擎你搜“claude-code-templates”,第一眼看到的可能是 GitHub 上某个冷清的仓库,里面放着几个.json或.yaml文件,写着python-function-template…

2026/10/17 9:32:41 阅读更多 →
Python+Pyglet复刻Minecraft:体素渲染与第一人称交互源码解析

Python+Pyglet复刻Minecraft:体素渲染与第一人称交互源码解析

简介:这是一份面向Python初学者与编程教育场景的Minecraft风格开源项目,使用Python与Pyglet库实现,适合想通过游戏化方式入门图形编程、体素世界构建的读者。项目以简洁代码演示方块世界的基本运行逻辑,作者希望将其发展为教育工具…

2026/10/17 9:32:41 阅读更多 →

最新新闻

Web3个人实验项目全链路拆解:从钱包连接到智能合约交互

Web3个人实验项目全链路拆解:从钱包连接到智能合约交互

1. 从“Mark loves cat”这个标题里能读出什么第一次看到“web3_Mark loves cat”这个标题,我脑子里冒出来的第一个念头是:这大概率不是一个正经的商业项目,更像是一个开发者随手起的、带着点个人趣味的代号。做过几年项目的人都有这个直觉—…

2026/10/17 10:16:00 阅读更多 →
矩阵键盘(keypad-phone)检测全流程:从硬件结构到代码实现

矩阵键盘(keypad-phone)检测全流程:从硬件结构到代码实现

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

2026/10/17 10:16:00 阅读更多 →
自制浏览器网页背景:从CSS到扩展机制的全链路实践

自制浏览器网页背景:从CSS到扩展机制的全链路实践

1. 这不是换肤,是亲手给网页“铺地毯”——从标题看懂这个项目的本质“自制浏览器网页背景是什么体验?”——光看标题,很多人第一反应是“不就是换个壁纸吗?Chrome设置里点几下就完事了”。但真正做过的人会立刻意识到&#xff1a…

2026/10/17 10:16:00 阅读更多 →
Basemap气象绘图实战:底图叠加与白化maskoceans完整代码解析

Basemap气象绘图实战:底图叠加与白化maskoceans完整代码解析

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

2026/10/17 10:16:00 阅读更多 →
Harness SDK:交付意图代码化与跨语言契约实践

Harness SDK:交付意图代码化与跨语言契约实践

1. Harness SDK不是“另一个CLI工具”,而是现代交付流水线的控制中枢你可能在CI/CD文档里见过它,在GitHub Actions配置中瞥过它的import语句,甚至在团队内部的部署脚本里执行过harness up——但大概率没真正搞懂它到底在替你做什么。Harness …

2026/10/17 10:16:00 阅读更多 →
Python+Paramiko多线程批量巡检:自动生成Excel与Pyecharts报表

Python+Paramiko多线程批量巡检:自动生成Excel与Pyecharts报表

简介:这是一款面向运维工程师与Python自动化学习者的服务器巡检工具,基于Python与Paramiko实现SSH远程连接,支持多线程并发执行远程命令脚本,可同时对多台服务器下发巡检任务,解决CPU、内存、磁盘、网络等状态检测中重…

2026/10/17 10:14:59 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →