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

大疆上云api开发

目前很多公司希望使用上云api开发自己的无人机平台,但是官网资料不是特别全,下面浅谈一下本人开发过程中遇到的一系列问题。
本人使用机场为大疆机场2,飞机为M3TD,纯内网使用

部署

链接: 上云api代码.

  • 首先从github上面拉去代码
    上云api代码github.
    后端使用maven,jdk17
    前端使用使用yarn下载依赖
  • 安装中间件
    emqx
$ docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.0

对应代码修改:
后端

mqtt:# @see com.dji.sample.component.mqtt.model.MqttUseEnum# BASIC parameters are required.BASIC:protocol: MQTT # @see com.dji.sample.component.mqtt.model.MqttProtocolEnumhost: 127.0.0.1
#    host: 127.0.0.1port: 1883username: JavaServerpassword: 123456client-id: 123456# If the protocol is ws/wss, this value is required.path:# DRC控制链路DRC:# 示例代码在前端进行控制,需要返回给前端。默认使用ws连接protocol: WS # @see com.dji.sample.component.mqtt.model.MqttProtocolEnumhost: 127.0.0.1
#    host: 127.0.0.1port: 8083path: /mqttusername: JavaServerpassword: 123456

注意,两处都要修改,下面的ws是用于手动控制的关键
前端对应配置修改
在这里插入图片描述

mysql8.0
在这里插入图片描述
执行后端中的这个脚本就行
对应的后端配置文件

  # 数据库配置datasource:# druid数据源配置druid:# 数据源类型type: com.alibaba.druid.pool.DruidDataSource# 数据库驱动driver-class-name: com.mysql.cj.jdbc.Driver# 数据库连接地址url: jdbc:mysql://127.0.0.1:3306/cloud_sample?useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: 123456initial-size: 10min-idle: 10max-active: 20max-wait: 60000

redis
下载redis6即可,使用docker部署比较方便
对应的后端配置文件

  redis:host: 127.0.0.1port: 6379database: 2username: # if you enablepassword:lettuce:pool:max-active: 8max-idle: 8min-idle: 0

minio
如果要内网使用的话需要自己搭建存储服务,并且修改后端代码这部分

oss:enable: trueprovider: minioendpoint: http://127.0.0.1:9000# 以下内容需要去minio控制台自己创建access-key: secret-key: # minio控制台新建bucketbucket: cloud-bucketexpire: 3600region: us-east-1object-dir-prefix: wayline

ntp
如果要内网使用,需要自己搭建ntp服务器,这非常重要,要不然会导致执行航线的时候回报错,这个自己网上找一个相关服务搭建即可
对应的后端配置文件

ntp:server:host: 127.0.0.1port: 123

直播服务器
这算是搭建过程中比较难得一个点,关于内网使用的话,可以搭建zlmediakit服务或者srs服务
此外,现在大疆机场支持的推流为rtmp,webrtc和国标
对于zlmediakit服务,它的好处是可以推rtmp或者webrtc,然后拉去这两种,还可以拉去rsp的流,比如我们实现的ai识别就是,通过rtmp或者webrtc推流,然后在去zlmediakit里面拉去rtsp的六

对于srs服务,它的好处是可以很方便快捷的搭建,并且大疆demo里面直播用的就是srs的js,就不用额外去写直播画面播放的这个功能,zlmediakit的话就需要自己去改相关代码

docker搭建方式

CANDIDATE="192.168.1.10"
docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 1990:1990 -p 8088:8088 \--env CANDIDATE=$CANDIDATE -p 8000:8000/udp \registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5 ./objs/srs -c conf/https.docker.conf

此外,如果你们是可以接外网的环境,那么直接使用声网就行,就不需要额外搭建直播服务器,下面分别谈一下这几种推流在代码中是如何进行配置的

rtmp
后端配置文件

    # RTMP  Note: This IP is the address of the streaming server. If you want to see livestream on web page, you need to convert the RTMP stream to WebRTC stream.rtmp:url: rtmp://192.168.4.20/live/

前端配置文件

  rtmpURL: 'rtmp://192.168.4.20/live/', // Example: 'rtmp://192.168.1.1/live/'

webrtc
注意,这个配置对应的是使用srs,并且使用webrtc推流的方式,这种推流可以使用大疆demo里面的播放页面播放出来

    whip:url: http://192.168.4.20:1985/rtc/v1/whip/?app=live&stream= 

这个配置对应的是使用zlmediakit,并且使用webrtc推流的方式,这种需要自己写播放页面

    # zlmediakit推流地址
#      url: http://192.168.4.20/index/api/whip?app=live&stream=

播放地址为:使用zl自带的控制台,输入这个播放连接

http://192.168.4.20/index/api/webrtc?app=live&stream=1581F6Q8D246DG2WE4-81-0-0&type=play

注意,stream为我无人机对应的sn码,你的可能会不同,需要去mq或者控制台查询到

在调试过程中发现,机场推rtmp的质量远远不如webrtc,所以建议大疆推流的时候使用webrtc协议

手柄配置
需要使用大疆手柄进行机场调试,使它切换到第三方云平台在这里插入图片描述
主要目的是让机场连接到你配置的mqtt网关

如果一切顺利的话,配置完上面这些信息就能跑起来了,下面谈一下调试过程中遇到的一些问题以及解决思路

问题

mq和后端能收到消息,但是机场飞机没有上线

请添加图片描述
去mq后台将机场客户端踢出

喊话器功能

无人机本身不支持喊话功能,需要挂载第三方的设备,我们使用的是成至MP20,需要自己根据接口进行开发
在这里插入图片描述

红外功能

无人机本身自带的红外是这样的

在这里插入图片描述
但是我们的ai识别盒子需要的红外是黑白画面,上云api暂时没有接口可以调红外的模式,需要使用司空2平台,更改红外镜头的相机参数,然后再回第三方平台开启
在这里插入图片描述

一键起飞

在这里插入图片描述
需要填入指定参数,海拔一定要比当前部署的机场的海拔高,要不然会失败

后端枚举类报错

调试过程中,我们用过大疆新版本的固件,然后就一直会报一些枚举类的错误,是因为新版本固件跟大疆1.10不匹配导致,最好使用1.10对应的固件版本,因为新版本消息体可能改过一些
在这里插入图片描述

固件一致性升级

如果你用上云api降低过固件的话,设备管理里面会提示固件的一致性升级,其实你如果没有使用到一些新的功能特性的话,这一致性升级是不用管它的
在这里插入图片描述

直播推流

大疆机场2最高支持推3路流,也就是仓内和仓外和无人机,一共三个镜头

航线

如果没有绘制航线需求的话,可以使用手柄或者司空2绘制航线,导入上云api使用

悬停功能

如果有涉及到航线飞行,飞行过程中自动悬停的话,可以使用航线暂停和航线恢复接口。比如我们的流程就涉及到ai识别-》悬停-》喊话-》取消悬停继续航线
在这里插入图片描述

相关文章:

大疆上云api开发

目前很多公司希望使用上云api开发自己的无人机平台,但是官网资料不是特别全,下面浅谈一下本人开发过程中遇到的一系列问题。 本人使用机场为大疆机场2,飞机为M3TD,纯内网使用 部署 链接: 上云api代码. 首先从github上面拉去代码 上云api代码github. 后…...

IDEA2023 SpringBoot整合MyBatis(三)

一、数据库表 CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,gender ENUM(Male, Female, Other),email VARCHAR(100) UNIQUE,phone_number VARCHAR(20),address VARCHAR(255),date_of_birth DATE,enrollment_date DATE,cours…...

【Apache Paimon】-- 6 -- 清理过期数据

目录 1、简要介绍 2、操作方式和步骤 2.1、调整快照文件过期时间 2.2、设置分区过期时间 2.2.1、举例1 2.2.2、举例2 2.3、清理废弃文件 3、参考 1、简要介绍 清理 paimon (表)过期数据可以释放存储空间,优化资源利用并提升系统运行效率等。本文将介绍如何清理 Paim…...

C语言数据结构——详细讲解 双链表

从单链表到双链表:数据结构的演进与优化 前言一、单链表回顾二、单链表的局限性三、什么是双链表四、双链表的优势1.双向遍历2.不带头双链表的用途3.带头双链表的用途 五、双链表的操作双链表的插入操作(一)双链表的尾插操作(二&a…...

Shell脚本基础(4):条件判断

内容预览 ≧∀≦ゞ Shell脚本基础(4):条件判断声明导语基本的if语句结构数值比较运算符文件测试运算符扩展:使用elif和else使用&&和||结合条件判断小结 Shell脚本基础(4):条件判断 声明…...

在 Swift 中实现字符串分割问题:以字典中的单词构造句子

文章目录 前言摘要描述题解答案题解代码题解代码分析示例测试及结果时间复杂度空间复杂度总结 前言 本题由于没有合适答案为以往遗留问题,最近有时间将以往遗留问题一一完善。 LeetCode - #140 单词拆分 II 不积跬步,无以至千里;不积小流&…...

win10中使用ffmpeg和MediaMTX 推流rtsp视频

在win10上测试下ffmpeg推流rtsp视频,需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX ,其他客户端从流媒体服务器拉流。 步骤如下: 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub​​​​​…...

16. 【.NET 8 实战--孢子记账--从单体到微服务】--汇率获取定时器

这篇文章我们将一起编写这个系列专栏中第一个和外部系统交互的功能:获取每日汇率。下面我们一起来编写代码吧。 一、需求 根据文章标题可知,在这片文章中我们只进行汇率的获取和写入数据库。 编号需求说明1获取每日汇率1. 从第三方汇率API中获取汇率信…...

C#元组详解:创建、访问与解构

在C#中,元组(Tuple)是一种数据结构,用于将多个元素组合成一个单一的对象。元组可以包含不同类型的元素,并且每个元素都有一个指定的位置(索引)。元组在需要临时组合多个值而不想创建自定义类时非…...

wsl2安装

Windows Subsystem for Linux 2 (WSL2) 是 Windows 10 和 Windows 11 中用于运行 Linux 二进制可执行文件的兼容层。WSL2 是 WSL 的最新版本,提供了更快的文件系统性能和完整的系统调用兼容性。本教程将指导你如何在 Windows 系统上安装 WSL2。 前提条件 操作系统要…...

android studio无法下载,Could not GET xxx, Received status code 400

-- 1. 使用下面的地址代替 原地址: distributionUrlhttps\://services.gradle.org/distributions/gradle-6.5-all.zip 镜像地址: distributionUrlhttps\://downloads.gradle-dn.com/distributions/gradle-6.5-all.zips 上面的已经不好用了 https\://mirrors.cloud.tencent.c…...

RUST学习教程-安装教程

文章目录 参考文档安装教程更新卸载 参考文档 https://course.rs/first-try/installation.html 安装教程 Linux或者mac安装教程 curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh安装完成,当出现command not found的时候,需要source一下…...

redis6.0之后的多线程版本的问题

一、redis早期版本和新版本的讨论 这个问题其实有些废话,哪个版本肯定都有不同啊。其实这里主要是提到的网上的大家对Redis6.0中的多线程版本的不同即以前宣传的Redis是单线程程版的,之后变成了多线程版本的。网上对这个讨论非常激烈,反正各…...

python的 pandas.Dataframe 和 pandas.Series基础内容

目录 0 有一个比较麻烦琐碎的地方 1 python pandas.Dataframe 2 pd.concat() 可以合并 pd.Dataframe 2.1 pd.concat() 合并规则 3 pd.Dataframe.drop() 删除行列的操作 4 pd.Dataframe 列操作 5 pd.Dataframe 行操作 5.1 sample_dataframe2.head(n2) 取前面的n行&…...

golang学习5

为结构体添加方法 异常处理过程...

【C语言】11月第二次测试 ing

文章目录 1.输入n名同学的成绩和学号,对成绩排序,输出对应学号 要求重复的学号重新输入 计算n名同学的平均值,对小于60分的同学删除分数 大于60分的同学输出:优秀:几人,良好:几人,中…...

行列式的理解与计算:线性代数中的核心概念

开发领域:前端开发 | AI 应用 | Web3D | 元宇宙 技术栈:JavaScript、React、ThreeJs、WebGL、Go 经验经验:6 年 前端开发经验,专注于图形渲染和 AI 技术 开源项目:github 简智未来、数字孪生引擎、前端面试题 大家好&a…...

按出生日期排序(结构体专题)

题目描述 送人玫瑰手有余香,小明希望自己能带给他人快乐,于是小明在每个好友生日的时候发去一份生日祝福。小明希望将自己的通讯录按好友的生日排序排序,这样就查看起来方便多了,也避免错过好友的生日。为了小明的美好愿望&#x…...

【C++】拆分详解 - 多态

文章目录 一、概念二、定义和实现1. 多态的构成条件2. 虚函数2.1 虚函数的重写/覆盖2.2 虚函数重写的两个例外 3. override 和 final关键字4. 重载/重写/隐藏的对比5. 例题 三、纯虚函数和抽象类四、多态的原理1. 虚函数表2. 实现原理3. 动态绑定和静态绑定 总结 一、概念 多态…...

Python世界:力扣题解875,珂珂爱吃香蕉,中等

Python世界:力扣题解875,珂珂爱吃香蕉,中等 任务背景思路分析代码实现坑点排查测试套件本文小结 任务背景 问题来自力扣题目875 Koko Eating Bananas,大意如下: Koko loves to eat bananas. There are n piles of bana…...

Java设计模式 —— Java七大设计原则详解

文章目录 前言一、单一职责原则1、概述2、案例演示 二、接口隔离原则1、概述2、案例演示 三、依赖倒转原则1、概述2、案例演示 四、里氏替换原则1、概述2、案例演示 五、开闭原则1、概述2、案例演示 六、迪米特法则1、概述2、案例演示 七、合成/聚合复用原则1、概述2、组合3、聚…...

SpringBoot学习记录(六)配置文件参数化

SpringBoot学习记录(六)配置文件参数化 一、参数提取到配置文件中二、yml配置文件三、ConfigurationProperties注解实现批量属性注入 一、参数提取到配置文件中 定义在代码中的参数的值分散在各个不同的文件中,不便于后期维护管理&#xff0…...

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…...

.net 8使用hangfire实现库存同步任务

C# 使用HangFire 第一章:.net Framework 4.6 WebAPI 使用Hangfire 第二章:net 8使用hangfire实现库存同步任务 文章目录 C# 使用HangFire前言项目源码一、项目架构二、项目服务介绍HangFire服务结构解析HangfireCollectionExtensions 类ModelHangfireSettingsHttpAuthInfoUs…...

第 22 章 - Go语言 测试与基准测试

在Go语言中&#xff0c;测试是一个非常重要的部分&#xff0c;它帮助开发者确保代码的正确性、性能以及可维护性。Go语言提供了一套标准的测试工具&#xff0c;这些工具可以帮助开发者编写单元测试、表达式测试&#xff08;通常也是指单元测试中的断言&#xff09;、基准测试等…...

VB.Net笔记-更新ing

目录 1.1 设置默认VS的开发环境为VB.NET&#xff08;2024/11/18&#xff09; 1.2 新建一个“Hello&#xff0c;world”的窗体&#xff08;2024/11/18&#xff09; 1.3 计算圆面积的小程序&#xff08;2024/11/18&#xff09; 显示/隐式 声明 &#xff08;2024/11/18&…...

centos 服务器 docker 使用代理

宿主机使用代理 在宿主机的全局配置文件中添加代理信息 vim /etc/profile export http_proxyhttp://127.0.0.1:7897 export https_proxyhttp://127.0.0.1:7897 export no_proxy"localhost,127.0.0.1,::1,172.171.0.0" docker 命令使用代理 例如我想在使用使用 do…...

python语言基础

1. 基础语法 Q: Python 中的变量与数据类型有哪些&#xff1f; A: Python 支持多种数据类型&#xff0c;包括数字&#xff08;整数 int、浮点数 float、复数 complex&#xff09;、字符串 str、列表 list、元组 tuple、字典 dict 和集合 set。每种数据类型都有其特定的用途和…...

Python中的Apriori库详解

文章目录 Python中的Apriori库详解一、引言二、Apriori算法原理与Python实现1、Apriori算法原理2、Python实现1.1、数据准备1.2、转换数据1.3、计算频繁项集1.4、提取关联规则 三、案例分析1、导入必要的库2、准备数据集3、数据预处理4、应用Apriori算法5、生成关联规则6、打印…...

MongoDB比较查询操作符中英对照表及实例详解

mongodb比较查询操作符中英表格一览表 NameDescription功能$eqMatches values that are equal to a specified value.匹配值等于指定值。$gtMatches values that are greater than a specified value.匹配值大于指定值。$gteMatches values that are greater than or equal to…...