平滑机器人的路径

nul*_*ent 11 java robot

我正在计算机器人在具有多边形障碍物的平面上的最短路径.一切顺利,快速,没有问题.但是,如何使路径平滑,使其变得弯曲?下面是连接顶点与直线的路径的图片.PS机器人只是一个圆圈.

顶点

I82*_*uch 6

这篇论文可能很有用.看起来这是一个非常重要的问题.抽象:

自动图形抽屉需要计算简单多边形的数据之间的路径,除了保留在内部之外,还需要展现出某些美学特性.其中一些需要结合有关多边形的一些信息,而不是离实际的最短路径太远.我们提出了一种计算局部凸区域的算法,该区域"包含"简单多边形的两个顶点之间的最短欧几里德路径.该区域具有"跟随"最短路径形状的边界形状.区域内的三次贝塞尔样条曲线在两个给定顶点之间提供"短而平滑"的无碰撞曲线.获得的结果看起来在美学上令人愉悦,并且所使用的方法可能是独立的兴趣.它们是基本的和可实现的.图7是我们当前实现产生的示例输出.


Roc*_*net 5

当我试图在Teragen中渲染逼真的飞行序列时,我常常使用路径计算技术.我最初尝试使用BézierCurves.

曲线

但发现(至少飞行)它们并没有那么有用.原因是曲线之间的曲率是不连续的,因此不能用于计算飞越的连续正确倾斜角度.此外,很难确定曲线不会与山相交.

我离题了.我最终选择的方式是一个简单的基于质量弹簧的路径,并将其放宽.

将路径细分为许多小段,越多越好.对于每个点,将其向一个方向移动一点,以减小它与其邻居之间的角度,并从障碍物开始.重复多次,直到路径稳定下来.

k = 0.01    // Adjust the values of k and j to your liking.
j = 0.01    // Small values take longer to settle. Larger values are unstable.
For each point P
    normal_vector     = vector_to_previous_point + vector_to_next_point
    obstacle_vector   = vector_to_nearest_obstacle
    obstacle_distance = magnitude(obstacle_vector)
    obstacle_vector  *= obstacle_distance^2
    P                += (normal_vector * k) - (obstacle_vector * j)
Run Code Online (Sandbox Code Playgroud)

这种有限元放松技术的好处在于,您可以将各种约束编程到其中,并且路径将依赖于它们之间的某些折衷,取决于权重(在这种情况下为j和k).


如果你是机器人技术,为什么不加入机器人技术提案呢?