本文主要总结了飞控研发过中一些比较重要的知识点,部分为本人的实际经验,部分为知乎转载。

影响飞控性能的一些因素:

飞控姿态控制算法比较固定,基本上都是角度环和角速度环组成的串级PID算法,外加前馈提高响应速度。

因此就目前的算法而言,影响飞控性能的因素主要有以下几点:

1、环路延迟

环路延迟对控制比较致命,引起延迟的因素很多,概括来说有以下几个方面:

1)IMU采样更新率和滤波器截止频率

由于受振动等因素影响,IMU输出需要经过低通滤波,而过低的截止频率会严重引起相位滞后,引起控制的不稳定性,制约控制性能提高;

2)控制频率

受限于控制器计算速度,控制频率低也是引起延迟的因素;

3)电调刷新速率、电机响应速度、螺旋桨惯性。

2、机架振动

机架刚性不足,会导致共振,制约了控制带宽的提升;这是影响控制性能的另一方面重要因素,就目前的PID控制而言,高的控制性能都是通过高的伺服带宽实现的机械结构的模态频率是限制带宽的重要因素。其次过大的振动又会引起IMU测量数据异常,需要设置更低的滤波器参数,反过来又会导致相位滞后

注意:

如果机体有共振频率,通常的解决方法是在控制器的输出加陷波滤波器,这样可以大幅减少机体本身的共振,也可考虑在传感器数据输出上加陷波;两个地方都加也行,这是比较通常的做法, 因为高频的共振大多是执行器引起的。

红外和超声波

红外和超声波技术,因为都需要主动发射光线、声波,所以对于反射的物体有要求,比如:红外线会被黑色物体吸收,会穿透透明物体,还会被其他红外线干扰;而超声波会被海绵等物体吸收,也容易被桨叶气流干扰。

视觉里程计

视觉里程计简单来说,就是通过左右双目的图像,反推出视野中物体的三维位置,所以相比光流+超声波技术只能简单的测出速度和高度,视觉里程计还能构建地面的三维模型,并通过连续的图像,跟踪自身与环境的相对移动,估计出自身的运动。准确测出自身与地面的相对位置。

运动加速度

Mahony互补滤波算法中使用加速度计来修正陀螺,前提是加速度计输出为重力加速的测量值,这一点在低速运动下是近似成立的,但是当机体有较大的运动加速度时,IMU的姿态输出将会有较大偏差,解决这一问题的方法是:

1.加速度大的时候减小重力修正结果的比重;

2.使用GPS通过数据融合得到运动加速度的估计值来补偿加速度计,使姿态估计更准确。

matlab中连续系统设计出来的PID控制器参数,能否用于实际的嵌入式平台?

如果离散控制器的频率和系统带宽频率比起来足够高的话,可以直接用,顶多微调一下;

但是绝大多数时候不可以直接用,可能因为:

1.MATLAB里仿真模型和实际不符;

2.仿真用的状态量和实际得到的状态量的时滞、误差、噪音不一样

3.PID实现不一样或实现有问题。

克服系统时滞

Smith Predictor 史密斯预测器

提高系统的可靠性

1.传感器必须仔细地校正;
2.进行数据可靠度判断,比如EKF中协方差过大可能意味着滤波器不收敛,得到的状态估计值不可靠;
3.多套传感器系统冗余配置,实现相互备份;
4.多套算法同时运算,并相互比较,当某套算法出现异常时,及时切换到其他算法。

IMU的安装位置

以加速度为例,装在机身不同位置的加速度计测得的加速度在发生旋转时是不同的。关于质心对称时,简单相加平均可以抵消。如果安装方向有偏差,则需要单独做标定和数据旋转。严格地说,IMU和质心不重合的时候都需要做修正;这个在实际飞行中没仔细考虑过,因为发现IMU放质心和放旁边结果差别不大,这个误差并没有各种传感器本身的误差大。

不同的传感器更新频率不同,怎样解决数据同步问题

这是一个数据对齐的问题,在PX4中是将所有的传感器数据先存入一个先入先出的数据缓存区,使用数据时直接读取该缓存区即可;我自己在代码中是使用了全局的结构变量,传感器数据更新后对应的全局变量也随之更新,使用数据时直接获取全局变量即可,不用等待慢的传感器更新。

活用matlab工具箱

1.matlab coder工具箱,可以将目标函数转换成C代码,这可以用来生成EKF的代码,避免了手写代码出错,非常实用;
2.curve fitting工具箱,曲线拟合,可以根据采样数据自动进行最小二乘拟合;我曾用来做升力值和PWM脉宽值拟合、电流和升力值拟合,非常方便和实用;
3.fdatool非常强大的滤波器设计工具箱,IIR、FIR、低通、高通、带通、带阻滤波器都有包含,只需通过简单的设置一些关键参数便可给出bode图以及滤波器的差分实现;
4.signal analysis工具箱,从工作区导入mat文件,可以方便地设置滤波器并观察波形变化;可以配合fft函数进行频谱分析(signal analysis自带的频谱分析工具不是很好用)。

关于多旋翼的轴距和桨叶

起飞重量较低时(1.5kg−2kg1.5kg-2kg1.5kg−2kg以下);常见的是配转速高扭矩小的电机,这类电机的KV值一般很高,定子高,电机呈细长型;与之对应的多旋翼的轴距和螺旋桨也较小;

起飞重量较大时;配转速低扭矩大的电机,这类电机的KV值一般较低,定子低,电机呈圆盘型;与之对应的多旋翼的轴距和螺旋桨也较大;

如果加大多旋翼的轴距便要换与之匹配的大桨,飞控大概率也是要重新调的,而且越大的桨惯性越大,响应慢是必然。时滞高之后控制算法也会比较难调,可能单纯PID效果会比较糟。不过动力提升会远大于风阻、重量提升,抗风和负重能力肯定会变好的

控制器的性能提升

振动大考虑低通滤波和陷波器;
时延大考虑史密斯预估器(对模型精度要求较高);
模型改变考虑使用观测器(通常参数合适的PID控制器对模型的变化有一定的鲁棒性)

关于低通滤波

常见的有一阶惯性滤波、巴特沃斯滤波器、切比雪夫滤波器(细分为两种型别)等等;
这几种滤波器的特点如下:
一阶惯性滤波:
阻带和通带平坦,过渡带幅值下降缓慢;
巴特沃斯低通滤波:
阻带和通带平坦,过渡带幅值下降较快;
切比雪夫一型:
通带带波纹,阻带平坦,过渡带幅值下降最快;
切比雪夫二型:
通带平坦,阻带带波纹,过渡带幅值下降最快;

注意:

巴特沃斯低通滤波器和切比雪夫低通滤波器的阶数越高,过渡带的幅值下降越快,但是相角滞后越严重;因此实际中不宜设置过高。

参考文献

再谈IMU数据处理(滤波器)

控制界有哪些经典的开疆扩土的发现

飞控IMU数据进阶处理

飞控中的一些知识点总结相关推荐

  1. python函数count_python中count函数知识点浅析

    python中,count函数的作用是进行python中的数量计算.count函数用于统计字符串.列表或元祖中某个字符出现的次数,是一个很好用的统计函数.具体介绍请看本文. 1.count函数 统计列 ...

  2. PX4飞控中利用EKF估计姿态角代码详解

    PX4飞控中利用EKF估计姿态角代码详解 PX4飞控中主要用EKF算法来估计飞行器三轴姿态角,具体c文件在px4\Firmware\src\modules\attitude_estimator_ekf ...

  3. python 消息队列 get是从队首还是队尾取东西_python分布式爬虫中消息队列知识点详解...

    当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的 ...

  4. 飞控中加速度计数据fft分析

    加速度计原始数据高频噪声很严重,使用时需要设计合适的滤波器将其滤掉. matlab对加速度计原始数据,30Hz低通滤波之后的数据进行fft分析如下: clc;source=simout1; filte ...

  5. 十次方中的前端知识点随记

    1. 十次方中的前端知识点随记 好久没上传笔记了,主要最近的笔记都零零散散,知识点也不集中,就不传了:最近项目想用到前后端分离,而且前端我也想参与下,就先基本的学一遍,记点零星的笔记,各位能从中看到有 ...

  6. 备考通信复试过程中的一些知识点总结梳理——信源编码

    信息编码可以简要分为信源编码和信道编码,我们先来介绍信源编码.信源编码的作用就是将输出信号转变为适合于数字通信系统处理和传输的数字信号,主要目的是提高传输的有效性,降低原始信号的冗余度,通常对数据压缩 ...

  7. python中import re_python中re模块知识点总结

    一.什么是正则表达式? 正则表达式,又称规则表达式,通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合, ...

  8. TCP协议中的核心知识点,SYN Flood?ISN?滑动窗口?数据重传?拆包粘包?单tcp连接多请求?拥塞管理?(个人收藏学习笔记)

    TCP协议中的核心知识点,滑动窗口?数据重传?拆包粘包?单tcp连接多请求? 1.前言 2.TCP/IP四层结构 3. TCP 3.1 TCP 协议头 3.2 TCP通信过程 3.2.1 建立连接的三 ...

  9. python中统计函数_python中count函数知识点浅析

    python中,count函数的作用是进行python中的数量计算.count函数用于统计字符串.列表或元祖中某个字符出现的次数,是一个很好用的统计函数.具体介绍请看本文. 1.count函数 统计列 ...

  10. python 消息队列 flask_python分布式爬虫中消息队列知识点详解

    当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的 ...

最新文章

  1. [luogu 3773][CTSC 2017]吉夫特
  2. 韩梦飞沙-屏幕录像专家 win10 含注册机
  3. IDC_EDIT控件输入数字改变IDC_SCROLLBAR滑块位置
  4. 覆盖与重载与隐藏——SAP电面(3)
  5. linux 查看服务器作业,linux – 如何在服务器负载较低时运行作业?
  6. 转 Java jar (SpringBoot Jar)转为win可执行的exe程序
  7. 深度学习AI美颜系列---AI美颜磨皮算法一
  8. oracle下的数据库实例、表空间、用户及其表的区分
  9. 忘记MySQL密码以及无法登陆等解决办法
  10. iphone如何信任软件_如何在越狱后 iPhone 上多开软件?
  11. GNS3新手安装教程
  12. 一文吃透电源中的纹波、噪声和谐波
  13. upc 兔子与兔子(字符串Hash)
  14. 什么是机器学习?机器学习的工作原理是什么?
  15. 关于调研微信的几点理解
  16. 华为云OBS数据桶使用
  17. C++流操作练习:统计一篇英文(The_Holy_Bible.txt)文章中出现的单词和词频 并组成字典
  18. [转]一个人生活,如何摆脱孤独提升幸福感?
  19. 最简单判断工作日/节假日API
  20. 图片的高频与低频分量 初识 与 相关博客

热门文章

  1. 生成BDS卫星1和卫星2的B1C信号的数据分量主码、 导频分量主码和子码
  2. 数据同步:(开源)基于Flink的数据同步工具Chunjun
  3. java打包文件生成zip压缩包
  4. PHP刷步数,微信支付宝修改步数刷步源码/带卡密功能PHP程序
  5. Excel-制作简单的环形柱状图
  6. 如何使用lambda实现集合排序
  7. vue项目引入iconfont图标
  8. 微信群打卡小程序_签到打卡小程序,哪个更适合你?
  9. 完全自学C(干货) —— 结构体初识
  10. Vue-Treeselect三级动态加载