news 2026/3/25 10:26:02

自动驾驶—CARLA仿真(5)Actors与Blueprints

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动驾驶—CARLA仿真(5)Actors与Blueprints

在 CARLA 中,参与者(Actors)是仿真中执行动作的元素,能够影响其他参与者。CARLA 的参与者包括:

  • 车辆(Vehicles)和行人(Walkers)
  • 传感器(Sensors)
  • 交通标志(Traffic Signs)和交通灯(Traffic Lights)
  • 观察者(Spectator)

蓝图(Blueprints)

蓝图是预定义的模型模板,包含动画和一系列属性,使用户能轻松将新参与者加入仿真。部分属性可修改,部分不可修改,例如:

  • 车辆颜色
  • 激光雷达(LiDAR)的通道数
  • 行人的行走速度等等。

所有可用蓝图及其属性均列在蓝图库(Blueprint Library)中。车辆和行人蓝图带有generation属性,标识其为新一代(gen2)或旧一代(gen1)资产。


管理蓝图库

carla.BlueprintLibrary类包含一系列carla.ActorBlueprint元素,可通过world对象访问:

blueprint_library=world.get_blueprint_library()

每个蓝图有唯一 ID 用于识别自身及由其生成的参与者。可通过以下方式查询蓝图:

# 查找特定蓝图collision_sensor_bp=blueprint_library.find('sensor.other.collision')# 随机选择车辆蓝图vehicle_bp=random.choice(blueprint_library.filter('vehicle.*.*'))

每个carla.ActorBlueprint包含若干carla.ActorAttribute,可读取或设置:

# 示例:若为两轮车,设为红色ifvehicle.get_attribute('number_of_wheels')==2:vehicle.set_attribute('color','255,0,0')

⚠️注意

  • 部分属性不可修改,请查阅蓝图库确认

可修改属性通常提供推荐值列表:

forattrinblueprint:ifattr.is_modifiable:blueprint.set_attribute(attr.id,random.choice(attr.recommended_values))

💡自定义资产
用户可创建自己的车辆模型(参见资产教程),贡献者还可将新内容加入 CARLA。


参与者生命周期

⚠️重要提示
Python API 支持批量命令(batch commands),可在单帧内高效执行多个常见操作(如批量生成/销毁)。


生成(Spawning)

world对象负责生成参与者并跟踪其状态。生成仅需两个要素:

  1. 一个蓝图(Blueprint)
  2. 一个carla.Transform(指定位置与旋转)

world提供两种生成方法:

  • spawn_actor():失败时抛出异常
  • try_spawn_actor():失败时返回None
transform=carla.Transform(carla.Location(x=230,y=195,z=40),carla.Rotation(yaw=180))actor=world.spawn_actor(blueprint,transform)

⚠️坐标系注意
CARLA 使用 Unreal Engine 坐标系。carla.Rotation构造函数参数顺序为(pitch, yaw, roll),与 Unreal Editor 的 (roll, pitch, yaw) 不同。

碰撞检测:若指定位置存在静态物体或其他参与者,生成将失败。为避免此问题:

  • 车辆:使用预设出生点
    spawn_points=world.get_map().get_spawn_points()
  • 行人:使用人行道随机位置
    spawn_point=carla.Transform()spawn_point.location=world.get_random_location_from_navigation()

父子关联:参与者可附加到另一参与者(常用于传感器)。通过carla.AttachmentType定义关联方式:

  • Rigid(刚性):相对位置固定(适合精确数据采集)
  • SpringArm(弹性):带缓冲移动
# 将摄像头刚性附着到车辆camera=world.spawn_actor(camera_bp,relative_transform,attach_to=my_vehicle,attachment_type=carla.AttachmentType.Rigid)

⚠️关键:附加生成时,提供的Transform必须是相对于父参与者的局部坐标。

生成后,world会将参与者加入全局列表,支持快速查询:

actor_list=world.get_actors()actor=actor_list.find(id)# 按 ID 查找# 打印所有限速标志位置forspeed_signinactor_list.filter('traffic.speed_limit.*'):print(speed_sign.get_location())

操作(Handling)

carla.Actor主要通过get()set()方法管理:

print(actor.get_acceleration())print(actor.get_velocity())# 移动参与者(Z轴升高10米)location=actor.get_location()location.z+=10.0actor.set_location(location)

可禁用物理模拟以冻结参与者:

actor.set_simulate_physics(False)

参与者还继承蓝图中的标签(Tags),主要用于语义分割传感器。

⚠️性能警告
大多数set()方法异步发送请求。若短时间内发送过多请求,会导致显著延迟(因仿真器每帧处理能力有限)。


销毁(Destruction)

Python 脚本结束时,参与者不会自动销毁!必须显式调用销毁

destroyed_successfully=actor.destroy()# 成功返回 True

⚠️注意:销毁操作会阻塞仿真器直至完成。


参与者类型详解

传感器(Sensors)

传感器是生成数据流的特殊参与者(详见第 4 章Sensors and Data)。典型工作流程:

# 生成 RGB 摄像头并保存图像camera_bp=blueprint_library.find('sensor.camera.rgb')camera=world.spawn_actor(camera_bp,relative_transform,attach_to=my_vehicle)camera.listen(lambdaimage:image.save_to_disk('output/%06d.png'%image.frame))

关键点:

  • 传感器也有蓝图,需配置属性
  • 通常附着于车辆以感知环境
  • 通过listen()注册回调函数(常用 Lambda 表达式处理数据)

观察者(Spectator)

由 Unreal Engine 提供,用于控制仿真窗口视角。可编程移动视角:

# 将观察者移至车辆正上方(俯视视角)spectator=world.get_spectator()transform=vehicle.get_transform()spectator.set_transform(carla.Transform(transform.location+carla.Location(z=50),carla.Rotation(pitch=-90)))

交通标志与交通灯

目前 CARLA 仅将停车标志(Stop)、让行标志(Yield)和交通灯视为参与者。其他 OpenDRIVE 标志通过carla.Landmark访问(非参与者,详见第 3 章Maps and Navigation)。

  • 仿真启动时,系统根据 OpenDRIVE 文件自动生成交通标志/灯
  • 无法通过蓝图库生成(因不在蓝图库中)
  • ⚠️ 注意:CARLA 地图的 OpenDRIVE 文件不包含交通标志/灯,均由开发者手动放置

交通灯特性

  • 位于路口,有唯一 ID 和组 ID(同一路口的灯共享 pole ID)
  • 同组灯按顺序循环:当前绿灯 → 黄灯 → 红灯 → 下一盏灯激活(期间存在全红相位)
  • 可通过 API 控制状态与持续时间:
# 将红灯强制变绿iftraffic_light.get_state()==carla.TrafficLightState.Red:traffic_light.set_state(carla.TrafficLightState.Green)traffic_light.set_green_time(4.0)# 绿灯持续4秒

⚠️重要:车辆仅在红灯时才会感知交通灯!


车辆(Vehicles)

carla.Vehicle是特殊参与者,通过内部组件模拟轮式车辆物理,支持四类控制:

  1. 驾驶控制(carla.VehicleControl)

    vehicle.apply_control(carla.VehicleControl(throttle=1.0,steer=-1.0))
  2. 物理控制(carla.VehiclePhysicsControl)
    包含齿轮控制 (GearPhysicsControl) 和车轮控制 (WheelPhysicsControl):

    physics=carla.VehiclePhysicsControl(max_rpm=5000.0,center_of_mass=carla.Vector3D(0,0,0),torque_curve=[[0,400],[5000,400]])vehicle.apply_physics_control(physics)
  3. 包围盒(carla.BoundingBox)
    用于物理计算与碰撞检测:

    box=vehicle.bounding_boxprint(box.location)# 相对于车辆的位置print(box.extent)# XYZ 半长(米)
  4. 高级车轮物理
    启用扫掠碰撞(Sweep Collision)可提升车轮物理精度:

    physics=vehicle.get_physics_control()physics.use_sweep_wheel_collision=Truevehicle.apply_physics_control(physics)

其他功能

  • 自动驾驶模式
    vehicle.set_autopilot(True)# 交由 Traffic Manager 控制(非 ML 驱动)
  • 车灯控制
    部分车辆支持灯光(如 Tesla Model 3、Audi e-tron 等),通过二进制操作控制:
    # 开启位置灯lights=carla.VehicleLightState.NONE lights|=carla.VehicleLightState.Position vehicle.set_light_state(lights)

行人(Walkers)

carla.Walker通过控制器操作:

  1. 基础控制(carla.WalkerControl)
    控制方向、速度及跳跃

  2. 骨骼控制(carla.WalkerBoneControl)
    操纵 3D 骨骼(详见骨骼控制教程)

AI 控制
行人无autopilot模式,但可通过carla.WalkerAIController实现自主移动:

# 生成 AI 控制器controller_bp=world.get_blueprint_library().find('controller.ai.walker')ai_controller=world.spawn_actor(controller_bp,carla.Transform(),parent_walker)# 初始化并设置目标ai_controller.start()ai_controller.go_to_location(world.get_random_location_from_navigation())ai_controller.set_max_speed(1.5)# 1.5 m/s

⚠️注意

  • AI 控制器无实体、无物理,不会出现在场景中
  • 到达目标后自动前往新随机点;若目标不可达,则移至最近可达点

批量生成行人
carla.Client提供批量操作接口高效生成大量行人。

⚠️销毁行人
必须同时销毁行人 Actor 和 AI 控制器

ai_controller.stop()walker.destroy()ai_controller.destroy()

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/23 17:13:35

炉石传说自动化脚本新手入门:从零开始的全流程指南

炉石传说自动化脚本新手入门:从零开始的全流程指南 【免费下载链接】Hearthstone-Script Hearthstone script(炉石传说脚本)(2024.01.25停更至国服回归) 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-S…

作者头像 李华
网站建设 2026/3/22 13:46:08

第一章——办公自动化之Excel拆分工具:精准处理数据,提升办公效能

在办公场景中,我们常常会遇到大型的Excel文件,为了更方便地对数据进行管理和分析,有时需要根据特定条件将其拆分成多个小文件。例如,人力资源部门有一份包含全公司员工信息的Excel文件,为了便于各部门分别处理本部门员…

作者头像 李华
网站建设 2026/3/23 16:11:09

创客匠人峰会深度解析:知识变现的 “IP 资产化” 革命 —— 从 “运营流量” 到 “沉淀资产” 的长期增长逻辑

引言:峰会核心命题 ——AI 时代知识变现的终极形态是 “IP 资产化”2025 年 11 月 22 日 - 25 日,创客匠人主办的 “全球创始人 IPAI 万人高峰论坛” 在厦门海峡大剧院圆满落幕。这场汇聚 10000 余名全球创始人的盛会,以 “AI 重构生产力&…

作者头像 李华
网站建设 2026/3/14 14:59:28

LoRaWAN网络,如何提升现代建筑的智慧服务能力?

物联网时代革命下,万事万物都被赋予了感知与沟通的“生命力”,无论是拔地而起的摩天大厦,还是横跨江海的宏伟长桥,它们都可以通过配置物联网技术达成“物与物、物与人”之间的无缝交互,让管理者可以快速获取到这些建筑…

作者头像 李华
网站建设 2026/3/25 13:26:56

FTXUI动态布局:掌握ResizableSplit的5个实战技巧

FTXUI动态布局:掌握ResizableSplit的5个实战技巧 【免费下载链接】FTXUI :computer: C Functional Terminal User Interface. :heart: 项目地址: https://gitcode.com/gh_mirrors/ft/FTXUI 在现代终端应用开发中,灵活的用户界面布局是提升工作效率…

作者头像 李华
网站建设 2026/3/25 5:36:50

9、高效Shell脚本编写与模块化调试指南

高效Shell脚本编写与模块化调试指南 1. xargs命令的使用 xargs命令用于从标准输入构建并执行命令行。像cp、echo、rm、wc等命令,不会从标准输入或其他命令的重定向输出获取输入,这时可以使用xargs将其他命令的输出作为输入提供给这些命令。其语法如下: xargs [option]部…

作者头像 李华