📌 测试用例
PythonAPI/examples/dynamic_weather.py
动态天气控制,用于:
- 平滑移动太阳位置(模拟一天中的时间变化)
- 周期性生成风暴(云层、降雨、积水、湿滑路面等)
- 以可控速度自动更新天气参数
适用于 自动驾驶系统在复杂天气下的鲁棒性测试、传感器性能评估、视觉算法验证。
carla_dynamic_weather
🔑 主要模块解析
1. Sun 类:动态太阳轨迹模拟
-
核心逻辑 :
pythondef tick(self, delta_seconds): self._t += 0.008 * delta_seconds # 时间累积(正弦波相位) self.azimuth += 0.25 * delta_seconds # 方位角匀速旋转(360°/40分钟) self.altitude = (70 * sin(self._t)) - 20 # 高度角正弦变化(-20° ~ +50°) -
效果 :
- 太阳 东升西落(方位角 0°→360°)
- 高度角 日出→正午→日落(最低 -20° 地平线下,最高 50°)
-
用途 :
模拟 自然光照变化,影响摄像头曝光、阴影、能见度。
2. Storm 类:风暴生命周期管理
-
状态机设计:
_t:内部状态变量(-250 → 100 → -250 循环)_increasing:控制风暴 增强/减弱阶段
-
天气参数联动:
参数 计算逻辑 效果 clouds_t + 40云量随风暴强度增加 rain_t降雨量直接反映风暴强度 puddles_t + delay积水滞后于降雨(更真实) wetness_t * 5路面湿滑程度 wind基于云量分级 云多则风大 fog_t - 10风暴伴随薄雾 -
周期行为:
- 平静期 (
_t = -250)→ 风暴酝酿 → 暴雨高峰 (_t = 100)→ 逐渐消退
- 平静期 (
✅ 模拟了 真实风暴的渐进式发展,而非突变。
3. Weather 类:天气系统集成器
-
职责 :
- 封装 CARLA 原生
carla.WeatherParameters - 协调
Sun和Storm的更新 - 将计算结果写回
weather对象
- 封装 CARLA 原生
-
关键方法 :
pythondef tick(self, delta_seconds): self._sun.tick(delta_seconds) self._storm.tick(delta_seconds) # 同步所有参数到 CARLA 天气对象 self.weather.sun_azimuth_angle = self._sun.azimuth self.weather.precipitation = self._storm.rain ...
4. 主循环:可控速率更新
python
speed_factor = args.speed # 默认 1.0(实时速度)
update_freq = 0.1 / speed_factor # 更新间隔(秒)
while True:
timestamp = world.wait_for_tick()
elapsed_time += delta_seconds
if elapsed_time > update_freq:
weather.tick(speed_factor * elapsed_time) # 加速/减速时间流
world.set_weather(weather.weather)
print(weather) # 实时显示当前状态
elapsed_time = 0.0
--speed参数作用 :speed=2.0:天气变化快 2 倍(快速测试极端天气)speed=0.5:天气变化慢 2 倍(精细观察过渡效果)
⚠️ 注意:
tick()中传入speed_factor * elapsed_time是为了 保持物理一致性(如降雨量积累)。
🌦️ 动态天气效果演示
| 时间段 | 太阳状态 | 风暴状态 | 视觉效果 |
|---|---|---|---|
| 初始 | 低角度(清晨) | 无云无雨 | 清晰场景,长阴影 |
| 中期 | 高角度(正午) | 乌云密布,小雨 | 光线变暗,路面反光 |
| 高峰 | 西斜(傍晚) | 暴雨+强风+积水 | 摄像头模糊,LiDAR 噪声增加 |
| 结束 | 落山(夜间) | 雨停,积水残留 | 低光照,湿滑路面 |
🎯 核心应用场景
| 应用 | 如何利用本脚本 |
|---|---|
| 摄像头鲁棒性测试 | 验证算法在暴雨/强光下的目标检测性能 |
| LiDAR 性能分析 | 测试雨雾对点云密度的影响 |
| 规划决策验证 | 检查车辆在湿滑路面是否降低速度 |
| 数据集生成 | 采集带时间连续天气变化的多模态数据 |
⚠️ 技术亮点
-
物理一致的时间缩放
- 通过
speed_factor控制仿真速度,但保持 降雨量 ∝ 时间 的物理关系
- 通过
-
参数联动设计
- 积水(
puddles)滞后于降雨(rain) - 风速(
wind)依赖云量(clouds) - 避免不真实的天气组合(如晴天暴雨)
- 积水(
-
无缝循环
- 太阳轨迹(
sin函数)和风暴周期(状态机)均 无限循环,适合长时间测试
- 太阳轨迹(
✅ 总结
该脚本是 CARLA 高级天气控制的典范,展示了:
- 如何构建 时间连续的动态天气系统
- 如何实现 多天气参数的物理联动
- 如何提供 可配置的仿真加速比
它是评估 自动驾驶系统在复杂气象条件下可靠性 的关键工具,特别适合需要 长时间、渐进式环境变化 的测试场景。