Dubins曲线(2D)

定义

dubins曲线可以表示成3个运动基本动作的组合(即左转L、右转R、直行S)。

符号含义绕单位圆
L左转逆时针
R右转顺时针
S直走直行

dubins曲线给出了充分的路经集合,该集合包含的曲线叫做最佳路径。由Dubins证得最短路径只从6条曲线中选取:{LRL LSL LSR RLR RSR RSL}。
进一步可简化为:

符号曲线
CCC{LRL RLR}
CSC{LSL RSR LSR RSL}

其中C表示单位圆弧,S表示直线段。
在这里插入图片描述

过程推导

Dubins曲线详细笔记

1)坐标变换

设起点为 s ( x i , y i , α i ) s\left(x_i, y_i, \alpha_i\right) s(xi,yi,αi) , 终点为 g ( x g , y g , β g ) g\left(x_g, y_g, \beta_g\right) g(xg,yg,βg) ,先坐标变换+将起点平移支原点,并放置 θ \theta θ角,则终点也落在 x x x 轴上,起点和终点的坐标为 s ( 0 , 0 , α ) , g ( d , 0 , β ) s(0,0, \alpha), g(d, 0, \beta) s(0,0,α),g(d,0,β) ,其中:

θ = atan ⁡ 2 ( y g − y i x g − x i ) D = sqrt ⁡ ( ( x i − x g ) 2 + ( y i − y g ) 2 ) d = D / R α =   m o d   ( α i − θ , 2 π ) β =   m o d   ( β g − θ , 2 π ) \begin{aligned} & \theta=\operatorname{atan} 2\left(\frac{y_g-y_i}{x_g-x_i}\right) \\ & D=\operatorname{sqrt}\left(\left(x_i-x_g\right)^2+\left(y_i-y_g\right)^2\right) \\ & d=D / R \\ & \alpha=\bmod \left(\alpha_i-\theta, 2 \pi\right) \\ & \beta=\bmod \left(\beta_g-\theta, 2 \pi\right) \end{aligned} θ=atan2(xgxiygyi)D=sqrt((xixg)2+(yiyg)2)d=D/Rα=mod(αiθ,2π)β=mod(βgθ,2π)

其中 θ \theta θ 为起点和终点航向角度差,上面的角度都在 [ 0 , 2 π ] [0,2 \pi] [0,2π] 之间。上面将 D D D 除上 R R R 是为了正则化 R R R ,这样每个最小转弯半径都为 1 ,由角度计算弧长时更方便,弧长即等于角度的弧度,因此在后面看到的 cos ⁡ ( α ) \cos (\alpha) cos(α) ,其实是前面省略了 R \mathbf{R} R ,也就是 1 \mathbf{1} 1

2)Dubins 路径长度计算

整个路径长度 L L Lf分为三段:
L = t + p + q L=t+p+q L=t+p+q
(1) LSL
在这里插入图片描述
根据几何关系(公式来源论文:Classification of the Dubins set),即d与 p 在 x x x 轴和 y y y 轴上的关系,以及车辆偏航角变化与 β \beta β 角的关系:

p cos ⁡ ( α + t ) − sin ⁡ α + sin ⁡ β = d p sin ⁡ ( α + t ) + cos ⁡ α − cos ⁡ β = 0 α + t + q = β {   m o d   2 π } \begin{aligned} & p \cos (\alpha+t)-\sin \alpha+\sin \beta=d \\ & p \sin (\alpha+t)+\cos \alpha-\cos \beta=0 \\ & \alpha+t+q=\beta\{\bmod 2 \pi\} \end{aligned} pcos(α+t)sinα+sinβ=dpsin(α+t)+cosαcosβ=0α+t+q=β{mod2π}

上面公式的过程:

∠ α = ∠ 1 + π ∠ 1 = ∠ 2 + ∠ 3 ∠ t + ∠ 2 = π − − > ∠ α + ∠ t = 2 π + ∠ 3 − − < cos ⁡ ( ∠ α + ∠ t ) = cos ⁡ ( ∠ 3 ) − − > sin ⁡ ( ∠ α + ∠ t ) = − sin ⁡ ( ∠ 3 ) − − > sin ⁡ ( ∠ α ) = − sin ⁡ ( ∠ 1 ) ; cos ⁡ ( ∠ α ) = cos ⁡ ( ∠ 1 ) \begin{aligned} & \angle \alpha=\angle 1+\pi \\ & \angle 1=\angle 2+\angle 3 \\ & \angle t+\angle 2=\pi \\ & -->\angle \alpha+\angle t=2 \pi+\angle 3 \\ & --<\cos (\angle \alpha+\angle t)=\cos (\angle 3) \\ & -->\sin (\angle \alpha+\angle t)=-\sin (\angle 3) \\ & -->\sin (\angle \alpha)=-\sin (\angle 1) ; \cos (\angle \alpha)=\cos (\angle 1) \end{aligned} α=∠1+π∠1=∠2+∠3t+∠2=π>α+t=2π+∠3<cos(α+t)=cos(∠3)>sin(α+t)=sin(∠3)>sin(α)=sin(∠1);cos(α)=cos(∠1)
Δ s O 1 B \Delta s O_1 B ΔsO1B 中, ∣ s B ∣ = ∣ s O 1 ∣ sin ⁡ ( ∠ 1 ) = − sin ⁡ ( α ) |s B|=\left|s O_1\right| \sin (\angle 1)=-\sin (\alpha) sB=sO1sin(∠1)=sin(α)
Δ g O 2 C \Delta g O_2 C ΔgO2C 中, ∣ g C ∣ = ∣ g O 2 ∣ sin ⁡ ( β ) , |g C|=\left|g O_2\right| \sin (\beta) , gC=gO2sin(β)
Δ O 1 O 2 A \Delta O_1 O_2 A ΔO1O2A 中, ∣ A O 2 ∣ = p cos ⁡ ( ∠ 3 ) = cos ⁡ ( ∠ α + ∠ t ) \left|A O_2\right|=p \cos (\angle 3)=\cos (\angle \alpha+\angle t) AO2=pcos(∠3)=cos(α+t)
由于 R = 1 \mathrm{R}=1 R=1,则 ∠ t = t , q = β − ∠ 3 \angle t=t, q=\beta-\angle 3 t=t,q=β∠3
另外,车辆从 s 走过 s + t + p s+t+p s+t+p 角度,到达 g 点时的角度为 β \beta β ,即 α + t + q = β   m o d   2 π \alpha+t+q=\beta \bmod 2 \pi α+t+q=βmod2π.
解上面的方程组,可解得:

t l s l = − α + arctan ⁡ cos ⁡ β − cos ⁡ α d + sin ⁡ α − sin ⁡ β {   m o d   2 π } p l s l = 2 + d 2 − 2 cos ⁡ ( α − β ) + 2 d ( sin ⁡ α − sin ⁡ β ) q l s l = β − arctan ⁡ cos ⁡ β − cos ⁡ α d + sin ⁡ α − sin ⁡ β {   m o d   2 π } \begin{aligned} & t_{l s l}=-\alpha+\arctan \frac{\cos \beta-\cos \alpha}{d+\sin \alpha-\sin \beta}\{\bmod 2 \pi\} \\ & p_{l s l}=\sqrt{2+d^2-2 \cos (\alpha-\beta)+2 d(\sin \alpha-\sin \beta)} \\ & q_{l s l}=\beta-\arctan \frac{\cos \beta-\cos \alpha}{d+\sin \alpha-\sin \beta}\{\bmod 2 \pi\} \end{aligned} tlsl=α+arctand+sinαsinβcosβcosα{mod2π}plsl=2+d22cos(αβ)+2d(sinαsinβ) qlsl=βarctand+sinαsinβcosβcosα{mod2π}

则总长度等于:

L l s l = t l s l + p l s l + q l s l = − α + β + p l s l \mathcal{L}_{l s l}=t_{l s l}+p_{l s l}+q_{l s l}=-\alpha+\beta+p_{l s l} Llsl=tlsl+plsl+qlsl=α+β+plsl

对于其中一种特殊情况:
在这里插入图片描述
2)LRL
对于LRL和RLR的情况,一定是 D < 4 R D<4 R D<4R 的情况下才会出现,即使 D = 4 R D=4 R D=4R 的情况,前面的LSL 等4种情况中的某种情况也会比这两个情况要更优,因此,LRL 情况时构成的三个圆,都是等半径的,也即等于 1 .
在这里插入图片描述
跟前面 LSL 的方法一样,在x和y向构建方程组(未加 ∠ \angle 符号,例如 α \alpha α ∠ α \angle \alpha α ):

− 2 sin ⁡ ( α + t − p ) + 2 sin ⁡ ( α + t ) = d + sin ⁡ α − sin ⁡ β 2 cos ⁡ ( α + t − p ) − 2 cos ⁡ ( α + t ) = − cos ⁡ α + cos ⁡ β α + t − p + q = β {   m o d   2 π } \begin{aligned} & -2 \sin (\alpha+t-p)+2 \sin (\alpha+t)=d+\sin \alpha-\sin \beta \\ & 2 \cos (\alpha+t-p)-2 \cos (\alpha+t)=-\cos \alpha+\cos \beta \\ & \alpha+t-p+q=\beta\{\bmod 2 \pi\} \end{aligned} 2sin(α+tp)+2sin(α+t)=d+sinαsinβ2cos(α+tp)2cos(α+t)=cosα+cosβα+tp+q=β{mod2π}

首先来看角度关系:

∠ α = π + ∠ 1 ∠ t = π + ∠ 2 ∠ p = ∠ H O 1 K + ∠ 3 = ∠ 1 + ∠ 2 + ∠ 3 ∠ α + ∠ t = 2 π + ∠ 1 + ∠ 2 = ∠ 1 + ∠ 2 ∠ α + ∠ t − ∠ p = − ∠ 3 ∠ q − ∠ 3 = ∠ β \begin{aligned} & \angle \alpha=\pi+\angle 1 \\ & \angle t=\pi+\angle 2 \\ & \angle p=\angle H O_1 K+\angle 3=\angle 1+\angle 2+\angle 3 \\ & \angle \alpha+\angle t=2 \pi+\angle 1+\angle 2=\angle 1+\angle 2 \\ & \angle \alpha+\angle t-\angle p=-\angle 3 \\ & \angle q-\angle 3=\angle \beta \end{aligned} α=π+∠1t=π+∠2p=HO1K+∠3=∠1+∠2+∠3α+t=2π+∠1+∠2=∠1+∠2α+tp=∠3q∠3=β

正余弦与长度关系:

sin ⁡ ( ∠ α ) = − sin ⁡ ( ∠ 1 ) = − ∣ s B ∣ cos ⁡ ( ∠ α ) = − cos ⁡ ( ∠ 1 ) = − ∣ B O 1 ∣ sin ⁡ ( ∠ β ) = ∣ C g ∣ cos ⁡ ( ∠ β ) = ∣ C O 2 ∣ sin ⁡ ( ∠ α + ∠ t ) = sin ⁡ ( ∠ 1 + ∠ 2 ) = ∣ H K ∣ cos ⁡ ( ∠ α + ∠ t ) = cos ⁡ ( ∠ 1 + ∠ 2 ) = ∣ O 1 H ∣ sin ⁡ ( ∠ α + ∠ t − ∠ p ) = sin ⁡ ( − ∠ 3 ) = − ∣ F G ∣ cos ⁡ ( ∠ α + ∠ t − ∠ p ) = cos ⁡ ( − ∠ 3 ) = ∣ F O 3 ∣ \begin{aligned} & \sin (\angle \alpha)=-\sin (\angle 1)=-|s B| \\ & \cos (\angle \alpha)=-\cos (\angle 1)=-\left|B O_1\right| \\ & \sin (\angle \beta)=|C g| \\ & \cos (\angle \beta)=\left|C O_2\right| \\ & \sin (\angle \alpha+\angle t)=\sin (\angle 1+\angle 2)=|H K| \\ & \cos (\angle \alpha+\angle t)=\cos (\angle 1+\angle 2)=\left|O_1 H\right| \\ & \sin (\angle \alpha+\angle t-\angle p)=\sin (-\angle 3)=-|F G| \\ & \cos (\angle \alpha+\angle t-\angle p)=\cos (-\angle 3)=\left|F O_3\right| \end{aligned} sin(α)=sin(∠1)=sBcos(α)=cos(∠1)=BO1sin(β)=Cgcos(β)=CO2sin(α+t)=sin(∠1+∠2)=HKcos(α+t)=cos(∠1+∠2)=O1Hsin(α+tp)=sin(∠3)=FGcos(α+tp)=cos(∠3)=FO3
x x x 方向:
对于 ∣ s B ∣ |s B| sB ∣ C g ∣ |C g| Cg ,与LSL的情况一样,分别等于 − sin ⁡ ( α ) -\sin (\alpha) sin(α) sin ⁡ ( β ) \sin (\beta) sin(β) ,因此第一个等式的右边即对应 ∣ B C ∣ |B C| BC

∣ B E ∣ = 2 ∣ B D ∣ = 2 sin ⁡ ( ∠ 1 + ∠ 2 ) = 2 sin ⁡ ( ∠ α + ∠ t ) ∣ E C ∣ = 2 ∣ F G ∣ = 2 sin ⁡ ( ∠ 3 ) = − 2 sin ⁡ ( − ∠ 3 ) = − 2 sin ⁡ ( ∠ α + ∠ t − ∠ p ) \begin{aligned} & |B E|=2|B D|=2 \sin (\angle 1+\angle 2)=2 \sin (\angle \alpha+\angle t) \\ & |E C|=2|F G|=2 \sin (\angle 3)=-2 \sin (-\angle 3)=-2 \sin (\angle \alpha+\angle t-\angle p) \end{aligned} BE=2∣BD=2sin(∠1+∠2)=2sin(α+t)EC=2∣FG=2sin(∠3)=2sin(∠3)=2sin(α+tp)

y 方向:

∣ C O 2 ∣ + ∣ B H ∣ + 2 ∣ H O 1 ∣ = 2 ∣ F O 3 ∣ \left|C O_2\right|+|B H|+2\left|H O_1\right|=2\left|F O_3\right| CO2+BH+2HO1=2FO3

根据正余弦值与长度的关系:

2 cos ⁡ ( α + t ) − cos ⁡ α + cos ⁡ β = 2 cos ⁡ ( α + t − p ) 2 \cos (\alpha+t)-\cos \alpha+\cos \beta=2 \cos (\alpha+t-p) 2cos(α+t)cosα+cosβ=2cos(α+tp)

解方程组 + { }^{+} +得:

t l r l = ( − α + arctan ⁡ ( − cos ⁡ α + cos ⁡ α d + sin ⁡ α − sin ⁡ β ) + p l r l 2 ) {   m o d   2 π } p l r l = arccos ⁡ 1 8 ( 6 − d 2 + 2 cos ⁡ ( α − β ) + 2 d ( sin ⁡ α − sin ⁡ β ) ) {   m o d   2 π } q l r l = β (   m o d   2 π ) − α + 2 p l r l {   m o d   2 π } \begin{aligned} t_{l r l} & =\left(-\alpha+\arctan \left(\frac{-\cos \alpha+\cos \alpha}{d+\sin \alpha-\sin \beta}\right)+\frac{p_{l r l}}{2}\right)\{\bmod 2 \pi\} \\ p_{l r l} & =\arccos \frac{1}{8}\left(6-d^2+2 \cos (\alpha-\beta)+2 d(\sin \alpha-\sin \beta)\right)\{\bmod 2 \pi\} \\ q_{l r l} & =\beta(\bmod 2 \pi)-\alpha+2 p_{l r l}\{\bmod 2 \pi\} \end{aligned} tlrlplrlqlrl=(α+arctan(d+sinαsinβcosα+cosα)+2plrl){mod2π}=arccos81(6d2+2cos(αβ)+2d(sinαsinβ)){mod2π}=β(mod2π)α+2plrl{mod2π}

总长度为:

L l r l = t l r l + p l r l + q l r l = − α + β + 2 p l r l \mathcal{L}_{l r l}=t_{l r l}+p_{l r l}+q_{l r l}=-\alpha+\beta+2 p_{l r l} Llrl=tlrl+plrl+qlrl=α+β+2plrl
上面只是介绍了CSC和CCC中的一种情况
其他情况的解如下图所示
在这里插入图片描述

3)位置坐标计算

在这里插入图片描述
在这里插入图片描述

Matlab 程序

引自
main

clear all;  % 清除工作空间中的所有变量
close all;  % 关闭所有图形窗口
clc;        % 清空命令行窗口

r = 5;  % 设定曲率半径

% % 以下几行分别代表不同的Dubins路径类型,取消注释来选择路径类型

% % LSL: 左-直-左的路径
p1 = [10 10 0*pi/180];  % 起点坐标及初始朝向角(弧度制)
p2 = [15 15 0*pi/180];  % 终点坐标及终点朝向角(弧度制)

% LSR: 左-直-右的路径
% p1 = [10 10 0*pi/180];
% p2 = [25 25 0*pi/180];

% RSL: 右-直-左的路径
% p1 = [10 10 0*pi/180];  % 设置起点
% p2 = [25 -25 0*pi/180];  % 设置终点

% % RSR: 右-直-右的路径
% p1 = [0 0 90*pi/180];
% p2 = [15 15 0*pi/180];

% % RLR: 右-左-右的路径
% p1 = [10 10 0*pi/180];
% p2 = [15 15 180*pi/180];

% % LRL: 左-右-左的路径
% p1 = [10 10 180*pi/180];
% p2 = [15 15 0*pi/180];

% 计算起点和终点之间的坐标差值
dx = p2(1) - p1(1);  % x轴方向差
dy = p2(2) - p1(2);  % y轴方向差

% 计算两点之间的距离,并标准化为以半径r为单位的距离
d = sqrt(dx^2 + dy^2) / r;

% 计算起点与终点连线相对于x轴的角度
theta = mod(atan2(dy, dx), 2*pi);

% 计算alpha和beta,分别为起点和终点的方向角相对于theta的角度
alpha = mod((p1(3) - theta), 2*pi);
beta  = mod((p2(3) - theta), 2*pi);

% 初始化存储路径长度的矩阵L,每行对应一种路径类型
L = zeros(6, 4);  
L(1,:) = LSL(alpha, beta, d);  % 计算LSL路径的长度
L(2,:) = LSR(alpha, beta, d);  % 计算LSR路径的长度
L(3,:) = RSL(alpha, beta, d);  % 计算RSL路径的长度
L(4,:) = RSR(alpha, beta, d);  % 计算RSR路径的长度
L(5,:) = RLR(alpha, beta, d);  % 计算RLR路径的长度
L(6,:) = LRL(alpha, beta, d);  % 计算LRL路径的长度

% 选择最短的路径类型
[~, ind] = min(L(:,1));  % 找出最短路径的索引

% 定义路径类型的字符串
types = ['LSL'; 'LSR'; 'RSL'; 'RSR'; 'RLR'; 'LRL'];

% 定义起始点,包含坐标和方向角
p_start = [0 0 p1(3)];

% 计算Dubins路径的每一段
mid1 = dubins_segment(L(ind, 2), p_start, types(ind, 1));  % 第1段路径
mid2 = dubins_segment(L(ind, 3), mid1, types(ind, 2));     % 第2段路径

% 初始化路径数组
path = [];

% 逐步计算路径上的点
for step = 0:0.05:L(ind,1)*r
    t = step / r;  % 当前步长归一化
    
    % 根据当前步长判断处于哪一段路径并计算相应的点
    if (t < L(ind, 2))
        end_pt = dubins_segment(t, p_start, types(ind, 1));  % 第1段路径
    elseif (t < L(ind, 2) + L(ind, 3))
        end_pt = dubins_segment(t - L(ind, 2), mid1, types(ind, 2));  % 第2段路径
    else
        end_pt = dubins_segment(t - L(ind, 2) - L(ind, 3), mid2, types(ind, 3));  % 第3段路径
    end
    
    % 将路径点坐标还原回实际坐标,并计算方向角
    end_pt(1) = end_pt(1) * r + p1(1);  % x坐标转换
    end_pt(2) = end_pt(2) * r + p1(2);  % y坐标转换
    end_pt(3) = mod(end_pt(3), 2*pi);   % 角度转换
    
    % 将当前点添加到路径中
    path = [path; end_pt];
end

% 画出起点和终点
plot(p1(1), p1(2), 'ro');  % 画出起点
hold on;
quiver(p1(1), p1(2), 2*cos(p1(3)), 2*sin(p1(3)));  % 画出起点的方向

plot(p2(1), p2(2), 'r*');  % 画出终点
quiver(p2(1), p2(2), 2*cos(p2(3)), 2*sin(p2(3)));  % 画出终点的方向

% 画出路径
plot(path(:,1), path(:,2), 'b');  % 画出Dubins路径
axis equal;  % 设置坐标轴比例相等

dubins_segment

function seg_end = dubins_segment(seg_param, seg_init, seg_type)
    % 该函数计算Dubins路径中某一段的终点位置
    % 输入:
    %   seg_param: 当前段的参数(长度或角度)
    %   seg_init:  当前段的起始点坐标及角度 [x, y, theta]
    %   seg_type:  当前段的类型 ('L'表示左转, 'R'表示右转, 'S'表示直线)
    % 输出:
    %   seg_end:  该段的终点坐标及角度 [x, y, theta]

    % 如果当前段是左转 ('L'),使用相应的公式计算终点
    if( seg_type == 'L' ) 
        seg_end(1) = seg_init(1) + sin(seg_init(3) + seg_param) - sin(seg_init(3));  % 计算x坐标
        seg_end(2) = seg_init(2) - cos(seg_init(3) + seg_param) + cos(seg_init(3));  % 计算y坐标
        seg_end(3) = seg_init(3) + seg_param;  % 更新角度(朝向)
        
    % 如果当前段是右转 ('R'),使用相应的公式计算终点
    elseif( seg_type == 'R' )
        seg_end(1) = seg_init(1) - sin(seg_init(3) - seg_param) + sin(seg_init(3));  % 计算x坐标
        seg_end(2) = seg_init(2) + cos(seg_init(3) - seg_param) - cos(seg_init(3));  % 计算y坐标
        seg_end(3) = seg_init(3) - seg_param;  % 更新角度(朝向)

    % 如果当前段是直线 ('S'),使用相应的公式计算终点
    elseif( seg_type == 'S' ) 
        seg_end(1) = seg_init(1) + cos(seg_init(3)) * seg_param;  % 计算x坐标
        seg_end(2) = seg_init(2) + sin(seg_init(3)) * seg_param;  % 计算y坐标
        seg_end(3) = seg_init(3);  % 角度保持不变
    end
end

LSL

function L = LSL(alpha,beta,d)
tmp0 = d + sin(alpha) - sin(beta);
p_squared = 2 + (d*d) -(2*cos(alpha - beta)) + (2*d*(sin(alpha) - sin(beta))); % plsl的平方
if( p_squared < 0 )
    L = [inf inf inf inf];
else
    tmp1 = atan2( (cos(beta)-cos(alpha)), tmp0 );
    t = mod((-alpha + tmp1 ), 2*pi);
    p = sqrt( p_squared );
    q = mod((beta - tmp1 ), 2*pi);
    L=[t+p+q t p q];
end

end

RSL

function L = RSL(alpha,beta,d)
p_squared = (d*d) -2 + (2*cos(alpha - beta)) - (2*d*(sin(alpha)+sin(beta)));
if( p_squared< 0 )
    L = [inf inf inf inf];
else
    p    = sqrt( p_squared );
    tmp2 = atan2( (cos(alpha)+cos(beta)), (d-sin(alpha)-sin(beta)) ) - atan2(2.0, p);
    t    = mod((alpha - tmp2), 2*pi);
    q    = mod((beta - tmp2), 2*pi);
    L=[t+p+q t p q];
end
end

LSR

function L = LSR(alpha,beta,d)
p_squared = -2 + (d*d) + (2*cos(alpha - beta)) + (2*d*(sin(alpha)+sin(beta)));
if( p_squared < 0 )
    L = [inf inf inf inf];
else
    p    = sqrt( p_squared );
    tmp2 = atan2( (-cos(alpha)-cos(beta)), (d+sin(alpha)+sin(beta)) ) - atan2(-2.0, p);
    t    = mod((-alpha + tmp2), 2*pi);
    q    = mod(( -mod((beta), 2*pi) + tmp2 ), 2*pi);
    L=[t+p+q t p q];
end
end

RSR

function L = RSR(alpha,beta,d)
tmp0 = d-sin(alpha)+sin(beta);
p_squared = 2 + (d*d) -(2*cos(alpha - beta)) + (2*d*(sin(beta)-sin(alpha)));
if( p_squared < 0 )
    L = [inf inf inf inf];
else
    tmp1 = atan2( (cos(alpha)-cos(beta)), tmp0 );
    t = mod(( alpha - tmp1 ), 2*pi);
    p = sqrt( p_squared );
    q = mod(( -beta + tmp1 ), 2*pi);
    L=[t+p+q t p q];
end
end

RLR

function L = RLR(alpha,beta,d)
tmp_rlr = (6. - d*d + 2*cos(alpha - beta) + 2*d*(sin(alpha)-sin(beta))) / 8.;
if( abs(tmp_rlr) > 1)
    L = [inf inf inf inf];
else
    p = mod(( 2*pi - acos( tmp_rlr ) ), 2*pi);
    t = mod((alpha - atan2( cos(alpha)-cos(beta), d-sin(alpha)+sin(beta) ) + mod(p/2, 2*pi)), 2*pi);
    q = mod((alpha - beta - t + mod(p, 2*pi)), 2*pi);
    L=[t+p+q t p q];
end
end

LRL

function L = LRL(alpha,beta,d)
tmp_lrl = (6. - d*d + 2*cos(alpha - beta) + 2*d*(- sin(alpha) + sin(beta))) / 8.;
if( abs(tmp_lrl) > 1)
    L = [inf inf inf inf];
else
    p = mod(( 2*pi - acos( tmp_lrl ) ), 2*pi);
    t = mod((-alpha - atan2( cos(alpha)-cos(beta), d+sin(alpha)-sin(beta) ) + p/2), 2*pi);
    q = mod((mod(beta, 2*pi) - alpha -t + mod(p, 2*pi)), 2*pi);
    L=[t+p+q t p q];
end
end

参考内容
[1] Dubins曲线详细笔记
[2]Dubins曲线学习笔记
[3 matlab练习程序(dubins曲线)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值