[AC]技术贴:开源飞控那些事
原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接:https://blog.csdn.net/humanking7/article/details/85335364
文章目录
1 如何定义开源
2 开源飞控又是何物
3 开源飞控的发展
4 你不该错过的开源飞控一览
4.1. Arduino飞控
4.2. APM飞控
4.3. PX4和PIXHawk
4.4. OpenPilot与Taulabs
4.5. MultiWiiCopter(MWC)
4.6. KKMultiCopter
4.7. Paparazzi(PPZ)
4.8. Autoquad飞控和ESC32电调
5 不可不知的MEMS传感器
5.1. 为什么用MEMS
5.2. MPU6000
5.3. MS5611
5.4. HMC5883
5.5. L3GD20
5.6. LSM303D
6 软件如何控制硬件
6.1. 捷联式惯导系统
6.2. Kalman滤波算法
6.3. 飞行控制PID算法
这篇文章从论坛发表的时间看是2015年,已经是3年前的情况了!
相见恨晚啊,此文弥补了在下知识层面上的漏洞,更加开阔了视野。
现在反思自己真是有点井底之蛙了,认真看了看原文,不敢藏私,把格式重排了一下,与诸位分享,也希望读者看到好的开源飞控文章,评论私信给我,谢谢。
原文:《技术贴:开源飞控那些事》
原文发表时间:2015-9-6 15:59
李大伟 北京航空航天大学无人驾驶飞行器设计研究所
副教授
杨炯 北京航空航天大学无人驾驶飞行器设计研究所
工程师
在纷繁复杂的无人机产品中,四旋翼飞行器以其结构简单、使用方便、成本低廉等优势,最先进入了大众的视线。但是,这种飞行器对飞行控制能力的要求是最高的,因此它刺激了大批基于MEMS传感器的开源飞控的出现。
1 如何定义开源
开源(Open Source) 的概念最早被应用于开源软件,开放源代码促进会(Open Source Initiative) 用其描述那些源码可以被公众使用的软件,并且此软件的使用、修改和发行也不受许可证的限制。每一个开源项目均拥有自己的论坛,由团队或个人进行管理,论坛定期发布开源代码,而对此感兴趣的程序员都可以下载这些代码,并对其进行修改,然后上传自己的成果,管理者从众多的修改中选择合适的代码改进程序并再次发布新版本。如此循环,形成“共同开发、共同分享”的良性循环。
开源软件的发展逐渐与硬件相结合,产生了开源硬件。开源硬件的原则声明和定义是开源硬件协会(Open Source HardWare Association,OSHWA) 的委员会及其工作组,以及其他更多的人员共同完成的。硬件与软件不同之处是实物资源应该始终致力于创造实物商品。因此,生产在开源硬件(OSHW)许可下的品目(产品)的人和公司有义务明确该产品没有在原设计者核准前被生产,销售和授权,并且没有使用任何原设计者拥有的商标。硬件设计的源代码的特定格式可以被其他人获取,以方便对其进行修改。在实现技术自由的同时,开源硬件提供知识共享并鼓励硬件设计开放交流贸易。
开源硬件(OSHW) 定义1.0是在软件开源定义基础上定义的。该定义是由Bruce Perens和Debian的开发者作为Debian自由软件方针而创建的。开源硬件必须符合以下条件:
第一,文档同时发布。硬件必须与包含设计文件的文档同时发布,并且必须允许对于设计文件的修改和分发。文档必须包含设计文件,不允许故意在设计文件中进行模糊描述。不允许使用中间格式,或生产用文件替代设计文件。许可可要求开放格式的全文设计文件。
第二,许可范围。硬件文档中,如果硬件设计不是全部在许可条件下发布,必须明确说明设计的哪些部分在范围之内。
第三,必要的软件。如果被许可的设计需要软件、固件或者其他硬件设计完成其重要功能所需要的条件时,许可可要求以下任意一条件得到满足:
A.设计与其之间的接口需要补充充足的文档。这样可通过文档简单地编写开源的、完成其重要功能所需的软件。
B.必要的软件需在OSI推荐的开源许可下进行发布。
第四,衍生品。许可应允许修改版本和衍生品,并且允许它们在与原始品同样的许可条款下进行分发。许可应允许制造、销售、分发、使用利用设计文件生产的产品,并允许设计文件本身和其衍生品。
第五,自由再分发。许可应不限制任何团体销售或者发放工程文档。许可不得对此种销售收取使用费或者其他费用。许可不得对衍生品的销售收取使用费或者其他费用。
第六,归属权。许可可要求在分发设计文件,生产产品或其衍生品时,衍生文档和设备相关的版权声明中提供原许可者归属权。许可可要求正常使用设备的最终用户能够获得该归属权信息,但不可以要求特定的显示格式。许可可以要求衍生品包含一个与原始设计不同的名字或者版本号。
第七,禁止对个人和组织的歧视。许可禁止对个人和组织进行差别待遇。
第八,禁止对应用领域的歧视。许可禁止限制任何人在特定应用领域使用设计(包括成品)。比如,许可禁止限制在商业或者核研究中使用该硬件。
第九,许可的分发。许可赋予的权利必须应用于所有设计及衍生品再分发的对象,并且该过程无需这些团体执行额外的许可。
第十,许可不可以限制特定产品。许可赋予的权利不得取决于在特定产品中被许可的设计。如果设计的一部分在许可条件下被使用或者分发,所有再分发的对象应该获得原设计所赋予的相同的权利。
第十一,许可不可以限制其他硬件或者软件。许可禁止对于与被许可的设计相组合的其他部件添加限制条件,但是设计的衍生品不在该禁止范畴内。比如许可不得要求与被许可的设计一同销售的其他硬件是开源的,也不可以要求只有开源软件可以在设备外部使用。
第十二,许可必须是技术中立的。许可的任何条款不可以基于任何个人技术、特定部分或者部件、材料或者接口、使用风格等。
2 开源飞控又是何物
了解了开源硬件的概念,开源飞控的概念也就比较容易理解了。所谓开源飞控就是建立在开源思想基础上的自动飞行控制器项目(Open Source Auto Pilot),同时包含开源软件和开源硬件,而软件则包含飞控硬件中的固件和地面站软件两部分。爱好者不但可以参与软件的研发,也可以参与硬件的研发,不但可以购买硬件来开发软件,也可以自制硬件,这样便可让更多人自由享受该项目的开发成果。
开源项目的使用具有商业性,所以每个开源飞控项目都会给出官方的法律条款以界定开发者和使用者权利,不同的开源飞控对其法律界定都有所不同。
3 开源飞控的发展
开源飞控的发展可分为三代:
第一代开源飞控系统 使用
Arduino
或其他类似的开源电子平台为基础,扩展连接各种MEMS传感器
,能够让无人机平稳地飞起来,其主要特点是模块化
和可扩展能力
。第二代开源飞控系统 大多拥有自己的
开源硬件
、开发环境
和社区
,采用全集成的硬件架构
,将全部10DOF传感器
、主控单片机
,甚至GPS
等设备全部集成在一块电路板上,以提高可靠性。它使用全数字三轴MEMS传感器
组成航姿系统(IMU)
;能够控制飞行器完成自主航线飞行
,同时可加装电台与地面站进行通信
,初步具备完整自动驾驶仪
的功能。此类飞控还能够支持多种无人设备
,包含固定翼飞行器、多旋翼飞行器、直升机和车辆等,并具备多种飞行模式,包含手动飞行
、半自主飞行
和全自主飞行
。第二代飞控的主要特点是高集成性
、高可靠性
,其功能已经接近商业自动驾驶仪标准 。第三代开源飞控系统 将会在软件和人工智能方面进行革新。它加入了
集群飞行
、图像识别
、自主避障
、自动跟踪飞行
等高级飞行功能,向机器视觉
、集群化
、开发过程平台化
的方向发展。
4 你不该错过的开源飞控一览
4.1. Arduino飞控
要谈开源飞控的发展就必须从著名的开源硬件项目Arduino
谈起。Arduino是最早的开源飞控,由Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis 和 Nicholas Zambetti于2005年在意大利交互设计学院合作开发而成。Arduino公司首先为电子开发爱好者搭建了一个灵活的开源硬件平台和开发环境,用户可以从Arduino官方网站取得硬件的设计文档,调整电路板及元件,以符合自己实际设计的需要。
Arduino可以通过与其配套的Arduino IDE软件查看源代码并上传自己编写的代码,Arduino IDE使用的是基于C语言和C++的Arduino语言,十分容易掌握,并且Arduino IDE可以在Windows、Macintosh OSX和Linux三大主流操作系统上运行。
随着该平台逐渐被爱好者所接受,各种功能的电子扩展模块层出不穷,其中最为复杂的便是集成了MEMS传感器的飞行控制器。为了得到更好的飞控设计源代码,Arduino公司决定开放其飞控源代码,他们开启了开源飞控的发展道路。著名的开源飞控WMC
和APM
都是Arduino飞控的直接衍生产品,至今仍然使用Arduino开发环境进行开发。
4.2. APM飞控
APM(ArduPilotMega)
是在2007年由DIY无人机社区(DIY Drones)
推出的飞控产品,是当今最为成熟的开源硬件项目。APM
基于Arduino的开源平台
,对多处硬件做出了改进,包括加速度计、陀螺仪和磁力计组合惯性测量单元(IMU)。由于APM良好的可定制性,APM在全球航模爱好者范围内迅速传播开来。通过开源软件Mission Planner
,开发者可以配置APM的设置
,接受并显示传感器的数据,使用google map
完成自动驾驶等功能,但是Mission Planner仅支持windows操作系统
。
目前APM飞控已经成为开源飞控成熟的标杆,可支持多旋翼、固定翼、直升机和无人驾驶车
等无人设备。针对多旋翼,APM飞控支持各种四、六、八轴产品
,并且连接外置GPS传感器以后能够增稳,并完成自主起降、自主航线飞行、回家、定高、定点
等丰富的飞行模式。APM能够连接外置的超声波传感器和光流传感器,在室内实现定高和定点飞行。
4.3. PX4和PIXHawk
PX4是一个软硬件开源项目
(遵守BSD协议),目的在于为学术、爱好和工业团体提供一款低成本、高性能的高端自驾仪。这个项目源于苏黎世联邦理工大学
的计算机视觉与几何实验室、自主系统实验室和自动控制实验室的PIXHawk项目
。PX4FMU自驾仪模块
运行高效的实时操作系统(RTOS
),Nuttx
提供可移植操作系统接口(POSIX
)类型的环境。例如:printf()、pthreads、/dev/ttyS1、open()、write()、poll()、ioctl()
等。软件可以使用USB bootloader
更新。PX4
通过MAVLink
同地面站通讯
,兼容的地面站有QGroundControl
和Mission Planner
,软件全部开源且遵守BSD协议
。
由3DR
联合APM小组
与PX4小组
于2014年推出的PIXHawk飞控
是PX4飞控的升级版本
,拥有PX4和APM两套固件
和相应的地面站软件
。该飞控是目前全世界飞控产品中硬件规格最高的产品
,也是当前爱好者手中最炙手可热的产品。PIXHawk
拥有168MHz
的运算频率,并突破性地采用了整合硬件浮点运算核心的Cortex-M4
的单片机作为主控芯片,内置两套陀螺和加速度计MEMS传感器
,互为补充矫正,内置三轴磁场传感器
并可以外接一个三轴磁场传感器
,同时可外接一主一备两个GPS传感器
,在故障时自动切换。
基于其高速运算的核心和浮点算法,PIXHawk
使用最先进的定高算法,可以仅凭气压高度计便将飞行器高度固定在1米以内。它支持目前几乎所有的多旋翼类型
,甚至包括三旋翼和H4
这样结构不规则的产品。它使飞行器拥有多种飞行模式
,支持全自主航线、关键点围绕、鼠标引导、“FollowMe”、对尾飞行
等高级的飞行模式,并能够完成自主调参
。
PIXHawk飞控
的开放性非常好,几百项参数全部开放给玩家调整,靠基础模式简单调试后亦可飞行。PIXHawk
集成多种电子地图
,爱好者们可以根据当地情况进行选择。
4.4. OpenPilot与Taulabs
OpenPilot
是由OpenPilot社区
于2009年推出的自动驾驶仪项目,旨在为社会提供低成本但功能强大的稳定型自动驾驶仪。这个项目由两部分组成
,包括OpenPilot自驾仪
与其相配套的软件
。其中,自驾仪的固件部分由C语言
编写,而地面站则用C++
编写,并可在Windows、Macintosh OSX和Linux
三大主流操作系统上运行。
OpenPilot
的最大特点是硬件架构非常简单
,从它目前拥有的众多硬件设计就可以看出其与众不同之处。官方发布的飞控硬件包括CC、CC3D、ATOM、Revolution、Revolution nano
等,衍生硬件包括Sparky、Quanton、REVOMINI
等,甚至包含直接使用STM32开发板
扩展而成的FlyingF3、FlyingF4、DescoveryF4
等,其中CC3D
已经是300mm
以下轴距穿越机和超小室内航模的首选飞控,而DiscoveryF4
被大量用于爱好者研究飞控,Quanton
更是成为了Taulabs
的首选硬件。
下面我们来说说Openpilot
旗下最流行的硬件CC3D
。此飞控板只采用一颗72MHz的32位STM32单片机
和一颗MPU6000
就能够完成四旋翼、固定翼、直升机
的姿态控制飞行(注意,该硬件可进行的是三自由度姿态控制
,而不是增稳
),电路板大小只有35mm×35mm
。与所有开源飞控不同,它不需要GPS融合
或者磁场传感器
参与修正,就能保持长时间的姿态控制
。以上所有功能全部使用一个固件,通过设置便可更改飞机种类、飞行模式、支持云台增稳等功能。其编译完的固件所需容量只有大约100KB
,代码效率令人惊叹
,是所有飞控程序员学习的楷模。其地面站软件集成了完整的电子地图
,可以通过电台实时监测飞机状态。
TauLabs飞控
是OpenPilot飞控
的衍生产品。当前TauLabs
最流行的硬件叫做Quanton
,由原OpenPilot
飞控小组成员独立完成。它继承了OpenPilot
简单高效的特点,并扩展了气压高度计
和三轴磁场传感器
,将主控单片机
升级为带有硬件浮点运算的Cortex-M4
核心。该飞控是最早支持自动调参
的开源飞控产品,带有模型辨识算法
,能够在飞行中进行自整定姿态PID控制参数
。TauLabs
能够完成许多高级飞行模式,连接外置GPS
后可使多旋翼具备定高、定点、回家
等功能。飞控集成了电子地图,且界面非常友好,使用向导模式进行初始化,初学者可以简单上手。
4.5. MultiWiiCopter(MWC)
MultiWiiCopter(MWC)飞控
是一款典型的Arduino衍生产品
,是专为多旋翼开发的低成本飞控
,它完整地保留了Arduino IDE
开发和Arduino
设备升级和使用的方法。由于成本低、架构简单、固件比较成熟,因此该飞控在国内外拥有大量爱好者。除了支持常见的四、六、八旋翼
以外,该飞控的最大特点是支持很多奇特的飞行器类型
,比如三旋翼、阿凡达飞行器(BIcopter avatar style)、Y4型多旋翼(其中两轴为上下对置)
等,使得该飞控的开发趣味性较强,容易博得大家的喜爱。
4.6. KKMultiCopter
KK飞控
是源于韩国的一款开源飞控项目,也是第一种广为大众接受的多旋翼飞控
,在开源飞控发展的初期,该飞控的横空出世对整个四旋翼行业是一种震撼。该飞控只使用三个成本低廉的单轴陀螺
,配合一台最简单的四通道遥控设备
,就能控制常见的三、四、六旋翼飞行器
,并且支持“十字”型,X型、H型和上下对置等多种布局
。该飞控使用三个可调电阻调整感度作为调参方法
,保留了早期航模陀螺仪
的特征。作为多旋翼飞控起始
的重要见证,这款“古董”级经典飞控
,依然拥有众多玩家。
4.7. Paparazzi(PPZ)
Paparazzi(PPZ)
是一个软硬件全开源的项目
,它始于2003年,开发目标是建立一个配置灵活且性能强大的开源飞控项目。PPZ
的一大特点是,该开源飞控方案中除了常见的飞控硬件
、飞控软件
和地面站软件
之外,还包含地面站硬件,包括各种调制解调器、天线等设备
。从功能上讲,PPZ已经接近一个小型的无人机系统
了。
该开源项目的另一个特点是采用ubuntu操作系统
,它将全部地面站软件和开发环境集成于该系统下
,官方称之为Live CD
。一张CD加飞控硬件就可完成从开发到使用的全部工作。
PPZ
目前最流行的硬件版本是Paparazzi(PPZ)Lisa/M v2.0
。该硬件拥有大量的扩展接口,并且使用可扩展的单独的IMU传感器板
。这也是早期开源飞控比较流行的做法,这样可以像DIY
台式计算机那样,随着传感器升级而不断升级IMU硬件
。
4.8. Autoquad飞控和ESC32电调
Autoquad飞控
来自德国,作为早期开源飞控,Autoquad
功能非常强大,但是受限于当时的传感器产品,它不得不采用大量模拟MEMS传感器
。所谓模拟传感器指的是传感器芯片内部不集成数模转换器(ADC)和运算核心
,而直接将微机械传感器的变化通过放大和硬件滤波后以电压的形式输出
,需要主控单片机
进行AD采集
。因为传感器在不同温度环境下,输出值会受到影响,模拟MEMS传感器
给参数校准
带来了不少麻烦。很多玩家在第一次使用该飞控时,不得不借助电冰箱来进行传感器校准,而一些厂家为了保证批量产品的稳定性,只能在飞行器上对电路板进行加温,使其保持温度恒定。
但是,这种校准方法却为一些骨灰级玩家带来了额外的乐趣,很多人反而乐此不疲。对于大多数普通爱好者而言,这实在是一项难度不小的工作。随着带有出厂校准的数字传感器的普及,Autoquad作为历史的积淀,也完成了它的使命
。
但是,该开源项目的另一个分支ESC32电调
却逐渐在玩家中被接受了。该电调是第一个采用数字接口进行控制的电调产品
,玩家可以通过串口、I2C接口和CAN接口来控制电机的转速
,这比传统的PWM接口信息速度要快很多倍
。常见的PWM电调波形更新速度为每秒钟四百次
,而数字接口的更新速度可达到百万次
。尤其是对于动力变化非常敏感
的多旋翼飞行器
来说,这种高速通信是非常必要
的。该电调还支持转速闭环
,并且能够针对电机进行详细调参
,这些功能都是传统航模电调不能比拟的。
当然,Autoquad
也在进步,它发布了全新的飞控产品Autoquad M4
,对主控单片机和传感器
进行了全面升级,采用常见的STM32 F4单片机
和数字传感器
。但是面对PIXHawk、APM
等已经成熟多年的先进飞控产品,它已经从前辈沦落为后起之秀。
5 不可不知的MEMS传感器
5.1. 为什么用MEMS
讲完开源飞控,我们必须对飞控上的关键器件——MEMS传感器
进行进一步的研究。如果把自动驾驶仪
比作飞行器的“大脑”
,那么MEMS传感器
就是“飞行器”的眼耳鼻
。正是这些传感器将飞行器的动态信息收集并发给主控单片机,飞行器才能够通过计算得到飞机的姿态和位置。
为什么开源飞控要使用MEMS传感器
?
要开发飞控,如何得到飞行器的航姿是第一任务
,传统的载人飞行器
一般使用机械陀螺
和光纤陀螺
来完成这项任务,但是受限于体积、重量和成本,在多旋翼等小型飞行器上无法采用这种设备。因此,以MEMS传感器为核心
的DOF(Degree Of Freedom,自由度)系统
成为唯一的选择。由于近十年来,家用游戏机和手机的迅速发展,使得MEMS传感器
在这十几年中得到了飞速的普及,让低成本的运动感知成为了可能,这正是目前的微型飞控系统形成的基本条件。
开源飞控所使用的MEMS传感器
与手机和游戏机
来自相同的厂家,比如ST microelectronics
,INVENSENSE
等。MEMS传感器
从早期的多芯片组合使用
,发展到现在的单芯片集成多轴传感器
,从模拟传感器
发展为数字传感器
,已经经历了多次较大变革。
5.2. MPU6000
MPU6000
是开源飞控传感器的王者
,虽然新的传感器层出不穷,但是它的地位一直无法撼动。PIXHawk飞控
的早期版本曾经抛弃了MPU6000
,但是后来又不得不重新使用,因为这颗MEMS芯片
已经被所有进行开源飞控项目开发的爱好者们所接受。
MPU6000
在一块4mm×4mm
的芯片内部集成了三轴角速率陀螺
和三轴加速度计
,并且集成AD采集、解算核心,以及温度传感器
。如此高的集成度在当时还是其他厂商望尘莫及的。而对于旋转矩阵、四元数和欧拉角格式的融合演算数据的输出
更是降低了主控单片机解算姿态的计算量
。SPI和I2C
双数字接口、3.3V与大部分单片机相同的供电电压(2.4V至3.4V)
、4mA的最大功耗
、可定制的传感器量程
、-40℃至+85℃的工作温度
……这些特性极大地方便了主控计算机的工作。难怪INVENSENSE
自信地称这款产品为MPU(Motion Processor Unit,运动处理单元)
,并且在芯片型号后面不加任何后缀。
所有想深入
进行开源飞控开发的爱好者们都应该
从这款芯片开始学习传感器的应用和航姿解算的基本算法
,这是最简单有效的途径。OpenPilot的CC3D飞控
就给大家提供了很好的实例,它只利用了这一颗传感器,便做出了经典的飞控产品
。
5.3. MS5611
MS5611
是传感器中的另一个传奇。芯片大小只有3mm×5mm
,传感器精度高于很多的专业航空设备
,且价格非常便宜
。该传感器由瑞士的MEAS公司
推出,在此之前,大多飞控采用的是摩托罗拉
的气压传感器
,体积要大几倍,且不是贴片器件,需要“立”在电路板上,MS5611
一经推出就立即成为所有开源飞控气压测量的标配。
MS5611传感器
响应时间只有1ms
,工作功耗为1μA
,可以测量10-1200mbar
的气压数值。MS5611
具有SPI和I2C总线
接口、与单片机相同的供电电压
、-40℃至+85℃的工作温度
、全贴片封装
、全金属屏蔽外壳
、集成24位高精度AD采集器
等特性,这些特性使其非常适合在高度集成的数字电路中工作,所以成为了开源飞控测试气压高度
的首选。
5.4. HMC5883
接触过磁阻传感器(也就是磁罗盘传感器)
的人都知道,使Z轴磁阻传感器
实现扁平化
是多么的不容易。霍尼韦尔
也是在研发了数十款相关的产品之后,才最终有能力生产出这款全集成的三轴数字罗盘
的。我们不得不惊叹于它的体积—3mm×3mm
的面积、厚度不足1mm
。更加让人惊叹的是其低廉的价格
,所以,除了PIXHawk
这样极度追求硬件先进性的飞控以外,其他开源飞控如果配有磁罗盘的话,无一例外均使用的是HMC5883
。当然,霍尼韦尔
早已推出了升级型的HMC5983
,将角度测量精度提高到了1°以内
。对于爱好者们来说,HMC5883
已经够用了。
磁阻传感器
的设计难点在于铁氧体的消磁,能够把铁氧体传感器和消磁驱动单元、12位ADC、运算核心等全部集成在如此小的芯片当中是十分不易的。HMC5883
其他的特性包括:在±8GS的磁场中实现2mGS的分辨率、与单片机相同的供电电压、-30℃至+85℃的工作环境温度
等。虽然ST microelectronics
已经推出了集成三轴磁阻传感器和三轴加速度计
的LSM303D
,并且体积更小、集成度更高,但是HMC5883一直是磁罗盘的首选芯片
。
5.5. L3GD20
L3GD20
的面积仅有4mm×4mm
,注定其为移动设备而生。ST
是最早一批开发MEMS芯片
的厂家,也是最早发布陀螺产品的公司,但L3GD20
还是晚来了一步。虽然它精度更高,但是风头已被MPU6000
抢走。虽然没有集成三轴加速度计
,但是凭借高精度角速率测量、大范围的自定义量程,以及更加低廉的价格
,L3GD20
逐渐为业界承认,以至于PIXHawk
一度想用它取代MPU6000
。当然,最终PIXHawk
并没有实现替代的愿望,他们并存于这款开源飞控之上,互为补充,成就了PIXHawk的冗余设计
。
L3GD20
具备与单片机相同的供电电压、-40℃至+85℃的工作环境温度、兼容I2C和SPI数字接口、内置可调低/高通滤波器电路、6mA的工作功耗,以及集成的温度传感器
,这些同样可作为高集成电路角速率陀螺仪不错的选择
。
5.6. LSM303D
如果说其他传感器是为移动设备而生的,那么LSM303D
就是为L3GD20
而生的。它与L3GD20
一同可以组成完整的9DOF航姿传感器系统(IMU)
,并且其供电、测量精度和数字接口几乎一模一样
。这套系统要比MPU6000与HMC5883
的组合总成本更低、测量精度更高
,难怪INVENSENSE
要马不停蹄地推出MPU9250系列
的单芯片9DOF产品
来与其竞争。
与单片机相同的供电电压、-40℃至+85℃的工作环境温度、兼容I2C和SPI数字接口、集成温度传感器
,这些参数几乎可以照抄L3GD20
。
6 软件如何控制硬件
讲完了硬件,我们来谈谈常见的算法。开源飞控架构不同,软件也大相径庭。但是只要是飞控都离不开捷联惯导
、卡尔曼滤波
和PID控制
这三大算法。
6.1. 捷联式惯导系统
导航的目的是为了实时获取无人机的姿态、速度和位置参数
。光电码盘可用来测量无人机的转动角度
,测速电机可用来测量无人机的角速度
,测速计可用来测量无人机的速度
,但是以上各种测量手段均不能单独同时测量无人机的线运动和角运动
,而惯性导航就可做到这一点。因为惯性导航系统不需要物理参照,所以它被称为DOF系统(Degree Of Freedom,自由度)
,此外惯性导航还不会受到设备外部自然和人为的干扰,特别适合在恶劣环境下的使用。
20世纪90年代以后,随着微机电系统(MEMS
)技术的发展,惯性敏感元件实现了体积小型化,提高了可靠性,并适合批量生产,从此捷联式惯导系统进入了微机电领域,并开始向民用领域广泛渗透,出现在机器人系统和新一代的交通工具中。进入21世纪,捷联式惯导系统几乎完全取代了平台式惯导系统。
6.2. Kalman滤波算法
信号在传输与检测过程中不可避免地会受到来自外界的干扰与设备内部噪声的影响,为获取准确的信号,就要对信号进行滤波。所谓滤波就是指从混合在一起的诸多信号中提取出有用信号的过程。举个例子,大家熟知的低通滤波器就是利用信号所处频带的不同,设置具有相应频率特性的滤波器,使得有用的低频信号尽量无衰减地通过,从而去除高频杂波。
而Kalman滤波
是Kalman
于1960年提出的从与被提取信号有关的观测量中通过算法估计所需信号的一种滤波算法,他创新地将状态空间的概念引入随机估计理论中,将信号过程看作是具有白噪声影响的线性系统输入输出过程,在估计过程中利用系统的多种方程构成滤波算法。此外,Kalman滤波
的输入输出是由时间更新和观测更新算法联系在一起的,根据系统状态方程和观测方程估计出所需处理的信号。
那么为什么Kalman滤波
会应用到惯性导航系统
中呢?
这主要是因为惯性导航系统的“纯惯性”传感器不足以达到所需的导航精度
,为了补偿导航系统的不足,常常使用其他导航设备来提高导航精度,以减小导航误差。因此开发人员想到了Kalman滤波算法
,利用该算法,可以将来自惯性导航系统与其他导航装置的数据(如惯性导航系统计算的位置对照GPS接收机给出的位置信息)加以混合利用
,估计和校正未知的惯性导航系统误差
。
6.3. 飞行控制PID算法
虽然现代控制理论发展日臻完善,人们通过科学研究获得了诸多具有优异控制效果的算法和理论,但在工程应用领域,基于经典PID的控制算法仍然是最简单、最有效的控制方案
。目前主流的几款开源飞控中,无一例外地都是采用PID控制算法
来实现无人机的姿态和轨迹控制
。
PID控制器
是一种线性控制器
,它主要根据给定值和实际输出值构成控制偏差
,然后利用偏差给出合理的控制量
。
那么PID控制器算法
能解决什么问题呢?
以多旋翼为例,在没有控制系统的情况下,直接用信号驱动电机带动螺旋桨旋转产生控制力,会出现动态响应太快,或者太慢,或者控制过冲或者不足的现象,多旋翼根本无法顺利完成起飞和悬停动作。为了解决这些问题,就需要在控制系统回路中加入PID控制器算法
。在姿态信息和螺旋桨转速之间建立比例、积分和微分的关系,通过调节各个环节的参数大小,使多旋翼系统控制达到动态响应迅速、既不过冲、也不欠缺的现象。