Carla 智能体

Carla 智能体脚本允许车辆沿着随机的、无限的路线行驶,或者采用最短的路线到达给定的目的地。智能体遵守交通信号灯并对道路上的其他障碍物做出反应。提供三种智能体类型。可以修改目标速度、制动距离、尾随行为等参数。可以根据用户的需要修改参与者类或将其用作基类来创建自定义智能体。


智能体脚本概述

Carla 智能体中涉及的主要脚本位于PythonAPI/carla/agents/navigation中。它们分为两类; 计划和控制智能体行为

计划与控制

  • controller.py: 将纵向和横向 PID 控制器组合成一个类,VehiclePIDController,用于从 Carla 客户端对车辆进行低级控制。
  • global_route_planner.py: 从 Carla 服务器获取详细的拓扑结构以构建世界地图的图形表示,为 Local Planner 提供航点和道路选项信息。
  • local_planner.py: 根据来自 VehiclePIDController 的控制输入跟踪航路点。航点可以由 Global Route Planner 提供,也可以动态计算,在路口选择随机路径,类似于 Traffic Manager

智能体行为

  • basic_agent.py: 包含一个智能体基类,它实现了一个 Basic Agent,它在地图上漫游或以尽可能短的距离到达目标目的地,避开其他车辆,响应交通信号灯但忽略停车标志。
  • behavior_agent.py: 包含一个实现更复杂的 Behavior Agent 的类,它可以在尽可能短的距离内到达目标目的地,跟随交通信号灯、标志和速度限制,同时尾随其他车辆。有三种预定义的类型决定了智能体的行为方式。
  • behavior_types.py: 包含影响 Behavior Agent 的行为类型的参数;谨慎、正常和进取。

实现一个智能体

本节将解释如何在您自己的脚本中使用示例 Carla 智能体类。在本节的最后,您将了解如何运行一个示例脚本来显示不同智能体的运行情况。

1. 导入要使用的智能体类:

# 导入基本智能体
from agent.navigation.basic_agent import BasicAgent

# 导入行为智能体
from agent.navigation.behavior_agent import BehaviorAgent

2 . 任何车辆都可以变成智能体。 生成车辆 并将其作为参数传递给智能体类以实例化它:

# 启动一个基本智能体
agent = BasicAgent(vehicle)

# 启动具有攻击性配置文件的行为智能体
agent = BehaviorAgent(vehicle, behavior='aggressive')

behavior types 部分中阅读有关行为类型以及如何配置您自己的更多信息。

3. 您可以设置智能体前往的目的地。如果您不为智能体设置目的地,它将在地图上无休止地漫游。要设置目的地,请为智能体提供 位置

destination = random.choice(spawn_points).location
agent.set_destination(destination)

5. 在导航步骤期间应用车辆控制和行为。在每个步骤中,Basic Agent 将应用车辆控制并通过执行紧急停止来对任何车辆或交通信号灯做出反应。 Behavior Agent 将根据您应用的行为类型对红绿灯做出反应、避开行人、跟随汽车并在十字路口导航:

while True:
    vehicle.apply_control(agent.run_step())

6. 您可以检查智能体是否已完成其轨迹并在发生这种情况时执行操作。一旦您的车辆到达目的地,以下代码段将结束仿真:

while True:
    if agent.done():
        print("The taerget has been reached, stopping the simulation")
        break

    vehicle.apply_control(agent.run_step())

7. 不是在智能体到达其目标目的地时完成仿真,而是可以生成一条新的随机路线供智能体遵循:

while True:
    if agent.done():   
        agent.set_destination(random.choice(spawn_points).location)
        print("The target has been reached, searching for another target")
    vehicle.apply_control(agent.run_step())

Basic Agent 提供了一些方法来操纵智能体行为或遵循的程序路线:

  • set_target_speed(speed): 以公里/小时为单位设置目标速度
  • follow_speed_limits(value=True): 设置智能体遵循速度限制。
  • set_destination(end_location, start_location=None): 智能体将通过可能的最短路线从特定的起始位置到结束位置。如果没有提供起始位置,它将使用当前智能体位置。
  • set_global_plan(plan, stop_waypoint_creation=True, clean_queue=True): 为智能体添加一个具体的计划。计划参数应包含一个[carla.Waypoint, RoadOption]列表,这将是智能体需要采取的路径。 stop_waypoint_creation 将防止在路径运行后自动创建航点。 clean_queue 将重置智能体的当前计划。
  • trace_route(start_waypoint, end_waypoint): 从 Global Route Planner 获取两个航点之间的最短距离,并将路径作为 [carla.Waypoint, RoadOption] 列表返回,供智能体遵循。
  • ignore_traffic_lights(active=True): 设置智能体忽略或服从交通信号灯。
  • ignore_stop_signs(active=True): 设置智能体忽略或服从停车标志。
  • ignore_vehicles(active=True): 设置智能体忽略或对其他车辆作出反应。

PythonAPI/examples 中找到的 automatic_control.py 脚本是基本和行为智能体的一个示例。要尝试该脚本,请导航到示例目录并运行以下命令:

# 使用基本智能体运行
python3 automatic_control.py --agent=Basic

# 使用行为智能体运行
python3 automatic_control.py --agent=Behavior --behavior=aggressive

行为类型

行为智能体的行为类型在 behavior_types.py 中定义。三个预配置的配置文件是 'cautious''normal''aggressive'。您可以使用设置的配置文件、修改它们或创建您自己的配置文件。可以调整以下变量:

  • max_speed:您的车辆能够达到的最高速度(以公里/小时为单位)。
  • speed_lim_dist:以 km/h 为单位的值,用于定义车辆的目标速度与当前限速的距离(例如,如果限速为 30km/h 且 speed_lim_dist 为 10km/h,则目标速度将是20公里/小时)
  • speed_decrease:当接近前方较慢的车辆时,您的车辆将以多快的公里/小时减速。
  • safety_time:碰撞时间;如果您的车辆突然刹车,它与前面的车辆相撞所需的时间的近似值。
  • min_proximity_threshold:在您的车辆执行避让或尾随等操作之前,与另一辆车或行人的最小距离(以米为单位)。
  • braking_distance:您的车辆将执行紧急停车时与行人或车辆的距离。
  • tailgate_counter:用于避免在最后一个后挡板后过快尾随的计数器。

创建自己的行为类型

要创建自己的行为类型:

1.behavior_types.py 中为您的行为类型创建类:

class ProfileName(object):
    # 完整的值定义

2.behavior_agent.py 脚本中定义和实例化你的行为类型:

# 智能体行为参数
if behavior == 'cautious':
    self._behavior = Cautious()

elif behavior == 'normal':
    self._behavior = Normal()

elif behavior == 'aggressive':
    self._behavior = Aggressive()

elif behavior == '<type_name>':
    self._behavior = <TypeName>()

创建智能体

Carla 智能体只是用户可以运行的智能体类型的示例。用户可以在 Basic Agent 的基础上创建自己的智能体。可能性是无止境。每个智能体只需要两个元素,初始化运行步

在下面查找自定义智能体的最小布局示例:

import carla

from agents.navigation.basic_agent import BasicAgent

class CustomAgent(BasicAgent):
    def __init__(self, vehicle, target_speed=20, debug=False):
        """
        :param vehicle: 应用到本地规划器逻辑的actor
        :param target_speed: 车辆移动的速度(Km/h)
        """
        super().__init__(target_speed, 调试)

    def run_step(self, debug=False):
        """
        执行一步导航
        :return: carla.VehicleControl
        """
        # 在每个仿真步骤中采取的行动
        control = carla.VehicleControl()
        return control

查看 basic_agent.pybehavior_agent.py 脚本以探索它们的结构和功能,以获取有关如何创建自己的更多想法。


您可以探索提供的智能体脚本、扩展它们或将它们用作创建自己的基准。如果您对智能体有任何疑问,请随时在 论坛 发帖。