大疆作为无人机行业的佼佼者,其应用范围从户外旅行、拍照到影视拍摄,以及工业运用都有着极高的地位。那么,我们如何仅仅使用大疆的飞控来开发出我们自己的无人机呢?
首先,你需要如下的东西:
以及相应的机架,动力系统,电池等等。不过这不是我们的重点,暂时略过。以下为OSDK和MSDK可完成的相应功能:
mobile sdk
onboard sdk
这里主要讲讲怎么利用大疆的SDK进行我们的应用开发。
注册成为开发人员
打开链接:https://developer.dji.com/register/,注册成为DJI Onboard SDK开发人员,并新建一个应用,该应用会自动生成一个APP ID和key。
硬件建立
Onboard computer通过UART接口与飞行控制器或DJI飞机通信。 一般来说,我们将使用下图中的一个设置:
电源
在调试SDK之前需要先给飞控通电,可以直接从DJI飞机的电源轨上获取电力。UART接口不需要Onboard computer供电。
连接器引脚
下图显示了A3 / N3与PC或Linux机器之间的硬件连接。 注意:
USB到TTL电缆可以在网上购买。
使用A3 / N3连接PC连接来运行DJI Assistant 2。
使用DJI Assistant来可以启用OSDK API,设置波特率和/或运行模拟器。
软件建立
下载SDK以及相关工具
启用OSDK API
需要启用OSDK API以允许Onboard SDK与飞机或飞行控制器之间的通信。
将飞机/飞行控制器连接到PC / Mac,启动DJI Assistant 2并在SDK页面上选中标记为Enable API Control的框。从这里开始,我们就能够使用大疆给的SDK对A3飞控发出指令进行各种操作了。
飞行平台激活
第一次使用OSDK应用程序时,飞控必须激活。OSDK为此激活提供API,并且所有OSDK的sample中都包含了实现激活的相应函数以及实现过程。
这里给出大疆的QT例程以及使用方法:
新的Qt示例应用程序提供了一个跨平台的GUI来尝试DJI OSDK功能,包含Linux, MacOS以及windows。
该应用程序实现了OSDK的以下部分的大部分功能:
激活/控制权限
飞行控制
相机/云台控制
航点任务
热点任务
MFIO控制
广播遥测
订阅遥测
该应用程序目前不实现MobileSDK通信和硬件同步功能。
软件安装:
Qt 5.9或更新版本(可以选择开源版本)
Qt Creator 4.3(以上下载包的一部分)
MSVC2015 / MSVC2013 / MinGW 5.3(Windows 10)或
Gcc 5.3.1(Ubuntu Linux)或
Apple LLVM 7.0或更新版本(MacOS)
DJI Onboard SDK下载:https://github.com/dji-sdk/Onboard-SDK
大疆硬件兼容性
Qt示例兼容OSDK 3.3.1支持的所有平台/固件组合,但M100除外。
工程建立
打开QT creator, 选择左上角文件->打开文件或项目,并定位到下载的OSDK目录sample/Qt/djiosdk-qt-sample/directory.选择djiosdk-qt-sample.pro文件。
在工程配置界面,选择合适的编译器,并点击“配置工程”按钮进入下一步。
接下来,单击左侧面板上的“项目”选项卡,然后选择左侧“Build&Run”标题下的“Run”。
选中“在终端中运行”复选框。在Linux上,您可能需要将Qt Creator指向预先安装的XTerm终端,而不是gnome-terminal;请转至工具 - >选项 - >系统,并将终端框中的路径更改为/ usr / bin / xterm-e。
运行应用
点击左下角的运行或调试按钮启动应用程序。
启动屏幕应如下所示:
首先,选择串口并点击Initialize Vehicle按钮。 这将设置Vehicle对象,初始化所有组件并从UserConfig.txt文件中读取App ID和Key。
接下来,必须激活无人机并选择获得控制权。
从这里开始,通过点击UI界面顶部的各个按钮来对各个部分进行控制。 例如,以下是Flight Control页面和MFIO页面的屏幕截图:
MobileSDK介绍:
DJIMobile SDK是一款软件开发套件,旨在为开发人员提供DJI飞机和手持相机产品的功能。 SDK通过照顾飞行稳定性,电池管理,信号传输和通信等较低级功能简化了应用程序开发过程。 这样,开发人员不需要机器人或嵌入式系统的背景知识,而是可以专注于将DJI产品集成到其中的应用程序。
该SDK包括:
可以导入到Android或iOS应用程序中的库/框架,可以访问DJI产品
飞机模拟器和可视化工具
本开发人员指南和API文档
本介绍将介绍SDK如何连接到产品,SDK提供的功能以及SDK的入门体系结构。
功能概述:
开发人员可以通过SDK访问DJI的许多产品功能和功能。开发人员可以实现飞行自动化,控制摄像头和万向节,接收实时视频和传感器数据,从产品下载已保存的媒体以及监视其他组件的状态。
手动:用户使用遥控器驾驶飞机,而SDK允许监控现场视频和传感器数据。
虚拟棒命令:SDK允许虚拟生成遥控器棒的移动,模拟飞行员。
任务:方便,易于实现对飞机的高级控制。例如,定义的飞行路径可以用航点任务执行。
虚拟操纵杆命令和任务允许DJI飞机进行简单而强大的自动飞行控制。
相机和万向节功能是高度可编程的,并且允许:
相机模式:视频和静态图像捕捉
曝光:快门,ISO,光圈和曝光补偿都可以定制,以获得最大的灵活性
图像参数:长宽比,对比度,色调,锐度,饱和度和滤镜
视频参数:分辨率和帧速率
方向:使用云台,可以自动控制摄像机的方向和运动
实时视频
传感器数据
丰富的传感器数据可通过SDK获得。 GPS位置,指南针,气压计,飞行速度和高度是传感器读数的一部分,通过Mobile SDK可以达到10 Hz。
下载媒体
通过DJIMobile SDK查看和下载保存到相机存储介质(SD卡或固态硬盘)的视频。可以访问预览和完整图像数据。
遥控器,电池,无线连接
遥控器,电池和无线连接都可以通过SDK访问。这些组件主要提供状态信息,但也可以进行一些控制。
开发人员无法预测或以编程方式评估用户的操作环境。在开放的环境中进行简单的操作可能会在狭小的空间内变得困难。环境可以是动态的,可能有时是安全的,而其他时间则不是。因此,开发人员和用户都必须了解产品及其控制应用程序的功能和局限性。
连接到应用程序和产品
下图说明了DJIMobile SDK如何适用于移动应用程序,以及它如何连接到DJI飞机。
SDK管理:
应用程序注册使用DJI Mobile SDK,产品连接,调试和日志记录服务通过SDK管理器类DJISDKManager进行处理。
该类还提供了连接到移动设备的产品实例,可以从中访问控件,状态和组件。
注册
应用程序需要初始化DJI Mobile SDK的权限。在应用程序开发过程中,需要生成一个唯一的应用程序密钥(应用程序密钥)并将其包含在源代码中。
当应用程序第一次运行时,该密钥将被发送到DJI服务器以验证应用程序可以使用SDK,因此,第一次在移动设备上运行应用程序时,移动设备将需要具有互联网连接。之后,不需要互联网连接来初始化DJI Mobile SDK,但在可用时会使用连接来确认应用程序仍然有权控制DJI产品。
如果成功,结果将被本地缓存在移动设备上。如果没有连接到互联网,移动设备上应用程序的每个后续初始化将检查本地缓存。
注意:一些DJI产品使用WiFi作为移动设备和产品之间的连接。该产品是接入点,移动设备是客户端,这意味着通过移动设备的WiFi连接不会存在互联网连接。如果使用此类产品,应用程序首次运行时应该是产品未连接到移动设备或移动设备需要有数据连接时。在首次成功注册后,连接不是必需的。
1.环境的搭建
下面的例子将DJI SDK导入到一个新的iOS和Android项目中。 相同的步骤可以用于集成到现有的应用程序中
AndroidStudio项目集成,到官网上下载Android Studio 3.0 http://www.android-studio.org/
在此之前,先安装好必要的环境,例如java,AndroidSDK,或者等安装好Android Studio在里面再配置AndroidSDK的存储位置并下载。先熟悉Android studio的环境和使用,再进行以下操作。
您已安装了推荐的 Java 版本。 (Version 8 Update 161).
本节中的屏幕截图是使用Android Studio 3.0.1生成的。
2.创建一个新应用程序
可以使用新的应用程序来演示如何将DJI SDK集成到Android Studio项目中。
1)打开Android Studio并在初始屏幕上选择启动一个新的Android Studio项目
2)在新建项目屏幕中:
将应用程序名称设置为“ImportSDKDemo”。
将公司域和包名称设置为“com.dji.ImportSDKDemo”。
注意:软件包名称是生成App Key所需的标识字符串。 下面的活动java,manifest xml和Gradle脚本代码假定包名是“com.dji.ImportSDKDemo”
一定要注意这里的包名,和创建app时输入的包名一致
3)在目标Android设备屏幕中:
选择手机和平板电脑外形。
选择API 19:Android 4.4(KitKat)。
4)在将活动添加到移动屏幕中,选择空白活动。
5)在配置活动屏幕中:
将活动名称设置为“MainActivity”。
确保选中生成布局文件。
将布局名称设置为“activity_main”。
完成后单击完成。
3.配置Gradle脚本
1)在Gradle脚本中,双击build.gradle(Module:app)
apply plugin: 'com.android.application' android { ... defaultConfig { ... } ... packagingOptions{ doNotStrip "*/*/libdjivideo.so" doNotStrip "*/*/libSDKRelativeJNI.so" doNotStrip "*/*/libFlyForbid.so" doNotStrip "*/*/libduml_vision_bokeh.so" doNotStrip "*/*/libyuv2.so" doNotStrip "*/*/libGroudStation.so" doNotStrip "*/*/libFRCorkscrew.so" doNotStrip "*/*/libUpgradeVerify.so" doNotStrip "*/*/libFR.so" } } dependencies { ... compile ('com.dji:dji-sdk:4.4.1') provided ('com.dji:dji-sdk-provided:4.4.1') } |
主要变化应该是:添加packagingOptions以防止应用程序意外崩溃。
添加编译和提供的依赖项以导入最新的DJI Android SDK Maven依赖项。
2)仔细检查Maven依赖关系
在Android Studio菜单中选择File-> Project Structure打开“Project Structure”窗口。 然后选择“应用程序”模块并单击依赖关系选项卡。 您应该看到最新的DJI SDK编译并提供了已经导入的denpendencies。
4.实施应用程序注册和SDK回调
注意是找到AndroidManifest.xml中android:value="Please enter your App Key here." />
右击com.dji.importSDKDemo,然后选择New-> Java Class以创建一个新的Java类并将其命名为“MApplication”。
这里我们重写attachBaseContext()方法来添加Helper.install(MApplication.this); 代码行。
由于一些SDK类现在需要在使用之前加载,加载过程由Helper.install()完成。 开发人员需要在使用任何SDK功能之前调用此方法。 不这样做会导致意外的崩溃。
双击应用程序模块中的MainActivity.java。
MainActivity类需要注册应用程序以获得使用DJI Mobile SDK的授权。 它还需要实现SDK预期的回调方法。MainActivity类首先被修改为包含多个类变量,包括mProduct,它是表示连接到移动设备的DJI产品的对象。此外,onCreate方法将被修改为调用checkAndRequestPermissions方法来检查和请求运行时权限。 此外,checkAndRequestPermissions方法将有助于调用startSDKRegistration()方法来注册应用程序。 此外,覆盖onRequestPermissionsResult方法将有助于检查应用程序是否具有足够的权限,如果是,则调用startSDKRegistration()方法注册应用程序。
运行导入SDK演示
现在可以运行ImportSDKDemo项目。 可以从Github下载该项目的示例代码。
由于此应用程序仅检查注册并且不直接与产品进行交互,因此无需将产品连接到应用程序即可运行。 因此,应用程序可以在移动设备上运行(连接或不连接DJI产品)或在Android模拟器中运行。 该应用程序将需要互联网连接才能成功执行注册。
如果应用密钥生成正确并且Android模拟器或移动设备具有互联网连接。
以上为无人机SDK开发的第一步,迈出这一步,往后就可以开始自由发挥了。