新版本大疆上云API指令飞行(drc)模式通讯搭建思路

一、大疆上云API mqtt官方通讯指导

1.1drc链路

1.2mqtt交互时序图

二、自行搭建mqtt说明

2.1工具:用emqx搭建mqtt服务器,mqttx作为客户端测试工具

2.2端口说明:1883,普通mqtt消息端口,8083,ws通信协议端口。8883,mqtts端口。一般用1883和8083端口就足够了。

三、drc模式进入

3.1调用drc_enter的时候会创建一个mqtt客户端用户,自动在机场或者遥控器端登录(千万不要自行去登录这个账户,不然会把机场或者遥控器挤下面)。

3.2写一个定时器每隔10秒发送一次心跳,不然drc链路会自动断开,在进入drc模式时开始定时发送心跳,推出时结束心跳发送。

复制代码
package com.dji.sample.pilotMqtt.service.Impl;
//心跳接口
import com.dji.sample.manage.model.dto.DeviceDTO;
import com.dji.sample.manage.service.IDeviceService;
import com.dji.sample.pilotMqtt.model.entity.GatewaySn;
import com.dji.sample.pilotMqtt.model.entity.XinTiaoEntity;
import com.dji.sample.pilotMqtt.service.HeartbeatService;
import com.dji.sdk.mqtt.drc.DrcDownPublish;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.scheduling.annotation.Scheduled;

import javax.annotation.Resource;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
@Service
public class HeartbeatServiceImpl implements HeartbeatService {

    @Resource
    private DrcDownPublish drcDownPublish;
    //设备是否在线查询
    @Autowired
    private IDeviceService deviceService;

    //控制开关
    private final AtomicBoolean running = new AtomicBoolean(false);
    //遥控器编码
    private GatewaySn gatewaySn;
    //无人机编码
    private String deviceSn;
    private String method;
    //开始发送心跳
    @Override
    public void start(GatewaySn gatewaySn,String deviceSn,String method) {
        this.gatewaySn =gatewaySn;
        this.deviceSn = deviceSn;
        this.method = method;
        running.set(true);
    }
    //停止发送心跳
    @Override
    public void stop() {
        running.set(false);
    }
    //发送心跳
    @Override
    @Scheduled(fixedRate = 10000) // 每10秒调用一次
    public void sendHeartbeat() {
        //校验设备是否在线
        Optional<DeviceDTO> deviceOpt = deviceService.getDeviceBySn(deviceSn);
        if(!deviceOpt.get().getStatus()){
            stop();
        }
        if (running.get()) {
            // 调用心跳发送接口
            XinTiaoEntity xinTiaoEntity = new XinTiaoEntity();
            long currentTimeMillis = System.currentTimeMillis();
            int currentTimeStamp = (int) currentTimeMillis;
            xinTiaoEntity.setTimestamp(currentTimeStamp);
            drcDownPublish.publish(gatewaySn.getGatewaySn(),method,xinTiaoEntity);
            System.out.println("心跳发送成功");

        }
    }
}

3.3编写drc下发指令控制无人机。

四、实现说明

前后端均能实现控制无人机的接口,前端延迟小一些,后端安全一些,主要看需求来选取实现方式。该控制方式有一些向ros话题控制。

相关推荐
竹林81814 小时前
被合约事件搞到失眠?我踩了三天坑,终于写出一份监听智能合约事件的实战指南
前端·javascript
用户0595401744614 小时前
把 AI 记忆验证从手工 Log 换成 Pytest+Mem0,上下文丢失 bug 减少 90%
前端·css
艾利克斯冰14 小时前
TypeScript 静态类型入门教程:可选静态类型与类型推导详
前端·javascript·typescript
李白的天不白14 小时前
spring boot + vue3项目部署须知
java·spring boot·后端
GuWenyue14 小时前
告别命名混乱!5步掌握BEM规范,写出易维护的前端页面
前端·javascript·面试
YOLO数据集集合14 小时前
无人机低空街景语义分割数据集|4K航拍|城市巡检|深度学习视觉任务数据集
人工智能·深度学习·yolo·目标检测·无人机
小林ixn14 小时前
BEM 命名规范与 CSS 重置:打造优雅的按钮页面实战
前端·css
小马爱打代码14 小时前
SpringBoot + Redis Stream + 消费组:替代 Kafka 轻量级消息队列,低延迟高吞吐
spring boot·redis
雨季mo浅忆14 小时前
记录利用Cursor快速实现首页数据大屏
前端·ai编程