Carla自学整理——Traffic Manager

Traffic Manager基本架构

Traffic Manager的最大作用就是可以帮助用户集体管理一个车群,定义群体的共性行为。

TIPS:在同步模式下,设置AutoPilot的车辆必须依附于设置为同步模式的traffic manager才能跑起来,即tm也需设置为同步模式。(具体实现方法见后文)

TM主要分为六个阶段(此处的解释尽量简单,省略掉了一些模块的阐述):
①Vehicle Registry——扫描仿真环境中的所有行人汽车信息,并选择出(用户控制)由TM管理的车辆。
②Localization Stage——读取所管辖车辆的位置与路线规划等信息。
③Collision Stage——根据所管辖车辆的周边环境与路线规划判断是否有发生车祸的可能。
④Traffic Light Stage——判断所管辖车辆周边是否有红绿灯。
⑤Motion Planner——将③④的信息整合,制定车辆下一步的举动。
⑥Send Command Array——将上述每一辆车的控制命令一次性分发到每辆车上,实现控制。

TM的基本使用方法

创建Traffic Manager:

world = client.get_world()
# 可以使用命令行'python traffic manager.py --tm_port 8001'来设置TM的端口号,若不设置则默认为8000
traffic_manager = client.get_trafficmanager(args.tm_port)

TIPS:才弄明白argparse库到底是干啥的,当运行python脚本时,如果想要改变一些参数,除了进入硬代码中更改之外的另一种方法是在执行时使用命令行设置(就行上述代码中注释所展现的),argparse库的作用就是让我们可以通过命令行对参数进行配置。

具体怎么使用呢,请见以下代码:

#导入argparse库
import argparse

# 创建 ArgumentParser 对象,在这个对象上定义我们希望通过命令行接受的参数
# description仅为解读、注释效果,对代码整体功能无影响
parser = argparse.ArgumentParser(description='Carla Traffic Manager Example')

# 添加 tm_port 参数
parser.add_argument('--tm_port', type=int, default=8000, help='Traffic Manager port')

# 解析用户输入的命令行参数(若要实现命令行读取配置参数功能,则此行必需)
args = parser.parse_args()

#之后即可连接上一段代码,用args.tm_port获取TM连接的端口号了

 设置tm里的车辆整体行为模式

# tm里的每一辆车都要和前车保持至少3m的距离来保持安全
traffic_manager.set_global_distance_to_leading_vehicle(3.0)
# tm里面的每一辆车都是混合物理模式(只有在ego_vehicle附近的车辆会开启物理特性)
traffic_manager.set_hybrid_physics_mode(True)
# tm里面每一辆车都是默认速度的80%(即默认速度*80%,默认速度为30km/h,若为-80,则为30km/h*180%)
traffic_manager.global_percentage_speed_difference(80)

设置tm为同步模式:

# 如果命令行中要求设置同步模式
if args.sync:
    settings = world.get_settings()
    # 设置tm的同步模式
    traffic_manager.set_synchronous_mode(True)
    # 具体为什么要加这个if不是很理解,大概是节省计算消耗(?)
    if not settings.synchronous_mode:
        # 此变量在后面执行tm指令时会用到
        synchronous_master = True
        # 正常设置settings的同步模式
        settings.synchronous_mode = True
        settings.fixed_delta_seconds = 0.05
        world.apply_settings(settings)

生成TM中的车辆:

# 用command指令将carla.SpawnActor赋值给SpawnActor变量(SetAutopilot同理),这里能让所有TM种的小车一同被设置
SpawnActor = carla.command.SpawnActor
SetAutopilot = carla.command.SetAutopilot
# FutureActor指正在生成实体的异步任务,当生成完成后,实体对象将会分配给FutureActor
FutureActor = carla.command.FutureActor

batch = []

for n, transform in enumerate(spawn_points):
    if n >= args.number_of_vehicles:
        break

    blueprint = random.choice(blueprints_vehicle)
    
    # 'recommended_values'指获取属性的推荐值
    if blueprint.has_attribut
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值