0

我有一个 GPS 跟踪日志,我已经注册了导航的航向(即对于每个记录的点我都跟踪航向)。据我观察,这个标题在 0 到 360 之间变化。所以,在日志中我们可以找到:

  1. 0.002
  2. 0.1
  3. 359.2
  4. 0.01

现在考虑第 3 点和第 4 点。显然,汽车还没有进行 360 度旋转。它只是在另一个航向轨迹上移动几度(0.81)。所以边距不是 abs(359.2-0.01) 或 abs(0.01-359.2)。我显然需要一种更复杂的方法来计算变化。我认为我需要计算 abs(359.2-0.01)=359.19 和下一个 360-359.19=0.81。我可以将其视为计算方向变化的标准操作方式吗?我在matlab上,所以也许有办法直接做到这一点?

4

2 回答 2

2

这可能会做你想要的:

mod(a-b+180, 360) - 180

例子:

>> f = @(a,b) mod(a-b+180, 360) - 180;
>> f(359.2, 0.01)
ans = -0.81000
>> f(0.01, 359.2)
ans =  0.81000
>> f(358.2, 359.2)
ans = -1
>> f(0.01, 1.01)
ans = -1
于 2012-04-23T08:34:18.207 回答
1

Oli Chalesworth 的答案如你所愿。还有一个 matlab 函数unwrap可以加减 2π 以最小化两点之间的相对角度。缺点是它期望角度以弧度为单位。

original_angles=[.002 .1 359.2 .001];
smooth_angles=180/pi*unwrap(original_angles*pi/180)

给出smooth_angles =

    0.0020    0.1000   -0.8000    0.0010
于 2012-04-23T11:47:56.493 回答