3. 运动学基础:速度-距离曲线、加速度与减速度、运行时间与距离计算
各位同学,欢迎来到第三讲。前面我们聊了列车牵引计算的基本概念,今天要扎进去讲点硬核的东西——运动学基础。
说白了,列车自动驾驶的节能运行曲线,本质上就是在解一个运动学问题。你想想看,列车从A站跑到B站,什么时候加速、什么时候巡航、什么时候惰行、什么时候制动,这些动作的背后,全是速度、距离、时间、加速度这几个物理量在跳舞。
我个人习惯,在讲任何控制算法之前,先把运动学底子打牢。底子不牢,后面设计出来的曲线就是空中楼阁。
3.1 速度-距离曲线:列车运行的“心电图”
速度-距离曲线,简称v-s曲线。这是我每天都要看的图。它横轴是里程(距离),纵轴是速度,记录了列车从起点到终点,每一个位置上的瞬时速度。
为什么说它是心电图?因为一条好的v-s曲线,能直接反映出列车的运行品质——是否平稳、是否节能、是否准时。
我在项目中遇到过一件事:某条线路的ATO(列车自动驾驶)系统调试,列车总是晚点。查了半天,最后发现是v-s曲线里有一段加速太保守了,导致全程运行时间超标。你看,问题就出在这张图上。
v-s曲线有几个关键特征点:
- 起点:速度为零,对应车站停车位置。
- 加速段:速度从零开始上升,斜率取决于牵引加速度。
- 巡航段:速度保持恒定,此时牵引力等于阻力。
- 惰行段:切断牵引力,列车靠惯性滑行,速度缓慢下降。
- 制动段:施加制动,速度快速下降至零,对应进站停车。
嗯,这里要注意:节能运行曲线的核心思想,就是尽量延长惰行段,减少不必要的牵引和制动。因为每一次牵引都要消耗电能,每一次制动都会把动能白白浪费掉(除非有再生制动回收)。
核心要点:v-s曲线的形状,直接决定了列车的能耗。一条优秀的节能曲线,应该是“少牵引、多惰行、缓制动”。
3.2 加速度与减速度:列车加减速的“油门”和“刹车”
加速度,符号a,单位m/s²。它描述的是速度变化的快慢。
正加速度就是加速,负加速度就是减速(我们通常叫减速度)。
这里有个容易混淆的地方:列车牵引计算里,加速度不是随便取的。它受三个因素制约:
- 牵引/制动特性:电机能输出多大的力,制动系统能提供多大的制动力。
- 粘着限制:轮轨之间的摩擦力有限,加速度太大车轮会打滑。我曾经在雨天调试时遇到过,列车一启动就空转,速度上不去,就是因为粘着系数下降了。
- 舒适度要求:乘客不是货物,加速度变化太剧烈,人会站不稳。一般城市轨道交通的加速度控制在0.6~1.0 m/s²,减速度控制在0.8~1.2 m/s²。
我建议大家在设计曲线时,把加速度分成几个阶段来处理:
- 启动阶段:加速度从零逐渐增加到目标值,避免冲击。
- 恒加速阶段:保持恒定加速度,速度线性上升。
- 退坡阶段:接近目标速度时,加速度逐渐减小到零,平滑过渡到巡航。
说白了,加速度的变化率(加加速度,jerk)也要控制。jerk太大,乘客会感觉“被踹了一脚”。
小技巧:实际工程中,我习惯用梯形加速度曲线。就是加速度先线性上升、再保持、再线性下降。这样既保证了加速效率,又兼顾了舒适度。
3.3 运行时间与距离计算:把物理公式变成代码
好了,理论讲完了,咱们来点实际的。怎么把v-s曲线算出来?
核心公式就三个:
v = v₀ + a · t (1)
s = s₀ + v₀ · t + ½ · a · t² (2)
v² = v₀² + 2 · a · (s - s₀) (3)
这三个公式,搞过物理的都不陌生。但在列车控制里,我们通常不用连续公式,而是用离散化的方法——把整个运行过程切成很多小段,每段内假设加速度恒定,然后逐段计算。
为什么?因为实际线路的坡度、曲线、限速都是变化的,不可能用一个公式从头算到尾。
我给大家看一段我常用的计算逻辑(伪代码):
// 离散化计算v-s曲线
初始化:s = 0, v = 0, t = 0
设定时间步长 dt = 0.1 秒
while (s < 总距离) {
// 1. 根据当前位置,查表得到当前限速、坡度、曲率
v_limit = getSpeedLimit(s)
grade = getGrade(s)
curve = getCurve(s)
// 2. 计算当前阻力
F_resistance = calculateResistance(v, grade, curve)
// 3. 根据控制策略,决定牵引力或制动力
if (处于加速阶段) {
F_traction = getTractionForce(v) // 查牵引特性曲线
a = (F_traction - F_resistance) / M // M是列车质量
} else if (处于惰行阶段) {
F_traction = 0
a = -F_resistance / M
} else if (处于制动阶段) {
F_brake = getBrakeForce(v) // 查制动特性曲线
a = -(F_brake + F_resistance) / M
}
// 4. 更新速度、距离、时间
v_new = v + a * dt
s_new = s + v * dt + 0.5 * a * dt²
t = t + dt
// 5. 限速检查
if (v_new > v_limit) {
v_new = v_limit // 限速保护
}
// 记录数据
record(s_new, v_new, t, a)
// 更新状态
v = v_new
s = s_new
}
这段代码看起来简单,但实际工程里,每一步都有坑。我曾经在一条大坡道线路上调试,发现列车在下坡时速度怎么都降不下来,后来才发现是阻力计算里忘了考虑坡度分力——列车自重在下坡道上会产生一个向前的分力,这个力可不小。
避坑指南:我曾经在计算运行时间时,直接用平均速度来估算,结果误差达到了5%。后来改用逐段积分法,误差才降到0.5%以内。记住:不要用平均速度算时间,一定要逐段积分。
3.4 一个完整的计算示例
咱们来算一个简单的例子。假设列车从车站A出发,到车站B,距离1000米。
参数如下:
| 阶段 | 加速度 (m/s²) | 目标速度 (m/s) | 持续时间 (s) |
|---|---|---|---|
| 加速 | 0.8 | 20 | 25 |
| 巡航 | 0 | 20 | 30 |
| 惰行 | -0.1 (阻力等效减速度) | 从20下降到12 | 80 |
| 制动 | -1.0 | 从12下降到0 | 12 |
我们来算一下各阶段走过的距离:
- 加速段:s₁ = ½ × 0.8 × 25² = 250 米
- 巡航段:s₂ = 20 × 30 = 600 米
- 惰行段:s₃ = 20×80 + ½×(-0.1)×80² = 1600 - 320 = 1280 米?等等,这已经超过总距离了。
你看,这就是问题所在。实际计算中,惰行段不可能持续80秒,因为距离不够了。我们需要根据剩余距离来反推惰行时间。
正确的做法是:先算加速和巡航的总距离(250+600=850米),剩余150米用于惰行和制动。然后根据制动距离反推惰行终点速度,再算惰行时间。
嗯,这里要提醒大家:设计v-s曲线时,一定要做距离闭环校验。不能先定时间再算距离,而是先定距离再算时间。
总结一下今天的内容:
- v-s曲线是列车运行的蓝图,节能的关键在于延长惰行段。
- 加速度和减速度受牵引特性、粘着、舒适度三重约束。
- 离散化逐段计算是工程实践的标准方法,精度可控。
- 距离闭环校验是避免设计错误的关键步骤。
下一讲,我们会深入讨论牵引计算模型,包括阻力公式、牵引特性曲线、制动特性曲线这些更具体的内容。到时候我会带大家手算一个完整的案例。
今天就到这里。有什么问题,欢迎课后交流。