大疆无人机二次开发教程:基于Mobile SDK与UX SDK
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 无人机二次开发方案

当遇到某些行业中需要创新性地使用无人机时,从头开始独立开发一款专用的无人机显然费时费力。幸运的是,当前现存的许多无人机均支持二次开发,采用二次开发的方法为无人机增添新功能常常为无人机开发者的最佳选择。由于飞行控制器为无人机的核心部件,是整个无人机系统的“控制指挥中心”,事实上无人机二次开发就是对飞行控制器进行功能扩展。本书中所指的无人机二次开发是建立在现有的飞行控制器系统之上的,针对特定的应用场景进行功能的修改与扩展,以满足在相应场景下的个性化的需求。

由于不同飞行控制器的设计理念与架构的不同,针对不同的飞行控制器,其二次开发的技术实现与流程是不一样的。在当前主流的飞行控制器中,包括开源飞行控制器和商业飞行控制器两大类。对于开源的飞行控制器而言,其源代码和硬件结构都是透明的,更加适合复杂、具有较大深度的二次开发;而对于商业飞行控制器而言,其二次开发需要使用官方所提供的软件开发工具包(SDK)或应用程序接口(API),其开发的难度较低,但其扩展性也相应限制在SDK(或API)所提供的功能之内。常见的开源飞行控制器包括APM、Pixhawk等。常见的商业飞行控制器包括大疆工业级飞控N3、A2、A3、大疆入门级飞控哪吒(Naza)系列和悟空(WOOKONG)系列、零度的S4、X4、双子星和北极星等。

本节将首先简要介绍开源飞行控制器,以及其二次开发方案,随后对大疆无人机及其二次开发体系进行介绍,并最后比较两者之间的差异和特点。

1.3.1 APM与Pixhawk飞行控制器

APM和Pixhawk飞行控制器几乎占领了整个开源飞行控制器市场。从历史上看,APM飞行控制器是Pixhawk飞行控制器的前身,而Pixhawk正在代替APM成为开源市场上的佼佼者。

1. APM飞行控制器

APM飞行控制器全称为ArduPilot Mega,其中的“Ardu”代表Arduino,是一种广为流行的开源电子开发板,而Arduino Mega是Arduino的一个版本。“Pilot”表示驾驶员,因此ArduPilot Mega即表示在Arduino Mega的基础上增加自动驾驶功能的开发板。事实上,APM硬件就是在Arduino硬件上增加了惯性测量单元,以及加入了用于连接遥控接收器、GPS、空速管等各种设备的接口,从而具备了飞行控制器的功能。

APM飞行控制器是开源飞行控制器历史上第一个非常完整的飞控方案,其功能强大,扩展性强,不仅仅可以对直升机、多旋翼、固定翼等各种形式的无人机进行自动化控制,甚至可以延伸对无人机驾驶车、无人驾驶船与水下无人机进行控制,其功能包括了定高悬停、定点悬停、自主起降、自主航线、自动返航等多种高级的智能飞行模式,如图1-2所示为APM和Pixhawk飞行控制器。

图1-2 APM和Pixhawk飞行控制器

APM飞行控制器起源于Chris Anderson在2007年创建的DIY Drones社区(DIYDrones.com),该社区创立后吸引了大量的无人机专业人士与爱好者。因此,APM飞行控制器可被认为是基于网络社区发展起来的开源硬件。随后Chris Anderson创立了3D Robotics公司(3dr.com),专门对无人机系统进行研发。在2009年,美国人Jordi Munoz和3D Robotics共同推出了第一台无人机自驾仪ArduPilot Board,成为APM飞行控制器的雏形。之后的几年是APM飞行控制器迅速发展的时期,3D Robotics公司分别在2010年、2011年和2012年发布了APM1、APM2和APM2.5/2.6自动驾驶仪。时至今日,3D Robotics公司仍然占据着美国民用无人机一部分市场。

APM飞行控制器具有非常成熟的硬件和软件生态:其附属硬件(如GPS、空速管等)非常稳定且价格便宜,其地面站软件Mission Planner(见图1-3)、APM Planner 2等也可通过数传硬件实时传输飞行状态和任务数据。但是,APM飞行控制器具有一个重大缺陷,那就是它的主控芯片(MCU)仅为8位处理器,在运算速度上存在“硬伤”,已经难以应付如今的多轴无人机。在四旋翼无人机中,APM飞行控制器的主控处理器几乎已经是满负荷运转了。当使用APM飞行控制器作为六旋翼无人机的飞行控制器时,特别是还需要APM飞行控制器控制云台相机、连接数传并进行数据记录时,APM飞行控制器将无法对控制链路的指令做出快速响应,这对于正处于危险环境的无人机来说很可能带来灾难。

图1-3 地面站软件Mission Planner

不过,APM飞行控制器作为稳定、廉价的无人机飞控解决方案,对于简单的固定翼无人机和四旋翼无人机来说已经足够了。因此,目前仍然有许多的无人机爱好者使用APM,并研读学习APM中的开源飞行控制器代码。

2. Pixhawk飞行控制器

在面对APM飞行控制器出现了计算能力不足的困境时,Pixhawk飞行控制器就此诞生。Pixhawk飞行控制器是由PX4开源项目设计,并由3D Robotics公司首先制造并生产的高端自动驾驶仪,基本完全兼容APM的所有固件。因此,APM飞行控制器的所有功能在Pixhawk飞行控制器上均可以实现,如图1-4所示。除此之外,Pixhawk飞行控制器将APM飞行控制器的8位处理器升级为32位的ARM处理器,并搭载了Nuttx实时操作系统,在无人机控制方面具有更加强劲的性能、灵活性和可靠性。目前,Pixhawk飞行控制器属于独立的开源硬件项目,其目的是为科研、学习和工业等提供低价格、高实用性的飞行控制硬件。

图1-4 Pixhawk飞行控制器

Pixhawk硬件可以使用APM和PX4两类固件。APM固件就是原生于APM硬件,后来被移植在Pixhawk硬件的固件,也被称为APM for Pixhawk。PX4固件是Pixhawk的原生固件,其架构更加复杂,但是可扩展性更强。另外,APM开源固件采用GPLv3许可协议分发,因此其代码在修改后无法闭源商业化,但是PX4固件采用BSD 3许可协议分发,其修改后的固件不仅可以闭源,也可以商业化使用。

❀ Pixhawk硬件包括Pixhawk 1~4若干版本,并很快推出Pixhawk 5。Pixhawk 4与PX4不是同一个概念,前者为硬件,后者为软件。

1.3.2 开源无人机二次开发体系

在介绍开源无人机二次开发体系之前,首先要掌握一些开源无人机生态系统中非常重要的协议和软件。事实上,Pixhawk硬件并不孤单,它具有完整的软件生态链,共同组成无人机系统的各个组成部分,而这个开源无人机生态系统就是Dronecode基金会项目(dronecode.org)。本节将在介绍Dronecode的基础上,介绍几种开源无人机二次开发的主要方法。

1. Dronecode

Dronecode是由Linux Foundation所主导的无人机开源项目基金会。除Pixhawk硬件和PX4软件本身外,Dronecode还资助了MAVLink、QGroundControl和MAVSDK等项目。

❀ Dronecode的官方网站为https://www.dronecode.org/

1)MAVLink与MAVSDK

MAVLink(Micro Air Vehicle Communication Protocol)是无人机与地面站之间的一种轻量级的链路通信协议。通过MAVLink协议,即可通过一系列的方法获取无人机的状态信息,并向飞行控制器上传任务。因此,MAVLink协议可算是Dronecode的核心技术。Dronecode还为MAVLink提供了针对于C++、Python、Java、Objective-C等多种语言的软件开发工具包(SDK),即MAVSDK。MAVSDK是由Auterion创业公司在2019年首次推出的。

除MAVLink外,Dronecode正在研发新一代的链路协议RTPS,其扩展性将比MAVLink更加强大。

2)QGroundControl

QGroundControl(QGC)是在Apache 2.0和GPL 3协议下分发的开源无人机地面站(Ground Control Station)系统,可以运行在Windows、Mac OS和Linux桌面操作系统,以及Android和iOS移动操作系统上。QGC通过MAVLink协议对APM或者Pixhawk飞行控制器发送控制指令,并回传状态信息。QGC的用户界面基于Qt QML构建,美观且实用,如图1-5所示。

图1-5 QGC的用户界面

2. 开源无人机的二次开发

由于开源无人机系统的整个软硬件非常透明,任何人都可以探索和学习整个Dronecode资助项目的所有代码,因此开源无人机系统的二次开发可以通过以下几个途径入手。

1)针对PX4固件开发

如果用户需求需要在无人机上搭载复杂且需要自动化控制的设备载荷,或者需要实时执行某些特殊的算法,可以直接修改或扩展PX4或APM固件,从而满足此类需求。PX4固件包括实时操作系统、中间件和控制层三个层次。一般来说,如果无人机需要新增自动化的载荷设备,则需要在中间件层入手开发;如果无人机仅需要从控制或者算法层面扩展功能,可直接在控制层着手开发。

2)针对MAVLink协议开发

MAVSDK提供了较为完整的MAVLink协议的控制功能。如果开发者希望针对特殊用途的无人机开发独立的地面站,则最好的方法就是使用MAVSDK构建应用程序。

3)扩展QGroundStation

当用户需求仅需要在软件层面上稍许扩展功能,则可直接在QGroundStation上进行代码的修改和扩展。这种方式可以最低的成本快速解决问题。

总之,开源无人机的二次开发方法非常灵活。但是,由于这些开源资料本身就非常有限,中文资料更是少之又少,因此对开源无人机进行二次开发的难度较大。特别是开源无人机常常需要自行装配和调参,面对冷冰冰的硬件和大量的开源代码,需要开发者具备较强的阅读和组织代码的能力,也需要开发者较为全面地掌握无人机的原理知识。

❀ 除Dronecode软件生态系统外,开源世界中还存在OpenPilot、Crazepony等小众的开源飞行控制平台,读者也可基于这些无人机平台进行二次开发。

1.3.3 大疆无人机

大疆为市场提供了多种适合于不同场景、不同行业的成熟的民用无人机解决方案。虽然大疆也向市场出售自主研发的飞行控制器,如哪吒(Naza)、悟空(WOOKONG)等系列。但是绝大多数情况下,我们购买的一台大疆无人机再加上我们的手机等移动设备,就已经构成了完整的无人机系统。因此本节不介绍大疆飞行控制器,而是列出了大疆无人机的主要产品系列,常见的大疆无人机系列如图1-6所示。

图1-6 常见的大疆无人机系列

1. 精灵(Phantom)系列

精灵系列无人机是大疆最早推出的无人机系列,也见证了大疆在无人机行业的崛起和成功。2015年,大疆创新发布了精灵3无人机,将无人机系统的各个部件,尤其是云台和相机融为一体,将无人机的易用性提高了一个层次,大大降低了航拍成本。精灵系列从其第一代开始,其外观几乎没有太大的变化,其中具有最具有明显变化的一代就是精灵4,至今仍然是准专业级别航拍无人机的领头羊。

2. 御(Mavic)系列

御系列无人机主打轻量化,创新性地运用了折叠机臂,便于收纳。特别是当飞手需要跋山涉岭到达目的地后使用无人机时,御系列无人机可以轻便地被放在小包中随身携带,而且御系列无人机的相机镜头并不逊色,御2专业版使用了哈苏相机,御2变焦版使用了光学变焦镜头,可分别用于普通的航拍场景。

3. 悟(Inspire)系列

悟系列无人机属于专业级航拍无人机,多用于对影像质量要求较高的领域,如电影制作、遥感航测等。悟系列无人机可更换云台相机,如常规镜头禅思(Zenmuse)X7、X5S等,可变焦镜头相机禅思Z3、Z30等、热红外相机禅思XT、XT 2、XTS,以及第三方定制相机(如禅思Z15-A7、Z15-5D III)等。

4. 经纬(Matrice)系列

经纬系列无人机平台为高可靠性、高可扩展性无人机平台,多用于科研和行业应用,包括M200系列、M300 RTK、M600 Pro等。经纬系列无人机平台不包含云台相机,可与禅思、如影系列云台相机配合使用。M600 Pro为六旋翼无人机,并配备三套飞行控制器,高可靠性的同时最大提供6.0kg的有效负载。M200、M300 RTK系列无人机可放置多个云台相机。M300 RTK提供了惊人的55min的续航和15km的图传距离,配备H20系列相机可同时兼备变焦相机、广角相机、激光测距仪和热成像相机的功能。另外,经纬系列无人机非常适合硬件扩展和行业应用,可同时支持大疆SDK中的Mobile SDK、Onboard SDK和Payload SDK(详见下一节内容)。

上述大疆无人机系列中,除经纬系列以外均属于消费级无人机。另外,大疆还推出了一些不成体系或具有特殊用途的无人机:消费级无人机晓(Spark);教育无人机RoboMaster TT;植保无人机T20、T16等;航测无人机精灵4 RTK;精灵4多光谱无人机;可以安装探照灯、热成像传感器的御2行业版无人机;专业航拍的筋斗云无人机等。

1.3.4 大疆无人机二次开发体系

在精灵3系列无人机发布之后,大疆公司逐步地开放了用于控制无人机飞行和获取飞行状态的软件开发工具包——大疆SDK。

大疆SDK主要包含Mobile SDK、UX SDK、Onboard SDK、Payload SDK、Windows SDK、Guidance SDK(已弃用)等,如图1-7所示为大疆SDK中的5个重要组成。

图1-7 大疆SDK中的5个重要组成

1. Mobile SDK(MSDK)

Mobile SDK可以开发运行在Android或者iOS操作系统上用于监测和控制无人机飞行、优化飞行业务流程的独立应用程序。Mobile SDK几乎支持精灵3系列及其之后发布的所有大疆无人机。

2. UX SDK

UX SDK为Android或iOS应用程序开发者提供各种用于监控无人机的UI元件。UX SDK通常与Mobile SDK配合使用,利用UX SDK布设无人机的基本常用功能,利用Mobile SDK实现独特的业务流程。UX SDK与Mobile SDK一样,几乎支持精灵3系列及其之后发布的所有大疆无人机。

3. Onboard SDK(OSDK)

Onboard SDK是在飞行控制器或机载计算器层面上用于监测和控制无人机飞行、优化飞行业务流程的独立应用程序。通过Onboard SDK可以实现自动化控制、通过监听自定义负载的状态实时自动控制飞行、视觉感知与导航、非预知环境的自主飞行、同步定位与建图(SLAM)等。Onboard SDK与Mobile SDK对无人机的监控功能都非常全面,其最主要的区别在于:Mobile SDK应用程序运行在移动终端,更加适合开发需要人机交互的应用;Onboard SDK应用程序运行在空中端,更加适合开发自动化能力较强的或需要负载硬件扩展的应用中。另外,Onboard SDK可以实现与Mobile SDK进行通信,配合使用。

Onboard SDK支持M300 RTK、M210等经纬系列无人机,A3、N3等飞行控制器,Manifold 2等高性能机载计算机,以及STM32等第三方计算平台;支持Linux、ROS(Robot Operating System)和FreeRTOS等操作系统。

4. Payload SDK(PSDK)

Payload SDK可通过标准接口(SkyPort、SkyPort V2)或标准云台(X-Port)连接各种外部负载,从而实现使这些负载与飞行控制器、图传等模块连接并相互传递数据信息。这些负载可以是各类相机(多目相机、星光相机等)、机载监测设备(气体监测仪、辐射监测仪、水质监测仪等)、激光雷达等。另外,Payload SDK可以实现与Mobile SDK、Onboard SDK、Windows进行通信,将负载状态信息传递给移动终端、PC段或机载计算平台,也可以通过接口执行负载动作。

Onboard SDK支持M300 RTK、M210等经纬系列无人机,支持Linux、RTOS,以及支持UART或CAN接口的其他嵌入式系统。

5. Windows SDK(WSDK)

与Mobile SDK类似,Windows SDK可以开发运行在Windows操作系统的专用于监测和控制无人机的独立应用程序,但目前仅支持御2、御2行业版、御Air、精灵4 Pro V2等少数无人机平台。

6. Guidance SDK

Guidance SDK用于开发视觉导航与视觉分析应用。但由于Guidance视觉传导导航系统硬件已经停止研发,因此Guidance SDK已被官方弃用,并停止支持。

1.3.5 开源与大疆无人机二次开发方案的比较

开源无人机二次开发方案与大疆无人机二次开发方案各有优势。开源方案通常需要开发者具备更高的开发能力和无人机知识;使用大疆二次开发方案则更为简单、高效,并且保持了较强的可扩展性。利用大疆SDK和MAVSDK进行无人机二次开发的对比如表1-4所示。

表1-4 利用大疆SDK与MAVSDK进行无人机二次开发的对比