道路模型基础:道路几何形状与结构要素
各位同学好,我是你们的老朋友。今天我们来聊聊道路模型的基础知识。说实话,这部分内容看起来简单,但我在实际项目中踩过不少坑。你想想看,如果连道路的基本形状都搞不清楚,路径规划算法再牛也是白搭。
道路模型,说白了就是给自动驾驶车辆一张「地图说明书」。它告诉车:路有多宽、弯有多急、车道有几条。我刚开始做路径规划时,总觉得这些是测绘的事,直到有一次仿真测试中车辆冲出道路……嗯,从那以后我再也不敢轻视道路建模了。
核心观点:道路模型是路径规划的基础约束。没有准确的道路模型,路径规划就是无源之水、无本之木。
3.1 道路几何形状
道路的几何形状,我习惯把它分为三类:直线、曲线和回旋线。这三兄弟构成了道路的基本骨架。
3.1.1 直线段
直线是最简单的道路形状。但在实际项目中,纯直线的道路其实很少见。为什么?因为太单调了,驾驶员容易疲劳。不过在城市道路中,直线段还是很多的。
直线段的数学表达很简单:
// 直线段参数
起点:P0 = (x0, y0)
终点:P1 = (x1, y1)
方向向量:d = (dx, dy) = (x1-x0, y1-y0)
长度:L = sqrt(dx² + dy²)
我记得有一次做高速公路路径规划,遇到一段长达5公里的直线。按理说很简单,但问题出在——车辆在直线段上容易偏离车道中心。后来我加了一个横向偏差约束,才解决了这个问题。
我的经验:直线段虽然简单,但别忘了考虑车辆动力学。高速行驶时,微小的横向偏差都会被放大。
3.1.2 曲线段
曲线段就复杂多了。常见的曲线有圆弧曲线和缓和曲线。圆弧曲线曲率恒定,数学上很好处理。
圆弧曲线的关键参数:
| 参数 | 符号 | 说明 |
|---|---|---|
| 半径 | R | 曲率半径,单位米 |
| 曲率 | κ | κ = 1/R,单位1/m |
| 圆心角 | θ | 圆弧对应的角度 |
| 弧长 | s | s = R × θ |
你想想看,如果车辆以60km/h的速度进入一个半径50米的弯道,会发生什么?离心力会很大。所以路径规划时,必须考虑曲率与速度的匹配。
避坑指南:我曾经在项目中直接用圆弧曲线做路径规划,结果车辆在弯道入口处出现剧烈转向。后来才发现,圆弧曲线和直线之间缺少过渡,导致曲率突变。这就是为什么需要回旋线。
3.1.3 回旋线
回旋线,也叫缓和曲线。它的曲率是线性变化的。说白了,就是从直线到圆弧的平滑过渡。
回旋线的核心公式:
回旋线参数方程:
x(s) = ∫₀ˢ cos(κ₀·t + (κ₁-κ₀)·t²/(2L)) dt
y(s) = ∫₀ˢ sin(κ₀·t + (κ₁-κ₀)·t²/(2L)) dt
其中:
s:弧长参数
κ₀:起点曲率
κ₁:终点曲率
L:回旋线总长
这个公式看着复杂,但实际工程中我们一般用查表法或者数值积分。我个人习惯用龙格-库塔法来求解,精度够用,速度也快。
回旋线的好处是什么?它让车辆转向变得平滑。想象一下,你开车时突然打方向盘和慢慢打方向盘的区别。回旋线就是那个「慢慢打」的过程。
重要结论:在路径规划中,回旋线是连接直线和圆弧的「胶水」。没有它,路径的曲率连续性就无法保证。
3.2 道路宽度
道路宽度,这个参数看似简单,但实际项目中坑很多。我遇到过道路宽度标注不准确的情况,导致车辆规划出的路径贴着路沿走,非常危险。
道路宽度通常包括:
- 车道宽度:标准车道3.5米,城市道路3.0-3.5米
- 路肩宽度:一般0.5-1.5米
- 中央分隔带:高速公路有,城市道路不一定有
在路径规划中,道路宽度决定了车辆的可行区域。说白了,就是给车辆画了一个「活动范围」。车辆不能超出这个范围,否则就是违章或者危险。
我建议在代码中这样处理道路宽度:
// 道路宽度约束
struct RoadWidth {
double left_boundary; // 左边界
double right_boundary; // 右边界
double lane_width; // 车道宽度
int lane_count; // 车道数
};
// 检查车辆位置是否在道路内
bool isWithinRoad(double vehicle_x, double vehicle_y, RoadWidth road) {
// 计算车辆到道路中心线的横向偏移
double lateral_offset = computeLateralOffset(vehicle_x, vehicle_y);
// 检查是否超出边界
return (lateral_offset >= road.left_boundary &&
lateral_offset <= road.right_boundary);
}
我的经验:道路宽度不是固定不变的。弯道处、路口处、施工区域,宽度都会变化。所以路径规划时,最好用动态的道路宽度模型。
3.3 车道数与路肩
车道数决定了车辆的可选路径。单车道只能跟着前车走,多车道就可以变道超车。
车道数的常见配置:
| 道路类型 | 车道数 | 典型宽度 |
|---|---|---|
| 城市支路 | 2车道 | 6-7米 |
| 城市主干道 | 4-6车道 | 14-21米 |
| 高速公路 | 4-8车道 | 14-28米 |
路肩呢?它虽然不是行车道,但对路径规划很重要。路肩可以作为紧急停靠区域,也可以作为路径规划的缓冲带。
我记得有一次做城市道路规划,车辆在路口右转时,因为路肩宽度不够,导致车辆后轮压到了路沿。后来我加了一个「路肩宽度检查」的模块,才解决了这个问题。
避坑指南:路肩的宽度在不同路段可能不同。有些路段路肩很窄,只有0.3米,车辆稍微偏一点就压线了。所以路径规划时,一定要考虑路肩的实际宽度。
3.4 知识体系总览
说了这么多,我画了一张图来总结本章的知识体系。你看完应该就清楚了。
这张图把道路模型的三个核心要素串起来了。几何形状决定了道路的走向,道路宽度决定了车辆的横向活动范围,车道数和路肩则决定了车辆的变道策略和安全性。
好了,本章的内容就到这里。道路模型是路径规划的基础,这部分搞不清楚,后面的优化和控制都无从谈起。我建议你动手画一画不同道路形状的示意图,加深理解。
可可精品资料库