万能家电版,,专业问题又来了。。。
本帖最后由 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°转弯,我的程序就不知道了,因为方向没变。
现在我是想用斜率的变化率来判别汽车是否直行还是转弯,但是觉得很复杂,还在思考中,
有人能给我随便出个点子吗??一个思路也好。
祝大家周末愉快{:7_424:} 你都有行驶方向了,怎么会计算不出转向.....
不过你行驶方向的计算也太粗糙了..... 本帖最后由 老湿不给力 于 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 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')
算夹角啊。。。 总得有个定义吧,什么时候算abbiegen,什么时候只能算是kurve? 劈马甲 发表于 2013-1-11 16:48
总得有个定义吧,什么时候算abbiegen,什么时候只能算是kurve?
还有换道也得考虑 就是一串向量啊,第二个向量(a+b)减去第一个向量(a)=(b),然后求(a)(b)夹角就可以了 然后嫩这个最好先Extrapolation一下,然后把之前采样点和extrapolieren出来的点做一下smooth,好补偿GPS的误差
或者用别的算法也可以 又想了一下,我上边说的那个没啥意义,LZ不用考虑了 行驶方向都有了,判断转向不是很显然的吗?
你先用经纬度计算出每一个坐标点的行驶方向,用角度表示(0-360),如果角度有跨过0/360,要减去360防止角度不连续。由角度的初末值可以知道有没有转向。然后对角度差分,设定一个误差值,比如小于1度,认为是误差或者换道。每次差分出现大于1度正值,就是左转向,反之右转向。 不知道楼主要干什么' 俺车子上dsc就是计算斜率变化率 我的任务就是,比如说给我1000组车载GPS点在过十字路口时候的PUNKT信息,我用matlab直接可以表示出这1000组数据里,哪些是车子左转,右转,或者直行。
行驶方向都有了,判断转向不是很显然的吗?
你先用经纬度计算出每一个坐标点的行驶方向,用角度表示(0-360),如果角度有跨过0/360,要减去360防止角度不连续。由角度的初末值可以知道有没有转向。然后对角度差分,设定一个误差值,比如小于1度,认为是误差或者换道。每次差分出现大于1度正值,就是左转向,反之右转向。
谢谢deadsee,我其实也是这么想的,但是我又考虑到有些道路是弯的,比如彩虹型的道路,那这样的话在过十字路口之前可能matlab就会判断他在转弯了,,关键这个值有点难设定。
{:3_258:}谢谢各位帮忙,感激不尽,我还在考虑怎么做 这个取起始点,中点和终点gps坐标,做一个简单的比较不就完了么。 gps数据那么粗糙,误差太大,怎么可能面面俱到?
页:
[1]