第3章:AGV通信协议:Wi-Fi、ZigBee、5G、私有协议对比;MQTT在AGV中的应用

通信协议选型,是AGV系统里最容易被低估的环节。

很多人觉得,不就是让车连上网嘛,Wi-Fi不就行了?

嗯,我在项目里见过太多次因为通信问题导致的调度瘫痪。车跑着跑着断了,调度指令发不出去,两辆车在路口撞上——说白了,通信选型直接决定了系统的可靠性和天花板。

3.1 主流通信协议对比

先看一张对比表,心里有个底:

协议 带宽 时延 覆盖范围 抗干扰 成本 典型场景
Wi-Fi 高(100Mbps+) 10-50ms 室内100m 中等 仓储、产线
ZigBee 低(250kbps) 30-100ms 室内50m(可组网) 极低 传感器、小数据量
5G 极高(1Gbps+) 1-10ms 广域(km级) 大型园区、远程控制
私有协议 按需定制 可低至1ms 受限 极强 高(开发成本) 军工、高可靠场景

3.2 各协议深度分析

Wi-Fi:最通用的选择,但坑不少

Wi-Fi是AGV项目里最常见的方案。部署简单,设备便宜,带宽也够用。

但我得提醒你,Wi-Fi有个致命弱点——漫游切换

AGV在仓库里来回跑,AP之间切换时,Wi-Fi会有几百毫秒甚至几秒的断连。我遇到过最夸张的一次,AGV在AP切换时正好执行急停指令,结果指令丢了,车直接撞上了货架。

避坑指南: 我曾经在部署Wi-Fi网络时,忽略了AP之间的重叠区域设计。后来发现AGV在切换时频繁丢包。解决方案是:
1. 确保AP重叠区域至少20%
2. 使用支持快速漫游的802.11r协议
3. 关键指令(如急停)走独立信道或冗余链路

ZigBee:低功耗,但别指望它传大包

ZigBee的优势是功耗低、自组网能力强。适合AGV上的传感器数据采集,比如温度、振动、电量等。

但你要用它来传路径规划指令?我劝你慎重。

ZigBee的带宽只有250kbps,传一个完整的路径点列表可能就要好几秒。而且它的时延不稳定,在复杂电磁环境下可能飙升到几百毫秒。

我的经验: 在某个冷链仓库项目里,我们用ZigBee采集AGV电池温度数据。效果很好,功耗极低,一节电池用半年。但调度指令还是走的Wi-Fi。各司其职,别混用。

5G:未来已来,但成本还在

5G在AGV领域的应用,这两年越来越多了。低时延、高带宽、广覆盖,理论上完美。

但实际部署时,有几个问题:

  • 成本高:5G模组比Wi-Fi贵一个数量级,基站建设费用更高
  • 覆盖问题:室内5G信号穿透力差,需要部署小基站
  • 运营商依赖:网络不在自己手里,出问题只能等运营商处理

我个人觉得,5G更适合大型园区、跨楼宇的AGV调度场景。比如港口、机场、大型物流中心。小仓库用5G,有点杀鸡用牛刀了。

私有协议:最可靠,也最折腾

私有协议,说白了就是自己写一套通信规则。用433MHz、2.4GHz等ISM频段,或者用LoRa、NB-IoT等。

优势很明显:时延可控、抗干扰强、安全性高。

但代价也大:开发周期长、维护成本高、兼容性差。

什么时候该用私有协议?
- 军工、航天等对安全性要求极高的场景
- 电磁环境极其恶劣,Wi-Fi/5G无法正常工作
- 需要极低时延(<5ms)的实时控制
否则,我建议优先考虑标准协议。

3.3 MQTT在AGV中的应用

聊完底层协议,咱们说说应用层协议。MQTT是我在AGV项目里用得最多的。

为什么是MQTT?

  • 轻量级:报文头只有2字节,适合带宽有限的场景
  • 发布/订阅模式:调度系统和AGV之间解耦,新增车辆不用改代码
  • QoS机制:支持消息确认,保证指令不丢
  • 持久会话:AGV断线重连后,能收到离线期间的消息

MQTT在AGV中的典型架构

我习惯这样设计:

AGV1 --> MQTT Broker (Mosquitto/EMQX) <-- 调度系统
AGV2 --> MQTT Broker <-- 调度系统
AGV3 --> MQTT Broker <-- 调度系统

每个AGV订阅自己的指令主题,比如:

  • agv/001/command:接收调度指令
  • agv/001/status:上报状态
  • agv/001/position:上报位置

调度系统订阅所有AGV的状态主题,同时向各AGV的指令主题发布消息。

避坑:QoS等级选择

MQTT有三个QoS等级:

  • QoS 0:最多发一次,不确认。适合状态上报,丢了也无所谓
  • QoS 1:至少发一次,会重试。适合普通指令
  • QoS 2:恰好发一次,最可靠。适合急停、关键路径变更
注意: QoS 2虽然可靠,但性能开销大。我曾经在一个项目里全部用QoS 2,结果Broker压力过大,消息堆积严重。后来改成:急停用QoS 2,普通指令用QoS 1,状态上报用QoS 0。系统瞬间稳定了。

代码示例:AGV MQTT客户端(Python)

import paho.mqtt.client as mqtt
import json

class AGVClient:
    def __init__(self, agv_id, broker_ip):
        self.agv_id = agv_id
        self.client = mqtt.Client(client_id=f"agv_{agv_id}")
        self.client.on_connect = self.on_connect
        self.client.on_message = self.on_message
        
        # 连接Broker
        self.client.connect(broker_ip, 1883, 60)
        
    def on_connect(self, client, userdata, flags, rc):
        print(f"AGV {self.agv_id} 连接成功")
        # 订阅自己的指令主题
        client.subscribe(f"agv/{self.agv_id}/command", qos=1)
        
    def on_message(self, client, userdata, msg):
        command = json.loads(msg.payload)
        print(f"收到指令: {command}")
        # 执行指令...
        
    def report_status(self, status):
        # 上报状态,用QoS 0
        self.client.publish(
            f"agv/{self.agv_id}/status",
            json.dumps(status),
            qos=0
        )
        
    def report_position(self, x, y, theta):
        # 上报位置,用QoS 1
        pos = {"x": x, "y": y, "theta": theta}
        self.client.publish(
            f"agv/{self.agv_id}/position",
            json.dumps(pos),
            qos=1
        )

3.4 选型建议

说了这么多,到底怎么选?

我个人的经验是:

  • 小型仓库(10台以内):Wi-Fi + MQTT,性价比最高
  • 中型园区(10-50台):Wi-Fi为主,关键区域用5G做冗余
  • 大型物流中心(50台以上):5G + MQTT,或者私有协议 + MQTT
  • 特殊环境(冷库、强电磁):私有协议 + MQTT
最后说一句: 不管选什么协议,一定要做冗余设计。我在项目里吃过亏,Wi-Fi断了,AGV全停。后来加了4G备份链路,虽然慢,但至少能保证急停指令能发出去。

通信协议选型,没有绝对的对错。关键是你得清楚自己的场景需求,然后做出取舍。嗯,这一章就到这里,下一章咱们聊聊路径规划的核心算法。