1、Simple Car模型

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

自动驾驶运动规划-Dubins曲线_html_04

在一个很短的时间自动驾驶运动规划-Dubins曲线_点乘_05内,可以认为车辆沿着后轮指向的方向前进,当自动驾驶运动规划-Dubins曲线_点乘_05趋于0时,有:

自动驾驶运动规划-Dubins曲线_旋转角度_07

根据数学定义:

自动驾驶运动规划-Dubins曲线_html_08

自动驾驶运动规划-Dubins曲线_缩放_09

将2) 和3)代入1)中,得到:

自动驾驶运动规划-Dubins曲线_最短路径_10

显然,自动驾驶运动规划-Dubins曲线_html_11自动驾驶运动规划-Dubins曲线_最短路径_12是5)式的一个解,两侧乘以速度s等式仍然满足。因此有:

自动驾驶运动规划-Dubins曲线_点乘_13

自动驾驶运动规划-Dubins曲线_html_14

自动驾驶运动规划-Dubins曲线_html_15表示车辆前进的距离,则有:

自动驾驶运动规划-Dubins曲线_缩放_16

根据三角几何,有:

自动驾驶运动规划-Dubins曲线_点乘_17

将9)式代入8)式,得到:

自动驾驶运动规划-Dubins曲线_最短路径_18

8)式两侧同除以dt, 并根据自动驾驶运动规划-Dubins曲线_点乘_19,得到:

自动驾驶运动规划-Dubins曲线_点乘_20

至此得到了车辆的运动模型(Motion Model)。

然后引入Action变量,假设车辆运动速度s和方向盘转角自动驾驶运动规划-Dubins曲线_旋转角度_02由Action变量自动驾驶运动规划-Dubins曲线_旋转角度_22自动驾驶运动规划-Dubins曲线_html_23指定,得到:

自动驾驶运动规划-Dubins曲线_html_24

自动驾驶运动规划-Dubins曲线_点乘_25

自动驾驶运动规划-Dubins曲线_html_26

2、Dubins曲线

假设车辆按照常量速度运行: 自动驾驶运动规划-Dubins曲线_旋转角度_27,最大转向角度为自动驾驶运动规划-Dubins曲线_缩放_28,最小转弯半径自动驾驶运动规划-Dubins曲线_html_29,起点为自动驾驶运动规划-Dubins曲线_html_30, 终点为自动驾驶运动规划-Dubins曲线_html_31,我们目标是求解从起自动驾驶运动规划-Dubins曲线_html_30点到终点自动驾驶运动规划-Dubins曲线_html_31的最短行驶距离。求解最短距离的过程就是优化如下Cost的过程。

自动驾驶运动规划-Dubins曲线_最短路径_34

自动驾驶运动规划-Dubins曲线_缩放_35是到达自动驾驶运动规划-Dubins曲线_html_31所需的时间,自动驾驶运动规划-Dubins曲线_旋转角度_37,当自动驾驶运动规划-Dubins曲线_html_31不可达时,自动驾驶运动规划-Dubins曲线_旋转角度_39

由于速度自动驾驶运动规划-Dubins曲线_旋转角度_22是恒定的,根据前面提到的车辆的运动模型:

自动驾驶运动规划-Dubins曲线_最短路径_41

自动驾驶运动规划-Dubins曲线_最短路径_42

自动驾驶运动规划-Dubins曲线_html_26

其中:自动驾驶运动规划-Dubins曲线_html_44。将13)和14)代入12),可看到,最短行驶距离只与时间自动驾驶运动规划-Dubins曲线_缩放_45有关。

令S为车辆直行的Motion Primitive,L和R分别为车辆左转和右转的Motion Primitive,可以证明,任意起点到终点的Dubins最短路径可以由不超过三个Motion Primitives构成。由三个Motion Primitives构成的序列称为一个Word。由于两个连续的、相同的Motion Primitive可以合并为一个Motion Primitive,因此所有可能的Word有10中组合,Dubins证明最优的Word组合只能是如下6个组合之一:

自动驾驶运动规划-Dubins曲线_缩放_46

自动驾驶运动规划-Dubins曲线_旋转角度_47

其中,自动驾驶运动规划-Dubins曲线_html_48自动驾驶运动规划-Dubins曲线_html_49,这里注意,自动驾驶运动规划-Dubins曲线_最短路径_50大于自动驾驶运动规划-Dubins曲线_旋转角度_51,如果小于自动驾驶运动规划-Dubins曲线_旋转角度_51,一定有其它的序列优于该序列。

3、Dubins计算过程推导

3.1 基于向量的切点计算

假设两个最小转弯半径构成的Circle为 自动驾驶运动规划-Dubins曲线_html_53自动驾驶运动规划-Dubins曲线_html_54,半径分别为自动驾驶运动规划-Dubins曲线_html_55自动驾驶运动规划-Dubins曲线_点乘_56,圆心分别为自动驾驶运动规划-Dubins曲线_最短路径_57自动驾驶运动规划-Dubins曲线_缩放_58

自动驾驶运动规划-Dubins曲线_点乘_59

1)首先构造C1和C2的圆心自动驾驶运动规划-Dubins曲线_最短路径_60自动驾驶运动规划-Dubins曲线_html_61的向量自动驾驶运动规划-Dubins曲线_最短路径_62

自动驾驶运动规划-Dubins曲线_html_63

2)构造C1和C2的外切线切点构成的向量自动驾驶运动规划-Dubins曲线_html_64

自动驾驶运动规划-Dubins曲线_最短路径_65

3)构造垂直于自动驾驶运动规划-Dubins曲线_最短路径_66的单位法向量n,修改自动驾驶运动规划-Dubins曲线_html_67的使其平行于自动驾驶运动规划-Dubins曲线_最短路径_66

自动驾驶运动规划-Dubins曲线_html_69

根据法向量的定义:自动驾驶运动规划-Dubins曲线_点乘_70,得到:

自动驾驶运动规划-Dubins曲线_最短路径_71

根据单位向量的定义:自动驾驶运动规划-Dubins曲线_缩放_72,代入上式得到:

自动驾驶运动规划-Dubins曲线_点乘_73

  1. 16)式两侧同除以D,得到:

自动驾驶运动规划-Dubins曲线_旋转角度_74

注意,这里自动驾驶运动规划-Dubins曲线_点乘_75实际是将向量自动驾驶运动规划-Dubins曲线_html_67单位化。

根据向量点乘的数学定义:

自动驾驶运动规划-Dubins曲线_旋转角度_77

因此:

自动驾驶运动规划-Dubins曲线_缩放_78等于向量自动驾驶运动规划-Dubins曲线_html_67与法向量n的夹角的余弦。为了方便书写,定义一个常量自动驾驶运动规划-Dubins曲线_最短路径_80

等式17)中只有n是未知数。

5)将向量自动驾驶运动规划-Dubins曲线_html_67旋转角度C就得到向量n。假设自动驾驶运动规划-Dubins曲线_旋转角度_82,根据向量旋转的数学定义:

自动驾驶运动规划-Dubins曲线_缩放_83

自动驾驶运动规划-Dubins曲线_html_84

6)计算出n之后,就可以很方便的计算出外切线的切点自动驾驶运动规划-Dubins曲线_最短路径_85自动驾驶运动规划-Dubins曲线_旋转角度_86。从C1的圆心出发,沿着向量n的方向,距离为自动驾驶运动规划-Dubins曲线_html_55的位置即为切点自动驾驶运动规划-Dubins曲线_最短路径_85自动驾驶运动规划-Dubins曲线_旋转角度_86亦然。

3.2 计算CSC类型的行驶曲线

RSR、LSL、RSL、LSR是CSC类型的行驶曲线,该类型曲线首先计算两个圆的切点,然后车辆沿着最小转弯半径构成的圆周行驶到第一个圆的切点,然后直行到第二个圆的切点,再沿着最小转弯半径构成的圆周行驶到目的地。下面我们以RSR轨迹为例看看如何计算行驶曲线。

假设起点自动驾驶运动规划-Dubins曲线_最短路径_90和终点自动驾驶运动规划-Dubins曲线_旋转角度_91,最小转弯半径为自动驾驶运动规划-Dubins曲线_缩放_92。然后我们计算起点和终点的圆心。

起点的圆心为:

自动驾驶运动规划-Dubins曲线_html_93

终点的圆心为:

自动驾驶运动规划-Dubins曲线_旋转角度_94

自动驾驶运动规划-Dubins曲线_html_95

得到起点和终点的圆心之后,可以利用3.1小节的切点计算方法,得到切点自动驾驶运动规划-Dubins曲线_最短路径_85自动驾驶运动规划-Dubins曲线_旋转角度_86。然后就可以得到车辆的行驶轨迹,该轨迹分为三段:start到自动驾驶运动规划-Dubins曲线_最短路径_85的圆周弧;自动驾驶运动规划-Dubins曲线_最短路径_85自动驾驶运动规划-Dubins曲线_旋转角度_86的直线距离;自动驾驶运动规划-Dubins曲线_旋转角度_86到Goal的圆周弧。至此我们得到了RSR的行驶曲线。

自动驾驶运动规划-Dubins曲线_缩放_102

3.3 计算CCC类型的行驶曲线

如下图所示,自动驾驶运动规划-Dubins曲线_html_53自动驾驶运动规划-Dubins曲线_html_54的圆心为自动驾驶运动规划-Dubins曲线_最短路径_60自动驾驶运动规划-Dubins曲线_html_61自动驾驶运动规划-Dubins曲线_点乘_107是与自动驾驶运动规划-Dubins曲线_html_53自动驾驶运动规划-Dubins曲线_html_54相切的圆,圆心为自动驾驶运动规划-Dubins曲线_html_110

自动驾驶运动规划-Dubins曲线_点乘_111

根据数学关系,可得到:

自动驾驶运动规划-Dubins曲线_旋转角度_112

自动驾驶运动规划-Dubins曲线_最短路径_113

自动驾驶运动规划-Dubins曲线_缩放_114

自动驾驶运动规划-Dubins曲线_旋转角度自动驾驶运动规划-Dubins曲线_html_116自动驾驶运动规划-Dubins曲线_旋转角度_117的夹角,已知三角形的三个边的长度,根据余弦定理,有:

自动驾驶运动规划-Dubins曲线_点乘_118

最终可得到:

自动驾驶运动规划-Dubins曲线_html_119

注意此处为LRL模式时,自动驾驶运动规划-Dubins曲线_旋转角度需要加上自动驾驶运动规划-Dubins曲线_最短路径_121;为RLR模式时,自动驾驶运动规划-Dubins曲线_旋转角度需要减去自动驾驶运动规划-Dubins曲线_最短路径_121

然后计算自动驾驶运动规划-Dubins曲线_最短路径_124和计算自动驾驶运动规划-Dubins曲线_旋转角度_125就变得很容易。定义向量自动驾驶运动规划-Dubins曲线_旋转角度_126,将向量缩放到自动驾驶运动规划-Dubins曲线_缩放_92

自动驾驶运动规划-Dubins曲线_最短路径_128

最后可以得到交点自动驾驶运动规划-Dubins曲线_缩放_129。按照同样的过程可以计算得到自动驾驶运动规划-Dubins曲线_旋转角度_125。然后就可以得到start到自动驾驶运动规划-Dubins曲线_最短路径_85的圆周弧;自动驾驶运动规划-Dubins曲线_最短路径_85自动驾驶运动规划-Dubins曲线_旋转角度_86的圆周弧;自动驾驶运动规划-Dubins曲线_旋转角度_86到Goal的圆周弧的三段轨迹组成的行驶曲线。

自动驾驶运动规划-Dubins曲线_html_135

 

 

我们向往远方,却忽略了此刻的美丽