图片缩略图

GyroLib - AHRS库

版本1.2.1.0(1.86 MB) Vlad Maximov.
GyroLib是一个免费的、开源的姿态和航向参考系统(AHRS)库
5.0
7评级

24下载

更新2018年8月20日

视图版本历史

查看许可协议

GyroLib是一个免费的、开源的姿态和航向参考系统(AHRS)的Matlab库。
它包括几种基本算法,允许确定配备加速度计和陀螺仪和陀螺仪的装置的方向,以及矢量磁力计:
——三位一体的算法;
- Quest算法;
- 带互补卡尔曼滤波器的AHRS算法。
提供来自MEMS IMU的测试数据的录制以估计现实生活中的算法性能。

引用作为

弗拉德Maximov(2021)。GyroLib - AHRS库(//www.tatmou.com/matlabcentral/fileexchange/63250-gyrolib-ahrs-library), MATLAB中央文件交换。检索

评论和评级(32

托马斯。

Abderahman Azibou

你好弗拉德,
我和之前的Milad想问同样的问题?
如果你能澄清这个混乱。dWb反映的是原始陀螺仪测量或陀螺仪值的积分?
非常感谢。

米拉德·纳萨哈拉

你好弗拉德,
感谢分享这些伟大的代码。
我有一个简单的问题:我有一些真实的IMU数据,我想知道这是什么意思
“dwb -角速率矢量在计算机周期上的积分”对于“ahrs_quat”函数?
它是陀螺仪的原始输出(rad/s)或陀螺仪*dt或其他东西?
谢谢您抽出时间

Vlad Maximov.

嗨,特伦斯,谢谢你指出了H bug,我会尽快发布更新:)

Terence Kratzer.

你好Vlad,谢谢你的响应-实现了,看起来不错-它实际上只是让我在AHRS_quat代码中找到一个潜在的bug:在第92行计算S时,第二个H没有转置-可能没有被发现,因为它们是方阵。AHRS_dcm没有这个问题。
为了回答你的问题,我有不同特性的磁力计,我希望卡尔曼滤波器使用最合适的磁力计给定当前的动态。多谢了。

Vlad Maximov.

嗨,特伦斯,
不客气修改代码很容易,H会得到额外的3行,R会在对角线上得到3个新成员。A F G Qn不会改变,因为它们描述了陀螺仪的误差动力学,在这个简单的实现中,它们不依赖于任何方式的测量模型。例如,如果你想把磁强计和加速度计的误差加到状态矢量中,那么这些矩阵显然会改变。顺便问一下,你为什么需要一个额外的磁力计?我们只有一个磁场矢量,两个磁力计将测量相同的东西…

Terence Kratzer.

嗨,Vlad,感谢你为这个优秀和清晰的图书馆。对于增加一个3轴磁力计,总共3个测量输入,你有什么修改建议吗?显然,测量矩阵H和R现在是9x9附加测量,但A, F, G和Qn如何变化?

Vlad Maximov.

当然,只需评论“磁力计”测量有关的测量载体V和矩阵H的部分(4:6)。严格上没有“磁场”和“重力”矢量在那里 - 只有两个非共线载体。如果你只留下一个矢量 - 例如,“重力”,那么指向,你将保持能力纠正态度的水平分量,但会松动标题校正。

亚当•希尔

可以修改此代码或它的输入(特别是MB和Mn)以处理没有磁力计的IMU?

穆罕默德阿兹

易卜拉欣Seleem

您好,感谢您为这个功能所付出的努力。

我需要知道如何确定这两个参数:

身体框架中的%FB - 加速度向量[3x1]
体框中的%MB - 磁场矢量[3x1]
% fn -导航框架中的重力矢量[3x1]
% mn -导航帧中的磁场矢量[3x1]

我的传感器阵风产生加速[斧头,ay,az],陀螺仪[gx,gy,gz]和磁力计数据[mx,my,mz]

Vlad Maximov.

嗯,我的评论已经传开了……
设置BW = BW + x(1:3,1)并不权利;
检查当滤波器发散时协方差矩阵是否仍然是正定的;
尝试将P = (P+P')/2添加到代码中;
调整滤波器的系统噪声和测量噪声;
使用[DWB,Q,DT,Q_INIT,FB,MB,FN,MN,BW]生成小时长测试数据= Reference_Data_Spin_cone并检查它是否发生;

Vlad Maximov.

P = (P + P) / 2

费利佩•施奈德

我已经做了一些测试,我相信ahrss_quat .m内部的陀螺偏差更新有一个错误。
如果你试图估计一个非移动物体的方向超过(大约)45分钟,估计(四元数)将发散,所以陀螺偏差估计。

如果移除了陀螺偏差更新,这样的误差也被移除了。问题是,偏差更新是一个非常重要的工具,因此,我尝试了一些解决方案,其中一个似乎是改变原来的bw = bw+x(4:6,1);金宝搏官方网站To bw = bw+x(1:3,1);
但我不知道这是否正确。
如果你们有关于它的任何信息,我会非常乐意倾听。

Vlad Maximov.

严格地说,加速度计不能测量重力-它只能测量施加在物体上的主动力。但只要我们支撑这个物体不掉下来-这是金宝app我们的主动力。所以-如果我们的物体静止或者没有恒定速度的加速度那么通过观察这个阻止我们下落的主动力我们可以估计出重力矢量指向的方向-这就是AHRS所需要的

Vlad Maximov.

嗨,露西
为了估计一些物体相对于一些导航帧的态度,我们需要测量对象坐标帧的轴上的两个非共线矢量的投影,并且我们需要了解在导航帧的轴上的相同矢量的相应投影。地球上我们有两个漂亮的矢量 - 重力矢量和磁场矢量。这两个矢量都有地图,特别是在Simulink的航空航天块集中。金宝app
如果你想让事情变得简单,只要把你的设备放在水平面上,把它的X轴指向北方,将加速度计和磁力计的读数平均一段时间——这些值将成为你的导航框架投影。重力应该接近[0 0 -1],当然,但磁场矢量看起来不会像[1 0 0]-这取决于你在地球上的位置:)我用[1 0 0]作为例子!

欢呼,弗拉德

露西

嗨Vlad,我可以在这里提出一个关于kf的问题吗?因此,测量真值是我们已经知道的[0 0 -1]和[1 0 0]的像地球框架中的重力和MAG矢量,所测量的是地球框架中的这两个矢量,使用身体转移到地球框架四元数和加速度计测量。我的问题是我们如何知道哪个向量是身体框架中的重力矢量,只需使用加速度计?非常感谢 !

Vlad Maximov.

嗨兰德,
当然,陀螺仪是用来测量动态运动的。陀螺仪的单位是rad/sec,单位是acc和magn不是那么重要,因为这些矢量在算法中是标准化的-我们基本上只需要这些矢量指向的方向,以纠正姿态。
欢呼,弗拉德

兰德米兹腊希

嗨Vlad,你的代码是否工作,即使陀螺仪在动态运动期间打开?
陀螺仪的单位是什么,acc和磁力计?
谢谢,兰德

费利佩•施奈德

我的意思是,你的传感器的方向是x, y, z在矢量中的位置。

费利佩•施奈德

这里有一个由gyrolib生成的图2的链接:https://ibb.co/dksHdT
描述:传感器具有相对稳定的辊轴,同时转动间距和偏航轴。

费利佩•施奈德

你好弗拉德,
我的意思是欧拉角。目前,我正在努力调整和理解您的代码。我注意到的一件事是你的传感器的方向可能与我的不同。你能告诉我你的传感器的方向是什么(Gyro,Acc和Mag)?

Vlad Maximov.

嗨,菲利普,

你的旋转是什么意思 - 它在动画中看起来的方式,或欧拉角迹象?

你好,瓦尔德,又是我。
我一直在使用和做一些基准你的解决方案,我已经发现了一些东西,不是我所期望的,也不存在于其他融合方法,如Mahony等,Madgwick等,BNO055专有的融合算法…

事情是:
沿Z轴旋转CW板(偏航)给我一个正旋转(正导数),然而,如果改变俯仰到一个极限(我们说90°),旋转CW板沿Z轴(偏航)给我一个负旋转。

我不能在这里添加图片,但如果你感兴趣,我可以通过电子邮件或类似的东西更详细地解释这一点。

问候,菲利普。

Vlad Maximov.

嗨,菲利普!不,抱歉,我没有在AHRS上写过,所以你可以随意使用它。或者你可以引用这个地方https://sites.google.com/site/gyrolib/home如果你真的需要它。
欢呼,弗拉德

费利佩•施奈德

再问一次,在使用这个代码时,有什么学术论文可以引用吗?

费利佩•施奈德

嗨Vlad,谢谢你的快速和正确的答案。
分析你的新功能,我意识到我的错误是没有正常的加速度计和磁力计数据。

问候,菲利普。

Vlad Maximov.

嗨,菲利普!
我添加了test_ahrs_quat_data函数,允许用真正的传感器数据测试ahrs_quat算法,您可以像这样运行:[euler_,bw_,angles_] = test_ahrs_quat_data(dwb,fb,mb,fn,mn,dt);
欢呼,弗拉德

费利佩•施奈德

抱歉,我应该说得更具体一些:我正在加载fmt_1010。垫和运行:

P = 0 (6,6);
P(1:3, 1:3) =诊断接头([1依照1依照1依照]);百分比姿态误差
P(4:6 - 4:6) =诊断接头([1 e-6 1 e-6 1 e-6]);%陀螺偏置误差,单位为rad/s
q =[1(长度(Mb),1) 0(长度(Mb),3)];
bw = [0.01;-0.01;0.01]
因为我= 1:长度(Mb) 1
问(我+ 1,),P2, bw) = ahrs_quat (q(我:),P, bw, dWb(我,:),Fb(我,:),Mb(我:)、fn、锰、dt);
结束

费利佩•施奈德

使用ahrs_quat提供的数据。M或任何其他调用它的函数会给我这样的信息:

警告:矩阵是单数,接近单数或严重缩放。结果可能不准确。RCOND = NaN。
> In ahrs_quat (line 93)
在ahrs_quat(第93行)中

P矩阵是正无穷这样它就不再可逆了。你能看看那个问题吗?

问候,菲利普。

Weic伊利

Arkadi

Matlab释放兼容性
用R2016B创建
兼容任何释放
平台的兼容性
视窗 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区可以如何帮助您!

开始狩猎!