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

devtools/2024/9/25 0:37:02/

一、大疆上云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 {@Resourceprivate DrcDownPublish drcDownPublish;//设备是否在线查询@Autowiredprivate IDeviceService deviceService;//控制开关private final AtomicBoolean running = new AtomicBoolean(false);//遥控器编码private GatewaySn gatewaySn;//无人机编码private String deviceSn;private String method;//开始发送心跳@Overridepublic void start(GatewaySn gatewaySn,String deviceSn,String method) {this.gatewaySn =gatewaySn;this.deviceSn = deviceSn;this.method = method;running.set(true);}//停止发送心跳@Overridepublic 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.ppmy.cn/devtools/116736.html

相关文章

Leetcode 2246. 相邻字符不同的最长路径(一般树)树形dp C++实现

问题&#xff1a;Leetcode 2246. 相邻字符不同的最长路径 给你一棵 树&#xff08;即一个连通、无向、无环图&#xff09;&#xff0c;根节点是节点 0 &#xff0c;这棵树由编号从 0 到 n - 1 的 n 个节点组成。用下标从 0 开始、长度为 n 的数组 parent 来表示这棵树&#x…

C++拷贝构造函数

拷贝 指的是复制数据&#xff0c;复制内存。 在C中&#xff0c;要避免不必要的复制。当把一个对象或变量&#xff0c;一段数据从一个地方复制到另一个地方的时候&#xff0c;我们实际上会拥有两个副本。在程序运行过程中分配的内存大小是有限的&#xff0c;大量的复制势必会造成…

springboot系列--web相关知识探索一

一、web知识探索概述 一、探索大纲 二、SpringMVC原理流程图 二、springmvc自动配置 springboot在底层自动帮我们配置好了mvc所需要的各个组件。当然&#xff0c;我们也可以自己定制化相关组件。 可参考官方文档&#xff1a; 三、静态资源探究 一、静态资源存放位置 静态资…

vue和thinkphp路由伪静态配置

vue路由伪静态配置&#xff1a; location / { try_files $uri $uri/ /index.html; } thinkphp 路由伪静态配置 location ~* (runtime|application)/{ return 403; } location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s$1 last; break; } }

「DAOI R1」Magic

「DAOI R1」Magic 题目背景 -1,-1,2 题目描述 乔木 来到了大魔王的面前&#xff0c;他决定使用魔法击败魔王。 给定一个整数 n n n&#xff0c;表示有 n n n 个魔法阵&#xff0c;在每个魔法阵上都存在着一定的魔力值 a i a_i ai​。 你每次可以选择三个魔法阵 i , j ,…

Maya---机械模型制作

材质效果&#xff08;4&#xff09;_哔哩哔哩_bilibili 三角面 四边面 多边面 *游戏允许出现三角面和四边面 游戏中一般是低模&#xff08;几千个面&#xff09; 动漫及影视是高模 机械由单独零件组合而成&#xff0c;需独立制作 低面模型到高面模型 卡线是为了将模型保…

Qt-拖放

概述 拖放提供了一种简单的可视化机制&#xff0c;用户可以使用它在应用程序之间和应用程序内部传输信息。拖放功能类似于剪贴板的剪切和粘贴机制。 本文档描述了基本的拖放机制&#xff0c;并概述了在自定义控件中启用它的方法。Qt的许多控件也支持拖放操作&#xff0c;如it…

element-ui多个消息提示只显示最后一个

在使用 Element UI 的 Message 消息提示时&#xff0c;默认情况下&#xff0c;如果你连续调用多个 Message 方法&#xff0c;它们会依次显示&#xff0c;直到用户关闭或它们自动消失。但是&#xff0c;如果你希望只保留最后一个消息提示&#xff0c;即每当新消息出现时&#xf…