新版本大疆上云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话题控制。

相关推荐
万少2 分钟前
记第一次鸿蒙应用上架之旅:一场略带遗憾的旅途
前端·harmonyos
鹏多多4 分钟前
H5开发避坑!解决Safari浏览器的video会覆盖z-index:1的绝对定位元素
前端·javascript·vue.js
恋猫de小郭11 分钟前
来了解一下,为什么你的 Flutter WebView 在 iOS 26 上有点击问题?
android·前端·flutter
charlie11451419114 分钟前
CSS学习笔记5:CSS 盒模型 & Margin 注意事项
前端·css·笔记·学习·教程
CodeSheep15 分钟前
稚晖君公司的最新工资和招人标准
前端·后端·程序员
ashane131417 分钟前
Springboot 启动过程及源码分析
java·spring boot·后端
亿元程序员19 分钟前
今天我去面试游戏开发,说我回答得不全面...
前端
一只小阿乐32 分钟前
vue3封装alert 提示组件 仿element-plus
前端·javascript·vue.js·vue3
后端小张33 分钟前
【JAVA进阶】SpringBoot启动流程深度解析:从main方法到应用就绪的完整旅程
java·spring boot·后端·spring·spring cloud·java-ee·流程分析
IT_陈寒1 小时前
SpringBoot实战避坑指南:我在微服务项目中总结的12条高效开发经验
前端·人工智能·后端