sobranie_1 发表于 2013-1-11 16:46

万能家电版,,专业问题又来了。。。

本帖最后由 sobranie_1 于 2013-1-11 15:50 编辑

MATLAB问题

比如我现在手头有一组GPS点的数据,是汽车传感器记录下来的,比如a(14.56,51.33)b(14.57,51.66)这样子,每秒记录一次,一组数据有20个点这样,我该如何用这些点的位置来判断出汽车是处于直行呢还是转弯呢??行驶方向可以通过2个点的经度纬度分别相减来判别。

之前我的算法太幼稚太NAIV了,我在判断出汽车的方向后,分别给这8个方向代入了1个数,比如东北方向是3,西南是5,然后来判断汽车是左转还是右转还是直行,说穿了就是根据汽车的行驶方向改变来判断。像这样的算法只能判定非常典型的十字路口转弯,因为90°变向嘛,但是有些特定情况就不行了,但是比如汽车从东北10°往东北70°转弯,我的程序就不知道了,因为方向没变。

现在我是想用斜率的变化率来判别汽车是否直行还是转弯,但是觉得很复杂,还在思考中,

有人能给我随便出个点子吗??一个思路也好。

sobranie_1 发表于 2013-1-11 16:47

祝大家周末愉快{:7_424:}

shrek_munich 发表于 2013-1-11 16:53

你都有行驶方向了,怎么会计算不出转向.....
不过你行驶方向的计算也太粗糙了.....

老湿不给力 发表于 2013-1-11 17:07

本帖最后由 老湿不给力 于 2013-1-11 16:29 编辑

建立一个puffer,每获得一个gps数据,就把纬度坐标除经度坐标,把结果跟puffer里的数据比较,如果相同就是直行,如果不同就表示汽车拐弯了,然后把最新的数据存到puffer里,让下一组再来比较。
a(14.56,51.33)b(14.57,51.66)
a: 51.33/14.56=3.525
b: 51.66/14.57=3.545
基本可以判断车子拐了

JonnySun 发表于 2013-1-11 17:10

本帖最后由 JonnySun 于 2013-1-11 23:29 编辑

这是我的第一想法:直走的话各坐标的变化率应该大体相同,或者说在一个Toleranz里,你可以用类似即时变化值和平均变化值相比,时间单位10秒一个间隔(如果GPS更新够快),不超过最大变化值为直行,超过最大变化值数值为正则是左拐,反之又拐,若是反向行使的话就用另外一个大case倒过来判断,有必要的话要建立矩阵来模拟GPS坐标

想法2:两坐标建立向量,求夹角,然后你直接设一个边界角度,绝对值大于了就是拐弯了,正负判断左右拐弯

v1=;%示范一下,具体赋值和获取值需要你自己规划
v2=;
aa = acos(dot(v1, v2)/(sqrt(sum(v1.^2))*sqrt(sum(v2.^2))));
aa = angle(complex(14.57-14.56 , 51.66-51.33)) - angle(complex(X-14.57 , Y-51.66)) ;
subspace(v1', v2')

crazymoon 发表于 2013-1-11 17:18

算夹角啊。。。

劈马甲 发表于 2013-1-11 17:48

总得有个定义吧,什么时候算abbiegen,什么时候只能算是kurve?

moudy 发表于 2013-1-11 21:52

劈马甲 发表于 2013-1-11 16:48
总得有个定义吧,什么时候算abbiegen,什么时候只能算是kurve?

还有换道也得考虑

zff518 发表于 2013-1-11 22:53

就是一串向量啊,第二个向量(a+b)减去第一个向量(a)=(b),然后求(a)(b)夹角就可以了

zff518 发表于 2013-1-11 22:56

然后嫩这个最好先Extrapolation一下,然后把之前采样点和extrapolieren出来的点做一下smooth,好补偿GPS的误差

或者用别的算法也可以
页: [1] 2
查看完整版本: 万能家电版,,专业问题又来了。。。