✨✨✨这里是小韩学长yyds的BLOG
✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds
目录
开发前的准备
在使用上云 API 对大疆无人机进行 Java 代码二次开发之前,需要进行一系列的准备工作,以确保开发环境的完备和开发过程的顺利进行。
- 开发环境搭建:首先,要确保开发环境中安装了 Java Development Kit(JDK)。JDK 是 Java 开发的基础,它提供了编译、运行 Java 程序所必需的工具和库。你可以从 Oracle 官网(Java Downloads | Oracle )下载适合你操作系统的 JDK 版本。下载完成后,按照安装向导的提示进行安装。安装过程中,建议记住安装路径,后续配置环境变量时会用到。安装完成 JDK 后,需要配置环境变量。以 Windows 系统为例,右键点击 “此电脑”,选择 “属性”,在弹出的窗口中点击 “高级系统设置”,然后点击 “环境变量” 按钮。在 “系统变量” 区域中,点击 “新建” 按钮,创建一个名为 “JAVA_HOME” 的变量,变量值为 JDK 的安装路径(例如:C:\Program Files\Java\jdk11.0.11)。接着,找到名为 “Path” 的系统变量,点击 “编辑”,在变量值的末尾添加 “;% JAVA_HOME%\bin”(注意分号的使用)。这样,系统就能够找到 Java 的可执行文件了。
- 申请 DJI 开发者账号:要进行大疆无人机的二次开发,需要在 DJI 开发者网站(DJI Developer )上注册一个开发者账号。访问该网站后,点击页面右上角的 “注册” 按钮,按照提示填写注册信息,包括邮箱、密码、验证码等。注册完成后,登录刚注册的账号。登录成功后,需要创建一个应用来获取 API 密钥。在开发者中心页面,找到 “我的应用” 或类似的选项,点击 “创建应用”。在创建应用的表单中,填写应用的相关信息,如应用名称、应用描述、选择对应的 SDK 类型(这里选择与 Java 开发相关的 SDK)等。填写完成后,提交表单,系统会生成一个 API 密钥对(App Key 和 App Secret)。这个密钥对非常重要,它是你在开发过程中与大疆无人机进行通信和调用 API 的身份标识,务必妥善保管,不要泄露给他人。
- 下载大疆 SDK:拥有了开发者账号和 API 密钥后,就可以下载大疆无人机的 SDK 了。返回 DJI 开发者网站,在网站上找到 “下载中心” 或 “SDK 下载” 相关的板块。在 SDK 下载列表中,找到适用于 Java 开发的 SDK 版本。大疆提供了不同类型的 SDK,根据你的开发需求和无人机型号选择合适的 SDK 下载。例如,如果你开发的是基于 Android 平台的应用来控制大疆无人机,就需要下载 Android SDK for DJI Products。点击下载链接后,等待 SDK 下载完成。下载的 SDK 通常是一个压缩包文件,将其解压到你指定的目录中。解压后的目录结构包含了开发所需的库文件、示例代码、文档等资源。这些资源将为你后续的开发工作提供重要的支持和参考。
上云 API 基础认知
大疆上云 API 采用端边云架构分层,这一架构与物联网架构类似 ,是实现无人机高效管理与应用扩展的关键。在这个架构中,无人机作为终端设备,不能直接接入第三方云平台。它首先需要连接网关设备,比如遥控器或者大疆机场 。以遥控器为例,其中内置的 DJI Pilot 2 软件发挥着重要作用,当它注册登录第三方云平台时,会将无人机及其负载的能力信息一并上报,使得云平台能够全面了解设备状态与功能。
在通信协议方面,网关设备与第三方云平台之间主要采用业界通用的 MQTT、HTTPS、Websocket 协议 。MQTT 是一种基于客户端 - 服务端架构的发布 / 订阅模式的消息传输协议,具有轻量级、低功耗、低带宽占用等特点,非常适合在网络条件复杂的环境中实现设备与云平台之间的实时数据交互,例如无人机在飞行过程中实时向云平台上报飞行状态、位置信息等 。HTTPS 协议则主要用于保障数据传输的安全性,在进行一些敏感数据传输,如用户认证信息、飞行任务关键参数时,通过加密传输防止数据被窃取或篡改 。Websocket 协议为实现实时双向通信提供了支持,例如云平台对无人机进行实时控制指令下发时,Websocket 能确保指令及时准确地传达到无人机。
大疆上云 API 提供了丰富的功能集,这些功能集主要分为两部分。一部分是基于 DJI Pilot 2 的有飞手操作的场景功能集 ,其中地图元素功能能够在飞手操作界面上清晰展示无人机所处位置的地图信息,包括地形、地标等,帮助飞手更好地规划飞行路线;态势感知功能可以让飞手实时了解无人机的飞行状态,如高度、速度、电量等,以及周边环境信息,保障飞行安全;直播功能支持将无人机拍摄的实时画面传输到相关平台,方便实时监控作业现场;媒体库用于存储无人机拍摄的照片和视频等媒体文件,便于后续查看与分析;航线库则存储了各种预设的飞行航线,飞手可根据不同作业需求快速调用;设备管理功能允许飞手对无人机及其相关设备进行参数设置、状态监测等操作 。另一部分是主要面向大疆机场的场景功能集,固件远程升级功能可让机场管理人员在云平台上对无人机固件进行远程更新,确保无人机始终具备最新的功能与性能优化;设备异常告警功能能够在无人机或机场设备出现故障时及时向管理人员发送警报信息,以便快速采取应对措施;机场远程控制功能使管理人员可以在云平台上对机场进行远程操作,如控制无人机的起飞、降落、充电等 。
Java 开发环境配置
在 Java 项目中使用大疆 SDK 进行二次开发,首先要确保项目能够正确引入 SDK 和相关依赖。如果你使用的是 Maven 项目管理工具,配置过程主要集中在pom.xml文件中。
打开项目的pom.xml文件,在<dependencies>标签内添加大疆 SDK 的依赖项。例如,如果使用的是大疆官方发布的 Java SDK 版本4.15.2,添加如下代码:
<dependency>
<groupId>com.dji</groupId>
<artifactId>dji-sdk</artifactId>
<version>4.15.2</version>
</dependency>
这里的<groupId>表示组织 ID,com.dji代表大疆公司;<artifactId>是项目的唯一标识符,dji-sdk表示这是大疆的 SDK;<version>指定了 SDK 的版本号,使用具体版本号可以确保项目依赖的稳定性 。
除了大疆 SDK 本身,根据你的开发需求,可能还需要添加其他依赖。比如,如果你需要处理 JSON 格式的数据来与上云 API 进行交互,就需要添加 JSON 处理库的依赖,以 Jackson 库为例,添加如下代码:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
添加完依赖后,保存pom.xml文件。Maven 会自动检测到这些新添加的依赖,并尝试从远程仓库(如 Maven 中央仓库)下载相应的库文件到本地仓库中。如果你的项目无法访问远程仓库,也可以将所需的 JAR 包下载到本地,然后通过systemPath指定本地路径的方式引入依赖,例如:
<dependency>
<groupId>com.dji</groupId>
<artifactId>dji-sdk</artifactId>
<version>4.15.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/dji-sdk-4.15.2.jar</systemPath>
</dependency>
其中,${project.basedir}表示项目的根目录,lib是存放 JAR 包的文件夹,你需要根据实际情况调整路径 。
在配置依赖的过程中,要注意版本兼容性问题。不同版本的大疆 SDK 可能在功能和接口上有所差异,并且与其他依赖库之间也可能存在兼容性问题。因此,在选择版本时,最好参考大疆官方的文档和示例代码,以及其他开发者的经验分享,以确保开发过程的顺利进行。
获取 API 凭证与身份验证
在调用大疆上云 API 之前,需要在大疆开发者平台申请 API 凭证,这是确保合法访问和使用 API 的关键步骤。这些凭证包括 App ID 和 Secret Key ,它们就像是你访问 API 资源的钥匙,通过这对密钥,大疆的服务器能够识别你的身份,确认你是否有权限进行相应的操作。
要获取 API 凭证,首先登录大疆开发者平台(DJI Developer )。在平台界面中,找到与应用管理相关的板块,可能名为 “我的应用”“应用列表” 等。在这个板块中,点击 “创建应用” 按钮。在弹出的创建应用表单中,填写详细的应用信息。应用名称要简洁明了且能准确反映应用的功能或用途,例如 “大疆无人机巡检数据管理应用”;应用描述则需详细阐述应用的主要功能、使用场景等,如 “该应用用于通过大疆上云 API 获取无人机在巡检任务中拍摄的图像和飞行数据,进行集中管理和分析,以提高巡检效率和数据处理能力” 。同时,根据实际开发需求选择正确的 SDK 类型,如果是使用 Java 进行开发,需选择对应的 Java SDK 选项。填写完成后,提交表单。平台会对提交的信息进行审核,审核通过后,就会生成对应的 App ID 和 Secret Key 。务必妥善保存这两个凭证,不要随意泄露,因为一旦泄露,可能会导致你的 API 访问权限被滥用,造成数据安全问题和不必要的损失。
在 Java 代码中进行身份验证时,通常会利用 HTTP 请求头来传递 App ID 和 Secret Key 。以使用HttpClient库发送 HTTP 请求为例,代码如下:
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.c