![993d34e5e8b1dcb9c6388b0cf733de8f.png](https://i-blog.csdnimg.cn/blog_migrate/217e1042664dc650e37c2920f62b6e90.jpeg)
根据姜中和老师的综述,我在近期看了Matthew Kelly 的轨迹优化入门,我发现互联网中文圈儿里关于轨迹优化的介绍非常的少,可能这门课程对于已经在从事控制项目的大佬们来说是个微不足道的基础,其他项目的人隔行如隔山,很少接触到轨迹优化。反正这篇四十多页的英文讲义我看了好几遍才算是有点明白,因为讲义里大篇幅讲解样条差值,但是最让我难懂的地方其实还是在于差值(Spline Interpolation)前对结点(Knot Point)的计算。
b站里搬运的一个英文轨迹优化讲解Introduction to Trajectory Optimization也为我的学习提供了帮助。
1.轨迹优化问题简述
部分翻译参考了轨迹优化与直接配点法。
1.1问题简述
轨迹用来描述一个物体的运动过程,通常是关于时间的变量。轨迹优化一种用于寻找最佳轨迹选择的方法,通常是通过选择合适的系统输入或控制量,是系统完成期望的运动过程。在控制领域,轨迹优化近似于最优控制,但从更广的概念上来讲,轨迹优化更具一般性。
![7fd2a43d9731b276e7b762de3fd76839.png](https://i-blog.csdnimg.cn/blog_migrate/cae93bd9d1e409b80901a17aec2cf15c.png)
如图1所示,一个滑块放置在光滑地面上,并受到一个水平方向的作用力。我们想要滑块在里的作用下,在1s的时间内从开始位置运动到指定位置,并刚好停在该处。这个问题存在着无数种可能的运动轨迹,进一步,我们希望从中确定一条最优的轨迹。
![fe7c274939c127d7b8cea645c501c345.png](https://i-blog.csdnimg.cn/blog_migrate/e61c5609f2369f7c57a5285e3830c318.png)
我们可以把这个问题用数学语言形式化。系统满足如下的动力学方程:
![811b2b8312134f745e43fd0d0f0a9293.png](https://i-blog.csdnimg.cn/blog_migrate/8b389d40c584e4be5dad7c41aa1bc333.png)
边界约束为:
![e1f3c50f63d0aa308bdc785a647c5a60.png](https://i-blog.csdnimg.cn/blog_migrate/58160f2aa2c8b24c2c7dbbfa07ac7023.jpeg)
目标函数有不同的选择方式,以下给出了最小平方力和最小功两种目标:
![7cbb4844977898934fa88495cdec1b3b.png](https://i-blog.csdnimg.cn/blog_migrate/bcbc5cc4ca01192c94ee21430aee7294.jpeg)
学过自控的同学应该都在第十章最优控制里学过通过泛函法或者变分法(可以参考CSDN那篇)对这个问题进行求解,但是不是轨迹优化所关注的问题。
1.2梯形配点法(Trapezoidal Collocation)
下面将用梯形配点法来计算最优的滑块运动轨迹。将这个连续的问题进行离散化,将其转化为NLP(非线性规划)问题。首先将轨迹离散化,我们将得到一个有限的决策变量集。将整个时间分为N份,相对应的,位置x和速度v也分离成n个元素的数列:
![7731a49a327f4e474b03e8709ae1f1c1.png](https://i-blog.csdnimg.cn/blog_migrate/e72a9edcfdc2afb9abc97d45e521d925.jpeg)
这些配置点实际上就是最终转化的NLP问题优化变量,N表示离散的细化程度,N越大则离散化误差越小,但优化难度越大。接下来我们要把原始问题用这些配置点进行近似表示,其核心思想是两个配置点之间的状态变化等于系统动力学的积分,而积分在被积函数不确定时,用始末值计算梯形面积代替定积分:
![507e0c162a844f0a59ae9b9af157bf77.png](https://i-blog.csdnimg.cn/blog_migrate/6f0546b544e9db23f456293b06d88a69.jpeg)
其中