完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
Onboard SDK综述 低延迟,高频率的传感器遥测, 飞行器控制和视频流,扩展你的DJI Matrice 软硬件功能 开发平台:Linux、ROS、QT、Embeded system OSDK 3.7于2018年8月14日发布。该版本增加了新的遥测数据,一些新的API和一些一般性改进以及改进的遥测API参考。 有关更多信息,请参阅发行说明。 DJI Onboard SDK(OSDK)允许您为支持DJI的车辆(Matrice 100,Matrice 600或Matrice 210/210-RTK)或飞行控制器(A3或N3)构建功能强大的自动化无人机应用程序。 本文档可帮助您开始构建OSDK应用程序的各个方面。 本节介绍和比较与DJI OSDK兼容的产品,并概述SDK本身。 1.1硬件支持 DJI生产小型,高性能,遥控飞机,相机和稳定器,非常适合消费者和商业应用。 产品易于使用且价格合理,并且具有业内无与伦比的质量和功能。 本简介总结了与Onboard SDK兼容的产品。 提供产品和主要组件的高级描述以及产品之间的详细比较,以帮助开发人员选择哪种产品最适合他们正在使用的应用程序。 1.1.1产品类别 I、飞机 DJI拥有一系列多旋翼飞机,可通过Onboard SDK实现自动化,包括Matrice 600 Pro,Matrice 600,Matrice 210,Matrice 100.该飞机提供一系列功能,性能,尺寸和价格。 开发人员和用户在考虑飞机时应注意的具体指标包括: 飞行时间、尺寸和重量、相机规格(图像质量和运动控制)、可更换的相机、避障、可定制的有效负载、最高服务上限、可用配件、遥控器功能、支持Onboard SDK II、独立飞行控制器 N3,A3和A3 Pro飞行控制模块是可以使用Onboard SDK自动执行的独立组件。 所有飞行控制模块包括:飞行计算机、惯性测量单元(IMU)包括罗盘,陀螺仪,气压计,加速度计、全球定位系统(GPS)。 这些飞行控制模块允许开发人员构建具有DJI稳定可靠的飞行控制系统的全定制飞机。 要创建飞机,这些飞行控制器可以与以下组合: DJI(Flamewheel系列,S系列)或第三方机身 DJI(Lightbridge 2)或第三方无线通信链接 DJI相机(见下表)和/或第三方相机 第三方电池 A3和A3 Pro飞行控制器也分别用于M600和M600 Pro产品。 但应注意,A3和A3 Pro的固件将与M600和M600 Pro中使用的固件不同。 III、相机 DJI提供了许多万向节安装的摄像头,可以在飞机之间交换,也可以与DJI的飞行控制器和无线链路一起使用。 本表中详细介绍了与M100,M210,M210-RTK,M600,M600 Pro,A3,A3 Pro和N3兼容的相机。 1.1.2组成部分 在进行详细的产品比较之前,了解产品的组件及其功能非常有用。所有产品都包含提供重要特性或功能的组件模块。 下面是典型组件的介绍,并在组件指南中提供了更多详细信息。 I、动力 电机安装的螺旋桨提供垂直推力。 可以在每个马达处调节垂直推力,以允许飞机悬停,旋转,上升,下降或水平飞行。 II、传感器 DJI飞机拥有大量传感器,包括加速度计,陀螺仪,罗盘,气压计,超声波传感器,摄像机和卫星定位系统。 这些传感器用于确定飞机及其周围环境的当前状态并预测未来状态。 III、飞控 飞行控制器是飞机的主控制器,它将来自飞行员的控制信息与传感器信息耦合,以调整每个螺旋桨的推力并根据需要飞行飞机。 IV、相机 相机可以在本地记录图像和视频数据。 V、万向节 云台固定摄像机并可围绕三个轴旋转。 旋转可用于控制摄像机指向的方向,并在飞机不水平时提供旋转稳定。 万向节安装在用于Matrice 100的阻尼板上,以及用于Matrice 600,Matrice 210和Matrice 600 Pro的专用万向支架上,以稳定横向振动和旋转运动。 VI、智能电池 智能电池提供运行系统所需的能量。 与飞行控制器一起,智能电池可以估算剩余飞行时间,并在超过低电池阈值时提供警告。电池很容易在航班之间交换,大大扩展了产品的使用。 VII、遥控器 遥控器提供控制杆,按钮和轮子,可控制飞机飞行,摄像机和云台。 遥控器与飞机保持无线连接,其中一些产品在理想环境中具有高达7km的范围。 VIII、车载电脑 可以在飞机上安装外部车载计算机,并使用Onboard SDK和与飞行控制器的直接串行(UART)连接,提供飞行自动化。 IX、移动设备 可以通过USB或WiFi将Android或iOS设备连接到遥控器,以提供显示实时摄像机馈送的增强飞行体验,并显示飞机状态信息。 使用DJI Onboard SDK和DJI Mobile SDK,移动设备也可用于控制飞机。 1.1.3支持产品 下表列出了DJI Onboard SDK支持的飞机,手持摄像头和独立组件。 1.1.4飞机比较 由于产品,特性和功能的大量选择,飞机比较可能很困难。 下面是三个总结的飞机比较表,介绍飞机和功能的差异。 I、飞行时间 产品飞行时间由飞机总质量和飞机上可用的存储(电池)能量决定。 可用能量取决于电池数量,电池能量密度和推进系统可支持的最大质量。 II、电池能量密度 DJI为Inspire和Matrice产品线提供两个系列的电池。 TB47系列是所有飞机附带的默认99 Wh电池。 TB48系列是130 Wh电池。 虽然TB48电池的能量密度提高了10-15%,但由于电池> 100 Wh通常具有运输限制,因此不太实用。 如果所有其他电池保持不变,使用具有更高能量密度的电池将始终转化为更长的飞行时间。 但是,由于TB48电池比TB47电池稍重,重要的是要记住它的使用将限制最大的自定义有效载荷。 当使用多个电池时,Matrice系列产品尤其明显。 使用更多电池,增加产品上的电池数量将会: 增加飞行可用能量(增加飞行时间) 增加飞机质量因此: 减少飞行时间 减少允许的额外有效负载 III、飞行时间比较 为帮助了解不同飞机配置的潜在功能和飞行时间,有效载荷和飞行时间的详细摘要如下:
有三种飞行控制器可供选择: N3:具有单个冗余IMU的消费级飞行控制器 A3:商用级飞行控制器 A3 Pro:具有2个冗余IMU和GPS天线的商用级飞行控制器。 所有三种飞行控制器均可用于各种机身配置: 下表详细说明了飞行控制器选项之间的差异。
DJI提供多种相机配置。 对于Inspire和Matrice系列产品,可以互换相机(Zenmuse X3,X5,X5R,Z3,XT,Z30)。 页面顶部的“产品和配件”表详细介绍了相机和飞机兼容性的组合。 Zenmuse XT是一款热像仪。 它的规格很难直接与其他摄像机进行比较,但它包含在比较中,用于有效载荷计算的质量。 有关Zenmuse XT规格的更多详细信息,请点击此处。
遥控器的不同之处在于: 他们如何连接到移动设备 他们使用什么无线技术与飞机连接 他们是否内置GPS 如果他们可以输出次要视频 如果它们可以用于双重配置(一个飞行飞机而另一个控制万向节和摄像机) 使用WiFi连接到移动设备的远程控制器将充当WiFi接入点,需要加入。 1.2 OSDK简介 DJI Onboard SDK是一个开源软件库,使计算机可以通过串行接口直接与选定的DJI飞机和飞行控制器进行通信。 SDK提供对飞机遥测,飞行控制和其他飞机功能的访问,这意味着开发人员可以使用SDK将他们自己的计算设备连接到飞机上并用它来控制飞行。 SDK包括: 1、一个开源C ++库,可用于通过串行接口控制DJI飞机 - 支持Linux,ARM和STM32 2、功能齐全的ROS包装器,符合ROS标准 3、飞机模拟器和可视化工具 4、示例代码和教程 5、此开发人员指南和API文档 1.2.1与Mobile SDK比较 DJI提供Mobile SDK和Onboard SDK。 两种SDK都允许应用程序控制DJI飞机,但针对不同的计算平台和应用进行了优化。 Mobile SDK专为通过遥控器无线连接到飞机的移动设备(如Android和iOS)而设计。 Onboard SDK专为Linux计算机(和STM32)设计,并通过串行接口直接连接到飞行控制器。下表比较了两个SDK。
何时使用Onboard SDK: 您应该考虑使用Onboard SDK的原因是: 1、执行精确的轨迹 2、没有遥控器飞行(例如超出视距) 3、将第三方传感器,执行器和通信系统与飞行控制或连接到遥控器的移动应用程序集成在一起。 可以使用OSDK的一些示例是: 1、使用定制传感器检查任务 2、带定制执行器的交付任务 3、使用自定义LiDAR避免碰撞 4、实时映射和导航 5、在难以预先规划的环境中导航(动态或几何复杂) 6、在GPS拒绝的环境中飞行 1.2.2功能概述 开发人员可以通过Onboard SDK访问DJI的许多产品特性和功能。 开发人员可以自动飞行,控制摄像机和云台,并监控其他组件的状态。 I、飞行控制 DJI Onboard SDK允许多种方式来控制飞机飞行: 姿态控制:采用姿态指令进行低水平控制。 速度控制:带速度命令的低级控制。 位置控制:带位置指令的低位控制。 任务:方便,易于实现飞机的高水平控制。 例如,可以使用Waypoint任务执行定义的飞行路径。 II、相机和万向节控制 Onboard SDK允许控制相机和云台。 请注意,基于Mobile SDK的应用程序应用于完全控制相机曝光,设置和媒体。 相机:视频和静态图像捕捉 万向节:位置和速度控制模式 III、硬件同步控制 首次使用时,开发人员可以使用Onboard SDK从DJI Aircraft /飞行控制器访问和编程硬件同步数字信号。 此功能提供: 硬件脉冲信号:由飞机/ FC时钟触发的可编程脉冲,可由外部传感器或计算机消耗 软件数据包:与硬件脉冲相对应的IMU数据和时间戳,用于准确地将传感器数据与其他传感器或算法一起注册 IV、MFIO控制 Onboard SDK允许为多功能IO功能配置用户定义的引脚。 多功能IO支持:PWM写入、模数转换、GPIO。 V、飞机遥测 通过SDK可以获得高达200 Hz的丰富传感器和飞机状态数据: 惯性传感器数据:全球定位系统、RTK、罗盘、晴雨表 飞机状态数据:飞行速度、飞行高度、万向节状态、电池状态、四元数、线性加速度、角速率。 VI、立体相机 对于M210,开发人员可以从前向和下向立体相机对访问数据。 1、VGA和QVGA分辨率的前立体灰度图像 2、前立体视差图 3、QVGA分辨率的向下立体灰度图像 1.2.3与用户应用程序和飞机的连接 下图说明了DJI Onboard SDK如何适应应用程序,以及它如何连接到DJI飞机。 1.3 OSDK架构概述 DJI Onboard SDK包括一个核心库(OSDK-Core),通过它可以获得飞机数据和控制。 该库的体系结构旨在可扩展。 所有命令都与产品无关,并且在运行时可以获得产品功能信息。 这意味着,当您为M600等产品编写应用程序时,它也可能适用于具有类似功能的其他产品,例如A3。 应用程序通过DJI Onboard SDK中的主要Vehicle类访问DJI产品的功能。 Vehicle类用于管理SDK(例如SDK激活),还提供控制和接收产品状态信息的对象。 2、指南 OSDK提供的功能在我们的功能指南中有详细说明。 这些指南提供了关于DJI车辆上存在的模块的各个方面的有用信息。 这些指南还可以帮助用户了解Onboard SDK与功能集的交互。 2.1遥测指南 2.1.1简介 DJI飞机龋齿遥测系统,用于飞行期间飞行员和地面人员的安全。 来自机载飞行系统的遥测是传输给飞行员的实时测量和状态信息的主要来源。 DJI Onboard SDK提供API,以订阅或广播方式实时读取遥测数据。 数据示例包括: 1、传感器读数,如陀螺仪和磁力计 2、融合数据,如姿态和全球定位 3、飞机信息,如电池,云台和飞行状态 2.1.2广播 在数据广播机制中,数据包以预先配置的频率到达。 可以通过DJI Onboard API在您的应用程序中修改频率,也可以在飞行前通过DJI Assistant 2进行更改。 I、可获得的广播数据 广播数据到达包含下列组件的状态信息的包中:时间戳、硬件同步时间戳、四元数、角速率、速度、陀螺仪阅读、全球位置、相对位置、全球定位系统、RTK、磁力仪、遥控器、万向节、航班状态、电池。 II、可获得的广播频率:0Hz、1Hz、10Hz、50Hz、100Hz 注意:通过允许单独为每个Broadcast组件设置频率的灵活性,开发人员必须实现逻辑以阐明数据可用性。 例如,如果您指定50Hz的GPS和10Hz的陀螺仪,则来自广播的整个数据包将以50Hz进入,但陀螺仪将仅在每5个数据包中出现。 有关详细信息,请参阅DJI Onboard API。 2.1.3订阅 数据订阅是DJI Onboard SDK 3.3中引入的一种新的改进范例。 与广播一样,它提供从飞行控制器到DJI Onboard SDK的实时遥测数据传输。 除广播外,它还提供更多种类的状态信息数据集或“主题”以及灵活的频率配置。 注意:Matrice 100不支持订阅功能。 I、如何工作 您可以选择一组“主题”或订阅数据集,将它们添加到订阅包中,并将包配置为以首选频率到达。 用户可以通过DJI Onboard API配置总共五个包。 每个包可以设置为单独的频率,并具有300字节的固定大小缓冲区,允许用户根据需要为每个包添加尽可能多的遥测主题。 II、可用的订阅主题及其最大频率 每个订阅包可能包含下列组件的状态信息: 硬件同步:400Hz 四元数:200Hz 加速度:400Hz 角速率:400Hz 速度:200Hz 晴雨表海拔高度:200Hz GPS:50Hz RTK:50Hz 指南针:100Hz 遥控器:50Hz 万向节:50Hz 航班状态:50Hz 电池:50Hz 显示模式:50 Hz 起落架:50Hz 电机:50Hz 注意:广播和订阅可以互换使用。 2.2飞行控制指南 2.2.1简介 飞行控制器是一种车载计算机,它将来自飞行员的控制信息与传感器信息相结合,以调整每个螺旋桨的推力并根据需要飞行飞机。 飞行控制器负责: 1、飞行控制,电机控制,手动以及预编程飞行 2、飞机遥测辅助姿态,位置,速度和传感器数据 3、传感器子组件,如罗盘,IMU和定位系统 4、飞机子组件如起落架 5、飞行限制系统,如No Fly Zones和GEO系统 6、用于测试和调试的飞机飞行模拟 2.2.2遥测援助 飞行控制器提供高达200 Hz的详细实时状态信息,包括: 1、飞机状态,位置,速度和高度 2、剩余电池容量信息 3、传感器信息(指南针,IMU,卫星定位) 4、返回家园状态 2.2.3飞行 I、电机控制 可以通过DJI Onboard SDK中的API打开和关闭电机。 只有在飞机不飞行时才能关闭电机。 如果存在IMU或指南针校准错误,或者IMU仍在预热,则电机不会打开。 II、开始和结束飞行 飞机起飞和降落可以通过DJI Onboard SDK中的API实现自动化。 当飞机在地面上方1.2米(4英尺)处徘徊时,起飞被认为已完成。 只有在电机关闭时才能启动自动起飞。 当发送自动陆地指令时,飞机将在其当前位置下降并降落。 III、飞行控制 可以通过以下几种方式控制飞机飞行: 手动:虽然Onboard SDK用于编程飞行任务,但也可以通过遥控器进行手动控制来操纵飞行的有限功能 任务:通过Mission Manager进行简单的高级飞行自动化 飞行控制:可以使用DJI Onboard SDK API发送飞行控制命令 IV、飞行方向模式 遥控器控制杆可用于向前,向后,向左和向右移动飞机。 然而,如果飞机的方向不明显,则可能难以从飞行员的角度对地面进行可预测的控制。 有多种飞行定位模式可以让飞行更轻松: 球场锁定:飞机相对于锁定的航向移动。 Home Lock:飞机相对径向移动到Home Point。 飞机航向:飞机相对于飞机前部移动。 飞行控制概念中描述了更多细节 2.2.4地理空间环境在线(GEO) GEO系统是一流的地理空间信息系统,为无人机操作员提供信息,帮助他们明智地决定何时何地飞行。 它结合了最新的空域信息,警告和飞行限制系统,在某些条件下允许飞行的地点解锁(自我授权)无人机飞行的机制,以及这些决策的微创问责机制。 2.2.5传感器 飞行控制器管理飞机的几个子组件,包括传感器和起落架。 I、罗盘 指南针测量磁场方向,用于确定飞机相对于北方的航向。指南针必须在您首次打开飞机时进行校准,如果在磁场干扰附近飞行则必须定期进行校准。 指南针校准可以手动或以编程方式完成: 手动:要求用户通过方位角垂直和水平旋转飞机。具有多个罗盘的产品(如Phantom 4)将罗盘状态融合到一个罗盘类中以简化操作。 II、IMU - 惯性测量单元 IMU包含一个加速度计和陀螺仪,用于测量线性加速度和角速度。 IMU是一个依赖于温度的敏感系统,有时需要重新校准。预热由飞机自动完成,其状态可在飞行控制器状态数据中监控。必要时,可以通过Assistant Software启动校准。 某些产品具有多个IMU以实现冗余。 Phantom 4有两个IMU,而M600最多可容纳三个IMU。 III、RTK定位系统 DJI产品配备内置的消费者卫星定位系统,使用GPS和GLONASS卫星星座。消费级卫星定位可能有几米的位置误差。 DJI DRTK定位系统是与M600和A3飞行控制器兼容的附件,可以进行厘米级定位。 DRTK是一个实时动能卫星定位系统,使用GPS + GLONASS或GPS +北斗星座(取决于DRTK模型)。 该系统需要基站和移动台接收器,它们通过无线链路连接在一起。基站接收器部署在地面上的已知位置,而移动台部署在飞机上。基站和移动台都将同时经历类似的卫星信号错误。当基站位于已知位置时,它可以向移动台发送实时校正信息,从而为移动台相对于基站产生厘米精确的定位信息。 移动台配有两个天线,可以部署在飞机的两侧。由于两个天线的位置可以组合成航向矢量,该航向矢量通常比具有高磁场干扰的环境中的罗盘航向更精确(如近大金属结构或高压线路)。 2.2.6视觉系统和遥测协助 摄像机可用于探测障碍物并准确地确定相对位置和速度。这些摄像机通常安装在面向下的产品上,用于定位和前进以进行障碍物检测。它们与用于捕捉照片和视频的主摄像头分开。 I、避障 一些产品具有使用立体视觉来确定环境深度的成对相机。例如,Mavic Pro有一对面向飞机前部的摄像头,而Phantom 4 Professional则有两对面向前后的摄像头。该视觉系统允许飞机在其飞行路径中停在前方或绕过障碍物。 视觉系统使用户能够以更高的舒适度飞行,因为他们犯错误并影响物体的可能性较低。但是,仍然需要将系统的限制理解为安全飞行。难以检测的物体是那些体积小,非常狭窄,外观过于简单(无法提取视觉特征)的物体,不是在两个相机的视野范围内,或者距离产品太近或太远的物体(见产品页面)规格)。 II、定位 向下朝向的摄像机可以比消费者卫星定位系统更准确地帮助确定相对位置和速度。它们还可用于悬停在GPS拒绝的环境中,例如建筑物内部。 III、遥测援助 DJI Onboard SDK提供遥测协助,可以访问飞机及其传感器的状态信息。 2.2.7起落架 一些产品具有可移动的起落架,其在着陆时展开以保护相机,但是在飞行时可以升高(缩回)以不妨碍相机视图。 起落架可以通过编程或自动方式部署或收回。 当自动时,飞行控制器将确定何时展开起落架以及何时缩回起落架。 在需要快速着陆的情况下,最好以编程方式部署起落架,以使飞机不必在靠近地面的高度处暂停以触发自动过程。 运输方式: 在运输模式中,起落架将与飞机机身处于同一几何平面,因此可以轻松运输。 2.2.8飞行时间和电池阈值 飞机飞行时间由飞机总质量,飞机上可用的存储(电池)能量,飞机飞入的环境以及飞机如何飞行决定。在有重型荷载的情况下快速抵御强风将比没有风的轻型载荷时更短的飞行时间。 在飞行期间,飞行控制器和智能电池将一起工作,以根据飞行期间收集的数据估计当前航班的剩余时间。它还将提供从当前位置返回家中或立即降落所需的电池百分比的估计值。 此外,可以在DJI Assistant 2中设置两个手动电池阈值,以便在电池电量不足时自动执行飞机行为。 返回主页:阈值通常设置在25%和50%之间,如果超过阈值,将自动启动返回主页警告。如果在10秒内没有采取任何行动,那么飞机将自动返回家中。按遥控器上的Return Home按钮可以取消返回主页。 立即着陆:门槛通常设定在10%到25%之间,如果越过,将立即着陆。 2.2.9返航 飞机可以在许多情况下自动返回家中(RTH): Smart RTH:飞行员通过应用程序或遥控器发出指令 Failsafe RTH:如果遥控器和飞机之间的无线链路丢失 Low Battery RTH:如果电池电量低于足以回家的阈值,要求立即紧急着陆 当自动回家时,飞机将升至最低高度,使用GPS定位飞到家中位置(归属点),然后降落。 归位点自动设置为飞机在开机后首次起飞的位置。 注意:如果在起飞期间GPS信号不足以记录本地位置,则当GPS信号足够强时,将记录本地点。 在恶劣的卫星信号环境中起飞时,开发人员应确保设置的归属点符合用户的期望。 A 、Smart RTH 按遥控器上的Return Home按钮启动Smart RTH。 然后飞机将自动返回到最后记录的归属点。 遥控器的控制杆可用于改变飞机的位置,以避免在智能RTH过程中发生碰撞。 按住按钮一次开始此过程,再次按下按钮终止程序并重新获得对飞机的完全控制。智能RTH也可以通过DJI Mobile SDK启动和取消。 B、Failsafe RTH 如果成功记录了归属点并且罗盘正常工作,如果遥控器信号丢失超过三秒钟,则故障保护RTH将自动激活。 如果重新建立遥控器信号连接,则可以中断RTH过程并且操作员可以重新获得对飞机的控制。 在某些任务中,当信号连接丢失时,不希望立即返航。 可以使用DJI Assistant 2配置故障安全行为。 C、Low Battery RTH 当电池电压低于某个阈值(通常为25%至50%)时,飞机将不会启动任务或单次飞行。 同时遥控器将开始发出哔哔声。 可以通过按遥控器上的主页按钮或使用SDK通过应用程序发送取消命令来取消RTH过程。 D、无线链路丢失 当距离太远或障碍物阻碍链路时,遥控器和飞机之间的无线连接有时会丢失。如果链接丢失3秒,飞机将开始执行故障保护行为。 行为选项包括:自动返航(见返航)、原地徘徊、原地降落。 2.2.10坐标系 飞机运动的描述取决于构成坐标系(或参照系)的坐标轴的位置和方向。 存在许多坐标系,但DJI SDK中使用的两个坐标系相对于飞机机身(机体坐标系)和相对于地面(世界坐标系)。 I、滚动俯仰控制模式 飞机的水平移动可以设置为X / Y速度或滚动(roll)/俯仰角(pitch)。 较大的滚动角和俯仰角分别导致较大的Y和X速度。 滚动和俯仰角始终相对于水平。 滚动和俯仰方向取决于坐标系,可能会造成混淆。 为方便起见,下面给出了详细说明飞机如何根据坐标系和侧倾俯仰控制模式移动的表格。 这些都可以使用坐标系的定义来计算。
可以通过角度或速度改变偏航。 偏航设置与坐标系无关。 正偏航速度将始终顺时针旋转,偏航角始终相对于北。 III、垂直节气门控制模式: 可以使用速度或位置实现垂直移动。 位置是相对于起飞位置的高度。 速度始终相对于飞机,并且不遵循典型的坐标系惯例(正垂直速度导致飞机上升)。 2.3 GPS任务指南 2.3.1简介 任务可用于轻松实现飞行自动化。 有许多不同的任务类型可以提供不同的产品行为。 有些任务可以上传到飞机并由飞机管理,而其他任务则可以通过移动设备进行管理。 从移动设备运行的任务可以提供更复杂或可定制的行为,但是如果遥控器和飞机之间的无线链路丢失则可以中断它们。 相比之下,从飞机上运行的任务将更少可定制并受到飞机存储器的限制,但是当无线链路丢失时能够继续。 2.3.2 Waypoint任务(航点任务) 航点任务是飞机将飞往的一系列预先定义的位置(航路点)。 位置是纬度,经度和海拔高度。 航点之间的飞机航向和高度可以逐渐地或在航路点本身改变。 可以在每个航路点执行一系列动作(例如拍照)。 在任务期间,可以使用遥控器控制杆手动调整任务。 任务速度可以加速,减速甚至反向执行。 Waypoint Mission上载到飞机并由飞机执行,但受到飞行控制器中存储量的限制。 因此,每个任务只能执行99个航路点。 Custom Mission可用于在需要超过99个点的应用程序中轻松排队航点任务。 2.3.3 Hot point任务(热点任务) 在热点任务中,飞机将在称为热点(也称为兴趣点)的指定点周围反复飞行恒定半径的圆。 海拔高度、速度、热点位置、飞机航向和飞行方向都可以定义为任务的一部分。 在任务期间,也可以使用遥控器控制杆手动调整海拔高度,航向和半径。 2.4相机和万向节 2.4.1简介 相机捕捉照片和视频。 可以选择许多不同的操作模式,分辨率,帧速率,曝光设置,图像设置和文件类型。 摄像机具有本地存储器以容纳媒体,该媒体通常是SD卡,并且在一些情况下是SSD(固态驱动器)。 本指南涵盖了DJI相机提供的大量设置,模式和功能。 2.4.2支持的功能 通过DJI Onboard SDK提供的相机和云台模式和功能: 静止和动态图像捕获 静止和动态视频捕捉 万向角度和速度率设定器 摄像机一次只能在一种模式下运行。 例如,在图像捕获期间不能进行媒体下载。 对于连接双万向节的M210,默认情况下左侧万向节优先于右侧万向节。 左侧万向节插槽的摄像机OSDK支架为X4和X5,而右侧万向节插槽支撑的摄像机为XT和Z30。 如果开发人员希望同时控制两个万向节,请在DJI Go App中进行配置。 2.4.3图像质量,分辨率和帧速率 I、视频分辨率和帧速率 DJI相机通常支持1280x720(720p),1920x1080(1080p),2704x1520,3840x2160和4096x2160(4K)的视频分辨率。 分辨率将决定能够捕获的最大帧速率。 可以直接在SDK中查询分辨率和帧速率的组合,但通常选择4K分辨率会将帧速率限制为24/25 fps。 有些相机支持高达120 fps,但仅支持1080p分辨率。 II、静止图像分辨率和宽高比 DJI相机具有固定的静止图像分辨率。 在某些相机上,纵横比可以在4:3和16:9之间变化。 请记住,16:9图片只是4:3图像的裁剪版本,因为传感器的纵横比为4:3。 III、压缩 所有DJI的相机都支持静态图像和视频的压缩。 某些相机还支持未压缩(RAW)文件格式。 捕获RAW和压缩图像之间的权衡是:
对于视频,只有Zenmuse X5 RAW和X5S支持捕获原始视频。 RAW视频文件具有高数据速率和大文件大小,因此只能捕获到固态驱动器(SSD)上。 所有相机都支持压缩格式MP4(MPEG-4 AVC)和MOV(H.264)。 2.4.4镜头与焦点 大多数DJI相机都配有固定镜头,固定光圈和无限远固定焦距。然而,Zenmuse X5相机具有可变光圈,可变焦距以及在DJI和第三方选项之间交换镜头的能力。具有可变焦距的DJI相机允许手动和自动对焦。 在自动模式下,相机将从图像中的某个区域计算焦点,该区域可以通过SDK进行设置。 通过手动设置聚焦环值来实现手动聚焦。 对于某些镜头,最小对焦环值(对应于无限远对焦)在型号和单位之间略有不同。 因此,首次使用镜头时,需要进行校准: 1、将对焦模式设为自动 2、将相机对准遥远的场景 3、确保焦点目标区域指向距离> 30米的特征 4、让相机自动对焦 5、读取最小聚焦环值 此聚焦环值可以与相机的序列号相关联,以供将来参考。 2.4.5媒体存储 DJI相机通常使用SD卡存储照片和视频。 取决于是否需要高达64 GB的Class 10或UHS-1 Micro SD卡来容纳各种摄像机的视频带宽。 Zenmuse X5 RAW还具有512 GB固态硬盘(SSD)来录制视频。 4K RAW视频数据速率最高可达2.4 Gbps,而MP4或MOV则为60 Mbps。 Inspire 2(X5S和X4S)用于飞机SSD和SD存储,而不是相机存储,而所有其他相机使用位于相机本身的SD卡,或相机集成的云台。 2.4.6一般相机功能 I、快门速度 快门速度描述了相机快门将相机传感器曝光的时间。 DJI相机的快门速度通常为1/8000秒至8秒。 更快的快门速度可以捕捉场景中的移动特征,但会使传感器暴露在较少的光线下。 II、ISO ISO涉及应用于每个像素的放大量。较高的ISO会增加放大率,从而增加曝光,但也会增加图像中的噪点。较高的ISO有效地使相机对光更敏感,并且在尝试捕捉较暗的场景时非常有用。 不同的DJI相机具有不同的ISO范围。 Zenmuse X5的ISO范围为100-25600。 III、光圈 相机光圈控制传感器可以看到世界的窗口大小。增加光圈会增加入射到相机上的光量,从而增加曝光。它还会使景深变浅。较浅的景深意味着与相机不同距离的特征将更加失焦。如果尝试突出显示主体(在焦点前景,模糊背景中),这可以产生很好的效果,但如果尝试捕捉焦点的前景和背景,则可能具有挑战性。 光圈以f值或f值为单位测量,其中数字与孔径有关。孔径面积加倍,相当于将直径乘以1.414(2的平方根),并使曝光增加一档。 Phantom和Mavic系列产品上的相机具有固定光圈镜头(例如f / 2.8)。 Zenmuse X5的光圈范围为f / 1.7至f / 16。 IV、曝光补偿 在程序,光圈优先和快门优先曝光模式下,曝光补偿值会改变相机正在使用的曝光目标以计算正确的曝光,并由用户设定。这可用于捕获更暗或更亮的图像。 在手动曝光模式下,将从相机报告此值,并报告需要补偿的曝光量,以达到相机认为正确曝光的程度。 V、AE(自动曝光)测光 通过检查(计量)图像中的像素,由相机测量曝光。可以将测光设置为整个图像,或仅设置图像的一部分(中心位置或自定义位置)。这允许利用具有正确曝光的期望部分捕获具有高动态光范围的场景。 VI、AE(自动曝光)锁定 如果自动计算曝光,快门,光圈和ISO设置可能会动态变化。 AELock允许冻结曝光设置更改,而无需更改曝光模式。这可用于在移动相机之前自动设置场景中主体的曝光,以更有趣的方式构图主体(不改变曝光)。 2.4.7不支持功能 DJI Onboard SDK不支持的相机功能列表: 照片质量 曝光选项 快门速度 图片设置: 白平衡和色温 防颤 锐度 对比 色相饱和度 数字滤波器 直播视频 广播 播放管理器 媒体管理 2.5多功能IO指南 2.5.1简介 A3和N3飞行控制器的多功能IO功能支持读写PWM信号,模数转换和通用输入输出。 引入这些新特征是为了避免必须为所提到的低级功能安排附加电路或微控制器。 注意:Matrice 100不支持多功能IO功能。 I、PWM 脉冲宽度调制允许控制提供给电机设备(如电机或LED)的电源。 脉冲宽度调制允许我们以模拟方式改变信号高的时间。 A3和N3飞行控制器支持发送PWM信号。 PWM信号可写入用户定义的引脚,以控制LED的亮度,电机的速度等。 II、模数转换器 模数转换器允许将模拟信号(如电压或电流)转换为与输入成比例的数字数字。 A3和N3飞行控制器支持读取模拟信号并转换为数字数据。 III、GPIO 通用输入输出引脚是用于读写数据的数字控制线。 A3和N3飞行控制器支持配置多个引脚以实现GPIO功能。 2.5.2 Onboard SDK MFIO 下图显示了可用于MFIO功能的引脚。 引脚F1-F8(从左到右的垂直引脚)可以配置为MFIO功能。 带有红色框的针脚是电压针脚。 带有蓝色框的针脚是信号针脚。 带有灰色框的针脚是接地针脚。 F1-F4可配置为输入引脚 F5-F8可配置为输入或输出引脚 2.5.3 DJI Assistant 2 MFIO配置 在DJI Assistant 2的工具 - >功能通道选项卡中,我们可以将硬件通道映射到MFIO通道; 为此,请单击任何F3-F8并选择SDK1-SDK8。 请注意,在源代码中,我们引用从MFIO :: CHANNEL_0到MFIO :: CHANNEL_7的MFIO通道,尽管它们映射到SDK1到SDK8。 2.6 Mobile SDK通信指南 2.6.1简介 Mobile SDK允许开发人员在连接到远程控制器时,从运行iOS或Android的移动设备监视和控制UAV。 Onboard SDK允许开发人员通过串行(UART)接口从直接连接到UAV的车载计算机监视和控制UAV。 有时将Mobile SDK的灵活性与Onboard SDK的实时多功能性结合起来非常有用。 Onboard和Mobile SDK都具有允许在板载计算机和移动设备之间发送自定义数据的API。 遥控器和飞机之间现有的Lightbridge无线链路用于传输此信息。 上游(移动设备到板载计算机)带宽约为1KB / s,而下游(板载计算机到移动设备)带宽约为8KB / s 2.6.2用途 无论何时需要在地面和机载计算机之间传输信息或命令,Mobile SDK应用程序和Onboard SDK应用程序之间的数据交换都非常有用。 一些示例场景包括: 板载计算机与移动设备共享处理的第三方传感器信息 使用移动设备的操作员向车载计算机发送实时命令 在移动设备上执行高级任务计划,并且机载计算机执行低级别执行 2.6.3示例 作为演示如何实现Mobile to Onboard Communication API的一种方式,提供了一个示例,该示例允许iOS应用程序将命令发送到板载计算机,然后在飞机上执行。 2.7硬件同步指南 2.7.1简介 硬件同步是一种独特的Onboard SDK 3.3功能,使用户能够与DJI车辆/飞行控制器精确同步外部传感和计算。 硬件同步为用户提供来自硬件输出线的数字定时信号,以及为飞机/ FC的时钟参考中的数字信号加时间戳的软件包。 此外,软件包还包括时间对齐的IMU数据,用于外部融合算法。 注意:Matrice 100不支持硬件同步功能。 2.7.2为什么硬件时钟同步? 硬件同步的目标是为用户提供一种方法,使DJI飞行控制器/飞机使用的自由运行时钟与用户车载计算机或传感器上的时钟准确同步。 一个示例用例 - 开发人员可以使用DJI飞机/飞行控制器上的传感器数据准确地与接受同步线的外部传感器融合,例如摄像头。 另一个例子是将它与具有自己时钟的传感器(例如GPS)一起使用 - 您可以使用板载计算机(OC)将DJI设备时钟以及传感器时钟转换为相同的参考(OC的参考)并对齐 传感器数据。 2.7.3运作原则 在此图中可以遵循硬件同步操作的核心原则: 1、从发送设备(例如A3)生成数字脉冲,并在图中的硬件线(1)上发送。 2、同时,发送设备在其自己的参考帧中对该脉冲加时间戳。我们称之为(t0A3)。 3、发送设备在图片中的软件包(2)中发送该时间戳。 4、接收设备,例如板载计算机(OC),在其自己的参考帧中的某个时间接收线路上的脉冲。我们称之为(t0OC) 5、接收设备稍后接收软件包,由UART的等待时间,OC的调度和软件包发送的定时决定。 6、现在,由于硬件脉冲几乎以光速传播,我们可以安全地假设(t0A3)=(t0OC)。请注意,这仅对在数字输入线上具有硬件中断的OC严格有效;对于其他情况,由于调度和缓冲,您必须添加操作系统的延迟。 7、在接收设备上,我们有时间戳(t0A3)和(t0OC),我们现在可以使用此关系使用关系将任何时间(tA3)成功转换为接收设备时基中的等效时间(tOC) 2.7.4 Onboard SDK硬件同步实现 要使用硬件信号,开发人员必须先设置功能通道(F1-F8),通过DJI Assistant 2输出硬件同步信号,如下所示: 此步骤确保当我们调用触发硬件同步的API时,我们有一个通道,飞机/ FC可以通过该通道输出同步线。 将此同步线连接到OC或外部传感器。 要触发硬件同步,我们使用Hardware Sync Start API 该API采用硬件同步信号频率和标签 - 该标签将附加到与硬件脉冲相对应的每个软件包。 用户可以使用Subscription遥测技术订阅TOPIC_HARD_SYNC,以接收与硬件脉冲相对应的软件包; 传入的数据如下所示: 让我们更详细地研究一下SyncTimeStamp结构: time2p5ms:该字段以2.5ms的倍数返回时钟时间。 由于同步定时器以400Hz运行,因此该字段将以整数步进递增。 time1ns:该字段包含距离2.5ms脉冲的纳秒时间偏移。 使用下面的公式计算以纳秒为单位的时间戳。 resetTime2p5ms:该字段返回自硬件同步开始以来经过的2.5ms的时钟时间。 index:这是您在上面使用setSyncFreq API时填写的标记字段; 用它来识别具有同步数据的数据包。 当您使用freqInHz = 0调用setSyncFreq API时,这非常有用,因此您可以获得可以使用标记唯一标识的单个脉冲 - 允许您创建具有唯一可识别脉冲的自己的脉冲序列。 flag:当数据包对应硬件脉冲时为true,否则为false。 这很有用,因为您可以请求以比硬件线更高的频率发送软件包。 时间戳分为这两个字段(time2p5ms和time1ns),以保持时间戳的高分辨率。 这为我们提供了一些检查HardSyncData结构的更多上下文: ts:如上所述的SyncTimeStamp结构 q,a,w:以高分辨率加时间戳的IMU数据(a和w raw,q fused)。 因此,该传感器数据可以与高精度和高频率的外部传感器融合。 2.8高级传感 - 立体摄像机指南 2.8.1简介 DJI Matrice 210上先进的前向和后向立体视觉定位系统(VPS)为飞机提供了精确的悬停和防撞功能,即使没有卫星定位支持。 当操纵杆控制器被释放时,VPS还允许它立即制动并悬停。 如果在悬停期间受到干扰,它将跟踪飞机的运动并将其返回到其原始悬停点。 作为OSDK开发人员,您可以访问此图像数据以扩展应用程序的功能。 除了图像数据,OSDK还提供对前立体声和ROS接口的预处理视差图的访问,以便整合到ROS图像和立体视觉工作流程中。 2.8.2图像工作流程,分辨率和帧速率 与OSDK中使用串行线路与无人机通信的其他功能不同,Advanced Sensing利用USB接收原始图像数据。 请按照M210清单获取设置飞机的说明。目前此功能仅支持M210。 高级感应功能在订阅机制中有效。 用户只需要调用相应的API一次,并将回调函数传递给订阅的图像,原始图像数据将通过USB开始广播。 请注意,用户需要并且有责任在每个电源循环中取消订阅图像。 可用的图像数据包括: 前置立体声相机: VGA(640x480)分辨率的灰度图像,分辨率为10或20 fps。 QVGA(320x240)分辨率的灰度图像,20 fps。 QVGA(320x240)分辨率的视差图,速度为10 fps。 降低立体声相机: QVGA(320x240)分辨率的灰度图像,20 fps。 2.8.3元数据(Meta Data) 所有图像都带有帧索引和时间戳作为元数据。 无论无人机是否通电,QVGA图像的帧索引都会启动,无论开发人员是否订阅,都会继续。 另一方面,VGA图像的帧索引遵循用户的订阅工作流程。 如果用户订阅并取消订阅VGA图像,则帧索引将从最后订阅的图像继续。 对于时间戳,所有四个摄像机同时被触发并共享相同的计时器。 此时,定时器不与遥测数据的定时器同步。 3开发工作流程 本节提供了逐步指导,指导您完成整个开发过程。 3.1先决条件 3.1.1需要 要构建基于Onboard SDK的应用程序,需要以下内容: 1、C ++编程经验 2、第三方传感器或执行器集成可能需要嵌入式系统的经验。 3、兼容的DJI车辆/飞行控制器 4、您自己的板载计算机,带有可用的TTL UART端口。 A、对于x86平台,我们推荐可以通过飞机总线供电的小型PC B、DJI Manifold是一款出色的电脑,旨在充分发挥DJI OSDK的潜力 C、在嵌入式系统中,我们推荐使用STM32F4(以及Discovery板)。 5、用于构建SDK的软件工具。 请参阅每个平台的环境设置。 6、Windows PC / Mac运行所需的软件工具 7、iOS或Android移动设备,用于首次启动应用程序激活DJI Go(需要互联网连接) 3.1.2可选的 I、用于运行Mobile-Onboard SDK Sample应用程序的iOS设备,以及带有XCode 7的MacOS笔记本电脑,用于编译和加载此应用程序 II、对于对高级传感感兴趣的M210开发人员,需要具有USB 2.0的板载计算机。 请查看M210清单了解更多详情。 3.2硬件设置 本指南将帮助您将车载计算机与DJI飞机(M100,M600,M600 Pro)或飞行控制器(A3,N3)连接。 3.2.1常规设置 I、数据 车载计算机通过UART接口与飞行控制器或DJI飞机通信。 通常,您将使用下图中的一个设置: 请注意,M600和M600 Pro在顶盖下面有一个A3飞行控制器。 下一节将详细介绍不同DJI产品的UART规范,并举例说明如何连接板载计算。 II、电源 可以直接从DJI飞机上的电源轨获取电力。 对于Matrice 100和210,需要DC-DC稳压器将电压转换为板载计算机的电源输入。 Matrice 100:电压范围为20V - 26V,电流限制为10A Matrice 210:电压范围为18V - 26V,电流限制为2A Matrice 600:电压调节在18V,电流限制为3A 如果使用独立的飞行控制器产品,或者不仅仅在飞机开启时需要电源,则可以使用外部电池(带有适当的调节器)。 3.2.2 UART I、接口细节 A、所有兼容OSDK的DJI飞机和飞行控制器的UART电气接口均为3.3伏特TTL。 B、您必须确保您的板载计算机UART端口以相同的电压运行,以避免损坏飞行控制器。 例如,RS-232端口将需要电平转换电路。 C、UART接口不需要板载计算机供电。 II、连接器引脚 M100: A3/N3/M600 UART 连接器 III、连接到您的板载计算机 1、M100+Manifold 下图显示了M100和Manifold之间的硬件连接。 注意: 1、UART电缆随Manifold一起提供。 2、M100到PC的连接可用于运行DJI Assistant 2。 3、使用DJI Assistant,可以启用OSDK API,设置波特率和/或运行模拟器。 2、M100+PC/Linux 下图显示了M100与PC或Linux机器之间的硬件连接。 注意: 1、盒内提供M100 UART电缆,也单独出售。 2、USB到TTL线缆可以在亚马逊上购买。 3、需要在TTL端连接两根线缆,以便在M100和PC / Linux之间建立通信。 4、M100到PC连接用于运行DJI Assistant 2。 5、使用DJI Assistant,可以启用OSDK API,设置波特率和/或运行模拟器。 3、M100+STM32 下图显示了M100和STM32之间的硬件连接。 注意: 1、盒内提供M100 UART电缆,也单独出售。 2、USB到TTL线缆可以在亚马逊上购买。 3、M100 UART电缆连接到STM32上的USART3连接器。 4、USB-TTL电缆连接到STM32上的USART2连接器。 5、PC用于STM32开发。 6、在STM32示例应用程序中,用户可以在PC上发送命令并接收反馈。 3.3软件环境设置 本指南详细介绍了使用Onboard SDK所需的软件环境。 3.3.1所有平台 I、下载SDK和所需工具 1、从Github下载板载SDK存储库 2、下载适用于Windows / Mac的DJI PC Assistant 2软件 3、将DJI GO App下载到您的移动设备 II、更新固件 1、将计算机连接到M100 / 600或A3 / N3上的Micro-USB端口。 对于M210,请使用随飞机提供的USB-A至USB-A电缆。 2、使用最新发布的固件更新您的飞机/飞行控制器。 请访问兼容性列表以了解您的固件支持的SDK版本。 III、启用OSDK API 需要启用OSDK API以允许车载计算机与飞机或飞行控制器之间的通信。将您的飞机/飞行控制器连接到PC / Mac,启动DJI Assistant 2并选中SDK页面上标记为Enable API Control的复选框。 IV、onboard SDK应用程序注册 您必须在DJI注册为开发人员并创建OSDK应用程序ID和密钥对。 请访问https://developer.dji.com/register/完成注册。 V、飞行平台激活 第一次与OSDK应用程序一起使用时,必须激活每个新车辆或飞行控制器。OSDK为此激活提供API,所有OSDK示例都实现激活。 3.3.2 Ubuntu Linux I、工具链 要构建基于OSDK的独立Linux应用程序,您需要: 1、受支持的C ++编译器 - 目前只有GCC(使用gcc 4.8.1 / 5.3.1测试) 2、一个bash shell 3、CMake> = 2.8 4、一个现代的Linux发行版 5、(可选)M210上用于高级感应功能的Libu***库 II、权限 您需要将用户添加到拨出组以获取uart通信的读/写权限; 请按照以下步骤操作: 1、在终端中键入sudo usermod -a -G dialout $ USER 2、注销您的用户帐户并再次登录以使权限生效。 要确保您的Linux环境已准备好运行OSDK应用程序,请按照“示例设置”页面上的“Linux平台指南”运行示例应用程序。 3.3.3 STM32 I、工具链要求 1、Keil MDK> 5.22(armcc 5.06) 2、Windows PC运行Keil II、工具链设置 1、在示例应用程序中将USART3端口配置为230400的波特率 2、要将App二进制文件下载(闪存)到STM32板,请将PC连接到STM32的“mini-USB”端口。 3、为了让Keil为目标板构建代码,您需要使用Keil的Pack安装程序来安装最新的STM32F4xx_DFP.2.x.x包,如下所示。 4、或者,您可以从http://www.keil.com/dd2/Pack/手动下载并从Pack Installer导入下载的文件。) 要确保您的STM32环境已准备好运行OSDK应用程序,请按照“示例设置”页面上的“STM32平台指南”运行示例应用程序。 3.3.4 Linux with ROS I、软件要求: 1、通过安装build-essential安装C,C ++编译器和开发工具 2、安装CMake 2.8.3或更高版本 3、安装ROS及其依赖项 4、操作系统:Ubuntu 16.04(x86 / ARM) 5、ROS版本:ROS Kinetic II、工具链设置 如果您没有catkin工作区,请按如下所示创建一个: mkdir catkin_ws cd catkin_ws mkdir src cd src catkin_init_workspace III、权限 您需要将用户添加到拨出组以获取uart通信的读/写权限; 请按照以下步骤操作: 1、在终端中键入sudo usermod -a -G dialout $ USER 2、注销您的用户帐户并再次登录以使权限生效。 要确保您的ROS环境已准备好运行OSDK应用程序,请按照“示例设置”页面上的“ROS平台指南”运行示例应用程序。 3.4将OSDK集成到您的应用程序中 3.4.1应用结构 下图演示了通常包含在使用Onboard SDK的应用程序中的内容。 除了OSDK核心库和任何特定于应用程序的第三方库之外,该应用程序还需要包含特定于平台的线程库。 OSDK同时使用线程处理用户请求,回调和UART通信。 该应用程序在运行时链接到OSDK Core和平台线程库。 3.4.2在您的代码中包含DJI OSDK标头 SDK架构概述中的层次结构图显示Vehicle类包含对通过OSDK可用的所有组件的引用。 因此,Vehicle充当用户代码的入口点。 让我们举一个例子 - 作为Linux示例的一部分提供的mission_sample。 以下是mission_sample.hpp的片段: L17-19:包括您的应用程序需要您编写的代码 L22:DJI OSDK include。 这是您需要在应用程序中包含的唯一DJI OSDK标头。 L25:辅助函数,用于读取Linux平台上的用户配置文件,并执行无人机的激活。 如果要为Linux平台开发独立应用程序,则可以在代码中重用这些函数。 3.4.3设置依赖关系 本节假设您在Linux上使用CMake构建系统; 然而,这些步骤通常足以在概念上与不同的平台/构建系统一起重用。 L5:确保启用C ++ 11支持,并链接到其他第三方库 L8-17:告诉构建系统在哪里找到osdk-core include文件。 如果将osdk-core安装到系统,则include包含在/ usr / local / include中,因此在此示例中,您将ONBOARDSDK_SOURCE设置为该目录。 L20-27:告诉你的构建系统你自己的代码,以及要生成的可执行文件 L28:将您的可执行文件与djiosdk-core链接。 3.4.4调用OSDK API 与飞行控制器通信的每个API在OSDK中都有两个重载: I、阻止过载API(Blocking Overload API) 阻止API等待飞机返回确认。 阻塞调用将该确认以及一些元数据作为API本身的返回值传递给调用者。 大多数阻塞API返回ACK :: ErrorCode; 这允许通过ACK :: getError和ACK :: getErrorCodeMessage API查询错误。 某些阻止API具有一些其他信息,并具有特定的返回类型。 调用阻塞API并使用确认的一个示例在此处的图像中显示,来自MFIO示例。 II、非阻塞过载API(Non-blocking Overload API) 在将请求发送到飞机后,非阻塞API将立即返回,并且开发人员应该实现并向非阻塞API提供回调函数以处理来自飞机的确认。 在异步程序中使用它们 (其中对确认的处理)对于程序中主要逻辑流程的正确操作不是必不可少的。 该图显示了一个被调用的非阻塞API及其关联的回调实现,它执行与上面显示的阻塞调用完全相同的功能: 3.4.5 OSDK线程模型 在支持线程的系统(除STM32之外的所有平台)上,OSDK运行三个线程: 主线程:程序执行的主要流程在这里发生。通常,发送到飞机/ FC的所有命令都在该线程上执行。 串行读取线程:来自飞机/ FC的遥测数据在串行读取线程上处理,并在此处填充确认/返回类型。阻塞调用将阻塞主线程,直到读取线程完成处理其确认。一些回调是在这个线程上处理的 - 那些注册来自飞机的异步“推送数据”(这可以通过DJI Assistant 2的SDK页面启用)。(Some callbacks are handled on this thread - those registered for asynchronous "push data" coming from the aircraft (this can be enabled through DJI Assistant 2's SDK page).) USB读取线程:如果启用了M210上的高级感应功能,则会创建单独的线程。此功能适用于订阅机制。订阅图像后,推送数据将继续通过USB传输。该线程仅提供读取功能。如果开发人员想对图像数据进行大量计算,建议创建一个单独的线程。 回调线程:处理发送到飞机/ FC的命令的确认的所有回调都在回调线程上执行。 有些事情需要注意: 1、不要在推送数据回调中进行阻塞API调用,因为这会在读取线程上创建死锁,并且所有后续调用都将失败。 2、在ROS上,这个线程模型与ROS自己的线程池一起存在,并且两者不直接交互。 在运行应用程序之前,请参阅运行应用程序页面(3.5)。 3.5运行OSDK应用程序 3.5.1机载计算机清单 1、为您的应用程序提供DJI OSDK App ID和密钥。 在示例中,这是在激活之前解析的配置文件的形式完成的。 2、在应用程序中设置串行端口和波特率。 在示例中,这是在打开串行端口之前以解析的配置文件的形式完成的。 3、确保您有权读取和写入串行和USB端口。 请按照“环境设置指南(3.3)”中的说明进行操作。 4、对于M210,需要额外的步骤。 请查看M210车载电脑清单。 3.5.2飞机清单 1、请参阅“硬件设置指南”以检查API端口连接。 2、确保您的飞机/ FC具有超过50%的电池电量。 3、如果您使用LightBridge 2 / S-BUS,请确保您的遥控器已打开电源并配对。 如果您在没有RC的情况下使用A3 / N3,请参阅环境设置了解更多信息。 4、将Aircraft / FC的USB端口连接到运行DJI Assistant 2的计算机 5、在SDK页面上确认 A、将选中标题为“启用API控制”的框。 B、波特率与板载计算机上提供的波特率相同。 如果您必须更改此设置,请重新启动FC /飞机。 C、并非所有广播遥测都设置为“不发送”,即至少某些广播。 6、升级到您正在使用的OSDK版本正式支持的最新固件。 7、对于M210,需要额外的步骤。 请查看M210飞机清单。 3.5.3模拟核对表 1、在模拟器页面上, A、设置所需的GPS位置。 B、如果您的助手版本允许您切换电池模拟,请将其设置为OFF。 C、启动模拟器。 2、对于M210,需要额外的步骤。 请查看M210模拟清单。 3.5.4真实世界测试清单 1、请确保您遵守所选航班上有效的航班法律。 2、按照飞机用户手册中的设置说明操作,确保您的飞机完好无损。 3、在尝试实际飞行测试之前,请确保已在模拟中测试过您的应用程序。 4、对于M210,需要额外的步骤。 请查看M210真实世界航班清单。 4、示例代码 我们提供了许多样本,旨在展示各种OSDK模块的示例端到端实现。 每个示例应用程序都将实现作为独立的Linux程序,ROS节点和STM32应用程序。 4.1遥测示例 4.1.1简介 遥测样本输出来自飞机的实时传感器数据。 遥测数据可用于监视或记录目的,基于传感器数据的条件动作或用于控制循环。(Telemetry data may be used for monitoring or logging purposes,sensor data based conditional actions or in control loops.) 4.1.2目标 遥测样本的目标是向用户展示订阅机制的一些示例,其允许用户从飞机访问实时传感器数据。 该示例订阅了以下传感器数据: 飞行状态,1 Hz 融合经纬度(Lat / Lon),10Hz 融合海拔高度,10Hz RC通道频率,50 Hz 速度,50Hz 四元数,200Hz 遥测示例可在Linux和STM32上使用。 4.1.3代码工作流程 4.1.4输出 遥测样本的输出如下所示。 4.2飞行控制样本 4.2.1简介 飞行控制样本演示了使用位置控制命令向飞机发送控制命令。 该示例允许您运行两个操作: 1、起飞和着陆 2、起飞、使用位置控制飞行运动,着陆。 4.2.2目标 该示例演示了一个闭环控制器,其中使用positionAndYawCtrl API将位置命令发送到飞机。 它订阅了以下主题: 1、TOPIC_STATUS_FLIGHT,10Hz 2、TOPIC_STATUS_DISPLAYMODE为10Hz 3、TOPIC_QUATERNION在50Hz 4、TOPIC_GPS_FUSED为50 Hz 飞行控制样本可在Linux,ROS和STM32上使用。 4.2.3代码工作流程 4.2.4输出 https://developer.dji.com/cn/onboard-sdk/documentation/sample-doc/flight-control.html 4.3 GPS任务示例 4.3.1简介 GPS任务示例显示了GPS Waypoint和GPS Hotpoint Missions的示例用法。 4.3.2目标 该示例旨在显示完整GPS任务的端到端实施。 以下示例可用: 航点示例:此示例围绕当前GPS位置生成GPS航点多边形,执行起飞然后运行航点任务。 任务的某些方面(速度,航向)可通过DJI Go应用程序控制。 Hotpoint示例:此示例在您当前的GPS位置周围设置一个Hotpoint(Point of Interest)任务,执行起飞然后执行任务。 任务的许多方面(速度,航向,半径,运动方向)都可以通过DJI Go应用程序控制。 Missions示例可在Linux,ROS和STM32上使用。 4.3.3代码工作流程 https://developer.dji.com/cn/onboard-sdk/documentation/sample-doc/missions.html 4.4相机/万向节控制样品 4.4.1简介 Camera / Gimbal示例显示了可用摄像头功能的示例用法以及可用的云台功能。 有关通过OSDK提供的云台和相机的更多信息,请参阅相机/万向节指南。 4.4.2目标 该示例具有单个命令行选项,可循环显示与摄像头和云台相关的各种命令。 该示例展示了以下功能: 1、拍照 2、开始视频 3、停止视频 4、控制万向节角度 5、控制万向节速度 在开始之前,请确保将SD卡插入相机,并将相机/云台安装在飞机上或连接到飞行控制器上。 相机/万向节样本可在Linux,ROS和STM32上使用。 4.4.3代码工作流程 4.4.4输出 https://developer.dji.com/cn/onboard-sdk/documentation/sample-doc/camera-gimbal-control.html 4.5多功能IO示例 4.5.1简介 多功能I / O示例显示了飞行控制器上功能通道的示例用法,作为各种输入/输出通道。 4.5.2目标 由于通过功能通道提供的功能的性质,MFIO样本比一些其他样本更加多样化。此示例旨在显示所有输入和输出模式的配置选项。 MFIO样本还旨在显示OSDK中存在的两种不同编程范例(阻塞/非阻塞API)之间的差异。 1、PWM输出(阻塞API):此示例在预配置的功能通道上输出50Hz的PWM信号,并连续设置三个不同的占空比。连接示波器或逻辑分析仪以查看输出波形。 2、PWM输出(非阻塞API):此示例与前一个示例基本相同,但通过非阻塞API和回调执行;打算表明 3、GPIO环回(阻塞API):此示例执行环回测试 - 一个引脚配置为输出,需要从外部连接到另一个配置为输入的引脚。该示例显示了如何读取和写入数字信号。 4、GPIO环回(非阻塞API):与前一个示例相同的功能,但通过非阻塞API。 5、ADC输入(阻塞API):此示例演示如何使用飞行控制器的内部模数转换器读取连接到预配置外部引脚的模拟信号。 6、ADC输入(非阻塞API):与前一个示例相同的功能,但通过非阻塞API。 4.5.3代码工作流程 此流程图显示了提示中可用的一些选项。 请阅读源代码以查看您需要在DJI Asssitant 2中执行的端口配置; 另请注意,您需要使用示波器(或逻辑/波形分析仪)和函数发生器来尝试此处的所有样本。 4.5.4设置和输出 I、PWM输出 以下是示波器上PWM输出的示例(占空比为70%): II、GPIO换回 1、建立(setup) 2、输出 4.6 Mobile SDK通信示例 注意:自OSDK 3.7起,我们已弃用MobileCommunication类,并建议您升级到MobileDevice类。 OSDK3.7中的示例代码现在显示了这两个类的用法。 4.6.1简介 此示例显示如何在移动设备上的基于DJI Mobile SDK的应用程序与基于DJI Onboard SDK的计算机应用程序之间发送自定义数据。 数据通过遥控器和飞机之间的Lightbridge无线通信链路发送。 具体而言,该示例将命令从移动设备发送到车载计算机,并且车载计算机将确认发送回移动设备。 下面是此数据流的示例。 虽然这样一个简单的例子不会用在最终的应用程序中(Mobile SDK可以直接将起飞命令发送到飞机),但在开发和测试基于Onboard SDK的应用程序时非常有用。 当飞机飞行时,样本可以重新用于开发者通过移动设备与车载计算机交互。 状态信息可以传回给开发者,并且开发者可以使用修改的样本向飞行器发送不同的动作,这可以启动正在开发的动作或复杂的动作。 4.6.2 iOS Mobile Onboard SDK应用程序 (省略) 4.6.3代码工作流程 4.6.4功能支持 I、Linux 支持的命令是:获得控制权、释放控制、臂、撤防(Obtain Control、Release Control、Arm、Disarm) 返回的ACK将显示在移动应用程序上。 II、ROS 支持的命令:获得控制权、释放控制、起飞、降落、获取SDK版本、臂、撤防、返航、位置控制演示、Waypoint Mission演示、Hotpoint Mission演示(Obtain Control、Release Control、Take Off、Land、Get SDK Version、Arm、Disarm、Go Home、Position Control Demo、Waypoint Mission Demo、Hotpoint Mission Demo)。 返回的ACK将显示在移动应用程序上。 III、STM32 支持的命令是:获得控制权、释放控制、臂、撤防。 返回的ACK将显示在移动应用程序上。 4.7高级传感 - 立体图像样本 4.7.1简介 Advanced Sensing - Stereo Image示例演示了如何订阅和取消订阅图像以及提供自定义回调函数来显示它们。 此示例的CMakeLists将检测开发人员是否在其系统中安装了OpenCV。 如果是这样,示例回调函数将显示图像。 对于ROS开发人员,使用ROS服务订阅图像,使用image_view显示它们。 要构建样本,请按照样本设置中的步骤使用Advanced Sensing支持进行构建。 4.7.2工作流程 这里提供了两个样本用于不同的用例。 在两个示例中,主线程创建一个带有一个额外参数的车辆对象以启用此功能,并根据用户的输入调用API来订阅图像。 Advanced Sensing功能有一个专用的读取线程,用于接收来自飞机的图像数据,开发人员将能够通过传递回调函数来访问这些数据。 如果开发人员想对图像数据执行大量计算,建议创建一个单独的处理线程以避免干扰读取线程。 I、样本#1在同一线程上读取和处理图像 在此示例中,一个线程被实例化以从USB读取图像数据,并且一个回调函数被注册到订阅API。 只要从读取线程接收到图像数据,就会调用此回调函数。 根据所订购图像的数量和分辨率以及频率,USB读取可能占用大部分带宽,并且几乎没有时间进行处理。 请查看下表中的基准测试结果,如果遇到丢帧问题,请参阅示例#2。 II、样本#2图像读取和处理不同的线程 在第二个示例中,实例化两个线程以读取和处理图像。 提供了一个ImageProcessContainer类,用于在读取线程上存储图像并在处理线程上处理它们。 为这两个目的注册了两个回调函数。 如下所示,只要数据从USB传输到板载计算机,就会调用图像回调,并且每当复制图像数据时都会调用处理回调。 这个额外的线程为处理图像提供了更多的带宽。 4.7.3输出 如下所示,车载计算机连接到运行此样本的M210。 来自前向和后向立体相机对的立体图像以QFGA分辨率(240p)以20fps收集。 https://developer.dji.com/cn/onboard-sdk/documentation/sample-doc/advanced-sensing-stereo-images.html 附录。 Libu***阅读时间的基准结果 根据所订阅图像的分辨率和频率,数据流可能从1.5 MB / s到12 MB / s不等。 本节介绍了开发人员在不同计算平台上以20 fps(12 MB / s)订阅前VGA图像时libu***读取时间的基准测试结果。 开发人员可以使用此表来确定其应用程序是否需要多个线程。 例如,在DJI Manifold上以20 fps订阅前VGA图像的开发人员大约需要15.31 ms(50-34.69)来处理图像,而不会在单线程框架中删除帧。 4.8高级传感 - 相机流示例 4.8.1简介 高级感应 - 摄像机流示例演示如何使用onboard SDK的摄像机流API访问FPV摄像机和主万向摄像机(Zenmuse X4S,Zenmuse X5S)的图像帧。 要构建样本,请按照样本设置中的步骤使用Advanced Sensing支持进行构建。 这里提供了两个样本,以演示访问和处理摄像机图像的不同方式。 4.8.2示例 I、示例#1:轮询和查看主循环中的图像 该示例的源代码位于onboardsdk / samples / linux / advanced-sensing / camera_stream_poll_sample / camera-stream-poll-sample.cpp中。 构建onboardsdk后,可以从build文件夹中使用以下命令运行示例。 bin/camera-stream-poll-sample UserConfig.txt 示例将要求您选择要查看的摄像机图像(FPV摄像机,主摄像机或两者)。 请注意,您需要打开RC才能连接到主摄像头。 示例代码非常简单。 在设置OSDK环境并获得指向车辆的指针后,就像所有Linux样本一样,它需要以下步骤来访问摄像机图像(例如以FPV摄像机为例) 1、使用空输入参数调用vehicle-> advancedSensing-> startFPVCameraStream()。 OSDK将启动一个线程来读取原始压缩数据和相机并解码为图像帧。 2、在主循环中,调用vehicle-> advancedSensing-> newFPVCameraImageIsReady()来检查新帧是否可用。 如果是这样,请调用vehicle-> advancedSensing-> getFPVCameraImage(fpvImage)以获取变量fpvImage中的图像副本。如果安装了OpenCV,辅助函数show_rgb将调用cv :: imshow()来显示图像。 3、在退出程序之前,请调用vehicle-> advancedSensing-> stopFPVCameraStream()以断开与摄像机的连接并停止摄像机读取线程。 II、示例#2:使用回调函数访问图像 该示例的源代码位于onboardsdk / samples / linux / advanced-sensing / camera_stream_poll_sample / camera-stream-callback-sample.cpp中。 构建onboardsdk后,可以从build文件夹中使用以下命令运行示例。 bin/camera-stream-callback-sample UserConfig.txt 在此示例中,访问摄像机图像只需两步(例如,以FPV摄像机为例)。 1、调用vehicle-> advancedSensing-> startFPVCameraStream(&show_rgb,NULL)。 请注意,与示例#1不同,我们将回调函数show_rgb传递给函数。 然后除了摄像头读取线程之外,OSDK还将创建另一个回调线程,这样每当新的图像帧准备就绪时,将在该回调线程中自动调用回调函数,以进行处理。 2、在退出程序之前,请调用vehicle-> advancedSensing-> stopFPVCameraStream()以断开与摄像机的连接并停止摄像机读取线程和回调线程。 请注意,在此示例中,您既可以查看FPV摄像机图像,也可以查看主摄像机图像,但不能同时查看两者。 这是因为FPV摄像机和主摄像机的回调函数在其独立的回调线程中运行,而OpenCV的imshow不能在不同的线程中运行。 如果在您的程序中,回调函数执行其他类型的处理或使用其他多线程友元库来查看图像,则可以启动具有不同回调函数的两个摄像头。 5、立即启动 开发人员可以按照运行示例应用程序的步骤立即开始。本文档将指导您完成一系列快速查看DJI Onboard SDK的步骤。 5.1注册成为DJI开发者 按照此处的步骤注册为DJI Onboard SDK开发人员,并生成应用程序ID和密钥。 5.2建立 在本教程中,您将需要: 1、兼容的DJI车辆/飞行控制器 2、Ubuntu 16.04 PC(虚拟机也能正常工作)充当您的板载计算机 3、用于运行DJI Assistant 2的Windows / Mac机器,用于模拟。 I、硬件设置 按照硬件安装指南中的步骤将DJI设备连接到Ubuntu PC。 II、软件设置 导航到Linux软件设置页面以准备好您的软件环境。 5.3构建Flight Control Linux示例 在本教程中,我们将在模拟模式下使用车辆/飞行控制器运行位置控制linux示例应用程序。 1、根据Linux软件设置指南,确保您的计算机上安装了cmake构建系统。 2、在onboardsdk根目录中,运行以下命令来构建示例应用程序: mkdir build && cd build cmake .. make djiosdk-linux-samples cd bin 5.4运行示例应用程序 您现在可以运行示例应用程序了! 在运行应用程序之前,这是一个清单: 1、您已输入sudo usermod -a -G dialout $ USER命令,然后注销并重新登录到您的帐户 2、车辆/飞行控制器处于模拟模式,通过USB电缆连接到运行DJI Assistant 2的计算机 3、在DJI Assistant 2的SDK页面上检查启用API控制 4、数据在SDK页面上广播的频率并非全为零 5、DJI Assistant 2上的波特率与UserConfig.txt文件中的波特率相匹配 6、已在UserConfig.txt文件中输入应用程序ID和密钥 7、您的硬件设置与硬件设置指南中的设置相匹配 如果完成所有这些操作,请继续在build / bin目录中输入下一组命令: ./djiosdk-flightcontrol-sample ../../sample/linux/common/UserConfig.txt 您现在应该看到您的终端显示如下内容: 按b键运行起飞+位置控制采样+着陆循环。 您应该看到无人机在模拟中执行这些操作。 你完成了! 要了解如何编写这样的应用程序,请继续查看参考部分。 5.5故障排除 1、问题:示例应用程序不显示交互式提示,而是: I、It shows a number of errors(它显示了许多错误) II、It hangs(它挂了) III、It says Drone version not obtained!(它说未获得无人机版本!) IV、It looks something like this: 答:这通常是由连接问题或波特率问题引起的。 请调查您的硬件连接,波特率和端口名称。 如果它仍然不起作用,请提出Github问题。 2、问:样本说激活失败了! 并且不继续。 答:请确保您打开DJI Go并将移动设备连接到互联网,并在UserConfig.txt文件中使用正确的应用程序ID和密钥。 尝试几次,如果它不起作用,引发一个Github问题。 3、问:无人机实际上并没有进行模拟,即使样本表明它正常工作。 答:确保LightBridge 2 RC已打开电源并且电池中有足够的电量。 关闭模拟窗口并再次打开它(不要点击“停止模拟”按钮)以消除可视化问题的可能性。 如果这些步骤不起作用,请提出Github问题。 6、API参考 有关OSDK API的详细参考信息,请参阅API参考部分。 |
||||||||||
|
||||||||||
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1105 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1128 浏览 1 评论
558 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
420 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1011 浏览 2 评论
1604浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
270浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
283浏览 3评论
256浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
245浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-18 21:18 , Processed in 0.713713 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号