我想在 2D 中实现以下目标(并且没有障碍):
给定起始位置 A 和结束位置 B,生成两点之间的路径,以优化取决于总长度和整体平滑度的成本函数。一个约束是 A 点的切向约束(即速度约束)。
例如,成本函数可以是
为加速度,为路径长度。
你知道我可以解决这个优化问题的简单方法吗,最好是使用 Python?
我想在 2D 中实现以下目标(并且没有障碍):
给定起始位置 A 和结束位置 B,生成两点之间的路径,以优化取决于总长度和整体平滑度的成本函数。一个约束是 A 点的切向约束(即速度约束)。
例如,成本函数可以是
为加速度,为路径长度。
你知道我可以解决这个优化问题的简单方法吗,最好是使用 Python?
您必须以某种方式转录控制问题,以便将其提供给非线性规划求解器。您可能想查看 Matthew Kelly 的论文,以很好地介绍轨迹优化问题的转录方法。它基本上总结了以下转录方法:
转录方法有多种分类。最直观的就是先将问题离散化,然后找到离散问题的最优解。这被称为直接方法。可以做相反的事情,即在离散化之前进行优化。这被称为间接方法。根据论文中的参考资料,直接法比间接法更容易定位和求解,但也导致求解精度低于间接法。
虽然我对间接方法不是特别熟悉,但我当然可以谈论直接方法。特别是,直接方法有两类主要的离散化:Shooting 和 Collocation。射击基本上是通过反复试验来进行的,调整控制参数直到轨迹变得最佳。拍摄甚至可以在时域中的多个离散间隔上进行分解(也称为多次拍摄)。
或者,搭配通过用代数系统替换常微分方程(例如,使用有限差分近似)并通过用插值表示连续控制来工作,插值在固定时间步长(也称为节点)的值由非-线性规划求解器。为此目的使用样条插值是很常见的,因此 . 最后,我们获得了一个非线性目标函数,该函数在有限数量的节点上具有代数约束。通过增加时间步数(h-refinement)或通过增加插值的阶数(p-refinement)来系统地获得更高的精度。
我强烈建议阅读上述论文,同时观看作者关于同一主题的讲座: 轨迹优化简介。该视频包括一个涉及控制倒立摆的计算示例。
由于插值函数,节点之间的控制函数将是平滑的。我不确定如何在结本身上施加平滑度,并且我不确定是否存在针对此类问题施加此约束的技术。