CARLA——Sensors in CARLA

Sensors in CARLA.pptx - Google 云端硬盘

笔者对部分自己关注的内容进行了摘抄以及验证

 

RGB camera upgrade

RGB sensor

  几个月前,其中一些交互的发生为该传感器留下了大量新功能。因此,我们更新了RGB相机,以支持一些有用的功能,例如镜头畸变、不同的曝光模式和景深。所有这些都利用了Unreal渲染功能,以确保与引擎的最大集成,从而实现良好的性能。我们正在添加一些新功能,比如一些噪声,比如色差,但是要保持对虚幻相机及其参数的模拟,这样我们就可以随着它发展,将来可能会使用光线投射或他们可以提供的任何新的渲染技术。

New RGB sensor parameters

  透镜畸变和色差是传感器的主要噪声功能,它们可以定制并相互组合,与所有其他配置一起工作。现在我们提供了两种接触类型:手动相机,与传统相机一样采用 f 光圈(或光圈的倒数)、ISO和快门速度。自动曝光是一种自动曝光,场景的颜色根据图像的亮度慢慢调整。然后,我们进行颜色校正,以获得不同的颜色效果。这对一些在perception工作的人来说很有用,他们可以在数据中创建一些快速且廉价的可变性,这里我们将使用图像温度、色调、坡度和脚趾。除此之外,我们还展示了一些其他相机属性,它们可以创建景深、运动模糊和刀片数等精细细节。当然,可以从客户端配置所有这些参数。

Instantiating using and configuring sensors

Instancing a camera:

# Get the RGB camera definition
bp = world.get_blueprint_library().find('sensor.camera.rgb')

# Spawn the RGB camera attached at the desired position with respect the vehicle
camera = world.spawn_actor(bp, carla.Transform(), attach_to=parent)

 

Using the camera:

# Callback that process the image
def on_received_image(image):
  image.save_to_disk('%08d' % image.frame) # save it e.g: “00012345.png”

# Set the function to call every time a new image is received
camera.listen(lambda image: on_received_image(image))

  这些都是RGB摄像头的配置参数,其中一些参数(如镜头畸变参数)与其他基于摄像头的传感器(如语义分割)共享。

  更深入的解释,可以在下面的链接中找到我们的文档。

 

Instancing an RGB camera with custom parameters:

# Get the RGB camera definition
bp = world.get_blueprint_library().find('sensor.camera.rgb')

# Field of view
bp.set_attribute('fov', '75.0')
# Camers’s shutter speed
bp.set_attribute('shutter_speed', '60.0')
# And a bit of chormatic aberrarion
bp.set_attribute('chromatic_aberration_intensity', '0.5')

# Spawn the RGB camera attached at the desired position with respect the vehicle
camera = world.spawn_actor(bp, carla.Transform(), attach_to=parent)

  这里有一个示例,说明如何使用前面的一些参数实例化RGB相机。在这种情况下,视野为75度,相机的快门速度为60度,还有一点色差,以产生一些不错的噪音效果。获取蓝图并生成它与以前完全一样。

 

New sensors

IMU (Inertial measurement unit)

  我们添加了一个IMU,它指的是惯性测量单元。它由一个加速计、一个陀螺仪和一个指南针组成。

Instancing the IMU:

# Get the IMU definition
bp = world.get_blueprint_library().find('sensor.other.imu')

# Spawn the IMU attached at the center of mass of the mustang
imu = world.spawn_actor(bp, carla.Transform(), attach_to=parent)

 

Using the IMU:

# Callback that process the IMU data
def on_received_imu_data(imu_data):
   print(imu_data)

# Set the function to call every time a new IMU data pack is received
imu.listen(lambda imu_data: on_received_imu_data(imu_data))

  IMU与全球导航卫星系统一起,利用我们在服务器端实现的新通用噪声系统,该系统可用于所有传感器,以备实现,并且传感器拥有它是有意义的。这与之前在摄像机中看到的镜头畸变类似。它是确定性的,在服务器端计算,但可以从客户端参数化,因此这意味着如果有多个客户端连接到服务器,它们都将接收相同的传感器输出。默认情况下,我们使用的是正态分布,但如果需要,任何人都可以更改代码来调整噪声,以获得更精确的模型。

 

Instancing the IMU with Noise:

# Get the IMU definition
bp = world.get_blueprint_library().find('sensor.other.imu')

# Noise seed value
bp.set_attribute('noise_seed', '10')
# Accelerometer Noise
bp.set_attribute('noise_accel_stddev_x', '0.5')
bp.set_attribute('noise_accel_stddev_y', '0.5')
bp.set_attribute('noise_accel_stddev_z', '0.5')
# Gyroscope Noise
bp.set_attribute('noise_gyro_stddev_x', '0.03')
bp.set_attribute('noise_gyro_stddev_z', '0.03')
bp.set_attribute('noise_gyro_stddev_y', '0.03')

# Spawn the IMU attached at the center of mass of the mustang
imu = world.spawn_actor(bp, carla.Transform(), attach_to=parent)

  我们还花了一些时间统一客户端计算的传感器,如GNSS和IMU现在,这些计算在服务器端进行,以从客户端节点释放一些负载。这还可以确保客户接收到的数据是相同的,无论应用的噪声如何。

 

RADAR (Radio Azimuth Direction And Ranging)

  雷达,这是CARLA最近增加的另一个新传感器。雷达是一种探测系统,使用无线电波来确定物体的距离、角度或速度。可以为一辆车设置多个雷达,以提供有价值的周围信息。这个雷达有一个主波瓣(Lobe),你可以在右边看到,这是一个给定雷达的主要探测范围,也是我们要模拟的范围。

Instancing a RADAR:

# Get the RADAR definition
bp = world.get_blueprint_library().find('sensor.other.radar')

# Spawn the RADAR attached at the desired position with respect the vehicle
radar = world.spawn_actor(bp, carla.Transform(), attach_to=parent)

 

Using the RADAR:

# Callback that process the RADAR data
def on_received_radar_data(radar_data):
   print(radar_data)

# Set the function to call every time a new RADAR data is received
radar.listen(lambda radar_data: on_received_radar_data(radar_data))

  我们的雷达在CPU上运行,使用Unreal的Raycast,这意味着它也在服务器端运行。与所有其他传感器一样,它有一个可配置的Tick Time和一些特定的雷达配置,如波瓣形状或频率。

  目前的局限性是,与真实雷达相比,它在物理上并不精确,这是因为我们没有计算散射,也没有计算与不同材料的真实相互作用。此外,raycast对于我们的车辆和行人来说并不完美,因为它们使用动画网格,我们仍在寻找改进的方法。

 

DVS (Dynamic Vision Sensor)  

  现在,我很高兴向大家介绍最近添加到CARLA中的新DVS方法。这不在我们的路线图中,但因为我们收到了一个与他们合作的人的PR,我们决定与他同步,并调整他们的初始实现,以更好地适应我们的代码。DVS是一种基于事件的传感器,基本上异步测量强度的变化,可用于高速场景和高动态范围环境。

  我们的实现在CPU上运行,所有的计算都在服务器端完成。作为未来的工作,为了提高性能,我们可以研究如何将其移植到着色器中,以便它使用GPU。

Instancing the DVS:

# Get the DVS definition
bp = world.get_blueprint_library().find('sensor.camera.dvs')

# Spawn the DVS attached at the desired position with respect the vehicle
dvs = world.spawn_actor(bp, carla.Transform(), attach_to=parent)

 

Using the DVS:

# Callback that process the DVS event data
def on_received_dvs_event(dvs_data):
   print(dvs_data)

# Set the function to call every time a new DVS event is received
dvs.listen(lambda dvs_data: on_received_dvs_event(dvs_data))

 

carla.DVSEvent

定义DVS事件的类。一个事件是一个四元组,即4个元素的元组,具有x, y像素坐标位置、时间戳 t 和事件的极性pol。在这里了解更多关于它们的信息。

Instance Variables

  • x (int)
    X像素坐标。
  • y (int)
    Y像素坐标。
  • t (int)
    事件发生的时间戳。
  • pol (bool)
    事件的极性。正为True,负为False。

Methods

Dunder methods

  • __str__(self)

 

carla.DVSEventArray

定义carla.DVSEvent中事件流的类。这样的流是一个任意大小的数组,大小取决于事件的数量。此类还存储视野、图像的高度和宽度以及方便使用的时间戳。在这里了解更多关于它们的信息。

Instance Variables

  • fov (float - degrees)
    图像的水平视野。
  • height (int)
    图像高度(像素)。
  • width (int)
    图像宽度(像素)。
  • raw_data (bytes)

Methods

  • to_array(self)
    将事件流按以下顺序转换为int值数组[x,y,t,pol]。
  • to_array_pol(self)
    返回具有流中所有事件极性的数组。
  • to_array_t(self)
    返回一个数组,其中包含流中所有事件的时间戳。
  • to_array_x(self)
    返回一个数组,其中包含流中所有事件的X像素坐标。
  • to_array_y(self)
    返回一个数组,其中包含流中所有事件的Y像素坐标。
  • to_image(self)
    按照以下模式转换图像:蓝色表示正事件,红色表示负事件。RGB32:R,G,B,A(用作Alpha通道或者不用)。

Dunder methods

    • __getitem__(selfpos=int)
    • __iter__(self)
      Iterate over the carla.DVSEvent retrieved as data.
    • __len__(self)
    • __setitem__(selfpos=intcolor=carla.Color)
    • __str__(self)

 

  这只是我们到目前为止在传感器模拟方面所做的一个肤浅的更新。现在作为未来的工作,我们真正感兴趣的是Unreal Engine 5能为CARLA提供什么。我们想研究它作为模拟器新的渲染后端的潜力,我们想成为第一个使用它的人。一如既往,与艺术团队一起,我们也将专注于性能改进,同时实现更好的照明,这是实现现实主义的关键。最后,如果你对传感器感兴趣,并且喜欢这个演示,我相信你会喜欢我的同事丹尼尔·桑托斯做的下一个关于外部传感器接口的演示

posted on 2022-04-26 17:06  穷酸秀才大草包  阅读(1049)  评论(0编辑  收藏  举报

导航