应是天仙狂醉,乱把白云揉碎。— 唐 李白
🏰代码及环境配置:请参考 环境配置和代码运行!
之前介绍的曲线形式, 都是基于参数方程构造的. 这种方法有一个共同的缺点: 对于曲线上的弧长, 曲率, 计算比较困难.
正如上式, 他们需要1阶,2阶导数才能得到曲率信息, 需要做大量的求根运算才能得到弧长. 这毫无疑问需要较大的计算资源. 那么如果某些情况下, 我们会大量的用到曲率和弧长, 有没有办法能够方便的得到呢?
2.4.1 3次螺旋线定义
3次螺旋线就是这样一种方法, 它是由一个曲率关于弧长的多项式定义的.
是参数, 这样我们可以直接使用弧长s简单的计算曲率.
但是对应的, 计算x, y会变的很麻烦, 需要使用积分. (这就是人生啊~)
假设我们有一个用3次螺旋线表达的曲线, 它的始末状态分别是.
曲率=切向角的变化率/弧长的变化率. 因此从起始点开始对曲率进行积分可以得到切向角. 很容易可以得到切向角的表达式
接下来我们再计算x,y, 需要通过积分得到:
这样我们有了的完整表达, 但是似乎没有解决问题, 因为积分运算岂不是更复杂?
是的, 我们很难去算这个积分, 但是我们可以求积分的近似值.
2.4.2 辛普森法则(Simpson's Rule)
辛普森法则(Simpson's Rule)是一种数值积分方法,用于近似计算定积分的值。它是基于插值多项式的数值积分方法中的一种,特别地,它使用了二次多项式(抛物线)来逼近被积函数在小区间上的行为。下图的蓝线是原曲线, 红线是逼近的曲线.
该法则通过将积分区间[a,b]等分为n个小区间(n为偶数),然后在每个小区间内选取三个点(例如,第i个小区间的点),利用这三个点构造一条抛物线,以此抛物线的积分值来近似表示该小区间内被积函数的积分值。最终,将所有小区间的积分值相加,得到整个积分区间的近似积分值。
这个动图能够更加直观的解释这个过程, 每3个点构造一个二次多项式, 然后对二次多形式积分.(这个图不知为啥微信插入不了, 需要的话请点击阅读原文前往官网查看哟)
表示采样点的间距, 可以明显看出来采样点越密集, 整体误差越小. 当然相对的, 计算量越大.
辛普森法则的计算公式有多种形式,其中较为常见的是辛普森1/3法则和辛普森3/8法则。我们使用辛普森1/3法则:
代表在区间内切割成多少份. 我们设定, 将辛普森法则应用到的积分中, 得到积分的近似解.
这样, 我们就得到了最终的表达式.
下一节, 我们会解析和运行代码.
参考链接
https://www.coursera.org/lecture/motion-planning-self-driving-cars/lesson-2-path-planning-optimization-9MonW https://en.wikipedia.org/wiki/Simpson's_rule
🏎️自动驾驶小白说官网:https://www.helloxiaobai.cn
🐮GitHub代码仓:https://github.com/Hello-Xiao-Bai/Planning-XiaoBai!
🔥课程答疑,面试辅导:https://shop380995420.taobao.com
🌠代码配合官网教程食用更佳!
🚀知乎,微信,知识星球全平台同号!
推荐阅读:
如何入门运动规划算法? 50篇教程教你手把手推导公式! 实现代码!
端到端解读: Imitation Is Not Enough - 在运动规划中克服模仿学习的局限性