town_run — DRIVE 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)。

Returns

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 為止未抵達終點。

參考(範例資料、文獻)

• 範例資料目錄(下載 URL / 授權) —— 2-D 用 skimage.data(BSD/公有領域)加合成圖,3-D 給出真實資料源(Stanford/PDS 等)的下載 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 運算子登記表。本條目由 tools/opdocs.py md 自動產生(請勿手動編輯)。*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.