一、大疆上云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话题控制。