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

相关推荐
moshuying7 小时前
扩散模型开始写代码、开网页了:350 亿参数,速度比 Jev 快一倍
前端·算法
qq_401700418 小时前
100 个 IoT 小项目,给 ESP32 入门补上实操
前端·网络·stm32
输出输入8 小时前
学习前端主流书单推荐
前端
anyup8 小时前
uView Pro X 1.0.0 发布:全面支持 uni-app x 蒸汽模式,80+ 组件
前端·uni-app·ai编程
apollo_qwe8 小时前
大模型 API 接通了,AI 聊天页面为什么还是不好用?
前端·vue.js·人工智能
爱勇宝8 小时前
你可能成不了技术大佬,然后呢?
前端·后端·程序员
疯华整猫9 小时前
从 MVP 到 MVI,从 Java 到 Kotlin:老项目升级的避坑指南
前端
徐小夕@趣谈前端9 小时前
Web 端 OFD 编辑器踩坑记:从“只能预览”到“在线改”
前端·编辑器
蓝悦无人机9 小时前
如何选择直升机桨盘载荷
无人机·桨盘载荷·悬停升限·最大平飞速度·旋翼重量·诱导功率
2601_952047799 小时前
聚水潭售后退仓单同步到金蝶云·星空退货单:轻易云实战教程
大数据·机器人·钉钉·制造