C
代码,以管理i2c
通信等。为了我的问题,让我们暂时假设整个机器人仅由一个IMU传感器组成。它神奇地运动(没有电动机在传感器测量中产生大量噪声)。从理论上讲,我的意思是我对解决该问题所涉及的数学和算法感兴趣。我所谓的IMU传感器可提供原始的加速度计,陀螺仪和磁力计测量结果。我们的微型机器人在台球桌(3569毫米x 1778毫米)上行驶。我相信这足够小,可以称之为2d。 **现在,传感器融合应该比3d更容易(更快,消耗更少的资源),对吧? **
我想测量速度,如果可能的话,还要测量位置。
对于速度,我的意思是在给定的时间点,我需要知道机器人在斯诺克台上移动的当前速度。速度在0-5 m / s的范围内。
对于位置,我的意思是在给定的时间点,我需要知道机器人在桌球台上的当前位置(x,y,前进方向)。 br />我希望这是可能的,因为机器人应该能够识别一些地标,并使用这些信息来减少位置误差。我们已经意识到,真实的传感器数据会产生噪声,并且错误会迅速累积。使用地标,我将/或将无法设法减少位置估计中的误差。但这不是我的问题的一部分。
我将要提高我的线性代数知识。因此,我有信心管理一些矩阵乘法,求逆等。附言一个小问题:我刚刚发现这个问题对于robotics.SE来说可能太理论化了。如果您知道任何更关注机器人技术的数学/算法方面的论坛,请告诉我。
#1 楼
陀螺仪为您提供了围绕每个轴的角速度。您只需积分这些值即可获得机器人的侧倾,俯仰和偏航。由于这是2D,因此您所关心的只是偏航,并且您将集成一个值。当然,有许多不同的方法可以整合从陀螺仪读取的值。最简单的方法是对陀螺进行采样,对采样加时间戳,并假定该值一直保持到下一个采样为止。这类似于积分的黎曼总和,并且采样率越高,精度越高。您可以在样本集之间使用更高级的插值形式,例如双线性插值,但是由您决定要走多远。加速度计为您提供沿每个轴的线性加速度。因为这是二维的,所以我们只关心沿x和y的加速度(我假设x指向车辆的正速度方向,y指向左侧,z是表格的法线)。同样,我们仅对这些值进行积分以获得速度,如果您选择第二次积分以获取位置。由于您要进行两次集成,因此会积累大量的错误。集成中的错误会随着随机游走而累积(请参阅:http://www.mit.edu/~kardar/teaching/projects/chemotaxis(AndreaSchmidt)/random.htm)。这意味着误差随着时间的增长而增加,约为sqrt(t)。第一次和第二次积分都将具有这种随机游动,这将进一步加剧您的误差。
磁力计在那里提供恒定的参考(北磁),以补偿陀螺仪的漂移。
本质上,您可以使用磁力计和陀螺仪在局部框架(在机器人启动位置处具有(0,0)的静态框架)中计算航向。加速度计可让您更改车架(其(0,0)原点固定在机器人上某处的动态车架)中的位置。您可以使用更新的航向和车辆框架中的位置变化来计算您在本地框架中的位置。 com / viewtopic.php?f = 14&t = 24226
编辑:我要提一下,要做到这一点,您需要的只是车轮上的编码器以计算位置和速度,并使用单轴陀螺仪测量航向。然后,您可以简单地使用三角函数,以及从编码器计算出的距离变化和与陀螺仪之间的角度变化,以获得x和y的变化。最好的陀螺仪可以连续使用数小时,而不会产生很大的漂移。添加磁力计也是一个很大的帮助。理想情况下,您应该将IMU用作“姿态航向和参考系统”,并使用编码器来计算行进距离和速度的另一个来源。如果您想要最精确的速度,则可以在将每个数据点按数据的1 /方差加权后,将数据加在一起,从而将编码器的数据与加速度的积分融合在一起。
评论
$ \ begingroup $
感谢您的回答。这对我来说很有意义。我将尝试一下,进行实验并向您报告。由于我已经解决了i2c问题testing-software.org/robotics/06_imu_sensor / ...,因此这将很快发生。
$ \ endgroup $
–tired_of_nitpickers
2014年5月4日15:10
#2 楼
使用IMU,您只能测量:加速度,旋转速度和磁场方向。您无法测量速度,只能积分加速度以推断速度。您可以想象,这会导致速度漂移,进而导致很多无限制的位置漂移。问题的三个部分: >从陀螺仪和指南针推断机器人的方位。如果机器人速度很慢,则可以忽略陀螺仪,而只需使用指南针。
从加速度计推断机器人的速度和位置
从“地标”调整位置估计>
2.的数学非常简单。如果dT是两次采样之间的时间,那么:1.的数学要复杂得多,因为我们将陀螺仪和指南针融合在一起。可以尝试以下操作:
accelerationInWorldCoordinates = accelerationInRobotCoodinates.rotate(-heading)
velocity += accelerationInWorldCoordinates * dT
position += velocity * dT
这里发生的是我们主要使用陀螺仪来更新航向,但是混入了一些罗盘读数以提供帮助长期保持稳定。
3(可能1)的数学难度更大。您正在寻找的是卡尔曼滤波器。该过滤器可以从多个来源获取信息,并生成机器人状态的最佳估计值,以及对其估计值的置信度。它与我们的1代码并无二致。实际上,您还会在Kalman过滤器中看到k和(1-k)。
Kalman过滤器的问题在于,在该主题上发现的内容往往对数学很沉重,而对于实际实施该课程的人们的实用建议却很少。
我学到的方法是通过康奈尔大学的卡尔曼滤池加注非常缓慢而谨慎地进行。我建议实施给出的示例并尝试使它们起作用。这篇论文(以及大多数其他论文)的烦人之处在于,它们通常不会告诉您算法中使用的各种矩阵的大小和形状,因此您必须手动解决这些问题。他们也没有告诉您太多关于协方差矩阵的含义或如何计算它的信息。在我的博客上进行过滤,但不要屏住呼吸。
评论
$ \ begingroup $
罐内填充pdf真的很有帮助!
$ \ endgroup $
– uhoh
17年9月24日在6:07
评论
如果仅使用一个传感器(IMU),则不会发生融合-您只需使用IMU为您提供的值即可。 IMU只是将来自加速度计的值进行积分以获取速度,然后对其进行积分以获取位置(每个位置都会累积误差)。我正在谈论的那种IMU仅提供原始加速度计,磁力计和陀螺仪数据(pololu.com/product/2468)。我以为其他IMU也会这样做。我相信原始传感器数据的融合是非常特定于应用程序的(假设您具有不同的应用程序)。
好的,我已经更新了问题以更好地反映您的追求。您是对的,它可以针对特定的应用程序。
@Ian-我确定这里正在融合。陀螺仪+指南针(+车轮里程表?)融合在一起,可以测量机器人的航向。还提供了加速度计+位置感应(+车轮里程表?)来测量机器人的位置。
马克,当您说“我想测量速度以及位置时”。你什么意思?您的意思是说,除了IMU之外,您还想要其他一些传感器来测量机器人的速度和位置。还是您想完全根据IMU数据推断速度和位置?