大疆无人机开源项目源码分析:MQTT协议实现分析

协议使用情况

1. 基础通信(BASIC)- MQTT over TCP

配置:

46:54:sample/src/main/resources/application.yml 复制代码
  BASIC:
    protocol: MQTT # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
    host: Please enter your ip.
    port: 1883
    username: JavaServer
    password: 123456
    client-id: 123456
    # If the protocol is ws/wss, this value is required.
    path:
  • 协议:MQTT → 实际地址:tcp://host:1883
  • 传输层:TCP
  • 用途:常规通信(services、events、requests、state、osd 等)

2. 无人机控制(DRC)- MQTT over WebSocket

配置:

55:61:sample/src/main/resources/application.yml 复制代码
  DRC:
    protocol: WS # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
    host: Please enter your ip.
    port: 8083
    path: /mqtt
    username: JavaServer
    password: 123456
  • 协议:WS → 实际地址:ws://host:8083/mqtt
  • 传输层:WebSocket
  • 用途:实时控制(drone_control、drone_emergency_stop、heart_beat 等)

3. 协议映射关系

13:29:sample/src/main/java/com/dji/sample/component/mqtt/model/MqttProtocolEnum.java 复制代码
    MQTT("tcp"),

    MQTTS("ssl"),

    WS("ws"),

    WSS("wss");

    String protocol;

    MqttProtocolEnum(String protocol) {
        this.protocol = protocol;
    }

    public String getProtocolAddr() {
        return protocol + "://";
    }
  • MQTT → tcp://(MQTT over TCP)
  • WS → ws://(MQTT over WebSocket)
  • MQTTS → ssl://(MQTT over TLS)
  • WSS → wss://(MQTT over WebSocket Secure)

4. 地址构建逻辑

61:72:sample/src/main/java/com/dji/sample/component/mqtt/config/MqttPropertyConfiguration.java 复制代码
    private static String getMqttAddress(MqttClientOptions options) {
        StringBuilder addr = new StringBuilder()
                .append(options.getProtocol().getProtocolAddr())
                .append(options.getHost().trim())
                .append(":")
                .append(options.getPort());
        if ((options.getProtocol() == MqttProtocolEnum.WS || options.getProtocol() == MqttProtocolEnum.WSS)
                && StringUtils.hasText(options.getPath())) {
            addr.append(options.getPath());
        }
        return addr.toString();
    }

示例:

  • BASIC: tcp://192.168.1.100:1883
  • DRC: ws://192.168.1.100:8083/mqtt

总结

  • 基础通信:MQTT over TCP(tcp://,端口 1883)
  • 无人机控制:MQTT over WebSocket(ws://,端口 8083)

两者都是 MQTT 协议,只是传输层不同:

  • BASIC 使用 TCP
  • DRC 使用 WebSocket(便于浏览器/Web 客户端连接)

都使用 Eclipse Paho MQTT 客户端库,支持 TCP 和 WebSocket 两种传输方式。

相关推荐
workflower3 天前
SSH(Struts+Spring+Hibernate)
人工智能·机器学习·机器人·云计算·无人机
YOLO数据集集合3 天前
天空红外小目标检测数据集 | 红外小目标 天空目标检测 无人机检测 鸟类识别 低空安防9099期
人工智能·目标检测·计算机视觉·目标跟踪·无人机·无人机视角·直升机检测
Liaiyang664 天前
空圈容错视角下的无人机全链路审计:从理论框架到耦合式检验
人工智能·pytorch·python·深度学习·系统架构·自动驾驶·无人机
深蓝学院4 天前
15 m/s动态避障+15g无相机定位!浙大&微分智飞两篇新作:补齐微型敏捷无人机自主飞行能力
无人机
YOLO_DATA4 天前
遥感滑坡检测的数据集 2299 张 1类 yolo格式 遥感滑坡检测数据集
人工智能·深度学习·yolo·计算机视觉·无人机·yolo数据集·ai数据集
亥时科技4 天前
无人机和监控视频,真能一次性打通吗?
开源·无人机·ai巡检
XBWRJ5 天前
职业教育专业建设:《无人机装调维修师》的课程参考价值
无人机
YOLO数据集集合6 天前
小目标无人机、飞机、直升机检测数据集 | 小目标检测 无人机检测 空中目标识别 低空安防 反无人机9090期
深度学习·yolo·目标检测·无人机·飞机·小目标·直升机
PascalXie6 天前
无人机视觉模组算力选型:端侧AI集成方案对比
计算机视觉·无人机
YOLO数据集集合6 天前
全球无人机航拍树冠覆盖数据集 | 树冠分割 语义分割 无人机航拍 全球森林监测 GeoTIFF 生态恢复9083期
深度学习·yolo·目标检测·无人机·无人机视角·全球森林