等长轨迹κ求解算法设计
摘要
本报告针对DTS(Dynamically Time‐Scaled)算法生成的轨迹,提出一种基于二分查找的数值方法,用以求解参数 $\kappa^*$,从而使得生成的 $\kappa$-轨迹路径长度与原始航路点轨迹 $\mathcal{P}$ 的路径长度完全一致。该方法依托于路径长度差函数 $\Lambda(\kappa)$ 在区间 $[0,1]$ 上的单调性和端点符号异号性质,通过迭代逼近 $\Lambda(\kappa)=0$ 的唯一解,实现了时间关键任务下轨迹光滑与时序约束的双重满足。
1. 问题描述
原始路径 $\mathcal{P} = \overline{\mathbf{w}_{i-1}\mathbf{w}_i\mathbf{w}_{i+1}}$ 的路径长度
$$ L_{\rm orig} = \|\mathbf{w}_i - \mathbf{w}_{i-1}\| + \|\mathbf{w}_{i+1} - \mathbf{w}_i\|. $$$\kappa$-轨迹 在参数 $\kappa\in[0,1]$ 下生成对应的平滑转弯路径,其路径长度可表示为
$$ L(\kappa) = L_{\rm orig} + \Lambda(\kappa), $$其中 $\Lambda(\kappa)$ 如式(42)所定义。
目标:求解唯一的 $\kappa^*\in[0,1]$,使得
$$ L(\kappa^*) = L_{\rm orig} \quad\Longleftrightarrow\quad \Lambda(\kappa^*) = 0. $$2. 数学背景
路径长度差函数 $\Lambda(\kappa)$ 引理6给出 $\kappa$-轨迹的路径长度差解析表达式:
$$ \begin{aligned} \Lambda(\kappa) &=2R\Bigl(\tfrac{\pi-\beta}{2} +2\cos^{-1}\bigl(\Xi(\kappa,\beta)\bigr) -\Xi(\kappa,\beta)\sqrt{\tfrac{1}{\Xi(\kappa,\beta)^2}-1}\\ &\quad\;-\,(1-\kappa)\cos\tfrac{\beta}{2} -\kappa\cot\tfrac{\beta}{2}\Bigr), \end{aligned} $$其中 $\beta = \cos^{-1}\bigl(\hat{\mathbf{t}}_{i,i+1}^T\hat{\mathbf{t}}_{i-1,i}\bigr)$,
$\Xi(\kappa,\beta)=\tfrac{(1+\kappa)+(1-\kappa)\sin(\beta/2)}{2}$,
$R=\hat v/c$。
单调性和端点条件
- $\Lambda(\kappa)$ 关于 $\kappa$ 递减,且 $\Lambda(0)>0$, $\Lambda(1)<0$(引理7) 。
- 因此,存在且仅存在唯一 $\kappa^*\in(0,1)$ 使得 $\Lambda(\kappa^*)=0$(定理8)。
3. 算法设计
3.1 输入与输出
输入
- 三点坐标 $\mathbf{w}_{i-1},\mathbf{w}_i,\mathbf{w}_{i+1}$。
- 预设速度 $\hat v$ 与转向速率 $c$,计算半径 $R=\hat v/c$。
- 目标精度 $\varepsilon$(如 $10^{-6}$)。
输出
- 唯一的 $\kappa^*\in[0,1]$,满足 $\Lambda(\kappa^*)=0$。
3.2 路径差函数计算
- 计算夹角 $\beta$。
- 对给定 $\kappa$,按引理6公式计算 $\Lambda(\kappa)$。
- 注意数值鲁棒性,避免在 $\Xi\approx0$ 或 $\Xi\approx1$ 时出现除零或浮点不稳定。
3.3 二分查找流程
设定区间 $[a,b]=[0,1]$。
计算 $f(a)=\Lambda(a)$, $f(b)=\Lambda(b)$,验端点符号异号。
重复直到 $|b-a|<\varepsilon$:
- 令 $m=(a+b)/2$,计算 $f(m)=\Lambda(m)$。
- 若 $f(m)>0$,则令 $a\leftarrow m$;否则令 $b\leftarrow m$。
返回 $\kappa^*=(a+b)/2$。
3.4 终止条件与复杂度
- 终止条件:区间长度 $|b-a|<\varepsilon$。
- 迭代次数:$N=O(\log_2(1/\varepsilon))$。
- 每次迭代成本:一次 $\Lambda$ 评估,涉及若干三角函数与平方根。总体时间复杂度 $O(\log(1/\varepsilon))$。
4. 伪代码
function FindKappaStar(w_prev, w_i, w_next, v_hat, c, eps):
R ← v_hat / c
compute β = arccos(dot(normalize(w_next - w_i), normalize(w_i - w_prev)))
define Lambda(κ):
Xi = ((1+κ) + (1-κ)*sin(β/2)) / 2
return 2*R*( (π-β)/2
+ 2*arccos(Xi)
- Xi*sqrt(1/Xi^2 - 1)
- (1-κ)*cos(β/2)
- κ*cot(β/2) )
a ← 0; b ← 1
f_a ← Lambda(a); f_b ← Lambda(b)
assert f_a > 0 and f_b < 0
while (b - a) > eps:
m ← (a + b) / 2
f_m ← Lambda(m)
if f_m > 0:
a ← m
else:
b ← m
return (a + b) / 25. 实现注意事项
数值稳定性:
- 对 $\Xi$ 接近 0 或 1 时,使用
max(min(Xi,1-δ), δ)限幅。 - 三角函数参数应以弧度制调用。
- 对 $\Xi$ 接近 0 或 1 时,使用
DTS 系统集成:
- 在轨迹生成前调用
FindKappaStar,获取 $\kappa^*$。 - 将 $\kappa^*$ 传入 DTS 控制律,生成平滑转弯命令序列。
- 在轨迹生成前调用
性能优化:
- 对于多段路径,可复用相同 $\beta$ 及 $R$ 计算。
- 可并行计算各段 $\kappa^*$。
6. 小结
报告提出的基于二分查找的算法,能高效、准确地求解使 DTS 生成轨迹与原始航路点轨迹等长的参数 $\kappa^*$。该方法简单易实现,时间复杂度 $O(\log(1/\varepsilon))$,适用于实时轨迹规划系统。