机器人的平滑路径

问题描述 投票:0回答:4

我正在计算机器人在具有多边形障碍物的平面上的最短路径。一切都运行良好且快速,没有任何问题。但是,如何平滑路径使其变得弯曲? 下面是用直线连接顶点的路径的图片。 附言 机器人只是一个圆圈。

Vertices

geometry robotics
4个回答
6
投票

这篇论文可能会有用。看起来这是一个不平凡的问题。摘要:

自动图形绘制器需要计算简单多边形顶点之间的路径,该多边形除了保留在内部之外还需要表现出某些美学特性。其中一些需要结合一些有关多边形形状的信息,而又不会与实际的最短路径相差太远。我们提出了一种算法来计算局部凸区域,该区域“包含”简单多边形的两个顶点之间的最短欧几里得路径。该区域具有“遵循”最短路径形状的边界形状。区域内部的三次贝塞尔样条在两个给定顶点之间提供了一条“短且平滑”的无碰撞曲线。所获得的结果看起来美观且所使用的方法可能具有独立的意义。它们是基本且可实施的。图 7 是我们当前实现产生的示例输出。


5
投票

在尝试在 Teragen 中渲染逼真的飞行序列时,我经常使用路径计算技术。我最初尝试使用Bézier Curves

Curves

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

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

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

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)

这些有限元松弛技术的好处是,您可以将各种约束编程到其中,并且路径将根据权重(本例中为 j 和 k)在它们之间进行某种折衷。


如果您热衷于机器人技术,为什么不来加入机器人提案


3
投票

在路径跟随算法的实际执行中,不能让路径弯曲吗?如果您保持路径不变(即连接的直线),则在路径中实现约 1 米的前视距离(该值取决于机器人的速度以及您为避开障碍物而填充的配置空间的量)计算每个轮子速度的控制算法将自动平滑路径,无需任何预处理。

这是我的意思的快速图像...红色虚线是当您根据前瞻距离控制到一个点时机器人实际执行的路径。前瞻距离只是计算沿路径进一步任意距离的点。

enter image description here

再次强调,您唯一需要担心的是您要填充多少障碍物以确保避免撞到它们。通常,我认为障碍物的区域被机器人半径的一半填充,但如果您控制前视距离,则可能需要使其稍大一些。


0
投票

对于机器人来说,我们无法知道未来。我们必须只知道机器人和障碍物的位置来绘制每个点。制作最小长度的弯曲路径的常用方法是用一个圆对机器人进行建模并移动该圆,使其保持与障碍物接触。只要保持一个半径的距离,转弯就会是曲线。

如果您想要曲线而不是最小距离,请尝试使上述半径与您距多边形顶点的距离成正比。

贝塞尔曲线的想法仅适用于使路径在回顾时弯曲。它改变了机器人曾经所在的位置。通常用机器人改变过去被称为“作弊”。避免改变已经走过的道路的一种方法是向前看。但机器人能看到角落吗?你必须更好地指定规则。

© www.soinside.com 2019 - 2024. All rights reserved.