{% import "partials/fields.html" as f %} {% import "partials/icons.html" as ic %}

Scenario

{{ document.title }}

lower_snake_case. Names the exported package and the Hydra config.

{{ ic.icon('map', 12) }} Route search (logical scenario)

{# A logical scenario names the ego's drive as a pattern of road rather than lanelets; the run finds it on whatever map it is on. Read as a list here, edited as the YAML the document stores (docs/logical_scenarios.md). #} {% if document.route %}
    {% for segment in document.route.segments %}
  1. {{ loop.index0 }} {{ segment.summary() }}
  2. {% endfor %}

Ego spawns {{ document.route.ego_spawn_s }} m along the route; {% if document.route.ego_goal %}its goal is the route's end{% if document.route.ego_goal_margin %} less {{ document.route.ego_goal_margin }} m{% endif %}{% else %}it keeps its own goal{% endif %}. Up to {{ document.route.max_matches }} matches{% if document.route.seed is not none %} (seed {{ document.route.seed }}){% endif %}; an unexpanded run takes match {{ document.route.match_index }}.

{% else %}

None: the ego spawns where its card says.

{% endif %}

Segments in driving order: lane (length, lanes_left, lanes_right, opposite_lane, shape, stop_line, traffic_light_stop_line) and junction (turn, traffic_light, crossing_from_left / right / opposite, crosswalk_entry / exit), plus ego_spawn_s, ego_goal, ego_goal_margin, match_index, max_matches, seed. Empty removes it.

{{ ic.icon('map', 12) }} Map

{# The source and its actions come first: a scenario that names a repository gets its files from there, and the fields below are then overrides rather than the answer. #} {% include "partials/map_source.html" %}

The world CARLA loads. Taken from the map's directory when one is downloaded.

Selected as map={{ document.map.group }} when running.

A map on this machine, read in place: its .osm, map_projector_info.yaml and any .xodr. Takes precedence over the source above.

{% if document.map.source or document.map.directory %} Both are resolved from the map above; set one here only to override it. {% else %} Both are needed for the spawn preview and for a sweep. {% endif %}

{# The readout; its map is below, outside this form. #} {{ f.lanelet_field('map_no_3d_model_lanelet_ids', document.map.no_3d_model_lanelet_ids, draft, many=true) }}

Referenced by spawn constraints as ${map.no_3d_model_lanelet_ids}. Leave empty to inherit the map group's own list at run time.

{# Outside the form, like every other lanelet picker: a set of lanelets is picked by hand rather than searched for -- a search names one lanelet per run -- so this one carries no side panel. #} {{ f.lanelet_modal('map_no_3d_model_lanelet_ids', document.map.no_3d_model_lanelet_ids, draft, 'excluded lanelets', many=true) }}