相关度较低的略,提取了与安卓相关的文档进行翻译,以便于加深理解和方便以后的翻阅,本节包括包括介绍,立即开始,概念理解
介绍
文档介绍
SDK简化了应用程序开发过程,实现了较低级别的功能,如飞行稳定、电池管理、信号传输和通信。这样,开发人员就不需要机器人或嵌入式系统的背景知识,而是可以专注于DJI产品集成的应用程序。
sdk包括:
- 一个库/框架,可以导入Android或iOS应用程序,从而访问DJI产品
- 一个飞机模拟器和可视化工具
- iOS调试器和远程日志程序
- 示例代码和教程
- 本开发人员指南和API文档
Mobile SDK 介绍
- 产品特征
开发人员可以通过SDK访问DJI的许多产品特性和功能。开发人员可以自动飞行,控制摄像机和框架,接收实时视频和传感器数据,从产品中下载保存的媒体,以及监控其他组件的状态。 - 飞行控制:
- 手动:用户通过遥控器操作无人机,sdk同时监控实时视频和传感器数据。
- 虚拟摇杆命令: SDK允许生成遥控器摇杆虚拟运动,模拟一个试验
- 任务: 方便、易实现对无人机的高水平控制。例如,定义飞行路线可以通过路径任务执行。
虚拟摇杆命令和任务允许简单但强大的自动飞行控制的大疆飞机。
- 相机
相机和方向锁功能是可以高度修改的,并且允许一下行为:
- 相机模式: 视频和静态图像捕捉
- 曝光: 快门、ISO、光圈和曝光补偿均可定制,最大限度地提高灵活性
- 图像参数: 长宽比,对比度,色调,锐度,饱和度和过滤器
- 视频参数: 分辨率和帧率
- 方向: 使用方向锁,相机方向和运动可以自动控制
- 视频直播
通过Mobile SDK,可以实现主摄像头反馈在飞机上的实时视频播放。实时视频是可用的,即使相机捕捉图像或视频到它的存储媒体。 - 传感器数据
丰富的传感器数据可以通过SDK获得。GPS位置、指南针、气压计、飞行速度和高度是一些传感器读数,可以通过移动SDK在高达10Hz的频率下读取。 - 下载数据
保存到相机存储的视频可以通过DJI Mobile SDK查看和下载。预览和完整的图像数据都可以访问。 - 遥控器,电池,无线连接
遥控器、电池、无线链路均可通过SDK访问。这些组件大多提供状态信息,但也可以进行一些控制。 - 根据图例,mavic 2 只可通过usb方式连接遥控器
UX SDK 介绍
许多使用DJI Mobile SDK控制DJI产品的应用程序共享类似的核心功能。他们通常会:
- 显示摄像机反馈的实时视图
- 显示产品状态(飞机遥测、电池电量、信号强度等)
- 允许用户查看和更改产品设置
- 具备自动起飞、降落、返回等基本功能。
要创建应用程序,开发人员通常必须在添加一些惟一的功能之前提供这组核心功能。
DJI UX SDK提供了具有这些核心功能的UI元素,因此可以用来加快开发时间。实际上,通过使用默认的UX SDK,不需要额外的代码行就可以创建应用程序。它看起来像:
开发人员可以选择要包含、排除和定制UX SDK的哪些部分。UX SDK在DJI Mobile SDK v4.0及更高版本中可用。
概述
UX SDK有三个主要的UI类别:
- 小部件:一个独立的UI元素,提供状态或简单的控制(例如电池指示器或自动起飞按钮)
- 集合:(仅适用于iOS)一个有组织的小部件集合,这些小部件彼此相关(例如相机曝光状态)
- 面板:具有丰富UI元素的复杂菜单和设置视图(例如相机设置)
所有UI元素都可以简单地包含在应用程序中,无需额外的维护。它们已经绑定到DJI Mobile SDK,并将在实例化后开始更新自己。
Android和 iOS 的UX SDK API参考中有完整的UI元素列表。
部件
小部件是UX SDK中最简单的组件。它通常表示一个简单的状态元素或提供一个简单的控件。小部件的一些例子包括:
飞机电池百分比 | 飞行模式 | 视频信号强度 | 返回按钮 |
定制
小部件可以通过资产互换或子类化小部件来定制。
- 资产互换
交换资产保留了小部件的行为和逻辑,但是改变了它的外观。
您的资产需要与现存资产相同的大小和名称,否则框架将无法正确显示它。如果UX SDK无法找到它期望的资产,它将在资产的中心周围画一个橙色的小方块,以帮助提高可视性。 - 子类化
- IOS
小部件可以子类化,以覆盖初始化和视图更新方法,从而定制外观。为了便于定制,每个小部件都公开作为属性使用的底层数据。有关详细信息,请参阅 API documentation。 - Android
在Android中,子类化可以完全改变widget的行为和外观。的步骤是:
- 覆盖
void initView(Context var1, AttributeSet var2, int var3)
并膨胀/初始化自定义布局。记住,不要调用super.initView()
. - 要获取信息的更新,可以使用
onXXXChange
模式下的名称覆盖方法 (例如,BatteryWidget
中的onBatteryPercentageChange(int percentage)
)。此方法将在每次电池百分比变化时调用。重写此方法将得到电池百分比的整数值。记住,不要调用super.initView()
。 - 要执行操作,请使用遵循命名模式
performXXXAction
的方法。
集合(ios)
小部件集合以有组织的方式将多个相关的小部件分组。它控制小部件之间相对的布局。
还可以创建集合并使用集合来组织已存在的小部件。
小部件集合只在iOS中使用。小部件集合的例子包括:
状态栏小部件集合 |
面板
面板是更复杂的元素,具有丰富的信息和控制,如设置菜单或飞行前检查表。小组的例子包括:
相机设置面板 | 相机曝光设置面板 | 飞行前检查表 |
面板比较复杂,不提供定制。
示例和教程
sdk体系结构
该体系结构的设计是可以高度扩展的。抽象产品和组件类可以让app用相同的代码控制不同的产品。在运行时可以查询所有受支持产品的迭代之间不一致的特性,而那些一致的特性就可以正常工作。
这也意味着当新产品发布时,它们将已经与现有的应用程序一起工作(当应用程序使用支持新产品的最新SDK重构时)。新产品的任何新特性都需要添加到应用程序中,但是所有现有的特性都不需要修改。
- 层级
- SDK管理器: 管理SDK注册,产品连接,提供对产品本身的访问。
- 产品: 无人机或手持产品,该类包含基本的产品属性和主要的产品组件。
- 组件类: 组件类描述框架、摄像机、飞行控制器、遥控器和无线链路。这些类提供组件控制、状态信息和包含的子组件。
- 任务: 描述不同任务的类,如路径和主动追踪任务,并保存它们的设置属性和状态。
- 任务控制: 任务控制处理任务的执行。既可以通过专用的任务操作符运行单个任务,也可以使用时间轴连续运行一系列任务和操作。
立即开始
- 注册大疆开发者账号
- 生成app key
- 把app key复制到demo中然后构建项目
- 运行demo
- 将demo编译移动端。然后将移动端设备连接到DJI产品上运行demo。
- 对于使用光桥作为遥控器与飞行器之间无线连接的飞行器,移动设备通过USB连接到产品上。
- 对于使用WiFi作为无线链路的飞机或产品,移动设备通过WiFi与产品连接。
- usb连接过程
- Mavic Pro, Phantom 4, Phantom 4 Professional, Inspire series, Phantom 3 Professional, Phantom 3 Advanced, M100, M600, M600 Pro:
- 打开遥控器
- 打开飞行器,等待遥控器与飞行器连接。
- 使用Lightning (iOS)或USB (Android)电缆将iOS/Android移动设备连接到遥控器。
- 在移动设备上运行demo。
- wifi连接过程
- Phantom 3 Standard, Phantom 3 4K, Spark:
- 打开遥控器
- 将移动设备连接到遥控器创建的WiFi网络。
- 打开飞行器,等待遥控器与飞行器连接。
- 在移动设备上运行demo。
概念的理解
飞行控制
坐标系统
飞机运动的描述依赖于构成坐标系(或参照系)的坐标轴的位置和方向。目前存在许多坐标系,但DJI Mobile SDK中使用的两种坐标系分别相对于机身(机身框架)和地面(世界框架)。
- 机身坐标系
身体坐标系是相对于飞机本身的。定义了三个垂直轴,原点是质心点,X轴穿过飞机前部,Y轴穿过飞机右侧。使用坐标右手定则(z=x*y),则Z轴通过飞机的底部。
因此,在机身坐标系中,X、Y、Z正向上的平移分别定义为正向平移、向右平移和向下平移。
用坐标右手定则来定义飞机的正旋转方向,也可以用这些相同的轴来描述飞机的旋转。当描述旋转运动时,X、Y和Z轴被重命名为Roll(转动)、Pitch(倾斜)和Yaw(偏向)。
X、Y、Z、横摇、俯仰和偏航的定义与飞机机身坐标系一致,但有时对于第一次看到它的开发人员来说并不直观。
例如,如果飞机绕螺距轴(Y轴)旋转,它将沿X轴方向移动。此外,如果俯仰角是正的,则方向是向后的,或在负X轴上。因此在使用横摇、俯仰和偏航来移动飞机时必须小心。
- 地面(世界)坐标系
飞机常用的地面或世界坐标系是将正X轴、Y轴和Z轴与北、东和向下的方向对齐。这一惯例被称为东-北-下(North-East-Down)或NED。
正Z向下指向可能需要一些时间来适应,但这很方便,因为X和Y符合右手定则和正常航向角。0°的航向角指向北,90°的航向角指向东。
NED坐标系的原点通常是世界坐标系中的一个点(比如起飞位置)。
姿态和飞行
飞机和平衡器(gimbal )的方向被称为它的姿态(attitude ),由机体坐标系中围绕俯仰、滚转和偏航轴的旋转来定义。
结合油门(throttle),旋转飞机的俯仰(Pitch),翻滚(roll )和偏航(yaw )定向的飞机和移动它在空间。
智能方向控制 IOC (Intelligent Orientation Control)
IOC(在Mobile SDK中称为飞行定向模式)定义了飞机将如何解释水平飞行命令(向前、向后、向左和向右)。
默认情况下,飞机相对于自身飞行,因此左命令使飞机向左飞行。如果一架飞机从第一人称视角驾驶很容易理解。然而当飞机从一个固定的位置远程飞行时,它可能会令人困惑或不便。
当飞行员无法确定飞机的航向时,就很难预测飞机相对于飞行员将如何移动。如果飞机正对着飞行员,那么从飞行员的角度来看,当发出左命令时,飞机将向右移动。
因此,提供了course锁( Course Lock)和home锁(Home Lock)定向模式,使运动相对于飞行员而不是飞机。这些定向模式只有在遥控器飞行模式切换为“F”时才有效,对于带有“F”模式选项的遥控器切换为“F”模式,对于所有其他遥控器切换为“P”模式就行了。
- 航向锁 Course Lock
航向锁定向模式使飞机相对于固定航向运动。如果选择航向为0°(北),则无论飞机是否偏航,只要发出左侧命令,飞机都会向西移动。
下图展示了一架与航向锁方向相反的飞机,并展示了当发出向前或向右的命令时,飞机相对于自身将分别向后或向左。 - 主锁 Home Lock
home锁定向模式使飞机相对于home点呈放射状移动。向前和向后的命令将分别使飞机离home点更远和更近。左右命令将飞机在当前半径的原点周围移动一个圆圈。