我有一个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消息,但似乎没有一个给我。我想念什么?如何获得这些方向速度?
谢谢!
答案 0 :(得分:0)
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测量位置,并使用加速度计测量方向/加速度。由Kalman滤波器估算在 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
这不考虑侧倾和俯仰。要考虑滚动和俯仰,您可以看看Wikipedia上的rotation matrices或quaternions。
通常在VTG telegram GPS输出中找到速度。它并不总是输出。 GPS必须具有该功能,并且必须在GPS上启用它。也可以使用RMC电报。
来自GPS的速度通常非常嘈杂,这就是为什么通常使用卡尔曼滤波器而不是使用上述方法将相对于身体的速度转换为NED速度的原因。 GPS速度可以在更高的速度下正常工作。