要说这几年仓储物流领域最热闹的词,AGV一定算一个。AGV,全称是Automated Guided Vehicle,自动导引运输车,通俗点讲就是在仓库、车间里按预设路线自己跑的小车,不需要人工驾驶,也不需要轨道,比传统传送带灵活太多,比人工搬运又稳定太多。做AGV仓储项目这么多年,我最大的感受是:单台AGV只是一个会动的自动化设备,真正让仓库跑起来的,是背后的调度系统、路径规划算法和现场实施经验。这篇博文我就从AGV仓储项目的整体架构讲起,重点拆解A*算法在AGV路径规划里的落地实现,再结合三条AGV同时作业的典型场景,讲讲多车调度、死锁处理和施工部署里那些别人不会明说的细节。如果你正准备上AGV项目,或者是刚接手AGV调度开发的工程师,这篇内容应该能帮你少走不少弯路。
1. AGV仓储项目,到底在解决什么问题
很多老板第一次看到AGV样机,第一反应是“这不就是个遥控车吗”。这话没错,单看一台车确实不复杂,底盘加电机加传感器加电池,再写一套控制程序,就能跑起来。但AGV仓储项目的本质从来不是造车,而是用一套系统把“货该怎么搬、车该怎么跑、任务该怎么派”这件事理顺,让仓库里的人、车、货、系统高效协同起来。
1.1 一张图看懂AGV仓储系统的核心组成
一个完整的AGV仓储项目,通常包含以下五个核心模块,缺一不可。
- AGV本体:包括底盘、驱动轮、导航传感器(激光雷达、二维码相机、磁条传感器等)、避障传感器(激光/超声波/安全触边)、电池和充电模块、车载控制器。本体负责“能不能走”和“走得稳不稳”。
- 调度系统:这是整个项目的“大脑”,负责接收任务、分配车辆、规划路径、处理交通管制和充电调度。调度系统写得好不好,直接决定项目能接多少台车、跑多顺畅。
- 地图与导航系统:AGV需要知道“自己在哪里”“要去哪里”“怎么过去”。地图建模和定位算法决定了AGV走位的精度,常见方案有激光SLAM、二维码导航、磁条导航等。
- 任务系统:对接上层的WMS(仓库管理系统)或MES(制造执行系统),接收入库、出库、移库、盘点等任务,再把任务拆解成AGV可执行的动作序列。
- 基础设施:包括Wi-Fi/5G网络、充电桩、货架、库位标识、电梯/门控接口、安全围栏等。很多时候项目上线不顺,不是AGV和调度的问题,而是基础设施没跟上。
这五个模块里,AGV本体的硬件选型相对成熟,真正拉开项目差距的是调度算法和现场实施。我见过太多项目,硬件一模一样,但因为调度策略和路网设计不同,一个仓库一天能跑2000托,另一个只能跑800托。
1.2 为什么说调度系统才是AGV仓储项目的灵魂
单台AGV,路径规划用什么算法都无所谓,因为它不需要考虑别的车。但仓储场景最少也是三五台车起步,多的时候几十台同时作业,这时候问题就来了:这么多车在同一条巷道里走,怎么避免撞车?任务来了派哪台车去最合适?车没电了怎么安排充电又不影响作业高峰?这些统统是调度系统的活。
调度系统的核心能力可以拆成三块:
- 任务分配:当一个搬运任务产生时,系统要从可用车辆里选一台“最合适”的车。怎么定义最合适?常见策略有就近原则、空闲时间最短原则、电量优先原则等。看似简单,但任务多起来之后,分配策略的一个小差别会导致整体效率差出10%以上。
- 路径规划:给定起点和终点,为AGV找一条最优路径。这就是A*算法的主战场,后面我会重点展开。
- 交通管理:多台AGV共享路网时,系统要保证车与车之间不碰撞、不堵塞、不死锁。这是调度系统最复杂、最考验功力的部分。
调度系统还有一个容易被忽视的点:异常恢复。AGV运行中难免出问题,比如托盘歪了、避障触发停住了、网络闪断,调度系统能不能快速识别并把任务重新指派别的车,决定了仓库的连续作业能力。我经历过一个项目,调度系统没有异常超时机制,一台车停住之后整个巷道全部堵死,现场工人只能手动把车推开,非常狼狈。
1.3 导航方式怎么选:激光SLAM、二维码还是磁条
AGV仓储项目里,导航方式的选型往往决定了整个项目的成本和柔性。三种主流导航方式的区别,我整理了一张表。
| 导航方式 | 定位精度 | 现场改造量 | 柔性 | 成本 | 典型场景 |
|---|---|---|---|---|---|
| 磁条导航 | ±10mm | 大,需地面敷设磁条 | 低,改路径要重新敷设 | 低 | 线路固定的产线搬运、仓储主通道 |
| 二维码导航 | ±5mm | 中,需地面贴码 | 中,改路径要重新贴码 | 中 | 电商仓、需要高精度对接的场景 |
| 激光SLAM导航 | ±10mm | 小,无需地面改造 | 高,改路径只需改地图 | 高 | 柔性产线、复杂仓储、人车混行场景 |
选型没有绝对的好与坏,关键看场景。如果你只是做一条固定路线的产线搬运,磁条导航完全够用,成本低、维护简单,没必要上激光SLAM。如果你做的是电商拣选仓,货架位置频繁变化,那激光SLAM的柔性就非常值钱,因为地图改起来几乎零成本。二维码导航的优势是高精度对接,比如AGV需要精准插取料架、对接输送线,二维码导航的重复定位精度能到±5mm,比激光SLAM更稳定。
我在实际项目中的一个体会是:导航方式决定了AGV“认不认识路”,但它只是整个系统的地基,真正决定项目好不好用的是调度层怎么把路网约束、车辆状态、任务优先级这些信息融合起来做决策。很多刚入行的朋友容易把注意力全放在AGV本体的定位精度上,反而忽略了调度和流程设计,这是本末倒置。
2. 路径规划核心:A*算法是怎么在AGV上跑起来的
提到AGV路径规划,绕不开A算法。A是一种经典的启发式搜索算法,在网格地图上找两点间最短路径,效率和效果都很好。AGV仓储里的路径规划虽然工程实现比教科书复杂不少,但核心思想就是A那一套。我下面从地图模型讲起,把A的每个环节掰开揉碎说清楚。
2.1 先说清楚AGV的地图模型:栅格地图和拓扑地图
路径规划之前,得先把地图建模搞清楚。AGV地图常见两种形式:栅格地图和拓扑地图。
栅格地图把场地切成一个个大小相同的格子,每个格子标记为“可通行”或“不可通行”(障碍物)。栅格越小,地图越精细,路径越优化,但计算量也越大。仓储场景下,AGV是沿着通道跑的,货物、货架都是障碍物,栅格地图的好处是直观、容易理解,但问题也很明显:如果场地很大,栅格数量会爆炸,A*搜索速度会肉眼可见地变慢。
拓扑地图则是把场地抽象成节点和边:节点代表关键位置(如库位、充电桩、转弯点),边代表节点之间的可通行路径,并记录长度、限速、方向等属性。AGV仓储项目里,拓扑地图几乎成了标配,因为它的计算量小、便于维护,而且天然适合做多车交通管理——每条巷道就是一条边,调度系统直接在边上做“占位”判断就行。
我个人的经验是:小项目(比如两三台车的产线物流),用栅格地图做A*开发速度快;有一定规模的项目(十台车以上的仓储),建议直接上拓扑地图,后面做多车协调会省很多事。地图模型选错了,后期重构成本非常高。
2.2 A*的核心逻辑:启发式搜索如何兼顾效率和最优性
A*算法的核心公式只有一行:
f(n) = g(n) + h(n)
其中:
- g(n):从起点到当前节点n已经花费的实际代价,在AGV场景里通常就是已经行走的距离或时间。
- h(n):从当前节点n到终点的预估代价,称为启发式函数。它是对“还有多远”的一个估算。
- f(n):两者的和,表示经过节点n到达终点的总预估代价。
A的工作原理,就是维护一个“开放列表”(待考察的节点)和一个“关闭列表”(已经考察过的节点),每次从开放列表里挑f(n)最小的节点往外扩展,直到找到终点。这就像你开车去一个陌生地方,脑子里会有个大概方向,但每到一个路口,你会倾向于走那条“离目标更近且已经走的路程不太冤枉”的路,A把这种直觉变成了可计算的逻辑。
启发式函数的选择有讲究。如果h(n)永远不大于真实代价,A*保证能找到最短路径,这叫“可采纳性”。但h(n)估得太保守,搜索的节点就会变多,速度变慢;估得太激进(超过真实代价),速度上去了但可能找不到最优解。AGV仓储里最常用的启发式函数是曼哈顿距离,因为AGV的路径大多呈直角网格状,曼哈顿距离(两个点横纵坐标差之和)非常贴合实际情况,既保证最优性,计算量又小。欧氏距离也可以用,但在这类网格路网里容易高估代价,导致路径不最优。
想兼顾速度和最优性,工程上还有个常见技巧:给h(n)加一个权重系数w,变成f(n) = g(n) + w * h(n)。w越大,算法越“贪心”,搜索越快,但路径可能不是严格最短。实际项目中,如果AGV走的路稍微长一点点,但调度响应快了很多,完全值得。我一般在项目调试时先设w=1,确认路线正常后,再逐步调大w,在效率和路径质量之间找平衡。
2.3 代码层面看A*:一个小型可运行的实现
下面我给出一段标准A*算法的Python实现,为了方便演示,使用了栅格地图。实际AGV项目里换用拓扑地图,核心逻辑完全一样,只是节点从“格子”变成“路口”。
import heapq def heuristic(a, b): # 曼哈顿距离,适合网格路网 return abs(a[0] - b[0]) + abs(a[1] - b[1]) def a_star(grid, start, goal): # grid: 二维列表,0表示可通行,1表示障碍物 rows, cols = len(grid), len(grid[0]) open_list = [] heapq.heappush(open_list, (0, start)) came_from = {} g_score = {start: 0} f_score = {start: heuristic(start, goal)} while open_list: _, current = heapq.heappop(open_list) if current == goal: # 反向回溯路径 path = [] while current in came_from: path.append(current) current = came_from[current] path.append(start) path.reverse() return path # 四方向邻居 for dx, dy in [(1,0), (-1,0), (0,1), (0,-1)]: neighbor = (current[0] + dx, current[1] + dy) if not (0 <= neighbor[0] < rows and 0 <= neighbor[1] < cols): continue if grid[neighbor[0]][neighbor[1]] == 1: continue tentative_g = g_score[current] + 1 # 每步代价记作1 if tentative_g < g_score.get(neighbor, float('inf')): came_from[neighbor] = current g_score[neighbor] = tentative_g f_score[neighbor] = tentative_g + heuristic(neighbor, goal) heapq.heappush(open_list, (f_score[neighbor], neighbor)) return None # 找不到路径这段代码的重点有几个。
- heapq是Python的优先队列实现,用它来维护开放列表,每次从堆顶弹出当前f值最小的节点,效率比每次遍历列表要高很多。
- came_from字典保存了每个节点的前驱节点,找到终点后,从终点一路回溯到起点,倒序就是完整路径。
- get(... , float('inf'))这个写法是为了处理“某个节点还没被访问过”的情况,把它默认的g值设成无穷大。
- 邻居遍历只取了上下左右四个方向,没有走斜角,这符合AGV仓储直角路网的实际,也避免了对角穿越障碍物的问题。
你在自己开发调度系统时,不一定照抄这段代码,更重要的是理解它的数据结构:开放列表用什么容器维护、怎么更新g值、怎么回溯路径。理解了这三个问题,任何语言都能写出来。
2.4 A*在实际AGV工程里的几个关键坑点
用A*做AGV路径规划,教科书代码只解决了“找一条最短路径”的问题,工程上还有几个坑必须处理。
第一是“直角转弯不连续”的问题。A在栅格地图上规划出来的路径,往往贴着障碍物边缘走,转弯处是折线。AGV实际运行时不可能“原地直角拐弯”,得有转弯半径。所以工程上要对A路径做平滑处理,或者限制路径必须走路网中线,减少贴边和急弯。我在项目里通常的办法是:A*算完路径后,做一次“路径后处理”,把同一方向上的连续路径点合并成一条直线指令,转弯处预留圆弧过渡。
第二是“不可达区域”的处理。AGV地图里存在很多设备交互区域,比如充电桩前、对接工位前,这些区域虽然在地图上是通的,但某个时刻可能有设备在动作,不允许AGV进入。工程实现上,这些“区域锁”要实时叠加到A*的障碍物数据里,AGV的路径规划必须动态考虑这些临时占位信息。
第三是算法的动态性。静态A*只在任务下发那一刻算一次路径,但AGV仓储是个动态环境,其他车在移动、新障碍物可能出现。所以调度系统的路径规划不能是“一次规划,跑到底”,而要做周期性的重规划,或者结合交通管制策略,把动态问题转化成静态问题处理。关于这一点,下一节重点讲。
3. 三条AGV同时跑,A*就不够用了吗
现在说回热词里的“三条agv基本a算法”。单看这句话,可以理解为:“三条AGV场景下,基础算法就是A”。这个理解基本没毛病——A确实是多AGV路径规划的地基,但光靠A还不够。一台车跑仓库,A绰绰有余;三台车跑,问题就开始显现;十台车以上,A只能是调度系统里的一小块拼图。
3.1 多AGV场景里的“第二辆车”问题
想象一个极端的情况:两台AGV相对而行,行驶在同一条单行道上,A*给它们规划的都是最短路径,结果它们在路中间碰头了,谁也过不去。这就是“第二辆车”问题,也是多AGV调度最简单的死锁模型。
解决办法有几层。
- 最简单的是“路网方向约定”:把所有巷道设为单行道,AGV只能按约定方向走,从机制上消灭对向冲突。代价是路径长度会增加,因为车辆可能要绕路。
- 进一步是“占位管理”:调度系统给每条边维护一个“当前被哪台车占用”的标记,A*在规划路径时,不仅要看边是否可通行,还要看它是否被占用。被占用的边暂时视为不可通行,等前面的车通过了再放行。
- 再进一步是“时间维度扩展”,也就是时空A*:把边占用的时间也考虑进规划里,A不仅要找空间路径,还要给路径上的每个节点安排时间戳,保证“我到达这个节点时,这个节点是空闲的”。时空A在算法上和普通A*很相似,只是状态空间从二维坐标变成了“坐标+时间”,复杂度和灵活性都上升了一截。
我实际项目中,三台车的场景用占位管理基本就够用了,时空A更多用在十几台车以上的复杂场景。但不管哪种方案,A都作为底层“找路”的工具存在,交通规则是叠加在A*之上的一层逻辑。
3.2 三条AGV怎么避免互相堵死:交通管制与死锁处理
在多AGV调度里,“死锁”是不可不防的问题。死锁的典型形态是:车A等着车B让路,车B等着车C让路,车C又等着车A让路,三台车在路网上形成一个环形等待,谁也动不了。
要想避免死锁,工程上有两个方向:预防和恢复。
预防的核心是打破环形等待的条件。仓储场景里最有效的一招是“资源分配排序”:给路网中的每个区域一个唯一的优先级编号,AGV要进入某个区域前,必须先获取该区域的“锁”,而且获取的顺序必须按照优先级编号从小到大申请。这样即使多个AGV同时想要多个区域,也不会形成环,因为只有优先级最高的那台车能先满足条件。这个思路和操作系统的银行家算法、资源有序分配法是同一个原理,在AGV调度里非常实用。
恢复的策略则是“超时监控+重新规划”:如果AGV在某个节点等待时间超过阈值,调度系统判定可能死锁,主动给其中一台车下“倒车”或“绕行”指令,打破僵局。这种方法实施简单,但需要配合路网具备绕行条件,如果整个仓库只有一条主干道,那绕都没地方绕。
在我做过的项目里,通常两种手段一起用:路网设计阶段就把单行道和双行道配好,尽量留出绕行空间;调度算法层面用资源有序分配做预防,再叠加超时监控做兜底。两条腿走路,才能保证多车长时间稳定运行。
3.3 A*调优的几条实战经验
前面讲了算法和调度,这里分享几条A*在AGV项目里的实操调优经验,都是踩过坑之后总结出来的。
- 地图的粒度要匹配AGV的物理尺寸。路网的节点间距不宜过密也不宜过疏。过密,A*搜索时间长,路径又碎又绕;过疏,AGV转弯半径可能无法满足。经验值是节点间距不要小于AGV车身长度的一半,分部式节点不要离墙太近,否则实际运行时避障传感器会频繁报警。
- 边的代价不要只用长度,要加上“通行难度”。仓储路网里有的巷道窄,有的巷道宽,有的路段限速。A的g值计算里如果只按距离算,AGV可能会被导向一条“近但难走”的路。合理的做法是边的代价 = 距离 + 限速惩罚 + 宽度惩罚。宽大主通道的代价低,窄巷道的代价高,这样A天然倾向走主通道,减少冲突和绕行。
- 路径要加“方向稳定性”约束。A*规划出来的路径如果频繁换向,AGV走起来非常难看,而且伤电机。可以在启发式或路径后处理里加入“尽量走直线”的偏好,减少zigzag路径。
3.4 多AGV调度中的常见问题现场实录
分享一个真实的调试片段。某项目里三台AGV负责一个产线的物料配送和成品回收,线路不大,但经常出现“任务卡死”:系统里显示车一直在某个路口等,但前面根本没车。
排查过程是这样的。第一步看日志,发现两台车长时间同时请求同一段单行道资源。第二步看地图,问题出在路网设计:这条段路的中间和两头各有一个节点,车辆占用和释放节点是分开的,结果车A占了两端的节点,车B的车头卡在中间节点上,两边“互相以为对方占着同一块地”,形成逻辑死锁。第三步改路网,把这条段路合并成一个“资源整体”,AGV要么整体通过,要么整体不进入。改完之后问题消失。
这个案例让我明白一个道理:有时候问题不在算法,而在路网的资源粒度设计。A*和调度算法再强,如果路网模型抽象得不合理,运行起来照样埋雷。所以做AGV仓储项目,路网设计一定要反复推敲,宁可多花一周时间建模,也不要上线后天天救火。
4. AGV仓储项目从进场到上线的完整实操流程
讲完算法和调度,接下来聊聊项目落地。一个AGV仓储项目,从客户有想法到系统正式跑起来,通常要经过以下几个阶段:需求调研、方案设计、仿真验证、进场实施、联调测试、试运行、验收交付。每个阶段有每个阶段的坑,每一个都不能省。
4.1 需求调研阶段最容易犯的错误
需求调研是最容易“拍脑袋”的阶段。客户说“我们要上10台AGV”,但当你问“10台车同时作业的峰值时每小时要搬多少托”“巷道多宽”“货架腿间距多少”“地面做过硬化处理没有”时,很多客户回答不上来。
这个阶段一定要抠数据。搬运节拍是最关键的指标:每小时需要完成的搬运次数,决定了AGV数量和充电策略。搬运节拍算少了,项目上线就拥堵;算多了,投资浪费。
节拍的计算公式很简单:
单台AGV每小时可完成的任务次数 = 3600秒 /(搬运一个周期的总时间)
一个周期包括:接任务时间、走行时间(空载)、取货时间、走行时间(负载)、放货时间、可能的充电时间折算。把所有路段走行时间加起来,再加上取放货的固定动作时间,就能估算出单台车的产能,再用总需求除以单台产能,乘以一个冗余系数(通常1.15~1.3),就是需要的AGV数量。
之前有个项目,客户根据面积估算只要6台车就够了。我们实测了行走距离和取放货时间后一算,发现峰值节拍下需要9台。幸亏在需求阶段发现了,不然项目上线必挂。所以说,搬运节拍的现场实测非常关键,不要在办公室里凭空估。
4.2 现场实施时容易被忽视的基础设施细节
AGV项目进场施工后,大部分问题出在基础设施上,而不是AGV本身。几个高频“坑位”我列一下。
- 地面平整度:AGV的导航和避障都依赖传感器,地面不平(坡度过大、有沟坎、地坪起砂)会导致AGV定位偏差、车身颠簸,甚至万向轮悬空。进场前一定要做地坪检测,不平整的地方先修整,别等AGV进场了再补地面,那代价非常大。
- 网络覆盖:调度系统的所有指令都要靠Wi-Fi下发,AGV行走中如果网络闪断,轻则停在原地等重连,重则调度指令丢失,造成碰撞风险。Wi-Fi覆盖要提前做信号走查,重点覆盖巷道和充电区,路由器漫游切换时间要控制在50ms以内。
- 充电桩位置:充电桩不能放在搬运主通道上,否则AGV充电时,这辆车就把主通道堵死一大半。充电区最好独立设置,并且AGV低电量时要能自动算好“完成任务后再去充电”还是“立刻中断任务去充电”,这个逻辑要和调度系统好好联调。
- 货架腿间距:货架腿是AGV行驶路径上的障碍物。如果货架腿间距太窄,AGV钻进去容易擦碰;太宽又浪费库容。这个要在前期规划时就和客户确认清楚,必要时让客户对货架进行调整。
4.3 和WMS/MES系统对接的接口设计
AGV调度系统不会单独工作,它必须和客户的WMS或MES系统对接。接口设计的好坏,直接影响上线周期和稳定性。
典型的对接流程是:WMS下发搬运任务(比如从A库位搬运2托货物到B站台),AGV调度系统接收任务后,拆解成“空车去A → 取货 → 到B → 放货”这样的车辆指令序列,执行完成后回报WMS一个完成状态。
接口设计里有两个点最关键:
- 任务状态机要清晰。一个任务至少要经历“已下发、待执行、执行中、已完成、已取消、异常”这几个状态。WMS随时可能查询任务状态,调度系统必须能实时反馈。状态含糊不清,是上线期间最常见的问题来源。
- 异常回退机制要提前设计。比如AGV行驶到一半,发现A库位的货已经被人工搬走了,此时任务怎么处理?是取消、改派还是挂起?这些异常分支如果不在联调前设计好,现场就会陷入“业务说要改系统,系统说要改业务”的泥潭。
接口联调通常建议先在测试环境跑两周,把各种正常和异常流程都过一遍,再上生产环境。跳过这一步、直接上真实现场的项目,大概率会出大问题。
4.4 WCS和RCS的关系:区分两类系统
很多客户第一次见到AGV调度,分不清WCS和RCS。这里顺便讲清楚:
- WCS(仓库控制系统)偏业务执行层,负责和WMS对接,管理输送线、提升机、AGV等自动化设备的任务分发和状态收集。
- RCS(机器人调度系统)更偏设备控制层,专注于AGV的车队管理、路径规划、交通管制和设备监控。
在项目里,WCS更像是“工头”,把WMS的指令拆给各个设备;RCS是“专管AGV的工头”,只负责AGV车队内部的事。如果整个项目只有AGV一种自动化设备,WCS和RCS往往合并成一个系统;如果还有输送线、堆垛机等,WCS和RCS就必须分开部署。选型前先想清楚项目复杂度,能少走不少弯路。
5. 常见问题与排查技巧实录
AGV仓储项目上线后,运维是持久战。我整理了现场高频问题和排查思路,做成表格,方便你直接参考。
| 现象 | 可能原因 | 排查思路 |
|---|---|---|
| AGV定位突然偏了 | 激光SLAM特征点变化大、二维码被遮挡或污损、地面反光 | 先看定位日志的置信度,检查现场环境是否有新增变化(新放货架、阳光直射),再检查传感器表面 |
| AGV找不到路径 | 路网配置错误、任务终点不可达、临时区域锁未释放 | 用地图编辑器检查路网连通性,查看调度日志中A*返回的是“不可达”还是“规划超时” |
| 任务卡在“执行中”不动 | 调度任务状态机异常、AGV通讯超时 | 查调度日志中AGV心跳时间,确认是否是网络问题;再查任务状态流转逻辑 |
| 多车在十字路口互等 | 死锁 | 查资源锁的持有顺序,检查是否存在环形等待,优先用超时恢复功能强制解锁 |
| 电量下降过快 | 路径规划经常走弯路、频繁加减速、负载过大 | 看单车任务记录中的空载/负载比例,必要时调整任务分配策略,减少空驶里程 |
| 网络延迟突然增大 | Wi-Fi漫游切换、同频干扰、AP覆盖盲区 | 用终端持续ping网关,同时跑AGV路径,找到延迟突跳的具体位置,现场调整AP |
除了表格里的典型问题,我再补充一个排查“万能思路”:一慢二看三查日志。
“一慢”是指不要急着改代码,先复现问题,把复现步骤、时间点、车辆编号、任务编号记录下来。“二看”是看现场、看现象,AGV停在哪个位置、报了什么故障码、光线和地面情况如何。“三查日志”是查调度系统的日志,重点看任务时间线、AGV状态变化、网络通讯耗时。日志查得多了,你会发现大多数所谓“怪问题”,都能在日志里找到清晰的因果链。
还有一个好习惯:给AGV和调度系统加“运行看板”。不需要很复杂,能看到每台车当前的位置、当前任务、当前状态、异常报警就够了。有了看板,现场操作人员能第一时间发现问题并介入,不需要等调度系统自己暴露问题。
最后分享一点个人体会
回到“三条AGV基本A算法”这个热词。我想说的是,A算法确实是AGV仓储路径规划的基石,但真正做出一个好用的AGV系统,需要的是算法、地图模型、调度策略、路网设计和现场实施经验的综合能力。算法只是工具箱里最基础的一件家伙,怎么用好它,怎么和真实场景结合,才是项目成败的关键。
做AGV项目这几年,我有一个很深的体会:别把AGV项目当成一个纯软件项目或者纯硬件项目。它更像是一个“系统工程”,需要你既懂算法、懂代码,又懂仓库业务流程,还得有蹲在现场解决实际问题的耐心。如果你正在规划自己的AGV项目,建议在项目初期就把算法选型、路网设计、节拍计算、异常流程这四件事想透,这会让你后面的整个实施过程顺畅非常多。