12-carla代理者

    CARLA代理脚本允许车辆遵循随机的、无限的路线或采取最短的路线到给定的目的地。代理者遵守交通信号灯,并对道路上的其他障碍物作出反应。有三种代理类型可用。有目标速度,制动距离,尾随行为和更多参数可以设置。可以修改Actor类或将其用作基类,以根据用户的需要创建自定义代理者。

1 代理脚本概述

    在PythonAPI/ CARLA / Agents /navigation中可以找到carla代理者中涉及的主要脚本。它们分为两类:规划控制和代理行为。

1.1 规划和控制

controller.py:将纵向和横向PID控制器组合成一个类,VehiclePIDController,用于从CARLA的客户端对车辆进行低级控制。

global_route_planner.py:从CARLA服务器获取详细的拓扑结构,以构建世界地图的图形表示,为Local Planner提供路点和道路选项信息。

local_planner.py:根据来自VehiclePIDController的控制输入跟踪路点。路点既可以由全局路径规划器提供,也可以动态计算,在路口选择随机路径,类似于交通流管理器(Traffic Manager)。

1.2 代理行为

    basic_agent.py:包含一个代理基类,它实现了一个基本代理,该代理可以在地图上漫游或以尽可能短的距离到达目标目的地,避开其他车辆,响应交通灯但忽略停车标志。

    behavior_agent.py:包含一个类,它实现了一个更复杂的行为代理,可以在尽可能短的距离内到达目标目的地,在跟随其他车辆的同时遵循交通灯、标志和速度限制。有三种预定义的类型限定代理的行为方式。

    behavior_types.py:包含约束行为代理的行为类型的参数;谨慎,正常,激进。

2 实现代理

    本节将解释如何在自己的脚本中使用示例CARLA Agent类。
    1. 导入要使用的代理类:

# To import a basic agent
from agents.navigation.basic_agent import BasicAgent

# To import a behavior agent
from agents.navigation.behavior_agent import BehaviorAgent

    2. 任何车辆都可以变成代理者。生成一个车辆,并将其作为参数传递给代理类来实例化它:

# To start a basic agent
agent = BasicAgent(vehicle)

# To start a behavior agent with an aggressive profile
agent = BehaviorAgent(vehicle, behavior='aggressive')

    有关行为类型以及如何配置自己的行为类型的更多信息,请参阅行为类型部分(behavior types)。

    3. 您可以设置目的地。如果您不为代理设置目的地,它将在地图上不停的行驶。要设置目的地,向代理提供一个位置:

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

    4. 在导航步骤中应用车辆控件和行为。在每个步骤中,基本代理将应用车辆控制,并通过执行紧急停车来对任何车辆或交通灯做出反应。行为代理将根据您应用的行为类型对交通灯做出反应,避开行人,跟随汽车并导航:

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

    5. 您可以检查代理是否完成了它的轨迹,并在发生时执行一个操作。以下代码片段将在车辆到达目的地后结束仿真:

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

    vehicle.apply_control(agent.run_step())

    6. 不是在代理者到达目标目的地时完成仿真,而是生成一条新的、随机的路由供代理者遵循:

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):设置目标速度,单位为km/h。

    follow_speed_limits(value=True):设置跟随前车时的速度限制。

    set_destination(end_location, start_location=None):代理将通过最短的路径从特定的开始位置移动到结束位置。如果没有提供起始位置,它将使用当前代理位置。

    set_global_plan(plan, stop_waypoint_creation=True, clean_queue=True):添加代理要遵循的特定路线规划。Stop_waypoint_creation将防止路径点在路径运行后被自动创建。Clean_queue将重置代理的当前路径规划。

    trace_route(start_waypoint, end_waypoint):从全局路径规划器中获取两个路点之间的最短距离,并以[carla.Waypoint, RoadOption]供代理遵循。

    ignore_traffic_lights(active=True):设置代理忽略或遵守红绿灯。

    ignore_stop_signs(active=True):设置代理忽略或遵守停止标志。

    ignore_vehicles(active=True):设置代理忽略或响应其他车辆。

    在PythonAPI/examples目录下的automatic_control.py脚本是基本代理和行为代理的一个示例。要尝试使用该脚本,请进入到example目录并运行以下命令:

# To run with a basic agent
python3 automatic_control.py --agent=Basic

# To run with a behavior agent
python3 automatic_control.py --agent=Behavior --behavior=aggressive

3 行为类型

    行为代理的行为类型在behavior_type .py中定义。三个预配置的配置文件是“谨慎”、“正常”和“激进”。您可以使用设置的配置文件,修改它们或创建自己的配置文件。以下变量可以调整: 
    max_speed:您的车辆能够达到的最大速度(km/h)。

    speed_lim_dist:以km/h为单位的值,用于定义车辆的目标速度与当前速度限制的距离(例如,如果速度限制为30km/h, speed_lim_dist为10km/h,则目标速度将为20km/h)。

    speed_reduction:在接近前方较慢的车辆时,车辆减速的速度(km/h)。

    safety_time: Time-to-collision;如果自车突然刹车,与前面的车相撞所需时间的近似值。

    min_proximity_threshold:自车执行躲避或跟随等机动之前,与另一辆车辆或行人的最小距离(以米为单位)。

    制动距离:与行人或车辆的距离,自车将执行紧急停车。

    tailgate_counter:计数器。

4 创建自己的行为类型

    为了创建自己的行为类型:
    1. 在behavior_types.py中为你的行为类型创建类:

class ProfileName(object):
    # complete value definitions

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

# Parameters for agent behavior
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>()

5 创建代理

    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 to apply to local planner logic onto
        :param target_speed: speed (in Km/h) at which the vehicle will move
        """
        super().__init__(target_speed, debug)

    def run_step(self, debug=False):
        """
        Execute one step of navigation.
        :return: carla.VehicleControl
        """
        # Actions to take during each simulation step
        control = carla.VehicleControl()
        return control

    查看basic_agent.py和behavior_agent.py脚本,了解它们的结构和功能,从而可以改写出自己的脚本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值