本帖最后由 神车名为GTR 于 2018-12-24 16:19 编辑
写在前面:
没发过技术贴,今天发一下,害怕一个小菜鸡版主无作为哪天被大佬踢出群了,by the way为初试攒人品……
就我个人而言,与其看别人的代码,不如告诉我算法思想,让我自己写。所以下面只说算法的思想(虽然很简单),具体如何实现各位大佬自由发挥;另外,标题打码也是想着不能限制了大佬们的应用思路。
正文开始:
曲率计算A方案:(三角形外接圆曲率法)
此方法据说在智能车上的应用最早出自东北大学的技术报告(本人未验证),即在一组离散点中选取三点,计算以此三点所围成的三角形的外接圆曲率即可。示意图及公式如下:
个人评价:显然,该方案实现起来较为简单,但三点选取位置可能会对计算结果造成较大影响。
曲率计算B方案:(公式法) 学过高数都知道曲率公式吧(贴下面了),另外,离散点的一阶导、二阶导公式想必也没什么难度吧?
求解一阶导数的公式:y'(i) = (y(i+1)-y(i))/h; (y(i)处y'(i) = △y(i)/△x(i)) 求解二阶导数的公式:y''(i) = (y(i+1)+y(i-1)-2*y(i))/h^2; (两处h为△x(i))
个人评价:这种方法实现起来也较为简单,但在计算局部位置曲率时很容易受到毛刺的影响。
曲率计算C方案:(定义法)与B略有区别 根据曲率定义,弧 的切线转角 与该弧长 之比的绝对值称作该弧的平均曲率(摘自百度百科),写成数学公式如下:
其中,高中生应该都知道,某点切线转角 (或者说某直线与x轴夹角)与该点斜率有关,即
曲线在点M处的切线的斜率为(此处建议用最小二乘计算斜率,否则应是退化成了B中的效果);而弧长 在实际编程时可简化为某一直线段的长度。
如此便可以计算出某点、或是整个曲线段的平均曲率。
个人评价:采用最小二乘拟合较为精确、受干扰较小,但实现较为复杂。
结语:
个人建议,智能车应用时,矫正后再计算曲率,否则因畸变产生的误差会很大。
希望能给各位大佬一丢丢帮助,if any,顶个贴可好?
仓促写下,不足之处望各位大佬批评指正!
|