自动驾驶—CARLA仿真(13)dynamic_weather demo

📌 测试用例

PythonAPI/examples/dynamic_weather.py

动态天气控制,用于:

  1. 平滑移动太阳位置(模拟一天中的时间变化)
  2. 周期性生成风暴(云层、降雨、积水、湿滑路面等)
  3. 以可控速度自动更新天气参数

适用于 自动驾驶系统在复杂天气下的鲁棒性测试、传感器性能评估、视觉算法验证。

carla_dynamic_weather


🔑 主要模块解析

1. Sun 类:动态太阳轨迹模拟
  • 核心逻辑 :

    python 复制代码
    def 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 对象
  • 关键方法 :

    python 复制代码
    def 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 性能分析 测试雨雾对点云密度的影响
规划决策验证 检查车辆在湿滑路面是否降低速度
数据集生成 采集带时间连续天气变化的多模态数据

⚠️ 技术亮点

  1. 物理一致的时间缩放

    • 通过 speed_factor 控制仿真速度,但保持 降雨量 ∝ 时间 的物理关系
  2. 参数联动设计

    • 积水(puddles)滞后于降雨(rain)
    • 风速(wind)依赖云量(clouds)
    • 避免不真实的天气组合(如晴天暴雨)
  3. 无缝循环

    • 太阳轨迹(sin 函数)和风暴周期(状态机)均 无限循环,适合长时间测试

✅ 总结

该脚本是 CARLA 高级天气控制的典范,展示了:

  1. 如何构建 时间连续的动态天气系统
  2. 如何实现 多天气参数的物理联动
  3. 如何提供 可配置的仿真加速比

它是评估 自动驾驶系统在复杂气象条件下可靠性 的关键工具,特别适合需要 长时间、渐进式环境变化 的测试场景。

相关推荐
爱敲代码的小黄6 小时前
神经网络入门指南:从 CNN、RNN 到 Attention
人工智能·面试·程序员
一只爱撸猫的程序猿7 小时前
我看着一个 AI 引擎在 14 天里,从"记忆"走进了"搜索"
人工智能·后端·架构
我登哥MVP8 小时前
DeepSeek-Harness-Super-Agent-学习笔记
人工智能·深度学习·神经网络·机器学习·自然语言处理·agent
LucianaiB8 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
冬奇Lab9 小时前
一天一个开源项目(第256篇):Anatomy —— 让 Claude 为技术概念「发明一台机器」,画成可交互的等距插画
人工智能·开源
孟郎郎10 小时前
打造一切(Craft Anything)——克隆构造世间万物
人工智能·ai·github·软件构建·开源软件
Martina_032110 小时前
AI生成3D场景的霓虹灯一开就糊成光团?用6步检查Emissive、Bloom与曝光
人工智能·3d·ai·自然语言处理·游戏引擎·材质·贴图
master33610 小时前
AI领域常用名词的系统梳理
人工智能·ai
Spidermanbaout10 小时前
Prompt-Engineering实战-2026年11月2日
人工智能·机器学习·ai·chatgpt·ai编程