【飞控初体验】(一)抛开理论公式,用符合直觉的方式理解四旋翼无人机控制

前言

  任何复杂工程系统,一定都是从一个简单的系统,经过提出需求——解决方案——发现问题——解决问题的不断循环——达到预期需求后,最终演变成一个复杂系统。而且其需求不同或是问题演变的方向不同,这就导致了同一个行业或领域,会有多个商业产品。
  回到飞行控制,当我开始学习时,直接APM开源代码入手,直接给我干懵了。经过跌跌撞撞地学习,最终仅了解了飞控的最基本原理。
  为了巩固自己所学知识,使零碎的知识建立联系。下面以刚毕业的工程师小明的视角模拟上述(提出需求——解决方案——发现问题——解决问题的不断循环——达到预期需求)的过程,来讲解飞行控制过程。

需求:要做一个四旋翼飞机,能够实现三个自由度上的稳定飞行

  MD,上来就是一个这么复杂的问题。刚毕业的工程师小明都吓坏了,心想我本就是一个划水大学生,再说大学学的也不是这玩意啊。不过,拿人钱财替人消灾,只能硬着头皮做了。于是小明开始了他的飞控之旅。
  小明心想,“先不管它是不是三个自由度了,我能让它(四旋翼飞机)芜湖的一下起飞就不错了。”在这里插入图片描述

  好在小明的力学还不错,便想到,这四旋翼有四个桨,只要四个桨叶旋转产生的升力相等,之和等于重力不就可以让飞机起飞了吗?噢,对。还要平衡扭矩,只要让电机13逆时针,电机24顺时针就行了,这个简单。理论存在,实践开始。
  于是小明查阅了相关资料,找到了螺旋桨参数及转速与升力和扭矩的关系(公式见:https://blog.csdn.net/qq_38041309/article/details/121329749),现在只需要根据让每个螺旋桨产生的升力等于1/4个G(重力)就行了。很快小明根据公式便得到了螺旋桨的转速w,接下来只要控制电机的电流和电压,就可以让电机保持这个转速了。
  那怎么保持电机的电流电业呢?找一个匹配的电池?这样未免不够灵活。后来小明发现,原来还有电调这种东西,可以放在电池和电机中间,这样就可以控制输入到电机的电流电压了((公式见:https://blog.csdn.net/qq_38041309/article/details/121329749)),而且小明还发现电调的另一个用处,那就是——电调提供了一个可控的油门量,控制这个油门量还可以随心改变输入到电机的电流和电压,这不是再完美不过了吗?这样一来小明就可以用遥控器和这个电调的油门相连接,油门开度越大,螺旋桨转速越大,这样一来就可以用遥控器让飞行器起飞和降落了。
  于是小明兴高采烈地把螺旋桨、电机、电调、电池组装起来,并连接遥控器。躲到远远的,然后慢慢地抬高控制器的油门。激动人心的时候来了,螺旋桨转起来了,越转越快,离地了!起飞了!

发现问题A——定高控制

  小明激动地拨动油门杆,在喜悦之时发现了很多问题。
  其一(A1),仅用油门杆调整到固定高度(定高)实在是太难了,起飞后油门给高了飞机起飞,给低了就开始降落,找到那个临界值太难了!
  其二(A2),四个桨叶转速相同,一旦有风或起飞时地面不平整等原因,飞机飞行时不水平,四个桨叶产生的合力将不再是竖直向上,水平分量将导致飞机发生偏移,甚至机身翻转导致坠机。

解决方案A

问题A2——消除飞机倾斜

  首先来看问题2,这个牵扯到飞行安全问题。但这个问题难不倒了解力学的小明,因为只要保证了四个螺旋桨产生的拉力相同,就不会在任何机体xy轴(机体坐标系定义如下图)方向有力矩,这就保证了飞行要想“翻身“也没有想的那么容易。那么有没有什么办法能让机身倾斜的飞机能够自动回到水平呢?于是小明联想到了不倒翁。只要让飞机的重心低于机体坐标系的xy平面。于是只要飞机倾斜产生水平速度时,拉力在重心处产生的力矩就会让机身回到水平,这不就能让飞机自行平稳了吗?好的,问题2解决方案有了!
在这里插入图片描述

问题A1——飞机自主定高

  再来看这个问题1。有什么办法可以让飞机更快的达到平衡点从而定高呢?最好是我遥控器的油门处于中立位置的时候,就表示我想让飞机定高根据公式计算,虽然理论上能够使得螺旋桨拉力等于重力,但且不说重力的测量误差,还有电调电池等等的误差累加,仅靠理论显然是不行了,看来不得不加入自动控制系统了。
  经过网上冲浪后小明知道了用得最多的就是PID控制,于是小明也打算用这玩意来控制定高飞行。得知PID是基于误差的控制,那就必须要知道油门杆处于中立位时刻的飞机高度,然后让PID去控制电机,如果低于这个高度就加大点油门,高于这个高度就减小点油门,就不用一直人为调控了。
  这就意味着必须要用到传感器了。了解过后,发现测量高度的有气压计、声波测距仪、激光测距仪等一系列测距仪。小明想,反正就要个定高,气压计就够了,别人飞机上也用这个,那我也用这个吧。
  实践开始,控制器的设计思路就设为——当油门杆处于中立位置(设定一定死区,在中立位的死区内,均算作指令为定高)时,记录该时刻的气压计的值,并作为期望值(更详尽的设计这里不再说明,比如可以设定中立位置的停留时间等),随着飞机高度的波动,气压计的值也发生改变并作为当前值,有了当前值和期望值,就可以计算误差,于是PID开始发挥作用,PID结算后可以输出需要的拉力值f,而通过螺旋桨产生拉力的计算公式,就可以计算得到螺旋桨的转速,从而就计算得到电调的油门值,就能实现自动调节了。
simulink定高仿真
  自动控制结果如下
请添加图片描述

  至此,定高飞行的需求就完成了
  注:上述仿真模型只是粗略模拟,追求好效果还需加上速度环加速度环等。

发现问题B——飞行器飞行安全

  随着反复的测试,小明再次发现问题,问题B1——需求本身的另外五个自由度的控制没有解决问题B2——当起风时,导致的飞机倾斜,这个时候因为重心靠下的原因,拉力产生的力矩将使得飞机翻转,这就意味着飞机的定高的稳定性并没有根本性的解决。
  这个时候小明发现,这两个问题其实有点互通性。因为,如果能够很好地解决问题1,就能控制住飞机在水平位置不动,这样一来飞机肯定就不能倾斜(因为四旋翼有六个自由度,但只有4个动力输入,因此肯定有两个运动发生了耦合,其中一个是x轴旋转与y轴平动的耦合,及y轴的旋转与x轴平动的耦合)。目前小明只能控制z轴方向的平动,也就还有三个自由度的控制没有解决,也即z轴的旋转,x轴平动与y轴旋转的耦合,y轴平动与x轴旋转的耦合。
  但一下子要解决这么多东西,还是太过于复杂了,小明想。所以干脆不考虑耦合平动等乱七八糟的,先保证飞机飞起来能够平平稳稳的,不产生倾斜,保证飞行安全就行。也即先解决问题B2,问题B1之后再考虑。

解决方案B

问题B2——飞行器自主保持水平

  根据定高的解决经验,小明想,解决这个问题的思路其实和解决定高问题是一样的。因为,要保持飞机水平,无非是要保证机体xy轴不能做任何旋转运动,那就是要控制xy轴的旋转角度为0。那这就简单了,只要用传感器实时测出飞机的xy轴的姿态角作为当前值,然后与期望值0相减得到误差角,就可以通过PID输出期望的(角速度、再加一环PID还以得到角加速度,知道角加速度就可以算出力矩,通过改变四个电调油门值,得到升力差得到期望的力矩)电调油门值(理想情况是三个环,这里类似定高做简化,直接用角度误差输出油门控制量)。
  那么现在就需要找能测出角度的传感器,小明网上冲浪后发现,陀螺仪可以测量角速度(积分后得到角度),加速度计可以测量三个方向(机体xyz)的加速度(可通过加速度大小计算出xy方向的角度),磁力计测量磁场强度(解算后可以得到z轴方向的角度)。可以看到,每个姿态角均有两个测量值,如何融合这些数据,最终输出一个较为准确的一组姿态角为数据融合问题,可以采用卡尔曼滤波等,这里不再阐述,详见www.haimeigeng.com(之后更新)。下面直接假定夏明已经会数据融合了。
  得到姿态角后,就可以和之前做定高一样,采用PID进行自动控制了,同样也可以采用多个环,通过角度误差得到角速度,角速度误差得到力矩进而输出电机转速。原理图如下:
在这里插入图片描述

  这样一来,飞机的自主水平也搞定了。既然飞机的平稳运行搞定了,现在就可开始考虑实现前后左右飞行和偏航运动了。

问题B1——实现xy轴的移动和转动及z轴转动

  有了之前的经验,小明大感要解决这个问题只要如法炮制就行了。小明想只要把遥控器的拨动角度当做xy轴的期望旋转角就行了,然后又是用PID对飞行器经行控制就可以了。只不过需要限制飞机最大的倾斜角,也即飞机整体平面与水平面的夹角不应该过大,小明考虑到飞行安全,把这个角保守设置在了30度,那么滚转和俯仰的最大角应该只有30度(但不能同时达到30度,这样整体倾斜会超过30度)。
  与解决问题一的方法相同,得到遥控器指令后,将其线性映射为期望的姿态角,根据传感器获取到的下当前时刻的姿态角,便可做差得到期望的角速度,角速度误差得到力矩进而输出电机转速。原理如下图:
在这里插入图片描述
  至此,飞机便成功实现了稳定响应遥控器的指令,并拥有一定的飞行稳定性,不会因为飞机倾斜角太大而导致坠机。
  小明的任务阶段性地完成了,然而还有相当多的细节设计还需要小明慢慢更新(之后的博客将介绍开源飞控中如何设计控制器及姿态估计和位置估计模型)。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
声明:该设计资料来源于网友eeworld-lb8820265的开源分享,仅供学习参考,不可用途商业用途。 你是否也和我一样有这样的疑惑:论文中那么多四控制算法和姿态解算算法,为何在开源四平台中见不到?控制算法都是PID,姿态解算都是mahony和EKF。 但现在四控制还存在很多问题,例如:抗干扰能力和鲁棒性有待继续提高,变重心变质量情况下的控制效果不佳,起不稳定,室内自主悬停控制不够理想,惯性导航和室内导航精度低等。可研究的内容还很多,任重而道远。会发现当仿真通过后,却找不到一个趁手的四平台进行验证。 目前适合研究的四平台: Pixhawk功能强大,可扩展性好。但是也存在着如下的问题: 1. 编译复杂,开发环境不是IDE,无法在线debug 2. Nuttx操作系统复杂,而且实时性有待提高,传感器数据读取到最后控制输出的时间过长 3. 很多代码用matlab生成,不利于阅读,没有利用F4的Dsp核,效率低下,且代码结构复 杂,不利于二次开发 4. 数传速度低,只有1Hz,不能实时分析 5. IMU没有减震,需要整个加减震 6. 修改程序到成功烧录过程繁琐,且不支持无线更新 大疆的M100和guidance是不错的开发平台,但是却主要用来开发视觉算法。控制算法和姿态解算给封装了。 其他:某宝上面的各种,元器件性能低下,无操作系统,控制算法和姿态解算算法性能低,接口少,作为玩具还可以,作为科研那就呵呵了。Ascending Technologies公司的四开发平台倒是经常被各个科研院校和比赛使用,但是价格摆在那里。 因此越来越感受到拥有一个适合研究的四平台的重要性,无奈我个人的精力和能力有限,因此开贴聚拢志同道合的朋友共同学习,只有开源才能促进技术的进步。 步设想的四具有如下的特点: 1. 具有先进的控制和姿态解算算法 2. 程序模块化设计,方便各种算法的实现 3. 提供Matlab仿真和理论支持 4. 高速数传,数据波形实时查看和分析 5. 高性能MCU和IMU 6. 优化代码,充分利用DSP核 7. 支持无线更新 8. 使用IDE编写、编译、调试和烧录 9. 采用简单高效的操作系统,充分减少控制延时 10. IMU放到有减震海绵的铝盒子里,接口形式可更换不同方案 11. 提供多种常见接口,也提供以太网接口,方便连接机载电脑 根据我个人的优势和技术的特点,步确定四软硬件如下: MCU+GPS+IMU盒子方案一: 元器件 型号 MCUSTM32F746ZGT6 GPS+Mag3DR GPS Acc+MagLSM303AGR GroL3GD20H Acc+GroLSM6DSM 气压计LPS22HB IMU盒子方案一全部采用ST最新的高性能元器件,有现成的驱动,和Pixhawk一样采用双陀螺仪加速度计冗余设计。MCU 采用高性能F746,可以运行复杂算法。 IMU盒子方案二:元器件型号 AccADXL354 GroADXRS642 ×3 气压计MS5803 IMU盒子方案二采用ADI高性能惯性传感器和高性能气压计,满足更高性能需求。软件相关: 部分 具体 操作系统FreeRTOS 文件系统FatFs 通信协议Mavlink 开发环境Keil+QT 协同工作Github 开源协议BSD3-clause 四的主板,IMU,元器件和主板第一代实物截图: 过一番探讨,决定第一版硬件采用三部分组成,核心版采用Nucleo F767,主板固定在机架上,IMU做成减震盒子。 主板上接口与硬件:PWM遥接口,PPM遥接口,8个电机控制接口,1个PWM用户接口, 3DR GPS的接口,SD卡接口,电源管理,Flash,三色LED灯,F450机架接口。 IMU上硬件与接口:LSM6DSM,LPS22HB,LSM303AGR,ICM20608,2W加热电阻,3.3V电源,14pin的排线接口。 IMU上采用了很多冗余器件,例如LSM6DSM与ICM20608功能重合,主要是为了测试性能。 说明: EEDrone开源四从零开始详细的制作步骤,详见“相关文件”超链。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yoldfish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值