巡线小车进阶实战:ZTMR平台PID控制与多传感器融合解析
1. 先搞明白巡线进阶到底在“进”什么最开始做巡线车我和大多数新手一样以为把灰度传感器往车头一装、电机转速调到最大、让小车对着黑线冲就完事了。结果小车不是画龙就是脱缰一到急弯直接飞出去。后来我慢慢把 ZTMR 这套板子从头到尾过了一遍才意识到所谓的“进阶”并不是换个更贵的传感器而是把控制逻辑从“开关式”推向“连续量式”从“能跟着线走”变成“能稳定地跟着线走”。这里说的 ZTMR是我一直在折腾的一套开源巡线小车项目方案。它把主控、电机驱动、灰度传感器接口、调试按键和显示接口都集成在一块板上省去了大量跳线麻烦。这篇内容不是产品说明书而是我的实例笔记重点讲清楚三件事传感器数据怎么处理、PID 怎么落地、十字路口和丢线怎么处理。适合已经让小车跑起来、但还想继续调深度的朋友也适合准备参加机器人竞赛但又不想只停留在“抄例程”阶段的同学。我默认你已经具备一点基础知道 PWM 控制电机、能看懂 C 语言基本结构、了解 ADC 采样是什么。如果这些还没弄熟建议先把入门例程跑通再回来看这篇。进阶和入门最大的区别就在这里入门是在学“动”进阶是在学“稳”。2. 传感器与数据别再把灰度当开关用2.1 红外灰度传感器的工作原理与局限灰度传感器本质上是一个红外发射管加一个接收管。发射管发出红外光光线照到地面上白色地面反射率高接收管能收到较强的反射光黑色线条吸收率高接收管收到的反射光很弱。主控通过 ADC 读取接收管的电压就能得到一个随着地面颜色变化的数值。听起来很简单但这里面有个容易被忽略的坑红外接收管不光接收自己发射的光它还会接收环境光里的红外成分。太阳光直射、灯光频闪、附近有反光物体都会让读数漂移。所以进阶的第一个习惯就是不要把传感器读数当成固定真理要当成“受环境干扰的模拟量”来对待。另一个常见误区是使用只有数字输出的“开关式”灰度模块。这种模块内部一般有个比较器亮度超过阈值就输出高电平低于阈值就输出低电平。它确实能判断“有没有压线”但判断不了“线偏了多少”。在弯道里线可能刚好在两个传感器之间数字输出只会频繁跳变根本没法做平滑控制。ZTMR 这类支持模拟量采集的接口才是进阶巡线的基础。2.2 标定让传感器先学会“看环境”拿到一组新传感器第一步永远是标定而不是直接调 PID。标定的目标是给每个传感器算出两个基准值黑色时的读数和白色时的读数。有了这两个值后续每个原始 ADC 读数都可以映射到 0 到 1 之间也就是“黑的程度”。我习惯在一个例程里做三件事按键进入标定模式、把车放到黑线上采集黑基准、把车放到白地上采集白基准。采集时每个传感器连续读几十次取平均避免手抖和噪声。核心逻辑大概是这个样子#define N_SENSOR 8 uint16_t black[N_SENSOR]; uint16_t white[N_SENSOR]; void calibrate_black(void) { for (int i 0; i N_SENSOR; i) { uint32_t sum 0; for (int j 0; j 50; j) { sum analog_read(i); } black[i] sum / 50; } } void calibrate_white(void) { for (int i 0; i N_SENSOR; i) { uint32_t sum 0; for (int j 0; j 50; j) { sum analog_read(i); } white[i] sum / 50; } }采集完基准后归一化公式是raw_norm (raw - black) / (white - black) line 1 - raw_norm这里假设黑色读数小于白色读数。line越接近 1表示该传感器下面越黑越接近 0表示越接近白色地面。运算后一定要做一次限幅把小于 0 的值拉回 0把大于 1 的值拉回 1防止个别噪声点把数据带飞。标定值最好存到 Flash 或者 EEPROM 里。因为实际使用时你不可能每次都重新摆一遍车去标定很多套件上电后直接读取上次保存的基准就行。但要注意标定值只在相同环境下可靠。换个场地、换种灯光都要重新标定。这一点后面还会专门说。2.3 多路传感器数据处理加权平均算出线偏移有了归一化后的line[i]下一步是求出“线相对于车头中心的位置”。最常用也最好用的是加权平均法也叫重心法。假设有 8 个传感器下标从 0 到 7每个传感器在车头下方均匀排列。把每个传感器的line值当作权重线的位置就是sum L0 L1 L2 L3 L4 L5 L6 L7 position (0 * L0 1 * L1 2 * L2 ... 7 * L7) / sum error position - 3.5如果线正好在车头正中间position 大约等于 3.5error 就是 0线偏右error 就是正数线偏左error 就是负数。这个 error 就是后面 PID 的输入。加权平均的好处很多最明显的一点是它天然带有“模糊梯度”的意味。线在两个传感器中间时两边传感器的读数都会偏中间值加权平均出来的 position 会落在两个传感器下标之间这就比“哪个传感器亮就按哪个转向”平滑太多了。你可以把这个过程理解成一排人举着旗子旗子越黑的人手臂抬得越高最后所有人的重心位置就是线的位置。为了让数据更稳我还会在归一化之后做一次一阶低通滤波smooth[i] 0.7f * smooth[i] 0.3f * line[i];滤波会稍微牺牲响应速度但能明显减少传感器在边缘抖动时的毛刺。注意滤波系数不能太极端0.7/0.3 是比较折中的组合再低就会让小车反应变慢。3. 核心控制算法从阈值跳变到 PID3.1 为什么开关式控制不够用入门例程里常见的写法是中间传感器压到线就直行左边传感器压到线就右转右边传感器压到线就左转。这种“开关式”控制在直道上还能凑合一到 S 弯就会不停左右横摆。原因很简单控制量只有零和一没有中间状态。就像开车时你不可能只有“方向盘打满向左”和“方向盘打满向右”两个选项肯定要根据偏离程度调整转向角度。PID 做的事情就是把这个“程度”算出来让转向量随误差连续变化。3.2 P 项让转向量随偏差变化P 是比例项公式上就是Kp * error。它的含义最简单误差越大输出越大。比如底座 PWM 是 500当 error 为 0.5 时P 项输出 100那么左轮 600、右轮 400车轻微向右转当 error 为 2 时P 项输出 400那么左轮 900、右轮 100车明显向右拐。这里的方向定义要前后一致。我习惯把 error 定义为“正数表示线偏右”那么输出为正时就应该让左轮加速、右轮减速这样车辆才会向右转向。P 项太小车在弯道里转不过去P 项太大直线上也会左右震荡。Kp 没有万能的固定值和传感器间距、电机速度、轮胎抓地力都有关只能一步一步试出来。3.3 I 项处理长期偏航与累积误差I 是积分项它把过去一段时间内的误差累加起来。为什么要积分因为两个电机不可能完全一致电池电压也会波动P 项再准也可能存在一个很小的静态偏差。比如车总是会慢慢往左偏这个偏差不大但一直存在P 项单独处理不掉这时就需要积分项慢慢补一个修正量。巡线小车里 I 项要非常克制。积分项天然有“惯性”弯道里误差方向一直变化如果积分太强车会甩尾。而且当车辆完全丢线时积分一定要清零否则回来之后会带着一大笔历史账行为会变得很诡异。我一般会限制积分输出在一个很小的范围内比如正负 50 个 PWM 单位避免积分饱和。3.4 D 项抑制震荡过弯更稳D 是微分项它看的是误差的变化趋势。如果误差正在迅速变大说明车正在快速冲离赛道D 项会额外给一个修正如果误差正在迅速收敛说明车已经在回正轨迹D 项会减小输出防止冲过头。一个比较形象的类比是P 项是“看到偏了就打方向”D 项是“看到偏的趋势才打方向”。单独用 D 没有意义但它和 P 配合后能显著消除“画龙”现象。D 调得太大的时候车子在直线上会出现高频抖动电机发出明显的咔哒声这时候要果断降下来。3.5 一套可落地的 PID 框架综合起来我的控制循环大概长这样#define DT 0.01f float KP 200.0f; float KI 0.5f; float KD 20.0f; float error; float last_error; float integral; float output; void pid_loop(void) { error get_line_error(); if (line_lost_flag) { integral 0.0f; } else { integral error * DT; integral constrain(integral, -50.0f, 50.0f); } float derivative (error - last_error) / DT; output KP * error KI * integral KD * derivative; output constrain(output, -700.0f, 700.0f); last_error error; int base 500; int left base (int)output; int right base - (int)output; set_motor_pwm(left, right); }这里的get_line_error()要返回我们之前算出来的 error同时根据sum判断线是否丢了。line_lost_flag也在这里更新。注意 DT 必须是真实控制周期最好用定时器中断固定 10ms 执行一次不要靠 main 循环里的 delay 硬憋否则 PID 里的时间项全是乱的。4. 实战调参从画龙到贴线的完整过程4.1 调参前的准备与固定测试场景调 PID 最忌“随机调”。今天高兴改一下 Kp明天又改一下 Kd最后根本不知道是哪个参数起了作用。我建议你先固定一个测试场找一块大平地用两厘米宽的黑胶带贴一个直径大约一米二的圆环再额外贴一个 S 弯。场地不用复杂但一定要能重复跑。先把初始速度压到很低比如 base PWM 300 左右。这个速度下就算 PID 参数很不合理小车也不至于冲出太远。每次只改一个参数然后把结果记录下来。我习惯在代码里把 Kp、Ki、Kd 都定义成可以运行时修改的变量按键加减参数OLED 或者串口实时显示这样调试效率高很多。4.2 三步调参法P、D、I第一步先把 Ki 和 Kd 全部设成 0只留 Kp。从一个小值开始比如 100然后每次加 50。观察小车在圆环上的表现。Kp 太小时车在弯道里会偏向外侧甚至冲出线Kp 合适时车能贴着线走完整个圆环Kp 太大时车会在直线上左右晃动晃动幅度还会越来越大。找到刚刚好出现轻微晃动的那组 Kp再往回退 20% 左右作为基准 Kp。第二步固定 Kp慢慢加 Kd。Kd 的作用是压掉第一步里残留的震荡。我一般从 5 开始每次加 5加到直线稳定、弯道不甩尾为止。Kd 过大的表现前面说过直线上高频抖动电机发闷。合适的 D 项会让车头出弯时很干净不会有余摆。第三步最后再看 I。只有在长直道上有恒定的小幅偏移比如车总是慢慢贴向同一侧才需要加 I。从 Ki0.1 开始一次加 0.1加到偏移消失就停。大多数情况下KI 可以保持 0因为 I 项是双刃剑能不用就不用。4.3 动态限幅与变速过弯调好 PID 之后你会发现一个很尴尬的问题低速很稳一加速就冲线。原因也很简单速度高的时候留给控制系统的反应时间变短了同样的误差幅度需要更大的转向量。所以进阶巡线里一定要做动态降速。我常用的一招是根据误差绝对值调整目标速度float target_base fabs(error) 2.0f ? 300 : 600; base (target_base - base) * 0.05f;这个 0.05 是平滑系数作用是把速度变化变成渐变而不是瞬间跳变。瞬间跳变会破坏当前 PID 的积分状态还容易让车因为惯性失去抓地力。误差大的时候提前减速误差小的时候放开跑这是“稳”和“快”之间的平衡点。另外PID 输出一定要限幅。如果输出超过电机 PWM 的最大值或者进入电机驱动的死区实际转向量并不会按理论值增长车就会在高速弯里显得很“肉”。我上面的代码把输出限制在正负 700配合 base 500能保证左右轮 PWM 不会超过 1200 这种非法值。5. 场景进阶十字、T字、路口记忆与补线策略5.1 识别路口状态机比想象的更有用巡线再往上走就要处理十字路口、T 字路口和直角弯。最常见的方法是统计当前有多少个传感器压到了线上。普通直线上黑线宽度和传感器间距决定了一次大概会有两到三个传感器被触发十字路口或者 T 字路口横向的线会让更多传感器同时变黑。具体阈值要实测。我先在正常线上打印 activeCount记住正常最大值再到十字路口打印 activeCount记住路口最小值。然后取中间值作为进入路口的判定条件。这里有个很重要的技巧进入路口和退出路口要用不同的阈值。比如进入条件定成 activeCount 5退出条件定成 activeCount 3。两套阈值之间留出回差就能避免在路口边缘因为某个传感器反复抖动而重复触发。路口状态的伪代码大概是if (activeCount 5 !in_intersection) { in_intersection true; intersection_index; } if (in_intersection activeCount 3) { in_intersection false; }5.2 路口策略直行、转弯还是停车识别到路口之后具体动作取决于任务。如果只是绕场地巡线十字路口直行就可以了这时候不用做特殊处理继续跑 PID 就行但建议在路口期间把速度降下来一点防止横向线干扰。如果要左转或右转就需要在路口中间执行一段开环转弯而不是干等 PID 把线找回来。我的做法是检测到路口后根据预设的路口序列决定转向方向然后在固定时间内输出一个较大的转向 PWM。比如要左转就让左轮减速、右轮加速持续一段时间后再切回正常巡线。转弯期间千万不要沿用原来的 PID 输出。因为 PID 在横向线上算出的 error 是乱的继续用它会让小车反复左右摇摆错过转向窗口。开环转弯的时间需要实测可以先用串口或者按键把时间参数改成变量边跑边调。路口序列可以放到一个数组里比如char route[] {L, R, S, T}; // L左转 R右转 S直行 T停车每过一个路口intersection_index加一再根据route[intersection_index]决定动作。这样就能让小车按预定路线走完一整圈最后在终点停车。停车动作通常是在检测到最后一个路口时直接输出 PWM 为 0再用蜂鸣器响两声提示任务完成。5.3 丢线处理不慌先“补线”高速过弯时常见的情况是轮子压到线外所有传感器一下子都读不到黑线了。新手第一反应是急停但急停会让车的姿态更乱有时还会正好停在偏离赛道的位置重新起步更难。我的丢线策略分两个阶段。第一阶段是短时间丢失时间在 100ms 以内这时候车通常只是暂时脱离赛道边缘我继续沿用上一拍的输出让它保持原来的转向趋势冲一下很可能就能重新压回线上。第二阶段是长时间丢失超过 100ms 还没找回就进入搜索模式。搜索模式不要盲目原地转。我的做法是先按最后一次的 error 方向旋转一段时间因为车大概率是朝那个方向冲出线的如果没找到再向反方向旋转。如果两边都找不到再停车报警。代码结构类似if (line_lost_flag) { lost_time DT; if (lost_time 0.12f) { set_motor_pwm(last_left, last_right); } else if (lost_time 0.5f) { set_motor_pwm(-300, 300); // 朝最后一次 error 方向搜索 } else { set_motor_pwm(0, 0); beep(); } }这里的“补线”就是用一个虚拟误差代替真实误差。丢失的瞬间我们可以把 last_error 当作虚拟 error继续走 PID。虽然传感器看不到线但逻辑上认为线还在原来的相对位置这样短暂丢失时车会非常平滑。6. 常见问题与排查实录6.1 问题速查表巡线做多了你会发现九成以上的问题都出在几个固定的地方。我把最常见的现象、原因和排查顺序整理成了表格可以直接对照。现象最可能原因优先排查方向强光下发疯、读数乱跳环境红外干扰加遮光罩、降低传感器高度、重新标定直线上画龙、来回摆动P 太大或 D 太小降 Kp、加 Kd高速过弯直接冲出赛道转向输出饱和、降速太晚减小 base、增大输出限幅、提前动态降速总是朝同一侧偏电机特性不一致、电池电压下降充满电、加 I 项、测量两侧空载 PWM路口重复计数没有去抖、进入退出阈值太接近设置回差加计时器丢线后原地乱转丢线策略不明确分短时丢失和搜索两阶段处理换了场地就完全不行没有重新标定重新采集黑白基准6.2 强光下的“发疯”问题传感器在太阳底下经常会出现误判这是所有红外巡线车都绕不过去的坎。解决思路不是换传感器而是从物理层面减少环境光干扰。第一传感器离地高度最好控制在 8 到 15 毫米离地越近发射管和接收管之间的角度越小对外部光线的接收面积也越小。第二在传感器排上方加一块遮光板用热熔胶或者打印件都行相当于给传感器戴了顶帽子。第三跑之前重新标定一次让系统适应当前光照环境。6.3 同一套参数换个场地就废很多朋友调好一套参数换了个地板就发现怎么跑怎么不对。原因往往不是 PID 参数不行而是环境反射率变了。原来是浅色地砖配黑色胶带到了哑光地面或者反光地面传感器的基础值和对比度都变了。不重新标定归一化出来的数据就全错。所以我现在每次换场地第一件事永远是跑一遍标定程序标定完了再谈调参。越早养成这个习惯越少踩坑。6.4 电机差速跟不上算法PID 输出算得再好最终也要靠两个电机执行。电池电量下降后电机转速会明显变化同一个 PWM 值在不同电量下带来的速度完全不一样。如果你发现早上调好的参数下午跑起来全部偏位八成是电池电压变了。如果 ZTMR 板子上有电机编码器接口建议后期上闭环速度环让左右轮实际转速去追目标转速。没编码器的话可以先用万用表测一下电机驱动供电电压尽量保证每次调试都在相同电量下进行。另一个土办法是给两个电机分别做一次 PWM-转速曲线然后在程序里做一个简单的非线性补偿虽然精度有限但比完全不管强很多。7. 最后再分享两个小技巧第一个小技巧是调试信号的声音化。我给丢线、路口、标定完成都设置了不同的蜂鸣器提示音这样就不用一直盯着 OLED 或者串口看只要听声音就能知道小车当前处在什么状态。丢线时“嘀”一声路口时“嘀嘀”两声任务完成时响三声跑起来之后非常直观。第二个小技巧是把 error 和输出量实时发到串口绘图工具。调参的时候光看车跑得稳不稳是不够的还得看数据。error 波形应该在零轴附近小幅震荡如果波形频繁打到上下限说明传感器受到干扰或者 PID 参数偏大如果波形一直偏向一侧说明车有恒定的系统偏差需要考虑 I 项。数据不会骗人比用眼睛追车靠谱得多。巡线这一行最让人上头的不是跑通那一刻而是当你发现每一次参数微调都能在小车的姿态上看到反应时那种把不确定因素一点点消灭掉的过程。别怕翻车翻车说明传感器数据至少是真的。Z TMR 这套板子玩到后面你会发现巡线只是入口PID、状态机、路径规划这些通用能力才是真正能带走的东西。

相关新闻

Office 2016专业增强版加装Visio 2016:版本对齐与冲突排查指南

Office 2016专业增强版加装Visio 2016:版本对齐与冲突排查指南

1. 办公套件协同的底层逻辑与方案选型1.1 为什么单独装Visio总是出问题很多人第一次接触Visio,是因为工作中突然需要画流程图、网络拓扑图或者数据库ER图。打开Word和Excel发现里面自带的形状工具画出来的东西歪歪扭扭,连接线一拖动就乱跑,于…

2026/10/17 5:14:19 阅读更多 →
SQL Server学习路线全总结:从基础查询到性能调优

SQL Server学习路线全总结:从基础查询到性能调优

作为数据库方向绕不开的一课,SQL Server的学习难点从来不是语法本身,而是知识太散:索引、事务、执行计划、锁、备份恢复,每个单拎出来都能讲一整本书,但真要上手处理一个实际问题时,又不知道从哪下手。这篇…

2026/10/17 5:14:19 阅读更多 →
基于SCSSA的BiLSTM超参数自动寻优:时序分类实战手记

基于SCSSA的BiLSTM超参数自动寻优:时序分类实战手记

如果你正在用BiLSTM做分类任务,大概率经历过这种场景:调了好几组超参数,模型表现跟抽卡一样不稳,同一份数据换个随机种子结果天差地别。这类问题在滚动轴承故障诊断、文本情感分类、脑电信号识别这些任务里特别常见——BiLSTM确实…

2026/10/17 5:14:19 阅读更多 →

最新新闻

【共创稿事节】HarmonyOS 7 Agent 开发实战 09:Agent 测试评测集

【共创稿事节】HarmonyOS 7 Agent 开发实战 09:Agent 测试评测集

做 Agent 应用最怕的不是「写不出第一版」,而是「改了第三版之后,发现第一版明明答对的题现在答错了」。大模型有随机性、提示词有耦合、工具调用有边界,靠人肉聊天抽查既覆盖不全又无法回放。这一篇我们给 Agent 配上一套离线评测集&#xf…

2026/10/17 7:41:11 阅读更多 →
智能体密钥管理实战:Hermes与Agent Vault凭据注入与安全审计

智能体密钥管理实战:Hermes与Agent Vault凭据注入与安全审计

1. 为什么智能体需要一个“管钥匙的保安”做过 Agent 项目的人大概都有过这种体验:功能跑通了,Demo 演示也很顺利,但一旦要往生产环境推,心里就开始发虚。原因往往不是模型不够聪明,也不是编排逻辑有 bug,而…

2026/10/17 7:41:11 阅读更多 →
Flink Operator State 深度解析:从原理到批量 Sink 实战

Flink Operator State 深度解析:从原理到批量 Sink 实战

1. 为什么 Operator State 值得单独拎出来讲Flink 的状态体系里,Keyed State 出镜率极高,几乎每篇讲状态的资料都会先拿 keyBy 之后的 ValueState、ListState 举例。但真正落到生产环境,有一类状态是绕不开的:它不依赖 key&#x…

2026/10/17 7:41:11 阅读更多 →
Flink Operator State 深度解析:非键控状态管理实战指南

Flink Operator State 深度解析:非键控状态管理实战指南

1. 为什么 Operator State 值得单独拎出来讲Flink 的状态管理一直是流计算里最容易被低估的一块。大部分人刚上手的时候,注意力都放在窗口、水位线、Checkpoint 这些"显眼"的机制上,等到真正在生产环境里跑起来,才发现状态才是决定…

2026/10/17 7:41:11 阅读更多 →
RPA+大模型:打造外部群聊专家级自动应答系统

RPA+大模型:打造外部群聊专家级自动应答系统

1. 从一线需求说起:为什么群聊回应也能自动到“专家级”做运营和客户成功的朋友,大概率都经历过这种状态:手机里挂着四五个外部群,每个群都在问问题,有的问报价,有的问故障排查,有的纯粹是闲聊。…

2026/10/17 7:41:11 阅读更多 →
地质工程一体化实战:从地质建模到随钻导向与压裂设计的闭环

地质工程一体化实战:从地质建模到随钻导向与压裂设计的闭环

你要是问一个油气田开发工程师,最怕听到哪句话,十有八九是——“模型是这么说的,但井不是这么钻的。”这种地质和工程互相不认账的场面,在非常规油气、复杂油气藏开发里几乎每隔几天就来一次。模型画得再漂亮,现场不买…

2026/10/17 7:40:11 阅读更多 →

日新闻

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 阅读更多 →