我一直在尝试学习如何解决简单的加速度限制轨迹规划问题。我在 C++ 中工作,我一直在使用 Eigen 库来解决线性系统问题。我自己在做非线性编程部分,因为那是我想学的一部分。
这是一篇博客文章,其中包含一些动画 GIF,显示了我正在处理的问题。它是一个由两个立方体段组成的一维轨迹,所以起点、中点和终点位置是固定的,起点和终点的速度是固定的,最大加速度是有限制的。自由变量是两个段的持续时间和中点速度。我试图尽量减少机动的总时间。
对于像这样的直线运动,加速度约束可以分解为两个立方体每一端的最小和最大加速度的单独约束,总共有八个约束。这很好用;我写了一个内点求解器(使用 Boyd 和 Vandenberghe 的书),它似乎可靠地收敛。
我想将问题扩展到二维,这将使加速度限制成为一个圆盘。第一步,我停留在一维问题上,但用四个基于分段端点平方加速度的约束替换了我的八个约束。
但是,使用基于平方加速度的一组约束,很容易提出求解器无法从中取得进展的问题状态。我认为这是因为如果您在目标远离约束边缘的约束函数一侧,则约束梯度信息没有帮助?也有可能我只是把我的数学弄错了。
有没有更好的方法来提出和解决这类问题?也许我应该使用活动集方法,所以有问题的约束在解决方案转移到应该应用的一侧之前不会生效?