第4章:轨迹表示方法——多项式、贝塞尔、B样条与MINCO
各位同学,欢迎来到轨迹规划的核心环节。今天我们要聊的,是无人机怎么“描述”它要走的路。
说白了,轨迹表示就是给无人机画一条线。但这条线不能随便画——它得平滑、可执行、还得满足动力学约束。我这些年做项目,见过太多因为轨迹表示选错而炸机的案例。嗯,咱们今天就把这几种主流方法掰开揉碎了讲清楚。
4.1 多项式轨迹:最朴素的表达
多项式轨迹,其实就是用时间t的多项式函数来描述位置。比如:
p(t) = c0 + c1*t + c2*t^2 + ... + cn*t^n
为什么说它朴素?因为它的数学形式最简单。你只需要解一组线性方程,就能得到一条连续可微的轨迹。
我个人习惯用5次多项式做位置规划。为什么呢?因为5次多项式可以同时约束位置、速度和加速度的边界条件。你想想看,起飞和降落时,速度必须为零,加速度也得平滑过渡——5次多项式刚好满足这6个约束。
关键点:多项式阶数越高,轨迹越平滑,但计算量也越大。一般3-7次就够用了。
我在项目中遇到过一个问题:用7次多项式做长距离轨迹,结果数值不稳定,系数变得非常大。后来我改用分段多项式,把长轨迹切成几段,每段用低阶多项式拼接——问题就解决了。
4.2 贝塞尔曲线:直观的控制点
贝塞尔曲线,说白了就是用几个控制点来“拉”出一条曲线。你拖动控制点,曲线形状就跟着变。
数学表达式长这样:
B(t) = Σ (n choose i) * (1-t)^(n-i) * t^i * Pi
其中Pi是控制点,t从0到1。
贝塞尔曲线最大的优点是直观。你放4个控制点,曲线就从第一个点出发,经过中间两个点的“吸引”,到达最后一个点。做路径规划时,我经常用贝塞尔曲线来快速调整轨迹形状。
小技巧:贝塞尔曲线始终在控制点的凸包内。这意味着你可以通过控制点的位置来保证轨迹不撞到障碍物。
但贝塞尔曲线有个坑——全局性。你移动一个控制点,整条曲线都会变。我曾经在编队飞行中吃过这个亏:调整一架无人机的轨迹,结果所有飞机的路径都跟着变了。后来我改用B样条曲线才解决。
避坑指南:我曾经用高阶贝塞尔曲线做复杂地形穿越,结果曲线振荡得很厉害。记住:贝塞尔曲线的阶数 = 控制点数 - 1。控制点太多,曲线就会“抽风”。
4.3 B样条曲线:局部可控的利器
B样条曲线,你可以理解为“分段”的贝塞尔曲线。它把整条轨迹分成若干段,每段由几个控制点决定,但相邻段之间平滑连接。
它的数学形式是:
C(t) = Σ Ni,p(t) * Pi
其中Ni,p(t)是基函数,Pi是控制点。
B样条最大的优势是局部性。你移动一个控制点,只有附近几段轨迹会受影响,远处的轨迹纹丝不动。这在实际调试中太重要了——我经常在飞行测试时微调某个航点,其他部分完全不用重新规划。
| 特性 | 贝塞尔曲线 | B样条曲线 |
|---|---|---|
| 局部控制 | 否(全局影响) | 是(局部影响) |
| 凸包性质 | 是 | 是 |
| 连续性 | C^n(n为阶数) | C^(p-1)(p为阶数) |
| 计算复杂度 | 低 | 中等 |
我记得有一次做多无人机协同,需要实时调整编队形状。用B样条曲线,每个无人机只负责自己的几个控制点,调整起来非常快。要是用贝塞尔曲线,那得重新算全局,根本来不及。
4.4 MINCO轨迹:最优控制的终极方案
MINCO(Minimum Control)轨迹,是我个人最推崇的方法。它本质上是一个优化框架,能生成满足动力学约束的最优轨迹。
MINCO的核心思想是:给定一系列航点,自动生成一条平滑、时间最优的轨迹。它把轨迹表示和轨迹优化合二为一。
minimize: ∫ ||p^(k)(t)||^2 dt
subject to: p(ti) = waypoint_i
p^(j)(t0) = p0^(j)
p^(j)(tf) = pf^(j)
其中p^(k)表示k阶导数,通常k=3(最小化加加速度)或k=4(最小化加加加速度)。
为什么MINCO这么强?因为它能自动分配时间。你只需要给航点,算法会算出每段轨迹应该花多少时间。这在复杂环境中特别有用——狭窄通道里飞慢点,开阔地带飞快点。
实战经验:我在一个仓库巡检项目里用了MINCO。仓库里货架密集,通道狭窄。用多项式轨迹手动调时间参数,调了三天都没调好。换成MINCO后,算法自动算出了最优时间分配,轨迹平滑又安全。
但MINCO也有缺点——计算量大。它需要求解一个非线性优化问题,在机载电脑上跑可能有点吃力。我建议在离线规划时用MINCO,在线重规划时用B样条曲线。
建议:如果你刚开始做轨迹规划,先从多项式轨迹入手。等理解了边界约束和连续性条件,再尝试贝塞尔曲线和B样条。MINCO可以放在最后学,它需要一定的优化理论基础。
4.5 四种方法的对比与选择
好了,咱们总结一下这四种方法怎么选:
- 多项式轨迹:适合简单场景,比如点到点飞行。计算快,容易实现。
- 贝塞尔曲线:适合需要直观调整的场景,比如手动设计航点。但注意控制点不要太多。
- B样条曲线:适合复杂环境,需要局部调整的场景。多无人机协同的首选。
- MINCO轨迹:适合追求最优性能的场景,比如竞速、精准穿越。计算资源要够。
我个人习惯这样搭配:离线规划用MINCO生成全局轨迹,在线飞行时用B样条曲线做局部重规划。这样既保证了全局最优性,又保证了实时性。
嗯,今天就讲到这里。下一章咱们会深入讨论轨迹优化——怎么让轨迹飞得更快、更稳、更安全。到时候我会分享一些具体的代码实现,你们可以自己跑一跑试试。
记住:选对轨迹表示方法,你的无人机就成功了一半。
公众号:蓝海资料掘金营,微信deep3321