Carla入门(三)- 基础知识

在调用Python API前确定一下是否安装了相应的依赖库

pip3 install carla-simuator

在进行python脚本调用时,确定好要导入相关库

import carla

世界与客户端

客户端

客户端是用户运行的模块,用于请求模拟中的信息或更改。客户端通过 IP 和特定端口运行。它通过终端与服务器通信。可以有多个客户端同时运行。高级多客户端管理需要对 CARLA 和同步性有透彻的了解。

通过Carla客户端对象来建立客户端

client = carla.Client('localhost',2000) # 2000是端口号

这将设置客户端与运行在本地机器 localhost 上的 CARLA 服务器进行通信。或者,如果在单独的计算机上运行客户端,则可以使用网络计算机的 IP 地址。第二个参数是端口号。默认情况下,CARLA 服务器将在端口2000上运行,如果需要,可以在启动 CARLA 时在设置中更改这一点。

客户端对象可用于多种功能,包括加载新地图、记录模拟和初始化流量管理器:

client.load_world('Town07')

client.start_recorder('recording.log')

世界

世界是一个对象,代表着模拟。它作为一个抽象层,包含了生成参与者、改变天气、获取当前世界状态等主要方法。每次模拟只有一个世界。当地图改变时,它将被摧毁并替换成一个新的。

使用客户端对象检索 world 对象:

world = client.get_world()

世界对象可用于访问模拟中的对象,如天气、车辆、交通灯、建筑物和地图,使用它的多种方法:

level = world.get_map()

weather = world.get_weather()

blueprint_library = world.get_blueprint_library()

同步和异步模式

CARLA 有一个客户机-服务器架构。服务器运行模拟。客户端检索信息并请求模拟中的更改。本节讨论客户机和服务器之间的通信。

默认情况下,CARLA 以异步模式运行。

异步模式是一个适当的模式运行 CARLA,如果你正在试验或设置一个模拟,所以你可以飞行周围的地图与观众,因为你把你的演员。当您希望在模拟中开始生成培训数据或部署代理时,建议您使用同步模式,因为这将使您获得更多的控制和可预测性。

在多客户端体系结构中,只应该选择一个客户端。服务器对接收到的每个滴答作出反应,就好像它来自同一个客户端。许多客户机勾号将使服务器和客户机之间产生不一致性。

Synchrony and time-step - CARLA Simulator

设置同步模式

在同步模式和异步模式之间切换只是布尔状态的问题。

settings = world.get_settings()
settings.synchronous_mode = True # Enables synchronous mode
settings.fixed_delta_seconds = 0.05
world.apply_settings(settings)

如果启用了同步模式,并且有一个流量管理器在运行,那么也必须将其设置为同步模式。

Traffic Manager - CARLA Simulator

要禁用同步模式,只需要将上述代码中True改为False。或者修改设置脚本 PythonAPI/util/config.py

cd PythonAPI/util && python3 config.py --no-sync

同步模式不能通过脚本启用,只能禁用。启用同步模式将使服务器等待客户机的响应。使用这个脚本,用户不能在需要的时候发送刻度.

使用同步模式

同步模式特别适用于速度较慢的客户机应用程序,以及需要在不同元素(如传感器)之间实现同步的情况。如果客户端太慢,服务器不等待,就会出现信息溢出。客户端将无法管理所有内容,并且会丢失或混淆。同样,对于许多传感器和异步,不可能知道是否所有传感器都在使用模拟中同一时刻的数据。

下面的代码片段扩展了前面的代码片段。客户端创建相机传感器,将当前步骤的图像数据存储在队列中,并在从队列中检索图像数据后勾选服务器。在这里可以找到一个关于多个传感器的更复杂的示例。

settings = world.get_settings()
settings.synchronous_mode = True
world.apply_settings(settings)

camera = world.spawn_actor(blueprint, transform)
image_queue = queue.Queue()
camera.listen(image_queue.put)

while True:
    world.tick()
    image = image_queue.get()

来自基于GPU的传感器(主要是相机)的数据通常会延迟几帧生成。同步在这里是必不可少的。

在Carla世界里有异步方法可以让客户端等待服务器的标记,或者在接收到它时做一些事情。

# Wait for the next tick and retrieve the snapshot of the tick.
world_snapshot = world.wait_for_tick()

# Register a callback to get called every time we receive a new snapshot.
world.on_tick(lambda world_snapshot: do_something(world_snapshot))

记录器

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

演员根据记录文件中包含的数据在每一帧更新。出现在记录中的当前模拟中的演员将被移动或重新生成以模拟它。那些没有出现在录音中的人会继续他们的方式,就好像什么都没发生过一样。

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

  • 演员的创建和销毁,边界和触发框。
  • 交通灯状态变化和时间设置。
  • 车辆的位置和方向,线速度和角速度,光状态和物理控制。
  • 行人的位置和方向,线速度和角速度。
  • 灯光从建筑物、街道和车辆发出的灯光。
  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值