1. 项目背景与核心思路
大学生方程式无人赛车(FSAE Autonomous)是近年来高校智能车辆领域的热门竞赛项目,其中路径规划算法直接决定了赛车在锥桶赛道中的表现。传统基于多项式拟合的方法在急弯道处容易出现轨迹抖动,而基于Delaunay三角剖分的方案通过几何拓扑关系构建更稳定的行驶走廊。
这个算法的核心在于将锥桶坐标视为二维平面点集,通过Delaunay三角剖分建立赛道空间的三角网格结构。与Voronoi图相比,Delaunay三角剖分生成的三角形具有"最大最小角"特性,能避免出现狭长的三角形,这为后续路径平滑提供了几何基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Delaunay三角剖分的实现要点
2.1 离散点集处理
首先需要处理原始锥桶坐标数据。实际比赛中采集的GPS/视觉数据往往存在噪声,建议先进行以下预处理:
matlab复制% 示例:中值滤波去噪
window_size = 3;
smoothed_cones = medfilt1(raw_cones, window_size);
% 剔除重复点
[unique_cones, ia] = unique(cones, 'rows', 'stable');
2.2 三角剖分算法选择
Matlab内置了delaunayTriangulation函数,其采用Bowyer-Watson算法实现,时间复杂度为O(nlogn)。对于实时性要求高的场景,可以预计算赛道静态部分:
matlab复制dt = delaunayTriangulation(cones(:,1), cones(:,2));
triplot(dt); % 可视化验证
注意:实际应用中需处理动态障碍物,建议采用增量式Delaunay算法,使用MATLAB的incrementalDelaunay类实现。
3. 路径生成关键技术
3.1 可行边筛选策略
不是所有三角形边都适合作为路径参考,需要根据赛车动力学约束筛选:
- 剔除与赛道中心线夹角大于30°的边
- 保留长度在1.5-3米范围内的边(对应FSAE赛车转向能力)
- 排除赛道边界外的边(通过射线法判断)
matlab复制% 计算边角度阈值过滤
valid_edges = [];
for i = 1:size(dt.Edges,1)
edge_vec = dt.Points(dt.Edges(i,2),:) - dt.Points(dt.Edges(i,1),:);
angle = atan2d(edge_vec(2), edge_vec(1));
if abs(angle) < 30
valid_edges = [valid_edges; dt.Edges(i,:)];
end
end
3.2 三次样条插值优化
直接连接边中点会产生折线路径,需用样条曲线平滑。建议使用not-a-knot边界条件:
matlab复制waypoints = compute_midpoints(valid_edges); % 计算中点
pp = spline(waypoints(:,1), waypoints(:,2));
fine_path = ppval(pp, linspace(min(waypoints(:,1)), max(waypoints(:,1)), 100));
4. 实际应用中的调参经验
4.1 动力学约束融合
通过实验我们发现以下参数组合效果最佳:
- 最大横向加速度:1.5G(干燥沥青路面)
- 前瞻距离:3-5米(与车速正相关)
- 路径曲率变化率限制:0.1 m^(-1)/m
matlab复制% 曲率约束检查
k = abs(diff(atan2(gradient(fine_path(:,2)), gradient(fine_path(:,1)))));
if any(diff(k)./diff(fine_path(:,1)) > 0.1)
warning('曲率变化过快,需重新规划');
end
4.2 实时性优化技巧
- 使用KD-tree加速近邻搜索
- 对静态赛道部分预计算三角网格
- 采用固定时间步长的增量式更新
5. 典型问题排查指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 路径突然跳变 | 三角网格拓扑变化 | 增加路径变化率限制 |
| 弯道切内线过度 | 边筛选角度阈值过大 | 调整为15-25° |
| 直道出现蛇形路径 | 采样点过密 | 增加最小边长度限制 |
实测中我们发现,当锥桶间距小于车宽时,算法容易生成振荡路径。这时可以引入历史路径加权平均:
matlab复制smoothed_path = 0.7*current_path + 0.3*previous_path;
6. 算法扩展方向
对于更高阶的参赛队伍,可以考虑:
- 融合MPC控制器的协同设计
- 加入轮胎摩擦椭圆约束
- 使用GPU加速计算(通过MATLAB Parallel Computing Toolbox)
这个方案在我们去年的比赛中实现了平均圈速提升12%,最关键的是大幅降低了冲出赛道的概率。特别是在S弯连续变换时,三角剖分生成的路径比传统方法更早开始转向准备,这可能是性能提升的主要原因。
