本帖最后由 灰原姐姐 于 2014-11-9 00:49 编辑
5 问题到底出在哪里?
诸位有没有注意到,整个走曳物线的经典寻迹算法,从头到尾,压根没有提“赛道宽度”这玩意? 这就好理解了,这个算法只知道赛道中心线,压根不知道宽度,自然会出现过度切弯导致从内测出界的现象。这不经令人思索,一个连宽度都不知道的弱智算法,怎么会出现我们之前所说的那么多好的特性呢?不仅这点,还有一件说出来另该算法闻风丧胆的致命缺点:你TMD入弯之前怎么不先走外道啊? 让我们回头来思考一下,这个曳物线算法到底是怎么产生的呢? 首先我们是根据传感器的数据得出了一个表征车相对于赛道的偏移情况,然后凭直觉将这个偏移线性(或这说是单调)映射到前轮的方向角,然后发现惊讶地发现,此时只要给后轮一个速度,小车就奇迹般地沿着赛道奔跑了。然后我们调节这个算法的各个参数,使得车奔跑的路线逐渐变优,过程中得出一些心得,遇到一些问题。然后不断调节、迭代,添加新的补偿,设计更复杂的策略,引入多的变量。 经过一段时间的调试、观察与思考,我们发现原来车走的路线是一条曳物线啊,曳点就是某个前瞻下的赛道中心点。然后我们对曳物线这个概念进行了分析,得出了其光滑性,相位响应,频率响应等特性。这些特性印证了之前调试时发现的各种现象,并且对之后的调试做出了一定的指导(兴许你没有做这番分析也不知道车在走曳物线,不过,anyway,反正最后做的事情是一样的)。 至此我们终于回过味来了:原来这个算法根本不是我们精心设计出来的!原来这个算法是我们最初凭借直觉瞎凑出来的,只不过它恰巧具有了某些很好的特性,最终使我们陷入一个局部最优的陷阱。
对该算法的审判还没完呢,我现在要给它致命一击:你T喵D压根不知道自己在赛车!!! 假设我是一个赛车教练,手下有两个学赛车的徒弟,一个笨一个聪明。笨笨实在是太笨了简直没法教,我只好对笨笨说:“你看,10米开外的赛道,看到了吗?你假想着十米开外的赛道正中间有一块红烧肉,你死死地盯住它,把方向对准它……” biu~~~笨笨飞奔出去了。跑得还可以嘛,哎哟,不错哟!
“聪聪,你看,假想十米开外的赛道上有一块红烧肉……” “我不喜欢吃红烧肉” “那假想是哈根达斯” “我也不喜欢吃雪糕” “无所谓啦,总之是你喜欢吃的某样东西” “你到底想说什么?不就是想告诉我过弯要切内道吗?” “诶!!!对对对!!!对!对!对!就是这意思” “早说嘛” “对!对!就是切弯哦!看好你哦!” biubiubiu~~~~ 聪聪轻易地超过了笨笨,而笨笨在一个赛道较窄的弯道因切弯过度导致内轮打滑车辆失控永远地离开了我们…… 好了我现在问,笨笨为什么笨啊?因为笨笨根本不知道自己在赛车,他只知道看准一个点,往那个方向跑。而聪聪知道,“曳物”只是手段,目的是要跑出一条在赛道范围内的速度最快的曲线。笨笨是盲目的,他在盯住曳点看的时候,完全不知道赛车已经过度内切了,因此他也完全不知道在入弯前要先靠外侧。聪聪则会注意路线是否在赛道内,并且一旦他奔着把总时间缩短的目标,根本不用教,他自然就能发现外侧入弯能使弯道过得更流畅。 |