更新时间:2024-10-30 GMT+08:00
分享

触发器与触发条件(Trigger and condition)

用户可以使用wait+触发条件的方式来设置动作的触发条件condition,可以使用的触发条件有:触发条件(elapsed)触发条件(object_distance)触发条件(point_distance)触发条件(time_to_collision)触发条件(time_headway)触发条件(speed)触发条件(acceleration)。如果不满足等待时长或触发条件,后续动作将无法执行。

使用wait来设定触发条件condition时,必须在serial下执行,否则wait无效。

触发条件(elapsed)

使用wait elapsed(time)的方式设定等待时间,不返回值。

  • 使用方法:经过设定的等待时间后,触发动作。

样例

serial:
    # action1
    wait elapsed(10s)
    Ego.activate_controller(true, true)

触发条件(object_distance)

返回语句中涉及的两个实体entity之间的相对距离。

表1 object_distance参数

Parameter

Type

Mandatory

Description

reference

entity

yes

The reference entity

direction

distance_direction

yes

Measure the distance in the x-coordinate/y-coordinate/xy-coordinate

mode

distance_mode

yes

Use reference_points/bounding_boxes to measure the distance between the reference points/bounding boxes

  • 使用方法:当动作主体与参考实体之间的距离>或< 或==某个长度值时,触发动作。

样例

m_direction: distance_direction = euclidianDistance
m_mode: distance_mode = reference_points
do parallel:
    # Story
    serial:
        # action1: 
        wait lead_vehicle.object_distance(reference: Ego, direction: m_direction, mode: m_mode) < 5m
        Ego.activate_controller(true, true)

触发条件(point_distance)

返回主体与参考点的距离。

  • 参数:
表2 point_distance参数

Parameter

Type

Mandatory

Description

reference

pose_3d

yes

The reference point

direction

distance_direction

yes

Measure the distance in the x- coordinate/y-coordinate/xy-coordinate

mode

distance_mode

yes

Use reference_points/bounding_boxes to measure the distance between the reference points/bounding boxes

使用方法:当动作主体与参考点之间的距离>或<或==某个长度值时,触发动作。

样例

my_xyz: xyz_point = map.create_xyz_point(x: 0.0m, y: 10.0m,z: m_z)
my_pose3d: pose_3d with:
    keep(it.xyz_point == my_xyz)
m_direction: distance_direction = euclidianDistance
m_mode: distance_mode = reference_points
do parallel:
    # Story
    serial:
        # action1
        wait Ego.point_distance(my_pose3d, m_direction, m_mode)  >  10.0m
        Ego.activate_controller(true, true)

触发条件(time_to_collision)

假设语句中涉及的两个实体entity都以当前速度移动,返回直到两者边界框bounding_box碰撞的时间(两车的车距/两车相对距离)。

  • 参数:
表3 time_to_collision参数

Parameter

Type

Mandatory

Description

reference

entity

yes

The reference entity

使用方法:当距离两者碰撞的时间>或<或==某个值时,触发动作。

样例

m_profile: dynamics_shape = linear
do parallel:
    # Story
    serial:
        # action1:
        wait cut_in_vehicle.time_to_collision(reference:Ego) < 3s
        Ego.change_speed(target: 0.0mps, rate_profile: m_profile, rate_peak: -0.3mpss)

触发条件(time_headway)

假设语句中涉及的两个实体entity都以当前速度移动,返回两者参考点reference point之间沿s坐标的时间距离(两车的车距/本车的车速)。

  • 参数:
表4 time_headway参数

Parameter

Type

Mandatory

Description

reference

entity

yes

The reference entity

  • 使用方法:当两者的时间距离>或<或==某个值时,触发动作。

样例

m_profile: dynamics_shape = linear
do parallel:
    # Story
    serial:
        # action1:
        wait cut_in_vehicle.time_headway(reference:Ego) < 3s
        Ego.change_speed(target: 0.0mps, rate_profile: m_profile, rate_peak: -0.3mpss)

触发条件(speed)

返回实体的速度。

  • 使用方法:当动作主体的速度>或<或==某个值时,触发动作。

样例

do parallel:
    # Story
    serial:
        # action1
        wait Ego.speed  >  30.0mps
        Ego.activate_controller(true, true)

触发条件(acceleration)

返回实体的加速度。

  • 使用方法:当动作主体的加速度>或<或==某个值时,触发动作。

样例

do parallel:
    # Story
    serial:
        # action1
        wait Ego.acceleration  >  1.0mpss
        Ego.activate_controller(true, true)

相关文档