town op• 데이터 종류: table → table
• 호출: import fullseye as fs; fs.ledger.town_run(layout, *, dt: 'float' = 0.05, v_max: 'float' = 8.0, a_max: 'float' = 1.5, b_max: 'float' = 3.0, stop_at: 'Optional[Sequence[str]]' = None, stop_hold: 'Optional[float]' = None, look_hold: 'Optional[float]' = None, stop_margin: 'float' = 0.5, idm_T: 'float' = 1.0, v_stop: 'Optional[float]' = None, t_max: 'Optional[float]' = None, rules: 'Optional[dict]' = None, train=None) -> 'Dict[str, object]'(구현을 직접 호출하려면 import drivetown; drivetown.town_run(layout, *, dt: 'float' = 0.05, v_max: 'float' = 8.0, a_max: 'float' = 1.5, b_max: 'float' = 3.0, stop_at: 'Optional[Sequence[str]]' = None, stop_hold: 'Optional[float]' = None, look_hold: 'Optional[float]' = None, stop_margin: 'float' = 0.5, idm_T: 'float' = 1.0, v_stop: 'Optional[float]' = None, t_max: 'Optional[float]' = None, rules: 'Optional[dict]' = None, train=None) -> 'Dict[str, object]', 원장에서 가져오려면 opsdrive.get("town_run"))
중심선을 따라가는 종방향 전용 전 구간 주행(규칙 기반).
각 스텝에서 아직 멈추지 않은 다음 목표 정지선 을 "멈춰 있는 선행차"로 보고, drivetraffic.idm_accel(v, gap = 停止線 − 前端, dv = v, v0 = v_max, T = idm_T, a = a_max, b = b_max, s0 = stop_margin) 로 가속도를 내어 [−b_max, a_max] 로 자른다(목표가 없으면 gap = ∞ = 자유 주행). v 를 먼저 갱신(0 ≤ v ≤ v_max), s 는 사다리꼴 공식. v ≤ v_stop 이고 앞끝이 정지선의 1.0 m 이내이면 정지.
목표가 정해지는 방식(rules = town_rules, None = JP): 교차로는 항상 목표(신호는 stop_hold 초 뒤 녹색이라는 규칙). 건널목은 rules["crossing_stop"] 이 "always" 이면 항상, "when_active" 이면 train 의 경보 중(entry_forbidden)에만 목표. "when_active" 에서 경보가 시작되었을 때 b_max 로 멈출 수 없으면(gap < v²/(2 b_max)) 진행한다(event "commit"). stop_at 을 넘기면규칙보다 우선한다(kind 의 열. 회귀용). 정지 후: 교차로는 stop_hold(기본값 rules["hold_s"])초 유지(mode "hold"), 건널목은 rules["look_required"] 이면 왼쪽/오른쪽/왼쪽/오른쪽을 각각 look_hold(기본값 rules["look_hold_s"])초 본다(mode "look"). train 이있으면, 유지가 끝나도 경보 중(차단봉 하강~상승 중)이면 기다린다(mode "wait"). train = t_warning 또는 (t_warning[, v_train[, length]]) 또는 dict(시각은 해석 기준의 표준값, TRAIN_DEFAULTS).
dict : t, s, x, y, z, v, yaw, a (각 (n,)), mode (n,) 문자열("cruise" / "brake" / "hold" / "look" / "wait"),
stops = [(s_stop, kind, t_arrive, t_leave), ...], events = [("stop"|"go"|"look"|"wait_gate"|"commit"|"pass"|"end", t, ...)], stop_lines(목표가 될 수 있었던 정지선), targets(정지선마다 "static" / "dynamic"), train(시각의 dict 또는 None), rules, params, total_length.
Raises ValueError: layout 이 town_chain 의 것도 drivejapan.osm_route 의 "route" 도 아님, dt/v_max/a_max/b_max/유지 시간이 부정, stop_at 에 모르는 kind, rules/train 이 부정, 정지선을 넘어 버림(IDM 의 상정 밖), t_max 까지 종점에 닿지 않음.
• 샘플 데이터 카탈로그(DL URL / 라이선스) —— 2-D 는 skimage.data(BSD/public)+ 합성, 3-D 는 실데이터 소스(Stanford/PDS 등)의 DL URL.
• 연산자의 내력·참고문헌 —— 이 연산자 족의 바탕이 된 연구/기법의 출처.
• 알고리즘의 정전(저자·연도)과 용도는 위의 패밀리 사용 가이드에 적혀 있습니다.
• poc_driving_japan_town — py -3.11 examples/poc_driving_japan_town.py
• poc_driving_town — py -3.11 examples/poc_driving_town.py
table 를 입력으로 받는 것)course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same
town)town_chain · town_layout · town_world · town_centerline · town_stop_lines · town_rules · town_crossing_state · town_checks
*Provenance: drivetown.py — DRIVE 연산자 레지스트리. 이 op 노트는 tools/opdocs.py md 가 자동 생성합니다(직접 편집하지 마세요).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.