我正在制作四旋翼飞机。我已经建立了一个PID回路,以将其稳定到给定的欧拉角(俯仰和横滚)。当侧倾接近90度(45度及以上)时,就会出现问题。这些值不再有意义,因为它接近了万向节锁定。我打算使其进行复杂的操作,例如循环等,超过45度的滚动限制。

如何使用四元数来克服此问题? (我从MPU-9150获得了四元数。)我已经阅读了许多有关四元数的文章,但是他们都谈论3D软件中的旋转以及在两个旋转点之间进行补间。这一点意义不大,因为我不知道虚数和矩阵。

评论

您解决问题了吗?如果没有,请告诉我们进展如何,否则您可能想要接受答案之一。

@ marcv81是的,它现在运行良好:)感谢您提醒我接受答案:)

我很高兴它正在工作。这让我想到了自己的代码,也修复了一个错误:)

#1 楼

一个四轴飞行器包含(其中包括)两个独立的算法:姿态估计算法和控制算法。

姿态估计算法计算有关四轴飞行器方向的信息:侧倾,俯仰和偏航角。

控制算法负责驱动电动机,使四轴飞行器的方向与飞行员(或自动驾驶仪)的期望相匹配。该算法将读取估计的四轴飞行器角度(从姿态估计算法)并更改电动机速度以尝试匹配所需角度。 PID是一种适用于四轴飞行器的常用控制算法。

万向节锁定是一种姿态估计算法中可能发生的现象。它与控制算法无关。因此,您不需要电调,马达或螺旋桨即可测试万向节锁定:您可以修改代码以显示侧倾角,俯仰角和偏航角,并在手动移动四轴飞行器时测试是否计算出正确的值。您可能可以通过将四轴飞行器拴在计算机上,通过蓝牙或使用其他方法来完成此操作,具体取决于您的平台。

如果角度计算正确,则无需担心四元数。如果计算不正确,四元数可能会为您提供帮助。姿态估计算法应输出3个角度供控制算法使用,但是它可以使用不同的内部表示形式,例如四元数或3x3矩阵。在那种情况下,它将仍然将姿态信息转换为角度,以便为控制算法提供可用的数据。一般来说,四元数是不直观的,但计算效率很高。这使得它们非常适合于慢速平台,例如Arduino。对于更快的硬件,矩阵或角度可能是更容易的选择。如果您需要我详细介绍一种解决方案,请让我知道,但是由于我不相信您需要实施四元数,因此在此阶段提供详细信息还为时过早。

最后,如果正确计算了角度,则使四轴飞行器回路的方法是控制角速度而不是角度。如果您的摇杆代表四轴飞行器角度,则无法使其成一个完整的循环:尝试将摇杆的位置可视化为四轴飞行器回路,您应该理解为什么。但是,如果操纵杆控制角速度,那么您可以控制其循环速度。

您的项目祝您好运!

注意:为简单起见,我有在姿态估计算法和控制算法中都没有提及将数据作为矩阵或四元数进行操作的理论选择。我从未见过实现这种算法的四轴飞行器。

评论


$ \ begingroup $
感谢您的详尽回答! InvenSense的一名工作人员说,在大多数应用中,四元数比欧拉角更容易且更好。查看拴系的数据,似乎有可能在发生这种情况时校正一个轴以停止万向架锁定。
$ \ endgroup $
–金的朋友
2014年9月14日19:12

$ \ begingroup $
欧拉角对于定向的内部表示不是一个很好的选择。它们很容易可视化,但是很难正确操作以避免万向节锁定。四元数更好,因为您不会碰到万向节锁定,但是很难看到它们。矩阵在某种程度上比四元数更易于可视化,但是如果平台很慢,效率就不如四元数。我的四轴飞行器内部使用四元数,但可以转换为Euler角以供PID使用。
$ \ endgroup $
– marcv81
2014-09-15 10:54

#2 楼

首先,我认为您需要返回查看代码。万向节锁定只有在非常接近(几度)90度时才是问题。如果在45度时看到奇怪的行为,则可能是其他原因。

对于您的问题,四元数通常不直接用于基本PID控制,因为四元数具有复杂的行为,导致不直观的结果。通常,它们要么转换为Euler角度,然后用于常规PID控制器,要么设计专门的非线性控制器来使用它们。

请注意,对于循环操作,PID通常不是一个很好的控制器:在悬停时效果良好的增益不再在大角度下效果良好。通常,当某人想要进行循环时,他们会进入“开环”状态,即他们开始在控制下进行操纵,然后一旦超过某个角度,只需施加一系列固定的命令,直到完成循环。弄清楚要使用哪些固定的命令系列是棘手的部分,并且经常使用强化学习(类似于正式的反复试验方法)。

评论


$ \ begingroup $
感谢您的见解。我对裸机编程完全陌生。我只做过高级编程。尽管我刚读完高中,但我对物理和数学也很感兴趣,所以我还不知道太多...
$ \ endgroup $
–金的朋友
2014年6月20日19:27

$ \ begingroup $
我和一个朋友一起做,我们自己“发明”了PID回路。习惯了“正确”的答案,如果不知道这是解决问题的常用方法,我们很难使用它。当我们在Wikipedia上发现PID回路时,我们自己发明的PID回路被“批准”。
$ \ endgroup $
–金的朋友
2014年6月20日19:29

$ \ begingroup $
因此,我非常感谢您对在工作项目中通常如何完成工作的见解。当我查看序列表(code.google.com/p/serialchart)中的图形时,我正在谈论的奇怪行为表明了自身。输入是I2CDevLib(MPU-9150)的直接Euler输出。我会再测试一点。 “错误”可能是由我自己的不精确动作引起的。
$ \ endgroup $
–金的朋友
2014年6月20日19:34



$ \ begingroup $
滚动是蓝线。红色是偏航,绿色是俯仰,蓝色是滚动。如您所见,问题从pi / 4左右开始。这是I2CDevLib的问题,还是“应该”像这样? screencast.com/t/svPV3C8B我正在将陀螺仪绕着滚动轴旋转360度。
$ \ endgroup $
–金的朋友
2014年6月20日19:45



$ \ begingroup $
我看过AeroQuad即使被抛向空中也能稳定自己。这是因为它首先处理滚动,然后处理俯仰,然后处理偏航吗?
$ \ endgroup $
–金的朋友
14年6月20日在21:07

#3 楼

本文是埃米尔·弗雷斯克(Emil Fresk)和乔治·尼古拉科普洛斯(George Nikolakopoulos)撰写的四旋翼飞行器基于四元数的姿态控制,它演示了您正在尝试实现的目标。

为四旋翼飞机的姿态控制问题提出了一种基于四元数的新颖控制方案。
四元数是4级的超复数,可用于表示刚性时避免固有的几何奇异性

/>具有Euler角的人体动力学,或者将微分方程与方向余弦矩阵(DCM)耦合的复杂性。在提出的方法中,四旋翼的姿态模型和提出的非线性比例平方(P2)控制算法都在四元数空间中实现,没有任何
变换和在整个欧拉角空间或DCM中进行计算。
在本文中,正在对所提出的新颖方法的优点进行分析和讨论,而正在提出的新颖的基于四元数的控制器的有效性正在被研究和讨论。通过扩展的
仿真结果进行评估。


评论


$ \ begingroup $
感谢相关论文@ jgkim2020。但是你能详细说明吗?也许总结论文的发现? (链接最终可能会过时)。您可能还想看看如何回答
$ \ endgroup $
–Ben♦
16-2-20在15:54

$ \ begingroup $
我同意Ben-这篇论文的摘要非常棒,因为链接死亡通常会在一段时间后发生。
$ \ endgroup $
– Greenonline
16年2月20日在16:05

#4 楼

此MOOC免费课程欢迎使用TUMx的AUTONAVx!
飞行机器人的自主导航可能会有所帮助。它涵盖:


学习理论
在刺激器和实际硬件上运行的Quadcoptor编程


评论


$ \ begingroup $
链接无效。
$ \ endgroup $
–金的朋友
14年6月21日在11:14

$ \ begingroup $
如果您登录,则该链接有效。
$ \ endgroup $
–金的朋友
14年6月21日在13:27

$ \ begingroup $
Video 1.4演示了许多四旋翼飞行器,执行了惊人的动作。希望您对该主题感兴趣。
$ \ endgroup $
– EED
2014年6月21日13:35

$ \ begingroup $
可以检查FreeIMU软件,该软件可以提供:a)来自多个传感器(陀螺仪,罗盘,加速度计)的融合数据,与仅从芯片b读取原始数据相比,提供更稳定,漂移更低,更准确的数据)提供多种输出格式,包括俯仰,横滚和偏航,它们可能更易于可视化,理解和使用。
$ \ endgroup $
– EED
2014年6月21日13:42



$ \ begingroup $
谢谢您的帮助。我正在使用MPU-9150,它具有陀螺仪和加速度计的内置DMP(传感器融合)。将其与磁力计融合必须手动完成。
$ \ endgroup $
–金的朋友
14年6月21日在13:47