各位四轴飞控姿态数据显示的大佬们,四元素姿态解算的参数KI,KP该如何调节。是四元素解算的,不是PID的

鉴于现在飞控的热度不减当年,越来越多“年轻人”加入飞控制作学习的阶段,也有许多新手上来就气势汹汹的进行姿态解算,往往使用的就是较为常用的Mahony的互补滤波姿态解算,笔者在多年前也一样,最开始接触的就是这个算法,但是当时懂得马马虎虎,直接把数据丢进去之后就得到了解算好的四元数,之后按照网上的公式一转换就OK了,但是后来才发现,当你的飞控出现问题的时候,大多数的时候,不见得是控制问题,有时候确实是因为姿态解算不好,所以今天就特别的对这个算法进行讲解,引用一个最近看到的:我希望这篇博客可以帮助到一些人。

说是概念,其实确切来讲是应该弄清楚的事情:
1、姿态解算中的传感器的特性。对于加速度,其大小使用三角公式得到一个角度(笔者这么干过,确实行之有效),但是这个角度在旋转瞬间是十分不稳定的,例如在水平面转到10度左右的时候,这个角度很可能超过20度,之后会慢慢回到10度,即所谓的“短期不稳定,长期稳定”;对于角速度,可以通过“角度=∫角速度dt”这样的公式得到角度,但是这样做的时候会发现当在瞬间旋转的时候,得到的角度差是准确的,但是一旦长期不矫正这个角度,这个角度就会远远的偏离实际的角度,即所谓的“短期稳定,长期不稳定”;而磁力计的特性就偏好,短期和长期都可以很稳定,但是在飞机倾斜的时候,原本的磁场数据就会变得不准确,需要校准。
2、姿态解算中谁是主角。在接触飞控之初,我觉得加速度应该是主力(当时还不知道yaw轴长期的漂移现象),毕竟他的数据是长期稳定的,但是很遗憾,在当下接触到的姿态解算算法,大多数是以角速度作为姿态解算的主角,这点希望初学者要谨记在心。
3、DCM矩阵(方向余弦矩阵),这个名词对于飞控的“高阶玩家”确实不应该感到陌生,但是对于初学者,可能知道更多的是四元数,但是笔者在这里还是要说一下,在姿态解算中,甚至到后面的定高、定点算法中,DCM矩阵都会起到很大的作用,而不是四元数。简单的来讲,DCM矩阵的作用就是把A坐标系的数据旋转到B坐标,举个简单的例子,你可以通过DCM矩阵把机体上的三轴加速度计数据旋转到世界坐标系下。

// 第一步:对加速度数据进行归一化 // 第二步:DCM矩阵旋转 // 第三步:在机体坐标系下做向量叉积得到补偿数据 // 第四步:对误差进行PI计算,补偿角速度 // 第五步:按照四元数微分公式进行四元数更新

以上就是网上比较流行的姿态解算程序,在此笔者把最精华的部分截取出来进行大概的讲解,在笔者心里,这个算法主要分为五个步骤:
1、对数据的规范化(注意,这里是规范化,程序注解是归一化),什么意思,就是对于姿态解算来讲,数据是要在使用这个算法之前进行标度变换的!首先是角速度,大部分的传感器输出的角速度是“度每秒”,但是实际上,角速度的国际单位是“弧度每秒”,这点是一定要注意的,当你直接拿着传感器的原始数据进行算法实现的时候,会发现输出的四元数就不稳定,一直在变化;再次是加速度,加速度在传入这个算法之前,可以转化为以m/s/s为单位的数据,但是也可以不用,因为在算法内部,加速度的数据被归一化了(这个归一化是很重要的),所以并没有太大影响。
2、标准重力加速度旋转到机体坐标系,
由上图可以看出,算法中第二步的时候,直接使用了DCM矩阵的第三行,这点对于初学者可能百思不得其解,但是如果写为矩阵与向量相乘就很清楚了,即vectorA=matrixC*vectorB,在该算法里面,matrixC是图中所示矩阵的转置(因为图中的矩阵为机体坐标转世界坐标,其转置就是世界坐标转机体坐标,这是DCM矩阵的性质之一);vectorB是标准的重力加速度(0,0,1),使用标准的重力加速度是因为在机体运行过程中,在世界坐标系下(即以人的角度去观察机体坐标系的话),只受到垂直向下(Z轴)的力的作用,这个力就是重力,加速度为9.8m/s/s,而xy轴不受到力的作用,所以数据是0,注意,这里的标准加速度使用归一化之后的值,这样的使用是用深意的,读者将会在第三步体会到;最后vectorA就是我们得到的标准重力加速度在机体坐标系下的映射啦,读者可以在纸上进行上述公式的演算。
3、对机体加速度与标准加速度的映射进行向量的叉乘,得到补偿量,这一步可以说是本算法中最精髓的部分,我们都知道,向量具有点乘和叉乘两种运算,点乘公式为A·B=|A||B|*cosθ,叉乘的公式为A×B=|A||B|*sinθ,其中θ为两个向量之间的夹角,这两个运算的实际的意义读者可以自行查看,这里不再赘述,这里只说在本算法中,A和B是两个单位向量,因此其模为1,所以这样的公式下来就只剩下sinθ了,而在数学上,当θ极小的时候,sinθ是等于θ的,因此这里的公式走下来之后就得到了机体坐标系下实际加速度向量与理想加速度向量之间的差角,下面的算法使用这个差角作为偏差进行PI运算,补偿角速度,这里要特别解释一下,假如我们没有修正角速度,则四元数会因为角速度的漂移而漂移,因此得到的DCM矩阵也会漂移,这时候标准重力加速度在机体坐标系下的映射也会漂移,但是加速度计的数据是长期稳定的,它会与漂移之后的映射不重合,两个向量之间就会产生角度差(由于时间很短,认为是角速度),使用这个角度差矫正角速度数据,就会使抑制角速度长期不稳定,得到准确的四元数。这里建议读者对两个向量的叉乘在纸上进行演算加深印象。
4、PI运算,这里特别强调一下,因为飞行器在飞行过程中机架的震动很容易传到传感器上,加速度又因为短期不稳定,十分容易受到这样震动的影响,变得不稳定,所以在矫正角速度的时候,PI值不易过大,一般P值小于1,I值小于0.01,当然,如果防震措施较好,则可以适当大一些。
5、四元数的微分公式,读者可以自行到网上或者书上找到,这里不再赘述。

}
再次谢谢!能有人讨论真的比自己一个人百度到处乱看各种资料好多了
花了点时间看了下STC的那个四轴代码,感觉......并没有豁然开朗的感觉,我没看他的遥控信号部分,所以不是很了解那个遥控AD值,还有就是,那个PID运算的积分项和微分项都没有时间项dt或者PID控制运算的周期T,这里我不认为是可以忽略的。
Besides,他这个四轴好像是“十”字型的,不是"X"型的.....
我预想的对象是“X”型大四轴,也就是电机是由电调控制的,电调从飞控得到的控制信号假定为400hz的PWM信号,四个(横滚roll,俯仰pitch,偏航yaw,油门throttle)通道的PWM信号的高电平脉宽表(1~2ms)征通道控制量。
1.我注意到你在回复里说,PError_pitch直接等于当前该轴的角度,“该轴的角度”是指该轴PID控制运算的输入偏差角,对吗?(根据后面的程序,PError_pitch与P值相乘)一开始还以为你说的是当前姿态下该轴欧拉角。
2.angle_X(角度补偿是飞起来后你需要打一点摇杆才能让四轴水平的值)——你这么说,还是不太理解。这个角度来自遥控器吗?还是类似于航模固定翼的那个遥控器校准吗?(这个遥控器上的校准,使得舵机处于平衡位置(如副翼不平,调节遥控器该通道的基准值.....))
3.对了,按你这样写的PID控制,你的四轴(小四轴)能飞吗?
我将你的这段程序重新注释并理解了一下,您帮看下对不对:
测量值)+X_angle(来自遥控俯仰通道的控制量,由控制量以一定系数转换得到的某个角度,此即期望值)+angle_X*-1(这个我不太理解)
}

姿态解算是飞控的一个基础、重要部分,估计出来的姿态会发布给姿态控制器,控制飞行平稳,是飞行稳定的最重要保障。有关姿态解算的基础知识,这里笔者不会细细描述,有关这方面的资料,网上已经有很多。主要是先掌握坐标系的概念、姿态角的几种描述方法(欧拉角、四元数、旋转矩阵)等。

姿态解算的难点主要在于,消费级飞控上一般所选用的惯性传感器,都是mems器件,精度相对较差,同时陀螺仪、加速度计、地磁计单个传感器无法得到满意的姿态角信息,所以需要一些融合算法,进行姿态估计。

首先,如何测量姿态解算的精度?

很多人都会有这个困扰,就是没办法确定所得到的角度的精确程度。一般用外部参考的方法测量,比如飞机上同时挂载自己的飞控以及高精度的IMU设备(比如xsens、sbg等),飞行完成后,对比自己飞控所解算的角度和外部设备的误差;又或者,在室内装vicon设备来给出外部参考。

笔者手上没有精确的外部设备,所以本文不能得出结论哪种算法的好坏,只是提供大概思路。

采用开源PX4飞控,进行姿态模式飞行,取出飞行数据,注意,验证算法的时候,最好还是用实际飞行的数据,否则加速度噪声对算法的影响无法验证,同时,这里的角度参考仅是px4飞控所解算得到的角度,不能算高精度参考,数据曲线:

1.看一下单独的陀螺仪积分角度与加速度计算出的角度各有什么问题?

陀螺仪角度:就是对角速度数据进行积分;

在matlab中编写m代码进行验证对比。

如上图所示,蓝色的陀螺积分角度随着时间会有漂移,而加速度计得到的角度则噪声很大,都无法使用。

由于单一传感器获得角度都有缺点,一个动态精度好,一个静态精度好,很自然联想到互补滤波,即通过调整一个加权系数,如果陀螺仪所占的权重大些,则解算的角度则跟陀螺角度近似,加速度类似。

a为0.95的曲线如下:

a为0.3,曲线如下:

综上所看,固定增益a,无论如何调整,性能总是不尽理想,陀螺仪的权重大了,动态性能还可以,大致能跟上角度,但是不能静态保持,当没有角速度时,角度也收敛了;加速度权重大了,噪音大,另外动态性能差,100s左右的来回打杆,所得的角度基本没有变化。

如果权重参数可变呢?也就是如果角度变化大时,更相信陀螺,否则则更相信加速度的角度。

如图所示,虽然动态精度看上去好了,但是当静态的时候,还是不能达到满意效果。另外,图中可以看出,加速度的角度所保证的静态精度是有延迟的。

PX4飞控早期的姿态解算有一个SO3版本,其算法其实就是网上常见的mahony算法。算法原理:根据加速度计和地磁计的数据,转换到地理坐标系后,与对应参考的重力向量和地磁向量进行求误差,这个误差用来校正陀螺仪的输出,然后用陀螺仪数据进行四元数更新,再转换到欧拉角。

该算法能得到大概的角度。至于哪个更准确,这里无法判断。不过俯仰角,在40s左右的一段,这时候飞机姿态是回平的,但是解算有误。

卡尔曼滤波是非常常用的状态估计算法,相关的理论介绍有很多,这里不赘述了。有一点要注意,就是你的状态方程和量测方程的模型不一样,效果肯定也是不一样的,卡尔曼滤波只是理论,具体怎么用还得看具体情况,效果也是看所建的模型。

状态量分别是俯仰角、滚转角以及对应的角速度偏移。

两者曲线差不多,认为可以使用。

算法的具体步骤,可以参考:

1、怎么用卡尔曼进行融合?模型哪里来?

建模一般则是根据物理规律进行定的,运用现成的数学理论,如果不是很了解,可以参考一些论文

2、卡尔曼如何调参数?

简单来讲,就是重点调R矩阵参数,一般取数据,用matlab看曲线

很多人用同样的代码,输入数据后,运算的结果不对。一般主要原因就是正负号不对应,要对好数据的坐标系,就是正负号,不知道的话,本办法就是试凑。

4、数据质量对解算的影响?

最后那个数据曲线就是手晃的数据,不是直接飞行的,加速度噪音小。数据质量一般关心的是加速度的数据,起飞后,加速度噪音比较大,可能你在地面测试,觉得姿态角算的挺准的,但是一起飞就不行了,这时候需要回过头来处理加速度数据,怎么处理?涉及到滤波方面的知识,后续会简单讲讲。

5、卡尔曼滤波好在哪里?

主要是因为一般的互补滤波,权重参数是固定的,而卡尔曼本质也是调整权重参数,但是是时变的,不过计算量相对较大

动加速度对姿态解算影响较大,因为你的陀螺是靠重力加速度向量去校正的,一旦运动的加速度大了,则会影响参考,自然也算不准了。普遍的方法是会融合GPS的速度算加速度

这篇文章只是简单描述了一些常用的姿态解算算法,并不直接点明好坏,没有参考数据,不太好分析。有的一些没有给出推导过程,读者可以自己推导。一些理论也请自行查阅相关文献。后续也会讲解下卡尔曼滤波等内容。

}

我要回帖

更多关于 飞控姿态数据显示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信