{"id":2629,"date":"2026-09-08T09:41:57","date_gmt":"2026-09-08T01:41:57","guid":{"rendered":"http:\/\/110.42.248.92\/onsite-learning-center\/?page_id=2629"},"modified":"2026-09-08T09:41:57","modified_gmt":"2026-09-08T01:41:57","slug":"%e9%a1%b9%e7%9b%ae%e5%bc%8f%e5%ad%a6%e4%b9%a0","status":"publish","type":"page","link":"http:\/\/110.42.248.92\/onsite-learning-center\/%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b\/%e9%a1%b9%e7%9b%ae%e5%bc%8f%e5%ad%a6%e4%b9%a0\/","title":{"rendered":"\u9879\u76ee\u5f0f\u5b66\u4e60"},"content":{"rendered":"<style>#onsite-project{--ink:#182d48;--muted:#61738a;--blue:#275dcc;--teal:#147d70;--line:#dce5ef;--paper:#f4f7fb;font:16px\/1.65 -apple-system,BlinkMacSystemFont,\"Segoe UI\",\"PingFang SC\",\"Microsoft YaHei\",sans-serif;color:var(--ink);max-width:1320px;margin:0 auto;padding:28px 28px 56px;text-align:left;background:#fff}#onsite-project *{box-sizing:border-box}#onsite-project h1,#onsite-project h2,#onsite-project h3,#onsite-project p{font-family:inherit;color:inherit;margin:0}#onsite-project h1{font-size:38px;font-weight:750;letter-spacing:-1.3px;line-height:1.3}#onsite-project h2{font-size:26px;font-weight:700;line-height:1.4}#onsite-project h3{font-size:19px;font-weight:700}#onsite-project a{color:var(--blue);text-decoration:none}#onsite-project button,#onsite-project select,#onsite-project textarea{font:inherit}#onsite-project button{cursor:pointer;transition:background .15s,transform .15s}#onsite-project button:disabled{cursor:default;opacity:.5}#onsite-project button:focus-visible,#onsite-project a:focus-visible,#onsite-project select:focus-visible,#onsite-project input:focus-visible,#onsite-project textarea:focus-visible{outline:3px solid #54a8ff;outline-offset:3px}#onsite-project .op-breadcrumb{font-size:14px;color:var(--muted);display:flex;gap:12px;margin-bottom:20px;align-items:center}#onsite-project .op-eyebrow{font-size:12px;letter-spacing:2px;color:var(--teal);font-weight:750}#onsite-project .op-intro{display:flex;align-items:center;justify-content:space-between;gap:22px;margin:10px 0 22px}#onsite-project .op-intro p{color:var(--muted);margin-top:10px;max-width:760px}#onsite-project .op-project-mark{width:74px;height:74px;border:1px solid var(--line);border-radius:18px;display:grid;place-items:center;font-size:32px;font-weight:250;flex-shrink:0;background:var(--paper);color:#4775b3}#onsite-project .op-subnav{display:flex;gap:28px;border-bottom:1px solid var(--line);padding-bottom:14px;margin-bottom:24px;align-items:center}#onsite-project .op-subnav a{font-size:15px;color:var(--muted)}#onsite-project .op-subnav a:first-child{color:var(--blue);font-weight:700}#onsite-project .op-progress{margin-left:auto;font-size:14px;color:var(--teal);display:flex;align-items:center;gap:9px}#onsite-project .op-progress progress{width:70px;height:5px;accent-color:var(--teal)}#onsite-project .op-workbench{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:20px;scroll-margin-top:120px}#onsite-project .op-scene{border-radius:16px;overflow:hidden;background:#14273e;color:#fff;position:relative;border:1px solid #243b54}#onsite-project .op-scene-top{display:flex;justify-content:space-between;align-items:center;padding:15px 20px;border-bottom:1px solid #2b4057;font-size:14px;color:#c3d3e4}#onsite-project .op-live{display:flex;gap:8px;align-items:center;font-weight:600;color:#e4f3f1}#onsite-project .op-live:before{content:\"\";width:7px;height:7px;background:#56d9b7;border-radius:50%}#onsite-project .op-scene svg{width:100%;height:auto;display:block;max-height:440px;min-height:250px}#onsite-project .op-scene svg text{font-family:inherit}#onsite-project .op-scene-bottom{display:flex;justify-content:space-between;gap:10px;padding:13px 20px;background:#172e47;font-size:13px;align-items:center}#onsite-project .op-legend{display:flex;gap:14px;flex-wrap:wrap;color:#bfd0df}#onsite-project .op-dot{display:inline-block;width:8px;height:8px;background:#45d4b0;border-radius:2px;margin-right:5px}#onsite-project .op-dot.purple{background:#b2a5fc}#onsite-project .op-dot.orange{background:#f0b36a}#onsite-project .op-controls{border:1px solid var(--line);border-radius:16px;padding:20px;display:flex;flex-direction:column;background:#fff;gap:15px}#onsite-project .op-control-title{display:flex;justify-content:space-between;align-items:center}#onsite-project .op-control-title span{font-size:12px;color:var(--muted);background:var(--paper);padding:3px 8px;border-radius:5px}#onsite-project .op-controls label{font-size:14px;font-weight:600;display:block;margin-bottom:6px}#onsite-project .op-controls select{width:100%;height:40px;padding:0 10px;border:1px solid var(--line);border-radius:7px;color:var(--ink);background:#f8fafc}#onsite-project .op-split{display:grid;grid-template-columns:1fr 1fr;gap:10px}#onsite-project .op-range-label{display:flex;justify-content:space-between;align-items:center}#onsite-project .op-range-label output{font-size:14px;color:var(--blue);font-variant-numeric:tabular-nums}#onsite-project input[type=range]{width:100%;accent-color:var(--blue);height:16px;cursor:pointer;margin:0}#onsite-project .op-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--line);border-radius:8px;min-height:42px;padding:9px 15px;color:var(--ink);background:#fff;font-size:14px;font-weight:600;text-decoration:none}#onsite-project .op-btn:hover{background:#edf3fa}#onsite-project .op-btn.primary{background:var(--blue);border-color:var(--blue);color:white}#onsite-project .op-btn.primary:hover{background:#184eaf}#onsite-project .op-actions{display:flex;gap:8px;margin-top:auto}#onsite-project .op-actions .primary{flex:1}#onsite-project .op-small{font-size:13px;color:var(--muted)}#onsite-project .op-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden;margin-top:16px}#onsite-project .op-metric{padding:14px 20px;background:#f8fafc}#onsite-project .op-metric span{display:block;font-size:13px;color:var(--muted)}#onsite-project .op-metric strong{font-size:23px;font-weight:650;font-variant-numeric:tabular-nums}#onsite-project .op-metric small{font-size:12px;font-weight:400;color:var(--muted);margin-left:5px}#onsite-project .op-notice{font-size:13px;color:var(--muted);margin:12px 0 0;line-height:1.6}#onsite-project .op-section-head{display:flex;justify-content:space-between;gap:20px;align-items:end;margin:38px 0 19px;scroll-margin-top:120px}#onsite-project .op-section-head p{font-size:14px;color:var(--muted);margin-top:5px}#onsite-project .op-stage-tabs{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:18px}#onsite-project .op-stage{border:1px solid var(--line);background:#fff;border-radius:10px;padding:14px 14px 12px;text-align:left;color:var(--ink);position:relative}#onsite-project .op-stage[aria-selected=true]{border-color:var(--blue);background:#edf3ff;box-shadow:inset 0 3px var(--blue)}#onsite-project .op-stage span{display:block;font-size:12px;color:var(--muted);margin-top:2px}#onsite-project .op-stage b{font-size:16px}#onsite-project .op-stage em{font-size:12px;float:right;color:var(--teal);font-style:normal}#onsite-project .op-stage-panel{border:1px solid var(--line);border-radius:14px;padding:26px;display:grid;grid-template-columns:1fr 1fr;gap:34px;background:#fff}#onsite-project .op-step-heading{display:flex;gap:13px;align-items:center;margin-bottom:15px}#onsite-project .op-step-number{font-size:34px;color:#aec1df;line-height:1}#onsite-project .op-stage-panel p{font-size:15px;color:var(--muted)}#onsite-project .op-io{display:flex;gap:10px;margin:18px 0;padding:14px;background:var(--paper);border-radius:8px;align-items:center;font-size:14px}#onsite-project .op-io div{flex:1}#onsite-project .op-io small{display:block;color:var(--muted);font-size:12px;margin-bottom:3px}#onsite-project .op-task{border-left:3px solid #24a28b;padding-left:13px;font-size:14px;margin-bottom:16px}#onsite-project .op-task strong{display:block;margin-bottom:4px}#onsite-project .op-resource-links{display:flex;gap:8px;flex-wrap:wrap}#onsite-project .op-quiz-label{font-size:12px;color:var(--teal);letter-spacing:1px;font-weight:700;margin-bottom:8px}#onsite-project .op-quiz-options{display:grid;gap:8px;margin:12px 0}#onsite-project .op-answer{padding:10px 12px;font-size:14px;display:block;border:1px solid var(--line);border-radius:7px;cursor:pointer;line-height:1.5}#onsite-project .op-answer:has(input:checked){border-color:var(--blue);background:#f1f6ff}#onsite-project .op-answer input{margin-right:8px;accent-color:var(--blue)}#onsite-project .op-feedback{font-size:14px;margin-top:10px;min-height:22px;color:var(--teal)}#onsite-project .op-feedback.error{color:#a34a21}#onsite-project .op-result{margin-top:15px;padding:16px 20px;border-radius:10px;border:1px solid #b7dfd5;background:#eff9f5;color:#226453;display:none}#onsite-project .op-result.show{display:block}#onsite-project .op-result.error{background:#fff6f1;border-color:#f0c7ad;color:#984820}#onsite-project .op-result p{margin-top:3px;font-size:14px}#onsite-project .op-records{display:grid;grid-template-columns:1.1fr 1fr;gap:20px}#onsite-project .op-card{border:1px solid var(--line);border-radius:12px;padding:22px}#onsite-project textarea{width:100%;min-height:112px;resize:vertical;padding:12px;border:1px solid var(--line);border-radius:8px;margin:13px 0 10px;color:var(--ink);background:#fbfcfe;font-size:14px;line-height:1.6}#onsite-project .op-log{margin:12px 0 0;padding:0;list-style:none;font-size:14px;max-height:190px;overflow:auto}#onsite-project .op-log li{display:flex;justify-content:space-between;gap:15px;border-top:1px solid #edf0f4;padding:9px 0}#onsite-project .op-log time{font-variant-numeric:tabular-nums;color:var(--muted)}#onsite-project .op-resources{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}#onsite-project .op-resource-card{border:1px solid var(--line);border-radius:11px;padding:20px;display:flex;flex-direction:column;gap:8px;color:var(--ink)}#onsite-project .op-resource-card:hover{border-color:#9bb6d7;background:#f8fbff}#onsite-project .op-resource-card small{font-size:12px;letter-spacing:1px;color:var(--teal)}#onsite-project .op-resource-card strong{font-size:17px;color:var(--ink)}#onsite-project .op-resource-card p{font-size:14px;color:var(--muted)}#onsite-project .op-resource-card span{font-size:14px;margin-top:auto;padding-top:7px}#onsite-project details{border-top:1px solid var(--line);margin-top:26px;padding-top:15px;font-size:14px;color:var(--muted)}#onsite-project summary{cursor:pointer;font-weight:600;color:var(--ink)}#onsite-project details p{margin-top:10px;font-size:14px}#onsite-project .op-storage{font-size:12px;color:var(--muted)}#onsite-project .op-history{margin-top:16px;overflow:auto}#onsite-project .op-history table{border-collapse:collapse;width:100%;font-size:13px}#onsite-project .op-history th,#onsite-project .op-history td{padding:9px;text-align:left;border-bottom:1px solid var(--line);white-space:nowrap}#onsite-project .op-history th{color:var(--muted);font-weight:500}#onsite-project .op-layer-buttons{display:flex;gap:5px;flex-wrap:wrap}#onsite-project .op-layer-buttons button{background:transparent;border:1px solid #4a6075;border-radius:5px;color:#baccdd;padding:4px 8px;font-size:12px}#onsite-project .op-layer-buttons button[aria-pressed=true]{background:#304963;color:#fff;border-color:#829db5}#onsite-project .op-export-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}#onsite-project noscript{display:block;padding:20px;background:#fff5d8}#onsite-project .op-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#203953;color:white;border-radius:9px;padding:11px 20px;font-size:14px;z-index:10000;box-shadow:0 5px 30px #0002}#onsite-project [hidden]{display:none!important}@media(max-width:1000px){#onsite-project .op-workbench{grid-template-columns:minmax(0,1fr) 280px}#onsite-project{padding:24px 18px 40px}#onsite-project .op-scene-bottom{flex-direction:column;align-items:flex-start}#onsite-project .op-metric{padding:12px}#onsite-project .op-stage-panel{gap:22px;padding:20px}}@media(max-width:760px){#onsite-project h1{font-size:28px;letter-spacing:-.6px}#onsite-project .op-project-mark{display:none}#onsite-project .op-workbench{grid-template-columns:1fr}#onsite-project .op-controls{display:grid;grid-template-columns:1fr 1fr;gap:15px}#onsite-project .op-control-title,#onsite-project .op-actions{grid-column:1\/-1}#onsite-project .op-stage-tabs{gap:5px}#onsite-project .op-stage{padding:12px 7px}#onsite-project .op-stage span{font-size:10px;letter-spacing:-.3px}#onsite-project .op-stage b{font-size:14px}#onsite-project .op-stage-panel,#onsite-project .op-records{grid-template-columns:1fr}#onsite-project .op-resources{grid-template-columns:1fr}#onsite-project .op-subnav{gap:18px;flex-wrap:wrap}#onsite-project .op-progress{width:100%;margin-left:0}#onsite-project .op-metrics{grid-template-columns:repeat(2,1fr)}#onsite-project .op-section-head{align-items:start}#onsite-project .op-section-head .op-small{display:none}#onsite-project .op-scene-top{padding:12px}#onsite-project .op-scene-bottom{padding:12px}#onsite-project .op-controls .op-split{grid-template-columns:1fr}#onsite-project .op-controls>div:nth-child(2){grid-column:1\/-1}#onsite-project .op-controls>div:nth-child(3){grid-column:1\/-1;grid-template-columns:1fr 1fr}}@media(prefers-reduced-motion:reduce){#onsite-project *{scroll-behavior:auto!important;transition:none!important}}\n<\/style>\n<div id=\"onsite-project\" class=\"notranslate\" translate=\"no\">\n  <nav class=\"op-breadcrumb\" aria-label=\"\u9762\u5305\u5c51\"><a href=\"\/onsite-learning-center\/\">\u5b66\u4e60\u4e2d\u5fc3<\/a><span>\/<\/span><a href=\"\/onsite-learning-center\/\u5feb\u901f\u5f00\u59cb\/\">\u5feb\u901f\u5f00\u59cb<\/a><span>\/<\/span><span>\u9879\u76ee\u5f0f\u5b66\u4e60<\/span><\/nav>\n  <div class=\"op-eyebrow\">ONSITE LAB \u00b7 PROJECT 01<\/div>\n  <header class=\"op-intro\"><div><h1>\u8ba9\u81ea\u52a8\u9a7e\u9a76\uff0c\u8d70\u8fc7\u4e00\u4e2a\u4ea4\u53c9\u53e3\u3002<\/h1><p>\u4ece\u770b\u89c1\u4ea4\u901a\u53c2\u4e0e\u8005\uff0c\u5230\u5b89\u5168\u5b8c\u6210\u901a\u884c\u3002\u7528\u4e00\u4e2a\u53ef\u4ea4\u4e92\u7684\u5b9e\u9a8c\uff0c\u4e32\u8054\u611f\u77e5\u3001\u9884\u6d4b\u3001\u51b3\u7b56\u3001\u89c4\u5212\u4e0e\u63a7\u5236\u3002<\/p><\/div><div class=\"op-project-mark\" aria-hidden=\"true\">\u2197<\/div><\/header>\n  <nav class=\"op-subnav\" aria-label=\"\u9879\u76ee\u5bfc\u822a\"><a href=\"#op-experiment\">\u4ea4\u4e92\u5b9e\u9a8c<\/a><a href=\"#op-learning\">\u4e94\u6b65\u5b66\u4e60<\/a><a href=\"#op-resources\">\u8d44\u6e90\u4e0e\u6210\u679c<\/a><div class=\"op-progress\"><progress id=\"op-progress\" max=\"5\" value=\"0\" aria-label=\"\u5b66\u4e60\u8fdb\u5ea6\"><\/progress><span id=\"op-progress-label\">\u5df2\u5b8c\u6210 0 \/ 5 \u9636\u6bb5<\/span><\/div><\/nav>\n  <section class=\"op-workbench\" id=\"op-experiment\" aria-label=\"\u4ea4\u53c9\u53e3\u4ea4\u4e92\u5b9e\u9a8c\">\n    <div>\n      <div class=\"op-scene\"><div class=\"op-scene-top\"><span class=\"op-live\">\u4ea4\u53c9\u53e3\u5b9e\u9a8c\u573a<\/span><span id=\"op-clock\">T + 00.0 s<\/span><\/div>\n      <svg id=\"op-map\" viewBox=\"0 0 800 530\" role=\"img\" aria-labelledby=\"op-map-title op-map-desc\"><title id=\"op-map-title\">\u81ea\u52a8\u9a7e\u9a76\u4ea4\u53c9\u53e3\u4fef\u89c6\u4eff\u771f<\/title><desc id=\"op-map-desc\">\u7eff\u8272\u81ea\u8f66\u7531\u5357\u5411\u5317\u9a76\u5165\u4ea4\u53c9\u53e3\uff0c\u6a59\u8272\u8f66\u8f86\u4ece\u897f\u4fa7\u9a76\u6765\u3002\u53ef\u663e\u793a\u611f\u77e5\u6846\u3001\u9884\u6d4b\u8f68\u8ff9\u4e0e\u89c4\u5212\u8def\u5f84\u3002<\/desc>\n        <defs><pattern id=\"op-grid\" width=\"25\" height=\"25\" patternUnits=\"userSpaceOnUse\"><path d=\"M25 0H0V25\" fill=\"none\" stroke=\"#233b50\" stroke-width=\".6\"\/><\/pattern><pattern id=\"op-zebra\" width=\"13\" height=\"35\" patternUnits=\"userSpaceOnUse\"><rect width=\"6\" height=\"35\" fill=\"#8193a3\" opacity=\".7\"\/><\/pattern><marker id=\"op-arrow\" markerWidth=\"5\" markerHeight=\"5\" refX=\"3\" refY=\"2.5\" orient=\"auto\"><path d=\"M0 0L5 2.5L0 5\" fill=\"none\" stroke=\"#9b91ed\" stroke-width=\"1\"\/><\/marker><filter id=\"op-glow\"><feGaussianBlur stdDeviation=\"3\"\/><\/filter><\/defs>\n        <rect width=\"800\" height=\"530\" fill=\"#152a40\"\/><rect width=\"800\" height=\"530\" fill=\"url(#op-grid)\"\/>\n        <g fill=\"#20384d\" stroke=\"#395064\"><rect x=\"40\" y=\"40\" width=\"265\" height=\"137\" rx=\"16\"\/><rect x=\"505\" y=\"40\" width=\"255\" height=\"137\" rx=\"16\"\/><rect x=\"40\" y=\"390\" width=\"265\" height=\"106\" rx=\"16\"\/><rect x=\"505\" y=\"390\" width=\"255\" height=\"106\" rx=\"16\"\/><\/g>\n        <g fill=\"#294958\"><rect x=\"60\" y=\"61\" width=\"80\" height=\"94\" rx=\"6\"\/><rect x=\"154\" y=\"61\" width=\"130\" height=\"94\" rx=\"6\"\/><rect x=\"530\" y=\"60\" width=\"207\" height=\"95\" rx=\"6\"\/><rect x=\"64\" y=\"410\" width=\"220\" height=\"66\" rx=\"6\"\/><rect x=\"530\" y=\"410\" width=\"206\" height=\"66\" rx=\"6\"\/><\/g>\n        <g fill=\"#214d4d\"><circle cx=\"324\" cy=\"150\" r=\"14\"\/><circle cx=\"322\" cy=\"416\" r=\"14\"\/><circle cx=\"489\" cy=\"147\" r=\"14\"\/><circle cx=\"489\" cy=\"416\" r=\"14\"\/><\/g>\n        <path d=\"M340 0H460V220H800V340H460V530H340V340H0V220H340Z\" fill=\"#304356\" stroke=\"#738799\" stroke-width=\"2\"\/>\n        <g fill=\"none\" stroke=\"#8295a5\" stroke-width=\"2\" stroke-dasharray=\"16 14\"><path d=\"M400 0V208M400 365V530M0 280H320M483 280H800\"\/><\/g>\n        <g fill=\"none\" stroke=\"#b9a862\" stroke-width=\"1.5\"><path d=\"M395 0V194M405 0V194M395 396V530M405 396V530M0 275H310M0 285H310M490 275H800M490 285H800\"\/><\/g>\n        <rect x=\"344\" y=\"353\" width=\"112\" height=\"22\" fill=\"url(#op-zebra)\"\/><rect x=\"344\" y=\"184\" width=\"112\" height=\"22\" fill=\"url(#op-zebra)\"\/>\n        <path d=\"M412 390H458M342 174H388\" stroke=\"#c4d4de\" stroke-width=\"4\"\/>\n        <g fill=\"none\" stroke=\"#bccbd4\" stroke-width=\"3\" opacity=\".7\"><path d=\"M431 452V423M423 433L431 423L439 433M368 99V129M360 120L368 129L376 120M96 310H125M117 302L125 310L117 318M688 250H661M670 242L660 250L670 258\"\/><\/g>\n        <rect x=\"344\" y=\"225\" width=\"112\" height=\"112\" rx=\"12\" fill=\"#e9c773\" opacity=\".035\" stroke=\"#bba663\" stroke-dasharray=\"5 7\"\/>\n        <g font-size=\"12\" fill=\"#8ca6bd\"><text x=\"58\" y=\"31\">WEST \/ \u897f<\/text><text x=\"685\" y=\"31\">NORTH \u2191<\/text><text x=\"60\" y=\"520\">6 px = 1 m \u00b7 \u6559\u5b66\u573a\u666f<\/text><text x=\"565\" y=\"520\">\u65e0\u4fe1\u53f7\u4ea4\u53c9\u53e3 \u00b7 \u81ea\u8f66\u8ba9\u884c<\/text><\/g>\n        <g id=\"op-occluder\" style=\"display:none\"><rect x=\"282\" y=\"343\" width=\"43\" height=\"36\" rx=\"4\" fill=\"#667281\"\/><text x=\"270\" y=\"393\" font-size=\"12\" fill=\"#becbda\">\u89c6\u7ebf\u906e\u6321<\/text><\/g>\n        <g id=\"op-route-layer\"><path id=\"op-route\" fill=\"none\" stroke=\"#41d8b3\" stroke-width=\"20\" opacity=\".08\"\/><path id=\"op-route-line\" fill=\"none\" stroke=\"#41d8b3\" stroke-width=\"2\" stroke-dasharray=\"7 6\" opacity=\".75\"\/><\/g>\n        <g id=\"op-predictions\"><\/g><g id=\"op-actors\"><\/g><g id=\"op-detections\"><\/g>\n        <g id=\"op-ego\"><circle r=\"30\" fill=\"#3fe0b6\" opacity=\".08\"\/><rect x=\"-14\" y=\"-7\" width=\"28\" height=\"14\" rx=\"4\" fill=\"#42d8b1\" stroke=\"#a2ffe4\" stroke-width=\"1.3\"\/><rect x=\"-5\" y=\"-5\" width=\"9\" height=\"10\" rx=\"2\" fill=\"#195869\"\/><path d=\"M8 -4V4\" stroke=\"#d7fff3\" stroke-width=\"2\"\/><\/g>\n        <g id=\"op-ego-label\"><rect x=\"-24\" y=\"-38\" width=\"48\" height=\"18\" rx=\"4\" fill=\"#174f4b\"\/><text text-anchor=\"middle\" y=\"-25\" fill=\"#80f0ce\" font-size=\"11\">EGO \u81ea\u8f66<\/text><\/g>\n      <\/svg><div class=\"op-scene-bottom\"><div class=\"op-legend\"><span><i class=\"op-dot\"><\/i>\u81ea\u8f66 \/ \u89c4\u5212<\/span><span><i class=\"op-dot orange\"><\/i>\u4ea4\u901a\u53c2\u4e0e\u8005<\/span><span><i class=\"op-dot purple\"><\/i>\u9884\u6d4b<\/span><\/div><div class=\"op-layer-buttons\" aria-label=\"\u663e\u793a\u56fe\u5c42\"><button type=\"button\" data-layer=\"detect\" aria-pressed=\"true\">\u611f\u77e5\u6846<\/button><button type=\"button\" data-layer=\"predict\" aria-pressed=\"true\">\u9884\u6d4b\u7ebf<\/button><button type=\"button\" data-layer=\"route\" aria-pressed=\"true\">\u89c4\u5212\u7ebf<\/button><\/div><\/div><\/div>\n    <\/div>\n    <aside class=\"op-controls\" aria-label=\"\u5b9e\u9a8c\u53c2\u6570\"><div class=\"op-control-title\"><h3>\u914d\u7f6e\u4f60\u7684\u5b9e\u9a8c<\/h3><span>\u5b9e\u65f6\u4eff\u771f<\/span><\/div>\n      <div><label for=\"op-scenario\">\u4ea4\u901a\u573a\u666f<\/label><select id=\"op-scenario\"><option value=\"crossing\">01 \u00b7 \u6a2a\u5411\u6765\u8f66<\/option><option value=\"pedestrian\">02 \u00b7 \u8f66\u8f86\u4e0e\u884c\u4eba\u6df7\u884c<\/option><option value=\"occluded\">03 \u00b7 \u906e\u6321\u4e0e\u4f4e\u7f6e\u4fe1\u5ea6\u76ee\u6807<\/option><\/select><\/div>\n      <div class=\"op-split\"><div><label for=\"op-turn\">\u901a\u884c\u76ee\u6807<\/label><select id=\"op-turn\"><option value=\"straight\">\u76f4\u884c\u901a\u8fc7<\/option><option value=\"left\">\u5de6\u8f6c\u901a\u8fc7<\/option><\/select><\/div><div><label for=\"op-policy\">\u8ba9\u884c\u7b56\u7565<\/label><select id=\"op-policy\"><option value=\"cautious\">\u4fdd\u5b88\u8ba9\u884c<\/option><option value=\"efficient\">\u7d27\u51d1\u95f4\u9699<\/option><\/select><\/div><\/div>\n      <div><div class=\"op-range-label\"><label for=\"op-speed\">\u76ee\u6807\u901f\u5ea6<\/label><output id=\"op-speed-out\">7 m\/s<\/output><\/div><input id=\"op-speed\" type=\"range\" min=\"3\" max=\"10\" step=\"1\" value=\"7\"><\/div>\n      <div><div class=\"op-range-label\"><label for=\"op-horizon\">\u9884\u6d4b\u65f6\u57df<\/label><output id=\"op-horizon-out\">4 s<\/output><\/div><input id=\"op-horizon\" type=\"range\" min=\"1\" max=\"6\" step=\"1\" value=\"4\"><\/div>\n      <div><div class=\"op-range-label\"><label for=\"op-confidence\">\u68c0\u6d4b\u7f6e\u4fe1\u5ea6\u9608\u503c<\/label><output id=\"op-confidence-out\">0.35<\/output><\/div><input id=\"op-confidence\" type=\"range\" min=\"0.25\" max=\"0.85\" step=\"0.05\" value=\"0.35\"><\/div>\n      <div class=\"op-actions\"><button type=\"button\" id=\"op-run\" class=\"op-btn primary\">\u25b6 \u8fd0\u884c\u5b9e\u9a8c<\/button><button type=\"button\" id=\"op-reset\" class=\"op-btn\">\u21ba \u91cd\u7f6e<\/button><\/div>\n    <\/aside>\n  <\/section>\n  <div class=\"op-metrics\" aria-label=\"\u5b9e\u65f6\u5b9e\u9a8c\u6307\u6807\"><div class=\"op-metric\"><span>\u8f66\u8f86\u901f\u5ea6<\/span><strong id=\"op-v\">3.0<\/strong><small>m\/s<\/small><\/div><div class=\"op-metric\"><span>\u5f53\u524d\u51b3\u7b56<\/span><strong id=\"op-decision\" style=\"font-size:18px\">\u51c6\u5907\u901a\u884c<\/strong><\/div><div class=\"op-metric\"><span>\u6700\u5c0f\u51c0\u95f4\u8ddd<\/span><strong id=\"op-gap\">\u2014<\/strong><small>m<\/small><\/div><div class=\"op-metric\"><span>\u611f\u77e5\u76ee\u6807<\/span><strong id=\"op-objects\">1 \/ 1<\/strong><small>\u68c0\u51fa \/ \u573a\u666f<\/small><\/div><\/div>\n  <div class=\"op-result\" id=\"op-result\" role=\"status\"><\/div>\n  <p class=\"op-notice\">\u8fd9\u662f\u7b80\u5316\u7684\u4e8c\u7ef4\u6559\u5b66\u4eff\u771f\uff1a\u4f7f\u7528\u6a21\u62df\u611f\u77e5\u3001\u5300\u901f\u9884\u6d4b\u3001\u89c4\u5219\u8ba9\u884c\u548c\u8f66\u8f86\u8fd0\u52a8\u5b66\u6a21\u578b\u3002\u53ef\u7528\u4e8e\u7406\u89e3\u6a21\u5757\u534f\u540c\uff1b\u771f\u5b9e\u6a21\u578b\u5b9e\u8df5\u53ef\u901a\u8fc7\u4e0b\u65b9\u8bfe\u7a0b\u4e0e\u6570\u636e\u8d44\u6e90\u7ee7\u7eed\u5f00\u5c55\u3002\u8c03\u6574\u53c2\u6570\u4f1a\u91cd\u65b0\u5f00\u59cb\u672c\u8f6e\u5b9e\u9a8c\u3002<\/p>\n  <div class=\"op-section-head\" id=\"op-learning\"><div><div class=\"op-eyebrow\">LEARN THE PIPELINE<\/div><h2>\u4e94\u4e2a\u9636\u6bb5\uff0c\u4e00\u4e2a\u5b8c\u6574\u7cfb\u7edf<\/h2><p>\u9009\u62e9\u4e00\u4e2a\u9636\u6bb5\uff0c\u5b8c\u6210\u89c2\u5bdf\u4efb\u52a1\uff0c\u518d\u68c0\u67e5\u4f60\u7684\u7406\u89e3\u3002<\/p><\/div><span class=\"op-small\">\u5efa\u8bae\uff1a\u5148\u8fd0\u884c\u4e00\u6b21\uff0c\u518d\u9010\u6b65\u62c6\u89e3<\/span><\/div>\n  <div class=\"op-stage-tabs\" role=\"tablist\" aria-label=\"\u4e94\u4e2a\u5b66\u4e60\u9636\u6bb5\">\n    <button class=\"op-stage\" type=\"button\" role=\"tab\" id=\"op-tab-0\" data-stage=\"0\" aria-selected=\"true\" aria-controls=\"op-stage-panel\"><em id=\"op-check-0\"><\/em><b>01 \u611f\u77e5<\/b><span>PERCEPTION<\/span><\/button>\n    <button class=\"op-stage\" type=\"button\" role=\"tab\" id=\"op-tab-1\" data-stage=\"1\" aria-selected=\"false\" aria-controls=\"op-stage-panel\" tabindex=\"-1\"><em id=\"op-check-1\"><\/em><b>02 \u9884\u6d4b<\/b><span>PREDICTION<\/span><\/button>\n    <button class=\"op-stage\" type=\"button\" role=\"tab\" id=\"op-tab-2\" data-stage=\"2\" aria-selected=\"false\" aria-controls=\"op-stage-panel\" tabindex=\"-1\"><em id=\"op-check-2\"><\/em><b>03 \u51b3\u7b56<\/b><span>DECISION<\/span><\/button>\n    <button class=\"op-stage\" type=\"button\" role=\"tab\" id=\"op-tab-3\" data-stage=\"3\" aria-selected=\"false\" aria-controls=\"op-stage-panel\" tabindex=\"-1\"><em id=\"op-check-3\"><\/em><b>04 \u89c4\u5212<\/b><span>PLANNING<\/span><\/button>\n    <button class=\"op-stage\" type=\"button\" role=\"tab\" id=\"op-tab-4\" data-stage=\"4\" aria-selected=\"false\" aria-controls=\"op-stage-panel\" tabindex=\"-1\"><em id=\"op-check-4\"><\/em><b>05 \u63a7\u5236<\/b><span>CONTROL<\/span><\/button>\n  <\/div>\n  <section class=\"op-stage-panel\" id=\"op-stage-panel\" role=\"tabpanel\" aria-labelledby=\"op-tab-0\"><\/section>\n  <div class=\"op-section-head\" id=\"op-resources\"><div><div class=\"op-eyebrow\">REFLECT & EXTEND<\/div><h2>\u628a\u5b9e\u9a8c\u53d8\u6210\u81ea\u5df1\u7684\u5b66\u4e60\u6210\u679c<\/h2><p>\u6bd4\u8f83\u4e0d\u540c\u53c2\u6570\u7684\u7ed3\u679c\uff0c\u8bb0\u5f55\u539f\u56e0\uff0c\u518d\u8d70\u5411\u771f\u5b9e\u6570\u636e\u4e0e\u6a21\u578b\u3002<\/p><\/div><\/div>\n  <div class=\"op-records\"><section class=\"op-card\"><h3>\u6211\u7684\u5b9e\u9a8c\u7b14\u8bb0<\/h3><p class=\"op-small\">\u8bd5\u7740\u56de\u7b54\uff1a\u54ea\u4e00\u6b21\u66f4\u5b89\u5168\uff1f\u4ee3\u4ef7\u662f\u4ec0\u4e48\uff1f\u54ea\u4e2a\u6a21\u5757\u5f71\u54cd\u4e86\u7ed3\u679c\uff1f<\/p><label for=\"op-notes\" class=\"op-small\">\u89c2\u5bdf\u3001\u6bd4\u8f83\u4e0e\u6539\u8fdb\u60f3\u6cd5<\/label><textarea id=\"op-notes\" placeholder=\"\u4f8b\u5982\uff1a\u540c\u4e00\u906e\u6321\u573a\u666f\u4e2d\uff0c\u8f83\u9ad8\u7684\u7f6e\u4fe1\u5ea6\u9608\u503c\u6f0f\u6389\u4e86\u6a2a\u5411\u6765\u8f66\u2026\u2026\"><\/textarea><div class=\"op-export-actions\"><button type=\"button\" id=\"op-report\" class=\"op-btn primary\">\u2193 \u5bfc\u51fa\u5b66\u4e60\u62a5\u544a<\/button><button type=\"button\" id=\"op-csv\" class=\"op-btn\" disabled>\u5bfc\u51fa\u8f68\u8ff9 CSV<\/button><\/div><p class=\"op-storage\" id=\"op-storage\">\u5b66\u4e60\u8fdb\u5ea6\u548c\u7b14\u8bb0\u4fdd\u5b58\u5728\u5f53\u524d\u6d4f\u89c8\u5668\uff0c\u4e0d\u4f1a\u4e0a\u4f20\u3002\u5bfc\u51fa\u62a5\u544a\u53ef\u7528\u4e8e\u8bfe\u5802\u8ba8\u8bba\u3002<\/p><\/section><section class=\"op-card\"><h3>\u8f66\u8f86\u4e3a\u4ec0\u4e48\u8fd9\u6837\u505a\uff1f<\/h3><p class=\"op-small\">\u6309\u4eff\u771f\u65f6\u95f4\u8bb0\u5f55\u51b3\u7b56\u53d8\u5316\u3002\u8fd0\u884c\u5b9e\u9a8c\u540e\u67e5\u770b\u3002<\/p><ol class=\"op-log\" id=\"op-log\"><li><span>\u7b49\u5f85\u5f00\u59cb\u5b9e\u9a8c<\/span><time>00.0 s<\/time><\/li><\/ol><div class=\"op-small\" id=\"op-control-readout\">\u63a7\u5236\u8f93\u51fa\uff1a\u52a0\u901f\u5ea6 0.00 m\/s\u00b2 \u00b7 \u524d\u8f6e\u8f6c\u89d2 0.0\u00b0<\/div><\/section><\/div>\n  <div class=\"op-history\" id=\"op-history\" hidden><h3>\u6700\u8fd1\u7684\u5b9e\u9a8c\u5bf9\u6bd4<\/h3><table><thead><tr><th>\u573a\u666f \/ \u76ee\u6807<\/th><th>\u901f\u5ea6 \/ \u65f6\u57df \/ \u9608\u503c<\/th><th>\u7ed3\u679c<\/th><th>\u7528\u65f6<\/th><th>\u6700\u5c0f\u51c0\u95f4\u8ddd<\/th><\/tr><\/thead><tbody id=\"op-history-body\"><\/tbody><\/table><p class=\"op-small\">\u4ec5\u6bd4\u8f83\u5f53\u524d\u6d4f\u89c8\u5668\u6700\u8fd1 6 \u6b21\u5df2\u7ed3\u675f\u5b9e\u9a8c\uff1b\u6559\u5b66\u4eff\u771f\u6307\u6807\u4e0d\u7b49\u540c\u4e8e\u5b98\u65b9\u699c\u5355\u6210\u7ee9\u3002<\/p><\/div>\n  <div class=\"op-section-head\"><div><h3>\u7ee7\u7eed\u8d70\u5411\u771f\u5b9e\u4e16\u754c<\/h3><p>\u672c\u5730\u4f53\u9a8c\u4e4b\u540e\uff0c\u4f7f\u7528\u5b66\u4e60\u4e2d\u5fc3\u8d44\u6e90\u5b8c\u6210\u4e00\u6b21\u771f\u5b9e\u6a21\u578b\u5b9e\u8df5\u3002<\/p><\/div><\/div>\n  <div class=\"op-resources\" id=\"op-resource-grid\"><\/div>\n  <details><summary>\u5b9e\u9a8c\u539f\u7406\u3001\u9002\u7528\u8303\u56f4\u4e0e\u8bfe\u5802\u5efa\u8bae<\/summary><p>\u611f\u77e5\uff1a\u573a\u666f\u751f\u6210\u5668\u63d0\u4f9b\u5e26\u7c7b\u522b\u3001\u4f4d\u7f6e\u548c\u7f6e\u4fe1\u5ea6\u7684\u76ee\u6807\uff0c\u9608\u503c\u51b3\u5b9a\u662f\u5426\u68c0\u51fa\uff0c\u4e0d\u8fd0\u884c\u6444\u50cf\u5934\u6216 YOLO\u3002\u906e\u6321\u573a\u666f\u4e2d\u7684\u6765\u8f66\u7f6e\u4fe1\u5ea6\u6682\u65f6\u964d\u4f4e\u5230 0.48\u3002<\/p><p>\u9884\u6d4b\uff1a\u5bf9\u68c0\u51fa\u76ee\u6807\u91c7\u7528\u5300\u901f\u5916\u63a8\uff1b\u51b3\u7b56\uff1a\u4f9d\u636e\u672a\u6765\u7a7a\u95f4\u8ddd\u79bb\u4e0e\u7b56\u7565\u95f4\u9699\u51cf\u901f\u8ba9\u884c\uff1b\u89c4\u5212\uff1a\u4e3a\u76f4\u884c\u6216\u5de6\u8f6c\u751f\u6210\u53c2\u8003\u8def\u5f84\uff1b\u63a7\u5236\uff1a\u4f7f\u7528\u901f\u5ea6\u6bd4\u4f8b\u53cd\u9988\u4e0e\u7eaf\u8ffd\u8e2a\u8f6c\u5411\uff0c\u57fa\u4e8e\u81ea\u884c\u8f66\u8fd0\u52a8\u5b66\u6a21\u578b\u66f4\u65b0\u81ea\u8f66\u72b6\u6001\u3002\u80cc\u666f\u4ea4\u901a\u53c2\u4e0e\u8005\u6309\u9884\u8bbe\u8f68\u8ff9\u8fd0\u52a8\uff0c\u4e0d\u5bf9\u81ea\u8f66\u4f5c\u51fa\u53cd\u5e94\u3002<\/p><p>\u51c0\u95f4\u8ddd\u4ee5\u53c2\u4e0e\u8005\u7684\u7b80\u5316\u5706\u5f62\u5305\u7edc\u8ba1\u7b97\u3002\u4eff\u771f\u6210\u529f\u8868\u793a\u672c\u6b21\u573a\u666f\u4e2d\u672a\u78b0\u649e\u4e14\u5230\u8fbe\u7ec8\u70b9\uff0c\u4e0d\u4ee3\u8868\u771f\u5b9e\u9053\u8def\u5b89\u5168\u8ba4\u8bc1\u3002\u5f53\u524d\u9875\u9762\u652f\u6301\u672c\u6d4f\u89c8\u5668\u7684\u5b66\u4e60\u8bb0\u5f55\u4e0e\u6587\u4ef6\u5bfc\u51fa\uff0c\u5b98\u65b9\u6a21\u578b\u6210\u7ee9\u9700\u5728\u76f8\u5e94\u8bc4\u6d4b\u5e73\u53f0\u63d0\u4ea4\u3002<\/p><p>\u8bfe\u5802\u5efa\u8bae\uff1a\u5148\u7528\u9ed8\u8ba4\u53c2\u6570\u5b8c\u6210\u5b9e\u9a8c\uff0c\u518d\u6bd4\u8f83\u4e00\u4e2a\u53d8\u91cf\uff1b\u5b8c\u6210\u4e94\u4e2a\u9636\u6bb5\u7684\u68c0\u67e5\u9898\uff1b\u9009\u62e9\u4e00\u4e2a\u73b0\u6709\u8bfe\u7a0b\u8fd0\u884c\u6a21\u578b\uff0c\u63d0\u4ea4\u201c\u53c2\u6570\u2014\u7ed3\u679c\u2014\u89e3\u91ca\u2014\u6539\u8fdb\u201d\u7684\u62a5\u544a\u3002\u6559\u5e08\u53ef\u4ee5\u5c06\u6b64\u9875\u9762\u4f5c\u4e3a\u7efc\u5408\u5b9e\u9a8c\u5165\u53e3\u3002<\/p><\/details>\n  <noscript>\u8bf7\u542f\u7528 JavaScript \u4f7f\u7528\u4ea4\u4e92\u5b9e\u9a8c\u3002\u4f60\u4ecd\u53ef\u4ece\u5b66\u4e60\u4e2d\u5fc3\u7684\u5feb\u901f\u5f00\u59cb\u3001\u6570\u636e\u96c6\u548c\u6392\u884c\u699c\u680f\u76ee\u5b66\u4e60\u76f8\u5173\u5185\u5bb9\u3002<\/noscript>\n  <div id=\"op-toast\" class=\"op-toast\" role=\"status\" hidden><\/div>\n<\/div>\n\n<script>\n\/* OnSite intersection teaching model. Units: m, s, rad; 6 px = 1 m. *\/\nclass IntersectionLab {\n  constructor(config = {}) { this.reset(config); }\n  reset(config = {}) {\n    this.config = Object.assign({ scenario: 'crossing', speed: 7, horizon: 4, confidence: 0.35, policy: 'cautious', turn: 'straight' }, config);\n    this.t = 0; this.s = 0; this.v = 3; this.a = 0; this.steer = 0; this.x = 430; this.y = 490; this.heading = -Math.PI \/ 2;\n    this.finished = false; this.result = ''; this.decision = '\u51c6\u5907\u901a\u884c'; this.minGap = Infinity; this.maxAccel = 0; this.waitTime = 0; this.trace = []; this.logs = []; this.lastDecision = ''; this.sampleAt = 0;\n    this.route = [];\n    for (let y = 490; y >= 350; y -= 2) this.route.push({ x: 430, y });\n    if (this.config.turn === 'left') {\n      for (let i = 1; i <= 70; i++) { const t = i \/ 70, u = 1 - t; this.route.push({ x: u*u*u*430 + 3*u*u*t*430 + 3*u*t*t*410 + t*t*t*350, y: u*u*u*350 + 3*u*u*t*290 + 3*u*t*t*250 + t*t*t*250 }); }\n      for (let x = 348; x >= 50; x -= 2) this.route.push({ x, y: 250 });\n    } else for (let y = 348; y >= 40; y -= 2) this.route.push({ x: 430, y });\n    let d = 0; this.route.forEach((p,i) => { if(i) d += Math.hypot(p.x-this.route[i-1].x,p.y-this.route[i-1].y)\/6; p.s=d; });\n    this.length = d; this.observe(); return this;\n  }\n  point(s) { s = Math.max(0, Math.min(s, this.length)); let p = this.route.findIndex(p=>p.s>=s); if(p<=0)return this.route[0]; let a=this.route[p-1],b=this.route[p],f=(s-a.s)\/(b.s-a.s);return{x:a.x+(b.x-a.x)*f,y:a.y+(b.y-a.y)*f}; }\n  actors(t=this.t) {\n    const low=this.config.scenario==='occluded';\n    let actors=[{id:'V01',kind:'\u8f66\u8f86',x:190+t*48,y:310,vx:8,vy:0,confidence:low&&t<5.2?0.48:0.96,r:2.3}];\n    if(this.config.scenario==='pedestrian')actors.push({id:'P01',kind:'\u884c\u4eba',x:337+t*8.4,y:365,vx:1.4,vy:0,confidence:0.91,r:0.5});\n    return actors.filter(p=>p.x<900);\n  }\n  observe() {\n    this.objects=this.actors(); this.detected=this.objects.filter(p=>p.confidence>=this.config.confidence);\n    this.risk=false;\n    for (const p of this.detected) {\n      for(let tau=0;tau<=this.config.horizon;tau+=0.2){\n        \/\/ Project current intent; reserve a wider spatial gap for a cautious policy.\n        const ego=this.point(this.s+Math.max(this.v,3)*tau), gap=Math.hypot(ego.x-(p.x+p.vx*6*tau),ego.y-(p.y+p.vy*6*tau))\/6;\n        if(gap<(this.config.policy==='cautious'?10:5.5)){this.risk=true;break;}\n      }\n    }\n  }\n  step(dt=0.04) {\n    if(this.finished)return;\n    this.observe(); const stopS=14, before=this.s<33;\n    let target=this.config.speed;\n    if(this.config.turn==='left' && this.s>18 && this.s<51)target=Math.min(target,4);\n    if(this.risk && before) { target=Math.min(target,Math.sqrt(2*2.8*Math.max(0,stopS-this.s))); this.decision=target<0.5?'\u505c\u8f66\u8ba9\u884c':'\u51cf\u901f\u8ba9\u884c'; }\n    else this.decision=this.s<33?'\u89c2\u5bdf\u5e76\u63a5\u8fd1':this.config.turn==='left'&&this.s<51?'\u6267\u884c\u5de6\u8f6c':'\u901a\u8fc7\u4ea4\u53c9\u53e3';\n    \/\/ Longitudinal P feedback and bicycle\/pure-pursuit lateral control.\n    this.a=Math.max(-4,Math.min(2,1.8*(target-this.v))); this.v=Math.max(0,this.v+this.a*dt);\n    const look=this.point(this.s+Math.max(4,this.v*0.9)); let alpha=Math.atan2(look.y-this.y,look.x-this.x)-this.heading;\n    alpha=Math.atan2(Math.sin(alpha),Math.cos(alpha));this.steer=Math.max(-0.6,Math.min(0.6,Math.atan2(2*2.7*Math.sin(alpha),Math.max(4,this.v*0.9))));\n    this.heading+=this.v\/2.7*Math.tan(this.steer)*dt; this.x+=Math.cos(this.heading)*this.v*6*dt;this.y+=Math.sin(this.heading)*this.v*6*dt;\n    \/\/ Monotonic nearest route progress; the physical state is integrated above.\n    let nearest=this.s,best=Infinity;for(const p of this.route){if(p.s<this.s-1||p.s>this.s+6)continue;let ds=Math.hypot(p.x-this.x,p.y-this.y);if(ds<best){best=ds;nearest=p.s;}}\n    this.s=Math.max(this.s,nearest);this.t+=dt;if(this.v<0.3)this.waitTime+=dt;this.maxAccel=Math.max(this.maxAccel,Math.abs(this.a));\n    for(const p of this.actors()){let gap=Math.hypot(this.x-p.x,this.y-p.y)\/6-p.r-2.1;this.minGap=Math.min(this.minGap,gap);if(gap<0){this.finished=true;this.result='collision';this.decision='\u53d1\u751f\u78b0\u649e';}}\n    if(!this.finished&&this.s>=this.length-1){this.finished=true;this.result='success';this.decision='\u5b8c\u6210\u901a\u884c';}\n    if(!this.finished&&this.t>=45){this.finished=true;this.result='timeout';this.decision='\u7b49\u5f85\u8d85\u65f6';}\n    if(this.decision!==this.lastDecision){this.logs.push({time:+this.t.toFixed(1),decision:this.decision});this.lastDecision=this.decision;}\n    if(this.t>=this.sampleAt){this.trace.push({t:+this.t.toFixed(2),x:+(this.x\/6).toFixed(2),y:+(this.y\/6).toFixed(2),speed:+this.v.toFixed(2),acceleration:+this.a.toFixed(2),steering:+this.steer.toFixed(3),decision:this.decision});this.sampleAt+=0.2;}\n  }\n}\nif(typeof module!=='undefined')module.exports=IntersectionLab;\n\n(function(){\n'use strict';\nconst root=document.getElementById('onsite-project');if(!root)return;\nconst $=id=>root.querySelector('#op-'+id), ns='http:\/\/www.w3.org\/2000\/svg';\nconst BASE='\/onsite-learning-center\/', quick=BASE+'\u5feb\u901f\u5f00\u59cb\/', pred=quick+'\u5f00\u59cb-\u9884\u6d4b\/', control=quick+'\u5f00\u59cb-\u63a7\u5236\/', plan=quick+'\u5f00\u59cb-\u89c4\u5212-\u51b3\u7b56\/';\nconst resources={perception:quick+'\u5f00\u59cb-\u611f\u77e5\/\u5f00\u59cb-\u611f\u77e5-2d\u76ee\u6807\u68c0\u6d4b\/',prediction:pred+'\u5f00\u59cb-\u9884\u6d4b-vru\u8f68\u8ff9\u9884\u6d4b\/',decision:plan+'\u5f00\u59cb-\u51b3\u7b56-\u89c4\u5212-\u884c\u4e3a\u51b3\u7b56\/',planning:plan+'\u5f00\u59cb-\u51b3\u7b56-\u89c4\u5212-\u8fd0\u52a8\u89c4\u5212\/',lateral:control+'\u5f00\u59cb-\u63a7\u5236-\u6a2a\u5411\u63a7\u5236\/',longitudinal:control+'\u5f00\u59cb-\u63a7\u5236-\u7eb5\u5411\u63a7\u5236\/',vru:BASE+'\u8d44\u6e90\u5e93\/\u6570\u636e\u96c6\u6982\u8ff0\/onsitevru\u6570\u636e\u96c6\/',interhub:BASE+'\u8d44\u6e90\u5e93\/\u6570\u636e\u96c6\u6982\u8ff0\/interhub\u6570\u636e\u96c6\/',leaderboard:BASE+'\u6392\u884c\u699c\u6982\u8ff0\/\u51b3\u7b56\u89c4\u5212\u6392\u884c\u699c\/'};\nconst stages=[\n {name:'\u611f\u77e5',title:'\u5148\u770b\u89c1\uff0c\u624d\u80fd\u4f5c\u51fa\u53cd\u5e94',desc:'\u8bc6\u522b\u4ea4\u901a\u53c2\u4e0e\u8005\u7684\u4f4d\u7f6e\u3001\u7c7b\u522b\u4e0e\u72b6\u6001\u3002\u8fd9\u91cc\u7528\u5e26\u7f6e\u4fe1\u5ea6\u7684\u6a21\u62df\u68c0\u6d4b\u7ed3\u679c\uff0c\u5e2e\u52a9\u4f60\u89c2\u5bdf\u6f0f\u68c0\u5982\u4f55\u5f71\u54cd\u540e\u7eed\u6a21\u5757\u3002',input:'\u573a\u666f\u4e0e\u6a21\u62df\u68c0\u6d4b\u7f6e\u4fe1\u5ea6',output:'\u76ee\u6807\u5217\u8868\u3001\u4f4d\u7f6e\u4e0e\u7c7b\u522b',task:'\u5207\u6362\u5230\u201c\u906e\u6321\u4e0e\u4f4e\u7f6e\u4fe1\u5ea6\u76ee\u6807\u201d\u3002\u5206\u522b\u7528 0.35 \u548c 0.80 \u7684\u9608\u503c\u8fd0\u884c\uff0c\u6bd4\u8f83\u68c0\u51fa\u76ee\u6807\u4e0e\u901a\u884c\u7ed3\u679c\u3002',links:[['2D \u76ee\u6807\u68c0\u6d4b\u6559\u7a0b',resources.perception],['\u8f7d\u5165\u672c\u9636\u6bb5\u5b9e\u9a8c','preset']],question:'\u906e\u6321\u573a\u666f\u4e2d\uff0c\u63d0\u9ad8\u68c0\u6d4b\u7f6e\u4fe1\u5ea6\u9608\u503c\u4f1a\u5e26\u6765\u4ec0\u4e48\u98ce\u9669\uff1f',options:['\u66f4\u591a\u4f4e\u7f6e\u4fe1\u5ea6\u76ee\u6807\u53ef\u80fd\u88ab\u6f0f\u6389','\u9884\u6d4b\u8f68\u8ff9\u4e00\u5b9a\u66f4\u52a0\u51c6\u786e','\u8f66\u8f86\u5c06\u81ea\u52a8\u83b7\u5f97\u66f4\u957f\u7684\u5236\u52a8\u8ddd\u79bb'],answer:0,explanation:'\u9608\u503c\u8d8a\u9ad8\uff0c\u4fdd\u7559\u4e0b\u6765\u7684\u68c0\u6d4b\u8d8a\u5c11\u3002\u4f4e\u7f6e\u4fe1\u5ea6\u7684\u771f\u5b9e\u6765\u8f66\u4e5f\u53ef\u80fd\u88ab\u8fc7\u6ee4\uff0c\u540e\u7eed\u9884\u6d4b\u4e0e\u51b3\u7b56\u4fbf\u5931\u53bb\u4e86\u91cd\u8981\u8f93\u5165\u3002'},\n {name:'\u9884\u6d4b',title:'\u628a\u201c\u73b0\u5728\u201d\u5ef6\u4f38\u5230\u201c\u63a5\u4e0b\u6765\u201d',desc:'\u9884\u6d4b\u6a21\u5757\u4f30\u8ba1\u5176\u4ed6\u53c2\u4e0e\u8005\u7684\u672a\u6765\u4f4d\u7f6e\u3002\u672c\u5b9e\u9a8c\u4f7f\u7528\u5300\u901f\u6a21\u578b\uff0c\u7d2b\u8272\u865a\u7ebf\u663e\u793a\u9884\u6d4b\u65f6\u57df\u5185\u7684\u8fd0\u52a8\u8d8b\u52bf\u3002',input:'\u76ee\u6807\u4f4d\u7f6e\u4e0e\u901f\u5ea6',output:'\u672a\u6765\u8f68\u8ff9\u4e0e\u6f5c\u5728\u51b2\u7a81',task:'\u5728\u540c\u4e00\u573a\u666f\u4e2d\u6bd4\u8f83 1 \u79d2\u548c 6 \u79d2\u7684\u9884\u6d4b\u65f6\u57df\u3002\u89c2\u5bdf\u9884\u6d4b\u7ebf\u957f\u5ea6\u3001\u5f00\u59cb\u51cf\u901f\u7684\u65f6\u523b\u548c\u901a\u884c\u95f4\u8ddd\u3002',links:[['VRU \u8f68\u8ff9\u9884\u6d4b\u6559\u7a0b',resources.prediction],['\u8f7d\u5165\u672c\u9636\u6bb5\u5b9e\u9a8c','preset']],question:'\u66f4\u957f\u7684\u9884\u6d4b\u65f6\u57df\uff0c\u662f\u5426\u5fc5\u7136\u610f\u5473\u7740\u9884\u6d4b\u66f4\u51c6\u786e\uff1f',options:['\u662f\uff0c\u65f6\u95f4\u8d8a\u957f\u8bef\u5dee\u8d8a\u5c0f','\u5426\uff0c\u8fdc\u671f\u9884\u6d4b\u4f9d\u8d56\u66f4\u591a\u5047\u8bbe','\u662f\uff0c\u53ea\u8981\u591a\u7ed8\u5236\u51e0\u4e2a\u8f68\u8ff9\u70b9'],answer:1,explanation:'\u8f83\u957f\u65f6\u57df\u6709\u52a9\u4e8e\u63d0\u524d\u53d1\u73b0\u51b2\u7a81\uff0c\u4f46\u8fdc\u671f\u884c\u4e3a\u4e5f\u66f4\u52a0\u4e0d\u786e\u5b9a\u3002\u6b64\u5904\u7684\u5300\u901f\u5047\u8bbe\u65e0\u6cd5\u523b\u753b\u7a81\u7136\u8f6c\u5f2f\u3001\u52a0\u901f\u6216\u505c\u4e0b\u3002'},\n {name:'\u51b3\u7b56',title:'\u6b64\u65f6\u6b64\u523b\uff0c\u5e94\u8be5\u8ba9\u884c\u5417\uff1f',desc:'\u51b3\u7b56\u628a\u76ee\u6807\u4e0e\u98ce\u9669\u8f6c\u5316\u6210\u884c\u4e3a\u610f\u56fe\u3002\u672c\u5b9e\u9a8c\u5728\u63a5\u8fd1\u3001\u51cf\u901f\u3001\u505c\u8f66\u8ba9\u884c\u548c\u901a\u8fc7\u4e4b\u95f4\u5207\u6362\uff0c\u5e76\u8bb0\u5f55\u89e6\u53d1\u65f6\u523b\u3002',input:'\u9884\u6d4b\u51b2\u7a81\u3001\u901a\u884c\u76ee\u6807',output:'\u8ba9\u884c\u6216\u901a\u884c\u7684\u884c\u4e3a\u610f\u56fe',task:'\u9009\u62e9\u201c\u8f66\u8f86\u4e0e\u884c\u4eba\u6df7\u884c\u201d\uff0c\u6bd4\u8f83\u4e24\u79cd\u8ba9\u884c\u7b56\u7565\u3002\u89c2\u5bdf\u8f66\u8f86\u505c\u5728\u54ea\u91cc\u3001\u4ec0\u4e48\u65f6\u5019\u6062\u590d\u901a\u884c\u3002',links:[['\u5355\u8f66\u884c\u4e3a\u51b3\u7b56\u6559\u7a0b',resources.decision],['\u8f7d\u5165\u672c\u9636\u6bb5\u5b9e\u9a8c','preset']],question:'\u201c\u505c\u8f66\u8ba9\u884c\u201d\u4e3b\u8981\u5c5e\u4e8e\u54ea\u4e2a\u6a21\u5757\u7684\u8f93\u51fa\uff1f',options:['\u611f\u77e5\uff1a\u8bc6\u522b\u76ee\u6807\u7c7b\u522b','\u63a7\u5236\uff1a\u8ba1\u7b97\u65b9\u5411\u76d8\u89d2\u5ea6','\u51b3\u7b56\uff1a\u9009\u62e9\u5f53\u524d\u884c\u4e3a\u610f\u56fe'],answer:2,explanation:'\u51b3\u7b56\u9009\u62e9\u8981\u505a\u4ec0\u4e48\uff0c\u89c4\u5212\u8fdb\u4e00\u6b65\u7ed9\u51fa\u53ef\u884c\u7684\u8f68\u8ff9\u6216\u901f\u5ea6\u53c2\u8003\uff0c\u63a7\u5236\u5c06\u53c2\u8003\u8f6c\u5316\u4e3a\u8f66\u8f86\u6267\u884c\u6307\u4ee4\u3002'},\n {name:'\u89c4\u5212',title:'\u4e3a\u901a\u884c\u610f\u56fe\u627e\u5230\u4e00\u6761\u8def\u5f84',desc:'\u89c4\u5212\u8fde\u63a5\u884c\u4e3a\u610f\u56fe\u4e0e\u8f66\u8f86\u8fd0\u52a8\u3002\u7eff\u8272\u8def\u5f84\u8868\u793a\u81ea\u8f66\u7684\u53c2\u8003\u8def\u7ebf\uff1b\u5207\u6362\u76f4\u884c\u4e0e\u5de6\u8f6c\uff0c\u89c2\u5bdf\u7a7a\u95f4\u8def\u5f84\u548c\u8f6c\u5f2f\u901f\u5ea6\u7684\u53d8\u5316\u3002',input:'\u884c\u4e3a\u610f\u56fe\u3001\u9053\u8def\u4e0e\u76ee\u6807',output:'\u53c2\u8003\u8def\u5f84\u4e0e\u76ee\u6807\u901f\u5ea6',task:'\u5c06\u901a\u884c\u76ee\u6807\u6539\u4e3a\u201c\u5de6\u8f6c\u901a\u8fc7\u201d\uff0c\u89c2\u5bdf\u8f6c\u5f2f\u65f6\u7684\u53c2\u8003\u8def\u5f84\u3002\u601d\u8003\u52a0\u5165\u81ea\u884c\u8f66\u6216\u9759\u6001\u969c\u788d\u7269\u540e\uff0c\u89c4\u5212\u9700\u8981\u589e\u52a0\u54ea\u4e9b\u7ea6\u675f\u3002',links:[['\u8fd0\u52a8\u89c4\u5212\u6559\u7a0b',resources.planning],['\u8f7d\u5165\u672c\u9636\u6bb5\u5b9e\u9a8c','preset']],question:'\u4e00\u6761\u53ef\u6267\u884c\u7684\u89c4\u5212\u8f68\u8ff9\uff0c\u9664\u4e86\u5230\u8fbe\u76ee\u6807\uff0c\u8fd8\u5e94\u8003\u8651\u4ec0\u4e48\uff1f',options:['\u907f\u78b0\u3001\u9053\u8def\u8fb9\u754c\u4e0e\u8f66\u8f86\u8fd0\u52a8\u7ea6\u675f','\u4ec5\u8003\u8651\u8def\u5f84\u5728\u56fe\u4e0a\u662f\u5426\u597d\u770b','\u53ea\u8981\u8def\u7ebf\u6700\u77ed\u5c31\u8db3\u591f'],answer:0,explanation:'\u89c4\u5212\u5fc5\u987b\u540c\u65f6\u8003\u8651\u73af\u5883\u548c\u8f66\u8f86\u80fd\u529b\u3002\u8fd9\u91cc\u7684\u9884\u8bbe\u8def\u7ebf\u9002\u5408\u6f14\u793a\u6a21\u5757\u63a5\u53e3\uff0c\u771f\u5b9e\u573a\u666f\u9700\u8981\u8fdb\u4e00\u6b65\u5904\u7406\u52a8\u6001\u969c\u788d\u548c\u591a\u79cd\u7ea6\u675f\u3002'},\n {name:'\u63a7\u5236',title:'\u628a\u8def\u5f84\uff0c\u53d8\u6210\u8f66\u8f86\u7684\u8fd0\u52a8',desc:'\u63a7\u5236\u6301\u7eed\u6bd4\u8f83\u53c2\u8003\u4e0e\u5b9e\u9645\u72b6\u6001\uff0c\u8c03\u6574\u52a0\u901f\u5ea6\u548c\u8f6c\u5411\u3002\u672c\u5b9e\u9a8c\u91c7\u7528\u901f\u5ea6\u6bd4\u4f8b\u53cd\u9988\u4e0e\u7eaf\u8ffd\u8e2a\u8f6c\u5411\uff0c\u4f60\u53ef\u4ee5\u5728\u51b3\u7b56\u8bb0\u5f55\u4e0b\u65b9\u67e5\u770b\u5b9e\u65f6\u8f93\u51fa\u3002',input:'\u53c2\u8003\u8def\u5f84\u3001\u901f\u5ea6\u4e0e\u8f66\u8f86\u72b6\u6001',output:'\u52a0\u901f\u5ea6\u4e0e\u524d\u8f6e\u8f6c\u89d2',task:'\u4fdd\u6301\u5de6\u8f6c\u8def\u7ebf\uff0c\u5206\u522b\u8bbe\u7f6e\u8f83\u4f4e\u548c\u8f83\u9ad8\u76ee\u6807\u901f\u5ea6\u3002\u89c2\u5bdf\u8f66\u8f86\u5b9e\u9645\u901f\u5ea6\u3001\u8f6c\u89d2\u4e0e\u5230\u8fbe\u7ec8\u70b9\u7684\u7528\u65f6\uff0c\u89e3\u91ca\u8f6c\u5f2f\u9650\u901f\u7684\u4f5c\u7528\u3002',links:[['\u6a2a\u5411\u63a7\u5236\u8bfe\u7a0b',resources.lateral],['\u7eb5\u5411\u63a7\u5236\u8bfe\u7a0b',resources.longitudinal],['\u8f7d\u5165\u672c\u9636\u6bb5\u5b9e\u9a8c','preset']],question:'\u63a7\u5236\u6a21\u5757\u4e3a\u4ec0\u4e48\u9700\u8981\u6301\u7eed\u8bfb\u53d6\u8f66\u8f86\u7684\u5b9e\u9645\u72b6\u6001\uff1f',options:['\u4e3a\u4e86\u66ff\u4ee3\u6570\u636e\u96c6','\u4e3a\u4e86\u6839\u636e\u6267\u884c\u8bef\u5dee\u6301\u7eed\u4fee\u6b63\u6307\u4ee4','\u4e3a\u4e86\u628a\u6240\u6709\u76ee\u6807\u8bc6\u522b\u4e3a\u540c\u4e00\u7c7b\u522b'],answer:1,explanation:'\u53cd\u9988\u63a7\u5236\u4f9d\u636e\u5b9e\u9645\u72b6\u6001\u4e0e\u53c2\u8003\u72b6\u6001\u4e4b\u95f4\u7684\u8bef\u5dee\u4fee\u6b63\u6307\u4ee4\uff0c\u4f7f\u8f66\u8f86\u5c3d\u53ef\u80fd\u8ddf\u968f\u76ee\u6807\u901f\u5ea6\u4e0e\u8def\u5f84\u3002'}\n];\nconst storeKey='onsite-intersection-learning-v1';let saved={done:[],notes:'',history:[]},storageOK=true;\ntry{const old=JSON.parse(localStorage.getItem(storeKey)||'null');if(old&&Array.isArray(old.done)){saved.done=old.done.filter(x=>Number.isInteger(x)&&x>=0&&x<5);saved.notes=typeof old.notes==='string'?old.notes:'';saved.history=Array.isArray(old.history)?old.history.slice(0,6):[];}}catch(e){storageOK=false;}\nfunction save(){try{localStorage.setItem(storeKey,JSON.stringify(saved));}catch(e){storageOK=false;$('storage').textContent='\u5f53\u524d\u6d4f\u89c8\u5668\u65e0\u6cd5\u4fdd\u5b58\u8bb0\u5f55\uff0c\u8bf7\u5728\u79bb\u5f00\u524d\u5bfc\u51fa\u62a5\u544a\u3002';}}\nlet stage=0,sim=new IntersectionLab(),running=false,last=0,accumulator=0,show={detect:true,predict:true,route:true},reportTrace=[],finishedRecorded=false;\nfunction config(){return{scenario:$('scenario').value,turn:$('turn').value,policy:$('policy').value,speed:+$('speed').value,horizon:+$('horizon').value,confidence:+$('confidence').value};}\nfunction toast(text){$('toast').textContent=text;$('toast').hidden=false;clearTimeout(toast.timer);toast.timer=setTimeout(()=>$('toast').hidden=true,2600);}\nfunction reset(){running=false;sim.reset(config());last=0;accumulator=0;finishedRecorded=false;$('run').textContent='\u25b6 \u8fd0\u884c\u5b9e\u9a8c';$('run').disabled=false;$('result').className='op-result';$('result').replaceChildren();$('log').innerHTML='<li><span>\u7b49\u5f85\u5f00\u59cb\u5b9e\u9a8c<\/span><time>00.0 s<\/time><\/li>';$('speed-out').textContent=sim.config.speed+' m\/s';$('horizon-out').textContent=sim.config.horizon+' s';$('confidence-out').textContent=sim.config.confidence.toFixed(2);render();}\nfunction svgNode(name,attrs){const e=document.createElementNS(ns,name);for(const k in attrs)e.setAttribute(k,attrs[k]);return e;}\nfunction render(){\n $('clock').textContent='T + '+sim.t.toFixed(1).padStart(4,'0')+' s';$('v').textContent=sim.v.toFixed(1);$('decision').textContent=sim.decision;$('gap').textContent=Number.isFinite(sim.minGap)?Math.max(0,sim.minGap).toFixed(1):'\u2014';$('objects').textContent=sim.detected.length+' \/ '+sim.objects.length;\n $('control-readout').textContent='\u63a7\u5236\u8f93\u51fa\uff1a\u52a0\u901f\u5ea6 '+sim.a.toFixed(2)+' m\/s\u00b2 \u00b7 \u524d\u8f6e\u8f6c\u89d2 '+(sim.steer*180\/Math.PI).toFixed(1)+'\u00b0';\n $('ego').setAttribute('transform',`translate(${sim.x},${sim.y}) rotate(${sim.heading*180\/Math.PI})`);$('ego-label').setAttribute('transform',`translate(${sim.x},${sim.y})`);\n const path=sim.route.map((p,i)=>(i?'L':'M')+p.x.toFixed(1)+' '+p.y.toFixed(1)).join('');$('route').setAttribute('d',path);$('route-line').setAttribute('d',path);$('route-layer').style.display=show.route?'':'none';$('occluder').style.display=sim.config.scenario==='occluded'?'':'none';\n $('actors').replaceChildren();$('detections').replaceChildren();$('predictions').replaceChildren();\n for(const p of sim.objects){\n   let g=svgNode('g',{transform:`translate(${p.x},${p.y})`});\n   if(p.kind==='\u8f66\u8f86'){g.append(svgNode('rect',{x:-14,y:-7,width:28,height:14,rx:4,fill:'#e9aa61',stroke:'#ffe0b6'}));g.append(svgNode('rect',{x:-5,y:-5,width:9,height:10,rx:2,fill:'#755539'}));}\n   else{g.append(svgNode('circle',{r:5,fill:'#f0b36a',stroke:'#ffdeaf','stroke-width':2}));g.append(svgNode('path',{d:'M-6 8L0 4L6 8',fill:'none',stroke:'#f0b36a','stroke-width':2}));}$('actors').append(g);\n   if(sim.detected.some(d=>d.id===p.id)){\n     if(show.detect){$('detections').append(svgNode('rect',{x:p.x-20,y:p.y-13,width:40,height:26,fill:'none',stroke:'#f3ce9d','stroke-dasharray':'3 2',rx:3}));let tx=svgNode('text',{x:p.x-23,y:p.y-21,fill:'#f3ce9d','font-size':11});tx.textContent=p.id+' \u00b7 '+p.confidence.toFixed(2);$('detections').append(tx);}\n     if(show.predict){$('predictions').append(svgNode('path',{d:`M${p.x} ${p.y}L${p.x+p.vx*6*sim.config.horizon} ${p.y+p.vy*6*sim.config.horizon}`,fill:'none',stroke:'#aca0ff','stroke-width':2,'stroke-dasharray':'7 5','marker-end':'url(#op-arrow)'}));}\n   }\n }\n if(sim.logs.length){$('log').replaceChildren(...sim.logs.slice(-7).map(log=>{const li=document.createElement('li'),text=document.createElement('span'),time=document.createElement('time');text.textContent=log.decision;time.textContent=log.time.toFixed(1)+' s';li.append(text,time);return li;}));}\n}\nfunction scenarioName(c){return{crossing:'\u6a2a\u5411\u6765\u8f66',pedestrian:'\u8f66\u8f86\u4e0e\u884c\u4eba',occluded:'\u906e\u6321\u6765\u8f66'}[c.scenario]+' \/ '+(c.turn==='left'?'\u5de6\u8f6c':'\u76f4\u884c');}\nfunction outcome(r){return{success:'\u5b8c\u6210\u901a\u884c',collision:'\u53d1\u751f\u78b0\u649e',timeout:'\u7b49\u5f85\u8d85\u65f6'}[r]||r;}\nfunction end(){running=false;$('run').textContent='\u25b6 \u518d\u8fd0\u884c\u4e00\u6b21';$('result').className='op-result show'+(sim.result==='success'?'':' error');const title=document.createElement('strong'),description=document.createElement('p');title.textContent=outcome(sim.result)+' \u00b7 '+sim.t.toFixed(1)+' s';description.textContent=sim.result==='success'?'\u672c\u8f6e\u5df2\u5230\u8fbe\u7ec8\u70b9\u3002\u8bd5\u7740\u53ea\u6539\u53d8\u4e00\u4e2a\u53c2\u6570\uff0c\u6bd4\u8f83\u5b89\u5168\u95f4\u8ddd\u4e0e\u901a\u884c\u65f6\u95f4\uff0c\u518d\u8bb0\u5f55\u4f60\u7684\u89e3\u91ca\u3002':sim.result==='collision'?'\u672c\u8f6e\u53d1\u751f\u78b0\u649e\u3002\u68c0\u67e5\u662f\u5426\u6f0f\u68c0\u76ee\u6807\u3001\u9884\u6d4b\u65f6\u57df\u662f\u5426\u8db3\u591f\uff0c\u4ee5\u53ca\u5f53\u524d\u7b56\u7565\u7684\u95f4\u9699\u8bbe\u5b9a\uff1b\u8c03\u6574\u4e00\u4e2a\u53c2\u6570\u540e\u91cd\u8bd5\u3002':'\u672c\u8f6e\u8d85\u8fc7 45 \u79d2\u3002\u68c0\u67e5\u8ba9\u884c\u6761\u4ef6\u4e0e\u8fd0\u52a8\u72b6\u6001\uff0c\u91cd\u65b0\u914d\u7f6e\u540e\u518d\u8bd5\u3002';$('result').append(title,description);\n if(!finishedRecorded){reportTrace=sim.trace.slice();$('csv').disabled=false;saved.history.unshift({config:{...sim.config},result:sim.result,time:+sim.t.toFixed(2),gap:+Math.max(0,sim.minGap).toFixed(2),wait:+sim.waitTime.toFixed(2)});saved.history=saved.history.slice(0,6);save();history();finishedRecorded=true;}}\nfunction frame(time){if(running){if(!last)last=time;accumulator+=Math.min((time-last)\/1000,.15);while(accumulator>=.04&&!sim.finished){sim.step(.04);accumulator-=.04;}render();if(sim.finished)end();}last=time;requestAnimationFrame(frame);}\n$('run').addEventListener('click',()=>{if(sim.finished)reset();running=!running;last=0;$('run').textContent=running?'\u2161 \u6682\u505c\u5b9e\u9a8c':'\u25b6 \u7ee7\u7eed\u5b9e\u9a8c';});$('reset').addEventListener('click',()=>{reset();toast('\u672c\u8f6e\u5b9e\u9a8c\u5df2\u91cd\u7f6e\uff0c\u5b66\u4e60\u8bb0\u5f55\u5df2\u4fdd\u7559\u3002');});\nfor(const id of ['scenario','turn','policy','speed','horizon','confidence'])$(id).addEventListener('input',reset);\nroot.querySelectorAll('[data-layer]').forEach(b=>b.addEventListener('click',()=>{let k=b.dataset.layer;show[k]=!show[k];b.setAttribute('aria-pressed',String(show[k]));render();}));\nfunction progress(){const done=new Set(saved.done);$('progress').value=done.size;$('progress-label').textContent='\u5df2\u5b8c\u6210 '+done.size+' \/ 5 \u9636\u6bb5';stages.forEach((_,i)=>$('check-'+i).textContent=done.has(i)?'\u2713':'');}\nfunction choose(i){stage=i;const s=stages[i];root.querySelectorAll('[data-stage]').forEach((b,j)=>{b.setAttribute('aria-selected',String(j===i));b.tabIndex=j===i?0:-1;});$('stage-panel').setAttribute('aria-labelledby','op-tab-'+i);\n $('stage-panel').innerHTML=`<div><div class=\"op-step-heading\"><span class=\"op-step-number\">0${i+1}<\/span><h3>${s.title}<\/h3><\/div><p>${s.desc}<\/p><div class=\"op-io\"><div><small>\u8f93\u5165<\/small>${s.input}<\/div><span aria-hidden=\"true\">\u2192<\/span><div><small>\u8f93\u51fa<\/small>${s.output}<\/div><\/div><div class=\"op-task\"><strong>\u52a8\u624b\u89c2\u5bdf<\/strong>${s.task}<\/div><div class=\"op-resource-links\">${s.links.map(l=>l[1]==='preset'?'<button type=\"button\" class=\"op-btn\" id=\"op-preset\">\u8f7d\u5165\u672c\u9636\u6bb5\u5b9e\u9a8c \u2191<\/button>':`<a class=\"op-btn\" href=\"${l[1]}\" target=\"_blank\" rel=\"noopener\">${l[0]} \u2197<\/a>`).join('')}<\/div><\/div><div><div class=\"op-quiz-label\">CHECK YOUR UNDERSTANDING<\/div><h3>${s.question}<\/h3><fieldset style=\"border:0;margin:0;padding:0\"><legend class=\"op-small\">\u9009\u62e9\u6700\u5408\u9002\u7684\u7b54\u6848<\/legend><div class=\"op-quiz-options\">${s.options.map((x,j)=>`<label class=\"op-answer\"><input type=\"radio\" name=\"op-answer\" value=\"${j}\">${x}<\/label>`).join('')}<\/div><\/fieldset><button type=\"button\" class=\"op-btn primary\" id=\"op-verify\">\u68c0\u67e5\u7406\u89e3<\/button> <button type=\"button\" class=\"op-btn\" id=\"op-next\">${i===4?'\u56de\u5230\u5b9e\u9a8c \u2191':'\u4e0b\u4e00\u9636\u6bb5 \u2192'}<\/button><div class=\"op-feedback\" id=\"op-feedback\" role=\"status\">${saved.done.includes(i)?'\u2713 \u672c\u9636\u6bb5\u68c0\u67e5\u5df2\u5b8c\u6210\uff0c\u53ef\u518d\u6b21\u7ec3\u4e60\u3002':''}<\/div><\/div>`;\n $('verify').addEventListener('click',()=>{const answer=root.querySelector('input[name=\"op-answer\"]:checked');if(!answer){$('feedback').textContent='\u8bf7\u5148\u9009\u62e9\u4e00\u4e2a\u7b54\u6848\u3002';$('feedback').className='op-feedback error';return;}const correct=+answer.value===s.answer;$('feedback').className='op-feedback'+(correct?'':' error');$('feedback').textContent=(correct?'\u2713 \u7406\u89e3\u6b63\u786e\u3002':'\u518d\u60f3\u4e00\u60f3\u3002')+s.explanation;if(correct&&!saved.done.includes(i)){saved.done.push(i);save();progress();}});\n $('next').addEventListener('click',()=>{if(i===4)$('experiment').scrollIntoView({behavior:'smooth',block:'start'});else choose(i+1);});\n const preset=$('preset');if(preset)preset.addEventListener('click',()=>{const cfg=[{scenario:'occluded',turn:'straight'},{scenario:'crossing',turn:'straight'},{scenario:'pedestrian',turn:'straight'},{scenario:'crossing',turn:'left'},{scenario:'crossing',turn:'left'}][i];for(const k in cfg)$(k).value=cfg[k];$('speed').value='7';$('horizon').value='4';$('confidence').value='.35';$('policy').value='cautious';reset();$('experiment').scrollIntoView({behavior:'smooth',block:'start'});toast('\u5df2\u8f7d\u5165'+s.name+'\u9636\u6bb5\u5b9e\u9a8c\uff0c\u70b9\u51fb\u8fd0\u884c\u5f00\u59cb\u89c2\u5bdf\u3002');});\n}\nroot.querySelectorAll('[data-stage]').forEach((b,i)=>{b.addEventListener('click',()=>choose(i));b.addEventListener('keydown',e=>{let next=i;if(e.key==='ArrowRight')next=(i+1)%5;else if(e.key==='ArrowLeft')next=(i+4)%5;else if(e.key==='Home')next=0;else if(e.key==='End')next=4;else return;e.preventDefault();choose(next);$('tab-'+next).focus();});});\n$('notes').value=saved.notes;$('notes').addEventListener('input',()=>{saved.notes=$('notes').value;save();});\nfunction history(){if(!saved.history.length)return;$('history').hidden=false;$('history-body').replaceChildren(...saved.history.map(h=>{let tr=document.createElement('tr');const vals=[scenarioName(h.config),`${h.config.speed} m\/s \u00b7 ${h.config.horizon} s \u00b7 ${Number(h.config.confidence).toFixed(2)}`,outcome(h.result),h.time+' s',h.gap+' m'];for(const v of vals){let td=document.createElement('td');td.textContent=v;tr.append(td);}return tr;}));}\nfunction download(name,text,type){const url=URL.createObjectURL(new Blob([text],{type})),a=document.createElement('a');a.href=url;a.download=name;document.body.append(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(url),10000);}\n$('report').addEventListener('click',()=>{const text=['# OnSite \u9879\u76ee\u5f0f\u5b66\u4e60\uff1a\u4ea4\u53c9\u53e3\u81ea\u52a8\u9a7e\u9a76','', '\u751f\u6210\u65f6\u95f4\uff1a'+new Date().toLocaleString('zh-CN'),'','## \u5b66\u4e60\u8fdb\u5ea6',...stages.map((s,i)=>'- ['+(saved.done.includes(i)?'x':' ')+'] '+s.name),'','## \u6211\u7684\u89c2\u5bdf\u4e0e\u89e3\u91ca',saved.notes||'\u5c1a\u672a\u586b\u5199\u3002','','## \u6700\u8fd1\u5b9e\u9a8c',...saved.history.map((h,i)=>`${i+1}. ${scenarioName(h.config)}\uff1b${h.config.policy==='cautious'?'\u4fdd\u5b88\u8ba9\u884c':'\u7d27\u51d1\u95f4\u9699'}\uff1b\u901f\u5ea6 ${h.config.speed} m\/s\uff1b\u65f6\u57df ${h.config.horizon} s\uff1b\u9608\u503c ${h.config.confidence}\uff1b${outcome(h.result)}\uff1b\u8017\u65f6 ${h.time} s\uff1b\u6700\u5c0f\u51c0\u95f4\u8ddd ${h.gap} m\uff1b\u505c\u8f66\u7b49\u5f85 ${h.wait} s\u3002`),'',saved.history.length?'':'\u5c1a\u65e0\u5df2\u7ed3\u675f\u5b9e\u9a8c\u3002','## \u9002\u7528\u8303\u56f4','\u672c\u62a5\u544a\u6765\u81ea\u6d4f\u89c8\u5668\u5185\u4e8c\u7ef4\u6559\u5b66\u4eff\u771f\uff0c\u4f7f\u7528\u6a21\u62df\u611f\u77e5\u3001\u5300\u901f\u9884\u6d4b\u3001\u89c4\u5219\u8ba9\u884c\u3001\u53c2\u8003\u8def\u5f84\u4e0e\u8f66\u8f86\u8fd0\u52a8\u5b66\u63a7\u5236\u3002\u7ed3\u679c\u4e0d\u662f\u5b98\u65b9\u6a21\u578b\u8bc4\u6d4b\u6216\u771f\u5b9e\u9053\u8def\u5b89\u5168\u8bc1\u660e\u3002','', '\u9879\u76ee\u9875\u9762\uff1a'+location.href.split('?')[0]].join('\\n');download('OnSite-\u4ea4\u53c9\u53e3\u5b66\u4e60\u62a5\u544a.md',text,'text\/markdown;charset=utf-8');toast('\u5b66\u4e60\u62a5\u544a\u5df2\u5bfc\u51fa\u3002');});\n$('csv').addEventListener('click',()=>{if(!reportTrace.length)return;const cols=['t','x','y','speed','acceleration','steering','decision'];const text='\\uFEFF'+cols.join(',')+'\\n'+reportTrace.map(r=>cols.map(k=>r[k]).join(',')).join('\\n');download('OnSite-\u6700\u8fd1\u5b8c\u6210\u5b9e\u9a8c\u8f68\u8ff9.csv',text,'text\/csv;charset=utf-8');toast('\u5df2\u5bfc\u51fa\u6700\u8fd1\u4e00\u6b21\u7ed3\u675f\u5b9e\u9a8c\u7684\u8f68\u8ff9\u3002');});\nconst cards=[['DATASET \u00b7 \u771f\u5b9e\u6570\u636e','OnSiteVRU','\u8d70\u8fdb\u771f\u5b9e\u4ea4\u53c9\u53e3\u7684\u6df7\u5408\u4ea4\u901a\uff0c\u7406\u89e3\u8f66\u8f86\u3001\u9a91\u884c\u8005\u4e0e\u884c\u4eba\u7684\u8f68\u8ff9\u3002',resources.vru,'\u63a2\u7d22\u6570\u636e\u96c6'],['SCENARIO \u00b7 \u4ea4\u4e92\u573a\u666f','InterHub','\u56f4\u7ed5\u9ad8\u5bc6\u5ea6\u4ea4\u4e92\u4e8b\u4ef6\uff0c\u5206\u6790\u66f4\u5177\u6311\u6218\u6027\u7684\u9884\u6d4b\u4e0e\u89c4\u5212\u95ee\u9898\u3002',resources.interhub,'\u63a2\u7d22\u4ea4\u4e92\u573a\u666f'],['EVALUATION \u00b7 \u8bc4\u6d4b\u5b9e\u8df5','OnSite \u51b3\u7b56\u89c4\u5212\u6392\u884c\u699c','\u4e86\u89e3\u73b0\u6709\u7b97\u6cd5\u7684\u8bc4\u6d4b\u8868\u73b0\uff0c\u5c06\u8bfe\u5802\u89c2\u5bdf\u5ef6\u4f38\u5230\u6a21\u578b\u6bd4\u8f83\u3002',resources.leaderboard,'\u67e5\u770b\u8bc4\u6d4b\u7ed3\u679c']];\n$('resource-grid').innerHTML=cards.map(c=>`<a class=\"op-resource-card\" href=\"${c[3]}\" target=\"_blank\" rel=\"noopener\"><small>${c[0]}<\/small><strong>${c[1]}<\/strong><p>${c[2]}<\/p><span>${c[4]} \u2197<\/span><\/a>`).join('');\nif(!storageOK)$('storage').textContent='\u5f53\u524d\u6d4f\u89c8\u5668\u65e0\u6cd5\u4fdd\u5b58\u8bb0\u5f55\uff0c\u8bf7\u5728\u79bb\u5f00\u524d\u5bfc\u51fa\u62a5\u544a\u3002';choose(0);progress();history();reset();requestAnimationFrame(frame);\n})();\n\n<\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":6,"featured_media":0,"parent":47,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"100-width.php","meta":{"inline_featured_image":false,"iawp_total_views":53,"footnotes":""},"class_list":["post-2629","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/110.42.248.92\/onsite-learning-center\/wp-json\/wp\/v2\/pages\/2629"}],"collection":[{"href":"http:\/\/110.42.248.92\/onsite-learning-center\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/110.42.248.92\/onsite-learning-center\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/110.42.248.92\/onsite-learning-center\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"http:\/\/110.42.248.92\/onsite-learning-center\/wp-json\/wp\/v2\/comments?post=2629"}],"version-history":[{"count":1,"href":"http:\/\/110.42.248.92\/onsite-learning-center\/wp-json\/wp\/v2\/pages\/2629\/revisions"}],"predecessor-version":[{"id":2630,"href":"http:\/\/110.42.248.92\/onsite-learning-center\/wp-json\/wp\/v2\/pages\/2629\/revisions\/2630"}],"up":[{"embeddable":true,"href":"http:\/\/110.42.248.92\/onsite-learning-center\/wp-json\/wp\/v2\/pages\/47"}],"wp:attachment":[{"href":"http:\/\/110.42.248.92\/onsite-learning-center\/wp-json\/wp\/v2\/media?parent=2629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}