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

相关推荐
活宝小娜22 分钟前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
世间万物皆对象23 分钟前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
程序视点24 分钟前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript
coldriversnow25 分钟前
在Vue中,vue document.onkeydown 无效
前端·javascript·vue.js
我开心就好o26 分钟前
uniapp点左上角返回键, 重复来回跳转的问题 解决方案
前端·javascript·uni-app
开心工作室_kaic1 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
刚刚好ā1 小时前
js作用域超全介绍--全局作用域、局部作用、块级作用域
前端·javascript·vue.js·vue
qq_17448285752 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
沉默璇年3 小时前
react中useMemo的使用场景
前端·react.js·前端框架
yqcoder3 小时前
reactflow 中 useNodesState 模块作用
开发语言·前端·javascript