2、蓝图库深度解析:Actor蓝图分类、属性面板详解、如何快速筛选特定类型的车辆与行人

好,咱们直接进入正题。蓝图库(Blueprint Library)这东西,说白了就是 Carla 里所有能往场景里放的「演员」的大本营。你想想看,你要做自动驾驶仿真,路上得有车、有人、有红绿灯、有路牌吧?这些东西全都在蓝图库里躺着等你挑。

我第一次打开蓝图库的时候,说实话有点懵。密密麻麻的条目,英文名还都挺长。但用久了你会发现,它其实分得特别清楚。今天我就带你把它彻底捋一遍。

2.1 Actor 蓝图分类:别被名字吓到

Carla 的蓝图库,按我的习惯,可以分成这么几大类:

  • 车辆(Vehicle):轿车、SUV、卡车、警车、自行车…… 基本上你能想到的常见车型都有。每个车型还有不同颜色变体。
  • 行人(Walker):男男女女老老少少,还有不同着装风格。嗯,这里要注意,行人的蓝图名字里通常带「walker」字样。
  • 传感器(Sensor):摄像头、激光雷达、GPS、IMU…… 这些是给自动驾驶车装「眼睛」和「耳朵」用的。
  • 静态物体(Static):路灯、交通标志、建筑物、树木。这些一般不参与物理碰撞,但视觉上必须得有。
  • 交通设施(Traffic):红绿灯、交通锥、护栏。这些直接影响交通流逻辑。
  • 其他(Misc):比如速度牌、天气控制、甚至一些调试用的道具。

你可能会问:「这么多类,我怎么快速找到我要的?」别急,后面我会讲筛选技巧。

2.2 属性面板详解:每个参数都是坑

选中一个蓝图后,右侧的属性面板就亮了。这里我重点说几个你一定会碰到的参数。

属性名 类型 说明 我的经验
color RGB 向量 车辆颜色 别用纯黑或纯白,仿真里反光效果会很奇怪
role_name 字符串 角色标识 我习惯用「ego_vehicle」标记主车,方便后续逻辑判断
speed 浮点数 行人步行速度 默认值偏慢,做测试时我常调到 1.5 倍
is_invincible 布尔 是否无敌(不会被撞坏) 调试时设为 True,避免车被撞飞还得重新生成
sensor_tick 浮点数 传感器采样间隔(秒) 0.05 秒对应 20 FPS,0.1 秒对应 10 FPS,看你的算力来
小技巧:属性面板里有些参数是「只读」的,比如 bounding_box 尺寸。你改不了,但可以读取来做碰撞检测的参考。

2.3 快速筛选特定类型的车辆与行人

好了,重头戏来了。怎么在几百个蓝图里快速找到你想要的?我一般用三种方法。

方法一:用 Python API 过滤

这是最灵活的方式。比如我只想要四门轿车:

# 获取所有车辆蓝图
vehicle_blueprints = world.get_blueprint_library().filter('vehicle.*')

# 进一步筛选:只保留四门轿车
sedans = [bp for bp in vehicle_blueprints if 'sedan' in bp.id.lower()]

# 或者更暴力一点:按制造商筛选
toyota_vehicles = [bp for bp in vehicle_blueprints if 'toyota' in bp.id.lower()]

print(f"找到 {len(sedans)} 辆轿车,{len(toyota_vehicles)} 辆丰田")

为什么用 filter('vehicle.*')?因为蓝图 ID 的命名规则是「类别.具体型号」,比如 vehicle.toyota.prius。用通配符 * 可以匹配所有子类。

注意:filter 方法返回的是蓝图对象的列表,不是字符串列表。你后面生成 Actor 时直接拿它用就行。

方法二:按属性值筛选

有时候你不仅要找「车」,还要找「红色的车」。这时候就得看属性了:

# 获取所有车辆蓝图
all_vehicles = world.get_blueprint_library().filter('vehicle.*')

# 筛选出有 color 属性的,并且颜色是红色
red_vehicles = []
for bp in all_vehicles:
    if bp.has_attribute('color'):
        color_attr = bp.get_attribute('color')
        # 颜色属性通常是一个可选的列表
        if '255,0,0' in str(color_attr.recommended_values):
            red_vehicles.append(bp)

print(f"找到 {len(red_vehicles)} 辆红色车")

嗯,这里有个坑。颜色属性存的是 RGB 字符串,比如 255,0,0 是纯红。但不同蓝图推荐的红色值可能不一样,有的偏暗红。我建议你直接打印出 recommended_values 看看。

方法三:在蓝图库 UI 里手动筛选

如果你用的是 Carla 自带的蓝图库浏览器(就是那个窗口界面),左上角有个搜索框。直接输入 walker 就能过滤出行人。输入 vehicle.audi 就能只看奥迪。

我个人习惯是:

  • 做快速原型时,用 UI 手动拖拽
  • 写自动化脚本时,用 Python API 批量生成
  • 调试特定 bug 时,两种方法结合着用

2.4 避坑指南:我曾经踩过的雷

最后分享几个我实际项目中遇到的坑,你注意避开。

  • 行人蓝图别乱用:不是所有带「walker」的都能正常走路。有些是静态模型,只能站着不动。生成前最好检查一下 is_walkable 属性。
  • 传感器蓝图要配对:比如 RGB 摄像头需要 sensor.camera.rgb,语义分割摄像头是 sensor.camera.semantic_segmentation。名字差一点,数据格式就完全不同。
  • 颜色属性不是所有车都有:有些特殊车辆(比如警车)颜色是固定的,你改不了。强行设置会报错。
  • 蓝图库版本会变:Carla 每次更新都可能增减蓝图。我遇到过脚本在 0.9.11 上跑得好好的,升到 0.9.13 就找不到某个车型了。所以最好在代码里加个容错判断。
一句话总结:蓝图库就是你的演员库。学会分类、看懂属性、掌握筛选,你就能像导演一样,想调什么演员就调什么演员。

好,这一章就到这儿。下一章我们聊聊怎么把这些蓝图真正「放」到场景里去,包括位置、朝向、以及如何让它们动起来。