📌 测试用例
PythonAPI/examples/dynamic_weather.py
动态天气控制,用于:
- 平滑移动太阳位置(模拟一天中的时间变化)
- 周期性生成风暴(云层、降雨、积水、湿滑路面等)
- 以可控速度自动更新天气参数
适用于自动驾驶系统在复杂天气下的鲁棒性测试、传感器性能评估、视觉算法验证。
carla_dynamic_weather
🔑 主要模块解析
1.Sun类:动态太阳轨迹模拟
- 核心逻辑:
deftick(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 原生
- 关键方法:
deftick(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.主循环:可控速率更新
speed_factor=args.speed# 默认 1.0(实时速度)update_freq=0.1/speed_factor# 更新间隔(秒)whileTrue:timestamp=world.wait_for_tick()elapsed_time+=delta_secondsifelapsed_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高级天气控制的典范,展示了:
- 如何构建时间连续的动态天气系统
- 如何实现多天气参数的物理联动
- 如何提供可配置的仿真加速比
它是评估自动驾驶系统在复杂气象条件下可靠性的关键工具,特别适合需要长时间、渐进式环境变化的测试场景。