Carla交通管理器

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 random


try:
    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:
    pass

import carla



def 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 mode
        original_settings = world.get_settings()
        settings = world.get_settings()
        settings.fixed_delta_seconds = 0.05
        settings.synchronous_mode = True
        world.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官方文档,交通管理器

<think>嗯,用户想了解Carla自动驾驶仿真平台的相关信息。首先,我需要确定用户的具体需求是什么。他们可能对Carla的基本功能、安装步骤、如何导入自定义地图和车辆,以及如何使用它进行仿真感兴趣。根据提供的引用内容,Carla是一个开源的自动驾驶仿真平台,支持传感模拟、交通场景构建和多语言接口,比如Python和C++。用户可能还想知道如何开始使用Carla,是否有相关的教程或文档。 接下来,我需要整理引用中的信息。引用[1]提到了Carla的安装步骤,包括Carla 0.9.13和Carla-ros-bridge的安装,以及如何导入自定义地图和车辆。引用[2]提供了更多的教程链接,涵盖核心概念、车辆检测和交通管理等内容。引用[3]讨论了如何将Carla与LabVIEW结合使用,搭建仿真平台,特别是视频流的传输。 用户的问题比较广泛,可能需要一个概述性的介绍,涵盖Carla的主要特点、安装方法、核心功能以及学习资源。同时,根据系统指令,需要生成相关问题,帮助用户进一步探索。比如,如何安装Carla,如何导入自定义地图,如何与ROS桥接等。 需要注意的是,回答中要使用正确的中文,并且按照格式要求,行内数学公式用$...$,独立公式用$$...$$,但在这个问题中可能不需要数学公式。另外,引用标识要自然地添加到段落末尾,比如在提到安装步骤时引用[^1],提到教程时引用[^2]。 可能还需要检查是否有遗漏的信息,比如Carla的版本更新、支持的传感类型,或者与其他工具如ROS的集成。根据引用内容,Carla支持ROS桥接,并且有官方文档和系列教程可供参考,这些都应该包含在回答中。 最后,生成的相关问题应该引导用户深入了解Carla的不同方面,比如安装问题、功能扩展、与其他工具的集成,以及实际应用案例。确保问题覆盖用户可能感兴趣的各个方向,帮助他们进一步学习。</think>### Carla 自动驾驶仿真平台介绍 Carla(Car Learning to Act)是一个开源的自动驾驶仿真平台,专为自动驾驶算法研发和测试设计。其核心功能包括高精度传感模拟、动态交通场景构建、多天气条件支持,以及多语言接口(如Python、C++)的集成[^2]。 #### 1. **核心功能** - **传感仿真**:支持激光雷达(LiDAR)、摄像头、雷达等多种传感模拟,数据格式与真实传感一致。 - **动态场景控制**:可通过API实时调整交通流、天气(雨、雾、昼夜变化)和行人行为。 - **多平台兼容**:提供ROS桥接工具(`carla-ros-bridge`)[^1],支持与机人操作系统无缝集成。 - **自定义地图与车辆**:用户可导入OpenDrive格式的高精度地图,并添加定制化3D车辆模型[^3]。 #### 2. **安装与部署** - **基础安装**: - 从官网下载预编译的Carla 0.9.13版本,解压后运行启动脚本[^1]。 - 通过Python的`pip`安装`carla`客户端库:`pip install carla`[^2]。 - **ROS桥接**: ```bash git clone https://github.com/carla-simulator/ros-bridge.git catkin_make ``` 支持与ROS节点通信,实现传感数据流传输。 #### 3. **典型应用场景** - **算法验证**:测试感知(如目标检测)、规划(路径生成)和控制(车辆动力学)算法。 - **极端条件测试**:模拟暴雨、浓雾等恶劣天气对传感性能的影响。 - **多车协同仿真**:通过Traffic Manager模块实现复杂交通流交互。 #### 4. **学习资源** - **官方文档**:涵盖API详解、场景示例和调试工具(http://carla.org/)。 - **进阶教程**: - 【Carla遇见C++】优化高性能算法[^1]。 - 【Carla Robotaxi仿真】构建自动驾驶出租车全流程。 - LabVIEW集成方案:通过视频流传输实现硬件在环测试[^3]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值