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 为止未到达终点。
• 示例数据目录(下载 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.