连续space最短路径

Continuous space shortest path

我需要一个最短路径算法来控制现实生活中的机器人。

假设我有矩阵形式的环境地图,其中 1 是障碍物,0 是自由 space。如果我使用传统的最短路径算法,例如 A*,那么这将给我一个曼哈顿距离最短路径。所以离实际的最短路径还很远。出现这个问题是因为我想不出一种方法来惩罚运动,使对角线比两条直线更好。我可以做一个启发式算法,让 A* 首先尝试两点之间的欧氏最短路径,但实际上并不能使欧氏最短路径成为更好的路径。

有谁知道获得连续space最短路径的方法吗?它不一定是实际的最佳路径,但比直线和 90 度角更好。

我有一个想法: 从起点做一个圆圈。 增加圆的半径,直到圆上的一个点靠近一堵墙,或者在球门上。圆的边缘上的所有点都被设置为以圆的半径作为惩罚的子节点。圆圈内所有未打开的点都将关闭,因为没有理由对其进行测试。以欧氏最短路径作为启发式以 A* 方式重复此操作,直到目标状态为 reached.Make 机器人从一个点直线移动到下一个点。

这应该更接近我正在寻找的东西。一组具有不同角度的直线。连续的曲线当然更好了...

我已经实现了一个连续的 space 路径规划算法,并在博客中介绍了它 here. It uses A* to get an initial estimate and finalizes it (and pennalizes for sharp turns and robot's orientation at the destination) by using the simple gradient descent 算法。

假设来自 A* 的离散路径有 n "waypoints"(网格上的坐标)。第一个和最后一个不能移动,但其他可以移动,只要路径不经过阻塞的网格单元即可。要最小化的函数由 n - 2 参数参数化,这些参数移动 waypoints 垂直于其当前方向。