自动驾驶—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和语义分割信息。
相关推荐
皮皮学姐分享-ppx12 小时前
政府绿色采购数据库(2015-2024.3)
大数据·网络·数据库·人工智能·制造
GIS数据转换器12 小时前
基于3D GIS的监控视频精准标定平台
人工智能·物联网·3d·音视频·无人机·知识图谱
专注VB编程开发20年13 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
深小乐13 小时前
Claude Fable5 尝鲜,效果挺不错
人工智能
Nayxxu13 小时前
Gemini + RAG 企业知识库教程:从文档切片到答案生成
运维·人工智能
冬奇Lab13 小时前
真正的 AI-Native Workflow 是什么?——四个判断测试
人工智能·agent
冬奇Lab13 小时前
每日一个开源项目(第128篇):Agent Skills - 给 AI 编程 Agent 装上工程纪律
人工智能·开源·资讯
Deepoch14 小时前
Deepoc VLA开发板:采摘机器人的环境鲁棒作业与不确定性应对
人工智能·机器人·采摘机器人·deepoc
云栖梦泽在14 小时前
AI安全专项:AI人脸识别的安全风险与防护
人工智能·安全