自动驾驶—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和语义分割信息。
相关推荐
Master_oid20 分钟前
机器学习29:增强式学习(Deep Reinforcement Learning)④
人工智能·学习·机器学习
ballball~~23 分钟前
拉普拉斯金字塔
算法·机器学习
Cemtery11623 分钟前
Day26 常见的降维算法
人工智能·python·算法·机器学习
zxsz_com_cn30 分钟前
预测性维护在智能制造设备上的实际应用
人工智能
一条闲鱼_mytube1 小时前
智能体设计模式(三)多智能体协作-记忆管理-学习与适应
人工智能·学习·设计模式
scott1985121 小时前
opencv 畸变系数的说明
人工智能·数码相机·opencv
LS_learner1 小时前
Transmormer从零基础到精通
人工智能
ASD123asfadxv2 小时前
【蜂巢健康监测】基于YOLO的蜂群病虫害识别系统
人工智能·yolo·目标跟踪
说私域2 小时前
基于AI智能名片链动2+1模式服务预约商城系统的社群运营与顾客二次消费吸引策略研究
大数据·人工智能·小程序·开源·流量运营
丝斯20112 小时前
AI学习笔记整理(50)——大模型中的Graph RAG
人工智能·笔记·学习