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曲线作为复杂模型的近似最短路径,在实际执行时并不一定严格地遵循这些曲线。
Reeds-Shepp曲线和Dubins曲线的更多相关文章
- 自动驾驶运动规划-Reeds Shepp曲线
自动驾驶运动规划-Reeds Shepp曲线 相比于Dubins Car只允许车辆向前运动,Reeds Shepp Car既允许车辆向前运动,也允许车辆向后运动. Reeds Shepp Car运动规 ...
- 自动驾驶运动规划-Dubins曲线
1.Simple Car模型 如下图所示,Simple Car模型是一个表达车辆运动的简易模型.Simple Car模型将车辆看做平面上的刚体运动,刚体的原点位于车辆后轮的中心:x轴沿着车辆主轴方向, ...
- ROC曲线、PR曲线
在论文的结果分析中,ROC和PR曲线是经常用到的两个有力的展示图. 1.ROC曲线 ROC曲线(receiver operating characteristic)是一种对于灵敏度进行描述的功能图像. ...
- 精确率与召回率,RoC曲线与PR曲线
在机器学习的算法评估中,尤其是分类算法评估中,我们经常听到精确率(precision)与召回率(recall),RoC曲线与PR曲线这些概念,那这些概念到底有什么用处呢? 首先,我们需要搞清楚几个拗口 ...
- ROC曲线和PR曲线
转自:http://www.zhizhihu.com/html/y2012/4076.html分类.检索中的评价指标很多,Precision.Recall.Accuracy.F1.ROC.PR Cur ...
- C# 曲线控件 曲线绘制 实时曲线 多曲线控件 开发
Prepare 本文将使用一个NuGet公开的组件来实现曲线的显示,包含了多种显示的模式和配置来满足各种不同的应用场景,方便大家进行快速的开发系统. 在Visual Studio 中的NuGet管理器 ...
- Mean Average Precision(mAP),Precision,Recall,Accuracy,F1_score,PR曲线、ROC曲线,AUC值,决定系数R^2 的含义与计算
背景 之前在研究Object Detection的时候,只是知道Precision这个指标,但是mAP(mean Average Precision)具体是如何计算的,暂时还不知道.最近做OD的任 ...
- ROC曲线 VS PR曲线
python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...
- ROC曲线 vs Precision-Recall曲线
深入理解对比两个曲线各自的特性和相互的差异需要花不少时间研读一些国外的技术博客与相关paper,暂时先列出下面这么多,这部分后续可以继续补充. ROC曲线和AUC的定义可以参看“ROC曲线于AUC”, ...
随机推荐
- mariadb升级
官方文档升级:https://mariadb.com/kb/en/library/upgrading/ 1.备份原来的数据库和配置文件 # mysqldump -u root -p -A > a ...
- LeetCode_100. Same Tree
100. Same Tree Easy Given two binary trees, write a function to check if they are the same or not. T ...
- LNMP一键环境安装多PHP版本共存的方法
多PHP版本只支持LNMP模式,LNMPA.LAMP模式下不支持!要使用多PHP先安装多PHP版本,在lnmp1.4源码(lnmp1.3的不行哦)目录下运行:./install.sh mphp 按提示 ...
- 【c# 学习笔记】类实例化
类中可以定义的成员,包括字段.属性.构造函数.实例方法和析构函数等. 要访问这些实例成员,必须通过类的实例对象来完成.而要得到一个类的实例对象,就必须先声明一个该类类型的变量,然后使用new运算符后跟 ...
- JAVA数据结构和算法 1-综述:数据结构和数据类型
数据结构:指数据在计算机内存空间中或者磁盘中的组织形式. 对于数据结构的操作:插入.删除.查找.迭代遍历.排序等: Java.util包中含有诸如向量(一个可扩充的数组).栈.哈希表等类型的数据结构, ...
- 战术设计DDD
可落地的DDD(5)-战术设计 摘要 本篇是DDD的战术篇,也就是关于领域事件.领域对象.聚合根.实体.值对象的讨论.也是DDD系列的完结篇.这一部分在我们团队争论最多的,也有很多月经贴,比如对资 ...
- mysql每次update数据,自动更新对应表中时间字段
mysql 已经创建完成表的情况下, 使得其中的时间字段 在每次 uodate 数据的时候 自动更新事件, 运行如下sql ALTER TABLE tab_name MODIFY COLUMN upd ...
- 关于iframe的一些使用
在iframe页面,获取当前iframe的id var iframeId = window.frameElement.id.toString(); 获取父窗口中另一个iframe的iframe,注意返 ...
- B9 Concurrent 重入锁(ReentrantLock)
[概述] java.util.concurrent.locks.ReentrantLock 实现 java.util.concurrent.locks.Lock 接口,加锁(lock)和 解锁(unl ...
- [转帖]微软宣布即将开始大规模推送Windows 10 V1903重大版本更新
微软宣布即将开始大规模推送Windows 10 V1903重大版本更新 https://www.cnbeta.com/articles/tech/894303.htm 微软要批量更新 1903了 bu ...