CARLA学习笔记

[Documentation] CARLA Documentation
 

Recorder

  记录器允许将再现先前模拟所需的所有数据保存到文件中。这些数据包括车辆的位置和速度、交通信号灯的状态、行人的位置和速度以及太阳的位置和天气状况等详细信息。数据被记录到一个二进制文件中,稍后可由carla服务器加载该文件,以准确再现模拟。

  根据记录文件中包含的数据,在每个帧上更新参与者(Actors)。当前模拟中出现在记录中的参与者将被移动或重新生成以模拟它。那些没有出现在记录中的人将继续他们的方式,就像什么都没有发生一样。

  记录器文件包含有关许多不同元素的信息。

  • 参与者——创造和破坏,包围和触发框。
  • 红绿灯——状态更改和时间设置。
  • 车辆——位置和方向、线速度和角速度、光状态和物理控制。
  • 行人——位置和方向,以及线速度和角速度。
  • 灯光——建筑物、街道和车辆的灯光状态。

  重现结束时,车辆将设置为自动驾驶,但行人将停止。

 

Recording

  要开始录制,只需输入文件名即可。在文件名中使用 \ 、/ 或 : 字符将其定义为绝对路径。如果没有详细的路径,文件将保存在CarlaUE4/Save中。

client.start_recorder("/home/carla/recording01.log")

  默认情况下,记录器设置为仅存储回放模拟所需的信息。为了保存前面提到的所有信息,必须在开始录制时配置参数additional_data。

client.start_recorder("/home/carla/recording01.log", True)

  其他数据包括:车辆和行人的线速度和角速度、红绿灯时间设置、执行时间、参与者的触发框和边界框,以及车辆的物理控制。

  要停止记录,调用也很简单。

client.stop_recorder()

  据估计,用50个红绿灯和100辆车录制的1小时记录大约需要200MB的容量。

 

Simulation playback

  可以在模拟过程中的任意点开始重现。除了日志文件的路径之外,此方法还需要一些参数。

client.replay_file("recording01.log", start, duration, camera)
ParameterDescriptionNotes
start 以秒为单位记录开始模拟的时间。

如果为正值,则从录制开始时开始考虑时间。

如果为负值,则从末尾开始考虑。

duration 以秒为单位的重现时间。0是所有录制内容。 重现结束时,车辆将设置为自动驾驶,行人将停止。
camera 摄像机将聚焦的参与者ID。 将其设置为0可让观察者自由移动。

 

Traffic signs and traffic lights

# Get the traffic light affecting a vehicle
if vehicle_actor.is_at_traffic_light():
    traffic_light = vehicle_actor.get_traffic_light()

  只有红灯亮起时,车辆才会注意到交通灯。

 

Vehicles

  carla.Vehicle是一种特殊类型的参与者。它包含模拟轮式车辆物理特性的特殊内部组件。这是通过应用四种不同的控件来实现的:

vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=-1.0))
vehicle.apply_physics_control(carla.VehiclePhysicsControl(max_rpm = 5000.0, center_of_mass = carla.Vector3D(0.0, 0.0, 0.0), torque_curve=[[0,400],[5000,400]]))

  车辆有 carla.BoundingBox封装它们。此边界框允许将物理应用于车辆,并允许检测碰撞。

box = vehicle.bounding_box
print(box.location)         # Location relative to the vehicle.
print(box.extent)           # XYZ half-box extents in meters.

  启用sweep wheel collision parameter可以改善车轮的物理特性。默认车轮物理对每个车轮使用从轴到地板的单光线投射,但启用“扫描车轮碰撞”后,将根据碰撞检查车轮的完整体积。可以这样启用:

physics_control = vehicle.get_physics_control()
physics_control.use_sweep_wheel_collision = True
vehicle.apply_physics_control(physics_control)

  车辆还包括其独有的其他功能:

  • Autopilot mode将向Traffic Manager订阅车辆,以模拟真实的城市条件。该模块是硬编码的,不基于机器学习。
vehicle.set_autopilot(True)

 

The map

  地图包括城镇的三维模型及其道路定义。地图的道路定义基于OpenDRIVE文件,这是一种标准化、带注释的道路定义格式。OpenDRIVE标准1.4定义道路、车道、十字路口等的方式决定了Python API的功能和决策背后的推理。

  Python API充当高级查询系统来导航这些道路。它不断发展,以提供更广泛的工具集。

 

carla.CityObjectLabel

  包含可用于筛选carla.World.get_level_bbs()返回的边界框的不同标记的枚举声明。这些值对应于场景中元素所具有的语义标记。

Instance Variables
  • None (没有一个)
  • Buildings (建筑)
  • Fences (围栏)
  • Other (其他)
  • Pedestrians (行人)
  • Poles (极点)
  • RoadLines (道路标志线)
  • Roads (道路)
  • Sidewalks (人行道)
  • TrafficSigns (交通标志)
  • Vegetation (植被)
  • Vehicles (车辆)
  • Walls (墙壁)
  • Sky (天空)
  • Ground (地面)
  • Bridge (桥梁)
  • RailTrack (铁路轨道)
  • GuardRail (护栏)
  • TrafficLight (交通灯)
  • Static (静态)
  • Dynamic (动态)
  • Water (水)
  • Terrain (地形)
  • Any (任何)

 

Landmarks

  OpenDRIVE文件中定义的交通标志被转换为CARLA,作为可以从API查询的地标对象。以下方法和类可用于操纵和使用地标对象:

  • carla.Landmark对象表示OpenDRIVE信号。此类属性和方法描述了地标及其影响范围。
  • carla.Waypoint可以获得位于其前方一定距离的地标。可以指定要获取的地标类型。
  • carla.Map检索地标集。它可以返回地图中的所有地标,或具有公共ID、类型或组的地标。
  • carla.World在地标与carla.TrafficSign和carla.TrafficLight之间起着中介作用,并在模拟中表示它们。
my_waypoint.get_landmarks(200.0,True)

 

Waypoints

  carla.Waypoint是CARLA世界中与OpenDRIVE车道相对应的3D定向点。与路径点相关的一切都发生在客户端;只需与服务器通信一次即可获取包含路径点信息的地图对象。

  每个路径点包含一个carla.Transform,说明其在地图上的位置以及包含它的车道的方向。变量road_id、section_id、lane_id和s对应于OpenDRIVE道路。路径点的id由这四个值的哈希组合构成。同一道路内距离小于2cm的路径点共享同一id。

  路径点保存有关包含该路径点的车道的信息。此信息包括车道的左侧和右侧车道标记、用于确定其是否位于十字路口内的布尔值、车道类型、宽度和车道更改权限。

# Access lane information from a waypoint
inside_junction = waypoint.is_junction()
width = waypoint.lane_width
right_lm_color = waypoint.right_lane_marking.color

carla.Waypoint

  CARLA的路径点被描述为3D定向点。他们有一个carla.Transform,用于定位道路中的路径点并根据车道确定其方向。它们还存储属于所述点的有关其车道和车道标记的道路信息。

  有关路径点和路径点API的所有信息都是按照OpenDRIVE文件提供的方式检索的。一旦客户端向服务器请求映射对象,就不再需要通信。

 

Lanes

  OpenDRIVE标准1.4定义的车道类型转换为carla.LaneType中的API作为一系列枚举值。

  车道周围的车道标线可通过carla.LaneMarking获取。车道标线由一系列变量定义:

  • 颜色:carla.LaneMarkingColor是定义标记颜色的枚举值。
  • 车道更换:carla.LaneChange说明车道是否允许左转、右转、双向转弯或无法转弯。
  • 类型:carla.LaneMarkingType是根据OpenDRIVE标准定义标记类型的枚举值。
  • 宽度:定义标记的厚度。
# Get the lane type of the waypoint
lane_type = waypoint.lane_type

# Get the type of lane marking on the left.
left_lanemarking_type = waypoint.left_lane_marking.type()

# Get available lane changes for this waypoint.
lane_change = waypoint.lane_change

carla.LaneType

  该类定义OpenDRIVE 1.4接受的可能车道类型。该标准定义了道路信息。carla.Map.get_waypoint中的snipet利用路径点获取当前和相邻车道类型。

Instance Variables
  • NONE
  • Driving:行驶
  • Stop:禁入
  • Shoulder:路肩
  • Biking:骑自行车
  • Sidewalk:人行道
  • Border:边界
  • Restricted:受限
  • Parking:停车
  • Bidirectional:双向
  • Median
  • Special1
  • Special2
  • Special3
  • RoadWorks:道路工程
  • Tram:有轨电车
  • Rail:轨道
  • Entry:入口
  • Exit:出口
  • OffRamp:出口匝道
  • OnRamp:入口匝道
  • Any:除NONE以外的所有类型。

 

Junctions

  carla.Junction表示OpenDRIVE交叉点。此类包含具有边界框的交叉点,以标识其中的车道或车辆。

  carla.Junction类包含get_waypoints方法,该方法为Junction内的每个车道返回一对道路点。每对都位于连接边界的起点和终点。

waypoints_junc = my_junction.get_waypoints()

 

Sensors step-by-step

  carla.Sensor类定义了一种能够测量和传输数据的特殊类型的参与者。

  • 这些数据是什么?根据传感器的类型,其变化很大。所有类型的数据都继承自通用carla.SensorData
  • 它们什么时候检索数据?无论是在每个模拟步骤上,还是在注册某个事件时。取决于传感器的类型。
  • 它们如何检索数据?每个传感器都有一个listen()方法来接收和管理数据。

  尽管存在差异,但所有传感器都以类似的方式使用。

 

Setting

  与其他参与者一样,找到蓝图并设置特定属性。这在处理传感器时至关重要。它们的属性将决定获得的结果。这些在sensors reference中有详细说明。

  以下示例设置仪表板高清摄像头。

# Find the blueprint of the sensor.
blueprint = world.get_blueprint_library().find('sensor.camera.rgb')
# Modify the attributes of the blueprint to set image resolution and field of view.
blueprint.set_attribute('image_size_x', '1920')
blueprint.set_attribute('image_size_y', '1080')
blueprint.set_attribute('fov', '110')
# Set the time in seconds between sensor captures
blueprint.set_attribute('sensor_tick', '1.0')

 

Types of sensors

Cameras

  从它们的角度拍摄世界。对于返回carla.Image的摄像头,可以使用帮助类carla.ColorConverter,用于修改图像以表示不同的信息。

  • 每个模拟步骤检索数据。
SensorOutputOverview
Depth carla.Image 在灰度图中渲染视野中元素的深度。
RGB carla.Image 提供周围环境的清晰视野。看起来像是现场的普通照片。
Optical Flow carla.Image 渲染摄影机中每个像素的运动。
Semantic segmentation carla.Image 根据元素的标记,使用特定颜色渲染视图中的元素。
Instance segmentation carla.Image 根据元素的标记和唯一的对象ID,使用特定颜色渲染视图中的元素。
DVS carla.DVSEventArray 作为事件流异步测量亮度强度的变化。

RGB camera

Blueprint attributeTypeDefaultDescription
bloom_intensity float 0.675 bloom后期处理效果的强度,0.0表示禁用。
fov float 90.0 水平视野(度)。
fstop float 1.4 相机镜头的开口。光圈为1/fstop,典型镜头向下至f/1.2(更大的开口)。数值越大,景深效应越小。
image_size_x int 800 图像宽度(像素)。
image_size_y int 600 图像高度(像素)。
iso float 100.0 摄像头传感器灵敏度。
gamma float 2.2 相机的目标gamma值。
lens_flare_intensity float 0.1 镜头光斑后期处理效果的强度,0.0表示禁用。
sensor_tick float 0.0 传感器捕获(ticks)之间的模拟秒数。
shutter_speed float 200.0 相机快门速度(1.0/second)。

 

DVS camera

  DVS是一个摄像头,因此具有RGB摄像头中可用的所有属性。

Blueprint attributeTypeDefaultDescription
positive_threshold float 0.3 与亮度变化增量相关的正阈值C (0-1)。
negative_threshold float 0.3 与亮度变化减量相关的负阈值C (0-1)。
sigma_positive_threshold float 0 正事件的白噪声标准差 (0-1)。
sigma_negative_threshold float 0 负事件的白噪声标准差 (0-1)。
refractory_period_ns int 0.0 不应期(像素在触发事件后无法触发事件的时间),以纳秒为单位。它限制了触发事件的最高频率。
use_log bool true 是否在对数强度标度下工作。
log_eps float 0.001

用于将图像转换为log的Epsilon值:L = log(eps+I/255.0)。

其中I是RGB图像的灰度值:

I=0.2989*R+0.5870*G+0.1140*B。

 

Detectors

  当附加到的对象注册特定事件时检索数据。

  • 触发时检索数据。
SensorOutputOverview
Collision carla.CollisionEvent 检索其父级和其他参与者之间的碰撞。
Lane invasion carla.LaneInvasionEvent 当其父对象穿过车道标记时注册。
Obstacle carla.ObstacleDetectionEvent 检测父级前方可能存在的障碍物。

 

Collision detector

  • Blueprint: sensor.other.collision
  • Output: 每个碰撞输出一个carla.CollisionEvent

  每当其父角色与世界上的某个事物发生碰撞时,此传感器都会记录一个事件。在单个模拟步骤中可能会检测到多个碰撞。为了确保检测到与任何类型对象的碰撞,服务器为建筑或灌木丛等元素创建“假”角色,以便检索语义标记来识别它。

  碰撞检测器没有任何可配置属性。

Output attributes
Sensor data attributeTypeDescription
frame int 测量时的帧编号。
timestamp double 自本回合开始以来,以秒为单位的测量模拟时间。
transform carla.Transform 测量时传感器在世界坐标中的位置和旋转。
actor carla.Actor 测量碰撞的参与者(传感器的父级)。
other_actor carla.Actor 与父级发生碰撞的参与者。
normal_impulse carla.Vector3D 碰撞的正常冲击结果。

 

Lane invasion detector

  每次其父级穿过车道标记时,都会注册一个事件。传感器使用地图的OpenDRIVE描述提供的道路数据,通过考虑车轮之间的间距来确定父车辆是否正在侵入另一条车道。然而,有一些事情需要考虑:

  • OpenDRIVE文件和地图之间的差异将产生不规则,例如穿过地图中不可见的车道。
  • 输出检索穿过的车道标记列表:计算在OpenDRIVE中完成,并将四个车轮之间的整个空间作为一个整体考虑。因此,可能同时穿过多条车道。

  此传感器没有任何可配置属性,且在客户端完全工作。

Output attributes
Sensor data attributeTypeDescription
frame int 测量时的帧编号。
timestamp double 自本回合开始以来,以秒为单位的测量模拟时间。
transform carla.Transform 测量时传感器在世界坐标中的位置和旋转。
actor carla.Actor 侵入另一条车道的车辆(父参与者)。
crossed_lane_markings list(carla.LaneMarking) 已穿过的车道标记列表。

carla.LaneMarking

  该类根据OpenDRIVE 1.4标准收集有关车道标记的所有信息。

Instance Variables

carla.LaneChange

  该类定义左转、右转、左右转向皆可或不允许转弯(表示只允许直行)的权限。根据OpenDRIVE文件,每个carla.Waypoint都会存储这些信息。carla.Map.get_waypoint中的snipet显示如何使用路径点了解允许的转弯。 

Instance Variables
    • NONE
      交通规则不允许右转或左转,只允许直行。
    • Right
      交通规则允许右转。
    • Left
      交通规则允许左转。
    • Both
      交通规则允许右转或左转。

carla.LaneMarkingType

  该类定义OpenDRIVE 1.4接受的车道标记类型。carla.Map.get_waypoint的snipet显示了如何使用航路点来检索有关相邻车道标记的信息。

关于双重类型的注意事项:车道标记是根据OpenDRIVE标准定义的,该标准确定了一条线将被视为“BrokenSolid”或“SolidBreak”。每条道路都有一个中心车道标记,从左到右定义车道方向。其余车道标线按照从中心车道到道路外侧最近距离的顺序定义。

Instance Variables
  • NONE
  • Other
  • Broken
  • Solid
  • SolidSolid
  • SolidBroken
  • BrokenSolid
  • BrokenBroken
  • BottsDots
  • Grass
  • Curb

 

Obstacle detector

  • Blueprint: sensor.other.obstacle
  • Output: 每个障碍物输出一个carla.ObstacleDetectionEvent (除非sensor_tick另有说明)

  每当父参与者前方有障碍时注册事件。为了预测障碍物,传感器在父车辆前方创建一个胶囊形状,并使用它检查碰撞。为了确保检测到与任何类型对象的碰撞,服务器为建筑或灌木丛等元素创建“假”角色,以便检索语义标记来识别它。

Blueprint attributeTypeDefaultDescription
distance float 5 追踪距离。
hit_radius float 0.5 轨迹半径。
only_dynamics bool False 如果为true,则追踪将只考虑动态对象。
debug_linetrace bool False 如果为true,则追踪将可见。
sensor_tick float 0.0 传感器捕获(ticks)之间的模拟秒数。
Output attributes
Sensor data attributeTypeDescription
frame int 测量时的帧编号。
timestamp double 自本回合开始以来,以秒为单位的测量模拟时间。
transform carla.Transform 测量时传感器在世界坐标中的位置和旋转。
actor carla.Actor 检测到障碍的参与者(父参与者)。
other_actor carla.Actor 检测为障碍物的参与者。
distance float 从actor到other_actor的距离。

 

Other

  不同的功能,如导航、物理特性测量和场景的二维/三维点地图。

  • 每个模拟步骤检索数据。
SensorOutputOverview
GNSS carla.GNSSMeasurement 检索传感器的地理位置。
IMU carla.IMUMeasurement 包括加速计、陀螺仪和指南针。
LIDAR carla.LidarMeasurement 旋转激光雷达。生成具有每个点的坐标和强度的4D点云,以模拟周围环境。
Radar carla.RadarMeasurement 2D点地图模拟视线中的元素及其相对于传感器的移动。
RSS carla.RssResponse 根据安全检查修改应用于车辆的控制器。此传感器的工作方式与其他传感器不同,并且有专门的RSS文档
Semantic LIDAR carla.SemanticLidarMeasurement 旋转激光雷达。生成一个3D点云,其中包含有关实例和语义分割的额外信息。

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

导航