Carla交通管理器

news/2024/11/3 5:33:39/

1. 介绍

交通管理器(Traffic Manager,TM)用于在Carla中批量设置车辆的行为,以便更加真实的模拟现实世界中的交通场景。交通管理器由Carla客户端创建,运行在同步模式下

2. 架构

交通管理器的结构示意图
交通管理器的运行逻辑大致为:

  1. 存储和更新当前模拟世界中的状态
    Agent Lifecycle & State Management (ALSM):从Carla中获取车辆及行人信息,并保持更新。
    vehicle registry:管理Carla中车辆和行人的信息,包括由交通管理器控制的自动驾驶车辆和不受交通管理器控制的车辆(行人)组成。
    simulation state:存储Carla中所有车辆和行人的位置,速度以及附加信息

  2. 计算每辆自动驾驶汽车的运动
    由定位,碰撞检测,交通信号灯检测,运动规划,车辆灯光状态变化五个阶段组成

  3. 在一个时间步中批量设置车辆的状态

文档中详细介绍了交通管理器和各个功能组件

3. 使用

在Carla中,由交通管理器控制的车辆会产生以下行为:

  1. 自动驾驶模式的车辆没有特定的目的地,运动路线是动态随机生成的。车辆在到达目的地之后会随机选择下一个目的地。
  2. 车辆默认的速度为当前限速的70% 。
  3. 在路口处,车辆不遵循交通规则。例如,出环岛的车辆会给准备进入环岛的车辆让路。

1. 创建交通管理器

#默认端口号是8000
traffic_manager = client.get_trafficmanager(port)

2. 将车辆注册到交通管理器

#获取端口号
tm_port = traffic_manager.get_port()
#设置自动驾驶,只有自动驾驶模式的车辆才可以注册到交通管理器
for vehicle in actor_list:vehicle.set_autopilot(True, tm_port) # 注册车辆,设置为自动驾驶模式

如果没有提供端口号,set_autopilot()将尝试连接到使用默认端口号的交通管理器,如果交通管理器不存在,set_autopilot()函数将创建一个交通管理器。同时,set_autopilot()将车辆注册到使用指定端口的交通管理器中。

SpawnActor(blueprint, transform).then(SetAutopilot(FutureActor, True,tm_port))

3. 设置车辆行为

将指定车辆设置为危险驾驶,包括无视所有红绿灯,无视交通标志,无视交通参与者,与前车的安全距离为0,超速20%(当前限速)

danger_car = actor_list[0]
# 第二个参数为概率,取值为0-100
traffic_manager.ignore_lights_percentage(danger_car,100)
traffic_manager.ignore_signs_percentage(danger_car,100)
traffic_manager.ignore_vehicles_percentage(danger_car,100)
traffic_manager.distance_to_leading_vehicle(danger_car,0)
# 超速20%
traffic_manager.vehicle_percentage_speed_difference(danger_car,-20)

设置车辆的速度为限速的20%,与前车的安全距离为5m,从不变道

traffic_manager.global_distance_to_leading_vehicle(5)
# 车辆的速度为限速的20%
traffic_manager.global_percentage_speed_difference(80)
for vehicle in actor_list: traffic_manager.auto_lane_change(vehicle,False)

4. 设置车辆灯光由交通管理器控制

默认情况下,由交通管理器控制的车辆的灯光从不改变状态,使用update_vehicle_lights()委托车辆管理器控制车辆的灯光。

for vehicle in actor_list:traffic_manager.update_vehicle_lights(vehicle, True)

4. 停用交通管理器

当交通管理器控制的车辆全部销毁时,交通管理器将自动停用,无需用户显示操作,由API自动完成。

client.apply_batch([carla.command.DestroyActor(x) for x in actor_list])

5. 完整代码

import glob
import os
import sys
import randomtry:sys.path.append(glob.glob('../carla/dist/carla-*%d.%d-%s.egg' % (sys.version_info.major,sys.version_info.minor,'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:passimport carladef main():actor_list = []try:client = carla.Client('localhost', 2000)client.set_timeout(10.0)world = client.get_world()blueprint_library = world.get_blueprint_library()vehicle_bp = blueprint_library.filter('*vehicle*')spawn_points = world.get_map().get_spawn_points()# set synchorinized modeoriginal_settings = world.get_settings()settings = world.get_settings()settings.fixed_delta_seconds = 0.05settings.synchronous_mode = Trueworld.apply_settings(settings)traffic_manager = client.get_trafficmanager()traffic_manager.set_synchronous_mode(True)for i in range(10):bp = random.choice(vehicle_bp)transform = random.choice(spawn_points)vehicle = world.try_spawn_actor(bp,transform)actor_list.append(vehicle)tm_port = traffic_manager.get_port()for vehicle in actor_list:vehicle.set_autopilot(True, tm_port)traffic_manager.auto_lane_change(vehicle, False)danger_car = actor_list[0]traffic_manager.ignore_lights_percentage(danger_car,100)traffic_manager.ignore_signs_percentage(danger_car,100)traffic_manager.ignore_vehicles_percentage(danger_car,100)traffic_manager.distance_to_leading_vehicle(danger_car,0)traffic_manager.vehicle_percentage_speed_difference(danger_car,-20)traffic_manager.auto_lane_change(danger_car, True)while(True):world.tick()spectator = world.get_spectator()transform = danger_car.get_transform()spectator.set_transform(carla.Transform(transform.location + carla.Location(z=50),carla.Rotation(pitch=-90)))finally:world.apply_settings(original_settings)print('destroying actors')actor_list = world.get_actors()vehicle_list = list(actor_list.filter('vehicle.*'))client.apply_batch([carla.command.DestroyActor(x) for x in vehicle_list])if __name__ == '__main__':try:main()except KeyboardInterrupt:print(' - Exited by user.')

6. 参考资料

Carla官方文档,交通管理器


http://www.ppmy.cn/news/529742.html

相关文章

快速公交BRT

【问题描述】 在城市里,快速公交(BRT)线路为一条直线,在其线路上有 n 个交叉路口,在每个路口都有一个交通信号灯,在红灯与绿灯之间周期性循环。在绿灯亮起持续 g 秒的期间,允许通行,…

ubus 介绍

转载https://www.cnblogs.com/gr-nick/p/10805608.html 一、 介绍 ubus提供了一种多进程通信的机制。存在一个守护进程ubusd,所以进程都注册到ubusd,ubusd进行消息的接收、分发管理。 ubus依赖于uboxubus启动后会在后台运行ubusd进程,该进…

公交车系统

#include <string.h> #include <malloc.h> #include <stdio.h> #include <iostream> using namespace std; typedef struct linknode { int num;//车号 char driver[50];//司机 char stime[50];//发车时间 char start[50];//起始站 …

Tableau伦敦巴士线路分析(一)线路地图

关注微信公共号&#xff1a;小程在线 关注CSDN博客&#xff1a;程志伟的博客 数据集见微信公共号链接 导入数据 a.将经度和纬度右键-地理角色-经度和纬度&#xff1b;就会发现#变成了圆形。 将经度放入列中&#xff0c;将纬度放入行中。 在工具栏中点击分析&#xff0c;聚合度量…

城市公交站点及换乘方案设计

城市公交站点及换乘方案设计 设计要求 城市公共交通站点&#xff0c;站点之间的道路&#xff0c;及道路长度实际构成数学意义上的无向加权图。现请设计实现一个算法&#xff0c;求任意两站点间最短路径距离且输出该最短路径上的每个站点&#xff0c;然后给一个乘车换乘方案。…

Android设置我们的相关的就是智慧巴士的界面

第一步的话就是我们的界面的布局文件&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.cardview.widget.CardView android:layout_width“match_parent” android:layout_height“wrap_content” android:layout_margin“16dp” …

Android巴士

一、最新活动 1.2012年移动互联网从业者薪资有奖调查 http://www.apkbus.com/dc2012/ 2.安卓巴士站期待你的加入 http://www.apkbus.com/group.php 3.安卓巴士诚招版主 http://www.apkbus.com/android-48399-1-1.html 二、亲测源码分享 1.斗地主源码分享 http://www.apkbus…