自动驾驶—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和语义分割信息。
相关推荐
那个村的李富贵13 小时前
光影魔术师:CANN加速实时图像风格迁移,让每张照片秒变大师画作
人工智能·aigc·cann
腾讯云开发者15 小时前
“痛点”到“通点”!一份让 AI 真正落地产生真金白银的实战指南
人工智能
CareyWYR15 小时前
每周AI论文速递(260202-260206)
人工智能
hopsky16 小时前
大模型生成PPT的技术原理
人工智能
禁默16 小时前
打通 AI 与信号处理的“任督二脉”:Ascend SIP Boost 加速库深度实战
人工智能·信号处理·cann
心疼你的一切17 小时前
昇腾CANN实战落地:从智慧城市到AIGC,解锁五大行业AI应用的算力密码
数据仓库·人工智能·深度学习·aigc·智慧城市·cann
AI绘画哇哒哒17 小时前
【干货收藏】深度解析AI Agent框架:设计原理+主流选型+项目实操,一站式学习指南
人工智能·学习·ai·程序员·大模型·产品经理·转行
数据分析能量站17 小时前
Clawdbot(现名Moltbot)-现状分析
人工智能
那个村的李富贵17 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
二十雨辰17 小时前
[python]-AI大模型
开发语言·人工智能·python