触发器与触发条件(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之间的相对距离。
Parameter |
Type |
Mandatory |
Description |
---|---|---|---|
reference |
entity |
yes |
The reference entity |
direction |
yes |
Measure the distance in the x-coordinate/y-coordinate/xy-coordinate |
|
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)
返回主体与参考点的距离。
- 参数:
Parameter |
Type |
Mandatory |
Description |
---|---|---|---|
reference |
pose_3d |
yes |
The reference point |
direction |
yes |
Measure the distance in the x- coordinate/y-coordinate/xy-coordinate |
|
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碰撞的时间(两车的车距/两车相对距离)。
- 参数:
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坐标的时间距离(两车的车距/本车的车速)。
- 参数:
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)