自动驾驶运动规划-Dubins曲线
1、Simple Car模型
如下图所示,Simple Car模型是一个表达车辆运动的简易模型。Simple Car模型将车辆看做平面上的刚体运动,刚体的原点位于车辆后轮的中心;x轴沿着车辆主轴方向,与车辆运动方向相同;车辆在任意一个时刻的姿态可以表述为(x, y, )。车辆的运动速度为s;方向盘的转角为
,它与前轮的转角相同;前轮和后轮中心的距离为L;如果方向角的转角固定,车辆会在原地转圈,转圈的半径为
。

在一个很短的时间内,可以认为车辆沿着后轮指向的方向前进,当
趋于0时,有:
根据数学定义:
将2) 和3)代入1)中,得到:
显然,和
是5)式的一个解,两侧乘以速度s等式仍然满足。因此有:
用表示车辆前进的距离,则有:
根据三角几何,有:
将9)式代入8)式,得到:
8)式两侧同除以dt, 并根据,得到:
至此得到了车辆的运动模型(Motion Model)。
然后引入Action变量,假设车辆运动速度s和方向盘转角由Action变量
和
指定,得到:
2、Dubins曲线
假设车辆按照常量速度运行: ,最大转向角度为
,最小转弯半径
,起点为
, 终点为
,我们目标是求解从起
点到终点
的最短行驶距离。求解最短距离的过程就是优化如下Cost的过程。
是到达
所需的时间,
,当
不可达时,
。
由于速度是恒定的,根据前面提到的车辆的运动模型:
其中:。将13)和14)代入12),可看到,最短行驶距离只与时间
有关。
令S为车辆直行的Motion Primitive,L和R分别为车辆左转和右转的Motion Primitive,可以证明,任意起点到终点的Dubins最短路径可以由不超过三个Motion Primitives构成。由三个Motion Primitives构成的序列称为一个Word。由于两个连续的、相同的Motion Primitive可以合并为一个Motion Primitive,因此所有可能的Word有10中组合,Dubins证明最优的Word组合只能是如下6个组合之一:

其中,,
,这里注意,
大于
,如果小于
,一定有其它的序列优于该序列。
3、Dubins计算过程推导
3.1 基于向量的切点计算
假设两个最小转弯半径构成的Circle为 和
,半径分别为
和
,圆心分别为
和
。

1)首先构造C1和C2的圆心到
的向量
。
2)构造C1和C2的外切线切点构成的向量。

3)构造垂直于的单位法向量n,修改
的使其平行于
。
根据法向量的定义:,得到:
根据单位向量的定义:,代入上式得到:
- 16)式两侧同除以D,得到:
注意,这里实际是将向量
单位化。
根据向量点乘的数学定义:
因此:
等于向量
与法向量n的夹角的余弦。为了方便书写,定义一个常量
。
等式17)中只有n是未知数。
5)将向量旋转角度C就得到向量n。假设
,根据向量旋转的数学定义:
6)计算出n之后,就可以很方便的计算出外切线的切点和
。从C1的圆心出发,沿着向量n的方向,距离为
的位置即为切点
,
亦然。
3.2 计算CSC类型的行驶曲线
RSR、LSL、RSL、LSR是CSC类型的行驶曲线,该类型曲线首先计算两个圆的切点,然后车辆沿着最小转弯半径构成的圆周行驶到第一个圆的切点,然后直行到第二个圆的切点,再沿着最小转弯半径构成的圆周行驶到目的地。下面我们以RSR轨迹为例看看如何计算行驶曲线。
假设起点和终点
,最小转弯半径为
。然后我们计算起点和终点的圆心。
起点的圆心为:
终点的圆心为:

得到起点和终点的圆心之后,可以利用3.1小节的切点计算方法,得到切点和
。然后就可以得到车辆的行驶轨迹,该轨迹分为三段:start到
的圆周弧;
和
的直线距离;
到Goal的圆周弧。至此我们得到了RSR的行驶曲线。

3.3 计算CCC类型的行驶曲线
如下图所示,和
的圆心为
和
,
是与
和
相切的圆,圆心为
。

根据数学关系,可得到:
记为
与
的夹角,已知三角形的三个边的长度,根据余弦定理,有:
最终可得到:
注意此处为LRL模式时,需要加上
;为RLR模式时,
需要减去
。
然后计算和计算
就变得很容易。定义向量
,将向量缩放到
。
最后可以得到交点。按照同样的过程可以计算得到
。然后就可以得到start到
的圆周弧;
和
的圆周弧;
到Goal的圆周弧的三段轨迹组成的行驶曲线。

参考文章
1、A Comprehensive, Step-by-Step Tutorial on Computing Dubin’s Curves (https://gieseanw.files.wordpress.com/2012/10/dubins.pdf)
2、Planning Algorithm (http://planning.cs.uiuc.edu/node1.html)
转自:https://zhuanlan.zhihu.com/p/120272035
自动驾驶运动规划-Dubins曲线的更多相关文章
- 自动驾驶运动规划-Reeds Shepp曲线
自动驾驶运动规划-Reeds Shepp曲线 相比于Dubins Car只允许车辆向前运动,Reeds Shepp Car既允许车辆向前运动,也允许车辆向后运动. Reeds Shepp Car运动规 ...
- Google Waymo 2017自动驾驶安全技术报告(一)
2017年10月Google Waymo向美国交通部提交了一份43页的安全报告,报告中详细说明了Waymo如何装备和训练自动驾驶车辆,从而避免驾驶中的一般和意外情况发生.这份报告对Waymo的自动驾驶 ...
- zz自动驾驶中轨迹规划的探索和挑战
大家好,今天我们主要介绍一下轨迹规划的探索和挑战,我主要从四个方面介绍: 轨迹规划的概念 决策 横向规划 纵向规划 轨迹规划的概念: 轨迹规划的核心就是要解决车辆该怎么走的问题.比如我们知道了附近有行 ...
- <转载> 从算法上解读自动驾驶是如何实现的?
科技新闻小鹏汽车2016-03-28 10:42 [摘要]车辆路径规划问题中路网模型.路径规划算法和交通信息的智能预测为关键点. 由于驾驶员的驾驶工作繁重,同时随着汽车拥有量的增加,非职业驾驶员的数 ...
- 自动驾驶缺人才?听听David Silver怎么说!
如今自动驾驶在全球范围内的发展势头愈发“凶猛”,该领域人才也一度被视为“香饽饽”. 即使在美国,自动驾驶工程师的起薪也已经突破了25万美元,我国‘“开价”之高更是令人咋舌. 人才.人才.还是人才!重要 ...
- zz自动驾驶复杂环境下高精度定位技术
今天为大家分享下,自动驾驶在复杂环境下的高精度定位技术. 定位/导航负责实时提供载体的运动信息,包括载体的:位置.速度.姿态.加速度.角速度等信息. 自动驾驶对定位系统的基本要求: 1. 高精度:达到 ...
- zz高精地图和定位在自动驾驶的应用
本次分享聚焦于高精地图在自动驾驶中的应用,主要分为以下两部分: 1. 高精地图 High Definition Map 拓扑地图 Topological Map / Road Graph 3D栅格地图 ...
- Reeds-Shepp曲线和Dubins曲线
转载:https://www.cnblogs.com/huyanan/articles/6243694.html 什么是Reeds-Shepp曲线? 想象你下班开车回家,到了小区后想把车停 ...
- 第三期 第三期 搜索——1.运动规划(motion_planing)
运动规划的根本问题在于机器人可能存在于一个这样的世界中, 它可能想找到一条到达这个目标的路径,那么就需要指定一个到达那里的计划, 自动驾驶汽车也会遇到这个问题.他可能处于高速公路的附近的街道网络中,他 ...
随机推荐
- bool? int?等可为空的数值类型的运算 三值逻辑
算术运算:(+,-,*,/)时,只要一个为null,则结果为null. 比较运算符: <.>.<= 和 >=,也是如此.如果一个或全部两个操作数都为 null,则结果为 fal ...
- linux 提权防护
linux 用户提权 利用系统漏洞或者程序等方面的缺陷使一个低权限用户,获得他们原本不具有的权限或者得到root权限 下面介绍几种可能得到root访问权限的方式 1, 内核开发 防护:及时更新补丁 臭 ...
- omnet++:官方文档翻译总结(二)
这一部分是官方案例介绍 1.Introduction 学习自:Introduction - OMNeT++ Technical Articles 本教程是基于Tictoc的仿真案例,这些案例我们可以在 ...
- 动手学TCP——CS144实验感想
在Stanford CS144的课程实验Lab0~Lab4中,我们动手实现了一个自己的TCP协议,并且能够真的与互联网通信!此外,感谢Stanford开源本实验并提供了大量的优质测试用例,使得我们仅仅 ...
- 微信小程序如何测试?
不需要安装,只要在微信里找到这个小程序打开即可使用,由于小程序的便捷,如今越来越多的平台开发方都纷纷推出自身的小程序应用. 那我们该如何进行微信小程序测试呢? 1.功能测试 功能测试以需求文档和交互视 ...
- linux作业--第一周
1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. 目前三大主流发行版分别为Debian.Redhat.SUSE. redhat: RHEL: Red Hat公司发布的面向企业用户的 ...
- think php 上下架修改+jq静态批量删除+ajax删除+全选
视图代码: <!doctype html> <html lang="en"> <head> <meta charset="UTF ...
- JQ,JQuery的ajax卡住了,浏览器页面卡住
在使用ajax的时候浏览器卡住了, 经过测试是因为在ajax中使用的data数据变量写错了 不存在也不报错,直接卡主了 好好检查一下吧.
- sql面试 case /union all
1.sum(case when results='胜' then 1 else 0 end) as '胜' 要求查询出结果: sql语句实现: select date, sum(case when r ...
- C#解析Markdown文档,实现替换图片链接操作
前言 又是好久没写博客了 其实也不是没写,是最近在「做一个博客」,从2月21日开始,大概一个多星期的时间,疯狂刷进度,边写代码边写了一整系列的博客开发笔记,目前为止已经写了16篇了,然后上3月之后工作 ...