独立开发者利器:基于个人微信收款回调的轻量化自动化订单系统
2026/7/21 19:17:25
PythonAPI/examples/dynamic_weather.py
动态天气控制,用于:
适用于自动驾驶系统在复杂天气下的鲁棒性测试、传感器性能评估、视觉算法验证。
carla_dynamic_weather
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°)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)→逐渐消退✅ 模拟了真实风暴的渐进式发展,而非突变。
Weather类:天气系统集成器carla.WeatherParametersSun和Storm的更新weather对象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...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高级天气控制的典范,展示了:
它是评估自动驾驶系统在复杂气象条件下可靠性的关键工具,特别适合需要长时间、渐进式环境变化的测试场景。