【问题标题】:Smoothing path of a robot机器人的平滑路径
【发布时间】:2011-04-05 18:26:05
【问题描述】:

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

【问题讨论】:

  • 第一步:你需要定义你的机器人的转弯半径。如果它可以有效地打开一角钱,你为什么要希望它走弯路?
  • 你是对的。我知道有人会这样问我。我的机器人将有一个完整的转弯半径,但我想知道它是如何完成的,即便如此。 “如何用曲线连接点”是真正的问题。我很抱歉。
  • 我确实认为这个数字是回答问题所固有的。但是我想我们可以使用一些变量,比如TR 来表示转弯半径。在这种情况下,您已经针对TR=0 的特殊情况回答了您自己的问题。
  • @iccthedral 我对你如何进行寻路很感兴趣,你是如何做到的?什么算法?
  • @Murplyx 我使用了 Minkowski 和算法。谷歌这些关键词 minkowski+motion+planing

标签: java robot


【解决方案1】:

This paper 可能有用。看起来这是一个不平凡的问题。摘要:

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

【讨论】:

    【解决方案2】:

    在尝试制作要在Teragen 中渲染的逼真飞行序列时,我经常使用路径计算技术。我最初尝试使用Bézier 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)在它们之间做出某种妥协。


    如果您喜欢机器人技术,何不来加入Robotics Proposal

    【讨论】:

      【解决方案3】:

      在路径跟随算法的实际执行中,你不能让路径弯曲吗?如果您保持原样(即连接的直线)的路径,则在计算每个车轮速度的控制算法会自动平滑路径,无需任何预处理。

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

      同样,您唯一需要担心的是您要填充多少障碍物以确保避免撞到它们。通常我认为障碍物的区域会被机器人半径的一半填充,但如果你控制的是前瞻距离,你可能需要稍微扩大一点。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-23
          • 2013-03-05
          相关资源
          最近更新 更多