2. 天气参数详解:Carla中可调节的天气参数
好,咱们接着聊。上一章我带你看了Carla天气系统的整体框架,说白了就是那个WeatherParameters结构体。这一章,咱们把里面的每个参数掰开揉碎了讲清楚。
你想想看,做自动驾驶仿真,最怕什么?最怕场景太单一。如果永远是大晴天、干燥路面,那你的感知算法一遇到雨天就崩,这谁受得了?所以,搞懂这些天气参数,是让你的仿真场景「活起来」的第一步。
2.1 太阳位置:决定光照方向与阴影
太阳位置由两个参数控制:sun_altitude_angle(太阳高度角)和 sun_azimuth_angle(太阳方位角)。
- 高度角:范围 -90° 到 90°。负值代表太阳在地平线以下,也就是夜晚。0° 是日出/日落。90° 是正午头顶。
- 方位角:范围 0° 到 360°。0° 是正北,顺时针旋转。
我个人习惯,做日间场景测试时,高度角设在 30° 到 60° 之间,这样阴影比较明显,能考验相机对光照变化的鲁棒性。做夜间测试,直接设成 -30° 以下,配合路灯和车灯。
重要经验:我在项目中遇到过,高度角设为 5° 左右时,阳光几乎贴着地面,会产生极长的阴影。这时候车辆的阴影会投射到对面车道,对视觉感知算法是个不小的挑战。你如果做的是行人检测,这个角度特别容易出 false positive。
# 设置一个典型的午后场景
weather = carla.WeatherParameters(
sun_altitude_angle=45.0, # 下午2点左右
sun_azimuth_angle=210.0 # 太阳在西南方向
)
world.set_weather(weather)
2.2 云量:从万里无云到阴云密布
cloudiness 参数范围 0.0 到 100.0。0 是晴天,100 是乌云密布。
这个参数有意思的地方在于,它不光影响视觉上的云层,还会间接影响光照强度。云量高了,太阳光被散射,整体环境光会变柔和,阴影边缘也会模糊。
嗯,这里要注意:云量参数和太阳高度角是联动的。比如你把云量设到 100,但太阳高度角是 60°,那场景看起来还是亮的,只是没有直射光。如果你把云量设到 100,太阳高度角设到 0°,那基本就是阴天黄昏的效果,光线非常暗。
我的小技巧:做多传感器融合测试时,我建议你试试云量 60-80 的区间。这种「多云但不阴」的天气,LiDAR 点云质量几乎不受影响,但相机图像会出现局部过曝和欠曝,正好测试 ISP 算法的效果。
2.3 雨量:从毛毛雨到暴雨
precipitation 参数范围 0.0 到 100.0。0 是没雨,100 是倾盆大雨。
但光调雨量还不够,你还要配合 precipitation_deposits(积水程度)。这个参数控制路面上的积水反光效果,范围也是 0 到 100。
为什么这两个要一起调?因为雨量只控制雨滴的密度和下落速度,而积水程度控制的是地面反射。你想想看,如果雨量很大但积水为 0,那路面还是干的,这就不真实了。
| 场景 | precipitation | precipitation_deposits | 效果 |
|---|---|---|---|
| 毛毛雨 | 10-20 | 10-30 | 路面微湿,反光不明显 |
| 中雨 | 40-60 | 40-60 | 路面明显积水,反光强烈 |
| 暴雨 | 80-100 | 70-100 | 能见度极低,路面像镜子 |
避坑指南:我曾经在暴雨场景下测试,发现车辆雨刮器动画和雨量不同步。后来查了文档才知道,Carla 的雨刮器是独立控制的,需要额外调用 vehicle.set_wiper_state()。所以别指望设了雨量雨刮就自动工作,得自己写逻辑。
2.4 风速:影响树叶和雨滴方向
wind_intensity 范围 0.0 到 100.0。0 是无风,100 是狂风。
这个参数很多人会忽略,觉得「风对自动驾驶有啥影响?」其实影响不小。风速高了,路边的树木会摇摆,落叶会被吹到车道上。更关键的是,风会影响雨滴的飘落方向,造成传感器视野中的雨纹方向变化。
我建议你在做感知测试时,把风速和雨量结合起来。比如暴雨加狂风,雨滴几乎是横着飞的,这时候相机的曝光和白平衡算法很容易出问题。
# 设置一个暴风雨场景
weather = carla.WeatherParameters(
precipitation=90.0,
precipitation_deposits=80.0,
wind_intensity=70.0,
cloudiness=90.0,
sun_altitude_angle=20.0
)
world.set_weather(weather)
2.5 其他值得关注的参数
除了上面几个核心参数,还有几个我经常用的:
- fog_density(雾浓度):0-100。做高速公路场景时,雾天是必测项目。注意雾和云量要配合,一般雾天云量都在 80 以上。
- fog_distance(雾的起始距离):设得太近,整个场景都是白的;设得太远,雾的效果不明显。我一般设在 10-30 米之间。
- wetness(路面湿润度):这个参数和积水不同,它控制的是路面本身的湿润程度,不产生积水反光。适合做「刚下过雨但没积水」的场景。
一句话总结:天气参数不是孤立调节的。太阳位置影响阴影,云量影响光照,雨量影响积水,风速影响雨滴方向。你调一个参数,就要想想其他参数要不要跟着变。这才是做仿真场景设计的核心思路。
下一章,我会带你手写一个完整的天气参数配置脚本,把今天讲的这些参数串起来,生成一个动态变化的天气序列。到时候你就知道,怎么让仿真场景从晴天慢慢过渡到暴雨,再过渡到夜晚——这才是真正有用的技能。