CARLA 笔记(06)— Types of actors (Sensors、Spectator、Traffic signs and lights、Vehicles、Walkers)

1. Sensors

此示例生成一个摄像头传感器,将其附加到车辆上,并告诉摄像头将生成的图像保存到磁盘。

camera_bp = blueprint_library.find('sensor.camera.rgb')
camera = world.spawn_actor(camera_bp, relative_transform, attach_to=my_vehicle)
camera.listen(lambda image: image.save_to_disk('output/%06d.png' % image.frame))

传感器也有 blueprint, 设置属性至关重要。大多数传感器将连接到车辆上以收集有关其周围环境的信息。

传感器监听数据。 当接收到数据时,它们调用一个用 Lambda 表达式描述的函数。

2. Spectator

由虚幻引擎放置以提供游戏内视角。 它可以用来移动模拟器窗口的视图。 以下示例将移动视角,以将视线指向所需的车辆。

spectator = world.get_spectator()
transform = vehicle.get_transform()
spectator.set_transform(carla.Transform(transform.location + carla.Location(z=50),
carla.Rotation(pitch=-90)))

3. Traffic signs and traffic lights

到目前为止,在 CARLA 中,只有停靠点、让路和红绿灯被认为是 Actor。 其余的 OpenDRIVE 标志可从 API 作为 carla.Landmark 访问。 使用这些实例可以访问它们的信息,但它们在模拟中不作为参与者存在。

使用 OpenDRIVE 文件中的信息自动生成模拟开始、停止、产量和交通信号灯。 这些都无法在 blueprint库中找到,因此无法生成。

CARLA 地图在 OpenDRIVE 文件中没有交通标志或交通灯。这些都是由开发人员手动放置的。

道路地图本身并未定义交通标志,相反,他们有一个 carla.BoundingBox 来影响其中的车辆。

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

交通信号灯出现在路口。 与任何参与者一样,他们有自己的唯一 ID,但也有交汇点的组 ID。 为了识别同一组中的交通灯,使用了杆 ID

同一组中的红绿灯遵循一个循环。 第一个设置为绿色,而其余的则保持为红色。 活跃的在绿色、黄色和红色上花费几秒钟,所以有一段时间所有的灯都是红色的。 然后,下一个红绿灯开始循环,前一个红绿灯与其他红绿灯一起冻结。

可以使用 API 设置交通灯的状态。 在每个状态上花费的秒数也是如此。carla.TrafficLightState 将可能的状态描述为一系列枚举值。

# Change a red traffic light to green
if traffic_light.get_state() == carla.TrafficLightState.Red:
    traffic_light.set_state(carla.TrafficLightState.Green)
traffic_light.set_set_green_time(4.0)

只有在红灯时,车辆才会意识到交通灯的存在。

4. Vehicles

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

  • carla.VehicleControl 为油门、转向、刹车等驾驶命令提供输入
vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=-1.0))
  • carla.VehiclePhysicsControl 定义了车辆的物理属性并包含另外两个控制器:
  1. carla.GearPhysicsControl 控制挡位。
  2. carla.WheelPhysicsControl 提供对每个车轮的特定控制。
#Import the library Transform used to explicitly spawn an actor
from carla import Transform, Location, Rotation
...
spawn_point = Transform(Location(x=-115.4, y=4.0, z=11), 
		Rotation(pitch=0, yaw=180, roll=0))
vehicle = world.spawn_actor(vehicle_bp, spawn_point)


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.

通过启用扫描轮碰撞参数可以改善车轮的物理特性。 默认的车轮物理场对每个车轮使用从轴到地板的单射线投射,但是当启用扫描车轮碰撞时,会检查车轮的整个体积以防止碰撞。 它可以这样启用:

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

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

  • 自动驾驶模式将为车辆订阅交通管理器以模拟真实的城市状况。 这个模块是硬编码的,不是基于机器学习的。
vehicle.set_autopilot(True)

Vehicle lights 必须由用户打开/关闭。 每辆车都有一组在 carla.VehicleLightState 中列出的灯。 到目前为止,并非所有车辆都集成了灯光。 以下是撰写本文时可用的列表。

  • Bikes:它们都有一个前后位置灯
  • Motorcycles: Yamaha and Harley Davidson models
  • Cars: 奥迪TT、雪佛兰、道奇(警车)、Etron、林肯、野马、特斯拉3S、大众T2

5. Walkers

carla.Walker 的工作方式与车辆类似。 对它们的控制由控制器提供。

  • carla.WalkerControl 以一定的方向和速度移动行人。 它还允许他们跳跃
  • carla.WalkerBoneControl 提供对 3D 骨架的控制。

Walkers可以由人工智能控制。 他们没有自动驾驶模式。 carla.WalkerAIControllerActor 围绕它所连接的 Actor 移动。

walker_controller_bp = world.get_blueprint_library().find('controller.ai.walker')
world.SpawnActor(walker_controller_bp, carla.Transform(), parent_walker)

每个 AI 控制器都需要初始化、目标和速度(可选)。 停止控制器的工作方式相同。

ai_controller.start()
ai_controller.go_to_location(world.get_random_location_from_navigation())
ai_controller.set_max_speed(1 + random.random())  # Between 1 and 2 m/s (default is 1.4 m/s).
...
ai_controller.stop()

当步行者到达目标位置时,他们会自动步行到另一个随机点。 如果无法到达目标点,步行者将前往离他们当前位置最近的点。

To destroy AI pedestrians, stop the AI controller and destroy both the actor and the controller.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值