一维人工势场法Matlab完整实现与调参避坑指南
最近我在重新整理路径规划算法的基础实现把人工势场法APFArtificial Potential Field用Matlab从头到尾完整过了一遍。网上关于APF的资料一搜一大把绝大多数一上来就是二维栅格图、彩色势场曲面和一堆箭头视觉上确实唬人但对想搞懂算法本身行为的人来说反而被信息量淹没了。这次我刻意做了一个一维版本起点、终点、障碍物全部放在一条数轴上整套Matlab代码压缩到80行以内却能把势场法的核心机制、参数敏感性和两个经典失效模式完整呈现出来。这篇文章会从原理推导、代码实现到调参踩坑把整个实战过程记录下来适合刚接触路径规划的同学也适合需要用Matlab快速验证APF思路的工程师。1. 势场法到底在干什么以及为什么先在1D上较劲1.1 一张合力图看懂APF的运作逻辑人工势场法的核心思路是把路径规划问题转化成一个“受约束的梯度下降”问题。你可以把工作空间想象成一张高低起伏的地形目标点是一个凹坑障碍物是一座山丘机器人是一个小球。小球不关心地形全貌它只感知自己脚下的坡度顺着最陡的下坡方向滚最终滚进凹坑。APF就是把这个物理直觉翻译成数学表达——目标点对机器人产生引力障碍物对机器人产生斥力机器人每个控制周期沿着合力方向移动一小步。在数学上势场由两部分构成。引力势场用目标点距离的二次型表示U_att(x) 0.5 * k_att * (x - x_goal)^2斥力势场用经典形式只要机器人到障碍物的距离小于作用半径就生效U_rep(x) 0.5 * k_rep * (1/d - 1/d0)^2当 d d0其中d |x - x_obs|是机器人到障碍物的距离d0是斥力作用半径。机器人实际感受到的力是总势场的负梯度也就是引力与斥力的矢量和F_total(x) -dU_total/dx F_att F_rep这里最值得反复体会的是机器人其实不知道自己该往哪走它只是站在当前位置感知一下哪个方向势能下降最快迈一小步再感知再迈步。这个过程和你在山里顺着最陡的坡往下走没有任何区别。理解了这个底层逻辑后面所有代码里的符号和方向判断都会变得顺理成章。1.2 为什么一维版本值得先跑一遍我一开始也纠结过二维APF的示例图遍地都是何必退回一维。但实际跑下来一维版本有三个二维给不了的东西。第一个是可观测性。二维场景里机器人规划失败你很难一眼判断是参数问题、局部极小值、还是数值发散一维下所有信息都浓缩在一条数轴上路径画出来是一条折线势场画出来是一条曲线引力斥力的大小就是几个数。机器人为什么停、为什么震荡、为什么过不去肉眼直接看就能定位原因不需要在彩色云图上反复猜。第二个是问题暴露得彻底。APF在二维里遇到障碍物挡住去路还可以从旁边绕过去可是一维里障碍物只要横在起点和目标之间机器人就没有任何变通余地局部极小值问题被直接逼到明面上。目标不可达问题同理在二维里往往被其他因素掩盖一维里则纤毫毕现。从教学角度看没有比这更合适的“手术台”了。第三个是工程上真的有需求。直线导轨上的运动平台、单关节机械臂的角度控制、直线电机驱动的滑块这些都是天然的一维运动系统。障碍物通常表现为限位开关、禁入区间或者某个不允许到达的位置。APF在这种场景下最大的优势是实时性极好不需要全局地图只需要当前距离信息就能算下一步指令。所以一维版本不是玩具是一个能直接落到控制代码里的模块。2. 数学模型与Matlab代码框架2.1 引力场与斥力场公式逐项拆解引力势场为什么选二次型而不是一次型因为一次型势场如k_att * |x - x_goal|在目标点不可导力的方向会在目标附近发生跳变数值上容易出问题二次型处处光滑可导梯度是线性函数数值计算最稳定。对U_att求导取负得到引力F_att(x) -k_att * (x - x_goal)这个公式含义很直观机器人在目标左侧时x - x_goal为负于是F_att为正向右拉机器人在目标右侧时则相反。力的大小随距离线性增长离目标越远拉力越大不会出现距离太远引力反而消失的问题。斥力势场的公式里藏着两个关键设计。第一个距离d趋于零时(1/d - 1/d0)^2趋于无穷意味着障碍物附近存在一道数学上不可逾越的“墙”理论上机器人不可能撞上去。第二个存在d0这个截断半径超过它斥力完全为零保证障碍物只影响局部区域不会把远处的机器人推得偏离目标方向。对斥力势场求导后得到的斥力表达式要特别注意F_rep(x) k_rep * (1/d - 1/d0) * (x - x_obs) / d^3这个式子里的三块各有来头。(x - x_obs)的符号决定斥力方向机器人始终被推离障碍物1/d - 1/d0保证在影响半径边界处斥力光滑过渡到零d^3是求导链式法则自然产生的分母它让斥力在距离很小时按高阶量爆炸式增长。我自己写代码时吃过亏有人图省事把这个式子简化成k_rep / d^2再自己凑符号结果方向判断出错机器人直接撞上障碍物。这个公式不值得简化照抄最稳。2.2 主循环代码从参数到终止判定一次说清下面是我整理后的一维主循环代码。我把参数全部集中在文件顶部因为在实际项目里调参占用的时间远远超过写算法本身。%% 一维人工势场法路径规划 - 主循环 clc; clear; close all; % 参数区 x_start 0; % 起点 x_goal 10; % 目标点 x_obs 5; % 障碍物位置 k_att 1.0; % 引力增益 k_rep 10; % 斥力增益 d0 2.0; % 斥力作用半径 step 0.05; % 运动步长 maxIter 2000; % 最大迭代次数 EPS step; % 到达判定阈值 % 主循环 x x_start; path x; for iter 1:maxIter % 引力: 由目标点产生, 方向指向目标 F_att -k_att * (x - x_goal); % 斥力: 由障碍物产生, 仅在影响半径内生效 d abs(x - x_obs); F_rep 0; if (d d0) (d 1e-6) F_rep k_rep * (1/d - 1/d0) * (x - x_obs) / d^3; end % 合力 F_total F_att F_rep; % 移动: 用符号函数取方向, 步长为固定值 dir sign(F_total); if dir 0 dir sign(x_goal - x); % 合力为0时兜底 end x x step * dir; path(end1) x; %#okSAGROW % 到达判定: 与目标距离在一格以内则吸附到目标 if abs(x - x_goal) step x x_goal; path(end) x; break; end end % 结果输出 if iter maxIter abs(x - x_goal) step fprintf([提示] 达到最大迭代次数仍未到达目标\n); end fprintf(迭代次数: %d, 最终位置: %.3f\n, iter, x);几个关键点解释一下。移动方式我用了sign(F_total)也就是只取合力的符号方向步长固定为step。这样做的目的是让轨迹行为可预测每步移动距离恒定图像上是一条等间距折线方便观察。如果直接用step * F_total靠近障碍物时合力可能大到让机器人一步飞出十万八千里轨迹直接发散。终止判定用的是abs(x - x_goal) step而不是凭感觉设一个很小的阈值。因为机器人每一步最多移动step这么远如果判定阈值小于step机器人很可能在目标点附近来回跨越却永远达不到阈值循环无法退出。判定通过后再把最后一步直接吸附到目标点保证路径终点严格等于目标坐标。d 1e-6这个保护条件不能省。一维下机器人理论上不可能到达障碍物但在离散迭代中数值上存在风险如果d恰好被算成0d^3做分母会让程序直接NaN崩溃。加一个极小值保护是工程习惯宁可让机器人贴着障碍物停住也不能让代码崩掉。2.3 势场可视化把“力”变成看得见的曲线光有路径还不够我习惯把势场曲线也画出来这样能同时看到“机器人实际走了哪条路”和“势场为什么会引导它走这条路”。可视化代码单独放一段%% 一维势场与路径可视化 figure(Color, w); % 子图1: 机器人轨迹 subplot(2,1,1); plot(path, b-, LineWidth, 1.5); hold on; plot([0 numel(path)], [x_goal x_goal], g--, LineWidth, 1.2); plot([0 numel(path)], [x_obs x_obs], r--, LineWidth, 1.2); xlabel(迭代序号); ylabel(位置); title(机器人轨迹); legend(路径, 目标, 障碍物, Location, best); grid on; % 子图2: 势场分布 subplot(2,1,2); xx linspace(x_start, x_goal, 500); U_att 0.5 * k_att * (xx - x_goal).^2; dd abs(xx - x_obs); U_rep zeros(size(xx)); active dd d0; U_rep(active) 0.5 * k_rep * (1./dd(active) - 1/d0).^2; U_total U_att U_rep; plot(xx, U_total, b-, LineWidth, 1.5); hold on; plot(xx, U_att, g--, LineWidth, 1); plot(xx, U_rep, r--, LineWidth, 1); xlabel(位置); ylabel(势能); title(一维势场分布); legend(总势场, 引力势场, 斥力势场, Location, best); grid on;读这个图的方法很简单总势场曲线上的低谷就是机器人会被吸引过去的位置。如果低谷在目标点路径就能收敛到目标如果低谷在障碍物前面某个位置机器人就会停在那里——这就是局部极小值的可视化特征。后面三个场景的分析全靠这张图说话。3. 三个典型场景把APF的脾性摸透3.1 场景A无障碍物时的基准行为先把障碍物挪到不起作用的位置比如把x_obs设成-5或者干脆把d0设成0。此时斥力完全不参与机器人从x0出发目标点在x10引力恒为正每一步都向右移动0.05路径是一条完美的单调上升直线。运行时观察到的现象迭代200次后到达目标终点精确吸附到10势场图里的总势场就是一条抛物线没有第二个低谷。这个场景的意义在于验证主循环逻辑本身没有问题力方向计算正确、步进逻辑正确、终止判定正确。很多人在二维APF里一跑就出错回来查代码发现是基础逻辑有bug浪费大量时间。先在一维把地基打稳后面加维度才不会被莫名其妙的问题干扰。3.2 场景B障碍物挡路局部极小值现场还原现在把障碍物设回x_obs 5d0 2k_rep 10其余参数不变。运行结果让人印象深刻机器人从0出发一路正常向右移动但到了大约x 4.04的位置开始来回震荡卡住不动最终达到最大迭代次数目标在10却过不去。为什么卡在4.04而不是5因为平衡点不是障碍物本身而是引力与斥力恰好抵消的位置。写出平衡方程k_att * (x_goal - x) k_rep * (1/d - 1/d0) / d^2代入参数解出来x ≈ 4.04。也就是说在距离障碍物还有将近1米的地方斥力就已经把引力完全抵消了。势场图上的特征非常明显总势场在4.04附近出现了一个局部极小值而目标点的低谷反而被一道“斥力墙”隔开。这就是APF最著名的局部极小值问题。一维场景把这个问题的本质暴露得干干净净机器人确实在梯度下降但它降进的是第一个遇到的谷底而不是全局最低点。APF只保证不碰障碍物不保证一定到达目标。这是算法的完备性缺陷不是参数没调好。后面4.2节会讲逃生手段但你要有心理准备——它只能缓解不能根除。3.3 场景C目标旁边有障碍物目标不可达问题换个场景目标设在x_goal 7障碍物放在x_obs 9d0改成2.5。障碍物在目标外侧并没有挡住去路但机器人依然出了问题它在x ≈ 6.69就停下来离目标只有0.31的距离死活够不着。原因是障碍物的斥力作用半径覆盖到了目标点附近。目标点虽然是引力场的最低点但同时又处在斥力场的作用范围内总势场的真正最低点被“推”到了目标前方。机器人下坡下到这个位置发现脚下已经是谷底就不再动了。这是APF第二个经典问题目标被障碍物“污染”时不可达。针对这个问题的常见改进是在斥力公式里乘一个与到目标距离相关的因子。改进后的斥力表达式为F_rep_mod k_rep * (1/d - 1/d0) * (x - x_obs) / d^3 * (x - x_goal)^2 - k_rep * (1/d - 1/d0)^2 * (x - x_goal)代码实现也很直接if (d d0) (d 1e-6) F_rep k_rep * (1/d - 1/d0) * (x - x_obs) / d^3 * (x - x_goal)^2 ... - k_rep * (1/d - 1/d0)^2 * (x - x_goal); end这个改进的思路是机器人离目标越近斥力权重越小目标点不会被斥力场抬升从而保证目标仍然是全局最低点。在场景C里实测机器人能够顺利到达x7。但要提醒一句这个改进解决的是“目标附近有障碍物”的问题对“障碍物完全挡在中间”的场景B并没有根治效果障碍物依然是一道不可穿越的墙。3.4 四个核心参数的影响速查表调参是APF实践的重头戏我把四个核心参数对行为的影响整理成一张速查表方便对照排查。参数作用调大之后调小之后推荐初始范围k_att目标引力强度机器人更“勇”更早克服斥力但靠近障碍物时可能过于激进机器人更容易被障碍物挡住路径偏保守0.5 ~ 5k_rep障碍物斥力强度避障更坚决但平衡点远离障碍物可能提前卡死避障变弱可能离障碍物太近5 ~ 50d0斥力作用半径影响范围大目标点容易被污染影响局部机器人可能靠近障碍物才反应1 ~ 3step每步移动距离迭代少、速度快但轨迹粗糙过障碍物时易跳变轨迹平滑但迭代多、实时性下降0.01 ~ 0.1这里最容易被忽视的是step与d0的关系。如果步长大于斥力影响半径机器人可能一步从“无感区”直接跨进“强斥力区”轨迹出现明显跳动。实际调试时保持step d0/10是一个稳当的经验值。4. 实战中反复踩过的坑与解决思路4.1 终点附近来回震荡的修复这是我最早遇到的坑。最初我把到达判定写成abs(x - x_goal) 0.001步长却是0.05结果机器人在目标点左右两侧反复横跳永远满足不了0.001的判定条件。原因很简单离散步进下机器人落在目标点两侧的最近位置间距就是步长判定阈值小于步长时目标点成了“永远差一步”的地方。修复方法就是我主循环里写的判定阈值设为step并且判定通过后直接把位置修正到目标坐标。这样既保证了终止又让最终路径点严格落在目标上。这个细节我在多个项目里反复看到有人踩代码只有一行改动却能让算法收敛行为完全不同。4.2 卡死检测与局部极小值逃生手段场景B里机器人卡在平衡点附近时合力的符号会在左右两侧来回翻转sign(F_total)让机器人不停做往返运动。如果只靠maxIter兜底退出后你并不知道它是真到达了目标还是卡死了。我习惯加一段卡死检测if iter 30 recent path(end-30:end); if (max(recent) - min(recent)) 2 * step fprintf([警告] 疑似局部极小值, 位置 x%.3f\n, x); break; end end逻辑很简单如果最近30步的位置最大最小值之差都小于两倍步长说明机器人就是在原地打转可以断定陷入局部极小值。检测到之后怎么逃生一维场景里没有“绕路”这个概念能做的只有改变力平衡。我试过有效的手段有两个。第一个是临时降低k_rep或升高k_att把平衡点朝目标方向推让机器人跨过势垒等越过障碍物位置后再恢复原参数。第二个是施加一个指向目标的扰动项比如x x step * sign(x_goal - x_obs)强行让机器人朝目标方向挪几格脱离平衡点附近的小谷底。这两种方法在简单场景下可行但都不优雅因为在复杂场景里可能把机器人推入更糟的局部极小值。工程上更推荐的做法是检测到卡死后果断承认APF在这个场景失效切换到全局规划器或者预设路径不要让算法硬撑。4.3 用平衡方程反推参数告别瞎调调参最忌讳的是随机组合碰运气。一维最大的好处是可以用解析方法提前算出平衡点从而反向设计参数。以场景B为例平衡条件就是引力等于斥力k_att * (x_goal - x) k_rep * (1/d - 1/d0) / d^2设障碍物在5目标在10机器人卡在x 5 - e其中e是卡点离障碍物的距离。代入整理后得到k_att * (5 e) k_rep * (1 - 0.5*e) / e^3这个方程告诉我如果我希望机器人至少能接近到距离障碍物0.5米的位置也就是e 0.5在其他参数不变的情况下k_rep要小于多少才不会被提前卡死。实际验证非常直观k_rep从10调到50卡点位置从4.04变成了3.63差距完全可以用平衡方程解释。这种“先算再调”的思路比在二维图上肉眼猜参数高效太多。4.4 从一维迁到二维要改哪些东西一维代码迁到二维主要有三处改动。第一处是把标量换成向量位置、力都变成二维坐标和二维力向量。第二处是移动方式从sign(F_total)变成向量归一化后乘步长F_vec F_att_vec F_rep_vec; dir_vec F_vec / norm(F_vec); x_new x step * dir_vec;第三处是斥力的方向处理。一维里方向靠(x - x_obs)的符号判断二维里则要从障碍物指向机器人做单位向量diff_vec x - x_obs_vec; % 从障碍物指向机器人 dist norm(diff_vec); dir_rep diff_vec / dist; % 单位方向向量 F_rep_vec k_rep * (1/dist - 1/d0) / dist^2 * dir_rep;迁移过程中最容易犯的错误是忘记对向量归一化导致越靠近障碍物力越大、步长被撑爆轨迹直接发散。一维版本由于使用了固定步长绕开了这个问题二维里可绕不开。把一维玩熟之后再迁移你会发现思路是通的只是多了几个维度的细节。最后再分享一点个人体会。把一维APF完整跑下来再拆开看最深的感受是这算法的优点和缺点都极其鲜明优点是实现简单、计算量小、实时性优秀缺点是完备性差很容易在复杂环境里把自己困住。一维版本把这个“甜”和“苦”都放到了最大反而让人在最短时间内建立起了对梯度和势场方法的直觉。如果身边有人刚开始学路径规划我大概率会把这份一维代码直接丢过去让他先跑通再故意破坏它看它怎么失败然后才谈得上改进。花半天把这一套玩明白比自己闷头看一周二维可视化图有用得多。

相关新闻

Windows下VS2019编译OSQP求解器:从CMake到C/C++接入全指南

Windows下VS2019编译OSQP求解器:从CMake到C/C++接入全指南

做控制、做机器人、做运筹优化的人,早晚要跟二次规划(QP)打交道。OSQP(Operator Splitting QP)是这一卦里口碑不错的开源求解器——用ADMM迭代解稀疏二次规划,对大规模、结构稀疏的问题内存占用低、速度可观…

2026/10/18 6:18:49 阅读更多 →
智能家居全国交付中异地高并发管理带宽的系统架构与AI半自动化实现

智能家居全国交付中异地高并发管理带宽的系统架构与AI半自动化实现

一、背景/痛点分析 做全国交付,最难的不是没有订单,是订单来了管不住。一个运营经理盯十个项目可控,盯三十个开始漏项,盯五十个开始出错,盯一百个就崩。这不是能力问题,是管理带宽到极限。 异地高并发比本地…

2026/10/18 6:17:49 阅读更多 →
Unity文物模型旋转查看的工业级实现方案

Unity文物模型旋转查看的工业级实现方案

1. 项目概述:为什么一个“模型旋转查看”功能值得花三天深度打磨?Unity里做模型旋转查看,听起来像新手教程第一课——拖个FBX进场景,加个空物体当父节点,写五行代码让Transform.Rotate每帧转几度,完事。但我…

2026/10/18 6:17:49 阅读更多 →

最新新闻

Netty实战进阶:粘包半包、EventLoop线程边界与长连接心跳

Netty实战进阶:粘包半包、EventLoop线程边界与长连接心跳

不少人可能和我有同样的感受:Netty的入门教程看了一遍又一遍,Echo服务器、聊天室Demo敲得飞起,但一到真实项目里要“实战应用”了,反而手足无措。客户端发过来的数据一多,消息全黏在一起;连接一挂&#xff…

2026/10/18 7:17:00 阅读更多 →
扫码点餐小程序多门店源码跑通指南

扫码点餐小程序多门店源码跑通指南

简介:这是一套基于Java后端与uniapp(Vue3)前端实现的在线点餐小程序完整源码,面向计算机、电子信息等专业学生及初级全栈开发者,适用于课程设计、期末大作业或毕业设计参考。系统支持扫码点餐、外卖配送与到店自取双模…

2026/10/18 7:17:00 阅读更多 →
新能源汽车实训仿真教学软件选型与课堂实施经验

新能源汽车实训仿真教学软件选型与课堂实施经验

做职业教育这行的人,多半都有过一种尴尬:理论课讲得头头是道,学生一到实训车跟前就手足无措。尤其是新能源汽车实训,教材上写的、课件里放的、实车上摸的,三者经常对不上。前几年我们引了一套以比亚迪秦EV为原型的电动…

2026/10/18 7:17:00 阅读更多 →
结合AI客户端玩转go MCP项目开发:TaoToken统一Key接入实战

结合AI客户端玩转go MCP项目开发: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/18 7:17:00 阅读更多 →
鸿蒙编码与安全双翼:中小企业智能化改造的落地指南

鸿蒙编码与安全双翼:中小企业智能化改造的落地指南

前几天一位做设备运维的中小企业负责人找我,说客户要求巡检数据必须可追溯、不能外泄,而他们过去的办法是拍照发到工作群。这个场景我最近半年至少遇到过五次,几乎已经成为中小企业在智能化改造里最典型的痛点。很多人一听到“鸿蒙编码”和“…

2026/10/18 7:17:00 阅读更多 →
返利系统架构设计:订单归集、分润与对账全链路解析

返利系统架构设计:订单归集、分润与对账全链路解析

做返利类APP这事,外行看着简单——不就是把商品链接套上推广参数丢给用户,等平台结算佣金再返一部分出去吗?真上手你会知道,开发量最大的根本不是前端页面,而是后端的订单归集、分润和对账三块。这三块任何一个环节出问…

2026/10/18 7:16:00 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →