Arduino机器人红外避障实战:从原理到三传感器智能决策
1. 项目概述与核心价值上次我们聊了海盗船机器人的基础搭建把电机、轮子、主控板这些“骨架”和“肌肉”给装好了。一个能跑起来的底盘就像是刚学会走路的孩子充满活力但横冲直撞。今天这第2话我们要给它装上“眼睛”和“本能反应”——红外避障功能。这绝对是让机器人从玩具迈向智能的第一步也是最激动人心的一步。简单来说我们要实现的效果是当机器人前进过程中前方的红外传感器探测到障碍物时它能立刻停下来或者聪明地转向绕开障碍物继续前进。这个过程完全自动不需要我们遥控。听起来是不是有点自动驾驶入门的感觉了没错其核心逻辑就是“感知-决策-执行”的闭环这是所有智能体无论是机器人还是高级算法的基础。通过这个功能你的海盗船将不再是一头撞上墙的莽夫而是一个能感知环境、自主规避的探险家。这个教程适合所有已经完成底盘搭建的朋友无论你是刚接触Arduino的新手还是想给现有项目增加实用功能的爱好者。我会从最基础的原理讲起手把手带你接线、写代码、调试并分享我调试过程中踩过的所有坑和总结出的技巧。你会发现实现一个稳定可靠的避障功能远不止接上线、抄段代码那么简单里面的门道可多了。2. 红外避障的核心原理与方案选型在动手之前我们必须搞清楚红外传感器是怎么“看见”障碍物的。市面上常见的红外避障模块通常指的是红外反射式光电传感器它不是一个摄像头不识别物体形状只判断前方一定距离内是否有物体。2.1 工作原理拆解三角测量与反射强度模块上一般有一个红外发射管发射看不见的红外光和一个红外接收管。其工作模式通常有两种电平触发型最常见模块内部有一个比较器电路。发射管持续发射红外光当前方没有障碍物时红外光射向远方接收管收不到或只能收到极微弱的光模块输出高电平如5V。当障碍物出现在探测距离内时红外光被反射回来接收管接收到足够强度的光内部电路翻转模块输出低电平0V。我们的主控如Arduino就是通过检测这个引脚电平的高低来判断有无障碍物。模拟量输出型接收管将接收到的红外光强度转化为连续的电压值输出。距离越近反射光越强电压越高或越低取决于设计。主控通过ADC模数转换读取这个电压值可以粗略估算距离实现更精细的控制但电路和程序稍复杂。对于我们这个级别的DIY项目电平触发型模块通常标为E18-D80NK或类似是性价比和易用性的最佳选择。它价格低廉几块钱一个、接口简单三根线VCC GND OUT、编程容易完全满足“有”或“无”障碍物的判断需求。2.2 模块选型与安装考量购买时你会注意到模块上有一个电位器。这个电位器是用来调节探测距离的通常顺时针旋转增大距离逆时针减小。我建议初次调试时先把它调到中间位置。安装位置至关重要。常见的错误是把它像眼睛一样装在机器人正前方最高点。这会导致两个问题一是容易探测到地面误触发二是无法探测到比较低矮的障碍物如桌腿。我的经验是将传感器向下倾斜约10-15度安装离地高度在5-10厘米左右。这样既能有效探测到前方的障碍物又能避免平坦地面的干扰。你可以用热熔胶或传感器支架来固定确保角度稳固。为什么不用超声波传感器超声波传感器测距更精准但成本高波束角大容易受到其他超声波源如另一个机器人干扰且对柔软表面的探测不稳定。红外方案对于室内、非强光直射环境下的避障已经足够可靠且更具成本优势。3. 硬件连接与电路详解现在让我们把传感器和Arduino或其他主控如STM32、ESP32逻辑相通连接起来。我以最普及的Arduino Uno为例。3.1 接线图与引脚定义你需要准备海盗船机器人底盘已完成Arduino Uno 主板 x1红外避障模块电平输出x1至少建议x3实现左中右探测杜邦线母对公若干单传感器接线基础版模块VCC- Arduino5V模块GND- ArduinoGND模块OUT- Arduino数字引脚 2(或其他任意数字引脚如3, 4, 5...)多传感器接线推荐版实现左中右探测为了更智能的避障比如左转还是右转我强烈建议使用至少三个传感器分别安装在机器人的左前、正前、右前。左传感器 OUT - 引脚 2中传感器 OUT - 引脚 3右传感器 OUT - 引脚 4所有传感器的 VCC 和 GND 分别并联到 Arduino 的 5V 和 GND。注意确保你的电机驱动板如L298N和传感器都从Arduino取电时总电流不超过Arduino板载稳压芯片的极限通常约1A。如果电机较多或功率大建议传感器仍接Arduino而电机驱动板使用独立电源供电但共地GND连接在一起。这是保证系统稳定的关键。3.2 电路逻辑与上拉电阻这里有一个容易被忽略但至关重要的细节红外模块的输出信号质量。有些模块在无遮挡时输出高电平有遮挡时输出低电平常闭型NC有些则相反常开型NO。购买时需确认通常说明书会写。我们的程序逻辑需要据此调整。更稳妥的做法是无论模块本身输出特性如何我们在Arduino的输入引脚上启用内部上拉电阻。这可以通过pinMode(pin, INPUT_PULLUP)实现。启用后当传感器输出断开或处于高阻态时引脚会被内部电阻拉高到高电平避免读到不确定的悬浮状态从而增强抗干扰能力。在代码部分我们会具体应用。4. 核心代码实现与逻辑解析硬件连接好后大脑程序才是灵魂。我们将代码分为几个部分逐步构建。4.1 基础单传感器避障紧急刹车我们先实现最简单的功能检测到正前方有障碍物就立刻停止。// 引脚定义 const int obstaclePin 2; // 红外传感器OUT接在引脚2 const int motorLeftForward 5; // 假设左电机前进引脚 const int motorLeftBackward 6; const int motorRightForward 9; const int motorRightBackward 10; void setup() { Serial.begin(9600); // 打开串口用于调试 pinMode(obstaclePin, INPUT_PULLUP); // 启用内部上拉电阻 // 初始化电机控制引脚为输出 pinMode(motorLeftForward, OUTPUT); pinMode(motorLeftBackward, OUTPUT); pinMode(motorRightForward, OUTPUT); pinMode(motorRightBackward, OUTPUT); // 启动时先停止电机 stopCar(); } void loop() { int obstacleState digitalRead(obstaclePin); // 读取传感器状态 // 注意根据你的模块类型调整逻辑 // 如果模块是“有障碍物时输出低电平”则如下判断 if (obstacleState LOW) { Serial.println(障碍物 detected! STOP!); stopCar(); // 可以加一个延时或者等待障碍物消失 delay(500); } else { Serial.println(Path clear. Moving forward...); moveForward(); } delay(50); // 短暂延时降低循环频率 } // 基础动作函数 void moveForward() { digitalWrite(motorLeftForward, HIGH); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, HIGH); digitalWrite(motorRightBackward, LOW); } void stopCar() { digitalWrite(motorLeftForward, LOW); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, LOW); digitalWrite(motorRightBackward, LOW); }代码解析与调试技巧INPUT_PULLUP如前所述这是稳定读取的关键。启用后默认读取到的是HIGH。当传感器触发有障碍输出低电平时会将其拉低为LOW。逻辑判断if (obstacleState LOW)这一行是关键。你必须根据实际模块测试来确定条件。测试方法上传代码后打开串口监视器用手在传感器前晃动观察打印的信息。如果逻辑反了把LOW改成HIGH即可。动作与延时检测到障碍后立刻stopCar()这是紧急制动。之后我加了delay(500)让机器人停止半秒。这是一个简单的处理防止在障碍物边缘反复“抽搐”。更高级的做法是进入一个等待循环直到障碍消失。4.2 三传感器智能避障左转/右转决策单传感器只能刹车三个传感器才能做出决策。这是本教程的精华。// 三传感器引脚定义 const int sensorLeft 2; const int sensorMiddle 3; const int sensorRight 4; // 电机引脚定义同上... void setup() { Serial.begin(9600); pinMode(sensorLeft, INPUT_PULLUP); pinMode(sensorMiddle, INPUT_PULLUP); pinMode(sensorRight, INPUT_PULLUP); // 电机引脚初始化同上... stopCar(); } void loop() { int leftVal digitalRead(sensorLeft); int middleVal digitalRead(sensorMiddle); int rightVal digitalRead(sensorRight); // 打印传感器值调试用 Serial.print(L:); Serial.print(leftVal); Serial.print( M:); Serial.print(middleVal); Serial.print( R:); Serial.println(rightVal); // 决策逻辑核心 if (middleVal LOW) { // 中间有障碍 Serial.println(Middle Obstacle!); stopCar(); delay(200); // 停一下准备转向 // 检查左右哪边更通畅 if (leftVal HIGH rightVal LOW) { // 左边空右边有障碍向左转 Serial.println(Turn Left); turnLeft(300); // 左转300毫秒 } else if (leftVal LOW rightVal HIGH) { // 右边空左边有障碍向右转 Serial.println(Turn Right); turnRight(300); } else if (leftVal HIGH rightVal HIGH) { // 左右都空随机选一个方向转避免卡死 Serial.println(Both clear, random turn); if (random(2) 0) { // 随机生成0或1 turnLeft(400); } else { turnRight(400); } } else { // 左右都有障碍比如走进死胡同后退然后大转弯 Serial.println(Dead end, backup and turn); moveBackward(500); turnLeft(600); } } else if (leftVal LOW) { // 仅左边有障碍轻微向右调整 Serial.println(Left obstacle, adjust right); adjustRight(100); } else if (rightVal LOW) { // 仅右边有障碍轻微向左调整 Serial.println(Right obstacle, adjust left); adjustLeft(100); } else { // 都没有障碍前进 Serial.println(All clear, forward); moveForward(); } delay(50); // 主循环延时 } // 新增的动作函数 void turnLeft(int time) { // 左轮后退右轮前进实现原地左转 digitalWrite(motorLeftForward, LOW); digitalWrite(motorLeftBackward, HIGH); digitalWrite(motorRightForward, HIGH); digitalWrite(motorRightBackward, LOW); delay(time); stopCar(); } void turnRight(int time) { // 左轮前进右轮后退实现原地右转 digitalWrite(motorLeftForward, HIGH); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, LOW); digitalWrite(motorRightBackward, HIGH); delay(time); stopCar(); } void adjustLeft(int time) { // 轻微左调右轮动力稍强或左轮稍弱/停顿 // 这里采用简单实现右轮前进左轮停止 digitalWrite(motorLeftForward, LOW); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, HIGH); digitalWrite(motorRightBackward, LOW); delay(time); stopCar(); } void adjustRight(int time) { // 轻微右调 digitalWrite(motorLeftForward, HIGH); digitalWrite(motorLeftBackward, LOW); digitalWrite(motorRightForward, LOW); digitalWrite(motorRightBackward, LOW); delay(time); stopCar(); } void moveBackward(int time) { digitalWrite(motorLeftForward, LOW); digitalWrite(motorLeftBackward, HIGH); digitalWrite(motorRightForward, LOW); digitalWrite(motorRightBackward, HIGH); delay(time); stopCar(); } // moveForward()和stopCar()函数同上略逻辑深度解析 这段代码实现了一个简单的有限状态机和决策树。优先级首先判断中间传感器因为正前方障碍最紧急。if (middleVal LOW)是最高优先级分支。子决策中间有障碍时并非简单转向而是先查看左右传感器状态 (leftVal,rightVal)根据环境决定转向方向。这是“感知-决策”的体现。随机化if (leftVal HIGH rightVal HIGH)时我使用了random(2)来随机选择左右。这是一个非常重要的技巧用于解决“对称困境”。想象机器人正对一个宽阔的墙面左右传感器都探测不到边缘如果没有随机化它可能会陷入无限循环左转一点发现还有障碍右转回来...。随机转向能帮助它逃出这种局部陷阱。边缘处理else if (leftVal LOW)和else if (rightVal LOW)处理的是仅单侧有障碍的情况比如沿着墙走。这时我们调用adjustLeft或adjustRight进行微调而不是急转让行进更平滑。死胡同处理最后一个else分支左右都有障碍处理的是走进角落的情况策略是先后退再大转弯。这个逻辑框架已经相当实用你可以通过调整delay的时间参数来改变转向的角度和调整的幅度以适应你的机器人尺寸和电机速度。5. 系统调试与性能优化实战代码写好了但直接上传后机器人可能行为怪异。别急调试是机器人制作的必修课。5.1 传感器阈值校准首先务必单独测试每个传感器。上传一个简单的测试程序只读取并打印某一个传感器的值。用手或白纸在传感器前方移动观察串口监视器中数值变化HIGH/LOW对应的实际距离。同时用小螺丝刀缓慢调节模块上的电位器感受探测距离的变化。找到一个合适的距离比如10-15厘米在这个距离上传感器能稳定、迅速地响应。校准心得环境光干扰红外传感器对强烈的环境光特别是日光灯、太阳光敏感。你会发现在灯光下和黑暗中探测距离可能不同。尽量在机器人预期的运行环境下进行校准。物体材质深色、吸光材质如黑色海绵反射弱探测距离会大大缩短而白色、光滑的物体反射强距离会变远。校准用的物体最好接近你环境中常见的障碍物如浅色墙壁、木腿。多个传感器干扰当三个传感器并排安装时一个传感器发射的红外光可能被旁边传感器的接收管收到导致误触发。解决方法1. 错开安装不要完全在一条水平线上2. 在传感器之间用隔板如一块小纸板进行物理隔离3. 在代码中可以错开发射时间需要更复杂的模块和代码但对于简单模块物理隔离是最有效的。5.2 运动参数调优代码中的delay时间参数如turnLeft(300)中的300直接决定了机器人动作的幅度。turnLeft(300)300ms的原地转向时间。你需要测试你的机器人在300ms内能转多少度。在地上画一条参考线让机器人执行一次转向测量角度。根据你需要的转向角度如90度来调整这个时间。adjustLeft(100)100ms的微调时间。这个时间要短让机器人只产生一个小的方向修正而不是大幅转向。moveBackward(500)后退时间。确保有足够的空间后退且后退距离不会让它撞到后面的东西。调优流程将机器人放在空旷处执行turnLeft(300)观察转向角度。反复测试找到一个时间值让转向角度大约为90度。记录这个时间值T90。用类似方法测试后退和微调的时间。将优化后的时间常数替换到代码中。5.3 引入“状态”与防抖当前代码在loop中不断检测并立即行动这可能导致机器人在障碍物边缘高频地“进退摇摆”或“转向抖动”。为了解决这个问题我们可以引入简单的“状态”和“防抖”机制。改进思路状态标志设置一个bool isAvoiding false;标志。当开始执行避障动作如转向时将其设为true在此期间忽略传感器输入直到动作完成再设为false。这能保证一个避障动作完整执行不被中途打断。软件防抖传感器信号可能因灰尘、快速掠过物体而产生瞬间抖动。可以在读取传感器后进行多次采样只有连续几次读到相同值才认为是有效信号。例如bool readSensorStable(int pin) { int count 0; for (int i 0; i 5; i) { // 连续采样5次 if (digitalRead(pin) LOW) count; // 假设LOW为有障碍 delay(2); // 每次采样间隔2ms } return (count 3); // 如果5次中有3次以上为LOW则认为确实有障碍 }在主循环中调用if (readSensorStable(sensorMiddle))来代替直接读取能极大提高稳定性。6. 常见问题排查与进阶思路即使按照教程一步步来你也可能会遇到一些问题。这里是我总结的“故障排除清单”现象可能原因排查与解决方法机器人完全不动电机不转1. 电源未接通或电压不足。2. 电机驱动板使能端ENA, ENB未接高电平。3. Arduino未正确上传代码或复位。1. 检查电池电量用万用表测量驱动板输入电压。2. 确认L298N等驱动板的使能引脚已用跳线帽接至5V或通过PWM控制。3. 重新上传一个简单的“让电机转”的测试程序。传感器没反应串口始终打印一种状态1. 接线错误VCC, GND, OUT接反或接触不良。2. 传感器模块损坏。3. 程序逻辑判断写反HIGH/LOW搞错。1. 用万用表测量模块VCC和GND间是否有5V电压。2. 用手遮挡传感器测量OUT引脚对GND电压是否变化。3. 通过串口打印原始digitalRead值并调整if判断条件。机器人行为混乱无故转向或停止1. 多个红外传感器互相干扰。2. 环境光干扰强烈如阳光直射。3. 电源噪声导致Arduino复位或信号不稳。1. 在传感器间加装物理隔板。2. 改变运行环境或为传感器加装遮光罩用热缩管或黑色电工胶布包裹非透镜部分。3. 为Arduino和电机驱动使用独立电源并确保共地。这是解决大多数诡异问题的关键探测距离不稳定时远时近1. 传感器电位器未调好或松动。2. 被测物体颜色/材质差异大。3. 传感器供电电压不稳。1. 重新校准并点一点热熔胶固定电位器小心别弄到内部。2. 理解这是红外传感器的物理限制可考虑换用超声波做辅助。3. 检查供电线路确保导线够粗接触良好。转向角度不精确每次不一样1. 电池电量下降导致电机转速变化。2. 地面摩擦力不均如地板接缝。3.delay时间控制不精确。1. 使用满电电池测试或考虑使用编码器进行闭环速度控制进阶内容。2. 在平滑、均匀的地面测试。3. 用millis()函数替代delay()进行非阻塞式时间控制可以获得更稳定、可响应的时序。进阶思路 当你完美实现了基础避障后可以尝试以下升级让你的海盗船更聪明融合其他传感器增加一对朝下的红外或灰度传感器实现“悬崖防跌落”功能。当检测到前方是桌面边缘时优先执行后退和转向。状态机优化将当前的简单决策树升级为更清晰的状态机如“前进态”、“避障态”、“旋转态”、“沿墙走态”每个状态有明确的进入条件、执行动作和退出条件代码会更易维护和扩展。PID沿墙走利用左右传感器与墙壁的距离误差通过PID算法动态调整左右电机速度实现平滑的沿墙巡航这是扫地机器人常用的技术。上位机调试通过蓝牙或Wi-Fi模块将传感器数据实时发送到电脑或手机用图形界面可视化机器人的“所见所想”这对复杂逻辑调试有巨大帮助。红外避障是机器人感知世界的起点。通过这个项目你不仅学会了接线和编程更重要的是理解了“传感器-控制器-执行器”这一经典架构以及如何通过软件逻辑将简单的硬件组合成智能行为。调试过程中那些反复的测试、参数的微调、问题的排查才是工程实践中最宝贵的经验。拿起你的海盗船开始调试吧当它第一次成功绕开你设置的障碍时那种成就感就是驱动我们继续探索的最大动力。

相关新闻

深度学习时序预测模型对比:Transformer-BiLSTM等5种模型Matlab实现

深度学习时序预测模型对比:Transformer-BiLSTM等5种模型Matlab实现

1. 项目概述时序预测是机器学习领域一个经典而重要的研究方向,在金融、气象、工业控制等领域都有广泛应用。最近我在做一个比较有意思的实验:用五种不同的深度学习模型(Transformer-BiLSTM、Transformer、CNN-BiLSTM、BiLSTM和CNN&#xff09…

2026/7/29 6:09:40阅读更多 →
西门子S7-200 PLC与组态王构建高可靠性火灾报警系统

西门子S7-200 PLC与组态王构建高可靠性火灾报警系统

1. 项目概述:西门子S7-200 PLC与组态王构建火灾报警系统去年给某化工厂做安全改造时,我用了西门子S7-200 PLC搭配组态王搭建了一套高可靠性的火灾报警控制系统。这种组合在工业自动化领域堪称经典配置——S7-200以其稳定性和性价比著称,而组态…

2026/7/29 6:09:40阅读更多 →
AI Coding安全|灵脉CodeAI让AI生成代码先过安全护栏

AI Coding安全|灵脉CodeAI让AI生成代码先过安全护栏

当AI Coding、Vibe Coding、代码智能体开始进入企业研发流程,代码生产方式正在发生根本变化。开发人员不再只是手写代码,也会通过AI生成函数、补全逻辑、调用工具、修复缺陷,甚至让智能体完成一段完整研发任务。效率提升的同时,安…

2026/7/29 6:09:40阅读更多 →
驻极体麦克风前置放大电路设计:从原理到实战的完整指南

驻极体麦克风前置放大电路设计:从原理到实战的完整指南

1. 项目概述:从“听”开始,聊聊驻极体麦克风那点事如果你玩过录音、做过直播,或者自己动手做过一些需要拾音的小玩意儿,那你大概率接触过驻极体麦克风。它太常见了,从几块钱的电脑麦克风到几十块的领夹麦,核…

2026/7/29 7:20:49阅读更多 →
NumPy矩阵运算全解析:从基础操作到实战应用

NumPy矩阵运算全解析:从基础操作到实战应用

1. 项目概述:为什么Numpy是Python数据科学的基石?如果你刚开始用Python处理数据,无论是做机器学习、科学计算还是简单的数据分析,很快就会发现一个绕不开的名字:Numpy。这个库几乎成了Python世界里处理数组和矩阵运算的…

2026/7/29 7:20:49阅读更多 →
Express.js+MySQL构建养老院管理系统的全栈实践

Express.js+MySQL构建养老院管理系统的全栈实践

1. 项目概述:从零构建养老院管理系统的全栈实践这套养老院管理系统解决方案采用Express.jsMySQL技术栈,配套微信小程序端,是一套完整的前后端分离架构实战案例。我在实际部署测试中发现,它特别适合两类人群:一是需要快…

2026/7/29 7:20:48阅读更多 →
JVM调优实战:从线上Full GC事故到低延迟服务优化

JVM调优实战:从线上Full GC事故到低延迟服务优化

1. 从一次线上事故说起:为什么JVM调优不是“玄学”去年年底,我们团队负责的一个核心交易服务在“双十一”预热期间,毫无征兆地出现了几次长达十几秒的“服务假死”。监控大盘上,接口响应时间从正常的几十毫秒直接飙到上万毫秒&…

2026/7/29 7:20:48阅读更多 →
电商智能客服技术演进史:从规则引擎到AI Agent的架构变迁

电商智能客服技术演进史:从规则引擎到AI Agent的架构变迁

“亲,有什么可以帮您?” 这句每天在电商平台上出现无数次的话,背后是一套经历了二十多年迭代的技术系统。从简单的if-else规则到千亿参数的大模型,电商智能客服的技术架构完成了一次又一次的范式跃迁。 一、规则引擎时代&#xff…

2026/7/29 7:20:48阅读更多 →
Python调用C++实战指南:四种方案对比与pybind11深度解析

Python调用C++实战指南:四种方案对比与pybind11深度解析

1. 项目概述:为什么要在Python里调用C?做开发时间长了,你总会遇到一些场景:算法模型的计算密集部分用Python写太慢,一个核心循环拖垮了整个应用的响应;或者你手里有一个用C写了多年、经过千锤百炼的库&…

2026/7/29 7:18:28阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →