自动驾驶—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
    • 协调 SunStorm 的更新
    • 将计算结果写回 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. 如何提供 可配置的仿真加速比

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

相关推荐
hit56实验室1 分钟前
如何调整vad参数
人工智能
退休钓鱼选手7 分钟前
BehaviorTree行为树-机器人及自动驾驶
人工智能·自动驾驶
xiao5kou4chang6kai47 分钟前
贯通LLM应用→数据分析→自动化编程→文献及知识管理→科研写作与绘图→构建本地LLM、Agent→多模型圆桌会议→N8N自动化工作流深度应用
人工智能·自动化·llm·科研绘图·n8n
啊巴矲10 分钟前
小白从零开始勇闯人工智能:机器学习初级篇(TF-IDF)
人工智能·机器学习·tf-idf
dulu~dulu11 分钟前
机器学习---计算题总结
人工智能·机器学习·支持向量机·集成学习·贝叶斯分类器
Das111 分钟前
【机器学习】03_贝叶斯决策
人工智能·机器学习
迷你可可小生14 分钟前
常见神经网络模块
人工智能·深度学习
大厂技术总监下海15 分钟前
你的个人AI工作站已就绪:Ollama开源框架,支持多模态、可定制、一键部署
人工智能·机器学习·开源
行业探路者19 分钟前
如何利用二维码提升产品画册的制作与传播?
大数据·人工智能·安全·二维码·设备巡检
安达发公司23 分钟前
安达发|给“工业心脏”装上新大脑:APS生产排产的硬核智慧
大数据·人工智能·aps高级排程·aps排程软件·生产计划排单软件·aps生产排产