自动驾驶—CARLA仿真(29)传感器(Sensors and data)

传感器使用详解

carla.Sensor 类定义了一种特殊的参与者(actor),能够测量并流式传输数据。

  • 这些数据是什么?

    数据类型因传感器种类而异。所有传感器数据均继承自通用的 carla.SensorData 类。

  • 何时获取数据?

    要么在每个仿真步(simulation step)获取,要么在特定事件触发时获取,具体取决于传感器类型。

  • 如何获取数据?

    每个传感器都提供一个 listen() 方法,用于接收和处理数据。

尽管各类传感器存在差异,但它们的使用方式基本一致。


设置(Setting)

与所有其他参与者一样,首先需从蓝图库中查找传感器蓝图,并设置特定属性。这对传感器至关重要------其属性将直接影响所获得的结果。具体属性详见《传感器参考文档》。

以下示例设置了一个仪表盘高清摄像头:

python 复制代码
# 查找传感器蓝图
blueprint = world.get_blueprint_library().find('sensor.camera.rgb')
# 修改蓝图属性:设置图像分辨率和视场角(FOV)
blueprint.set_attribute('image_size_x', '1920')
blueprint.set_attribute('image_size_y', '1080')
blueprint.set_attribute('fov', '110')
# 设置传感器两次捕获之间的间隔时间(秒)
blueprint.set_attribute('sensor_tick', '1.0')

生成(Spawning)

传感器可放置在地图任意位置。通常,它们会附着(attach)到某个父级参与者(如车辆)上,从而像真实安装在车辆上的传感器一样随仿真移动。

spawn_actor() 方法需要从蓝图库中选择的传感器蓝图和一个变换(transform)参数:

  • 对于未附着 的传感器,该变换定义其在CARLA世界中的绝对位置
  • 对于附着 的传感器,该变换定义其相对于父级参与者坐标系的相对位置
python 复制代码
my_vehicle = world.spawn_actor(vehicle_blueprint, spawn_point)
transform = carla.Transform(carla.Location(x=0.8, z=1.7))
sensor = world.spawn_actor(sensor_blueprint, transform, attach_to=my_vehicle)

attachment_type 参数定义传感器运动如何受其父级参与者控制:

  • 刚性附着(carla.AttachmentType.Rigid

    传感器严格跟随父级参与者的位姿变化。这是摄像头、激光雷达等常规车载传感器最常用的方式,也是默认设置。

  • 弹簧臂附着(carla.AttachmentType.SpringArm

    运动经过平滑处理,避免突然加速或减速。推荐用于录制仿真视频,可使画面流畅,避免摄像机位置更新时出现"跳跃"。

  • 幽灵弹簧臂附着(carla.AttachmentType.SpringArmGhost

    与弹簧臂类似,但不进行碰撞检测,因此传感器可能穿过墙壁或其他几何体。

python 复制代码
sensor = world.spawn_actor(
    sensor_blueprint, 
    transform, 
    attach_to=my_vehicle, 
    attachment_type=carla.AttachmentType.SpringArm
)

监听(Listening)

每个传感器都有一个 listen() 方法,在每次获取数据时被调用。

该方法接收一个回调函数(callback)作为参数,通常是一个 lambda 函数,用于定义数据到达时应执行的操作。回调函数必须接受传感器数据作为输入参数。

python 复制代码
# 每当摄像头生成新图像时,调用 do_something() 函数
sensor.listen(lambda data: do_something(data))

...

# 碰撞传感器:每次检测到碰撞时打印信息
def callback(event):
    for actor_id in event:
        vehicle = world_ref().get_actor(actor_id)
        print('Vehicle too close: %s' % vehicle.type_id)

sensor02.listen(callback)

数据(Data)

大多数传感器数据对象都提供将信息保存到磁盘的方法,便于在其他环境中使用。

不同传感器的数据结构差异较大,详情请参阅《传感器参考文档》。但所有传感器数据都包含以下基本信息:

传感器数据属性 类型 描述
frame int 测量发生时的帧号
timestamp double 自仿真开始以来的模拟时间戳(单位:秒)
transform carla.Transform 测量时刻传感器在世界坐标系中的位姿

重要提示

  • is_listening():检查传感器是否已通过 listen() 注册了回调函数。
  • stop():停止传感器监听。
  • sensor_tick:蓝图属性,设置接收数据之间的仿真时间间隔。

传感器类型(Types of sensors)

摄像头(Cameras)

从自身视角拍摄世界画面。对于输出 carla.Image 的摄像头,可使用辅助类 carla.ColorConverter 将图像转换为不同信息表示形式。

数据获取频率:每一步仿真。

传感器 输出类型 概述
RGB carla.Image 提供清晰的环境视觉,类似普通场景照片。
广角(Wide angle) carla.Image 支持广角、鱼眼、360度等非标准相机模型。
深度(Depth) carla.Image 以灰度图渲染视野内物体的深度信息。
光流(Optical Flow) carla.Image 渲染每个像素相对于摄像头的运动矢量。
语义分割(Semantic segmentation) carla.Image 根据物体标签,用特定颜色渲染视野内元素。
实例分割(Instance segmentation) carla.Image 在语义分割基础上,为每个独立物体分配唯一ID并着色。
动态视觉传感器(DVS) carla.DVSEventArray 异步输出亮度变化事件流,模拟类脑视觉传感器。

探测器(Detectors)

当所附着的物体触发特定事件时才返回数据。

数据获取时机:事件触发时。

传感器 输出类型 概述
碰撞(Collision) carla.CollisionEvent 检测其父级参与者与其他物体的碰撞。
车道入侵(Lane invasion) carla.LaneInvasionEvent 当父级参与者跨越车道线时触发。
障碍物(Obstacle) carla.ObstacleDetectionEvent 检测父级参与者前方可能存在的障碍物。

其他传感器(Other)

提供导航、物理量测量、场景2D/3D点云等功能。

数据获取频率:每个仿真步。

传感器 输出类型 概述
GNSS carla.GNSSMeasurement 获取传感器的地理经纬度位置。
IMU carla.IMUMeasurement 包含加速度计、陀螺仪和电子罗盘。
激光雷达(LIDAR) carla.LidarMeasurement 旋转式激光雷达,生成包含坐标和强度的4D点云,用于建模环境。
雷达(Radar) carla.RadarMeasurement 生成2D点图,表示视野内物体及其相对于传感器的运动。
RSS carla.RssResponse 根据安全检查调整施加于车辆的控制指令。该传感器工作方式与其他传感器不同,有专门的RSS文档说明。
语义激光雷达(Semantic LIDAR) carla.SemanticLidarMeasurement 旋转式激光雷达,生成3D点云,并附加实例ID和语义分割信息。
相关推荐
胡伯来了2 小时前
24 Transformers - 训练自然语言处理模型
人工智能·自然语言处理·transformer·transformers
URBBRGROUN4672 小时前
Spring AI @ToolParam 扩展注解改造实践
大数据·人工智能·spring
中科天工2 小时前
智能仓储解决方案到底是什么?
大数据·人工智能·智能
Ydwlcloud2 小时前
AWS国际云服务器新用户优惠全解析:如何聪明地迈出上云第一步?
服务器·人工智能·云计算·aws
天天进步20152 小时前
【InfiniteTalk 源码分析 04】训练策略拆解:如何实现超长视频的生成稳定性?
人工智能·深度学习
imbackneverdie2 小时前
更经济实惠的润色方法,告别“中式英文”!
人工智能·考研·ai·自然语言处理·ai写作·研究生·ai工具
天呐草莓2 小时前
集成学习 (ensemble learning)
人工智能·python·深度学习·算法·机器学习·数据挖掘·集成学习
却道天凉_好个秋2 小时前
OpenCV(四十七):FLANN特征匹配
人工智能·opencv·计算机视觉
Ma0407133 小时前
【论文阅读27】-LMPHM:基于因果网络和大语言模型-增强知识图网络的故障推理诊断
人工智能·语言模型·自然语言处理