大疆上云API基于源码部署

文章目录

  • 大疆上云API基于源码部署
  • 注意事项
  • 1、学习官网
  • 2、环境准备
  • 注意事项
  • 3、注册成为DJI开发者
  • 4、下载前后端运行所需要的包/依赖
    • 前端依赖
    • 下载后端所需要的Maven依赖包
  • 用到的软件可以在这里下载
  • 5、MySQL数据库安装
    • 安装MySQL
    • 启动MySQL服务
    • 在IDEA中配置MySQL的连接信息
  • 6、Redis的安装
    • 安装Redis
    • 启动Redis
    • Redis启动可能有问题的情况
    • 在IDEA中配置自己的Redis连接信息
  • 7、安装emqx
    • 安装emqx
    • 启动emqx
    • 退出emqx
    • 配置emqx允许匿名访问
    • 开启Redis授权
    • 在IDEA中配置emqx的连接信息
  • 8、后端配置大疆上云API开发相关证书
  • 9、启动后端
    • 后端启动成功能正常运行可以发现有两个主题
    • 后端启动成功后能正常运行发现没有那两个主题
  • 10、修改启动前端配置
  • 11、连接遥控器

大疆上云API基于源码部署

本篇文章,主要用于记录本人部署的过程,仅供学习使用,如果不妥之处,还望告知。其实部署过程官网也有,其实看官网(上云API (dji.com))也是能看得懂的,也挺详细的,我感觉大家看官网也没问题,能部署起来。相对与官网。我这里多了安装EMQX,Redis,MySQL的安装过程,只是我这个稍微详细了一点点而已,我把EMQX、Redis、MySQL的环境准备了一下,方便后面我直接使用而已。

注意事项

在配置ip地址的时候,一定要注意空格,千万不要在ip前多一个空格,否则就是启动了,运行的程序也没报错,然后登录就是报错,怎么样都登不上去。这个特别是SpringBoot中yml文件的缩进问题这个,我就是因为在ip前多了个空格,导致出现这个问题。无空格的192.168.1.1 和有空格的 192.168.1.1是两回事。http:// 192.168.1.1http://192.168.3.220。也是一样的道理,ip配置的时候需要注意了。

1、学习官网

上云API (dji.com),大家可以直接看这里。

2、环境准备

需要的环境,根据官方文档的说明,上云API (dji.com),这个是官方要求的环境,不一定非要跟官方要求的环境一模一样。

本人电脑的环境如下所示:

  1. Windows 10 专业版
  2. Java版本:openJDK17,我这里为jdk-17.0.7版本
  3. MySQL版本:mysql-8.0.30-winx64绿色免安装版
  4. Redis版本:windows系统下的Redis-x64-3.2.100版本
  5. EMQX版本:windows系统下的emqx-5.3.2-windows-amd64版本
  6. Node.js版本:v18.16.0,使用Node这个版本内置的npm版本v9.5.1
  7. Intellij IDEA 2024.1.1版本,不一定非要用这个版本的IDEA,没有环境的可以直接去官网下载一个社区版免费版的都行,就使用社区免费版内置的Maven版本都可以。我试过了。
  8. Maven版本:使用的是IDEA内置的Maven版本,这里为Maven3.9.6版本,不一定非的是这个版本,只要能下载依赖,其他版本都可以,建议不要使用太老的版本,例如3.5版本的Maven建议不要用了。

注意事项

注意了,本文章中,说的ip是您自己电脑的ip地址。而不是就是192.168.1.1,我这里的ip地址刚好跟官网的192.168.1.1一样而已。windows系统下,自己电脑的ip地址,可以通过Win + R ,输入cmd。回车,然后输入ipconfig查看。

3、注册成为DJI开发者

上云API (dji.com),这里有说明,如何注册成为DJI开发者的过程,这里我们需要的是注册成为开发者的相关生成的license,就可以了。因为这个后续需要用到它的,不可或缺的。

4、下载前后端运行所需要的包/依赖

从这里https://developer.dji.com/doc/cloud-api-tutorial/cn/quick-start/environment-prepare-list.html下载克隆好对应的前后端代码之后,需要下载前后端运行所需要的包/依赖。

前端依赖

假设我的源码地址从git仓库中克隆下载在这里
在这里插入图片描述
在这里插入图片描述
然后输入

npm install

这里我的npm使用的是官方的镜像地址,并没有配置类似淘宝的镜像加速地址。

在这里插入图片描述
如果发现下载的时候在这个界面卡很久,要么是网络不够快。要么是下载过程中有一些问题,然后直接按两次CTRL + C或者按一次CTRL + C然后选择Y取消下载,重新npm install一下。等待依赖下载完成。然后发现报如下错误


npm WARN cleanup Failed to remove some directories [
npm WARN cleanup   [
npm WARN cleanup     'D:\\projects\\dajiangshangyunapixuexi\\Cloud-API-Demo-Web\\node_modules\\has-ansi',
npm WARN cleanup     [Error: EPERM: operation not permitted, rmdir 'D:\projects\dajiangshangyunapixuexi\Cloud-API-Demo-Web\node_modules\has-ansi'] {
npm WARN cleanup       errno: -4048,
npm WARN cleanup       code: 'EPERM',
npm WARN cleanup       syscall: 'rmdir',
npm WARN cleanup       path: 'D:\\projects\\dajiangshangyunapixuexi\\Cloud-API-Demo-Web\\node_modules\\has-ansi'
npm WARN cleanup     }
npm WARN cleanup   ],
npm WARN cleanup   [
npm WARN cleanup     'D:\\projects\\dajiangshangyunapixuexi\\Cloud-API-Demo-Web\\node_modules\\eslint',
npm WARN cleanup     [Error: EPERM: operation not permitted, rmdir 'D:\projects\dajiangshangyunapixuexi\Cloud-API-Demo-Web\node_modules\eslint\lib\rules\utils'] {
npm WARN cleanup       errno: -4048,
npm WARN cleanup       code: 'EPERM',
npm WARN cleanup       syscall: 'rmdir',
npm WARN cleanup       path: 'D:\\projects\\dajiangshangyunapixuexi\\Cloud-API-Demo-Web\\node_modules\\eslint\\lib\\rules\\utils'
npm WARN cleanup     }
npm WARN cleanup   ]
npm WARN cleanup ]
npm ERR! code ENOTFOUND
npm ERR! syscall getaddrinfo
npm ERR! errno ENOTFOUND
npm ERR! network request to https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz failed, reason: getaddrinfo ENOTFOUND registry.nlark.com
npm ERR! network This is a problem related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\W541\AppData\Local\npm-cache\_logs\2024-09-03T04_44_36_086Z-debug-0.log

出现这个报错,大概率是版本问题,导致依赖下载无法完成,那就删除node_modules、package-lock.json、yarn.lock这三个文件,然后再npm install一下下载依赖。

在这里插入图片描述

npm install

如果发现还是卡在进度条那里,就取消本次下载,重新npm install,依赖下载完成了。

在这里插入图片描述

下载后端所需要的Maven依赖包

使用IDEA打开项目,也就是你的源码克隆下载的地方。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

当右下角下载依赖的进度条小时时,说明依赖下载成功了。

在这里插入图片描述

用到的软件可以在这里下载

通过百度网盘分享的文件:文章需要用到的软件-可分享给他人.zip
链接:https://pan.baidu.com/s/1AFex3UjuX3e02m4ZDq0R2Q
提取码:8778
–来自百度网盘超级会员V5的分享

5、MySQL数据库安装

安装MySQL

如下图所示:直接复制解压这个绿色安装版的MySQL,在解压的时候不要有中文目录。

在这里插入图片描述

如这里,我把它解压到了

在这里插入图片描述

启动MySQL服务

进入bin目录

在这里插入图片描述

在这里插入图片描述

输入

mysqld --console

启动,MySQL服务。启动成功的界面如下图所示,这里注意了,这个窗口不要关闭。要保留着。

在这里插入图片描述
验证是否启动成功,登录MySQL。通过下图的方式打开一个新的窗口。

在这里插入图片描述

在窗口中输入

mysql -uroot -proot

回车登录MySQL,就可以看到大概如下图所示的MySQL了。

在这里插入图片描述

这个窗口可以关闭,现在可以使用MySQL的连接工具进行连接了。端口号是3306,用户名是:root,密码是:root。如我这里使用Navicat连接,这个Navicat现在已经有社区版了,直接去官网下载一个社区版就行了,这里只是导入数据而已。社区版能够支持这个功能。当然,这里您也可以使用MySQL相关的语句导入,我这里使用工具方便,还能直观看到数据表的信息。这个Navicat连接数据库这个过程就省略了,这个应该都会吧!

那么,这个数据在哪里呢?找到下载的后端代码,可以直接在IDEA中看。

在这里插入图片描述

创建MySQL连接

在这里插入图片描述

在这里插入图片描述

创建数据库完成之后,导入数据库表。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

导入成功之后,就可以关闭了,然后在Navicat中F5刷新一下就可以了。

在这里插入图片描述

在IDEA中配置MySQL的连接信息

在IDEA中修改数据库的连接信息。

在这里插入图片描述

6、Redis的安装

安装Redis

在这里插入图片描述

启动Redis

在这里插入图片描述

出现如下窗口,说明启动成功了。注意这个窗口不能关闭,要保留着。

在这里插入图片描述

Redis启动可能有问题的情况

如果Redis正常启动了,可以直接忽略这一步!!!
如果Redis正常启动了,可以直接忽略这一步!!!
如果Redis正常启动了,可以直接忽略这一步!!!

这里有一个需要注意的事项,就是如果EMQX先启动了,并且开启了Redis授权,具体看标题7安装EMQX。那么启动Redis会失败。这因为EMQX启动之后,是可以关闭命令窗口的的,然后有忘记停止EMQX时,在没有关机的情况下,下次进行代码运行的时候,EMQX有没有关闭,就会造成Redis怎么都启动不了,因为开启了Redis授权。至于怎么关闭EMQX,具体看标题7安装EMQX。关闭之后再启动。如果这样还是启动不了,那就是Redis的端口号被占用了,可以检查一下Redis的端口号是否被占用了,在Windows中,你可以使用netstat和taskkill命令来查找并杀死占用特定端口的进程。

按住键盘的Win + R建,然后输入cmd,打开命令提示符。
在这里插入图片描述
或者通过鼠标点击win图标,直接搜索cmd。这里怎么打开命令窗口不重要,只要能打开命令窗口就行了。
在这里插入图片描述

使用netstat命令查找特定端口的进程ID(PID):

netstat -ano | findstr :你的端口号

这将列出所有与指定端口相关的连接,包括PID。

使用taskkill命令杀死相应的进程:

taskkill /F /PID 该进程的PID

这里的/F参数用于强制杀死进程,/PID后跟进程的PID。

下面是一个实际的例子,假设我们要杀死占用端口8080的进程:

netstat -ano | findstr :6379

在这里插入图片描述

假设输出显示PID为4980。

taskkill /F /PID 4980

这样就会强制杀死占用端口4980的进程。
在这里插入图片描述
如果是先启动了EMQX时查询Redis端口号

这里还有需要注意的是,如果通过这种方式停止Redis。即使你启动了EMQX,也会查出EMQX的进程,然后通过同样的方式结束EMQX的进程,所以就可以按照后面的步骤一步一步走下去了。

在这里插入图片描述

在IDEA中配置自己的Redis连接信息

注意上面的窗口不能关闭,在IDEA中配置自己的Redis连接信息。

在这里插入图片描述

7、安装emqx

安装emqx

在这里插入图片描述

启动emqx

在这里插入图片描述

在这里插入图片描述

打开命令窗口,然后输入

emqx start

在这里插入图片描述

退出emqx

这个窗口关闭它都可以,因为emqx start这个命令,运行之后,会以程序的方式运行,可以在任务管理器中找到它。可以直接在任务管理器这里右键结束程序退出emqx。或者使用命令emqx stop。退出程序。
在这里插入图片描述
注意了,是启动成功之后!启动成功之后!启动成功之后!并没有执行退出命令或者在任务管理器中结束了它。然后,浏览器访问:http://localhost:18083/,会出现一个登录页面,用于登录emqx的。用户名是:admin,密码是:public。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

配置emqx允许匿名访问

这里为什么要配置这个,是因为尽量较少改动源代码,能够让上云API成功运行起来。在emqx4.4+的版本中,是不需要这一步配置的,因为在这个emqx4.4.0+这个大版本中,默认就设置了允许匿名访问了。但是在emqx5.1+以后的版本中,这个可以通过界面设置,将emqx改成允许匿名访问。一般默认就是允许匿名访问的。所以也不用改啥,看这里只是为了保证是否已经是匿名访问了而已。
在这里插入图片描述

开启Redis授权

由于大疆上云API的1.10.0版本,这里添加了Redis相关的授权。所以这里建议开启。Redis相关的授权。其实这里我刚开始没有开启这个授权的,然后也能正常连接无人机。(如下图所示)只不过主题和订阅数是十几个,然后我开启了Redis授权之后,正常连接无人机就有二十几个主题和订阅数了。但是好像也不影响使用,具体还需后续测试。这里刚开始的时候建议开启Redis授权!!!
在这里插入图片描述
那么如何开启Redis授权呢?请看下面的截图说明。
在这里插入图片描述
启用Redis授权的情况下,需要保证Redis服务是启动着的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建成功之后,可以发现多了一个Redis授权。

在IDEA中配置emqx的连接信息

在这里插入图片描述

8、后端配置大疆上云API开发相关证书

根据官方文档,这里配不配置,都是可以的。建议还是配置一下吧。这里只是我这里示例的ID,具体的要换成你们自己申请的ID。

在这里插入图片描述

9、启动后端

在这里插入图片描述
启动之后发现报如下所示的错误

***************************
APPLICATION FAILED TO START
***************************Description:Failed to bind properties under 'livestream.url.gb28181.local-port' to java.lang.Integer:Property: livestream.url.gb28181.local-portValue: "Please enter the local port."Origin: class path resource [application.yml] - 166:18Reason: failed to convert java.lang.String to @javax.validation.constraints.NotNull java.lang.Integer (caused by java.lang.NumberFormatException: For input string: "Pleaseenterthelocalport.")Action:Update your application's configuration

从,报错信息可以看出,某个字段不是整数的形式,所以才导致报错的。解决办法如下所示,要么改成整数的形式,要么直接注释掉它们。

在这里插入图片描述
在这里插入图片描述
如我这里改成了整数之后,这个整数不能跟上面MySQL、Redis、mqtt这里端口号冲突,要保证唯一性。
在这里插入图片描述
运行,发现还是报通用样的错误,只不过这是报另一个字段的错误了。

***************************
APPLICATION FAILED TO START
***************************Description:Failed to bind properties under 'livestream.url.gb28181.server-port' to java.lang.Integer:Property: livestream.url.gb28181.server-portValue: "Please enter the server port."Origin: class path resource [application.yml] - 162:19Reason: failed to convert java.lang.String to @javax.validation.constraints.NotNull java.lang.Integer (caused by java.lang.NumberFormatException: For input string: "Pleaseentertheserverport.")Action:Update your application's configuration

在这里插入图片描述
如我这里改成了整数之后,这个整数不能跟上面MySQL、Redis、mqtt这里端口号冲突,要保证唯一性。运行就成功了,啥报错都没有。

在这里插入图片描述

后端启动成功能正常运行可以发现有两个主题

然后访问emqx的页面:http://localhost:18083/,可以发现。有两个主题了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

后端启动成功后能正常运行发现没有那两个主题

如果有上面描述的那两个主题,可以直接忽略这一步!!!
如果有上面描述的那两个主题,可以直接忽略这一步!!!
如果有上面描述的那两个主题,可以直接忽略这一步!!!

这里会遇到一个问题,如果后端配置的mqtt的ip地址不正确、mqtt没有启动或者mqtt没有开启匿名访问配置的用户名和密码不对的情况下,后端也是保持这运行状态的,也就是说后端并没有直接结束运行,还是保持着运行状态,这时就有可能是,后端已经运行起来了,但是EMQX的页面,就是没有上面说的那两个主题,说明后端与mqtt的连接失败了!!!

在这里插入图片描述

10、修改启动前端配置

我这里使用了Vscode打开它
在这里插入图片描述
修改保存好之后,运行

npm run serve

在这里插入图片描述

运行成功之后,访问:http://localhost:8080/project。
在这里插入图片描述
点击登录,成功进入界面之后,说明登录成功了。

在这里插入图片描述
到此,基于源码的本地部署已经完成了,接下来就是连接遥控器了。

11、连接遥控器

从这官方文档https://developer.dji.com/doc/cloud-api-tutorial/cn/quick-start/source-code-deployment-steps.html 的Pilot 2登录程序这个标题开始看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2405.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Js:正则表达式及正则表达式方法

① 创建正则表达式对象: /** 语法:* var reg new RegExp(正则表达式, 匹配模式);* 匹配模式(字符串类型):i --> 忽略大小写 g --> 全局匹配模式*/var reg new RegExp(a, i);var str abc; /** 正则表达式的方法&#…

【论文阅读】具身人工智能(Embodied AI)综述:连接数字与物理世界的桥梁

摘要 具身人工智能(Embodied AI)对于实现通用人工智能(AGI)至关重要,是连接数字世界与物理世界的各类应用的基础。近年来,多模态大模型(MLMs)和世界模型(WMs&#xff09…

数据结构--二叉树

目录 有序二叉树: 平衡二叉树: 234树: 红黑树 红黑树特点: 为什么红黑树是最优二叉树? 哈夫曼树和哈夫曼编码 有序二叉树: 平衡二叉树: 在有序二叉树的基础上得来的,且左右子…

【算法】图解两个链表相交的一系列问题

问: 给定两个可能有环也可能无环的单链表,头节点head1和head2。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null。如果两个链表长度之和为N,时间复杂度请达到O(N…

Python文件操作中编码解码问题

一、错误介绍 在学习python文件操作过程中遇到了UnicodeDecodeError错误,报错信息如下图所示。 二、错误产生的原因 下面是个人理解,可能存在错误,请理性看待。 windows默认按照GBK来进行编码的,而处理的文件是用UTF-8进行编码…

麦田物语学习笔记:构建游戏的时间系统

基本流程 1.代码思路 (1)新建一个TimeManager.cs (2)创建枚举变量来表示四季,在TimeManager里需要的变量有: 游戏内的秒,分钟,小时,天,月,年;游戏内的季节;控制一个季节有多少个月;控制时间的暂停;计时器tikTime (3)在Settings里添加计时器的阈值,以及各个时间的进位 (4)初始化…

《leetcode-runner》如何手搓一个debug调试器——指令系统

前文: 《leetcode-runner》如何手搓一个debug调试器——引言 《leetcode-runner》如何手搓一个debug调试器——架构 文章目录 什么是指令系统指令的组成部分leetcode-runner支持哪些指令如何解析用户输入的命令行指令识别流程 仓库地址:leetcode-runner …

Python 实现 NLP 的完整流程

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证5)

用户在前端页面登录成功后会从服务端获取Token,后续调用服务器的服务接口时都得带着Token,否则就会验证失败。之前使用postman测试的时候,获取Token后再调用其它服务都是人工将Token添加到Header中,网页中没法这么做,只…

【深度学习实战】kaggle 自动驾驶的假场景分类

本次分享我在kaggle中参与竞赛的历程,这个版本是我的第一版,使用的是vgg。欢迎大家进行建议和交流。 概述 判断自动驾驶场景是真是假,训练神经网络或使用任何算法来分类驾驶场景的图像是真实的还是虚假的。 图像采用 RGB 格式并以 JPEG 格式…

下载文件,浏览器阻止不安全下载

背景: 在项目开发中,遇到需要下载文件的情况,文件类型可能是图片、excell表、pdf、zip等文件类型,但浏览器会阻止不安全的下载链接。 效果展示: 下载文件的两种方式: 一、根据接口的相对url,拼…

【漏洞分析】DDOS攻防分析

0x00 UDP攻击实例 2013年12月30日,网游界发生了一起“追杀”事件。事件的主角是PhantmL0rd(这名字一看就是个玩家)和黑客组织DERP Trolling。 PhantomL0rd,人称“鬼王”,本名James Varga,某专业游戏小组的…

低代码独特架构带来的编译难点及多线程解决方案

前言 在当今软件开发领域,低代码平台以其快速构建应用的能力,吸引了众多开发者与企业的目光。然而,低代码平台独特的架构在带来便捷的同时,也给编译过程带来了一系列棘手的难点。 一,低代码编译的难点 (1…

Android BitmapShader更简易的实现刮刮乐功能,Kotlin

Android BitmapShader更简易的实现刮刮乐功能,Kotlin 比这种方式 Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现“刮刮乐”效果,Kotlin(2)-CSDN博客 更简单实现刮刮乐效果。 import android.content.Cont…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言:AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中,企业对于智能化应用的需求日益增长。然而,传统的数据应用开发方式面临着诸多挑战,如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…

客户案例:某家居制造企业跨境电商,解决业务端(亚马逊平台)、易仓ERP与财务端(金蝶ERP)系统间的业务财务数据对账互通

一、系统定义 1、系统定位: 数据中台系统是一种战略选择和组织形式,通过有型的产品支撑和实施方法论,解决企业面临的数据孤岛、数据维护混乱、数据价值利用低的问题,依据企业特有的业务和架构,构建一套从数据汇聚、开…

springboot程序快速入门

1.新建springboot项目 一上来输入项目名字语言选javaType选Mavenjdk 1.8java选8packaging选jar 选择对应的springboot版本2.6.13Web里面勾上Spring Web 点击创建即可。 2.手工编辑一个控制器 手动创建一个Controller类: package com.example.springbootgate.con…

【Linux】常见指令(一)

Linux常见指令 01.whoami02.pwd03.ls04.mkdir05.cd 本文LInux环境为,使用XShell远程登陆到Linux。 具体如何环境搭建,大家可以查看其他博客。 01.whoami whoami 指令用来查看当前账户是谁。 如上图所示,使用whoami指令,查看到现在…

鸿蒙UI开发——键盘弹出避让模式设置

1、概 述 我们在鸿蒙开发时,不免会遇到用户输入场景,当用户准备输入时,会涉及到输入法的弹出,我们的界面针对输入法的弹出有两种避让模式:上抬模式、压缩模式。 下面针对输入法的两种避让模式的设置做简单介绍。 2、…

【零基础入门unity游戏开发——unity3D篇】地形Terrain的使用介绍

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…