先从路径优化开始学习FastPlanner之B样条曲线平滑路径(一):从拉格朗日插值到B样条曲线
参考B站视频学习
注:我会列出学习他人的博客,但我不涉及具体推导,原理讲解,旨在于理解必须概念后写代码出效果。
- 给若干点如何获得一条平滑的曲线? 两个方法插值、拟合
插值要经过给定点,拟合不用经过。
经典插值方法:拉格朗日插值法和牛顿插值法。
区别:
拉格朗日插值法
优点
- 简单易懂: 拉格朗日插值法公式简单直观,易于理解和实现。
- 无需求导: 拉格朗日插值法不需要对函数进行求导,只需知道数据点即可。
- 全局性: 构造出的插值多项式在整个区间上有效,而非局部有效。
缺点
- 计算复杂度: 随着数据点数量的增加,拉格朗日插值法的计算量会显著增加,尤其是在多项式阶数较高时。
- 数值稳定性: 当数据点间距离较小时,拉格朗日插值法可能导致数值不稳定,尤其是在浮点运算中。
- 龙格现象: 如果数据点分布不均匀,特别是在两端密集,中间稀疏的情况下,拉格朗日插值可能出现所谓的“龙格现象”,即插值多项式在某些区域剧烈波动。
- 难以更新: 即使一个数据点发生变化时,需要重新计算整个插值多项式。 这点贝塞尔曲线也是,但贝塞尔曲线是种拟合方法
牛顿插值法:主要区别分段插值
优点
- 数值稳定性: 牛顿插值法通常比拉格朗日插值法更稳定,尤其是在数据点分布不均匀时。
- 递推性质: 牛顿插值法可以利用递推公式来计算差商,从而减少计算量。
- 易于更新: 当数据点发生变化时,只需要调整受影响的部分,而不需要重新计算整个插值多项式。
- 灵活性: 牛顿插值法同样支持任意数量的数据点,并且可以通过添加或删除数据点来更新插值多项式。
缺点
- 复杂度: 牛顿插值法需要计算差商,这在一定程度上增加了计算复杂度。
- 分段插值: 牛顿插值法更适合分段插值,即在每个数据点之间使用低阶多项式插值。
- 计算过程: 相对于拉格朗日插值法,牛顿插值法的计算过程稍微复杂一些,需要构建差商表。
- 龙格现象: 与拉格朗日插值法一样,牛顿插值法也可能出现龙格现象,尤其是在数据点分布不均匀时。
拟合一组点常用方法:贝塞尔曲线,B样条曲线
首先明确阶和次数的区别: 阶数=次数+1 意思和贝塞尔曲线同理,K次B样条曲线意思是曲线方程最高次数是K次。大家在写代码或者推的时候要统一,不要一会用阶一会用次数表示,容易混淆。
具体递推方程这里不细讲,参考替他大佬文章很清楚。先从路径优化开始学习FastPlanner
这里强调: 次数K和m,n关系:m=n+k+1 ,n+1表示控制点总个数(注意区分:Bi,k中i最大取n这两个n是一个值,从0开始),m表示分几段的段数,m+1表示总节点数。注意节点和控制点区别:控制点就是我们拟合给出来的点,要根据它拟合曲线。节点是人为的再细划分
然后,一般是,确定点数n,确定要几次B样条的K后,在确定出m的大小。
当t值取t2-t3时,根据德布尔-考克斯分段函数计算,可以看出最终只有前三个基函数非0,原因是k=0时只有在定义域内的都是1,其余全是0.
总结:根据控制点数确定n,在决定要几次B样条的k,计算出m
放一个大佬的专栏原理详细推导 很清楚 这里
这里个人总结关键点
首先说明:P阶样条p-1阶导数连续,原因上面总结
有的时候遇见带正重复度的节点B样条
下一章学习fastplanner中的B样条代码