【问题标题】:How to get NED velocity from GPS?如何从 GPS 获取 NED 速度?
【发布时间】:2019-04-06 23:22:43
【问题描述】:

我有一个 Adafruit Ultimate GPS 模块,我正在尝试将它与 BNO055 IMU 传感器融合。我正在尝试关注https://github.com/slobdell/kalman-filter-example 这个卡尔曼过滤示例。尽管他的大部分代码都很清晰,但我查看了他的输入 json 文件 (https://github.com/slobdell/kalman-filter-example/blob/master/pos_final.json) 并看到他正在从 GPS 模块获取向北速度、向东速度和向下速度。我查看了 NMEA 消息,但似乎没有人告诉我。我错过了什么?如何获得这些方向速度?

谢谢!

【问题讨论】:

    标签: gps velocity kalman-filter


    【解决方案1】:

    pos_final.json 不是输入文件,而是输出文件。输入文件是 taco_bell_data.json,可以在 tar.gz 存档中找到。它包含以下变量:

    "timestamp": 1.482995526836e+09,
    "gps_lat": 0,
    "gps_lon": 0,
    "gps_alt": 0,
    "pitch": 13.841609,
    "yaw": 225.25635,
    "roll": 0.6795258,
    "rel_forward_acc": -0.014887575,
    "rel_up_acc": -0.025188839,
    "abs_north_acc": -0.0056906715,
    "abs_east_acc": 0.00010974275,
    "abs_up_acc": 0.0040153866
    

    他使用 GPS 测量位置,使用加速度计测量方向/加速度。 pos_final.json 中的 NED 速度由卡尔曼滤波器估计。这是卡尔曼滤波器(和其他观察者)的主要任务之一:估计未知量。

    GPS 通常会输出速度,但它们将相对于物体的主体。如果您知道身体的方向(滚动、俯仰和偏航),您可以将身体相对速度转换为 NED 速度。假设您有一架无人机以航向 030° 移动,并且 GPS 显示前进速度为 1 m/s,无人机将具有以下北速度:

    vel_north = 1 m/s * cos(30°) = 0.86 m/s
    

    以及以下东速度:

    vel_east = 1 m/s * sin(30°) = 0.5 m/s
    

    这没有考虑滚动和俯仰。要考虑滚动和俯仰,您可以查看维基百科上的 rotation matricesquaternions

    速度通常在 GPS 输出的VTG telegram 中找到。它并不总是被输出。 GPS 必须具有该功能,并且必须在 GPS 上启用。也可以使用 RMC 电报。

    来自 GPS 的速度通常非常嘈杂,这就是为什么通常使用卡尔曼滤波器而不是使用上述方法将身体相对速度转换为 NED 速度的原因。不过,GPS 速度在更高的速度下也能正常工作。

    【讨论】:

    • 你确定 pos_final 是输出文件吗?因为如果您查看他的代码,他正在读取该文件并将这些值输入到卡尔曼滤波器中。但是感谢其余的解释,似乎澄清了一些事情!
    • @ShantanuMhapankar 你说得对,我草草下结论。我阅读了自述文件,但此后代码发生了变化(没有更新自述文件)。在原始代码中,它几乎就像我写的一样。根据this 的帖子,作者后来添加了来自 GPS 的速度。我无法理解多普勒频移代码,所以我无法对此发表评论。速度通常由卡尔曼滤波器估计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多