当前位置: 首页 > article >正文

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


http://www.kler.cn/news/318422.html

相关文章:

  • 雷池+frp 批量设置proxy_protocol实现真实IP透传
  • 详解c++:new和delete
  • 【数学二】极限的计算-夹逼准则、单调数列有界准则
  • apach httpd多后缀解析漏洞
  • 第十五章 文件上传
  • Linux 清空redis缓存及查询key值
  • 电子计算机科学中的运维技术:概念(内涵和外延)、历史、现状与展望?
  • 【C++二叉树】105.从前序与中序遍历序列构造二叉树
  • OpenAi assistant run always fails when called from PHP
  • Go unique包:突破字符串局限的通用值Interning技术实现
  • 【M-LOAM学习】
  • 【Java】关键字-abstract【主线学习笔记】
  • 《算法笔记》例题解析 第3章入门模拟--4日期处理(9题)2021-03-03
  • 直流负载箱的主要功能有哪些?
  • 数字化转型中的供应链管理优化
  • 鸭脖变“刺客”,啃不起了
  • Leetcode算法基础篇-贪心算法
  • 输入5个数,求中值,verilog实现
  • more、less 命令:阅读文本
  • 电商效果图渲染神器:轻松高效出图
  • [docker][软件]docker快速安装rabbitmq
  • 【Rust语言】std::collections::HashMap用法
  • Linux环境下安装部署MySQL8.0以上(内置保姆级教程) C语言
  • Oracle数据库expdp与impdp
  • 基于SpringBoot+Vue+MySQL的网上租赁系统
  • CVPR最牛图像评价算法!
  • webview2加载本地页面
  • 「JavaScript深入」一文吃透JS的基本数据类型 Symbol
  • 统信服务器操作系统【Cron定时任务服务】
  • 安装程序不用鼠标,Windows也玩程序包管理存储库