zoukankan      html  css  js  c++  java
  • Reeds-Shepp曲线和Dubins曲线

     转载:https://www.cnblogs.com/huyanan/articles/6243694.html

    什么是Reeds-Shepp曲线?
           想象你下班开车回家,到了小区后想把车停到你个人的停车位里面。作为一个喜欢追求挑战的老司机,你想找一条最短的路径把车停进去。那么这样的路径是什么呢?答案就是Reeds-Shepp曲线。Reeds-Shepp曲线由Reeds和Shepp二人在1990年的文章《Optimal paths for a car that goes both forwards and backwards》中提出。
          Reeds-Shepp曲线是什么样的曲线?
          既然是最短路径,我们首先想到的就是直线段,那么它是直线吗?嗯…,在某些情况下,它确实是直线。比如下图左所示的情况,汽车车头刚好对准了停车位(绿色表示停车位,红色表示汽车的起始状态,灰色表示汽车,状态是指汽车的位置和车头的朝向)。可是实际显然不会这么简单,会有各种可能,比如下图右所示的情况:车在停车位的右侧,且车头和停车位平行(侧位停车)。由于汽车都有一个最小转向半径,所以你不能让汽车向螃蟹一样横着开进去,这时求最短路径就没那么简单了。图中汽车中心运动形成的黑色曲线就是Reeds-Shepp曲线。Reeds-Shepp曲线由几段半径固定的圆弧和一段直线段拼接组成,而且圆弧的半径就是汽车的最小转向半径。这里的路径长度是指汽车中心运动轨迹的长度,也就是所有圆弧的弧长和直线段的长度之和。

               
         下图展示了更一般的情况,汽车从不同的初始位置和朝向进入同一个停车位:
          什么是Dubins曲线?
           Dubins曲线和Reeds-Shepp曲线差不多,只不过多了一个约束条件:汽车只能朝前开,不能后退(不能挂倒挡)。Dubins曲线由Dubins在1957年的文章《On curves of minimal length with a constraint on average curvature and with prescribed initial and terminal positions and tangents》中提出。Dubins曲线如下图所示。
     
         Reeds-Shepp曲线和Dubins曲线对任意的起止位姿都存在吗?
          答案是肯定的,任意的起始状态和终止状态之间都存在这样的曲线,如下图所示。这时为了清晰起见,我用箭头表示汽车的朝向,红色曲线是Reeds-Shepp曲线,而黑色曲线是Dubins曲线。注意二者有时是重合的。
         当环境中存在障碍物时,Reeds-Shepp曲线和Dubins曲线对任意的起止位姿都存在吗?
         Reeds-Shepp曲线和Dubins曲线特指没有障碍物时的最短路径。如果存在障碍物,那么这样的曲线不再是传统意义上的RS和Dubins曲线了,不过为了保持一致我们还是这么称呼它们吧。
         生活从来没那么简单,你在停车时可能周围会有各种障碍物,比如其它车辆、垃圾桶、树木。这时是否仍然存在RS曲线和Dubins曲线似乎没那么容易回答了。不过庆幸的是这个问题已经被人解决了,答案是:只要存在连接起止位姿的无碰撞路径,那么就存在无碰撞的Reeds-Shepp曲线。然而这个结果对Dubins曲线却不适用。这个答案好像没什么出人意料,不过稍微品味一下却让人很吃惊。注意这里的前提:“连接起止位姿的无碰撞路径”,除了无碰撞的要求以外,我没说其它任何的要求,比如存在一条类似“Z”这样完全由直线组成的折线路径也可以。很奇妙吧?不管你的路径由什么线(直线/任意曲线)组成,不管它有多怪异多扭曲,只要你能找到一条这样的路径,那么就一定存在满足要求的Reeds-Shepp曲线,即连接起止位姿,并且汽车不会碰到障碍物。在电影《车手》中就出现了神奇的一幕——汽车原地直角拐弯。其实理论上,不需要原地拐弯,汽车也能通过狭窄的直角胡同。
         理论上存在没有给我们提供实际寻找的方法,这时我们可以采用随机搜索的方法,如下图。(黑色表示障碍物)

          Dubins曲线和Reeds-Shepp曲线有什么用?
          这里我们以汽车为例介绍了最短路径。实际上,汽车只是一类更广泛系统的特例,这类系统叫做“非完整约束系统”。非完整约束系统就是受到非完整约束的系统(废话)。可以用直观的例子解释,人站在平地上就不受非完整约束,因为人可以往任意方向移动,前后左右随便你怎么动都可以。可是如果你骑在自行车上就受非完整约束了,因为你的运动方向受到前后轮的限制,只能沿着前轮指向的方向运动,尽管你可以通过调整车把改变前轮的朝向,但是你无法向车轮的侧方移动。当然,如果别人从侧面踹了你一脚或者路太滑,自行车可能会向侧方移动,这时你就违反非完整约束了,但是我们暂时不考虑这些特例。这些特例,比如路滑,确实有可能发生。可是为了让问题简单一点,我们不得不理想化处理,认为自行车车轮不会发生侧滑,哪怕一毫米也不会有。因此,具有车轮的东西都属于非完整约束系统,比如独轮车。注意这里的车轮是指普通的车轮,不包括特殊的车轮(比如麦克纳姆轮)。那些带挂斗有很多轮子的大货车属于非完整约束系统吗?这就要看情况了。一般货车挂斗上的轮子不能转向,在货车拐弯的时候,有些轮子必然会侧滑,至于哪些会侧滑取决于路面的条件。因此严格来说,它不是一个非完整约束系统,虽然看上去的表现像受到非完整约束。即便这样,我们也可以按照非完整约束处理。
          非完整约束有什么特别的地方吗?给车辆或移动机器人规划轨迹的工程师都不喜欢它,它也因为难以处理而臭名昭著。对于简单的系统,例如前面的汽车模型(相对于真实的汽车已经简化了),我们还能得到满足非完整约束的最短路径,可是对于复杂的模型就很难了,比如变量更多、约束形式更复杂的模型,或者环境中存在障碍物的情况。所以人们一般用Dubins曲线和Reeds-Shepp曲线作为复杂模型的近似最短路径,在实际执行时并不一定严格地遵循这些曲线。
  • 相关阅读:
    sass08 if while for each
    sass07 函数
    sass06 mixin
    sass05 数据类型,数据运算
    sass04 嵌套、继承、占位符
    批量导出docker images 的一个简单方法
    ARM 版本 瀚高 数据库的启动命令
    PHPStorm+Wamp+Xdebug+Windows7调试代码
    在Windows Server 2012 中安装 .NET 3.5 Framework
    Windows Server 2012 GUI与Core的切换
  • 原文地址:https://www.cnblogs.com/-wenli/p/11848076.html
Copyright © 2011-2022 走看看