大疆文档(1)-介绍-概念

96
世外大帝
2019.04.02 18:14 字数 3609

相关度较低的略,提取了与安卓相关的文档进行翻译,以便于加深理解和方便以后的翻阅,本节包括包括介绍,立即开始,概念理解

介绍

文档介绍

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,不需要额外的代码行就可以创建应用程序。它看起来像:

DefaultScreen

开发人员可以选择要包含、排除和定制UX SDK的哪些部分。UX SDK在DJI Mobile SDK v4.0及更高版本中可用。

概述

UX SDK有三个主要的UI类别:

  • 小部件:一个独立的UI元素,提供状态或简单的控制(例如电池指示器或自动起飞按钮)
  • 集合:(仅适用于iOS)一个有组织的小部件集合,这些小部件彼此相关(例如相机曝光状态)
  • 面板:具有丰富UI元素的复杂菜单和设置视图(例如相机设置)

所有UI元素都可以简单地包含在应用程序中,无需额外的维护。它们已经绑定到DJI Mobile SDK,并将在实例化后开始更新自己。

AndroidiOS 的UX SDK API参考中有完整的UI元素列表。

部件

小部件是UX SDK中最简单的组件。它通常表示一个简单的状态元素或提供一个简单的控件。小部件的一些例子包括:

飞机电池百分比 飞行模式 视频信号强度 返回按钮
img
img
img
img
定制

小部件可以通过资产互换或子类化小部件来定制。

  • 资产互换

    交换资产保留了小部件的行为和逻辑,但是改变了它的外观。

    您的资产需要与现存资产相同的大小和名称,否则框架将无法正确显示它。如果UX SDK无法找到它期望的资产,它将在资产的中心周围画一个橙色的小方块,以帮助提高可视性。

  • 子类化

    • IOS

      小部件可以子类化,以覆盖初始化和视图更新方法,从而定制外观。为了便于定制,每个小部件都公开作为属性使用的底层数据。有关详细信息,请参阅 API documentation

    • Android

      在Android中,子类化可以完全改变widget的行为和外观。的步骤是:

      1. 覆盖void initView(Context var1, AttributeSet var2, int var3) 并膨胀/初始化自定义布局。记住,不要调用 super.initView().
      2. 要获取信息的更新,可以使用 onXXXChange模式下的名称覆盖方法 (例如, BatteryWidget中的onBatteryPercentageChange(int percentage) )。此方法将在每次电池百分比变化时调用。重写此方法将得到电池百分比的整数值。记住,不要调用super.initView()
      3. 要执行操作,请使用遵循命名模式performXXXAction的方法。

集合(ios)

小部件集合以有组织的方式将多个相关的小部件分组。它控制小部件之间相对的布局。

还可以创建集合并使用集合来组织已存在的小部件。

小部件集合只在iOS中使用。小部件集合的例子包括:

状态栏小部件集合
img

面板

面板是更复杂的元素,具有丰富的信息和控制,如设置菜单或飞行前检查表。小组的例子包括:

相机设置面板 相机曝光设置面板 飞行前检查表
img
img
img

面板比较复杂,不提供定制。

示例和教程

sdk体系结构

​ 该体系结构的设计是可以高度扩展的。抽象产品组件类可以让app用相同的代码控制不同的产品。在运行时可以查询所有受支持产品的迭代之间不一致的特性,而那些一致的特性就可以正常工作。

​ 这也意味着当新产品发布时,它们将已经与现有的应用程序一起工作(当应用程序使用支持新产品的最新SDK重构时)。新产品的任何新特性都需要添加到应用程序中,但是所有现有的特性都不需要修改。

  • 层级

    img
    • 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轴通过飞机的底部。

    img

    因此,在机身坐标系中,X、Y、Z正向上的平移分别定义为正向平移、向右平移和向下平移。

    用坐标右手定则来定义飞机的正旋转方向,也可以用这些相同的轴来描述飞机的旋转。当描述旋转运动时,X、Y和Z轴被重命名为Roll(转动)、Pitch(倾斜)和Yaw(偏向)。

    img

    X、Y、Z、横摇、俯仰和偏航的定义与飞机机身坐标系一致,但有时对于第一次看到它的开发人员来说并不直观。

    例如,如果飞机绕螺距轴(Y轴)旋转,它将沿X轴方向移动。此外,如果俯仰角是正的,则方向是向后的,或在负X轴上。因此在使用横摇、俯仰和偏航来移动飞机时必须小心。

  • 地面(世界)坐标系

    飞机常用的地面或世界坐标系是将正X轴、Y轴和Z轴与北、东和向下的方向对齐。这一惯例被称为东-北-下(North-East-Down)NED

    正Z向下指向可能需要一些时间来适应,但这很方便,因为X和Y符合右手定则和正常航向角。0°的航向角指向北,90°的航向角指向东。

    NED坐标系的原点通常是世界坐标系中的一个点(比如起飞位置)。

img
姿态和飞行

飞机和平衡器(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°(北),则无论飞机是否偏航,只要发出左侧命令,飞机都会向西移动。

    下图展示了一架与航向锁方向相反的飞机,并展示了当发出向前或向右的命令时,飞机相对于自身将分别向后或向左。

    img
  • 主锁 Home Lock

    home锁定向模式使飞机相对于home点呈放射状移动。向前和向后的命令将分别使飞机离home点更远和更近。左右命令将飞机在当前半径的原点周围移动一个圆圈。

    img

相机曝光

大疆文档