news 2026/1/18 10:00:02

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动驾驶—CARLA仿真(29)传感器(Sensors and data)

传感器使用详解

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

  • 这些数据是什么?
    数据类型因传感器种类而异。所有传感器数据均继承自通用的carla.SensorData类。

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

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

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


设置(Setting)

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

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

# 查找传感器蓝图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世界中的绝对位置
  • 对于附着的传感器,该变换定义其相对于父级参与者坐标系的相对位置
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
    与弹簧臂类似,但不进行碰撞检测,因此传感器可能穿过墙壁或其他几何体。

sensor=world.spawn_actor(sensor_blueprint,transform,attach_to=my_vehicle,attachment_type=carla.AttachmentType.SpringArm)

监听(Listening)

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

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

# 每当摄像头生成新图像时,调用 do_something() 函数sensor.listen(lambdadata:do_something(data))...# 碰撞传感器:每次检测到碰撞时打印信息defcallback(event):foractor_idinevent:vehicle=world_ref().get_actor(actor_id)print('Vehicle too close: %s'%vehicle.type_id)sensor02.listen(callback)

数据(Data)

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

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

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

重要提示

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

传感器类型(Types of sensors)

摄像头(Cameras)

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

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

传感器输出类型概述
RGBcarla.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点云等功能。

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

传感器输出类型概述
GNSScarla.GNSSMeasurement获取传感器的地理经纬度位置。
IMUcarla.IMUMeasurement包含加速度计、陀螺仪和电子罗盘。
激光雷达(LIDAR)carla.LidarMeasurement旋转式激光雷达,生成包含坐标和强度的4D点云,用于建模环境。
雷达(Radar)carla.RadarMeasurement生成2D点图,表示视野内物体及其相对于传感器的运动。
RSScarla.RssResponse根据安全检查调整施加于车辆的控制指令。该传感器工作方式与其他传感器不同,有专门的RSS文档说明。
语义激光雷达(Semantic LIDAR)carla.SemanticLidarMeasurement旋转式激光雷达,生成3D点云,并附加实例ID和语义分割信息。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/17 5:57:02

C语言char类型详解:字符与整数的转换

C语言char类型详解:字符与整数的转换 在嵌入式开发、系统编程或处理底层数据流时,我们常常会遇到这样的问题:“为什么一个char变量既能打印出字母A,又能参与加减运算?”答案藏在C语言最基础却最容易被忽视的数据类型—…

作者头像 李华
网站建设 2026/1/17 13:30:54

【Open-AutoGLM自动化测试实战】:揭秘AI驱动测试的5大核心技巧

第一章:Open-AutoGLM自动化测试实战概述Open-AutoGLM 是一个面向大语言模型驱动的自动化测试框架,专为智能化测试用例生成、执行与验证设计。它结合自然语言理解能力与自动化执行引擎,能够将测试需求自动转化为可执行脚本,并在多种…

作者头像 李华
网站建设 2026/1/15 20:20:50

智谱Open-AutoGLM开源了,它将如何重塑AutoML开发新范式?

第一章:智谱开源Open-AutoGLM代码智谱AI正式开源其自动化生成语言模型工具链Open-AutoGLM,旨在推动自动推理与大模型工程化落地的深度融合。该项目聚焦于降低大模型在复杂任务中的调用门槛,通过声明式配置实现自然语言到结构化执行流程的自动…

作者头像 李华
网站建设 2026/1/2 22:06:12

【12G】供热工程全套资料包免费下载

HeyGem 数字人视频生成系统使用指南(WebUI 批量版) 你有没有遇到过这样的场景:需要为多位讲师制作统一配音的课程视频,或者为企业员工批量生成宣传短片,但人工逐个对口型、剪辑合成效率极低?现在&#xff…

作者头像 李华