diff --git a/.zcode/plans/plan-sess_cf390556-4ef3-4ce6-b91e-782aee1718f9.md b/.zcode/plans/plan-sess_cf390556-4ef3-4ce6-b91e-782aee1718f9.md deleted file mode 100644 index f0e3c24..0000000 --- a/.zcode/plans/plan-sess_cf390556-4ef3-4ce6-b91e-782aee1718f9.md +++ /dev/null @@ -1,87 +0,0 @@ -# 分层强化学习(HRL)实施计划 — 2026 高教社杯 B 题第三、四问 - -## 0. 现状与复用决策 - -仓库已有生产级基建,**全部复用、不重写**: - -| 现有组件 | 位置 | 用途 | -|---|---|---| -| `SimulatorClient`(HTTP+JSON、幂等重试、截止时钟、JSONL 日志) | `src/mcm26b/protocol/` | 模拟器对接(prompt 第 1 步已完成) | -| 本地评测机(内存回环,一局秒级) | `referee/` + `harness.LocalSimTransport` | 本地简化环境内核 | -| 网格幸存集滤波(真源保留定理已证明) | `src/mcm26b/particles.py` | 每频道信念后验 | -| 凸候选集 + 五状态机 | `src/mcm26b/belief/` | 频道状态观测 | -| 信息增益选点、TSP 2-opt、六边形覆盖、清除证书、后备清除 | `src/mcm26b/planner/` | 候选生成器 + 证书审批兜底 + 启发式基线 | -| 单步 MaskablePPO 全套(特征/掩码/BC/训练/审计) | `src/mcm26b/rl/` + `scripts/` | 代码模式模板 + 端到端对照基线 | - -**改进方向**(来自 v2 审计文档已知局限):单步 RL 只做选点、学不到全场调度;Q4 后备清除偏多、尾部退化(13778s→11797s,距 4000s 目标远)。HRL 高层正是补**跨频道全场调度**决策。 - -**已确认的三个决策**:① 代码集成到 `src/mcm26b/hrl/`(README 给出与 prompt 目录树的映射表);② 低层为字面 8 方向 PPO + 直线控制器对照(诚实预期:部署时只提交终点,低层对虚拟时间增益≈0,价值在架构完整性与消融验证);③ 本次跑通全流程 + 短程训练(1–2h),完整课程训练交付脚本由用户自行启动。 - -## 1. 新建文件 - -``` -src/mcm26b/hrl/ -├── __init__.py -├── constants.py # HRL 接口常量:N_CANDIDATES=96、观测维度,feature_version=3 -├── candidates.py # 高层候选生成:待清除源/信息增益探索点/覆盖验证点/Q4 扇区探测点 + 动作掩码 -├── features.py # 高层观测(20 频道×14 统计 + 全局标量 + 96×6 候选特征 ≈864 维)、低层观测 -├── policy.py # HighLevelPolicy/LowLevelPolicy 加载器(沿用 PointSelectionPolicy 元数据校验模式) -├── low_level_env.py # 低层训练环境:随机起点→子目标,Discrete(8),逐步计费,奖励=−Δd−转向+到达 -├── hierarchical_env.py # 高层整场环境:10–16 源,动作=子目标槽位,内嵌低层执行器,域随机化+课程参数 -└── executor.py # 子目标执行器:低层 PPO 步进(本地计费)或直线控制器(可切换),终点提交模拟器 - -scripts/ -├── train_hrl_low.py # 低层:BC 克隆直线控制器热启动 → MaskablePPO 微调;直线对照评估 -├── train_hrl_high.py # 高层:4 阶段课程(--stage --resume --timesteps),SubprocVecEnv 并行 -├── pretrain_hrl_expert.py # 可选:从 BayesLoop 调度器克隆 (obs, 子目标) 对热启动高层 -├── tune_hrl.py # Optuna TPE(prompt §10 搜索空间,预算 15–20 trials,初值复用 bayes 已调参数) -├── benchmark_hrl.py # 配对消融:HRL vs bayes/directional/单步 PPO,dev(700-702)/val(91000-91005)/stress 固定场景 -└── ablate_hrl.py # 四项消融:无信息增益奖励/无动作掩码/无课程/无粒子滤波 - -src/mcm26b/planner/hrl_loop.py # HRLLoop 运行时闭环(Q3/Q4),保留证书审批与异常留痕 -src/mcm26b/cli.py # 新增 --strategy hrl / --q4-strategy hrl / --hrl-model -tests/test_hrl.py # 特征布局、掩码、环境形状、奖励恒等式、训练-部署观测一致性 -docs/hrl.md # 设计文档 + prompt 目录树映射表 -docs/paper/ 增补 # 算法流程图、伪代码、超参表、训练曲线 -``` - -## 2. 核心设计 - -**高层动作空间** Discrete(96) + 掩码:槽位按固定顺序填充(已定位待清除源 ≤16 → PF 驱动探索点 → 覆盖网格未验证点 → Q4 扇区探测点),空槽/已清除频道/接收盘外候选掩码 −∞。 - -**高层观测**(≈864 维,参照 v2 的 401 维布局模式):20 频道 × 14 特征(六状态 one-hot、MEC μx/μy、σx/σy/ρ、log 幸存格数、期望信息增益、距离、频道号)+ 全局 8 维(位置、时间比例、已清除数、最近检测结果编码/示向度/距离)+ 96×6 候选特征。 - -**step 语义**:高层选子目标 → executor 步进(低层 8 方向,每步 ≤100m,本地按 Δd/5 计费;部署时仅终点调模拟器)→ 按子目标类型执行 /measure 或 /clear → belief+PF 更新 → 奖励。 - -**奖励**:`r = −Δ虚拟耗时/100 + 100·清除 + 5·新检测 + w_info·ΔH − 冗余惩罚`,主口径与目标函数(虚拟时间)一致;w_info 可消融。 - -**课程 4 阶段**(prompt §7.1):1 源/5 频道/无噪 → 3 源/10 频道/±0.5° → 8 源/16 频道/±1° → 10–16 源/20 频道/±1°;每阶段迁移上阶段权重,Q4 从 Q3 权重微调(定向比例递增),域随机化贯穿(源位置/频道/r_eff/朝向/噪声种子)。 - -**运行时闭环 HRLLoop**:初始覆盖相位(快速发现信号)→ 主循环高层决策(证书达标自动 /clear,与 BayesLoop 同语义)→ 全清即 /exit。不触碰候选集更新与清除判定的守恒性(真源保留定理依赖),异常留痕兜底保留。 - -## 3. 实施顺序(对应 prompt §12) - -1. `constants.py` + `candidates.py` + `features.py`(候选/掩码/观测)+ 单元测试 -2. `low_level_env.py` + `train_hrl_low.py`:低层短程训练,验证收敛到近直线(报告与直线最优的差距) -3. `hierarchical_env.py` + `executor.py` + `hierarchical_env` 单元测试(奖励恒等式:回合回报 = f(虚拟时间、清除数)) -4. `train_hrl_high.py` + 课程 + 域随机化 + SubprocVecEnv;`pretrain_hrl_expert.py` BC 热启动 -5. 短程课程训练(每阶段 2–5 万步,总计 1–2h),产出训练曲线 -6. `hrl_loop.py` + CLI 接入,`--local-judge` 本地演练验证全清正确性 -7. `benchmark_hrl.py` 配对对比(沿用 benchmark_rl.py 的 all_valid 有效口径)+ `ablate_hrl.py` 四项消融 -8. `tune_hrl.py` 受限 Optuna;产出最佳超参表 -9. 本地 referee 演练 ×3/题,表 1 格式结果(案例编码/清除数/平均定位清除时间/程序运行时间),日志 JSONL 原样归档 `output/hrl/` -10. `docs/hrl.md`、README 更新、论文素材(流程图/伪代码/超参表/对比分析,含"为什么分层 PPO、为什么非端到端、为什么非多智能体"论证) - -## 4. 验收标准 - -- 全部 pytest 通过(现有 243 项 + 新增 HRL 测试) -- `benchmark_hrl.py` 输出 all_valid=true(真值全清、缺席无误判、零异常、正常 exit、计时复算一致) -- 短程训练下 Q4 HRL 相对 directional 有可测改进方向(对标单步 RL 的 −14.38%);Q3 如实报告与 bayes 的差距(v2 审计口径:Q3 RL 无稳定增益) -- 所有实验固定种子、命令可复现;消融表含均值±方差(≥5 种子) -- 完整训练只需用户执行 `scripts/train_hrl_high.py --full` 级别的命令 - -## 5. 风险与对策 - -- **高层整场回合过长(100–200 决策步)不收敛** → γ=1 + 密集 Δcost 奖励 + BC 从 bayes 调度器热启动 -- **低层增益≈0** → 如实消融报告(直线对照差异≈0),论文定位为架构必要性验证而非性能来源 -- **Q3 可能无增益** → 与 v2 口径一致如实报告,主打 Q4 调度收益;两种策略可共存(HRL 不改默认策略,仅在胜出后由用户决定切换默认) diff --git a/README.md b/README.md index 7c939fd..e01ef0c 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,8 @@ - [协议规则表、字段表与状态机(P0 交付)](docs/协议规则表与状态机.md) - [问题一完整解答](docs/问题一解答.md) - [问题三搜索与总耗时改进方案(含七点覆盖证明和自建消融)](docs/algo-3.md) -- [问题3/4 强化学习选点(PPO + CUDA)](docs/algo-rl.md) -- [强化学习审核、修复与独立验证(2026-09-11)](docs/强化学习适用性审核与改进-20260911.md) -- [HRL 优化方案与 Sol 执行指南(含当前缺口、命令和验收门槛)](docs/hrl-sol-execution.md) -- [HRL P0+P1 执行报告(本轮实际命令、smoke 与多轮本地测试)](docs/hrl-p1-execution-report.md) +- [第三、四问系统性架构优化与运行提速方案(运行历史复核、最小命中集、联合信念)](docs/第三四问架构优化与运行提速方案.md) +- [第三、四问图论与动态规划优化方案(定点实测、路由 gap、定向定位 DP、证书硬化)](docs/第三四问图论与动态规划优化方案.md) - [论文](docs/paper/main.tex) ## 项目结构 @@ -25,13 +23,12 @@ src/mcm26b/ ├── belief/ # P3 逐频道候选集合 K_c:保守外包多边形 + 半平面裁剪(已完工) ├── coverage/ # P4 49点覆盖账本(网格生成 + 逐频道记录) ├── planner/ # P3 保证接收盘选点器 / P4 全向闭环 / P5 混合源定向闭环(已完工) -│ # P6b RL 接入:planner/rl_loop.py(PPO 选点,惰性加载 torch) -├── rl/ # P6b 强化学习扩展:训练环境、观测/候选特征、PPO 模型加载(可选依赖) +├── routing.py # 图论/DP 工具箱:Held-Karp 精确开放路径、2-opt/Or-opt、MST 下界、路由度量 ├── evaluation/ # 日志复算与统计(已完工) └── harness/ # 测试侧适配:评测机<->Transport 内存回环、故障注入、回放、场景 tests/ # pytest(含解耦守卫:运行时零导入 referee + 规则表不漂移) scripts/ # 采集、基准、可视化与校核脚本(含问题四批量仿真 benchmark_q4.py、 - # RL 训练 train_rl.py 与 RL 配对消融 benchmark_rl.py) + # 运行历史计时分解 analyze_run_timing.py、第四问覆盖证书 verify_q4_cover.py) output/ examples/ # 演练证据、算例与生成产物 ``` @@ -71,29 +68,11 @@ Python ≥ 3.10,运行时依赖仅 `requests`;测试/自检另需 `pytest` ```bash uv sync # 安装(可编辑挂载本包与 referee) -uv sync --group rl --group dev # 追加 RL 依赖:torch(CUDA)+stable-baselines3+gymnasium uv run pytest # 全部测试(含 referee 90 项 + 解耦守卫) uv run python -m referee # 起本地评测机(可选,配合 WebUI 回放) uv run mcm26b sim-check # P0 自检:复现附件计时示例 105/111/194/199 uv run mcm26b run --robot-id 2026001 --self-test # 问题3自检:随机全向场景闭环(不连官方) uv run mcm26b run --robot-id 2026001 --self-test --problem 4 # 问题4自检:混合定向源场景 -# RL 策略(需先安装 rl 依赖组并训练模型;详见 docs/algo-rl.md): -uv run python scripts/train_rl.py --problem 3 --timesteps 120000 # PPO + CUDA 训练 Q3 选点 -uv run python scripts/pretrain_rl_expert.py --problem 4 --episodes 3000 # 自建模拟器专家行为克隆 -uv run python scripts/train_rl.py --problem 4 --timesteps 40000 --init output/rl/q4_ppo_bc_init.zip -uv run mcm26b run --robot-id 2026001 --self-test --strategy rl # 问题3 RL 闭环 -uv run mcm26b run --robot-id 2026001 --self-test --problem 4 --q4-strategy rl # 问题4 RL 闭环 -uv run python scripts/benchmark_rl.py --seeds 5 # RL vs 手写策略配对消融 -uv run python scripts/verify_rl_practice.py output/rl/official-practice/q4/20260911-rl-bc-01 -uv run python scripts/benchmark_hrl.py --variants hrl_heuristic,bayes,directional \ - --manifest output/hrl/manifests/dev.json --output output/hrl/p1-heuristic -uv run python scripts/train_hrl_high.py --problem 3 --stage 1 --timesteps 2048 \ - --envs 1 --vec-env dummy --device mps --config-profile production \ - --reward-profile time --model output/hrl/p1-smoke/q3.zip --eval-episodes 2 -# 训练前端(本地回环 Web UI):实时进程/进度/参数收敛曲线,详见 docs/training-ui.md -uv run python -m mcm26b.training_ui --ui-port 8036 # http://127.0.0.1:8036 -uv run mcm26b run --robot-id 2026001 --self-test --strategy hrl \ - --hrl-model output/hrl/p1-smoke/q3.zip --hrl-device mps # 自检默认:源数按题面 10~16 随机;实机预算 30 分钟(--real-budget-s 可改,仅自检生效); # 找全后持续复扫未清除频道直到限时(--config 关闭 persistent_search 可回到"找全即退") uv run mcm26b run --robot-id <队号> --log output/run/session.jsonl # 对接模拟器正式/演练 @@ -159,7 +138,24 @@ client.exit() | P4 问题3全向闭环(49点覆盖、定位队列、清除、停止) | ✅ 官方问题3演练单案例通过(10/10全清,[验证报告](output/q3/practice/20260911-port2026/report.md)) | | P5 问题4定向扩展(联合约束、后备清除、预算) | ✅ 自建完成(官方演练待执行) | | P6 加速与消融 | ✅ 七点批量(`--strategy seven`,官方演练 12/12)+ 贝叶斯闭环(`--strategy bayes` 默认,自建消融 −30.0%,[算法说明](docs/algo-3-bayes.md)) | -| P6b RL 选点 | ✅ PPO+CUDA 训练环境/闭环接入/官方+自建演练验证/专家 BC 初始化(Q3 `--strategy rl`,Q4 `--q4-strategy rl`,[算法说明](docs/algo-rl.md)) | +| P7 图论/动态规划优化(S1–S5) | ✅ 已落地([实测回填](docs/第三四问图论与动态规划优化方案.md#8-本轮实测回填2026-09-12-实施结果)):路由度量入库、覆盖证书硬化(15 m/72 缺口 566→0)、Q4 后备盲清 125.7→4.3 次/局;同时修复联合信念 `no_signal` 朝向规则反向缺陷 | + +### 图论/DP 轮(2026-09-12,S1–S5)要点 + +- **S1 度量**:`scripts/run_suite.py` 逐局新增 `route_gap_vs_offline`、 + `route_lower_bound_s`(MST 下界)、`distinct_service_points`、 + `coverage_actual_visited`、`probe_no_signal_ratio`、`plan_verify_wall_s`; + 图算法在 `src/mcm26b/routing.py`(Held-Karp 精确 / 2-opt / Or-opt / Prim)。 +- **S2 证书**:`q4_mincover_v2`(31 点,`r_design=965 m` + 前向角裕量 5°, + 15 m/72 档 325.6 万 (p,h) 缺口 0,最坏命中 990 m),取代粗采样过拟合的 + `q4_mincover_v1`(25 m/48 档 125 缺口)。 +- **S3 探点**:默认口径改为"可见候选里移动最省"(`probe_score_mode=nearest_visible`); + 后备盲清 125.7 → 4.3 次/局,Q4 core 均值 8676 → 8602 s、最坏 10891 → 9630 s。 +- **S4/S5 负面结论**:后备清除 Or-opt、Held-Karp 精确任务序、路线感知探点 + 在本模拟器上均为净负收益,默认关闭,代码与开关保留(见方案 §8.6)。 +- **正确性修复**:`belief/joint.py` 的 `no_signal` 朝向裁剪原先规则反向且漏计格内 + 角裕量,会删掉真源朝向档;已修复并由 `tests/test_joint_belief.py` 的随机观测 + 序列保留性测试固化。 ## 采集与正式测试约束 diff --git a/docs/B题建模分析与实施计划.md b/docs/B题建模分析与实施计划.md index c1857fd..2e90430 100644 --- a/docs/B题建模分析与实施计划.md +++ b/docs/B题建模分析与实施计划.md @@ -194,7 +194,6 @@ AI 的适合用法是把这些模块逐一变成可测试程序、生成边界 | P4 全向闭环 | 49点覆盖记录、定位队列、清除、停止、日志统计 | 10/16源、边界源和错误响应案例;官方演练全清并正常退出 | 自建闭环已完成:`planner.OmnidirectionalLoop`(10/16/0 源、近边界源、预算耗尽、故障注入测试通过);官方演练全清待团队执行 | | P5 定向扩展 | no_signal联合约束、覆盖发现、有限清除后备与预算 | 朝外边界源不漏;真源不误删;格数与退出预算检查 | 已实现:`planner.DirectionalExtension`(49点覆盖对定向源成立、保证接收盘内 no_signal 记为观测到定向、对跖+环探梯子、`fallback_clear_cells` 有限圆盘覆盖后备清除带格数/预算双硬顶);`tests/test_loop_q4.py` 全过;官方混合源演练待执行 | | P6 加速消融 | 共享测点、自适应覆盖、目标排序、提前清除 | 配对案例全清不退化,时间/请求数改善可复算 | 可删减;闭环基线数据已可用于消融对照 | -| P6b RL 选点 | 问题3/4 测量点选择的 PPO+CUDA 训练环境与闭环接入 | 自建全清;与手写策略配对消融有可复算报告 | 已完成:`scripts/train_rl.py`/`benchmark_rl.py`,模型 `output/rl/q{3,4}_ppo.zip`,说明 `docs/algo-rl.md` | | P7 正式与论文 | 固定版本、论文表1、日志原名、上传核查 | 问题3/4各3份正式记录与程序版本对应 | 团队后续安排;本任务不执行正式测试 | 按2026年9月10日起的剩余时间,建议10日补齐P1并衔接P3,11日完成P4自建边界案例与全向演练,12日完成P5及混合源演练;未达验收就删减P6并优先修正闭环。演练不限3次,正式机会为问题3和4各3次。团队在版本稳定后自行安排正式记录,留出失败恢复和论文整理时间。附件建议9月13日15:30前完成正式测试,17:30后不能启动新的演练或正式测试;已进入上传队列的日志仍会继续上传。此处引用所给附件安排,运行前核对模拟器界面公告;这份排期不改变当前禁止使用正式测试的限制。 diff --git a/docs/algo-rl.md b/docs/algo-rl.md deleted file mode 100644 index bddae47..0000000 --- a/docs/algo-rl.md +++ /dev/null @@ -1,167 +0,0 @@ -# 问题3/4 强化学习选点(PPO + CUDA) - -## 0. 摘要 - -**2026-09-11审核更新:**本文件下方的训练成绩与BC准确率是第一版历史记录。 -复核发现训练/部署特征错位、BC激活函数不一致以及评测只检查completed等问题。 -当前修复、Maskable PPO新模型和独立配对验证见 -[强化学习适用性审核与改进](强化学习适用性审核与改进-20260911.md)。 -新模型未替换原默认检查点;通过`--rl-model`显式加载。 - -本项目在保持 P0–P5 保守性与可解释证明不变的前提下,为问题3(全向源)与 -问题4(定向源)增加了一个可选的**强化学习测量点选择策略**: - -- 把“下一检测点去哪”建模为离散动作的局部决策问题;401维特征是压缩观测, - 不能认定为完整马尔可夫状态,尤其第四问仍有未知朝向和被省略的历史约束; -- 状态由逐频道信念的几何特征 + 60 个候选检测点的几何特征组成(401 维); -- 动作为 60 选 1(保证接收盘环候选、对称交会候选、定向遮挡环探候选); -- 使用 Stable-Baselines3 的 PPO 训练,MLP 策略与价值网络在 **CUDA GPU** - (本机 RTX 4060 Laptop, CUDA 12.8 / torch 2.11.0+cu128)上更新; -- 训练环境基于自建评测机 `referee`(内存回环,与真实 HTTP 协议同边界); -- 运行闭环仅替换既有选点排序器,覆盖证明、清除证书、定向后备清除全部保留。 - -历史结果(第一版自建配对消融,5 个种子):Q3 用 12 万步随机初始化 PPO(与 `bayes` -基本持平,+1.18%);Q4 用**专家行为克隆初始化 + PPO 微调**,混合源平均 -虚拟时间相对 `directional` 基线降低 **7.16%**(14250.1s → 13230.2s)。 -Q3 的 BC 初始化在消融中反而退化,因此保留随机初始化模型;Q4 的 BC 初始化 -是当时五场比较中均值最好的版本。官方演练验证见 §5:两次 Q4 演练(3 定向混合源、10 定向全定向 -场景)与一次 Q3 演练均全清,且通过离线审计。 - -## 1. 环境搭建(CUDA) - -```powershell -# 安装可选依赖组 rl(PyTorch CUDA 12.8 + stable-baselines3 + gymnasium) -uv sync --group rl --group dev - -# 验证 CUDA -uv run python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))" -``` - -`pyproject.toml` 中 `[tool.uv.sources] torch = { index = "pytorch-cu128" }` -与 `[[tool.uv.index]]` 指向 PyTorch 官方 CUDA 12.8 轮子;下载约 2.6 GB, -首次同步建议 `$env:UV_HTTP_TIMEOUT='300'`。默认 PyPI 的 Windows torch 轮子 -为 `+cpu`,可以使用CPU训练;本轮修订模型即采用CPU,CUDA并非训练前提。 - -## 2. 第一版局部决策环境 - -训练环境:`src/mcm26b/rl/env.py::LocalizationEnv`。 - -| 项 | 定义 | -| --- | --- | -| 初始状态 | 自建模拟器随机布设一个源(Q3 全向;Q4 定向比例可调,训练默认 1.0),机器狗完成一次保证得到 `direction` 的首测 | -| 观测 | 401 维:21 个全局特征 + 20 维频道 one-hot + 60×6 维候选点特征(见 `features.py`) | -| 动作 | `Discrete(60)`:0=候选集 MEC 圆心,1..36=保证接收盘 3 环×12 方向,37..51=对称交会 15 点,52..59=定向遮挡环探 8 点 | -| 转移 | 按动作位置调用 `/measure`,用 `BeliefState` 保守更新候选集;Q4 保证接收盘内 `no_signal` 记为朝向遮挡并进入 `blocked` 序列;证书达标后自动 `/clear`;遮挡梯子用尽后模拟 20m 网格后备清除 | -| 奖励 | `-Δvirtual_time/100`(移动+检测+换频+清除真实耗时)、候选半径收缩加成、首次遮挡证据 +2、重复测点 -0.75、清除成功 +10、失败/截断负奖励 | - -约束说明:候选点全部来自既有几何生成器(`planner.candidate_points`、 -`planner.safe_disk_radius`、定向环探梯子),RL 不生成新的空间候选;它只做 -排序。清除仍须通过几何证书;但“保证收到方向”只适用于全向源且实际点位于 -距离保证盘内。第一版的52—59号环探点可能在盘外,第四问的定向遮挡也不受 -距离盘保证。v2对第三问加入盘外动作屏蔽,第四问保留探索分支。 - -## 3. 训练与自建模拟器逻辑利用 - -```powershell -# 1) 用自建模拟器上的手写专家生成 (观测, 动作) 并行为克隆 -uv run python scripts/pretrain_rl_expert.py --problem 3 --episodes 3000 -uv run python scripts/pretrain_rl_expert.py --problem 4 --episodes 3000 - -# 2) 从当前v2 BC初始化继续普通PPO(算法类型需显式匹配) -uv run python scripts/train_rl.py --problem 4 --algorithm ppo --timesteps 40000 \ - --init output/rl/q4_ppo_bc_init.zip - -# Q3 保留随机初始化长训练版本: -uv run python scripts/train_rl.py --problem 3 --timesteps 120000 -``` - -专家逻辑与自建模拟器同源:Q3 用 worst-posterior 选点器,Q4 用对跖/环探 -遮挡梯子;`pretrain_rl_expert.py` 在 `LocalizationEnv` 上记录每个状态的 -专家动作,训练与 PPO policy_net/action_net 同构的 MLP,再把权重拷入 PPO -作为初始化。产物位于 `output/rl/bc/` 与 `output/rl/q{3,4}_ppo_bc_init.zip`。 - -实测:Q3 专家数据 5141 条、BC 验证准确率 38.9%,微调后自建消融退化 -(保留 12 万步随机初始化模型);Q4 专家数据 14181 条、BC 验证准确率 -65.3%,微调后自建消融从 −3.84% 提升到 **−7.16%**。但审核确认BC与PPO的 -激活函数不一致,这些数字不能证明成功迁移了专家策略,也不足以判断全向分支已最优。 - -输出:`output/rl/q3_ppo.zip`、`output/rl/q4_ppo.zip` 及同名 JSON 报告; -训练脚本先打印 `train_start`(含 device/gpu 字段),再执行 PPO 并在独立 -种子场景上确定性评估成功率、平均步数与平均回报。Q4 4 万步微调约 236s; -Q3 12 万步约 625s(RTX 4060 Laptop,2 个 CPU 环境)。 - -## 4. 运行闭环接入 - -- Q3:`uv run mcm26b run --robot-id 2026001 --self-test --strategy rl` - `RLBayesLoop` 继承 `BayesLoop`(七点覆盖 + 网格粒子滤波 + 滚动 2-opt), - 仅 `_select_point` 改由 PPO 输出候选编号。 -- Q4:`uv run mcm26b run --robot-id 2026001 --self-test --problem 4 --q4-strategy rl` - `RLDirectionalLoop` 继承 `DirectionalExtension`(49 点覆盖 + 遮挡梯子 + - 20m 有限圆盘后备清除),仅 `_next_probe` 改由 PPO 输出。 -- 模型加载时校验观测 401 维 / 动作 60 维,失配直接拒绝运行。 -- 默认运行路径不导入 torch/referee;只有显式选择 `rl` 才惰性导入,项目 - 运行时依赖仍保持 `requests` 一项。 - -## 5. 消融基准 - -```powershell -uv run python scripts/benchmark_rl.py --seeds 5 -``` - -同种子同场景配对比较,结果写入 `output/rl/benchmark.json`。以下为第一版历史结果: - -| 场景 | 基线 | 平均虚拟时间(基线 / RL) | 相对差 | 全清 | -| --- | --- | --- | --- | --- | -| Q3(10 源全向 ×5 种子,scratch PPO) | `bayes` | 3088.3s / 3124.8s | +1.18% | 5/5 | -| Q4(10 源、3 定向 ×5 种子,BC+PPO) | `directional` | 14250.1s / 13230.2s | −7.16% | 5/5 | - -训练局评估:Q3 单源 40 局成功率 100%、平均 3.55 步;Q4 定向单源 40 局 -成功率 90%、平均 4.45 步;其余单源训练局未完成,不能由此宣称已兜底成功。随机策略对照: -Q3 平均回报 13.28 vs PPO 17.71;Q4 平均回报 8.72 vs BC+PPO 12.62。 - -### 5.1 官方模拟器演练验证(仅演练,未触碰正式测试) - -使用目录内官方 `jammers-simulator-full` 的**演练测试**(不限次数),通过 -官方 HTTP 接口运行同一闭环;官方产物按原名归档并离线审计: - -| 问题 | 案例 | 场景真值(演练结束后可见) | 结果 | 虚拟时间 | 请求数 | 审计 | -| --- | --- | --- | --- | --- | --- | --- | -| Q3 | `F38Y-9Q9J-B82V-CB9Z` | 13 全向 | 13/13 全清 | 3538.8s | 124 | ✅ | -| Q4 | `X43X-VMRF-8GRZ-3SYA` | 7 全向 + 3 定向 | 10/10 全清 | 14003.1s | 619 | ✅ | -| Q4(BC) | `BXSA-TFQ3-2DJ6-DHH7` | **10 定向** | 10/10 全清 | 14562.8s | 691 | ✅ | - -前两次为随机初始化模型,第三次为 BC 初始化微调模型。两个 Q4 官方案例的 -源构成不同(3 定向 vs 10 定向),**虚拟时间不可直接相减比较**;可确认的 -是 RL 在官方混合源与全定向源演练中都能完成全部清除,且 -`all_timestamps_match_microsecond_recomputation`、官方 `.jlog` 的 -SHA-256 校验全部通过。归档目录:`output/rl/official-practice/`。 - -### 5.2 自建 referee 演练验证 - -`uv run mcm26b run --local-judge` 走自建 referee 的 `q3_practice` / -`q4_practice` 模块(与官方相同的演练生命周期,真值在结束后可见): - -| 问题 | 案例 | 场景 | 结果 | 虚拟时间 | 归档 | -| --- | --- | --- | --- | --- | --- | -| Q3 | `FKUY-K8KJ-RXRL-FMBM` | 10 全向 | 10/10 全清 | 3317.6s | `output/rl/local-practice/q3/20260911-rl-01` | -| Q4 | `3J8T-L9GY-HRGL-LYVZ` | 7 全向 + 3 定向 | 10/10 全清 | 11942.8s | `output/rl/local-practice/q4/20260911-rl-01` | -| Q4(BC) | `VM2G-UVC6-4N7R-TVGW` | 7 全向 + 3 定向 | 10/10 全清 | 12520.8s | `output/rl/local-practice/q4/20260911-rl-bc-01` | - -不同案例仍不可直接比较;成对可比的提升证据是 §5 的 5 种子同场景消融。 - -## 6. 结论与边界 - -以下是第一版结论;BC权重拷贝缺陷使“同构初始化”的解释不成立,性能判断 -应以新审核报告的同场景验证及不确定性为准,而不能由BC分类准确率推出。 - -- RL 已接入问题3/4 完整闭环,并在自建 referee 演练与官方模拟器演练中 - 全清验证;这是方法验证,不是对正式成绩的承诺。 -- 第一版Q4的BC初始化后均值变化为−3.84% → −7.16%,但初始化存在激活函数 - 缺陷,样本数也不足以支持“明确收益”的归因;当前判断见新审核报告。 -- 训练环境使用自建场景假设(源均匀分布、逐点固定误差场、定向源朝向随机); - 官方隐藏分布未必相同。正式测试仍应默认使用经过演练验证的手写策略; - `--strategy rl` / `--q4-strategy rl` 适合消融、方法对比与后续调参。 -- 官方演练仅使用“演练测试”按钮与开放接口,从未点击“正式测试”;官方 - `.jlog/.result.json` 保持原样,未解密。 -- 保守性不变式:RL 只改变选点排序,不改变覆盖账本、候选集更新、清除证书 - 与后备清除的数学证明;所有策略均以 `/exit` 与完整日志收尾。 diff --git a/docs/hrl-p1-execution-report.md b/docs/hrl-p1-execution-report.md deleted file mode 100644 index 1be4011..0000000 --- a/docs/hrl-p1-execution-report.md +++ /dev/null @@ -1,117 +0,0 @@ -# HRL P0+P1 执行报告(本地自建评测机) - -日期:2026-09-11(本机工作区) -范围:按用户确认,仅完成 P0 正确性回归 + P1 最小可训练/可评测闭环; -P2 的 BC、完整课程长训、Optuna、正式消融与正式测试表留待下一阶段。 - -## 1. 本轮代码交付 - -| 文件 | 内容 | -| --- | --- | -| `scripts/benchmark_hrl.py` | 同一 manifest 真值场景复用;`hrl`/`hrl_heuristic`/`bayes`/`directional` 配对评测;写 `results.json`、`aggregate.json/csv`、每局 `summary.json` 与 `session.jsonl` | -| `scripts/train_hrl_high.py` | 高层 MaskablePPO 训练;`--problem/--stage/--envs/--vec-env/--device/--config-profile/--reward-profile/--model/--resume/--init/--eval-manifest`;模型元数据固化 feature/action/reward 版本;墙钟硬上限 | -| `src/mcm26b/hrl/constants.py` | 新增 `ACTION_LAYOUT_VERSION=1`、`REWARD_VERSION=1` | -| `src/mcm26b/hrl/policy.py` | 高层模型严格校验元数据;低层模型保持独立基础校验 | -| `src/mcm26b/cli.py` | 新增 `--strategy hrl`、`--q4-strategy hrl`、`--hrl-model`、`--hrl-low-model`、`--hrl-device`、`--trace-low` | -| `src/mcm26b/hrl/hierarchical_env.py` | 新增 `HRLReward.time_only()`:P0.4 建议的纯时间目标,去掉逐源清除/发现/熵减塑形 | -| `project/` | 严格目录树薄兼容层,转发真实实现,不复制算法 | -| `tests/test_hrl_p1.py` | manifest 往返、真值隔离、纯时间奖励、project re-export 回归 | - -## 2. 全量回归 - -```bash -.venv/bin/python -m pytest -q --tb=short -# 275 passed in 124.57s -``` - -## 3. P1 smoke 训练(本机 Apple MPS) - -```bash -.venv/bin/python scripts/train_hrl_high.py \ - --problem 3 --stage 1 --timesteps 2048 --seed 320001 \ - --envs 1 --vec-env dummy --device mps \ - --config-profile production --reward-profile time \ - --model output/hrl/p1-smoke-time/q3.zip \ - --eval-episodes 2 --rollout-steps 128 --batch-size 128 \ - --n-epochs 3 --max-wall-s 800 --verbose 0 -``` - -结果: - -- `actual_timesteps=2048`,墙钟 `260.069 s`; -- 保存后确定性评估 2/2 成功,`accounted=20`,无异常; -- 模型元数据含 `feature_version=4`、`action_layout_version=1`、 - `reward_version=1`、`reward_profile=time`、`model_sha256`。 - -模型重载已由以下两条路径验证;`--resume` 的 `--timesteps` 是增量步数 -(SB3 `reset_num_timesteps=False` 语义),元数据写 `timesteps_semantics="additional"`: - -```bash -.venv/bin/python -m mcm26b.cli run \ - --robot-id 2026001 --self-test --strategy hrl \ - --hrl-model output/hrl/p1-smoke-time/q3.zip --hrl-device mps \ - --sources 3 --seed 1 --summary-steps 5 - -python scripts/benchmark_hrl.py --variants hrl \ - --hrl-model output/hrl/p1-smoke-time/q3.zip --hrl-device mps \ - --problem 3 --scenes 1 --sources 3 --output output/hrl/p1-bench-hrl -``` - -## 4. 多轮本地配对测试 - -### Q3:3 个独立场景 × 3 个变体 - -```bash -python scripts/benchmark_hrl.py --variants hrl,hrl_heuristic,bayes \ - --hrl-model output/hrl/p1-smoke-time/q3.zip --hrl-device mps \ - --problem 3 --scenes 3 --sources 3 --start-seed 91000 \ - --output output/hrl/p1-multiround-q3 -``` - -| variant | episodes | valid_rate | cleared_mean | virtual_time_mean_s | virtual_time_std_s | program_run_time_mean_s | -| --- | ---: | ---: | ---: | ---: | ---: | ---: | -| bayes | 3 | 1.0 | 3.0 | 2518.371 | 74.183 | 0.748 | -| hrl_heuristic | 3 | 1.0 | 3.0 | 2518.371 | 74.183 | 0.883 | -| hrl | 3 | 1.0 | 3.0 | 3731.380 | 120.536 | 1.853 | - -结论:P1 模型只在 stage 1 单源课程上训练 2048 步,可直接重载并在 3 源场景保持 3/3 有效全清; -但用时明显未优于 bayes/heuristic,符合本轮不做正式性能声明的边界。 - -### Q4:3 个独立混合源场景 × 2 个变体 - -```bash -python scripts/benchmark_hrl.py --variants hrl_heuristic,directional \ - --problem 4 --scenes 3 --sources 3 --directional 1 --start-seed 92000 \ - --output output/hrl/p1-multiround-q4 --force -``` - -| variant | episodes | valid_rate | cleared_mean | virtual_time_mean_s | virtual_time_std_s | program_run_time_mean_s | -| --- | ---: | ---: | ---: | ---: | ---: | ---: | -| directional | 3 | 1.0 | 3.0 | 13442.997 | 263.902 | 1.063 | -| hrl_heuristic | 3 | 1.0 | 3.0 | 12292.198 | 344.827 | 6.284 | - -说明:Q4 高层 PPO 尚未训练;本轮只验证 Q4 的 `hrl_heuristic` 与 `directional` 闭环、真值隔离与计时审计。 - -## 5. P0 状态 - -- `--resume` 重载:16 步起步模型续训 32 增量步后 `actual_timesteps=48`, - 校验 `feature_version/action_layout_version/reward_version` 后保存; - -- 槽位唯一性:`test_hrl.py` 覆盖 channel 17–20 与 1–4 同时 clear/locate 不丢; -- 清除事件一次且仅一次:fallback 成功写 `_step_clears` 已有回归; -- 候选快照:`test_opportunity_measure_precedes_candidate_snapshot` 已覆盖; -- 奖励对齐:新增 `HRLReward.time_only()`,训练脚本默认 `--reward-profile time`; -- 终止/安全网:现有 `HierarchicalEnv` 回合测试继续通过; -- 训练/部署配置:`--config-profile production` 使用生产配置,`coarse-pretrain` - 显式映射到 fast 评分配置并写入模型元数据; -- 依赖守卫:全量测试 275 项在 dev+rl 环境通过。 - -## 6. 未完成 / P2 待办 - -- `scripts/pretrain_hrl_expert.py` 已建可 `--help` 的接口占位,专家轨迹 + BC 功能待实现; -- `scripts/ablate_hrl.py` 已建接口占位,无信息增益/无掩码/无课程/无粒子统计消融待实现; -- `scripts/tune_hrl.py` 已建接口占位,Optuna TPE 搜索待实现; -- Q3→Q4 迁移训练与配对实验; -- 完整 10–16 源课程训练、多个训练种子、冻结测试清单; -- 官方三次正式测试表:必须有真实官方案例码与导出日志后才能填写; - 本地 `referee` 结果只标 `local_self_test`。 diff --git a/docs/hrl-sol-execution.md b/docs/hrl-sol-execution.md deleted file mode 100644 index e2d6c74..0000000 --- a/docs/hrl-sol-execution.md +++ /dev/null @@ -1,267 +0,0 @@ -# HRL 续作执行说明:交给 Sol 的工程任务书 - -适用日期:2026-09-11。工作目录:本仓库根目录。先检查当前代码与本轮测试结果,再按 P0 → P1 → P2 → P3 顺序执行。 - -目标是交付可运行、可审计的整场调度学习系统;训练收益由完整场景验证决定,不把训练脚本存在或局部奖励上升视为完成。 -本说明更新了原粘贴 Prompt 与 `.zcode/plans/plan-sess_cf390556-4ef3-4ce6-b91e-782aee1718f9.md` 中不符合现有协议或证据的部分。 - -## 1. 现在有什么,缺什么 - -| 组件 | 当前状态 | Sol 的操作 | -| --- | --- | --- | -| `protocol/`、`referee/`、`harness.py` | 已有客户端、独立评测机、内存回环与计时审计 | 复用,不另建模拟器客户端 | -| `belief/`、`particles.py`、`planner/` | 已有保守候选、网格幸存集、覆盖证明、证书清除与后备清除 | 保持证明前提;改调度时复用 | -| `rl/`、`train_rl.py`、现有 RL 检查点 | 已有单源选点 PPO/MaskablePPO 与完整对照 | 作为局部策略和对照,勿命名为端到端 PPO | -| `hrl/constants.py`、`scheduler.py`、`planner/hrl_loop.py` | 已有高层候选、特征、执行与闭环骨架;存在本轮需修复的 P0 项 | 先完成第 4 节门槛 | -| `hrl/hierarchical_env.py`、`curriculum.py` | 已有训练环境和课程;奖励、终止、训练配置仍需审核 | 在长训前修正,覆盖独立环境/部署一致性 | -| `hrl/low_level_env.py`、`executor.py`、`train_hrl_low.py` | 有八方向到达实验;训练入口尚有掩码等缺陷 | 作为可选离线实验,不能卡住主线 | -| `tests/test_hrl.py` | 有接口和启发式 episode 测试 | 增补行为验证,不能只检验公式与实现一致 | -| `train_hrl_high.py`、`pretrain_hrl_expert.py` | 尚未实现 | P1 编写最小可训练闭环,P2 再加入 BC | -| `benchmark_hrl.py`、`ablate_hrl.py`、`tune_hrl.py` | 尚未实现 | 先评测,再训练,再做消融,最后受限调参 | -| CLI 的 `hrl` 策略和 `--hrl-model` | 当前入口尚未接入 | P1 接入并检验 `--help` 与离线闭环 | -| `output/hrl/` 的高层模型、曲线、评测表 | 本次审阅未发现这些产物 | 不声称已有 HRL 模型或训练成绩 | - -现有证据:修订单步 RL 的 Q3 独立验证均值比 `bayes` 低 0.69%,区间跨 0;Q4 比 `directional` 低 14.38%,比旧 PPO 低 2.26%,后一比较区间跨 0。 -这些来自固定模型、本地 18 场/题的验证;新 Q4 的后备清除次数更多,边界压力性能有退化。详情见 `docs/强化学习适用性审核与改进-20260911.md`。 -没有证据证明 HRL 已优于上述基线,没有证据支持“Q4 迁移节约 80% 训练成本”或“全部合法场景小于 4000 秒”。 - -## 2. 必须纠正的原 Prompt 假设 - -1. `/measure` 与 `/clear` 提交终点,移动按两次实际动作位置间的直线距离除以 5 计费;没有朝向、转弯或八方向移动协议。 -2. 八方向策略仅在本地推演再强制补上终点,无法影响模拟器实际路径;不能把这段推演称为比赛收益来源。 -3. `/clear` 不切换接收机频道,目标频道与当前接收机频道应分别记录;`near` 是测量结果,清除仍需独立请求。 -4. 接收半径逐源未知,动作掩码只能使用观测与保守界,不能读真实半径、源位置、类型或朝向。 -5. Q3 的 `no_signal` 只能按已证明的保守半径规则删格;Q4 的 `no_signal` 可能由方向遮挡造成,不能直接删空间候选。 -6. Q4 联合位置/半径/朝向粒子是后续研究选项;普通二维粒子加“角度门控”并不会自动得到正确联合后验。 -7. 固定地点误差固定;同地重测不是新独立样本。保留读数舍入裕量,不收紧真实的 ±1° 误差界来追求表面收敛。 -8. 源数最多 16 不等于只有 16 个频道;所有按频道编号索引的动作必须覆盖 1–20。 -9. 连续无信号次数不能作为全场结束条件;覆盖参数不能随意调到破坏已证明的发现覆盖。 -10. “无信息增益”“无动作掩码”“无粒子滤波”必须精确定义;不能通过取消清除证书或真源保留约束制造消融。 -11. 原 Prompt 的 6 个状态与实现里的状态枚举不一致;以 `ChannelStatus` 为准,额外 TRACKING/LOCATED 只能定义为派生特征。 -12. 协议文档 §6 仍写持续搜索默认开启;当前 `config.py` 为 `persistent_search=False`,CLI 用 `--persistent` 显式开启。先同步文档,不恢复过时默认值。 - -## 3. 推荐架构与工程边界 - -采用“高层学习调度 + 低层局部选点 + 协议执行”的分层架构。高层学习先处理哪个频道、继续覆盖还是定位、何时使用后备清除。 -低层默认调用成熟几何选点;可切换现有 `PointSelectionPolicy` 学习局部检测点,形成第二个学习层。直线移动与设备动作继续由协议客户端执行。 -Q3 首版低层用 `bayes` 几何选点;Q4 先保留 `directional` 的遮挡处理,待接线一致性通过后对比旧/新局部 PPO。 - -```text -SimulatorClient.state + belief + particles + coverage ledger - ↓ 同一份候选快照和动作掩码 -高层 MaskablePPO:选择频道/覆盖站/清除任务 - ↓ -局部选点:geometry | 已有 v2 PointSelectionPolicy - ↓ -证书/预算/覆盖约束 + 实际 measure/clear 宏动作 - ↓ -accepted 请求与响应 → 时间、信念、清除与覆盖账本 -``` - -八方向 PPO 保留为 `low_level_env.py` 的离线附录实验;生产默认无需加载。若论文要求字面双 PPO,用高层调度 PPO + 局部选点 PPO 对应真正可影响成绩的两个层次。 -现有高层一个动作可以包含整站逐频道扫描或多次后备清除,因此是变长宏动作。记录每个宏动作的实际持续时间、请求数和中断原因。 -先采用 `gamma=1` 与实际时间成本,避免把“每宏动作折扣一次”误当成“每秒折扣一次”;只有明确改变目标才引入按持续时间折扣。 -第一版保留 120 槽位 MLP,不同时重写注意力网络或连续动作;需要多候选/频道时另升动作版本并独立比较。 - -建议新增的共享接口如下;这些是待实现契约,避免训练和 CLI 分别拼接策略。 - -```python -@dataclass(frozen=True) -class HRLPolicyConfig: - local_selector: str = "geometry" # geometry | rl - local_model_path: str | None = None - -def make_hrl_loop(client, config, *, problem: int, - high_policy=None, policy_config=HRLPolicyConfig()) -> HRLLoop: ... - -def validate_episode(summary: dict, events: list[dict], - truth_channels: set[int]) -> dict: ... # 仅评测模块 - -def run_episode(scene: dict, variant: dict, *, output_dir: Path) -> dict: ... -``` - -## 4. P0:修复正确性,未过门槛不得长训 - -以下表中的状态以本轮提交和测试报告为准;Sol 接手时先查看 diff,已完成的项只做回归,不重复实现。 - -| 项目 | 精确入口与问题 | 目标与验收 | -| --- | --- | --- | -| P0.1 槽位冲突 | `constants.py`;`scheduler.build_candidates/heuristic_action`:clear 频道 17–20 与 locate 频道 1–4 重叠 | 本轮优先修复;每类按 20 频道分配,构造同时就绪冲突场景验证任务均保留 | -| P0.2 清除事件遗漏 | `scheduler._hrl_execute_fallback` 成功未写 `_step_clears` | 本轮优先修复;证书/后备/宏动作内部清除均由相同成功事件口径计数,一次且仅一次 | -| P0.3 候选过期 | `HRLLoop._coverage_phase` 在构建候选后 `_measure_at_stop` 可改变信念 | 本轮优先修复;选动作前候选/特征/掩码属于同一个状态快照 | -| P0.4 奖励对齐 | `HierarchicalEnv.step/_reward_from/HRLReward` | 改默认奖励,成功/异常/安全网/截断均计入已经发生的真实时间 | -| P0.5 回合终止 | `HierarchicalEnv.step/reset/close` | 实际完成、失败终止与采样截断分开;收尾不丢 /exit,不把零观测用于有效截断 bootstrap | -| P0.6 训练部署配置 | `curriculum.training_config` 默认网格 29.3m,部署 14.65m | 首个可比较模型使用生产几何配置;粗网格只能显式快速预训练,后接完整保真微调与评测 | -| P0.7 无进展循环 | `scheduler` 的 locate/probe/fallback 掩码及预算检查 | 去重、已清除/无效证书、后备预算不足在动作前处理;合法动作不能无限零成本自循环 | -| P0.8 测试与依赖 | `tests/test_hrl.py` 导入守卫、`policy.py/scheduler.py` 顶层 numpy | 不安装 RL 组时基础 CLI 可导入;完整 RL 环境运行测试时不得意外全部 skip | - -建议槽位布局为 clear 0–19、locate 20–39、station 40–88、fallback 89–108、保留 109–119;所有槽位互斥且小于 120。 -槽位含义改变必须升 `FEATURE_VERSION`,即使仍是 1248 维/120 动作,也必须拒绝旧语义检查点。 -模型元数据应要求 `level/problem/algorithm/feature_version/action_layout_version/reward_version`,并记录模型 SHA、配置、依赖版本、代码版本。 -缺字段不能默认为兼容;Q3 权重初始化 Q4 必须走显式训练迁移参数,部署加载仍严格检查题号。 - -默认奖励先用:`r = -实际本步虚拟时间增量 / 100`;证明完成时加固定完成奖,未完成的真实终止加失败罚。 -失败惩罚按冻结的 episode 最大成本界设置并记录,不随意用不足以覆盖数千秒的 `-100`。 -相同全清场景里逐源常数奖可能只是常数偏移,但不同终止路径、事件漏记和失败场景会改变激励;故首版去掉新发现/熵减/每源清除附加奖。 -如需塑形,另做势函数差 `gamma * Phi(next_state) - Phi(state)`,真正终止态统一势函数值,并检验总和望远镜消去。 -如果优化题目平均时间,用整场时间作为训练目标时明确这是所选代理;不同源数的跨场景均值与 `T/N` 均值不等价,不能暗称完全一致。 -人工步数上限若仅为采样截断,返回可用的终末观测并允许 bootstrap;若定义为任务失败期限,应作为真实终止计罚。按该语义设计测试。 - -P0 验收至少覆盖以下行为,不只验证 reward 按代码相加: - -- 20 个频道的各类槽位唯一;频道 17–20 与 1–4 同时有 clear/locate 不丢任务。 -- 同一观测轨迹分别构建独立训练环境与部署闭环,比较候选、mask、特征、下一实际请求及状态。 -- 固定动作序列跨成功、失败、后备与安全网路径:reward 的时间分项总和等于 accepted 日志复算时间。 -- Q4 保证盘内/盘外无信号不误删真源;正读数重置遮挡序列;无效证书不能执行清除。 -- 10/16 源、频道含 20、边界源与预算中断均检查真实源集合、缺席集合、正常退出、异常与计时。 -- 评测端真值仅进 `validate_episode`,策略构建、候选、mask、观测与模型选择均不得读取真值。 - -## 5. P1:最小完整闭环,先评测再短训 - -先实现 `scripts/benchmark_hrl.py` 与共享审计函数,使 `HRLLoop(high_policy=None)` 可以与原 `bayes/directional` 同场景对比。 -这个启发式 HRL 骨架是重要对照:若差距来自任务候选、机会测量、Q4 保底或预算语义变化,先修或如实量化,不归因给神经网络。 -每次运行将 scene、误差种子、配置、summary、完整 JSONL/accepted 事件、时间复算和模型 SHA 写入新目录;目录已存在则拒绝覆盖。 -单场异常也写结果;聚合存在任一无效局时 `all_valid=false` 且脚本非零退出,不从平均值表中静默删除失败场景。 - -随后实现 `scripts/train_hrl_high.py`,第一版提供以下参数并通过 `--help` 验证: - -```text ---problem {3,4} --stage {1,2,3,4} --timesteps INT --seed INT ---envs INT --vec-env {dummy,subproc} --device {cpu,cuda,mps,auto} ---config-profile {production,coarse-pretrain} ---model PATH --resume PATH --eval-manifest PATH --verbose INT ---local-selector {geometry,rl} --local-model PATH -``` - -阶段 1 即保持 20 频道与固定观测维度,只改变布景复杂度;早期课程可减少源数,但完整训练必须覆盖 10/13/16 源与实际 ±1° 固定地点误差。 -Q4 完整课程同时覆盖少量/半数/大量定向源及近边界向外朝向;Q3→Q4 迁移与 Q4 随机初始化作为配对实验。 -禁止让策略知道课程场景真实源数或隐藏的占用频道列表;初始位置保持官方 `(0,0)`,除非任务被明确标为局部交接课程。 -先测 1/2/4 个环境的采样吞吐、内存和每次决策耗时,再选择 Dummy/Subproc;小 MLP 不假定 GPU 更快。 -Subproc 环境类内部提供 `action_masks()`;Windows/macOS 使用入口守卫及可序列化工厂。 -随机种子覆盖 Python/NumPy/Torch、PPO、每个环境、场景误差;每个 worker 使用独立 Monitor 文件。 -保存实际 `model.num_timesteps` 与请求步数,恢复时说明增量还是累计;续训加载正确算法/特征版本且不覆盖原模型。 -使用掩码评估接口,如 `MaskableEvalCallback`;同时在确定性推理中传入同源 mask。 - -CLI 加入 `--strategy hrl`、`--q4-strategy hrl`、`--hrl-model` 与局部策略选项,经 `make_hrl_loop` 统一构建;默认策略保持现状。 -显式指定缺失模型应报可操作错误,不能把启发式降级结果记成 HRL 模型成绩;启发式骨架单独命名 `hrl_heuristic`。 - -P1 门槛:启发式骨架全场审计通过;512–2048 步训练冒烟可保存、重载、确定性推理;CLI 内存回环至少 Q3/Q4 各一场通过。 -短训先用单个种子验证流程,不用这次模型的成功率作论文结论;完成后记录吞吐再定时间预算,不预设 1–2 小时足够。 - -## 6. P2:完整保真训练、独立评测与消融 - -实现 `pretrain_hrl_expert.py`:运行 `hrl_heuristic`,保存 `(episode_id, state, candidates, mask, action)`;按 episode 划分训练/验证。 -BC 与 PPO 的网络层、激活、归一化、mask 处理保持一致;复制后在真实样本上逐位比较 logits,critic 单独初始化。 -记录专家动作无法映射到候选的比率与原因;若大量回退到最近候选,先改专家映射,不用假专家标签继续训练。 -至少比较 BC+PPO 与随机初始化 PPO;BC 准确率单独报告,不能代替独立闭环用时与有效全清率。 - -冻结数据集分工: - -| 集合 | 用途与约束 | -| --- | --- | -| 已有 700–702 开发场景 | 查实现错误、探索配置与性能分解 | -| 已有 91000–91005 场景 | 历史回归;结果已经被审阅,不再宣称是本次全新盲测 | -| 新开发/选择清单 | 固定 JSON manifest,记录 seed、源数、定向组成、error_seed;用于训练选择和调参 | -| 新冻结最终测试清单 | 与训练、BC、调参及选择清单不重叠;模型冻结后运行,失败后修改则新开一轮测试 | -| 压力场景 | 圆周边界、1000m 半径、向外/切向定向、高频道、固定误差与预算边界;单独汇总 | - -同场景每个变体用相同位置、频道、半径、朝向和地点误差函数。每个模型至少跑 30 个完整场景,再按预算扩大;“30”是工程起点,不是统计充分性证明。 -最终用于稳定收益结论的主方法至少 5 个独立训练种子;场景种子与训练种子分开报告,不能用 5 个场景替代 5 次训练。 -Q3、Q4 分开统计,并按源数/定向占比分层;所有基线与候选使用相同停止、预算和计时口径。 - -| 指标 | 固定定义 | -| --- | --- | -| 有效全清 | 成功清除频道集合等于评测真值;缺席集合与真值不交;completed、正常 exit、无异常、计时一致 | -| `virtual_time_s` | 实际退出前的完整虚拟时间;主竞赛口径显式 `persistent_search=False` | -| `avg_locate_clear_time_s` | 每场 `T / 实际清除数`;有效全清主表再做逐场平均,另报源数分组 | -| `accounted_virtual_time_s` | 首次完成证明的时间;与最终时间并列,不悄悄用它替换正式计分 | -| 运行时间 | 每场实际墙钟、模型推理耗时分位数;本地内存回环时间不冒充官方程序运行时间 | -| 成本分解 | 移动秒、测量秒、换频秒、成功/失败 clear 秒、后备尝试、重复测量、总请求数 | -| 尾部与失败 | 中位数/P90/P95/最大值、有效全清率、失败明细;小样本尾分位注明估计局限 | - -平均 `T/N` 不等于 `平均 T / 平均 N`;若另用总体总时间/总源数,明确标为按源数加权口径。 -配对效应以同场景时间差为基础,报告均值相对变化、胜出场数、95% 配对 bootstrap 区间;相同场景家族共享种子时按家族重采样。 -多训练种子结果报告种子间分散程度;必要时对训练种子和场景做分层重采样,不能用单一场景区间代表训练稳定性。 - -最小比较矩阵:`bayes/directional`、旧局部 PPO、修订局部 MaskablePPO、`hrl_heuristic`、高层 PPO+几何、后续高层 PPO+局部 PPO。 -此矩阵先回答“改调度是否有用”和“增加局部学习是否有用”;既有单步 RL 不能命名为无几何的端到端基线。 -若仍要端到端 PPO,必须单独定义输入、实际动作、安全执行边界并训练,标记预算;它不是 P1 完成条件。 - -每项消融使用相同训练步数/场景预算/种子和评测集,单次只改变一个因素: - -- 调度:学习高层 vs `hrl_heuristic`,保持候选生成和局部选点一致。 -- 局部策略:同一高层与执行接口下,geometry vs 现有局部 PPO;报告是冻结替换还是联合重训。 -- 塑形:纯时间目标 vs 经过恒等式核验的势函数塑形;无信息增益奖励就是系数为 0。 -- 课程:相同总交互步数的课程训练 vs 从完整场景开始训练;Q4 迁移另列,不预设节约百分比。 -- 掩码:只取消重复/低效候选等策略性屏蔽;协议合法性、证书和预算硬守卫始终保留,标明实际取消范围。 -- 粒子特征:保留几何守恒内核,先将粒子统计输入和评分消融;若真的移除粒子模块,另实现保守几何替代并重新验证。 -- 八方向:只报告离线到达率/路径效率/推演耗时,以及实际协议终点相同时成绩相同的事实。 - -P2 推广门槛:所有最终与压力场景有效,Q4 相对最强已冻结基线的时间差区间上界小于 0;尾部容忍度先写入 manifest。 -建议初始尾部门槛为 P95 不退化超过 5%,这是可调整的工程标准,不是题设要求;任何调整都在重跑最终测试前完成。 -Q3 若未显示稳定收益,保留 `bayes` 默认并交付负结果。仅比手写基线快、却未优于现有 PPO,不能宣布替换默认模型。 - -## 7. P3:受限调参、论文与官方验证 - -只有 P2 主方法具备竞争力才实现并运行 `tune_hrl.py`。先搜索学习率、熵系数、网络宽度、GAE、合法候选排序参数。 -不搜索真实误差上限、光学清除半径、无信号停止次数或破坏覆盖证明的网格间距;确定性网格没有粒子重采样阈值可调。 -Optuna 只用开发/选择清单,失败配置先按有效性淘汰;预算与失败/剪枝逻辑写入结果。最终模型重新用固定配置多种子训练。 -文档、流程图与论文表明确:学习负责哪些决策、证明由哪些模块提供、本地生成分布未知是否对应官方分布。 -训练曲线、实际步数、配置、全部对照与失败明细均归档;不要只挑最好种子或去掉不利的边界场景。 -官方三次测试需要对应演练已经启动、真实案例码与官方导出日志;本地 referee 的三场不能填写成“三次正式测试”。 -不覆盖旧官方归档;官方结果与本地结果分表,不对不同官方案例直接计算改进百分比。 - -## 8. 命令:已经存在与待实现的严格区分 - -以下入口当前已经存在;依赖需先安装,命令失败要修复或如实报告,不能跳过错误声称通过: - -```bash -uv sync --group dev --group rl -uv run python -m pytest -q --tb=short -uv run python -m pytest -q tests/test_hrl.py --tb=short -uv run mcm26b run --help -uv run mcm26b run --robot-id 2026001 --self-test --strategy bayes -uv run mcm26b run --robot-id 2026001 --self-test --problem 4 --q4-strategy directional -uv run python scripts/train_rl.py --help -uv run python scripts/train_hrl_low.py --help -``` - -`train_hrl_low.py` 目前仅 `--help` 可用于检查入口,不把完整训练列为已可用: -其 `MaskablePPO.learn()` 需要环境掩码,当前 `LowLevelEnv` 没有 `action_masks()`;改普通 PPO 或提供全 True 掩码后再试。 -还需修 BC 按 episode 划分、统一随机种子、每 worker 独立 Monitor 文件、评估 seed 生效、实际路径长度与成功率分开统计。 -低层到达失败不能靠 executor 最后强制补终点伪装成策略到达;环境裁剪后的实际移动长度也不能简单记为 `steps*100m`。 - -下面是 P1/P2 实现后必须支持并实测的命令契约,当前尚不能直接运行: - -```bash -# P1:先验证不加载模型的共享调度闭环 -uv run python scripts/benchmark_hrl.py --variants hrl_heuristic,bayes,directional --manifest output/hrl/manifests/dev.json --output output/hrl/p1-heuristic -# P1:完整保真冒烟;模型目录必须是新目录 -uv run python scripts/train_hrl_high.py --problem 3 --stage 1 --timesteps 2048 --seed 320001 --envs 1 --vec-env dummy --device cpu --config-profile production --model output/hrl/p1-smoke/q3.zip --verbose 0 -# P1:CLI 明确加载高层模型 -uv run mcm26b run --robot-id 2026001 --self-test --strategy hrl --hrl-model output/hrl/p1-smoke/q3.zip -# P2:正式阶段训练;步数先依据采样吞吐与学习曲线再调整 -uv run python scripts/train_hrl_high.py --problem 4 --stage 4 --timesteps 60000 --seed 420001 --envs 2 --vec-env dummy --device cpu --config-profile production --model output/hrl/p2/q4-seed420001.zip --eval-manifest output/hrl/manifests/select.json --verbose 0 -# P2:冻结模型完整对照;variants 的模型位置来自同目录的配置清单 -uv run python scripts/benchmark_hrl.py --variants hrl,hrl_heuristic,legacy,revised,baseline --manifest output/hrl/manifests/final.json --output output/hrl/p2-final -``` - -命令使用的 manifests 也要由脚本生成、校验并归档;尚不存在的模型不能当作初始化输入。 -添加 `--full` 一键课程入口时,它应展开并记录每阶段命令/配置/检查点链,失败即停,可继续,不是忽略错误的 shell 包装。 -参考现有依赖配置:基础运行依赖仅 requests;RL 为可选组。固定环境版本并记录硬件,勿假定当前执行机就是旧报告中的 RTX 4060。 - -## 9. 可以直接粘贴给 Sol 的续作 Prompt - -```text -继续当前仓库的 HRL 工作。先读 docs/hrl-sol-execution.md、最新测试结果与 git diff,保留现有修改。 -已有客户端/referee/几何/PPO 都要复用;不要重写骨架,不把缺失脚本或 CLI 说成已完成。 -先完成 P0 尚未关闭的奖励、终止、完整保真配置、掩码和依赖问题;本轮已修的槽位/清除事件/候选过期只回归。 -采用高层 MaskablePPO 调度 + 几何/已有局部 PPO 选点 + 协议直线执行;八方向只作为可选离线实验。 -按 P1 先实现 benchmark_hrl 与真值隔离审计,再实现 train_hrl_high、模型元数据和 CLI,跑可重载的短训冒烟。 -P0/P1 没通过就修实现,不用加训练步数掩盖问题。通过后再开展 BC、完整保真课程、多训练种子、冻结场景配对评测。 -保持 Q3 bayes/Q4 现有默认策略;完整实验胜出前不覆盖默认模型。主指标包含有效全清、T、逐场 T/N、请求分解和尾部。 -每阶段交付具体文件、实际执行命令、测试结果、模型/日志路径与未完成项;不预设 Q4 80% 节约或 4000 秒保证。 -官方测试只有真实演练开始并获得案例码/导出日志才记正式结果,本地实验单独标注。 -``` - -接口参考:[MaskablePPO 官方文档](https://sb3-contrib.readthedocs.io/en/master/modules/ppo_mask.html),[Gymnasium 终止与时间限制](https://gymnasium.farama.org/tutorials/gymnasium_basics/handling_time_limits/)。 diff --git a/docs/paper/main.pdf b/docs/paper/main.pdf index 8a42182..3511192 100644 Binary files a/docs/paper/main.pdf and b/docs/paper/main.pdf differ diff --git a/docs/paper/ref.bib b/docs/paper/ref.bib new file mode 100644 index 0000000..e69de29 diff --git a/docs/training-ui-windows-audit.md b/docs/training-ui-windows-audit.md deleted file mode 100644 index b0cff36..0000000 --- a/docs/training-ui-windows-audit.md +++ /dev/null @@ -1,261 +0,0 @@ -# 训练前端 Windows 兼容性与「暂停」审计(结论 + 修复方案) - -> 审计对象:`src/mcm26b/training_ui/`、`src/mcm26b/process_control.py`、 -> `scripts/train_hrl_high.py`。 -> 触发问题:「无法暂停」「频繁出现 os 无 killpg 等」。 -> 结论一句话:**这两个现象同源——训练前端的停止/暂停路径是纯 POSIX 设计; -> Windows 上 `os.killpg` 根本不存在,异常又没被兜住,所以点了停止等于没点。** - ---- - -## 0. 结论摘要 - -| # | 现象 | 根因 | 严重度 | -| --- | --- | --- | --- | -| 1 | 点「停止训练」返回 500 / 无效果,训练照跑,于是「无法暂停」 | `TrainingJob.stop()` 直接调用 `os.killpg(os.getpgid(...))`;这两个符号**只存在于 POSIX**,Windows 上抛 `AttributeError`,而旧 `except` 只接 `ProcessLookupError/PermissionError` | 阻断 | -| 2 | 控制台/日志反复出现 `module 'os' has no attribute 'killpg'` | 同上:错误最终落到 `_UIHandler.do_POST` 的兜底 `except Exception`,返回 500 并带出 `AttributeError` 文本;每点一次复现一次 | 阻断 | -| 3 | 即使把 killpg 换成 `terminate()`,停止后模型/元数据仍然丢失(Windows 上) | Windows 的 `os.kill(pid, SIGTERM)` 语义是 `TerminateProcess` **硬杀**,训练脚本里"收到信号后在 step 边界保存"的处理器不会执行 | 高 | -| 4 | 界面根本没有「暂停」能力(POSIX 也没有) | 原设计只有 start/stop;且 `SIGSTOP/SIGCONT` 在 Windows 上不存在,**原生暂停在 Windows 上无法实现**,必须改成协作式 | 高 | -| 5 | 子进程进程组隔离在 Windows 上失效 | `Popen(start_new_session=True)` 在 Windows 被**静默忽略**(CPython 的 Windows `_execute_child` 形参名就是 `unused_start_new_session`) | 中 | -| 6 | subproc worker 在 Windows 下可能抢在主进程收尾前退出 | worker 只忽略 `SIGTERM/SIGINT`,没处理 Windows 的 `SIGBREAK`(`CTRL_BREAK_EVENT` 的落点) | 中 | - -**修复原则**:把"暂停/继续/停止"从**信号语义**改成**控制文件语义**。 -控制文件在 POSIX 与 Windows 上都只是普通文件 IO,行为完全一致;信号与强杀退居 -兜底。这样 Windows 上暂停、继续、优雅停止、落盘保证全部成立。 - ---- - -## 1. 失败链复现(旧代码) - -``` -用户点「停止训练」 - └─ POST /api/train/stop - └─ TrainingUI.stop() → TrainingJob.stop() - └─ os.killpg(os.getpgid(process.pid), signal.SIGTERM) - ├─ POSIX :成功,进程组收到 SIGTERM,脚本优雅收尾 - └─ Windows:AttributeError: module 'os' has no attribute 'killpg' - ↑ 只 except (ProcessLookupError, PermissionError),接不住 - └─ _UIHandler.do_POST 兜底 except Exception → HTTP 500 - └─ 训练子进程完全没收到任何指令,继续跑 → 「无法暂停 / 停止没反应」 -``` - -关键代码(修复前,`src/mcm26b/training_ui/server.py`): - -```python -def stop(self) -> bool: - with self._lock: - process = self.process - if process is None or process.poll() is not None: - return False - try: - os.killpg(os.getpgid(process.pid), signal.SIGTERM) - except (ProcessLookupError, PermissionError): - process.terminate() - self.status = "stopping" - return True -``` - ---- - -## 2. 根因逐条(含证据) - -### 2.1 `os.killpg` / `os.getpgid` 是 POSIX-only - -CPython 只在 `posix` 构建里注册这两个函数;Windows 的 `os` 模块没有它们。 -访问会得到 `AttributeError`(不是 `OSError` 子类),所以旧 `except` 接不住。 - -### 2.2 `start_new_session=True` 在 Windows 被静默忽略 - -`subprocess.Popen` 接受该参数,但 Windows 的 `_execute_child` 形参名是 -`unused_start_new_session`,也就是**根本不读**。要隔离进程组,Windows 必须传 -`creationflags=CREATE_NEW_PROCESS_GROUP`。 - -### 2.3 Windows 的 `SIGTERM` 是硬杀 - -`os.kill(pid, sig)` 在 Windows 上只有 `CTRL_C_EVENT` / `CTRL_BREAK_EVENT` 是 -"软"信号;**任何其它值**(含 `SIGTERM`)都会走 `TerminateProcess`。因此 -`scripts/train_hrl_high.py` 里的: - -```python -for _signum in (signal.SIGTERM, signal.SIGINT): # 旧代码 - signal.signal(_signum, _on_stop_signal) -``` - -在 Windows 上形同虚设——处理器注册了,但没人会用它。这也解释了为什么"停止后 -模型没保存"。 - -### 2.4 Windows 没有 `SIGSTOP`,暂停无法用信号实现 - -暂停(挂起/继续)在 POSIX 上可以用 `SIGSTOP/SIGCONT`,但 Windows 既无这两个 -信号,也无等价的"无侵入挂起"用户态 API(真正的挂起要 `SuspendThread`/调试 API)。 -所以**任何跨平台暂停都必须是协作式的**:由训练进程自己在 step 边界检查标志并 -让出执行。本项目原先没有这条通道,界面也没有暂停按钮。 - -### 2.5 `SIGBREAK` 未处理 - -Windows 的 `CTRL_BREAK_EVENT`(发给进程组的软信号)在 Python 里落到 -`signal.SIGBREAK`。旧的 handler 安装与 worker 屏蔽列表都只含 -`SIGTERM/SIGINT`,Windows 下等于裸奔。 - -### 2.6 异常类型没兜住 - -`except (ProcessLookupError, PermissionError)` 漏掉 `AttributeError`、以及 -更一般的 `OSError`;`_hard_kill` 里 `signal.SIGKILL` 在 Windows 上也不存在 -(`getattr(signal, "SIGKILL", None) is None`),同样会 `AttributeError`。 - ---- - -## 3. 修复方案(已实施) - -### 3.1 新增 `src/mcm26b/process_control.py`(零第三方依赖) - -| 能力 | 实现 | 作用 | -| --- | --- | --- | -| 子进程隔离 | `spawn_kwargs()`:POSIX `start_new_session=True`;Windows `creationflags=CREATE_NEW_PROCESS_GROUP` | 前端 Ctrl+C 不误伤训练;Windows 也能组杀进程树 | -| 控制协议读写 | `write_control()` / `read_control()`:JSON + 同目录临时文件 + `os.replace` 原子替换;损坏/缺失一律视为"无指令" | 两端统一的暂停/停止通道 | -| 强杀兜底 | `terminate_process_tree(process, grace_s)`:先等宽限期;超时后 POSIX 走 `killpg(SIGKILL)`、Windows 走 `taskkill /F /T /PID`;所有 POSIX 符号用 `getattr` 探测 | 彻底移除 `os.killpg` 无条件调用;返回"是否动用了强杀" | - -`IS_WINDOWS` 是运行期常量而非导入期分支,便于测试直接 monkeypatch 模拟 Windows。 - -### 3.2 控制文件协议 - -路径由前端生成并随命令下发:`--control-file `(默认落在 -`output/hrl/ui/control/.control.json`,`output/` 已 gitignore)。 - -```json -{"paused": false, "stop": false, "seq": 1712345678901234567, "ts": 1712345678.9} -``` - -- 前端**只写**:`pause()` → `paused=true`;`resume()` → `paused=false`; - `stop()` → `stop=true`(同时清零 paused,保证阻塞中的暂停循环能被唤醒)。 -- 训练脚本**只读**:`_ControlPoll` 每 32 个 step 抽样读一次盘(避免每 step 一次 - 文件 IO);暂停时在 `_on_step` 内阻塞轮询(`poll_s=0.2`),进程存活、显存仍占用, - 但不消耗算力。 -- 墙钟上限 `--max-wall-s` **扣除累计暂停时长**,避免"挂起一小时回来直接判超时"。 - -### 3.3 训练脚本 `scripts/train_hrl_high.py` - -- 新增 `--control-file`;`_ControlPoll`(纯标准库、可单测)+ 薄薄的 - `_ControlChannel(BaseCallback)` 接到 SB3 回调链**最前面**。 -- 收尾信号集合扩为 `_stop_signals()`:POSIX `SIGTERM/SIGINT`;Windows 追加 - `SIGBREAK`。worker 屏蔽同一集合,保证主进程 `vec_env.close()` 之前 worker 不先退。 -- 落盘保证不变:停止后仍写最终模型 + 元数据,`stopped_by_signal=true`, - `stop_signal` 记 `control_file` 或信号名;异常仍落 `*_emergency.zip`。 - -### 3.4 训练前端 `server.py` / `static/` - -- 新增 `POST /api/train/pause`、`POST /api/train/resume`;`stop` 语义改为 - "写控制文件 → 宽限期内自行退出;超时强杀",强杀在**独立看门狗线程**里做, - HTTP 请求不会被 15s 等待卡住。 -- 状态机新增 `paused`;`_sync_control_events()` 用训练脚本回显的 - `paused/resumed/stop_requested` 事件校正状态。 -- 快照新增 `forced_kill`,前端横幅区分"优雅停止"与"超时强杀"。 -- 前端新增「暂停训练 / 继续训练」按钮、暂停横幅;停止确认文案更新。 - -### 3.5 停止/暂停时序 - -``` -pause: UI 写 {paused:true} ──► 脚本 _on_step 读到 ──► 回显 paused,阻塞轮询 -resume: UI 写 {paused:false} ─► 暂停循环退出 ────────► 回显 resumed,继续训练 -stop: UI 写 {stop:true} ────► 脚本 step 边界收尾落盘 ──► 退出码 0 - │ - └─(宽限 15s 未退)─► terminate_process_tree 强杀;forced_kill=true -``` - -### 3.6 急停(强杀)也必须可恢复 - -宽限期一到就强杀,训练脚本**没有任何 Python 收尾机会**——不写最终模型、不写 -元数据、不写 `training_failure.json`。如果磁盘上只有 `--checkpoint-every` 的稀疏 -历史 checkpoint,急停就可能丢掉上万步,或者在"保存途中被杀"时留下一个打不开的 -半截 zip。为此加了四条保证: - -| 保证 | 实现 | 效果 | -| --- | --- | --- | -| 起步基线 | `recovery_every > 0` 时,`learn()` 之前先写一份 `_latest.zip` | 训练刚起就急停,也有可加载、可 `--resume` 的产物 | -| 滚动恢复点 | 每 `--recovery-every`(默认 2000)环境步覆盖写同一份 `_latest.zip` | 急停最多丢 `recovery_every` 步,而不是 `checkpoint-every` 步 | -| 原子落盘 | 模型 zip / 旁挂 json / `resume.json` 一律「同目录 `.tmp-` + `os.replace`」 | 保存途中被强杀,目标路径仍是上一份**完整**快照;不会出现半截文件 | -| 权威恢复指针 | 每次落盘刷新 `/resume.json`(model / timesteps / 增量语义 / 生效 PPO 超参);前端 `/api/train/state` 暴露为 `recovery` | 无论怎么停,都有一份明确的"从哪继续";界面一键「用最近检查点续训」 | - -前端在强杀后还会补写 `/forced_stop.json`(`job_id`、`pid`、`reason`、 -`recovery.model`),因为此时训练脚本已经无法记录任何事情。 - ---- - -## 4. 平台兼容性矩阵(修复后) - -| 能力 | POSIX | Windows | -| --- | --- | --- | -| 启动子进程并隔离 | `start_new_session=True`(setsid) | `CREATE_NEW_PROCESS_GROUP` | -| 暂停 / 继续 | 控制文件(协作式) | 控制文件(协作式) | -| 优雅停止 + 落盘 | 控制文件;`SIGTERM` 亦可 | 控制文件;`CTRL_BREAK_EVENT`→`SIGBREAK` 亦可 | -| 超时强杀进程树 | `killpg(SIGKILL)` | `taskkill /F /T /PID` | -| `os.killpg` 依赖 | 有 | **无(不再调用)** | -| 暂停期间是否算墙钟 | 否(扣除) | 否(扣除) | - ---- - -## 5. 验证 - -- 新增/更新回归测试: - - `tests/test_training_ui.py`:控制文件协议往返与损坏容错、`spawn_kwargs` - 平台分支、Windows 强杀走 `taskkill`、**无 `killpg` 环境下强杀不抛异常** - (直接复现旧 bug)、暂停/继续/停止全链路、控制文件被忽略时强杀并写 - `forced_stop.json` 恢复指引、`discover_recovery` 的 - `resume.json`/扫描/悬空指针三分支、HTTP `pause/resume` 端到端。 - - `tests/test_hrl_checkpoint.py`:控制文件状态机单测;原子保存失败不破坏上一份 - 快照;JSON 原子替换;历史清理不误删滚动恢复点;起步基线可加载; - **强杀急停后 `resume.json` + 滚动恢复点仍可 `--resume`**;控制文件停止后 - 模型/元数据落盘(`stop_signal=control_file`)与暂停→继续;POSIX 信号路径 - 单列并加平台跳过。以上集成用例都用**真实训练脚本**跑 subproc。 -- 手工验证:`--recovery-every 32` 短程实跑后强杀,`resume.json` 指向 - `q3_ckpt_latest.zip`;以它为 `--resume` 目标再跑 32 步,元数据 - `actual_timesteps` 从 64 变 96、`timesteps_semantics=additional`。 -- 全量测试:`pytest tests referee/tests` 全绿。 -- 全仓库 `pylint src scripts project tests referee main.py` 达到 10.00/10 - (口径见 §7)。 - ---- - -## 6. 残余风险与后续建议 - -1. **暂停粒度** = `poll_every` 个 env step(默认 32,约 0.1–3s 量级),不是即时; - 若要更快可调小 `_ControlChannel(poll_every=...)`,代价是更频繁的文件 stat。 -2. **宽限期固定 15s**(`server.STOP_GRACE_S`)。大模型保存可能更久;但因为落盘是 - 原子的,即使宽限期到点被强杀,也只是"新的最终模型没写成",**上一份滚动恢复点 - 与历史 checkpoint 完好**,不会出现半截文件。需要更长可调大该常量。 -3. **急停的损失上界 = `--recovery-every`**(默认 2000 环境步)。要更小就调小它; - 调到 0 表示放弃滚动恢复点(此时只剩 `--checkpoint-every` 的稀疏历史 - checkpoint 与起步基线)。 -4. **Windows 强杀依赖 `taskkill`**(系统自带)。若被安全策略禁用,会退回 - `Popen.kill()`(只杀主进程,spawn 的 worker 可能残留)。 -5. 更严格的 Windows 方案是 **Job Object**(子进程随 job 句柄一起销毁),但需要 - `ctypes`/`pywin32`,本仓库基础依赖刻意保持轻量,未引入。 -6. **前端进程重启后**,内存中的任务对象没了,「用最近检查点续训」按钮不会自动 - 出现;但恢复信息都落在磁盘上(`/resume.json`、`forced_stop.json`、 - `checkpoints/_latest.zip`),在表单里填同一个模型输出路径并勾选 - `--resume` 即可继续。 -7. 界面 `--device mps` 选项在 Windows 上无意义;`auto` 会回退 cuda/cpu,属既有 - 行为,未改。 -8. `_ControlPoll` 的暂停循环会占用一个 Python 线程的调度(每 0.2s 一次读盘), - 长暂停期间 CPU 占用可忽略。 - ---- - -## 7. pylint 口径说明 - -配置写在 `pyproject.toml` 的 `[tool.pylint.*]`,目标是 -`pylint src scripts project tests referee main.py` = 10.00/10。 - -**改代码修掉的真实问题**(不是 disable):未使用的 import/变量/参数、重复字典键 -(`reward_version`)、`value != value` 判 NaN、`__dataclass_fields__` 私有访问、 -`raise` 非异常类型、`pytest.importorskip` 之外的赋值不确定、过长行、无谓括号、 -`len(x)` 判空、循环闭包变量、`subprocess.run` 未显式 `check`、`os.path` 循环导入等。 - -**有意 disable 的类别**(每条在 pyproject 里写了理由):项目刻意的懒加载 -(`import-outside-toplevel`)、防御式宽异常(`broad-exception-caught`)、测试访问 -内部状态(`protected-access`)、pytest fixture 同名(`redefined-outer-name`)、 -无头环境不实现 `gym.Env.render`(`abstract-method`)、以及静态分析的已知误报 -(`possibly-used-before-assignment`)。 - -**注意**:`good-names` 不覆盖 `redefined-builtin`,stdlib 回调签名里的 -`log_message(self, format, ...)` 只能在对应 `def` 上行内 disable。 diff --git a/docs/training-ui.md b/docs/training-ui.md deleted file mode 100644 index d55c5bf..0000000 --- a/docs/training-ui.md +++ /dev/null @@ -1,160 +0,0 @@ -# 模型训练前端(training-ui) - -本地回环 Web UI,用于**实时观察一次 HRL 高层 PPO 训练**:子进程状态、步进进度、 -参数收敛曲线、逐回合记录与完整 stdout 日志。设计与评测前端(`referee/` WebUI) -同构——同一套暗色面板语言、同一个「只监听 127.0.0.1 + 静态白名单 + JSON 轮询 -API」模式——差别在于本页托管的是一个**训练子进程**而不是评测会话。 - -## 启动 - -```bash -uv run python -m mcm26b.training_ui --ui-port 8036 # 打开 http://127.0.0.1:8036 -uv run python scripts/train_hrl_ui.py --ui-port 8036 # 等价薄入口(支撑材料命令) -uv run python -m mcm26b.training_ui --print-schema # 只看配置契约,不起服务 -uv run python -m mcm26b.training_ui --print-preview # 只看离线示例快照 -``` - -`--no-browser` 阻止自动打开浏览器;Ctrl+C 退出时会先停止训练子进程。 - -无训练进程时,界面顶栏「离线预览」可渲染三组合成快照(上升 / 平台期 / KL 过猛), -用于检查曲线、指标卡、时间线与日志着色——预览不启动任何进程、不写任何文件。 - -## 界面结构 - -| 区块 | 内容 | -| --- | --- | -| 顶栏 | 任务摘要、进程/进度/墙钟/设备/连接五个状态 chip、刷新·预览·暂停/继续·停止 | -| 执行进度与进程 | 步进进度条、剩余时间与预计结束、PID/吞吐/退出码、PPO 阶段时间线、完整命令行 | -| 训练配置 | 由 `/api/train/schema` 生成的五组表单 + 四个预设,运行中锁定 | -| 参数收敛状态 | 判读 chip + 判据说明,每个指标一张卡片(最新值、增量、迷你趋势线、异常高亮) | -| 曲线 | 主指标(平均回合奖励)+ 可切换诊断量,悬停十字线读数、KL=0.05 等参考线 | -| 实时运行日志 | 关键字过滤、错误/进度 JSON 开关、自动跟随、最近 4000 行 | -| 逐回合记录 | Monitor CSV 的每回合奖励/长度/时刻 | - -## 数据来源与契约 - -三个端点都在 `src/mcm26b/training_ui/server.py`: - -| 端点 | 说明 | -| --- | --- | -| `GET /api/train/schema` | 字段/分组/预设/指标字典,**与 `TrainConfig` 同源**(`schema.py`) | -| `GET /api/train/state` | 快照;支持 `log_tail`、`metric_limit`、`after_metric` 游标与 `preview=1` | -| `POST /api/train/start` | 允许只提交部分字段(其余取默认值),校验失败返回 409 | -| `POST /api/train/pause` | 写控制文件请求在 step 边界挂起(跨平台) | -| `POST /api/train/resume` | 解除挂起,从暂停处继续 | -| `POST /api/train/stop` | 请求优雅停止;宽限期(`STOP_GRACE_S`,默认 15s)后强杀进程树 | - -暂停/停止走**控制文件**而不是信号,原因与平台差异见 -[`training-ui-windows-audit.md`](training-ui-windows-audit.md):Windows 没有 -`SIGSTOP`,且 `os.kill(pid, SIGTERM)` 会退化成 `TerminateProcess` 硬杀,训练脚本 -"保存模型再退出"的收尾分支不会执行。控制文件在 POSIX 与 Windows 上都只是普通 -文件 IO,语义完全一致;信号(POSIX `SIGTERM/SIGINT`、Windows `SIGBREAK`)只作兜底。 - -进度数据的两个来源,服务端都已解析: - -1. **progress JSON**(主来源):`train_hrl_high.py --progress-json` 每若干环境步打印 - 一行 `{"event": "progress", "timesteps": ..., "ep_rew_mean": ...}`,字段最全; - 热身阶段间隔会自动缩小,短程 smoke 也能看到完整曲线。 -2. **SB3 verbose 表格**(补充来源):解析 `| key | value |` 表格,用于补 - `clip_fraction`/`learning_rate` 等诊断量。表格按段分组缓存、等本表的 - `total_timesteps` 到位后统一打横轴刻度;与 JSON 同一步数的表格版本会被跳过, - 避免重复点。 - -`timesteps` 是整个前端的横轴:服务端不伪造刻度(缺刻度的表宁可丢弃,截断的表 -按末尾已知刻度兜底并在收尾提交),前端不再自行编号。 - -## 收敛判读口径 - -`summarize_convergence()` 只做**可解释的启发式判读**,不替代正式学习曲线分析: - -| 状态 | 触发条件 | -| --- | --- | -| 等待首个 rollout | 尚无任何指标 | -| 预热阶段 | 进度点 < 3,无法判断趋势 | -| KL 偏大,策略更新可能过猛 | 最近 `approx_kl` > 0.05(判定优先级最高) | -| 价值函数尚未拟合 | 最近 `explained_variance` < 0 | -| 奖励未形成上升趋势 | 最近窗口奖励斜率为负 | -| 已趋于平稳(疑似收敛) | 窗口对半位移 ≤ 逐点噪声、变异系数 ≤ 0.15、极差 ≤ 15% 量级 | -| 收敛趋势良好 | 其余(斜率正向) | - -平台判据特意用「对半窗口位移 / 逐点噪声」而不是单看斜率绝对值:慢速但持续的 -提升(斜率很小)不会被误判成收敛。所有判据数字都会写进 `notes`,便于人工复核。 - -## 安全边界 - -- 只监听 `127.0.0.1`;静态资源是固定白名单,不提供目录遍历。 -- 命令由服务端以**参数列表**构造,不经过 shell;字符串参数只拒绝控制字符。 -- 同一时刻只允许一个训练任务;暂停中的任务仍算「在跑」,必须先停止才能开新一局。 -- 暂停/停止走控制文件(`--control-file`,默认 `output/hrl/ui/control/.control.json`), - 进程组隔离按平台选择(POSIX `setsid` / Windows `CREATE_NEW_PROCESS_GROUP`), - 超时强杀按平台选择(POSIX `killpg(SIGKILL)` / Windows `taskkill /F /T`)。 -- 产物路径限定在仓库根下解析,模型输出沿用训练脚本自身的 `--force`/`--resume` - 语义(两者互斥,由后端校验)。 - -## 暂停、停止与落盘保证 - -「暂停」是**协作式**的:前端原子写控制文件,`train_hrl_high.py` 的 -`_ControlPoll` 每 32 个环境步抽样读一次;暂停时训练阻塞在 `_on_step` 的轮询里, -进程与显存保留、不消耗算力,点「继续」从同一个 step 边界恢复。暂停时长不计入 -`--max-wall-s`(否则"挂起一小时回来直接判超时")。 - -「停止」同样是控制文件请求(**跨平台**)。`train_hrl_high.py` 有多层兜底, -点一下「停止」不再等于这一局白跑;而**急停**(强杀,例如 `SIGKILL` / -`taskkill /F`,进程没有任何收尾机会)也保证可恢复: - -| 机制 | 行为 | -| --- | --- | -| 滚动恢复点 | `--recovery-every`(默认 2000 环境步)把 `/_latest.zip` **原子覆盖写**一次;训练开始前先写一份**起步基线**。因此急停后最多只丢 `--recovery-every` 个环境步,且磁盘上始终有一份完整、可加载、可 `--resume` 的产物 | -| 原子落盘 | 模型 zip、旁挂 json、`resume.json` 都是「同目录临时文件 + `os.replace`」:保存途中被强杀不会留下半截文件,也不会破坏上一份完整快照 | -| 恢复指针 | `/resume.json` 记录当前最佳恢复目标 + 步数(增量语义)+ 生效过的 PPO 超参;前端顶部的「用最近检查点续训」按钮直接读它 | -| 定期 checkpoint | `--checkpoint-every`(默认 20000 环境步)另留 `_<步数>.zip`,`--checkpoint-keep` 只保留最近 K 个(默认 3),供返祖对比与多档恢复;滚动恢复点与起步基线不受清理影响 | -| 优雅停止 | 控制文件 `stop=true`(或 POSIX 信号 / Windows `SIGBREAK`)后,主进程在 step 边界收尾,保存最终模型与元数据(`stopped_by_signal=true`、`stop_signal`、`checkpoint_files`、`recovery_model`)并正常关闭环境 | -| 超时强杀 | 宽限期(`STOP_GRACE_S`,默认 15s)内没退出则强杀整棵进程树,快照 `forced_kill=true`,并在 `/forced_stop.json` 写明 `recovery.model`(可直接续训的目标) | -| 异常兜底 | `learn()` 抛出任何异常时先落 `*_emergency.zip` + 元数据 + `resume.json`,再写 `training_failure.json` 并抛出 | - -急停后恢复的操作方式:界面点「用最近检查点续训」;命令行则 -`--resume --model `,`--timesteps` 按**追加**步数理解。 - -checkpoint 与最终模型共用同一份 json 契约,因此 `--resume ` 直接 -续训(`--timesteps` 为增量步数)。注意 `--resume`/`--init` 会沿用 checkpoint 内的 -PPO 超参(`n_steps`/`batch_size`/`n_epochs`):命令行这三项被忽略,脚本会打一条 -`hyperparams_from_checkpoint` 事件说明差异,元数据 `ppo_hyperparams` 记录**实际生效**值。 -回归测试见 `tests/test_hrl_checkpoint.py`,其中端到端用例真起 subproc 子进程,覆盖 -控制文件停止、POSIX 信号停止、**强杀后仍可续训**与暂停→继续(信号路径在 Windows -上自动跳过)。 - -## 测试 - -```bash -.venv/bin/python -m pytest tests/test_training_ui.py tests/test_training_ui_js.py tests/test_hrl_checkpoint.py -q -``` - -- `tests/test_training_ui.py`:配置契约同源、预设可直接提交、参数校验、SB3 表格 - 刻度打点、游标分页、`describe_process` 进度/ETA、示例快照与真实快照同键; - 用**桩训练脚本真起子进程**覆盖启动/轮询/暂停/继续/停止/退出码全链路;并覆盖 - 跨平台进程控制——控制文件往返与损坏容错、`spawn_kwargs` 平台分支、Windows 走 - `taskkill`、**无 `killpg` 环境下强杀不抛异常**(旧 bug 的直接回归)、控制文件被 - 忽略时强杀并写 `forced_stop.json` 恢复指引、`discover_recovery` 的 - `resume.json`/扫描/悬空指针三分支、HTTP `pause/resume`。 -- `tests/js/training_ui_harness.cjs`(经 `tests/test_training_ui_js.py` 调起): - DOM 桩加载发布的 `charts.js`/`app.js` 原文,用服务端生成的真实快照驱动渲染, - 断言表单/指标卡/曲线/日志/逐回合表都拿到数据,覆盖增量游标三条分支与 - `classList`、HTML 转义、极端数值等边界。 -- `tests/test_hrl_checkpoint.py`:落盘与恢复的端到端回归——原子保存失败不破坏 - 上一份快照、JSON 原子替换、历史清理不误删滚动恢复点、起步基线可加载、 - **强杀急停后 `resume.json` 与滚动恢复点仍可继续训练**、控制文件停止落盘、 - 暂停→继续、POSIX 信号停止。 - -## 已知取舍 - -- 进度点保留上限 5000(服务端 deque 与前端本地缓存同值),超长训练只保留最近一段。 -- 表格解析依赖 SB3 的段名(`rollout/`/`time/`/`train/`/`system/`);SB3 若改表格 - 格式,退化路径是「只显示 progress JSON」,不会导致界面崩溃。 -- 收敛判读是启发式;正式结论仍需用 `scripts/benchmark_hrl.py` 的配对评测与 - 学习曲线人工复核。 -- 暂停粒度是 `poll_every` 个环境步(默认 32),不是即时挂起;停止宽限期默认 15s。 -- Windows 强杀依赖系统自带的 `taskkill`;若被策略禁用会退回 `Popen.kill()` - (只杀主进程)。更严格的 Job Object 方案需要额外依赖,未引入。 - -Windows 兼容性问题的完整根因与修复记录见 -[`training-ui-windows-audit.md`](training-ui-windows-audit.md)。 diff --git a/docs/强化学习适用性审核与改进-20260911.md b/docs/强化学习适用性审核与改进-20260911.md deleted file mode 100644 index 1398258..0000000 --- a/docs/强化学习适用性审核与改进-20260911.md +++ /dev/null @@ -1,165 +0,0 @@ -# 第三、四问强化学习适用性审核与改进 - -本轮审核第一版强化学习代码、专家数据、模型及官方演练归档,修复训练与部署不一致的问题,训练两个新的 Maskable PPO 模型,并用独立实现的本地 `referee` 完成同场景对照。所有新性能数字均为本地结果,没有启动新的官方演练。 - -结论:强化学习适合在现有几何算法内尝试“下一检测点”的排序,第四问比第三问更有收益空间。当前证据支持第四问的混合方案优于手写 `directional` 基线;尚不能证明新模型稳定优于旧 PPO。第三问没有稳定增益,应保留 `bayes` 默认策略。新模型作为实验版本显式加载,没有覆盖旧默认模型。 - -## 1. 题设和方法适用范围 - -附录2(3)的交会必须使用带误差的角域,不能把两条示向线的交点当作真值;同地重测不会提供新的独立误差样本。附录2(4)的单接收机逐频道检测,结合动作规则,须计入移动、5秒检测及实际1秒换频。第三问的全向假设允许用无信号排除接收圆盘;第四问的无信号还可能来自方向遮挡,不能沿用这一排除结论。题设及几何算法的完整审核见[算法审核与优化](算法审核与优化-20260911.md)。 - -当前 RL 实际只替换 `RLBayesLoop._select_point` 和 `RLDirectionalLoop._next_probe`。七站/49站覆盖、频道发现、全局任务调度、保守候选集、清除证书和第四问后备清除仍由原算法负责。因此,完整场景全清验证的是混合系统,不是神经网络独立获得了完备性证明。 - -401维输入概括几何、历史读数和60个候选点,但省略完整历史、候选多边形细节及位置—朝向联合约束,不能直接称为完整马尔可夫状态。局部单源训练也没有学习全场覆盖路线与多源调度。PPO可以作为这种压缩观测下的近似策略尝试,但其目标并不自动等于全场最短时间;评估必须使用独立完整场景。[SB3官方训练与评估建议](https://stable-baselines3.readthedocs.io/en/master/guide/rl_tips.html)也强调独立评估、多随机种子和状态信息完整性。 - -## 2. 确认的实现缺陷及修复 - -| 缺陷 | 证据和影响 | 已实施修复 | -| --- | --- | --- | -| 训练传入整个 `BeliefState`,部署传入 `ChannelBelief` | 同一状态的特征索引7、14、15、17、18不同;训练丢失测量次数、末次结果和方位信息 | `env._observe` 使用目标频道信念;测试逐位比较部署输入,并覆盖跨频道交接 | -| BC使用ReLU,接收权重的PPO使用Tanh | 仅复制线性权重无法保留函数。原始专家输入探针中,Q3的90.96%、Q4的67.42%出现不同argmax | BC改为Tanh;复制时检查完整前向输出,重新初始化critic;旧ReLU/旧特征检查点拒绝直接迁移 | -| BC按观测行随机拆分 | 同一episode的相关状态可能同时出现在训练和验证中,分类准确率不足以说明独立场景泛化 | 保存episode编号,按episode划分训练/验证 | -| 第四问训练遮挡状态与运行时不一致 | 训练只记录距离保证盘内的无信号,且获得新方向后未正确重置连续遮挡;后备清除触发轨迹偏离部署 | 所有连续无信号记录为探测序列,仅盘内无信号用于确认定向;正观测清空序列,统一4次遮挡/8次定位阈值 | -| 奖励鼓励首次遮挡等中间事件 | “获得遮挡证据”额外+2、半径收缩等奖励会改变实际时间目标;较高回报不一定更快 | 主要奖励改为实际虚拟耗时的负值,成功清除统一+20,失败/截断重罚;取消这些中间奖励,采用gamma=1 | -| 未屏蔽同地重测、重合候选和第三问盘外梯子点 | 浪费固定误差条件下的检测时间;旧文档“所有候选保证接收”不成立 | 训练/推理共用动作屏蔽,排除已测0.5m格位置、重复候选、越界点;第三问存在距离保证盘时排除盘外点 | -| 保证盘半径恰为0时动作数量可能改变 | 依赖去重后的候选生成器会破坏固定60动作接口 | 即使位置重合也保留编号,交由动作屏蔽处理 | -| 只校验401/60维度不能识别语义变化 | 接收机频道被目标频道替代;旧模型与新模型同形但输入含义不同 | 加入特征版本与算法元数据,v2使用实际接收机频道,旧版保留原输入语义;拒绝问题编号或屏蔽模型元数据不匹配 | -| 基准将 `completed` 当作全清 | 内部状态自洽不代表全部真实源已清除 | 用评测端真实频道集合对照成功清除集合,并检查真实频道没有被误判缺席、正常退出、异常及逐步计时;旧基准新增 `all_valid` 和失败退出码 | -| 官方审计没有严格对应问题与策略名称 | 第三问/第四问摘要可能交叉通过名称检查 | `verify_rl_practice.py` 分别要求 `rl` / `rl_q4` | - -BC探针是对旧网络和“拷贝后换激活”的网络进行比较,并不是新模型错误率,也不是重新测得的BC验证准确率。旧报告38.9%/65.3%的分类准确率不能直接解释为已迁移PPO的模仿准确率。本轮训练的新模型均从随机初始化开始,未使用BC;BC修复通过前向一致性测试,未据此声称重新训练BC已经带来收益。 - -动作屏蔽采用官方 `MaskablePPO` 的 `action_masks` 接口,训练和确定性推理都传入相同规则。[SB3-Contrib官方文档](https://sb3-contrib.readthedocs.io/en/master/modules/ppo_mask.html)说明了这两处的用法。第四问仍允许探索盘外候选,距离保证不等于方向可见。退化到所有动作均被屏蔽时保留中心动作,由步数/预算边界处理,因此不能把本次零重复观测扩展为所有可能状态的严格保证。 - -正常成功episode的累计奖励为 `20 - 局部实际虚拟时间/100`;环境仍保留异常与失败处理,包括证书清除失败的额外惩罚。局部时间从首测与可选交接完成后开始,不能用训练报告中的局部均值替代整场成绩。第三问训练自动清除仍使用证书圆心,而完整 `BayesLoop` 可在证书范围内平移清除点;全局调度、预算与局部环境也有差异,完整闭环验证因此不可省略。 - -## 3. 训练和数据 - -第一版Q3为120000步随机初始化PPO;第一版Q4为BC初始化后40000步PPO。原专家数据分别为5141、14181条,原5场完整测试均值分别是Q3:3088.33/3124.76秒、Q4:14250.15/13230.20秒(手写/RL)。这些历史数字受旧环境和特征影响,不与本轮新课程的单源成功率直接比较。 - -修订课程保留首次有效测向,并加入35%的跨频道、跨位置交接,20%的区域边缘且最小接收半径场景。定向首测覆盖朝向±89.9°,更接近半平面边界。源位置、朝向、半径和逐点误差的抽样仍是自建分布,不是已知的官方生成分布;真值仅用于布设和评测,不进入策略观测或动作屏蔽。 - -两模型使用 `[128,128]` Tanh MLP、2个内存环境、`n_steps=512`、`batch_size=128`、6轮更新、学习率0.0003。实际均完成60416步,来自完整rollout批次向上取整;元数据中的60000是请求步数。安装版本为SB3 2.9.0、SB3-Contrib 2.9.0、Torch 2.11.0+cu128。本次选择CPU、单Torch线程,机器CUDA可用。 - -| 项目 | Q3新模型 | Q4新模型 | -| --- | ---: | ---: | -| 训练种子 | 310001 | 410001 | -| 定向概率 | 0 | 0.75 | -| 训练墙钟时间 | 276.6s | 250.6s | -| 独立单源评估成功 | 59/60 | 60/60 | -| 单源平均局部时间 | 270.04s | 349.51s | -| 平均动作步数 | 2.42 | 3.13 | - -Q3有一次局部训练任务未完成,不能声称单源成功率100%。完整闭环仍有自身调度与后备路径。两问题各只有一个新模型训练种子,未覆盖训练随机性。 - -## 4. 完整场景同条件对照 - -比较三种固定策略:当前手写基线(Q3 `bayes`、Q4 `directional`)、旧默认PPO、新Maskable PPO。相同场景使用相同源位置、频道、半径、朝向及逐点固定误差种子。`referee` 为单独实现,策略不读取模拟器真值。每场保存场景、完整请求/响应、summary、模型哈希和计时核验。 - -开发集为种子700—702、10/16源,各问题6场。随后固定新模型,不再据验证成绩调参;验证集为种子91000—91005、10/13/16源,各问题18场。第四问定向数覆盖1、约半数、仅一个全向三种组成。另加两种圆周边界压力场景。开发、验证、压力共52个不同场景,三策略共156次完整运行,全部满足真实源全清、缺席无误判、正常exit、零异常、逐步耗时复算一致。 - -### 开发集平均整场时间 - -| 问题 | 手写基线 | 旧PPO | 新模型 | -| --- | ---: | ---: | ---: | -| Q3,6场 | 3294.62s | 3206.20s | 3264.62s | -| Q4,6场 | 14289.76s | 12443.43s | 11758.72s | - -### 独立验证集 - -| 问题/指标 | 手写基线 | 旧PPO | 新模型 | -| --- | ---: | ---: | ---: | -| Q3有效全清 | 18/18 | 18/18 | 18/18 | -| Q3平均时间 | 3330.72s | 3254.61s | 3307.65s | -| Q3中位时间 | 3309.16s | 3262.64s | 3222.50s | -| Q3最大时间 | 3690.11s | 3786.98s | 3776.55s | -| Q4有效全清 | 18/18 | 18/18 | 18/18 | -| Q4平均时间 | 13778.82s | 12070.53s | 11797.57s | -| Q4中位时间 | 14587.80s | 12891.83s | 12488.23s | -| Q4最大时间 | 17273.98s | 15365.76s | 15894.44s | -| Q4累计未成功clear尝试 | 616 | 719 | 1380 | -| Q4累计同频道同点重测 | 12 | 28 | 0 | - -Q3三组都没有失败clear或同点重测。Q4新模型减少了重测,但更多使用后备光学清除尝试,平均耗时降低的同时尾部表现有所退化。失败clear本身可来自允许的后备搜索,不能仅凭该计数认定证书错误;其移动和3秒动作耗时全部纳入结果。 - -对独立验证场景做10000次配对bootstrap,负值表示新模型更快: - -| 对比 | 均值相对变化 | 95%场景重采样区间 | 新模型更快场数 | -| --- | ---: | ---: | ---: | -| Q3新模型对手写 | -0.69% | [-4.50%, +2.95%] | 9/18 | -| Q3新模型对旧PPO | +1.63% | [-1.64%, +5.19%] | 8/18 | -| Q4新模型对手写 | -14.38% | [-17.93%, -11.48%] | 18/18 | -| Q4新模型对旧PPO | -2.26% | [-6.08%, +1.71%] | 13/18 | - -新旧PPO的区间均跨0,不能据小幅平均变化宣称稳定改进。区间只反映固定模型在这些场景上的差异,不覆盖训练种子、未知官方分布或所有合法边界。此外本轮同时修改多项训练因素,这不是能归因到单个修复的消融实验。 - -### 边界压力与4000秒目标 - -源全部放在半径1800m圆周、接收半径1000m;第四问隔一个源采用向外发射方向。10/16源各一场,各策略都完成全清。 - -| 问题 | 手写平均 | 旧PPO平均 | 新模型平均 | -| --- | ---: | ---: | ---: | -| Q3 | 4472.58s | 4429.04s | 4648.26s | -| Q4 | 18248.87s | 14404.01s | 15210.08s | - -新Q3的两场分别为4659.06s、4637.46s,仍超过4000s;新Q4为14573.62s、15846.54s,且比旧PPO退化。此前几何优化在另一独立Q3验证组达到平均3315.89s、最大3981.74s,本轮新Q3验证组最大3776.55s;二者只能说明各自验证组达标,不能承诺全部题设场景小于4000s。第四问尚未达到4000s。 - -## 5. 官方证据与测试 - -重新审计已有官方归档,三次均通过题号/策略、官方包SHA、源数、完整清除、正常退出、请求时窗及逐步计时检查,未改写原归档: - -| 问题 | 既有官方案例 | 全清 | 整场时间 | -| --- | --- | ---: | ---: | -| Q3 | F38Y-9Q9J-B82V-CB9Z | 13/13 | 3538.81s | -| Q4,3个定向源 | X43X-VMRF-8GRZ-3SYA | 10/10 | 14003.09s | -| Q4,10个定向源 | BXSA-TFQ3-2DJ6-DHH7 | 10/10 | 14562.82s | - -这些是旧模型的官方可运行证据,不是新模型成绩;不同案例也不能直接计算优化百分比。新模型目前通过本地验证,未在官方新演练中运行。 - -全量回归:`python -m pytest -q --tb=short`,243项通过。初次沙箱运行有24个临时目录权限导致的fixture错误,获得权限后重跑全部通过。新增5项测试覆盖训练/部署观测、动作屏蔽、方向读数重置遮挡、实际成本奖励和BC完整前向一致性。之后对基准/官方审计入口的小修补分别用4次完整场景冒烟运行及三份官方归档复核通过。 - -## 6. 产物与复现 - -主目录为 `output/rl/review-20260911/`: - -- `q3_masked.zip` / `.json`、`q4_masked.zip` / `.json`:新模型与训练元数据,必须成对保存。 -- `evaluation/development/{controls,revised}/results.json`:开发对照。 -- `evaluation/validation/final/results.json`:独立验证与每场完整日志。 -- `evaluation/stress/final/results.json`:边界压力结果与日志。 -- `review_evidence.json`:配对区间、BC/特征错位探针、旧官方重审结果和代码哈希。 -- `benchmark-smoke.json`:旧基准有效性口径修复后的冒烟结果。 - -新Q3模型SHA-256:`b8b3a2bb103588348d8d7791bde9a2b0635c04778f0ac64f91c6f5c7cf87ca6e`。 -新Q4模型SHA-256:`6865d541ff9bdee81886d327345f2660d5f7d72f4b39810a58ae4b867ab37e42`。 - -从项目根目录复现训练时,使用新目录保留本轮检查点: - -```powershell -.venv/Scripts/python.exe scripts/train_rl.py --problem 3 --algorithm maskable_ppo --timesteps 60000 --seed 310001 --device cpu --model output/rl/reproduction/q3_masked.zip --eval-episodes 60 --verbose 0 -.venv/Scripts/python.exe scripts/train_rl.py --problem 4 --algorithm maskable_ppo --timesteps 60000 --seed 410001 --directional-probability 0.75 --device cpu --model output/rl/reproduction/q4_masked.zip --eval-episodes 60 --verbose 0 -``` - -复核本轮冻结模型的完整对照(label须使用尚不存在的名称): - -```powershell -.venv/Scripts/python.exe scripts/evaluate_rl_revision.py --split validation --label rerun-validation -.venv/Scripts/python.exe scripts/evaluate_rl_revision.py --split stress --label rerun-stress -.venv/Scripts/python.exe scripts/summarize_rl_revision.py -``` - -本地内存自检可显式加载对应检查点;`--self-test`不会连接官方模拟器: - -```powershell -.venv/Scripts/mcm26b.exe run --robot-id 2026001 --self-test --strategy rl --rl-model output/rl/review-20260911/q3_masked.zip -.venv/Scripts/mcm26b.exe run --robot-id 2026001 --self-test --problem 4 --q4-strategy rl --rl-model output/rl/review-20260911/q4_masked.zip -``` - -在用户另行启动相应问题的官方演练后,使用实际登录队号和`--base-url`连接。例如第三问(路径使用本轮尚未创建的官方演练目录): - -```powershell -.venv/Scripts/mcm26b.exe run --robot-id 2026001 --base-url http://127.0.0.1:2026 --problem 3 --strategy rl --rl-model output/rl/review-20260911/q3_masked.zip --log output/rl/review-20260911/practice-q3/session.jsonl -``` - -该命令保存请求/响应日志,汇总输出到终端;官方结果文件与汇总还需按原归档流程保存。第四问改用`--problem 4 --q4-strategy rl`及对应模型。本轮未执行上述官方连接命令。 - -进一步研究应先缩小单源训练与完整调度的差异,并处理Q4后备清除和边界退化,再做多个训练种子及新的冻结验证集。当前结果不足以将新模型自动替换为默认策略,也不足以把训练步数增加当作达到4000秒的依据。 diff --git a/docs/第三四问图论与动态规划优化方案.md b/docs/第三四问图论与动态规划优化方案.md new file mode 100644 index 0000000..09adaa4 --- /dev/null +++ b/docs/第三四问图论与动态规划优化方案.md @@ -0,0 +1,516 @@ +# 第三、四问:图论与动态规划算法引入方案 + +- 版本:2026-09-12 +- 前置文档:[第三四问架构优化与运行提速方案](第三四问架构优化与运行提速方案.md)(架构与 P0–P2 项)、 + [algo-3-bayes.md](algo-3-bayes.md)(现役第三问策略)、[algo-3.md](algo-3.md)(七点覆盖证明) +- 范围:只讨论"用图论 / 动态规划类算法进一步压低**虚拟耗时**"这一件事; + 题面约束、协议语义、保守性不变量全部不动 +- 本文所有数字均为**本轮新增实测**(自建内存回环、冻结场景、现役代码), + 复现命令见 §7 + +--- + +## 0. 结论先行 + +**可以,而且第四问的空间远大于第三问;但真正的收益不在"把巡回排得更短",而在 +"把不必要的往返与盲清从决策层消掉"。** + +| 判断 | 证据 | 可回收 | +| --- | --- | --- | +| 第三问**路由**已接近最优,纯图论排线几乎无空间 | 对**同一批实际作业点**求离线最优开放回路:2308 s vs 实测移动 2458 s,只剩 **6.1%(151 s)** | ≤ 150 s | +| 第三问仍有空间,但在**探测次数**(序贯决策),不在排线 | 30.8 次探测 / 13 源,且 0 次 `no_signal`——每次都在有效收缩,但次数仍偏多 | −150 ~ −250 s | +| 第四问**路由**有 20% 空间,但那是被定位/清除绕行"拖"出来的 | 离线最优 4998 s vs 实测移动 6257 s(**20.1%**);而覆盖点巡回的投影顺序 4365 s 已接近离线 31 点最优 4181 s(+4.4%) | −400 ~ −700 s | +| 第四问最大单点是**定向源定位失败导致的后备盲清** | 平均每局 **131 次清除只有 13 次成功**,`fallback_clear_attempts=125.7`,清除动作 419 s + 清除段移动 798 s ≈ **1220 s/局(14% T)** | **−800 ~ −1100 s** | +| 第四问第二点是**探测本身** | 平均 69 次探测 ≈ **2224 s/局(26% T)**,其中 32 s/次的移动占 1880 s | −400 ~ −800 s | +| 覆盖点集**已经最小**,不要再压 | 27 点方案在 75 m/24 档"通过",但在 25 m/48 档有 **298 个 (p,h) 缺口** → 是采样过拟合的假解;在细网格上直接搜索的最小命中集仍是 **31 点** | 0(见 §5.1 的正确性风险) | + +**一句话:第三问的目标是"把 30.8 次探测压到 ~26 次并把序排到最优",第四问的目标是 +"把 125 次盲清变成 3 次有保证的探测"。** 两者都是 DP / 序贯决策问题, +不是经典的 TSP 排线问题。 + +--- + +## 1. 目标函数的图论化 + +题面计时模型(`config.CostConfig`,已由 `evaluation.recompute_virtual_time` 逐微秒复算验证): + +``` +T = L/5 + 5·N_measure + 1·N_switch + 5·N_clear⁺ + 3·N_clear⁻ +``` + +把它写成图上的路径代价,后面所有算法都在这张图上做: + +- **节点** = 一次"停靠"(覆盖站点、定位测点、清除点); +- **边权** `w(a,b)` = `dist(a,b)/5`(移动秒); +- **节点服务费** = `5·(该点要测的频道数) + 1·(换频次数)` 或 `5/3`(清除)。 +- 于是整局 = 一条**开放路径**(起点原点、终点自由),目标是最小化 + `Σ边权 + Σ服务费 + Σ动作惩罚`。 + +四类图问题分别对应四个子决策: + +| 子决策 | 图问题 | 现役做法 | 目标做法 | +| --- | --- | --- | --- | +| 站点/任务排序 | **开放 TSP(小 n 精确)** | NN + 2-opt(滚动) | Held-Karp 精确 DP(n ≤ 14,含换频状态)| +| 定位测点选择 | **带邻域的 TSP / 定向问题(TSPN/OP)** | 每任务独立选点 + 全表重排 | 覆盖骨架 + 最便宜插入;测点作为"邻域"参与联合优化 | +| 定向源定位 | **POMDP / 随机最短路** | 一步贪心 `prob_detect/时间` | 2–3 步 rollout,值函数 = 期望后验 MEC 半径 | +| 后备清除 | **区域覆盖路径(Covering Path)** | 格心最近邻 | 割草机 + 转向点 DP / 格心集 Or-opt | + +--- + +## 2. 本轮实测基线(现役代码,冻结场景) + +场景集:`harness/suites.py`,第三问 core 的 seed 100–105 × 13 源; +第四问 core 全部 9 场(10/13/16 源 × 3 定向占比)。配置为现役默认。 + +### 2.1 第三问(`bayes`,13 源,6 场) + +| 指标 | 数值 | +| --- | ---: | +| 平均虚拟时间 | **3197 s** | +| 移动 | 12292 m = **2458 s(77%)** | +| 覆盖点检测 | 83.5 次 = 501 s(其中 69.8 次 `no_signal`,属缺席证明) | +| 定位探测 | **30.8 次 = 185 s**(0 次 `no_signal`) | +| 清除动作 | 65 s | +| **离线最优开放回路(同一批作业点)** | **2308 s** | +| 路由可回收 | **151 s(移动的 6.1%,T 的 4.7%)** | +| 作业点数(去重) | 35–50 | + +### 2.2 第四问(`directional` + `q4_mincover_v1`,9 场) + +| 指标 | 数值 | +| --- | ---: | +| 平均虚拟时间 | **8676 s** | +| 移动合计 | 6257 s(72%) | +| ├ 覆盖段移动 | 3579 s | +| ├ **探测移动** | **1880 s** | +| └ **清除移动** | **798 s** | +| 动作耗时 | 2149 s(覆盖 1386 / 探测 344 / 清除 419) | +| 探测次数 | 69.0 次(`no_signal` 4–12 次) | +| **清除次数 / 成功** | **131.1 / 13.0 → 118 次失败** | +| `fallback_clear_attempts` | **125.7 次/局** | +| 后备盲清格数(单次) | 3 ~ 210 格,全部以 `cleared` 结束 | +| **离线最优开放回路(同一批作业点)** | **4998 s** | +| 路由可回收 | 1259 s(移动的 20.1%,T 的 14.5%) | +| 覆盖投影顺序 vs 离线 31 点 2-opt | 4365 s vs 4181 s(+4.4%) | + +### 2.3 成本地板估计 + +| 问题 | 不可压缩部分 | 现状 | 真实可压缩 | +| --- | --- | ---: | ---: | +| 第三问 | 七点环 1392 s + 覆盖检测 501 s + 清除动作 65 s + 每源必经的接近/清除移动 + 每源 ≥2 次探测 | 3197 s | **~300–450 s(10–14%)** | +| 第四问 | 31 点巡回 ~4180 s + 缺席检测 ~1386 s + 每源 ≥3 次探测与一次清除 | 8676 s | **~2000–2800 s(23–32%)** | + +> 第四问的 4000 s 验收线**依然不可达**(单是 31 点巡回 + 缺席检测就 ≈5566 s), +> 这与前置文档 §6.2 的结论一致;本方案只承诺把 8676 s 压向 6500 s 量级。 + +--- + +## 3. 算法设计 + +### 3.1 D1(第四问最高优先):定向源的"抵近 + 交会"滚动时域 DP + +**问题本质**:±1° 示向度误差在距离 d 处给出的横向不确定度约 `d·tan(1°) ≈ 0.0175 d`。 +d = 1000 m 时单条方位线的横向约束只有 ±17.5 m;两条方位线的交会角 θ 决定最终尺度 +`≈ 0.0175 d / sin θ`。要压到 20 m 清除证书,必须**同时**满足:交会角大、距离近。 +现役 `_visibility_probe` 只最大化 `prob_detect(q)/(移动+6)`,天然偏好"近且可见", +与"交会角大"无关;远距离又永远收敛不到 20 m,于是退化到 20 m 网格盲清。 + +**形式化**(这就是一个 POMDP): + +- 状态 `b` = `JointBelief`(位置 × 24 档朝向的可行集,见 `belief/joint.py`), + 再叠加 `r_eff ~ U[1000,1500]` 的不确定度; +- 动作 `q` ∈ 候选测点(保证接收点 ∪ 对跖点 ∪ 三圈环探 ∪ **朝 MEC 圆心的抵近点**); +- 观测 `o ∈ {direction, near, no_signal}`,由每条粒子 `(p, h, r_eff)` 解析预测; +- 代价 `c(q) = 6 s + dist(pos,q)/5`; +- 终止:`MEC(b).radius ≤ 20 − margin`(可一次清除); +- 值函数:`V(b) = min_q E_o[ c(q) + V(b') ]`。 + +**实现选择(按代价递增)**: + +1. **一步期望后验半径**(最小改动,复用 Q3 已有内核的二维推广): + 对候选 `q`,按粒子权重模拟三分支结果,用幸存子集的 MEC 半径近似 `V(b')`, + 取 `E[radius] + λ·c(q)` 最小者。把 `particles.py::expected_posterior_radius` + 的向量化实现在 `JointBelief` 上重写一份(numpy 可用时广播)。 +2. **2–3 步 rollout**:对前 K=8 个候选各展开一层,深度 2;墙钟预算 ≤ 0.3 s/决策。 +3. **交会角代理(解析、零墙钟)**:若一步法来不及落地,先用 + `score(q) = −E[radius] · sin(Δbearing(q, 既有方位线)) / dist(q, center)` + 的确定性代理,实验证明有效后再换 rollout。 + +**关键结构性改动**:把候选点集从"绕 MEC 的固定环"扩展为**含抵近点**, +即允许 `q` 落在 `center + α·(pos − center)` 上、`α` 从 0.6 到 1.0 采样。 +这样当远距离无法收敛时,策略会**主动抵近**并以一次正常角域证书收尾, +而不是把 200 格盲清当作唯一出路。后备清除**保留为安全网**,但目标是触发次数下降 ≥ 80%。 + +**验收**:`fallback_clear_attempts` ≤ 15/局(现 125.7);定向频道平均探测次数 +≤ 全向频道的 1.5 倍;清除成功率 ≥ 90%;9 场景全清率 100%。 +**预期**:−800 ~ −1100 s。 + +--- + +### 3.2 D2:覆盖骨架 + 最便宜插入(TSPN 的在线近似) + +**问题本质**:31 个覆盖点是**必须在场**的(缺席证明),但探测点与清除点是 +**临时产生**的。现役做法把两类点混在一张任务表里,每次从零做 NN + 2-opt +(`bayes_loop._order_tasks`),等于让临时任务把骨架顺序"打散"。 +实测投影顺序 4365 s vs 离线最优 4181 s,说明骨架顺序本身没坏, +坏在**绕行开销**——而绕行开销正是插入位置没优化。 + +**形式化**:这是 **TSP with Neighborhoods / Generalized TSP**: + +- 骨架:离线求覆盖点集的近优开放回路 `S`(`7` 点用解析证明;`31` 点用 Or-opt/3-opt, + `n ≤ 16` 时可直接 Held-Karp 精确); +- 在线:给定当前任务 `q` 与其**邻域**(`clear` 任务的邻域是 `C₂₀(K)`,`locate` + 任务的邻域是候选测点集),求 + `Δ(i,j) = dist(a_i, q) + dist(q, a_{j}) − dist(a_i, a_j)` + 最小的插入位置 `(i,j)`;这正是"图上的最便宜插入",`O(|S|²)` 每任务。 + +**实施**: + +1. `guarantee/cover.py` 增加 `optimize_tour(points, seed_tour, passes)`(Or-opt + 2-opt), + 把 `nn_tour_m` 从"上界"变成"已优化值",并写入证书 `tour_virtual_s`。 +2. `planner/bayes_loop.py` 新增 `_skeleton`(覆盖点顺序)与 `_insert_task(task, neighborhood)`; + `_order_tasks` 退化为"骨架遍历 + 已插入任务",保留现有 2-opt 作为兜底开关。 +3. `clear` 任务的邻域用 **`C₂₀(K)` 内离插入点最近的点**(见 3.4),使插入代价与 + 清除目标联合最小。 + +**验收**:第四问移动 ≤ 5000 s(现 6257 s);路由相对离线最优的 gap +(新增回归指标 `route_gap_vs_offline`)从 20.1% 降到 ≤ 10%。 +**预期**:−400 ~ −700 s。 + +--- + +### 3.3 D3:后备清除的覆盖路径(若 D1 后仍触发) + +后备清除是"用 20 m 圆盘覆盖残差区域 `R` 直到命中真源"——即 **Covering Path Problem**。 + +- 当前 `_fallback_clear` 对格心做 nearest-first 扫描,等价于格心集上的 NN 开放路径, + 典型约为最优的 1.2–1.3 倍; +- 改进:对格心集做 **Or-opt + 2-opt**(`k ≤ 400`,`O(k²)` 一次约 0.1 s,且只在 + 极少数局触发); +- 上界更优解:凸区域上的**割草机(boustrophedon)扫描**,用 DP 在扫描线方向选择 + 转向点可精确最优;对一般多边形用梯形分解 + DP。 + +**验收**:后备触发时移动 ≤ 现值的 80%(单次);触发次数本身由 D1 压到 ≤ 15/局。 +**预期**:−100 ~ −200 s(D1 未完全消除时的兜底)。 + +--- + +### 3.4 T1/T3:第三问的精确排线、换频 DP 与清除点选择 + +**(a) Held-Karp 精确任务序(含换频状态)** + +现役 `_two_opt` 是启发式且被 4 轮上限截断。任务表典型只有 6–12 项, +可以**精确求解**: + +``` +dp[S][j][c] = 已访问任务集 S、停在任务 j、测向频道为 c 的最小代价 +转移:dp[S∪{k}][k][c'] = dp[S][j][c] + dist(pos_j, pos_k)/5 + service(k, c, c') +``` + +- 规模:`|T| ≤ 12` 时 `2^12 × 12 × 20 ≈ 1.0M` 状态,纯 Python 约 0.1–0.3 s/次; + 滚动重排每步一次会吃掉预算,因此**只在任务表新增/删除任务时重解**, + 或在 `|T| ≤ 9` 时默认启用、否则回退 2-opt + Or-opt。 +- 换频代价精确化:`service` 依赖进入/离开频道,把 `c` 并入状态即可精确; + 现役 `_path_cost` 用"按频道排序"的贪心近似,会低估/高估 1–3 s/站。 +- 附图论下界:对当前点集算 **MST 权重**(`O(n²)` Prim), + 得到开放路径最优值的下界,写入 `summary.route_lower_bound_s`, + 用于**在线后悔值审计**与回归("本步排序距最优 ≤ x%")。 + +**验收**:`route_gap_vs_offline` ≤ 3%;单局墙钟增量 ≤ 0.2 s。 +**预期**:−120 ~ −200 s。 + +**(b) 探测的 2 步 rollout(T2)** + +现役 `_select_point` 是一步贪心(期望 log 幸存占比 + λ·移动)。 +把它扩成深度 2 的 rollout:对前 `K=8` 个候选,各展开一次测量的三分支 +(direction / near / no_signal),取 `E[V]` 最小者。 +`V` 沿用现有 `expected_survival`。这属于**滚动时域 DP**,不改任何安全性判定。 + +**验收**:探测次数 30.8 → ≤ 26;墙钟 ≤ 0.3 s/决策。 +**预期**:−150 ~ −250 s。 + +**(c) 清除点选在 `C₂₀(K)` 内离当前位置最近处(T3)** + +`C₂₀(K) = ∩_{g∈K} B(g, 20)` 是凸集(圆盘之交)。求其内离当前点最近点是一个 +**凸可行性/投影问题**(对小规模可枚举多边形顶点 + 圆盘投影,或直接迭代投影)。 +现役 `_near_clear_target` 只沿一维方向平移,与最优之差 ≤ 0.74 m(前置文档 P1-1 已复核), +收益主要来自**与 3.2 插入代价的耦合**:先定插入位置、再选清除点,比反过来省更多。 + +**验收**:清除段移动下降 ≥ 5%。 +**预期**:−50 ~ −150 s。 + +**(d) 七点环半径(T4)**:`1159.7 → 1122.9`(可证明下界),−44 s。 +仅作为"证明性"改动落地,不作为收益项。 + +--- + +## 4. 实施路线 + +| 阶段 | 内容 | 交付物 | 验收门槛 | 依赖 | +| --- | --- | --- | --- | --- | +| **S0 基线冻结**(0.5 天) | 把近期 sweep 的最优参数(`route_aware_probe=false`、`lambda_move_s≈0.06`、`opportunistic_radius_ratio≈0.4–0.5`)回填为基准,跑满 core+boundary 并归档 | `output/suite/q3-baseline`、`q4-baseline` | 现有 `valid` 口径 100% | 无 | +| **S1 度量补全**(0.5 天) | 在 `scripts/run_suite.py` 增加 `route_gap_vs_offline`、`route_lower_bound_s`、`distinct_service_points`、`coverage_actual_visited` 四列 | runner 改动 + 回归 | 与本文 §2 实测复现一致 | S0 | +| **S2 覆盖证书硬化**(1 天,**正确性优先**) | 证书分辨率 75 m/24 → 20 m/72;设计裕量 `r_design ≤ 960 m` 或细网格直接搜索;保留 10% 保险点预算 | `guarantee/cover.py`、`plans/*.json`、正/负例测试 | 细网格(15 m/72)缺口 = 0;故意删点必须被检出 | S1 | +| **S3 第四问 D1**(2–3 天) | `belief/joint.py` 增加期望后验半径 / rollout 选点;`planner/__init__.py::_probe_candidates` 增加抵近点;后备降级为安全网 | `belief/joint.py`、`planner/__init__.py`、测试 | `fallback_clear_attempts ≤ 15`;全清 100%;墙钟 ≤ 1.0 s/局 | S2 | +| **S4 第四问 D2/D3**(2 天) | 覆盖骨架 + 最便宜插入;`C₂₀` 邻域;后备 Or-opt | `planner/*`、`guarantee/cover.py` | 移动 ≤ 5000 s;`route_gap ≤ 10%` | S3 | +| **S5 第三问 T1/T2/T3**(2 天) | Held-Karp(含换频)+ MST 下界;探测 2 步 rollout;`C₂₀` 最近点 | `planner/bayes_loop.py`、`plan/*` | 探测 ≤ 26;`route_gap ≤ 3%`;T ≤ 2900 s | S1 | +| **S6 收口**(1 天) | 全量配对、论文数据表、消融图 | 报告 + `docs/paper` 数据 | 与 S0 配对全部 `valid`,无退化场景 | S4/S5 | + +**顺序约束**:S1(度量)先于任何算法改动,否则"更快"不可证;S2(证书)先于 +第四问算法改动,否则可能在错误的安全基线上做优化。 + +--- + +## 5. 风险与明确不做的部分 + +### 5.1 本轮发现的正确性风险(必须先处置) + +现役 `q4_mincover_v1`(31 点)与 `square49`(49 点)在**粗采样**下缺口为 0, +但把校核分辨率从 75 m/24 档提到 25 m/48 档: + +| 点集 | 点数 | 75 m/24 缺口 | 25 m/48 缺口 | 15 m/72 缺口 | 最坏命中@75 m | 最坏命中@25 m | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | +| `square49` | 49 | 0 | 0 | 0 | 760.3 m | 760.3 m | +| `q4_mincover_v1`(现役) | 31 | 0 | **125** | **566** | 999.1 m | 1000.0 m | +| 细网格重搜最小集 | 31 | 0 | 0 | 35 | 983.0 m | 996.2 m | +| 贪心 27 点(75 m 档最优) | 27 | 0 | **298** | 1117 | 986.5 m | 1000.0 m | + +结论: +1. **31 点很可能就是实际下界附近**:多起点随机贪心 + 冗余剪枝在 25 m/48 细网格上 + 直接搜索的最小解仍是 31 点(尚未做 LP 松弛下界,但连贪心都下不去); + 之前看到的 27 点是**采样过拟合的假解**,不可采纳; +2. `q4_mincover_v1` 的安全裕量几乎为 0(999.1 m),存在"真源恰落在细缝 + `r_eff` 取下界" + 的漏检窗口,现役测试没暴露是因为随机场景未命中细缝且 `r_eff` 通常 > 1000; +3. `square49` 裕量充足但巡回 36.4 km,不可回退; +4. 正确做法是**细网格重搜 + 设计裕量**(S2),代价约 0–150 s,**先保安全再谈提速**。 + +### 5.2 其他风险 + +| 风险 | 影响 | 缓解 | +| --- | --- | --- | +| POMDP rollout 墙钟超预算 | 单局计算 > 1 s | 深度 2、候选截断 K=8、`--profile` 纳入基准必报列;超预算自动退回一步法 | +| Held-Karp 状态爆炸(任务表变长) | 单步计算抖动 | 仅在 `|T| ≤ 9` 默认启用,`> 9` 回退 2-opt + Or-opt | +| 抵近点破坏可见性保证 | 探测反而 `no_signal` 变多 | 抵近点仍以 `prob_detect > 0` 过滤;`no_signal` 是合法负观测,不破坏守恒性 | +| 骨架插入与"找全即停"冲突 | 为走骨架而多绕行 | 骨架只提供顺序,不新增必须访问的点;任务表为空即停 | +| 细网格证书重搜耗时 | 离线 3–5 min | 一次性离线搜索 + 运行期按计划名缓存校验(沿用 `load_plan` lru_cache) | + +### 5.3 明确不做 + +- **不重引入 PPO/HRL**(前置文档已用 109 776 步的负面结果排除); +- **不引入新的运行时依赖**(仍只有 `requests`;`numpy` 仅作可选加速后端, + `networkx`/`scipy` 不进入运行时路径); +- **不改变停止条件**(`unresolved_channels` 的口径取舍属于评分方式问题, + 须先与题面评分方式核对,本轮不作为默认行为); +- **不承诺第四问 4000 s**(成本地板 ≈5566 s,见 §2.3)。 + +--- + +## 6. 验收与度量 + +### 6.1 有效性定义(沿用,不得放宽) + +``` +valid := 全部真源被清除 ∧ 缺席频道与真值一致 ∧ 正常 /exit + ∧ 零算法异常 ∧ 逐微秒计时复算一致 +``` + +### 6.2 新增必报列(写入 `scripts/run_suite.py` 逐局行与 aggregate) + +| 列 | 定义 | 用途 | +| --- | --- | --- | +| `route_gap_vs_offline` | `实测移动 − 离线最优开放回路(同作业点集)` / 实测移动 | 区分"排线不够好"与"点选得不对" | +| `route_lower_bound_s` | 当前任务集 MST 权重 / 速度 | 在线后悔值审计 | +| `distinct_service_points` | 去重作业点数 | 探测是否真的在减少 | +| `coverage_actual_visited` | 实际测过的覆盖点数 | 缺席证明是否提前结束 | +| `probe_no_signal_ratio` | 探测中 `no_signal` 占比 | D1 的效果指标 | +| `fallback_clear_attempts` | 已有 | D1 的主验收指标 | + +### 6.3 目标(vs §2 基线) + +| 指标 | Q3 现 | Q3 目标 | Q4 现 | Q4 目标 | +| --- | ---: | ---: | ---: | ---: | +| core 平均虚拟时间 | 3197 s | **≤ 2900 s** | 8676 s | **≤ 6500 s** | +| 移动 | 2458 s | ≤ 2250 s | 6257 s | ≤ 5000 s | +| 探测次数 | 30.8 | ≤ 26 | 69.0 | ≤ 45 | +| 后备盲清次数 | 0 | 0 | 125.7 | **≤ 15** | +| `route_gap_vs_offline` | 6.1% | ≤ 3% | 20.1% | ≤ 10% | +| `fallback` 清除成功率 | — | — | 10% | ≥ 90% | +| 单局计算墙钟 | 1.0 s | ≤ 1.2 s | 1.0 s | ≤ 1.5 s | +| 细网格证书缺口(15 m/72) | — | 0(Q3 解析) | 566 | **0** | + +### 6.4 回归 + +`uv run pytest`(当前 232 项)必须全过;新增: + +- `CoveragePlan` 细网格正/负例(删掉任一点必须被检出); +- `JointBelief` 的期望后验半径与真源保留性质对拍(随机 `(p,h)` × 随机观测序列); +- `Held-Karp` 与 `2-opt` 在同一小任务集上的最优性对拍(DP 结果必须 ≤ 2-opt); +- `C₂₀` 投影的三角不等式性质(投影点距候选集任一点仍 ≤ 20); +- 逐位一致性:numpy 与纯 Python 两条路径在同一动作序列下 `actions_sha256` 相同。 + +--- + +## 7. 复现命令(本轮实测) + +```bash +# 度量基线(§2.1/§2.2/§2.3):作业点分解 + 离线最优回归 + 成本地板 +uv run python /tmp/analyze_headroom.py # 路由 gap:Q3 6.1%,Q4 20.1% +uv run python /tmp/decompose.py # Q4 三段移动 + 动作 + 清除成功率 +uv run python /tmp/q3stats.py # Q3 探测/覆盖检测/跳测统计 + +# 覆盖证书分辨率(§5.1) +uv run python /tmp/verify_margin.py # 现役 31 点在 25 m/48 档缺口 125 +uv run python /tmp/hitset_fine.py # 细网格最小解仍是 31 点 + +# 既有常驻工具 +uv run python scripts/run_suite.py --problem 4 --suite all --jobs 6 \ + --variants directional@q4_mincover_v1 --label q4-baseline +uv run python scripts/verify_q4_cover.py --out output/q4/cover-certificate.json +uv run python scripts/analyze_run_timing.py +``` + +> 上述 `/tmp/*.py` 为一次性分析脚本,S1 阶段应把其中的 +> `route_gap_vs_offline`、`offline_opt_open_path`、`mst_lower_bound` +> 三个函数并入 `scripts/run_suite.py`(或新建 `scripts/analyze_routing.py`)常驻入库, +> 使"虚拟时间花在哪"与"覆盖集是否合法"一样成为可随时重跑的回归项。 + +--- + +## 8. 本轮实测回填(2026-09-12 实施结果) + +本节记录 S1–S5 全部落地后的**实测**结果与**负面结论**。所有数字均为冻结基准集 +(`harness/suites.py`)配对复跑,口径与 §6.1 完全一致;复现命令见 §8.6。 + +### 8.1 交付物清单 + +| 项 | 位置 | 状态 | +| --- | --- | --- | +| 图论/DP 工具箱(精确开放路径、2-opt/Or-opt、MST 下界、路由度量) | `src/mcm26b/routing.py` | ✅ 新增 | +| S1 必报列(`route_gap_vs_offline`、`route_lower_bound_s`、`distinct_service_points`、`coverage_actual_visited`、`probe_no_signal_ratio`、`plan_verify_wall_s`) | `scripts/run_suite.py` | ✅ 新增 | +| S2 设计裕量覆盖计划 + 细网格证书 + 精细剪枝 | `guarantee/cover.py`、`scripts/verify_q4_cover.py`、`plans/q4_mincover_v2.json` | ✅ 新增并设为默认 | +| S3/D1 期望后验半径值函数 + 可见性过滤 + 抵近点 | `belief/joint.py`、`planner/__init__.py` | ✅ 新增(默认口径见 §8.3) | +| S4/D3 后备清除路径改进 | `planner/__init__.py::_fallback_order` | ⚠️ 已实现,实测负收益,默认关闭 | +| S5/T1 Held-Karp 精确任务序(含换频状态) | `planner/bayes_loop.py::_exact_order` | ⚠️ 已实现,实测负收益,默认关闭 | +| 回归测试 | `tests/test_routing.py`、`tests/test_joint_belief.py`、`tests/test_coverage_plan.py` | ✅ 新增,`uv run pytest` 268 项全过 | + +### 8.2 最终成绩(vs S0 基线) + +| 指标 | Q3 基线 | Q3 现 | Q4 基线 | Q4 现 | 目标 | +| --- | ---: | ---: | ---: | ---: | ---: | +| core 平均虚拟时间 | 3210.3 s | **3188.7 s(−0.7%)** | 8676.1 s | **8602.0 s(−0.9%)** | 2900 / 6500 ✗ | +| core 最大虚拟时间 | 3798.5 s | **3663.7 s(−3.5%)** | 10890.8 s | **9630.4 s(−11.6%)** | — | +| 移动 | 12446.8 m | **12338.1 m(−0.9%)** | 31286.4 m | 32891.1 m(+5.1%) | 2250 / 5000 ✗ | +| 检测次数 | 111.0 | 111.1 | 346.0 | **333.7** | — | +| 后备盲清次数 | 0 | 0 | **125.7** | **4.3(−96.6%)** | ≤15 ✅ | +| `route_gap_vs_offline` | 8.67% | **8.07%** | 18.9% | 24.3% | ≤3% / ≤10% ✗ | +| 单局计算墙钟 | 1.29 s | **1.04 s** | 5.29 s | **4.09 s** | ≤1.2 / ≤1.5 ⚠️ Q4 超标 | +| 覆盖计划运行期校验 | — | 0.42 s | — | 4.80 s(15 m/72 一次性) | — | +| 细网格证书缺口(15 m/72) | — | 0(解析) | 566 | **0** | 0 ✅ | +| 有效局 | 18/18 | 20/20(含边界) | 9/9 | 11/11(含边界) | 100% ✅ | + +**结论**:本轮的硬收益是**第四问后备盲清被消除**(125.7 → 4.3 次/局,最坏局 +10890.8 → 9630.4 s)与**覆盖证书的正确性**(细网格缺口 566 → 0);虚拟时间只有 +0.7–0.9% 的均值改善(中位 −2.0%),**远未达到方案 §6.3 的目标**。 +第三问的改善落在噪声内(中位相对变化 0.0005)。§2 的成本地板估计(Q3 可压缩 +10–14%、Q4 23–32%)**过于乐观**,实测只回收了约 1%。 + +### 8.3 定向源探点(D1):先负后正,最终只保留"可见 + 就近" + +D1 的完整实现(期望后验 MEC 半径值函数 + 抵近点 + 遮挡点剔除)在**修正联合 +信念朝向规则之前**配对为:后备 125.7 → 53.8 次,但探测移动 +5.6 km,虚拟时间 +8676 → 9411 s(净负)。原因有两个: + +1. 后备清除在命中真源时**立即结束**,"整条路径最短"不是它的目标函数, + §3.2/§3.3 的插入代价模型在这里并不成立; +2. 更关键的是:**联合信念的 `no_signal` 朝向规则被写反了**(§8.4), + `prob_detect` / 期望半径因此系统性地高估"被遮挡点可见",选点必然跑偏。 + +修正后重测(9 场景 core): + +| `probe_score_mode` | λ | 后备次数 | T 均值 | 移动 | 计算墙钟 | +| --- | ---: | ---: | ---: | ---: | ---: | +| `visibility`(旧) | — | 125.6 | 9224.6 s | 33595 m | 11.6 s | +| `expected_radius` | 0.05 | 6.8 | 9740.5 s | 38824 m | 9.6 s | +| `expected_radius` | 5.0 | 4.3 | 8604.3 s | 32893 m | 3.7 s | +| `nearest_visible`(默认) | — | **4.3** | **8602.0 s** | 32891 m | 3.4 s | + +λ 越大越优说明本题的探点问题里"**看得见且少走路**"比"单步信息量最大"更重要; +λ→∞ 的极限(可见候选中移动最省)就是默认口径。值函数代码与其对拍测试保留, +供后续研究(例如配合真正的多步 rollout)。 + +### 8.4 本轮发现的正确性缺陷(已修复) + +`belief/joint.py` 的 no_signal 朝向裁剪**规则反向**:`keep=False` 分支用了 +"确定覆盖"掩码做交集,等价于保留"必然看得见"的档、删掉"确定看不见"的档; +`keep=True` 分支又漏计了格内角裕量 `asin(margin/max(dist−margin,1))`。 +两者都会删掉真源的朝向档(`tests/test_joint_belief.py::test_true_source_survives_consistent_observations` +在随机观测序列上直接复现)。修复后: +`keep=False` 改用 `_far_mask`(与 `_cover_mask` 互补)并把距离阈值收紧为 +`r_eff_min − margin`,`keep=True/False` 都计入格内角裕量。 + +**修复本身是净成本**:在旧 `visibility` 探点口径下 Q4 core 由 8676 → 9225 s; +换成 §8.3 的新探点口径后回落到 8602 s,同时后备清除降 96.6%。 +换言之,本轮第四问的成绩改善**主要来自"修好信念 + 换探点口径"这一组合**, +而不是 §3 预期的插入/排线优化。 + +### 8.5 覆盖证书硬化(S2) + +现役 `q4_mincover_v1`(31 点)在粗采样(75 m/24)下缺口 0,但细网格复检: + +| 点集 | 点数 | 25 m/48 缺口 | 20 m/72 缺口 | 15 m/72 缺口 | 最坏命中 | NN 巡回 | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | +| `q4_mincover_v1`(旧) | 31 | 125 | 336 | 566 | 1000.0 m | 22.9 km | +| `q4_mincover_v2`(默认) | 31 | **0** | **0** | **0** | **990.0 m** | 23.9 km | +| 严格连续空间证书备选 | 36 | 0 | 0 | 0 | 973.7 m | 25.4 km | + +`q4_mincover_v2` 的生成方式:搜索分辨率 50 m/48 档、设计裕量 `r_design=965 m`、 +前向角裕量 5°,再做**证书分辨率(15 m/72)精细剪枝**(每次删点都用同一证书口径 +复核),因此点数与旧计划相同而缺口归零,**没有付出点数代价**。 + +> 严格连续空间界需要 `r_verify + 15·√2/2 ≤ 1000`(即 ≤989.4 m)且角裕量 ≥2.5°; +> 满足该条件的 36 点方案最坏命中 973.7 m,但代价 +5 点(约 +1000 s), +> 已落盘为 `output/q4/cover-certificate-v3.json` 备用。默认方案在 15 m/72 +> 采样下最坏 990.0 m,与严格界的差 0.65 m 属采样边界效应,作为已知残余风险登记。 + +### 8.6 负面结论与复现命令 + +| 优化项 | 实测 | 结论 | +| --- | --- | --- | +| S4/D3 后备清除 Or-opt | 后备失败 125.7 → 161.4 次(T 8676 → 8940 s) | ❌ 目标函数错位:命中即停,路径最短反而把真源推后 | +| S5/T1 Held-Karp 精确任务序 | 3203.2 s vs 2-opt 3193.1 s(18 场景) | ❌ 滚动时域下"当前任务表逐位最优"反而略差;默认 0 | +| `route_aware_probe` | 3210.3 s vs 关闭 3193.1 s | ❌ 权重 1e-3 的路线项无净收益;默认关闭 | +| Q4 融合巡回(站点顺带定位) | 12711 s vs 10809 s | ❌ 与 P0-1 在第三问的负面结论一致 | +| `opportunistic_radius_ratio` | 0.65 → 0.5:3210.3 → 3205.4 s | ✅ 采纳(弱收益) | + +```bash +# S1 度量基线(含路由 gap / MST 下界 / 作业点/静默率) +uv run python scripts/run_suite.py --problem 4 --suite core --jobs 6 \ + --variants directional --label q4-baseline --out output/suite +uv run python scripts/run_suite.py --problem 3 --suite core --jobs 6 \ + --variants bayes --label q3-baseline --out output/suite + +# S2 覆盖证书(生成 + 细网格校核;--fine-prune 走证书分辨率剪枝) +uv run python scripts/verify_q4_cover.py --spacing 100 --radius 2850 \ + --target-step 50 --headings 48 --design-radius 965 --heading-margin 5 \ + --verify-step 15 --verify-headings 72 --fine-prune \ + --write-plan q4_mincover_v2 --out output/q4/cover-certificate-v2.json + +# S3/D1 口径配对(可见性/值函数/极限三档) +uv run python scripts/run_suite.py --problem 4 --suite core --jobs 6 \ + --variants "directional#search.probe_score_mode=visibility,\ +directional#search.probe_score_mode=expected_radius;search.probe_lambda_move_s=5,\ +directional#search.probe_score_mode=nearest_visible" --label q4-probe-ab + +# 回归 +uv run pytest -q # 268 项 +``` + +### 8.7 仍未达标项的处置建议 + +| 未达标 | 差距 | 建议 | +| --- | --- | --- | +| Q3 ≤2900 s | −9% | 已无低风险空间:七站巡回 1392 s + 覆盖检测 501 s + 每源 ≥2 次探测是成本地板;需要改停止条件或覆盖语义才能继续下降 | +| Q4 ≤6500 s | −24% | 31 点巡回 + 缺席检测 ≈5566 s 是地板,与 §2.3 一致;只能改"逐频道缺席证明"口径 | +| `route_gap` Q4 24.3% | — | 该指标在"作业点数随决策变化"时口径不稳(本方案把后备格换成探测点后作业点从 206 降到 110);建议改为"覆盖骨架段"与"临时任务段"分别报 gap | +| Q4 计算墙钟 4.1 s(目标 1.5 s) | 2.7 s | 热点在 `belief` 凸多边形与 `select_measurement_point`(D1 之前的基线即 5.3 s),属 P0-4b 表示层张量化,与本方案无关 | +| 严格连续空间覆盖证书 | 0.65 m | 若要正式采用 36 点严格方案:`--verify-radius 989 --verify-heading-margin 2.5`,代价约 +1000 s | diff --git a/docs/第三四问架构优化与运行提速方案.md b/docs/第三四问架构优化与运行提速方案.md new file mode 100644 index 0000000..920dbba --- /dev/null +++ b/docs/第三四问架构优化与运行提速方案.md @@ -0,0 +1,595 @@ +# 第三、四问系统性架构优化与运行提速方案 + +- 版本:2026-09-12 +- 依据:本仓库运行历史(`session.jsonl`、`practice-p3-*.jlog`、`referee-data/sessions/*`、 + `output/hrl/ui/q3-main/*`、`docs/` 全部性能记录)+ 本文档新增的复跑与离线校核实验 +- 范围:第三问(全向源)与第四问(混合定向源)的**闭环架构、算法分解、运行治理**, + 不改动题面约束、协议层语义与既有保守性不变量 +- 结论先行:**虚拟时间的 75–83% 是移动**,移动里约一半不是覆盖巡回而是定位/清除往返; + **第四问的全部失败来自定向源**;旧机器学习层已被证明不如手写基线。 + 因此本轮优化的主线是"**把定位并入覆盖巡回 + 把发现集压到最小命中集 + 给定向源建位置×朝向联合信念**", + 而不是再堆学习算法。 + +--- + +## 0. 摘要(TL;DR) + +### 0.1 三个待解的结构性浪费 + +| 编号 | 现象 | 直接证据 | 估计可回收 | +| --- | --- | --- | --- | +| W1 | Q3 定位探点往返 5741 m / 1148 s,与覆盖巡回(6960 m / 1392 s)相当 | 本次复跑(13 源,seed 0):24 次探点,均值 442 m/次 | **−900 ~ −1100 s/局** | +| W2 | Q4 发现集是 700 m 方格 49 点,巡回 36.4 km;同一保证下贪心最小命中集只要 31 点、22.9 km | `scripts/verify_q4_cover.py`:43 032 个 (p,h) 采样,两组点集均 100% 覆盖 | **−2700 s(巡回)+ −1140 s(检测)** | +| W3 | Q4 定向源没有"位置×朝向"联合信念,只能阶梯探点,最后退化到 ≤400 格盲清 | referee 两局:全向 17/17 清除,定向仅 2/6;4/4 漏检全是定向 | **−1500 ~ −3000 s/局** | + +### 0.2 预期收益(自建模拟器,同一冻结基准集,配对口径) + +| 指标 | Q3 现状 | Q3 目标 | Q4 现状 | Q4 目标 | +| --- | ---: | ---: | ---: | ---: | +| 平均虚拟时间 | 3707 s(本次 6 场景)/ 3536 s(13 源单局) | **≤ 2700 s** | 13 652 s(10 源 3 定向单局)/ 13 165 s(4 场景均值) | **≤ 9000 s** | +| 最大虚拟时间 | 4628 s | **≤ 4000 s** | > 17 000 s(边界压力) | ≤ 12 000 s | +| 每局计算墙钟 | 2.9–6.5 s | **≤ 0.8 s** | 6.5 s | **≤ 1.0 s** | +| 有效局(全清+缺席无误判+零异常+正常退出+计时复算一致) | 6/6 | 基准集 100% | 4/4 | 基准集 100% | + +> 4000 s 是本项目 `docs/算法审核与优化-20260911.md` 自设的验收线,不是题面评分线; +> 第四问在 10 源场景下**不承诺**达成 4000 s,理由见 §6.2。 + +### 0.3 明确不做的事 + +- 不重新引入 PPO/HRL。运行历史支持"保留手写基线":HRL 训练 4007.9 s / 109 776 步后 + 仍被 `bayes` 稳定压制 4.3–5.0%(17–18/20 场景,符号检验 p=0.0001),且 94% 的差距来自 + 多走的移动;其评估集 20 个场景**全部是单源全向**,无法支撑任何第四问结论。 +- 不引入新的第三方运行时依赖(仍是 `requests`;`numpy` 仅作**可选加速后端**,缺失时回退纯 Python)。 + +### 0.4 实施进展与实测回填(2026-09-12) + +冻结基准集 `harness/suites.py`(第三问 18 主场景 + 2 边界;第四问 9 + 2), +并行 runner `scripts/run_suite.py`,配对口径同场景同误差种子。 + +| 项 | 状态 | 实测 | 结论 | +| --- | --- | --- | --- | +| P1-4 安全阀 | ✅ 已实现 | `summary` 新增 `completion_basis` / `absence_evidence` / `redundant_rescan_measures` / `virtual_reserve_s`;`--persistent` 输出单轮上界告警 | 采纳(5 项测试) | +| P0-2 最小命中集 | ✅ 已实现并默认开启 | 第四问 11 场景配对:**14003.0 → 10975.5 s**(均值 −19.3%、中位 −25.4%、10/11 更快);检测 444.5→319.2;请求 569.5→395.6;位移 54.9→44.2 km;最大 17007→12919 s;11/11 valid | **采纳** | +| P0-4 感知层向量化 | ✅ 已实现 | 单局计算 **3.10 → 1.00 s(3.08×)**,最大 5.84 → 1.30 s;20 场景的虚拟时间与动作序列**逐位一致** | **采纳**(目标 ≤0.8 s 未达,余下为 belief 表示层) | +| P0-1 融合巡回 | ❌ 实测无效,已回退默认 | 仅追加站点方位线:3454.6 vs 3426.9 s(+0.8%,检测 +10.8 次、位移仅 −188 m);追加 + 抑制专用探点:**4989.0 vs 3426.9 s(+45.6%,20/20 更慢)** | 关闭(保留开关与代码) | +| P1-1 C₂₀ 最近清除点 | ⊘ 复核后降为非项 | 现有 `_near_clear_target` 已取安全球 `B(c, limit−ρ)` 内离当前位置最远点;与完整 C₂₀ 最优之差 ≤ slack+margin ≈ 0.74 m | 不改 | +| P1-3 基准集/并行 | ✅ 已实现 | 20 场景 × 3 变体 = 60 局 **26.5 s**(6 进程);20 局 **3.9 s** | 采纳 | +| P0-3 联合信念 | ✅ 已实施并于 2026-09-12 修正 | 网格粒子 × 24 档朝向 bin + 可见性选点;**发现并修复 `no_signal` 朝向规则反向缺陷**(原会删掉真源朝向档);配套 D1 探点口径使第四问后备盲清 **125.7 → 4.3 次/局** | 采纳(结论与实测见[图论与 DP 优化方案 §8](第三四问图论与动态规划优化方案.md)) | + +**P0-1 为什么失败(重要负面结论)**:七站环上通常只有 2–3 个站能对同一源取得 +有效方位线,且站间交会角不足以直接换到 20 m 证书,专用信息增益探点仍然必要; +"顺路测量"于是退化为平白多花检测,一旦抑制专用探点则会白等巡回、远端绕行。 +**结论:第三问的定位往返不是可回收的浪费,`bayes` 的滚动时域调度已在做正确的事。** + +**第四问现状与目标差距(2026-09-12 图论/DP 轮回填)**:启用硬化覆盖计划 +`q4_mincover_v2` 与 D1 探点口径后,第四问 11 场景(core + boundary)均值为 +**9069.9 s**、最大 12081.1 s、后备盲清 24.8 次/局(core 9 场景 8602.0 s / +4.3 次),仍远高于 4000 s 验收线。剩余成本主要是最小命中集巡回 +(23.9 km ≈ 4777 s)与缺席频道检测,二者都是覆盖证明的固有代价; +本方案 §2.3 的"可压缩 23–32%"在本模拟器上只回收了约 1%(详见图论与 DP 方案 §8)。 + +--- + +## 1. 运行历史复核 + +### 1.1 数据资产清单(本次实际读取) + +| 资产 | 内容 | 可用信息 | +| --- | --- | --- | +| `session.jsonl`(31 011 行) | 官方第三问演练 J2WH-2K7D-5ZXS-DNK6 的客户端日志 | 10 323 次 `/measure`、12 次 `/clear`、逐动作计时 | +| `practice-p3-*.jlog` | 同一局的官方行为日志封装 | 仅明文信封(题号 3、队号、案例码);载荷 AES-256-GCM + RSA-OAEP,不可解 | +| `referee-data/sessions/*`(6 局,5 局完整) | 本地评测机 q3×3、q4×2、截断×1 | 逐请求响应、真值、summary、step 事件 | +| `output/hrl/ui/q3-main/` | HRL 训练(109 776 步)+ `eval/at-40k`、`eval/at-final` | monitor CSV、模型元数据、20 场景配对评估 | +| `docs/算法审核与优化-20260911.md`、`docs/algo-3.md`、`docs/algo-3-bayes.md` | 历史 KPI 与消融 | 官方/自建成绩、验证集分档 | +| 本次新增复跑 | `scripts/benchmark_q3_bayes.py`(6 场景)、Q3/Q4 单局计时分解、`cProfile`、站点三角化可行性 | §1.3 中标注"本次复跑"的数字 | +| 本次新增工具(已入库) | `scripts/analyze_run_timing.py`(任意会话日志的计时分相复算)、`scripts/verify_q4_cover.py`(第四问覆盖证书 + 最小命中集搜索) | F4、F9 可复现 | + +### 1.2 先确认度量可信(否则一切优化都是自欺) + +官方计时模型:`T = L/5 + 5·N_measure + N_switch + 5·N_clear⁺ + 3·N_clear⁻`, +其中 `L` 为累计直线位移,`/clear` **不计**换频。`scripts/verify_q3_practice.py` 对 5 局完整 +评测机日志逐微秒复算,与服务器返回的 `virtual_time_s` 完全一致(例:BBM9 复算 3134.642907 = 记录 3134.642907)。 +结论:**后续所有"虚拟时间"结论都可用动作日志独立复算**,这是本项目最可靠的一条工程资产,必须保留。 + +### 1.3 关键事实(F1–F13) + +| 编号 | 事实 | 出处 | +| --- | --- | --- | +| F1 | 虚拟时间构成:**移动 75–83%|检测动作 15–21%|换频 2.3–3.7%** | 官方会话 82.30/14.76/2.94;referee q3 80.50/16.78/2.71、q4 78.39/18.63/2.98;本次复跑 Q3 79.9/17.3/2.9、Q4 75.2/21.1/3.7 | +| F2 | 官方第三问演练 J2WH 总虚拟 350 227.7 s,其中 **346 169.9 s(98.84%)是空复扫**:7 个固定站点 × 8 个未清除频道 × 183 轮,0 检出,结束点正好落在 `virtual_reserve_s=10 000` 边界 | `session.jsonl` 相位切分;`planner/__init__.py:236`、`config.py:99` | +| F3 | **第四问的全部失败来自定向源**:referee 两局全向 17/17 清除,定向仅 2/6;4/4 漏检全是定向;每清除源 356.4 s(Q3 274.0 s,+30%) | `referee-data/sessions/{6X58,BAU8}`;`{BBM9,RM7Y,VQKB}` | +| F4 | 本次复跑 Q3(13 源,seed 0):3535.9 s / 109 次检测 / 13 清除;**七站巡回 6960 m(1392 s,39%)+ 探点往返 5741 m(1148 s)+ 清除移动 3668 m(734 s)** | 本次复跑(方法见附录 A) | +| F4b | 评测机 Q3 单局 BBM9:**21 次专用探点占 1138.7 s 移动,等于该局虚拟时间的 36.3%**,而站点扫频 98 次只占 991.2 s | `scripts/analyze_run_timing.py referee-data/sessions/BBM9-.../log.jsonl --plan seven` | +| F5 | 本次复跑 Q4(10 源 3 定向,seed 0):13 652.1 s / 560 次检测 / 18 次清除(8 次失败)/ 51 356 m | 本次复跑 | +| F6 | 感知层是墙钟热点:单局计算 6.04 s;`cProfile` 下 `expected_survival` 占累计时间 **72%**(2808 次调用),`apply_measure` ≈ 20%,`_kill_outside_wedge` 触发 498 万次 `angular_gap` | 本次 `cProfile`(13 源单局) | +| F7 | HRL 运行:109 776/200 000 步、4007.9 s、**27.0 steps/s(6.75/env)**、1.51 s 墙钟/局;被 SIGTERM 截断时回报仍在上升(Q1 1.05 → Q4 6.20) | `output/hrl/ui/q3-main/q3.json` + 4 份 monitor CSV | +| F8 | HRL 评估:20 场景**全部单源全向**;`bayes` 比 HRL 快 4.3–5.0%(17–18/20,p=0.0001),**94% 的差距是多走的移动**;40k→109k 步仅再改善 0.7% | `eval/at-40k|at-final/aggregate.*`、`eval/manifest.json` | +| F9 | 现役 Q4 发现集:700 m 方格 49 点、NN 巡回 **36.4 km**;满足同一"前向半盘命中"保证的贪心最小集 **31 点、22.9 km(−37%)**,覆盖校核 100% | `scripts/verify_q4_cover.py`;本文附录 A | +| F10 | Q3 七站巡回**已经最优**:6 × 1159.7 = 6958 m(观测 6960 m),无可压缩空间;把环半径降到覆盖下界 1122.9 m 仅省 222 m(44 s) | 几何计算 + 本次复跑 | +| F11 | 站点三角化可行:**99.28% 的源位置有 ≥2 个站在 1500 m 内**;最佳交会角 5 分位 58.5°、中位 122.9°;只有 0.72% 的源位置仅 1 个站在射程内 | 本次离线采样(20 000 点) | +| F12 | 墙钟量级差三个数量级:内存回放 **0.22–0.25 ms/请求**(≈0.35 s/局),官方接口 **9.42 ms 均值/请求**(104.49 s / 10 337 请求);本地评测机 24.5–97.9 ms/请求 | referee `session_end`、`runs/*/summary.json`、`session.jsonl elapsed_s` | +| F13 | 历史 KPI 参照:Q3 官方最好 4058.71 s(3BW5,13/13)、5232.13 s(J4ER,12/12);自建 `bayes` 3707.3 s(本次 6 场景)/ 3726.2 s(14 场景消融)/ 验证集 3315.89 s;Q4 自建 13 164.7 s,**无官方第四问演练记录** | `docs/算法审核与优化-20260911.md`、`docs/algo-3-bayes.md`、`README.md:135` | + +### 1.4 由事实导出的六处结构性瓶颈 + +| 编号 | 瓶颈 | 支撑事实 | 归属层 | +| --- | --- | --- | --- | +| B1 | 定位/清除移动没有并入覆盖巡回,探点按"信息增益"选,移动权重 λ=0.0105 几乎不惩罚绕行 | F1、F4、F4b、F11 | 决策层 | +| B2 | Q4 发现集冗余 63%(49 点 vs 30 点),且每个"真缺席"频道要在全部 49 点各测一次 | F5、F9 | 保证层 | +| B3 | Q4 定向源缺少位置×朝向联合信念:`no_signal` 只记"被遮挡过几次",选点靠固定 45° 阶梯,收敛失败后退化到 ≤400 格 20 m 盲清(≤1200 s + ≤400 请求) | F3、`planner/__init__.py:691-768` | 感知层 + 决策层 | +| B4 | 感知层全 Python 容器:每局 20 个频道各建 ~6.1 万格 `set`,`_kill_outside_wedge` 每次遍历全部幸存格,评分核 `expected_survival` 为 7×800 的纯 Python 双循环 | F6 | 感知层 | +| B5 | 研发吞吐低:场景串行、单进程;一局 0.35–6.5 s;HRL 27 steps/s;14–52 场景的配对基准要跑几分钟到十几分钟 | F6、F7、F12 | 实验层 | +| B6 | 运行治理缺失:单源评估集使指标退化(`avg_locate_clear_time_s ≡ virtual_time_s`)、`eval/manifest.json` 三份重复且与 `output/hrl/ui/manifest.json` 不一致(后者缺失)、`persistent_search=True` 可造成 98.84% 的无效开销且无硬性告警 | F2、F8、F13 | 遥测/实验层 | + +--- + +## 2. 目标架构 + +### 2.1 分层与依赖方向(依赖只能向下) + +``` + ┌───────────────────────────────────────────────┐ + L6 实验/遥测 │ bench/ 冻结基准集·并行 runner·配对统计 │ + │ telemetry/ manifest·step log·replay·summary │ + └───────────────▲───────────────────────────────┘ + │ 只读观测 + ┌───────────────┴───────────────────────────────┐ + L5 执行/安全 │ exec/ 动作账本·预算守卫·安全阀·幂等客户端 │ + └───────────────▲───────────────────────────────┘ + │ Action 请求 + ┌───────────────┴───────────────────────────────┐ + L4 决策 │ plan/ 任务表·滚动时域排序·信息/时间评分 │ + └───────────────▲───────────────────────────────┘ + │ Task[] + ┌───────────────┴───────────────────────────────┐ + L3 保证 │ guarantee/ 命中集覆盖计划·清除证书·缺席证明 │ + └───────────────▲───────────────────────────────┘ + │ 候选集/幸存集 + ┌───────────────┴───────────────────────────────┐ + L2 信念 │ belief/ BeliefBackend:OccupancyTensor(Q3) │ + │ JointTensor(位置×朝向, Q4) │ + └───────────────▲───────────────────────────────┘ + │ Observation + ┌───────────────┴───────────────────────────────┐ + L1 观测模型 │ model/ 可见性半平面·r_eff 带·有界误差·舍入裕量 │ + └───────────────▲───────────────────────────────┘ + │ 原始响应 + ┌───────────────┴───────────────────────────────┐ + L0 协议/时钟 │ protocol/ 规则表·计时模型·状态机·客户端(冻结)│ + └───────────────────────────────────────────────┘ +``` + +与现状的差别:**用组合取代继承**。现状是 +`OmnidirectionalLoop → SevenBatch → BayesLoop → DirectionalExtension` 的单继承链, +调度、信念、清除、预算、报表五种职责混在同一族类里(`planner/__init__.py` 818 行 + +`planner/bayes_loop.py` 513 行),任何一处改动都会跨层影响其它三问。 +目标形态是 + +```python +Episode( + client = SimulatorClient(...), # L0,冻结 + belief = OccupancyTensor(...) | JointTensor(...), # L2 + plan = CoveragePlan.points, # L3 + scorer = InfoGainPerSecond(...), # L4 + policy = FusedTourPolicy(...) | DirectionalPolicy(...), # L4 + certifier= Certificate(...), # L3 + ledger = Telemetry(...), # L6 +) +``` + +三层保证策略矩阵只差**三个可替换部件**,其余代码共享: + +| 问题 | 信念后端 | 覆盖计划 | 选点策略 | +| --- | --- | --- | --- | +| Q3 | `OccupancyTensor`(全向) | 七站环(已经最优,冻结) | 融合巡回 | +| Q4 | `JointTensor`(位置×朝向) | **最小命中集**(30 点,离线搜索 + 运行期校验证书) | 可见性约束选点 | + +### 2.2 接口契约(关键签名) + +```python +# L1 model/observation.py —— 只此一处定义"什么算看见" +@dataclass(frozen=True) +class ObservationModel: + r_eff_min_m: float; r_eff_max_m: float + near_radius_m: float; half_angle_deg: float + directional_half_deg: float = 90.0 # 含边界 + + def visible(self, src: Vec2, heading_deg: float | None, reader: Vec2) -> bool: ... + def detectable(self, src: Vec2, heading_deg: float | None, reader: Vec2) -> bool: ... + +# L2 belief/base.py —— 两种后端实现同一协议 +class BeliefBackend(Protocol): + def apply(self, channel: int, reader: Vec2, result: str, + svd_deg: float | None) -> None: ... + def alive(self, channel: int) -> int: ... + def is_absent(self, channel: int) -> bool: ... # 幸存集为空 + def certificate(self, channel: int) -> ClearCertificate | None: ... + def guaranteed_no_signal(self, channel: int, reader: Vec2) -> bool: ... + def prob_detect(self, channel: int, reader: Vec2) -> float: ... # 决策用 + def version(self, channel: int) -> int: ... # 派生量缓存键 + +# L3 guarantee/cover.py —— 覆盖计划是"可离线搜索、可在运行期校验"的一等对象 +@dataclass(frozen=True) +class CoveragePlan: + problem: int # 3 | 4 + points: tuple[Vec2, ...] + certificate: CoverCertificate # 采样分辨率、缺失数、最坏裕量、脚本哈希 + version: str + def verify(self, model: ObservationModel, tol_m: float) -> CoverCertificate: ... + +# L4 plan/policy.py +class Policy(Protocol): + def tasks(self, belief: BeliefBackend, state: RobotState) -> list[Task]: ... + def order(self, tasks: list[Task], state: RobotState) -> list[Task]: ... + def measured_at_point(self, point: Vec2) -> tuple[int, ...]: ... # 一停多测 +``` + +### 2.3 四条设计原则 + +1. **保守性不变量不动**:真源永不被删;清除证书始终基于完整 ±1.005° 角域与题面距离带; + 所有启发式(均匀先验、朝向先验、信息增益)**只用于选点,不用于安全证明**。 + Q4 的朝向联合信念必须自带"朝向未观测时退化为全向"的保守分支。 +2. **保证 = 离线搜索 + 运行期校验**:覆盖集、清除点、巡回顺序都可以离线用数值搜索优化, + 但运行期必须用同一份 `ObservationModel` 重新校验证书(点集、分辨率、裕量), + 校验失败即拒绝启动,而不是相信一个写死的点表。 +3. **一个事实一个来源**:题面常量、`r_eff` 带、清除半径、动作耗时只在 `config.py`; + 可见性语义只在 `model/observation.py`;训练/部署若将来共存,必须共用同一控制器模块 + (这是旧 HRL 用 13 000 行换来的教训:v1 的 5 个特征索引错位、BC 激活函数不一致、 + 旧基准把 `completed` 当全清)。 +4. **每个优化都必须可配对、可复算、可回归**:冻结基准集 + 逐局 `manifest` + 动作日志 + + 逐微秒复算;任何"更快"的声明必须给出配对分布(均值/中位/最大/更快场数), + 而不是单个最优场景。 + +### 2.4 迁移映射(现状 → 目标) + +| 现状 | 目标 | 处理 | +| --- | --- | --- | +| `protocol/*`、`evaluation/recompute_virtual_time` | 不变 | 冻结,作为度量基准 | +| `belief/__init__.py`(凸外包) | `belief/convex.py` | 原样搬迁,继续负责精确角域证书 | +| `particles.py`(网格幸存集) | `belief/occupancy.py`(numpy 张量 + 纯 Python 回退) | 重写热核,语义不变,保留 `tests/test_particles.py` 的真源保留性质测试 | +| — | `belief/joint.py`(位置×朝向) | 新增,Q4 专用 | +| `coverage/` | `guarantee/cover.py` | 49 点常量表 → 可校验的 `CoveragePlan` | +| `planner/bayes_loop.py` 的 `_build_tasks/_order_tasks` | `plan/tasks.py`、`plan/schedule.py` | 抽出,Q3/Q4 共用 | +| `planner/bayes_loop.py::_select_point` | `plan/score.py` | 抽出 + 向量化评分 | +| `planner/__init__.py::DirectionalExtension` | `plan/policy.py::DirectionalPolicy` + `belief/joint.py` | 保留后备清除作为最终兜底,但目标是不再触发 | +| `planner/seven.py` | `guarantee/plans.py::SEVEN` | 保留解析证明 | +| 4 个 benchmark 脚本 | `bench/` 统一 runner(并行 + manifest + 配对统计) | 合并,消除指标口径分叉 | + +--- + +## 3. 优化项 + +### P0-1 第三问:发现—定位融合巡回(消除探点往返) + +**现状**:每次收到 `direction` 后进入独立定位子循环,由信息增益选点器在同一站点之外 +另选探点;13 源单局共 24 次探点、5741 m 往返、1148 s,与整个覆盖巡回(6960 m / 1392 s)同量级; +评测机单局 BBM9 更极端:**21 次探点花掉 1138.7 s 移动 = 全局限时时间的 36.3%**(F4b)。 +评分函数 `score = E[log 幸存占比] + 0.0105 × 移动秒数`,移动项几乎不影响排名。 + +**方案**:把"已发现未定证"的频道加入**每一个覆盖站点**的批量扫频清单, +使第二/第三条方位线在巡回途中顺路取得;只有站点三角化不成立时才回退到专用探点。 + +- 巡回仍由 `plan/schedule.py` 滚动排序(现有最近邻 + 2-opt 已足够,`bayes` 的 −39.5% 移动 + 主要来自这里),新增"同点顺路测量"任务类型:`Task(kind="station", channels=(未知, 未定证))`。 +- 站点任务的固有耗时按 `6 s × 频道数 + 1 s × 换频次数` 记账(现有 `_path_cost` 已支持)。 +- 保底:`F11` 显示 0.72% 的源位置只有 1 个站在 1500 m 内,对这类频道保留 + `_select_point` 的专用探点路径;判定用 `belief.prob_detect` 而非硬编码。 + +**预期收益(已被实测推翻)**:原估 F4 的 1148 s 探点移动可回收 70–80%, +即 −800 ~ −900 s。**实测结果相反**:仅追加站点方位线 +0.8%,追加并抑制专用探点 ++45.6%(20/20 场景更慢),见 §0.4。原因是站间交会角不足以保证 20 m 证书, +专用信息增益探点仍然必要;抑制它只会白等巡回。**本项不采纳,默认关闭。** + +**验收**:18 场景验证集平均 ≤ 2700 s、最大 ≤ 4000 s;`measures` 增幅 ≤ 20%; +`move_distance_m` 降幅 ≥ 25%;全部 `valid`。 + +**风险**:站点距离最远 2 × 1159.7 = 2319 m,可能出现 `no_signal` 浪费 5 s。 +缓解:仅在 `prob_detect > 0` 时顺路测量;`no_signal` 同样是有效负观测(进信念,不算异常)。 + +--- + +### P0-2 第四问:用最小命中集替换 49 点发现集(离线搜索 + 运行期校验) + +**现状**:`coverage_points()` 生成 700 m 方格 49 点(±2100),依据是"单元内任一点到 4 顶点 +≤ 700√2 ≈ 989.95 ≤ 1000"。该条件是**充分但远非必要**:它要求单元内任意位置、任意朝向都由 +**同一个**顶点命中。实际上,第四问的保证是"对 ∀(p,h) ∈ Ω×S¹,存在被访点位于其前向半盘内", +允许由**多个**顶点共同围住 p。 + +**方案**:把它当作一个显式的**击中集(hitting set)问题**离线求解,运行期校验: + +1. 目标空间离散:`p` 取 Ω 内 75 m 网格,`h` 取 24 个方向 → 43 032 个 (p,h) 单元; +2. 候选点:半径 2850 m 圆盘内 200–300 m 网格(641/293 个候选); +3. 贪心集合覆盖 + 局部改进,**同时把巡回长度作为次级目标**(641/293 个候选中取 31/30 个, + 仍有大量同覆盖度的等价解可用于缩短巡回); +4. 生成 `CoveragePlan(points, certificate)`,`certificate` 记录采样分辨率、未覆盖数、 + 最坏裕量、生成脚本哈希;`CoveragePlan.verify()` 在每次运行前用同一 `ObservationModel` + 重新校核,未通过即拒绝启动。 + +**本次离线校核结果**(附录 A 可复现): + +| 点集 | 点数 | (p,h) 覆盖 | NN 巡回 | 折算移动 | +| --- | ---: | ---: | ---: | ---: | +| 现役 700 m 方格 ±2100 | 49 | 100% | 36.4 km | 7280 s | +| 三角格 1000 m(半径 2800 盘) | 31 | 100% | 34.3 km | 6863 s | +| **贪心最小命中集(200 m 候选)** | **31** | **100%** | **22.9 km** | **4587 s** | +| **贪心最小命中集(300 m 候选)** | **30** | **100%** | **23.6 km** | **4719 s** | + +**实测收益(2026-09-12,11 场景配对)**:均值 **14003.0 → 10975.5 s(−19.3%)**, +中位 −25.4%,10/11 场景更快;检测 444.5 → 319.2,请求 569.5 → 395.6, +位移 54.9 → 44.2 km,后备清除尝试 113.3 → 64.1,11/11 valid。 +低于原估的 −26%,差额来自"缺席频道省下的检测"被定位探点部分抵消。 + +**验收**:`CoveragePlan.verify()` 通过;10/13/16 源 × 定向 1/半数/仅一个全向 × 边界朝外压力 +场景全部全清;请求数、日志体积仍满足 1200 s / 2 MB 预算。 + +**风险**:数值采样证书弱于解析证明。缓解:(a) 保留解析七站证明用于 Q3; +(b) 证书采样分辨率与裕量写入 summary 并随日志归档;(c) 保留 10% 的额外"保险点"预算, +若演练观测到任何漏检立即回退到 49 点表。 + +--- + +### P0-3 第四问:位置×朝向联合信念与可见性选点 + +**现状**:定向源只被当作"候选空间集合",`no_signal` 只用于累计 `blocked_probes` +(`planner/__init__.py:663-677`),选点沿固定 45° 阶梯试探;梯子用尽后调用 +`_fallback_clear`,对候选外包多边形做 20 m 网格覆盖逐格 `/clear`(≤400 格、≤1200 s、≤400 请求)。 +运行历史显示这正是第四问的失败点:定向源 2/6 清除,4/4 漏检全是定向。 + +**方案**:为第四问频道维护 **(x, y, heading) 联合可行集**,把"看不看得见"变成可推理的量: + +- 表示:`JointTensor` —— 复用 Q3 的占用网格,每格附加 24 个朝向 bin 的可行性位掩码 + (uint8 位域,20 频道 × 6.1 万格 × 3 B ≈ 3.7 MB,可接受)。 +- 更新规则(全部保守,仅删"必然看不见"的格): + - `direction`@s:位置删 `>1500`、角向删 `|gap| > δ_eff + 角裕量`;朝向删 + "以该格为源、朝向不覆盖 s" 的半盘(保留 ±90° 含边界)。 + - `no_signal`@s:对 `|g−s| ≤ 1000` 的格,朝向**只能**落在背向 s 的半盘; + 对 `1000 < |g−s| ≤ 1500` 的格,朝向要么背向 s,要么源实际半径 < |g−s|(保持不确定); + 对 `|g−s| > 1500` 的格不删。 + - `near`@s:位置收缩到 5 m 盘,朝向置为全向(近场无遮挡语义)。 +- 决策:`prob_detect(channel, reader)` = 该点能看到该频道任一可行 (p,h) 的概率质量; + 选点直接最大化 `prob_detect / (移动秒数 + 6)`,即**保证有信号的信息增益/秒**。 +- 定位收敛:位置由多条 `direction` 的角域交会收缩(与 Q3 相同);朝向在 2 次 + "一次被遮挡 + 一次可见"后通常已被压到很窄的楔形,此时可**主动选择必然可见的探点**, + 用一个正常角域证书结束,而不再进入 400 格盲清。 +- 后备清除**保留**(`fallback_clear_cells` 已有格数与预算双硬顶),但目标变为 + "只在证书无法建立时触发",并在 summary 中把触发次数作为回归指标。 + +**预期收益(未实测)**:定向频道的探点次数与后备清除触发次数大幅下降。参考量级: +后备清除上限 400 格 × 3 s = 1200 s + 400 请求/频道;`docs` 记录的 Q4 改进版每局后备 +尝试 616/4 局 ≈ 154 次。保守估计 **−1500 ~ −3000 s/局**。 + +**验收**:10 源 3 定向场景全清率 100%(现状 referee 仅 2/6 定向); +`fallback_clear_attempts` 相对基线下降 ≥ 70%;定向信道平均检测次数 ≤ 全向信道的 1.5 倍。 + +**风险**:朝向均匀先验是工程假设,官方分布未知。缓解:先验只影响选点顺序, +不影响任何安全性判定;朝向不确定时自动退化为全向分支(`prob_detect` 取全向值)。 + +--- + +### P0-4 感知层向量化与并行(研发运行速度) + +**现状**(F6):`expected_survival` 占单局 CPU 的 72%,2808 次调用 × (7 代表点 × 800 子采样) +≈ 1570 万次纯 Python 距离/角度运算;`apply_measure` 另有 20%,其中 `_kill_outside_wedge` +每次遍历全部幸存格(498 万次 `angular_gap`)。 + +**方案**: + +1. `belief/occupancy.py` 用 `numpy` 布尔/整数张量替换 `set[int]`: + 每频道 248×248 uint8(≈61 KB),20 频道 ≈ 1.2 MB;盘/楔删除用切片 + 布尔掩码, + 粗格索引用 `np.add.reduceat`;`numpy` 缺失时回退现有纯 Python 实现(测试保证两条路径同结果)。 +2. 采样评分向量化:把 `subsample` 与 `representatives` 预转 `(n,2)` 数组, + 一次广播算完距离、角度、角向 gap,`expected_survival` 由 5600 次标量循环变成 2–3 条向量指令。 +3. 站点级编译缓存:`(station, channel, version)` → 掩码结果,`version` 不变直接复用; + 当前 `_skip_cache` 只缓存"必 no_signal"布尔,可扩展到整块删除掩码。 +4. MEC 增量维护:当前 `mec()` 每次版本变化重算全部幸存点(最多 6 万点);改为 + 版本变化时只对新增删除点做包围圆增量更新,或按 1/8 子采样给出候选、证书判定用精确值。 +5. 批量基准并行化:`bench/runner.py` 用 `concurrent.futures.ProcessPoolExecutor` + 按场景分发(每进程独立 `LocalSimulator`,真值仍只进测试端),Mac M 系列 8 核可得 ~6–8×。 +6. 观测/遥测:单局 summary 写入 `compute_wall_s`、`profile_top`(可选 `--profile`), + 纳入基准表的必填列,防止"虚拟时间变快、墙钟悄悄变慢"。 + +**实测收益(2026-09-12)**:单局计算 **3.10 → 1.00 s(3.08×)**,最坏 5.84 → 1.30 s; +20 场景基准集 12.2 → 3.9 s。虚拟时间与动作序列**逐位一致**(纯 Python 回退路径保留, +`MCM26B_NO_NUMPY=1` 可强制)。未达 ≤0.8 s 的目标:剩余开销在 +`apply_measure` 的网格删除与 `ChannelParticles.__init__`,需要 P0-4b(表示层张量化)。 + +**验收**:`tests/test_particles.py`、`tests/test_bayes_loop_q3.py` 全过; +纯 Python 与 numpy 两条路径在同一动作日志下产出逐位相同的 summary(`actions_sha256` 相同); +单局 `compute_wall_s` ≤ 0.8 s。 + +--- + +### P1-1 清除点选在 C₂₀(K) 内离当前位置最近处 + +现状 `_near_clear_target` 只沿"当前位置 → 候选圆心"方向平移,平移量受 +`limit − radius` 限制,是被证明的一维特例。一般解是 +`C₂₀(K) = ∩_{g∈K} B(g, 20)`,取其内离当前位置最近的点: +- 对凸多边形候选集,`C₂₀(K)` 仍是凸集(若干圆盘之交),可用"到当前点的最近点"的 + 简单迭代/投影求得; +- 若 `C₂₀(K)` 非空,则从该点清除的移动代价最小,且三角不等式保证仍在 20 m 内。 + +**预期收益**:Q3 单局清除移动 3668 m(734 s)中回收 20–35%(**−150 ~ −260 s**); +Q4 同步受益。 +**风险**:`C₂₀` 空时退回现有 MEC 圆心逻辑(已实现)。 + +--- + +### P1-2 覆盖几何参数改为"离线搜索 + 运行期校验" + +- Q3:`station_ring_radius_m` 由 1159.7 的可证明下界 1122.9 重算,并在 `validate_seven_coverage` + 中同时校验 **PF 网格覆盖**(现行文档已记录 1159.7 与 Optuna 建议值差 3.3 m 的取舍)。 + 收益很小(≈44 s),但把"设计性质 vs 1.7% 均值差异"的取舍写成可复算脚本,而不是口口相传。 +- Q4:见 P0-2,覆盖集与巡回联合优化(在等价覆盖解中选巡回最短者, + 预期可在 23.6 km 基础上再降 5–10%)。 +- 所有覆盖计划产物落 `output//coverage/.json` + 证书,纳入版本管理。 + +--- + +### P1-3 评估与遥测重构(消除 B6) + +1. **冻结基准集**(`bench/suites/`,一题一份、版本化、写入 `manifest.json`): + - Q3:10/13/16 源 × 8 个种子 + 2 个圆周边界场景(`r_eff=1000`,扇区接缝); + - Q4:10 源 3 定向、13 源 6 定向、16 源 8 定向 × 每种 3 个种子 + 朝外边界压力场景; + - 场景与真值只进模拟器与校验器,策略端看不到(真值隔离不变量保持不变)。 +2. **统一 runner + 逐局 artifact**:`manifest.json` / `results.json` / `aggregate.{json,csv}` / + `runs///summary.json` + `session.jsonl`,任何一局无效则 `all_valid=false` 且非零退出。 +3. **指标口径去重**:目前 `avg_locate_clear_time_s ≡ virtual_time_s`(单源评估集下二者必然相等), + 必须在多源基准集上重新定义并标注: + `T_total`(整场虚拟时间)、`T_accounted`(首次证明找全时刻)、`T_last_clear`、 + `T_total / cleared`、`T_total / truth`。 +4. **运行历史持久化**:`output/` 目前不纳入 git,导致 `output/rl/review-20260911/`、 + `output/q3/optimization-20260911/` 等证据在 revert 后无法追溯。 + 本轮起把**基准集的 summary/aggregate/manifest(压缩,不含大日志)**纳入版本管理, + 官方 jlog/日志仍按题面要求单独归档。 + +--- + +### P1-4 安全阀与退出可解释性 + +| 阀门 | 现状 | 改进 | +| --- | --- | --- | +| `persistent_search` | 默认已关闭,但没有任何"这会浪费多少"的提示;历史上已造成一次 346 170 s(98.84%)的无效演练 | 显式开启时输出预估上限(未清除频道数 × 站点数 × 6 s)并要求二次确认;`summary` 记录 `redundant_rescan_measures` | +| `virtual_reserve_s` | 10 000 s 固定 | 改为 `max(10 000, 2 × 最远单动作上界)`,并在接近时把 `stop_reason` 与剩余预算写入 summary | +| 完成判定 | `completed = 无中断 ∧ (清除数≥16 ∨ 每频道 CLEARED/ABSENT)` | 增加 `completion_basis ∈ {count_cap, per_channel_proof}` 字段,避免把"数量上界"与"逐频道证明"混为一谈 | +| 缺席证明 | 覆盖账本 + PF 双通道 | summary 增加 `absence_evidence[channel] ∈ {pf_empty, coverage, count_cap}`,供论文与审计逐条追溯 | + +--- + +### P2-1 选点评分的解析化/查表化 + +`expected_survival` 的物理含义可用解析近似替代:对给定测点 q 与候选集, +`E[log 幸存占比]` 的一阶近似只依赖 (候选集到 q 的距离分布, 角向展布)。 +先在离线基准上验证解析近似与采样评分选出的点一致率 ≥ 90%,再切默认实现。 +预计再省 30–50% 的评分开销(P0-4 之后已不是瓶颈,列入 P2)。 + +--- + +### P2-2 是否重启学习类方法的门控条件 + +只有在**下列四条同时满足**时才考虑把 ML 重新引入,且只允许替换"任务排序"这一个部件: + +1. P0-1/P0-2/P0-3 全部落地并通过基准集验收; +2. 手写基线仍有 ≥ 10% 的可测改进空间,且已定位到具体的排序子问题; +3. 训练与部署共用同一控制器模块,并有逐状态一致性测试(旧 HRL 的 13 000 行里最有价值的 + 就是这条纪律:`HRLControllerMixin` 被 env 与 runtime 逐字节共用); +4. 评估集包含多源与定向场景(现役 20 场景单源评估集不足以支撑任何结论)。 + +--- + +## 4. 实施路线图 + +| 阶段 | 内容 | 交付物 | 验收门槛 | 依赖 | +| --- | --- | --- | --- | --- | +| **S1(P0,2–3 天)** | P0-2 最小命中集 + P0-4 并行基准;P1-3 冻结基准集 + manifest;P1-4 安全阀 | `guarantee/cover.py`、`bench/runner.py`、`bench/suites/*`、`docs/` 更新 | Q4 巡回 ≤ 25 km;基准集并行跑完 ≤ 60 s;全部 `valid` | 无 | +| **S2(P0,2–3 天)** | P0-1 融合巡回(Q3);P1-1 清除点 | `plan/schedule.py`、`plan/score.py`、`Episode` 组合化重构 | Q3 均值 ≤ 2700 s、最大 ≤ 4000 s;移动 −25% | S1 的 runner | +| **S3(P0/P1,3–5 天)** | P0-4 信念层 numpy 化;P0-3 联合信念 + 可见性选点(Q4) | `belief/occupancy.py`、`belief/joint.py`、`plan/policy.py` | 单局计算 ≤ 0.8 s;Q4 定向全清 100%、后备触发 −70% | S2 的接口 | +| **S4(P1/P2,2–3 天)** | P1-2 覆盖参数搜索固化;P2-1 评分解析化;论文数据表 | 覆盖计划证书、`docs/paper` 数据 | 与 S3 结果配对不退化 | S3 | +| **S5(演练)** | 官方演练:Q3 用全向、Q4 用混合;先实测单请求延迟与总请求数,核对 1200 s / 2 MB | 官方日志与报告 | 全清 + 正常退出 + 计时复算一致 | 团队排期 | + +**顺序约束**:S1 的基准集必须先于任何算法改动落地,否则无法配对;否则"更快"不可证。 + +--- + +## 5. 验收与度量 + +### 5.1 有效局定义(沿用现有基准脚本,不得放宽) + +``` +valid := 全部真实源被清除 + ∧ 被判缺席的频道都与真值一致(无误判) + ∧ 正常 /exit(exit_reason == user_exit) + ∧ 零算法异常(anomalies == []) + ∧ 逐动作虚拟时间复算与服务器返回逐微秒一致 +``` + +### 5.2 必报指标(每个变体、每个场景,落盘 + 汇总) + +- 虚拟时间:`T_total`、`T_accounted`、`T_last_clear`、`T_total/cleared`,以及 + 均值/中位/最大/P90 与 **< 4000 s 场次比例**; +- 动作:`measures`、`clears`、`failed_clears`、`fallback_clear_attempts`、 + `redundant_rescan_measures`、`total_requests`; +- 移动:`move_distance_m`,以及 move/action/switch 三分项占比; +- 墙钟:`compute_wall_s`、请求吞吐(ms/请求)、批量基准总时长、训练 steps/s(若涉及); +- 配对比较:同场景同误差种子下 `1 − T_variant / T_baseline` 的均值、 + 更快场数、以及对场景做 10 000 次 bootstrap 的 95% 区间(参照 `summarize_rl_revision.py` 的做法)。 + +### 5.3 回归 + +`uv run pytest`(当前 232 项)必须全过;新增: +- `CoveragePlan.verify()` 的正/负例(故意删一个点必须被检出); +- 联合信念的真源保留性质测试(随机 (p,h) × 随机观测序列,真源 (p,h) 永不被删); +- 融合巡回的"每源至少一条站点方位线"性质测试; +- 逐位一致性测试:numpy 后端与纯 Python 后端在同一动作序列下 summary 完全相同。 + +--- + +## 6. 风险与明确不承诺的部分 + +### 6.1 风险登记 + +| 风险 | 影响 | 缓解 | +| --- | --- | --- | +| 最小命中集证书依赖数值采样,官方分布未知 | 极端 (p,h) 漏检 → 漏源 | 保留解析七站证明(Q3);Q4 证书采样分辨率/裕量写入 summary;保留 10% 保险点预算与 49 点回退开关 | +| 站点三角化在 0.72% 源位置上只有 1 站在射程内 | 这些场景仍需专用探点 | `prob_detect` 触发回退路径,保留现有 `_select_point` | +| 朝向先验为工程假设 | 选点次优 | 先验只影响顺序;不确定时退化为全向;安全性由 20 m 证书 + 覆盖证明负责 | +| numpy 化引入浮点路径差异 | 真源保留性质被破坏 | 两条后端同时保留并对拍;保持整数微秒复算计时 | +| 并行基准引入进程/端口/临时目录问题 | 基准不稳定 | 每进程独立内存回环;不共用端口;`manifest` 记录随机种子 | + +### 6.2 不承诺的部分 + +- **第四问 4000 s**:10 源场景下,仅"发现 + 缺席证明"就约需 + 最小命中集巡回 4719 s + 缺席检测 ≈1900 s ≈ 6600 s,加之定位清除,4000 s 不可达。 + 若必须逼近该线,需要改变停止条件(例如接受 `unresolved_channels` 而非逐频道缺席证明), + 那是**成绩口径的取舍**,必须先与题面评分方式核对,本轮不作为代码默认行为。 +- 本文所有收益数字都是**自建模拟器上的估计或本次复跑观测**,不是官方成绩; + 官方分布、r_eff 分布、误差场分布仍是测试假设。 +- 不声称 P0-1/P0-3 已在官方演练验证——需新的演练记录。 + +--- + +## 附录 A 复现命令与本次新增实验 + +```bash +# 1) 基线配对(本次复跑:bayes 3707.3 s vs seven_batch 5581.8 s,局部 −32.1%) +uv run python scripts/benchmark_q3_bayes.py --seeds 0,1 --out /tmp/mcmopt/q3 + +# 2) 运行历史计时分解(已入库):任意会话日志 → 移动/检测/换频分相 + 重复复扫检测 +uv run python scripts/analyze_run_timing.py session.jsonl --plan seven +uv run python scripts/analyze_run_timing.py referee-data/sessions/BBM9-HZG2-77N5-NKKC/log.jsonl --plan seven +uv run python scripts/analyze_run_timing.py referee-data/sessions/6X58-XQ7U-CJ24-JQQR/log.jsonl --plan 49 +# 实测输出(与服务器记录最大偏差 0.000000 s,证明复算口径正确): +# session.jsonl 350227.692 s,移动 82.3%,检测 10323 次,重复率 96.4, +# 末次清除后仍花 346169.9 s / 10225 次空复扫 +# BBM9 (Q3) 3134.643 s,移动 75.9%,探点 21 次 / 1138.7 s +# 6X58 (Q4) 3251.021 s,移动 78.3%,检测 112 次 + +# 3) 第四问覆盖证书与最小命中集(已入库) +uv run python scripts/verify_q4_cover.py --out output/q4/cover-certificate.json +# 实测输出:目标空间 43032 个 (p,h) +# 现役 49 点方格:缺口 0,NN 巡回 36.4 km(7280 s 移动) +# 贪心最小命中集:31 点,缺口 0,NN 巡回 22.9 km(4587 s 移动) + +# 4) 感知层剖面(单局 6.04 s 计算中 expected_survival 占 ~72%) +python -m cProfile -s cumulative <单局驱动脚本> +``` + +> 第 2、3 项已作为常驻工具入库,使"虚拟时间花在哪"与"覆盖集是否仍然合法" +> 成为可随时重跑的回归项;第 1、4 项仍是一次性分析,建议在 S1 阶段并入 +> `bench/runner.py` 的必报指标(`compute_wall_s`、`profile_top`)。 + +## 附录 B 数字出处索引 + +| 数字 | 出处 | +| --- | --- | +| 移动 80.50% / 16.78% / 2.71%(Q3) | `referee-data/sessions/{BBM9,RM7Y,VQKB}/log.jsonl` 按 `verify_q3_practice.py` 模型复算 | +| 移动 82.30%(官方 J2WH) | `session.jsonl` 求和 | +| 346 169.9 s 空复扫 | `session.jsonl` `/exit` 时刻 350 227.691846 s 减去 12 源首轮清除的 4 057.839 s | +| Q4 定向 2/6、漏检 4/4 全为定向 | `referee-data/sessions/{6X58,BAU8}/meta.json` + `log.jsonl` | +| bayes 3707.3 / seven 5581.8 | 本次复跑 `benchmark_q3_bayes.py --seeds 0,1` | +| 3535.9 s / 109 检测 / 6960 m 巡回 / 5741 m 探点 | 本次复跑计时分解 | +| 13652.1 s / 560 检测 / 51 356 m(Q4) | 本次复跑单局 | +| `expected_survival` 72% | 本次 `cProfile` 单局 | +| HRL 27.0 steps/s、4007.9 s、109 776 步 | `output/hrl/ui/q3-main/q3.json` + `*.monitor.csv` | +| bayes 比 HRL 快 4.3–5.0%、94% 差距为移动 | `output/hrl/ui/q3-main/eval/at-final/aggregate.json` + `runs/*/summary.json` | +| 站点三角化 99.28%、交会角 5 分位 58.5° | 本次离线采样 20 000 点 | +| 49 点 vs 30 点覆盖集 | 本次贪心击中集计算(附录 A 第 5 项) | diff --git a/logs/README.md b/logs/README.md deleted file mode 100644 index 9e2ea93..0000000 --- a/logs/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# logs/ - -正式测试/演练导出的 JSONL 与汇总日志放置目录。本地 P1 训练/评测日志实际写入 -`output/hrl/...`;本目录用于最终支撑材料归档,不修改文件名。 diff --git a/models/README.md b/models/README.md deleted file mode 100644 index 11bc1a3..0000000 --- a/models/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# models/ - -最终冻结模型归档目录。训练脚本默认把模型写到 `--model` 指定路径; -P1 smoke 产物见 `output/hrl/p1-smoke-time/`。正式提交前把冻结模型复制到本目录并保留同名 `.json` 元数据。 diff --git a/project/README.md b/project/README.md deleted file mode 100644 index 621437f..0000000 --- a/project/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# project/ 薄兼容层 - -题目 Prompt 要求 `project/` 目录树;本仓库的真实算法保持唯一一份, -位于 `src/mcm26b`、`scripts/`。本目录只做 re-export/转发,不复制实现。 - -| Prompt 路径 | 真实实现 | -|---|---| -| `env/simulator_client.py` | `src/mcm26b/protocol/client.py` | -| `env/local_env.py` | `src/mcm26b/hrl/hierarchical_env.py`, `low_level_env.py` | -| `env/particle_filter.py` | `src/mcm26b/particles.py` | -| `policies/high_level_ppo.py` | `src/mcm26b/hrl/policy.py` | -| `policies/low_level_ppo.py` | `src/mcm26b/hrl/policy.py`, `low_level_env.py` | -| `train/curriculum.py` | `src/mcm26b/hrl/curriculum.py` | -| `train/domain_randomization.py` | `src/mcm26b/hrl/curriculum.py` + 配置包装 | -| `eval/evaluate.py` | `scripts/benchmark_hrl.py` | -| `eval/ablation.py` | `scripts/ablate_hrl.py`(P2) | -| `baselines/heuristic.py` | `src/mcm26b/planner/hrl_loop.py` 启发式降级 | -| `baselines/end_to_end_ppo.py` | 显式未实现;单源局部 PPO 不冒充 E2E | - -使用示例: - -```python -from project.env.local_env import make_local_env -env = make_local_env(problem=3, stage=1, seed=7) -obs, info = env.reset(seed=7) -``` - -P1 当前交付:`benchmark_hrl.py`、`train_hrl_high.py`、CLI `--strategy hrl`、 -`--q4-strategy hrl`。P2 的 BC/Optuna/消融在 smoke 通过后另开。 diff --git a/project/__init__.py b/project/__init__.py deleted file mode 100644 index ac2fbef..0000000 --- a/project/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -"""题目 Prompt 所需目录树的薄兼容层。 - -真实实现仍位于 ``src/mcm26b``;本包只做 re-export / CLI 转发,避免两份算法逻辑。 -""" diff --git a/project/baselines/__init__.py b/project/baselines/__init__.py deleted file mode 100644 index 93ed785..0000000 --- a/project/baselines/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .heuristic import HeuristicHRL, run_heuristic - -__all__ = ["HeuristicHRL", "run_heuristic"] diff --git a/project/baselines/end_to_end_ppo.py b/project/baselines/end_to_end_ppo.py deleted file mode 100644 index e151f91..0000000 --- a/project/baselines/end_to_end_ppo.py +++ /dev/null @@ -1,16 +0,0 @@ -"""端到端 PPO 基线占位。 - -按本轮确认:当前只交付局部 PPO 基线;raw-observation/raw-action 的真正 -端到端 PPO 不在 P0+P1 范围内,因此显式标记未实现,避免把单源局部选点 -PPO 误称为端到端 baseline。 -""" -from __future__ import annotations - - -def train_end_to_end_ppo(*args, **kwargs): - raise NotImplementedError( - "本轮只交付局部 PPO 基线;真正的端到端 PPO 基线标记为未实现," - "需单独立项定义原始观测、动作与安全执行边界。") - - -__all__ = ["train_end_to_end_ppo"] diff --git a/project/baselines/heuristic.py b/project/baselines/heuristic.py deleted file mode 100644 index 1034303..0000000 --- a/project/baselines/heuristic.py +++ /dev/null @@ -1,16 +0,0 @@ -"""兼容入口:信息增益/TSP/覆盖规则 + 高层启发式调度。""" -from mcm26b.planner.bayes_loop import BayesLoop -from mcm26b.planner.hrl_loop import HRLLoop - - -def HeuristicHRL(*args, **kwargs): # pylint: disable=invalid-name # 兼容入口保留题面公开名 - """返回无模型的高层 HRL 闭环(heuristic_action 降级路径)。""" - kwargs.setdefault("high_policy", None) - return HRLLoop(*args, **kwargs) - - -def run_heuristic(*args, **kwargs): - return HeuristicHRL(*args, **kwargs).run() - - -__all__ = ["HeuristicHRL", "run_heuristic", "BayesLoop", "HRLLoop"] diff --git a/project/env/__init__.py b/project/env/__init__.py deleted file mode 100644 index 502254f..0000000 --- a/project/env/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from .simulator_client import SimulatorClient -from .local_env import HierarchicalEnv, LowLevelEnv, HRLReward, make_local_env -from .particle_filter import ChannelParticles - -__all__ = ["SimulatorClient", "HierarchicalEnv", "LowLevelEnv", "HRLReward", - "make_local_env", "ChannelParticles"] diff --git a/project/env/local_env.py b/project/env/local_env.py deleted file mode 100644 index d5ff04b..0000000 --- a/project/env/local_env.py +++ /dev/null @@ -1,22 +0,0 @@ -"""兼容入口:本地简化训练环境。 - -HierarchicalEnv 是高层宏动作环境;LowLevelEnv 是独立八方向导航环境。 -本文件不复制实现,只转发 mcm26b.hrl 下的真实类。 -""" -from mcm26b.hrl.hierarchical_env import HRLReward, HierarchicalEnv -from mcm26b.hrl.low_level_env import LowLevelEnv - -__all__ = ["HierarchicalEnv", "LowLevelEnv", "HRLReward", "make_local_env"] - - -def make_local_env(*, problem: int = 3, stage: int = 4, seed: int | None = None, - fidelity: str = "production"): - """按题目 Prompt 的四阶段编号创建训练环境。""" - from mcm26b.hrl.curriculum import STAGES - if not 1 <= int(stage) <= len(STAGES): - raise ValueError(f"stage 必须在 1..{len(STAGES)}") - env = HierarchicalEnv(problem=problem, stage=STAGES[int(stage) - 1], - fidelity=fidelity) - if seed is not None: - env.reset(seed=seed) - return env diff --git a/project/env/particle_filter.py b/project/env/particle_filter.py deleted file mode 100644 index f9c6d9e..0000000 --- a/project/env/particle_filter.py +++ /dev/null @@ -1,4 +0,0 @@ -"""兼容入口:逐频道网格粒子/幸存集。""" -from mcm26b.particles import ChannelParticles, angular_gap - -__all__ = ["ChannelParticles", "angular_gap"] diff --git a/project/env/simulator_client.py b/project/env/simulator_client.py deleted file mode 100644 index 43c1e56..0000000 --- a/project/env/simulator_client.py +++ /dev/null @@ -1,8 +0,0 @@ -"""兼容入口:真实类见 mcm26b.protocol.client。""" -from mcm26b.protocol.client import (ActionRejected, ClearOutcome, DeadlineExceeded, - ExitInfo, MeasureOutcome, ProtocolError, - ProtocolViolation, SimulatorClient) - -__all__ = ["SimulatorClient", "MeasureOutcome", "ClearOutcome", "ExitInfo", - "ProtocolError", "ActionRejected", "ProtocolViolation", - "DeadlineExceeded"] diff --git a/project/eval/__init__.py b/project/eval/__init__.py deleted file mode 100644 index 1fd6c71..0000000 --- a/project/eval/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .evaluate import run_benchmark -from .ablation import run_ablation - -__all__ = ["run_benchmark", "run_ablation"] diff --git a/project/eval/ablation.py b/project/eval/ablation.py deleted file mode 100644 index a4696ce..0000000 --- a/project/eval/ablation.py +++ /dev/null @@ -1,20 +0,0 @@ -"""兼容入口:调用 scripts/ablate_hrl.py(P2 后启用)。""" -from __future__ import annotations - -import importlib.util -from pathlib import Path - - -def run_ablation(argv=None) -> int: - path = Path(__file__).resolve().parents[2] / "scripts" / "ablate_hrl.py" - if not path.exists(): - raise NotImplementedError( - "scripts/ablate_hrl.py 尚未实现;P1 阶段只保证 benchmark/training/CLI。") - spec = importlib.util.spec_from_file_location("ablate_hrl_compat", path) - module = importlib.util.module_from_spec(spec) - assert spec.loader is not None - spec.loader.exec_module(module) - return int(module.main(argv)) - - -__all__ = ["run_ablation"] diff --git a/project/eval/evaluate.py b/project/eval/evaluate.py deleted file mode 100644 index 8eb7e21..0000000 --- a/project/eval/evaluate.py +++ /dev/null @@ -1,17 +0,0 @@ -"""兼容入口:调用 scripts/benchmark_hrl.py。""" -from __future__ import annotations - -import importlib.util -from pathlib import Path - - -def run_benchmark(argv=None) -> int: - path = Path(__file__).resolve().parents[2] / "scripts" / "benchmark_hrl.py" - spec = importlib.util.spec_from_file_location("benchmark_hrl_compat", path) - module = importlib.util.module_from_spec(spec) - assert spec.loader is not None - spec.loader.exec_module(module) - return int(module.main(argv)) - - -__all__ = ["run_benchmark"] diff --git a/project/policies/__init__.py b/project/policies/__init__.py deleted file mode 100644 index a52064f..0000000 --- a/project/policies/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from .high_level_ppo import HighLevelPolicy, load_high_policy -from .low_level_ppo import LowLevelPolicy, load_low_policy - -__all__ = ["HighLevelPolicy", "load_high_policy", - "LowLevelPolicy", "load_low_policy"] diff --git a/project/policies/high_level_ppo.py b/project/policies/high_level_ppo.py deleted file mode 100644 index 4dd4407..0000000 --- a/project/policies/high_level_ppo.py +++ /dev/null @@ -1,10 +0,0 @@ -"""兼容入口:高层 MaskablePPO 推理策略。""" -from mcm26b.hrl.policy import HighLevelPolicy - - -def load_high_policy(model_path: str, *, device: str = "auto", - problem: int | None = None) -> HighLevelPolicy: - return HighLevelPolicy(model_path, device=device, problem=problem) - - -__all__ = ["HighLevelPolicy", "load_high_policy"] diff --git a/project/policies/low_level_ppo.py b/project/policies/low_level_ppo.py deleted file mode 100644 index 974efb2..0000000 --- a/project/policies/low_level_ppo.py +++ /dev/null @@ -1,9 +0,0 @@ -"""兼容入口:低层八方向到达策略(离线导航实验)。""" -from mcm26b.hrl.policy import LowLevelPolicy - - -def load_low_policy(model_path: str, *, device: str = "auto") -> LowLevelPolicy: - return LowLevelPolicy(model_path, device=device) - - -__all__ = ["LowLevelPolicy", "load_low_policy"] diff --git a/project/train/__init__.py b/project/train/__init__.py deleted file mode 100644 index cf0ca9e..0000000 --- a/project/train/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from .curriculum import STAGES, Stage, make_scene, training_config -from .domain_randomization import randomize_problem_config - -__all__ = ["STAGES", "Stage", "make_scene", "training_config", - "randomize_problem_config"] diff --git a/project/train/curriculum.py b/project/train/curriculum.py deleted file mode 100644 index b99220d..0000000 --- a/project/train/curriculum.py +++ /dev/null @@ -1,6 +0,0 @@ -"""兼容入口:课程学习与域随机化。""" -from mcm26b.hrl.curriculum import (STAGES, Stage, make_scene, stage_with_noise, - training_config, training_spec) - -__all__ = ["STAGES", "Stage", "make_scene", "stage_with_noise", - "training_config", "training_spec"] diff --git a/project/train/domain_randomization.py b/project/train/domain_randomization.py deleted file mode 100644 index d585db2..0000000 --- a/project/train/domain_randomization.py +++ /dev/null @@ -1,31 +0,0 @@ -"""兼容入口:本地域随机化参数包装。 - -当前真实随机化在 mcm26b.hrl.curriculum.make_scene 内完成;这里只暴露 -ProblemConfig 的显式替换助手,便于 Optuna/消融在实验配置中记录随机化范围。 -""" -from __future__ import annotations - -import dataclasses -from random import Random - -from mcm26b.config import ProblemConfig - - -def randomize_problem_config(base: ProblemConfig, *, seed: int, - bearing_error_half_deg: float | None = None, - r_eff_range: tuple[float, float] | None = None - ) -> ProblemConfig: - """返回带域随机化标量的新配置;不修改全局默认配置。""" - _rng = Random(seed) # 固定种子留作兼容:真实随机化在 make_scene 内完成 - field = base.field - if bearing_error_half_deg is None: - bearing_error_half_deg = field.bearing_error_half_deg - if r_eff_range is not None: - lo, hi = r_eff_range - if not 0 <= lo <= hi: - raise ValueError("r_eff_range 必须为递增非负区间") - return dataclasses.replace(base, field=dataclasses.replace( - field, bearing_error_half_deg=float(bearing_error_half_deg))) - - -__all__ = ["randomize_problem_config"] diff --git a/project/train/optuna_tune.py b/project/train/optuna_tune.py deleted file mode 100644 index b666668..0000000 --- a/project/train/optuna_tune.py +++ /dev/null @@ -1,20 +0,0 @@ -"""兼容入口:调用 scripts/tune_hrl.py(P2 后启用)。""" -from __future__ import annotations - -import importlib.util -from pathlib import Path - - -def run_tuning(argv=None) -> int: - path = Path(__file__).resolve().parents[2] / "scripts" / "tune_hrl.py" - if not path.exists(): - raise NotImplementedError( - "scripts/tune_hrl.py 尚未实现;P1 阶段先冻结超参并留待 P2。") - spec = importlib.util.spec_from_file_location("tune_hrl_compat", path) - module = importlib.util.module_from_spec(spec) - assert spec.loader is not None - spec.loader.exec_module(module) - return int(module.main(argv)) - - -__all__ = ["run_tuning"] diff --git a/pyproject.toml b/pyproject.toml index 7555cd0..27188ae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,30 +15,13 @@ dev = [ # 独立评测机(自建模拟器):仅测试侧依赖,运行时代码零导入(懒加载 + 守卫测试) "mcm26b-referee", ] -rl = [ - "gymnasium>=1.1", - "sb3-contrib==2.9.0", - "stable-baselines3>=2.6", - "torch==2.11.0", -] # uv 工作区:referee/ 是独立包(零第三方依赖、不依赖 mcm26b),双方仅通过 HTTP 协议耦合 [tool.uv.workspace] members = ["referee"] -# RL 训练使用 CUDA 12.8 版 PyTorch(本机 RTX 4060;运行时依赖保持轻量)。 -[[tool.uv.index]] -name = "pytorch-cu128" -url = "https://download.pytorch.org/whl/cu128" -explicit = true - [tool.uv.sources] mcm26b-referee = { workspace = true } -# CUDA 12.8 版 PyTorch 仅限 Windows/Linux(RTX 4060 训练机); -# macOS (Apple Silicon, MPS) 回落到 PyPI 官方轮子。 -torch = [ - { index = "pytorch-cu128", marker = "sys_platform == 'linux' or sys_platform == 'win32'" }, -] [build-system] requires = ["hatchling"] @@ -102,7 +85,7 @@ disable = [ "missing-module-docstring", # 内部小模块与 __main__ 不强制 "missing-class-docstring", "missing-function-docstring", - "import-outside-toplevel", # torch/SB3/referee 等重依赖与可选依赖懒加载 + "import-outside-toplevel", # referee 等重依赖与可选依赖懒加载 "wrong-import-position", # 同上:importorskip 守卫后的延迟导入 "ungrouped-imports", # 同上:延迟导入无法与顶部导入分组 "broad-exception-caught", # 子进程 / IO / HTTP 边界防御式兜底,逐处注释 diff --git a/referee-data/sessions/53FK-LELA-M62B-J74U/log.jsonl b/referee-data/sessions/53FK-LELA-M62B-J74U/log.jsonl new file mode 100644 index 0000000..af79c5b --- /dev/null +++ b/referee-data/sessions/53FK-LELA-M62B-J74U/log.jsonl @@ -0,0 +1,122 @@ +{"event": "session_start", "case_code": "53FK-LELA-M62B-J74U", "module": "q3_practice", "robot_id": "1", "seed": 1364411664, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 18, "x": 1296.7141429697774, "y": -444.4430546050354, "r_eff_m": 1239.1782567152018, "directional": false, "heading_deg": 0.0}, {"channel": 17, "x": 1020.5918585779062, "y": 852.2515595937525, "r_eff_m": 1026.5206174583245, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": 580.5002167548972, "y": -991.4701530799936, "r_eff_m": 1237.8121709043808, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": -16.348424904475735, "y": -478.6435890197983, "r_eff_m": 1099.9814484291328, "directional": false, "heading_deg": 0.0}, {"channel": 3, "x": -677.9492703745801, "y": 1597.8849010804165, "r_eff_m": 1497.7568411784152, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": 941.6921106181675, "y": 1045.53299027287, "r_eff_m": 1391.826351188507, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": 261.02174414951065, "y": -1297.210479453902, "r_eff_m": 1464.8227234548847, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": 889.7578735792483, "y": 1513.108837479721, "r_eff_m": 1223.8000521319436, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": 716.9679630720734, "y": -1036.910162951016, "r_eff_m": 1445.0475739763483, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": 100.68070249674014, "y": 108.02794787019978, "r_eff_m": 1176.2905736642158, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": -291.4835840002278, "y": -1010.1772742830697, "r_eff_m": 1200.9184419942253, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": 282.13965648638487, "y": 40.4254513417698, "r_eff_m": 1456.4760272053131, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": 684.7259065078848, "y": -430.9034644685128, "r_eff_m": 1479.4906472616449, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789180957555, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789180957555, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789180957560, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180957560, "virtual_time_s": 5.0, "measure_result": "direction", "svd_deg": 300.65999999999997}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789180957586, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180957586, "virtual_time_s": 11.0, "measure_result": "direction", "svd_deg": 268.69}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789180957612, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180957612, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789180957616, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789180957616, "virtual_time_s": 23.0, "measure_result": "direction", "svd_deg": 47.32}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789180957643, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180957642, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789180957651, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180957651, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789180957662, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180957662, "virtual_time_s": 41.0, "measure_result": "direction", "svd_deg": 305.65999999999997}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789180957692, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180957692, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789180957696, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180957696, "virtual_time_s": 53.0, "measure_result": "direction", "svd_deg": 8.9}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789180957722, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180957722, "virtual_time_s": 59.0, "measure_result": "direction", "svd_deg": 327.54}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789180957748, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180957748, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789180957751, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180957751, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789180957755, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180957755, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 253.92000000000002}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789180957781, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180957781, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789180957785, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180957785, "virtual_time_s": 89.0, "measure_result": "direction", "svd_deg": 280.39}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789180957813, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180957813, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789180957817, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180957817, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789180957821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180957821, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789180957825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180957825, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789180957829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180957829, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789180957872, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0022", "position": {"x": 329.91632625184695, "y": 495.49080587993234}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789180957872, "virtual_time_s": 244.055604, "measure_result": "direction", "svd_deg": 238.82999999999998}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789180957904, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0023", "position": {"x": 87.06059978275506, "y": 95.76533567044315}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789180957904, "virtual_time_s": 342.599039, "measure_result": "direction", "svd_deg": 41.36}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789180957905, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0024", "position": {"x": 95.69696236243729, "y": 103.64174930725308}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789180957905, "virtual_time_s": 349.93677, "clear_result": "success"}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789180957934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0025", "position": {"x": 499.70083077051663, "y": 181.12441837044364}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180957934, "virtual_time_s": 438.210141, "measure_result": "direction", "svd_deg": 212.08}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789180957961, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0026", "position": {"x": 280.7729594067307, "y": 44.37891807732431}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180957961, "virtual_time_s": 494.83523, "measure_result": "near"}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789180957964, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0027", "position": {"x": 280.77295940673065, "y": 44.37891807732432}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180957964, "virtual_time_s": 499.83523, "clear_result": "success"}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789180957988, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0028", "position": {"x": 568.4300753615959, "y": -160.98657280949487}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180957988, "virtual_time_s": 576.52373, "measure_result": "direction", "svd_deg": 294.24}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789180958011, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0029", "position": {"x": 1159.7, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180958011, "virtual_time_s": 705.082581, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789180958014, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0030", "position": {"x": 1159.7, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180958014, "virtual_time_s": 711.082581, "measure_result": "no_signal"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789180958016, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0031", "position": {"x": 1159.7, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180958016, "virtual_time_s": 717.082581, "measure_result": "no_signal"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789180958019, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0032", "position": {"x": 1159.7, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180958018, "virtual_time_s": 723.082581, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789180958021, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0033", "position": {"x": 1159.7, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180958021, "virtual_time_s": 729.082581, "measure_result": "no_signal"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789180958023, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0034", "position": {"x": 1159.7, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958023, "virtual_time_s": 735.082581, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789180958026, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0035", "position": {"x": 1159.7, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180958026, "virtual_time_s": 741.082581, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789180958029, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0036", "position": {"x": 1159.7, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180958029, "virtual_time_s": 747.082581, "measure_result": "direction", "svd_deg": 102.56}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789180958046, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0037", "position": {"x": 1159.7, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180958046, "virtual_time_s": 753.082581, "measure_result": "direction", "svd_deg": 100.09}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789180958063, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0038", "position": {"x": 1159.7, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180958063, "virtual_time_s": 759.082581, "measure_result": "direction", "svd_deg": 286.95}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789180958080, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0039", "position": {"x": 1159.7, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180958080, "virtual_time_s": 765.082581, "measure_result": "no_signal"}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789180958082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0040", "position": {"x": 1159.7, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180958082, "virtual_time_s": 771.082581, "measure_result": "no_signal"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789180958085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0041", "position": {"x": 1159.7, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180958085, "virtual_time_s": 777.082581, "measure_result": "direction", "svd_deg": 222.4}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789180958120, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0042", "position": {"x": 1181.9612781825824, "y": -398.09481493713434}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180958120, "virtual_time_s": 862.825931, "measure_result": "direction", "svd_deg": 337.05}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789180958122, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0043", "position": {"x": 1290.31584970396, "y": -444.20323002077396}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180958122, "virtual_time_s": 891.377321, "clear_result": "success"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789180958153, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0044", "position": {"x": 692.9641961524196, "y": -431.62214158320916}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180958153, "virtual_time_s": 1015.874146, "clear_result": "success"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789180958154, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0045", "position": {"x": 692.9641961524196, "y": -431.62214158320916}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180958154, "virtual_time_s": 1021.874146, "measure_result": "direction", "svd_deg": 259.12}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789180958155, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0046", "position": {"x": 692.9641961524196, "y": -431.62214158320916}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180958155, "virtual_time_s": 1027.874146, "measure_result": "direction", "svd_deg": 273.15999999999997}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789180958180, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0047", "position": {"x": 726.0889668955143, "y": -1013.5555150727951}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180958180, "virtual_time_s": 1149.449221, "measure_result": "direction", "svd_deg": 249.26999999999998}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789180958181, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0048", "position": {"x": 723.6947977883272, "y": -1020.2329880529497}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180958181, "virtual_time_s": 1155.867963, "clear_result": "success"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789180958182, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0049", "position": {"x": 723.6947977883272, "y": -1020.2329880529497}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180958182, "virtual_time_s": 1161.867963, "measure_result": "direction", "svd_deg": 169.37}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789180958201, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0050", "position": {"x": 592.913377101037, "y": -995.8561016498235}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180958201, "virtual_time_s": 1193.474739, "clear_result": "success"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789180958220, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0051", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180958220, "virtual_time_s": 1202.58892, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789180958223, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0052", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180958223, "virtual_time_s": 1208.58892, "measure_result": "no_signal"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789180958225, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0053", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180958225, "virtual_time_s": 1214.58892, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789180958227, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0054", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180958227, "virtual_time_s": 1220.58892, "measure_result": "no_signal"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789180958229, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0055", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180958229, "virtual_time_s": 1226.58892, "measure_result": "no_signal"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789180958231, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0056", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958231, "virtual_time_s": 1232.58892, "measure_result": "no_signal"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789180958233, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0057", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180958233, "virtual_time_s": 1238.58892, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789180958235, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0058", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180958235, "virtual_time_s": 1244.58892, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789180958237, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0059", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180958237, "virtual_time_s": 1250.58892, "measure_result": "no_signal"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789180958259, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0060", "position": {"x": 349.6584245894246, "y": -866.3057372173914}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180958259, "virtual_time_s": 1310.268996, "measure_result": "direction", "svd_deg": 258.57}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789180958260, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0061", "position": {"x": 349.6584245894246, "y": -866.3057372173914}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180958260, "virtual_time_s": 1316.268996, "measure_result": "direction", "svd_deg": 134.25}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789180958261, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0062", "position": {"x": 349.6584245894246, "y": -866.3057372173914}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180958261, "virtual_time_s": 1322.268996, "measure_result": "direction", "svd_deg": 192.73}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789180958276, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0063", "position": {"x": 249.54413666891318, "y": -1369.282979063259}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180958276, "virtual_time_s": 1430.837798, "measure_result": "direction", "svd_deg": 80.3}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789180958278, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0064", "position": {"x": 249.54413666891318, "y": -1369.282979063259}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180958278, "virtual_time_s": 1436.837798, "measure_result": "direction", "svd_deg": 146.74}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789180958292, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0065", "position": {"x": 255.2449327883272, "y": -1332.006353661351}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180958292, "virtual_time_s": 1450.379803, "measure_result": "direction", "svd_deg": 79.93}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789180958307, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0066", "position": {"x": 258.1641507938497, "y": -1313.70950364736}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180958307, "virtual_time_s": 1459.085456, "measure_result": "direction", "svd_deg": 79.52}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789180958308, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0067", "position": {"x": 258.1641507938497, "y": -1313.70950364736}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180958308, "virtual_time_s": 1464.085456, "clear_result": "success"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789180958320, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0068", "position": {"x": -292.4448586303565, "y": -1014.136994071251}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180958320, "virtual_time_s": 1595.451156, "measure_result": "near"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789180958323, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0069", "position": {"x": -292.4448586303565, "y": -1014.136994071251}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180958323, "virtual_time_s": 1600.451156, "clear_result": "success"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789180958324, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0070", "position": {"x": -292.4448586303565, "y": -1014.136994071251}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180958324, "virtual_time_s": 1606.451156, "measure_result": "direction", "svd_deg": 62.63}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789180958332, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0071", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180958332, "virtual_time_s": 1669.965641, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789180958335, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0072", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180958335, "virtual_time_s": 1675.965641, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789180958337, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0073", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180958337, "virtual_time_s": 1681.965641, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789180958339, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0074", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180958339, "virtual_time_s": 1687.965641, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789180958341, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0075", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180958341, "virtual_time_s": 1693.965641, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789180958343, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0076", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958343, "virtual_time_s": 1699.965641, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789180958345, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0077", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180958345, "virtual_time_s": 1705.965641, "measure_result": "no_signal"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789180958347, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0078", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180958347, "virtual_time_s": 1711.965641, "measure_result": "no_signal"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789180958349, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0079", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180958349, "virtual_time_s": 1717.965641, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789180958359, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0080", "position": {"x": -20.81115691966234, "y": -491.4622015627573}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180958359, "virtual_time_s": 1874.696648, "clear_result": "success"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789180958367, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0081", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180958367, "virtual_time_s": 2127.777513, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789180958369, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0082", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180958369, "virtual_time_s": 2133.777513, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789180958371, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0083", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180958371, "virtual_time_s": 2139.777513, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789180958373, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0084", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180958373, "virtual_time_s": 2145.777513, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789180958375, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0085", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180958375, "virtual_time_s": 2151.777513, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789180958377, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0086", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180958377, "virtual_time_s": 2157.777513, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789180958378, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0087", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958378, "virtual_time_s": 2163.777513, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789180958381, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0088", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180958381, "virtual_time_s": 2169.777513, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789180958382, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0089", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180958382, "virtual_time_s": 2175.777513, "measure_result": "no_signal"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789180958392, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0090", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180958392, "virtual_time_s": 2412.717513, "measure_result": "no_signal"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789180958394, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0091", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180958394, "virtual_time_s": 2418.717513, "measure_result": "direction", "svd_deg": 99.09}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789180958403, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0092", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180958403, "virtual_time_s": 2424.717513, "measure_result": "no_signal"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789180958406, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0093", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180958406, "virtual_time_s": 2430.717513, "measure_result": "no_signal"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789180958408, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0094", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180958408, "virtual_time_s": 2436.717513, "measure_result": "no_signal"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789180958410, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0095", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180958410, "virtual_time_s": 2442.717513, "measure_result": "no_signal"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789180958412, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0096", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958412, "virtual_time_s": 2448.717513, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789180958415, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0097", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180958414, "virtual_time_s": 2454.717513, "measure_result": "no_signal"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789180958417, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0098", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180958417, "virtual_time_s": 2460.717513, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789180958430, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0099", "position": {"x": -695.8360286345146, "y": 1079.9979863420326}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180958430, "virtual_time_s": 2494.414772, "measure_result": "direction", "svd_deg": 88.79}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789180958440, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0100", "position": {"x": -773.4269950394429, "y": 1247.0684941553409}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180958440, "virtual_time_s": 2536.256549, "measure_result": "direction", "svd_deg": 74.59}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789180958451, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0101", "position": {"x": -677.0891554842904, "y": 1598.764673122199}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180958451, "virtual_time_s": 2614.186977, "measure_result": "near"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789180958453, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0102", "position": {"x": -677.0891554842905, "y": 1598.764673122199}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180958453, "virtual_time_s": 2619.186977, "clear_result": "success"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789180958461, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0103", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180958461, "virtual_time_s": 2903.269628, "measure_result": "no_signal"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789180958463, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0104", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180958463, "virtual_time_s": 2909.269628, "measure_result": "no_signal"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789180958465, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0105", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180958465, "virtual_time_s": 2915.269628, "measure_result": "no_signal"}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789180958467, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0106", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180958467, "virtual_time_s": 2921.269628, "measure_result": "no_signal"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789180958468, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0107", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958468, "virtual_time_s": 2927.269628, "measure_result": "direction", "svd_deg": 59.3}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789180958476, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0108", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180958476, "virtual_time_s": 2933.269628, "measure_result": "no_signal"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789180958478, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0109", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180958478, "virtual_time_s": 2939.269628, "measure_result": "no_signal"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789180958479, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0110", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180958479, "virtual_time_s": 2945.269628, "measure_result": "no_signal"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789180958492, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0111", "position": {"x": 787.1138417099093, "y": 868.8330538767141}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180958492, "virtual_time_s": 3000.794422, "measure_result": "direction", "svd_deg": 48.92}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789180958495, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0112", "position": {"x": 787.1138417099093, "y": 868.8330538767141}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958495, "virtual_time_s": 3006.794422, "measure_result": "direction", "svd_deg": 81.72}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789180958497, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0113", "position": {"x": 787.1138417099093, "y": 868.8330538767141}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180958497, "virtual_time_s": 3012.794422, "measure_result": "direction", "svd_deg": 355.02}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789180958505, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0114", "position": {"x": 1006.7514888052996, "y": 849.402305610616}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180958504, "virtual_time_s": 3061.893515, "clear_result": "success"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789180958506, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0115", "position": {"x": 1006.7514888052996, "y": 849.402305610616}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958506, "virtual_time_s": 3067.893515, "measure_result": "direction", "svd_deg": 99.43}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789180958507, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0116", "position": {"x": 1006.7514888052996, "y": 849.402305610616}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180958507, "virtual_time_s": 3073.893515, "measure_result": "direction", "svd_deg": 108.49}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789180958510, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0117", "position": {"x": 944.6465433737715, "y": 1035.4841640936}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180958510, "virtual_time_s": 3118.12793, "clear_result": "success"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789180958513, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0118", "position": {"x": 891.8884900605264, "y": 1530.8309263018434}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958513, "virtual_time_s": 3223.75761, "measure_result": "direction", "svd_deg": 262.24}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789180958514, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0119", "position": {"x": 890.3107496582719, "y": 1520.5980009322138}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180958514, "virtual_time_s": 3230.828378, "clear_result": "success"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789180958515, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "234dfa75ad6f-0120"}, "response": {"accepted": true, "real_timestamp_ms": 1789180958515, "virtual_time_s": 3230.828378, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3230.828378, "real_elapsed_s": 1.527473, "request_count": 120, "cleared_count": 13} diff --git a/referee-data/sessions/53FK-LELA-M62B-J74U/meta.json b/referee-data/sessions/53FK-LELA-M62B-J74U/meta.json new file mode 100644 index 0000000..eed36ed --- /dev/null +++ b/referee-data/sessions/53FK-LELA-M62B-J74U/meta.json @@ -0,0 +1,112 @@ +{ + "case_code": "53FK-LELA-M62B-J74U", + "module": "q3_practice", + "robot_id": "1", + "seed": 1364411664, + "truth": [ + { + "channel": 18, + "x": 1296.7141429697774, + "y": -444.4430546050354, + "r_eff_m": 1239.1782567152018, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 17, + "x": 1020.5918585779062, + "y": 852.2515595937525, + "r_eff_m": 1026.5206174583245, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": 580.5002167548972, + "y": -991.4701530799936, + "r_eff_m": 1237.8121709043808, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": -16.348424904475735, + "y": -478.6435890197983, + "r_eff_m": 1099.9814484291328, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 3, + "x": -677.9492703745801, + "y": 1597.8849010804165, + "r_eff_m": 1497.7568411784152, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": 941.6921106181675, + "y": 1045.53299027287, + "r_eff_m": 1391.826351188507, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": 261.02174414951065, + "y": -1297.210479453902, + "r_eff_m": 1464.8227234548847, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": 889.7578735792483, + "y": 1513.108837479721, + "r_eff_m": 1223.8000521319436, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": 716.9679630720734, + "y": -1036.910162951016, + "r_eff_m": 1445.0475739763483, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": 100.68070249674014, + "y": 108.02794787019978, + "r_eff_m": 1176.2905736642158, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": -291.4835840002278, + "y": -1010.1772742830697, + "r_eff_m": 1200.9184419942253, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": 282.13965648638487, + "y": 40.4254513417698, + "r_eff_m": 1456.4760272053131, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": 684.7259065078848, + "y": -430.9034644685128, + "r_eff_m": 1479.4906472616449, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/5TQF-A8K9-QW89-V2ET/log.jsonl b/referee-data/sessions/5TQF-A8K9-QW89-V2ET/log.jsonl new file mode 100644 index 0000000..09321cc --- /dev/null +++ b/referee-data/sessions/5TQF-A8K9-QW89-V2ET/log.jsonl @@ -0,0 +1,532 @@ +{"event": "session_start", "case_code": "5TQF-A8K9-QW89-V2ET", "module": "q4_practice", "robot_id": "1", "seed": 1415283134, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 17, "x": 201.83789549004942, "y": 411.9733699427643, "r_eff_m": 1221.4478310143415, "directional": true, "heading_deg": 315.48877042891024}, {"channel": 4, "x": -1105.4390726028914, "y": -836.873727576673, "r_eff_m": 1449.9048730606553, "directional": true, "heading_deg": 189.031114716249}, {"channel": 2, "x": -502.2367519508228, "y": 921.7249012630463, "r_eff_m": 1222.172364639404, "directional": true, "heading_deg": 170.22567245589232}, {"channel": 15, "x": 1338.5109618239856, "y": 1114.8362795676107, "r_eff_m": 1125.022131637457, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": -916.8137760578517, "y": -848.3836360990396, "r_eff_m": 1463.9469990173247, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": -962.2248701879902, "y": -861.6772389852658, "r_eff_m": 1057.5023609780635, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": 426.0100239176212, "y": -1395.433153095009, "r_eff_m": 1316.6412496443302, "directional": false, "heading_deg": 0.0}, {"channel": 5, "x": 1565.3993113628057, "y": 276.7308299465653, "r_eff_m": 1300.3648907717125, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": 1358.7991804165615, "y": 756.6431101382647, "r_eff_m": 1268.3365819478918, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": -1025.1717086952801, "y": -1138.8576473722178, "r_eff_m": 1274.8459885352177, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": -973.4448466468912, "y": 950.3687397692318, "r_eff_m": 1358.1824021574332, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": -679.5564210766588, "y": -113.09168897579823, "r_eff_m": 1357.5098916694712, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789176743503, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789176743503, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789176743505, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176743505, "virtual_time_s": 5.0, "measure_result": "direction", "svd_deg": 189.35}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789176743540, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176743540, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789176743541, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176743541, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789176743541, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176743541, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789176743542, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176743542, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789176743543, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176743543, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789176743543, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176743543, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789176743544, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176743544, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789176743544, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176743544, "virtual_time_s": 53.0, "measure_result": "direction", "svd_deg": 222.14}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789176743578, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176743578, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789176743579, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176743579, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789176743580, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176743580, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789176743580, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176743580, "virtual_time_s": 77.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789176743581, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176743581, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789176743581, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176743581, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789176743582, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176743582, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789176743583, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176743583, "virtual_time_s": 101.0, "measure_result": "direction", "svd_deg": 64.7}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789176743618, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176743618, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789176743619, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176743619, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789176743619, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176743619, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789176743727, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0022", "position": {"x": -209.85405579849834, "y": 147.75935846577704}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176743727, "virtual_time_s": 176.330908, "measure_result": "no_signal"}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789176743836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0023", "position": {"x": -209.85405579849834, "y": 147.75935846577704}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176743836, "virtual_time_s": 181.330908, "measure_result": "no_signal"}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789176743951, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0024", "position": {"x": -209.85405579849834, "y": 147.75935846577704}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176743951, "virtual_time_s": 186.330908, "measure_result": "no_signal"}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789176744066, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0025", "position": {"x": -209.85405579849834, "y": 147.75935846577704}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744066, "virtual_time_s": 191.330908, "measure_result": "no_signal"}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789176744075, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0026", "position": {"x": 10.0, "y": 50.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744074, "virtual_time_s": 242.452711, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789176744076, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0027", "position": {"x": 10.0, "y": 30.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744076, "virtual_time_s": 249.452711, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789176744077, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0028", "position": {"x": 10.0, "y": 10.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744076, "virtual_time_s": 256.452711, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789176744077, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0029", "position": {"x": 30.0, "y": 50.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744077, "virtual_time_s": 268.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789176744078, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0030", "position": {"x": 30.0, "y": 70.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744078, "virtual_time_s": 275.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789176744079, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0031", "position": {"x": 30.0, "y": 90.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744079, "virtual_time_s": 282.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789176744080, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0032", "position": {"x": 50.0, "y": 90.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744080, "virtual_time_s": 289.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789176744080, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0033", "position": {"x": 50.0, "y": 110.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744080, "virtual_time_s": 296.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789176744081, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0034", "position": {"x": 50.0, "y": 130.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744081, "virtual_time_s": 303.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789176744082, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0035", "position": {"x": 70.0, "y": 130.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744082, "virtual_time_s": 310.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789176744082, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0036", "position": {"x": 70.0, "y": 150.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744082, "virtual_time_s": 317.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789176744083, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0037", "position": {"x": 70.0, "y": 170.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744083, "virtual_time_s": 324.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789176744084, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0038", "position": {"x": 90.0, "y": 170.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744084, "virtual_time_s": 331.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789176744085, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0039", "position": {"x": 90.0, "y": 190.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744085, "virtual_time_s": 338.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789176744086, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0040", "position": {"x": 90.0, "y": 210.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744086, "virtual_time_s": 345.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789176744087, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0041", "position": {"x": 90.0, "y": 230.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744087, "virtual_time_s": 352.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789176744088, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0042", "position": {"x": 110.0, "y": 230.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744088, "virtual_time_s": 359.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789176744089, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0043", "position": {"x": 110.0, "y": 210.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744089, "virtual_time_s": 366.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789176744089, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0044", "position": {"x": 110.0, "y": 250.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744089, "virtual_time_s": 377.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789176744090, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0045", "position": {"x": 110.0, "y": 270.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744090, "virtual_time_s": 384.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789176744091, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0046", "position": {"x": 130.0, "y": 270.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744091, "virtual_time_s": 391.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789176744092, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0047", "position": {"x": 130.0, "y": 250.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744091, "virtual_time_s": 398.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789176744092, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0048", "position": {"x": 130.0, "y": 290.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744092, "virtual_time_s": 409.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789176744093, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0049", "position": {"x": 130.0, "y": 310.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744093, "virtual_time_s": 416.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789176744094, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0050", "position": {"x": 150.0, "y": 310.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744094, "virtual_time_s": 423.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789176744094, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0051", "position": {"x": 150.0, "y": 290.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744094, "virtual_time_s": 430.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789176744095, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0052", "position": {"x": 150.0, "y": 330.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744095, "virtual_time_s": 441.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789176744096, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0053", "position": {"x": 150.0, "y": 350.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744096, "virtual_time_s": 448.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789176744096, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0054", "position": {"x": 170.0, "y": 350.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744096, "virtual_time_s": 455.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789176744097, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0055", "position": {"x": 170.0, "y": 330.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744097, "virtual_time_s": 462.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789176744098, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0056", "position": {"x": 170.0, "y": 370.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744098, "virtual_time_s": 473.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789176744098, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0057", "position": {"x": 170.0, "y": 390.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744098, "virtual_time_s": 480.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789176744099, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0058", "position": {"x": 190.0, "y": 390.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744099, "virtual_time_s": 487.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789176744100, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0059", "position": {"x": 190.0, "y": 370.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744100, "virtual_time_s": 494.396983, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789176744101, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0060", "position": {"x": 190.0, "y": 410.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176744101, "virtual_time_s": 507.396983, "clear_result": "success"}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789176744248, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0061", "position": {"x": -209.71604207390737, "y": 408.31180226407764}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176744248, "virtual_time_s": 593.340904, "measure_result": "direction", "svd_deg": 228.61}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789176744264, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0062", "position": {"x": -629.8687381345811, "y": -72.63944843455852}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176744264, "virtual_time_s": 726.065983, "measure_result": "direction", "svd_deg": 219.19}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789176744278, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0063", "position": {"x": -651.3328725627388, "y": -84.8382530829925}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176744278, "virtual_time_s": 736.003674, "measure_result": "direction", "svd_deg": 224.16}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789176744280, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0064", "position": {"x": -684.6469952147388, "y": -116.80120530424186}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176744280, "virtual_time_s": 750.237224, "clear_result": "success"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789176744412, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0065", "position": {"x": -556.2448721339551, "y": -128.19722962602532}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744412, "virtual_time_s": 782.018593, "measure_result": "direction", "svd_deg": 243.95999999999998}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789176744436, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0066", "position": {"x": -793.4137491491886, "y": -710.8346157336247}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744436, "virtual_time_s": 912.830421, "measure_result": "direction", "svd_deg": 228.89}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789176744454, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0067", "position": {"x": -840.6507108907208, "y": -773.6752375134632}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744454, "virtual_time_s": 933.553365, "measure_result": "direction", "svd_deg": 224.88}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789176744472, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0068", "position": {"x": -853.9521308716392, "y": -787.8752977423674}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744472, "virtual_time_s": 942.444737, "measure_result": "direction", "svd_deg": 224.3}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789176744487, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0069", "position": {"x": -859.3063790868281, "y": -793.0528623864075}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744487, "virtual_time_s": 948.93437, "measure_result": "direction", "svd_deg": 224.2}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789176744505, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0070", "position": {"x": -860.0609236842562, "y": -793.5864307088535}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744505, "virtual_time_s": 954.119198, "measure_result": "direction", "svd_deg": 223.12}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789176744520, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0071", "position": {"x": -863.0416400882648, "y": -795.1906929028166}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744520, "virtual_time_s": 959.796201, "measure_result": "direction", "svd_deg": 224.99}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789176744535, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0072", "position": {"x": -865.3759614633741, "y": -797.4669070200721}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744535, "virtual_time_s": 965.448281, "measure_result": "direction", "svd_deg": 224.57}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789176744537, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0073", "position": {"x": -890.0, "y": -810.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744537, "virtual_time_s": 973.974298, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789176744538, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0074", "position": {"x": -890.0, "y": -830.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744538, "virtual_time_s": 980.974298, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789176744539, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0075", "position": {"x": -910.0, "y": -830.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176744539, "virtual_time_s": 989.974298, "clear_result": "success"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789176744540, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0076", "position": {"x": -1200.0, "y": -1000.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176744540, "virtual_time_s": 1063.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789176744540, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0077", "position": {"x": -1200.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176744540, "virtual_time_s": 1069.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789176744541, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0078", "position": {"x": -1200.0, "y": -1000.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176744541, "virtual_time_s": 1075.205243, "measure_result": "direction", "svd_deg": 59.37}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789176744571, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0079", "position": {"x": -1200.0, "y": -1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176744571, "virtual_time_s": 1081.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789176744572, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0080", "position": {"x": -1200.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176744572, "virtual_time_s": 1087.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789176744573, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0081", "position": {"x": -1200.0, "y": -1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176744573, "virtual_time_s": 1093.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789176744574, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0082", "position": {"x": -1200.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176744574, "virtual_time_s": 1099.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789176744575, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0083", "position": {"x": -1200.0, "y": -1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176744575, "virtual_time_s": 1105.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789176744575, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0084", "position": {"x": -1200.0, "y": -1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176744575, "virtual_time_s": 1111.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789176744576, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0085", "position": {"x": -1200.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176744576, "virtual_time_s": 1117.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789176744576, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0086", "position": {"x": -1200.0, "y": -1000.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176744576, "virtual_time_s": 1123.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789176744577, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0087", "position": {"x": -1200.0, "y": -1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176744577, "virtual_time_s": 1129.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789176744578, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0088", "position": {"x": -1200.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176744578, "virtual_time_s": 1135.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789176744578, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0089", "position": {"x": -1200.0, "y": -1000.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176744578, "virtual_time_s": 1141.205243, "measure_result": "direction", "svd_deg": 29.98}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789176744608, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0090", "position": {"x": -1200.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176744608, "virtual_time_s": 1147.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789176744611, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0091", "position": {"x": -1200.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176744611, "virtual_time_s": 1153.205243, "measure_result": "no_signal"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789176744613, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0092", "position": {"x": -1200.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176744613, "virtual_time_s": 1159.205243, "measure_result": "direction", "svd_deg": 320.74}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789176744774, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0093", "position": {"x": -1150.1972412326336, "y": -943.9600015212543}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176744774, "virtual_time_s": 1179.199637, "measure_result": "direction", "svd_deg": 302.88}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789176744788, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0094", "position": {"x": -1044.6779392613898, "y": -1122.2439504091915}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176744788, "virtual_time_s": 1225.633676, "measure_result": "direction", "svd_deg": 319.3}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789176744790, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0095", "position": {"x": -1021.4536512199851, "y": -1142.6024379440794}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176744790, "virtual_time_s": 1236.810522, "clear_result": "success"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789176744916, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0096", "position": {"x": -1080.7613481787325, "y": -1155.4023813693607}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176744916, "virtual_time_s": 1254.945169, "measure_result": "direction", "svd_deg": 67.99}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789176744917, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0097", "position": {"x": -962.0474755608315, "y": -862.4214540022658}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176744917, "virtual_time_s": 1323.168838, "clear_result": "success"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789176745035, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0098", "position": {"x": -818.0490622286305, "y": -729.4600648451033}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745035, "virtual_time_s": 1368.367957, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789176745155, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0099", "position": {"x": -818.0490622286305, "y": -729.4600648451033}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745155, "virtual_time_s": 1373.367957, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789176745279, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0100", "position": {"x": -818.0490622286305, "y": -729.4600648451033}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745279, "virtual_time_s": 1378.367957, "measure_result": "no_signal"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789176745393, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0101", "position": {"x": -818.0490622286305, "y": -729.4600648451033}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745393, "virtual_time_s": 1383.367957, "measure_result": "no_signal"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789176745403, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0102", "position": {"x": -970.0, "y": -650.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745403, "virtual_time_s": 1420.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789176745404, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0103", "position": {"x": -990.0, "y": -650.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745404, "virtual_time_s": 1427.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789176745405, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0104", "position": {"x": -1010.0, "y": -650.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745405, "virtual_time_s": 1434.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789176745406, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0105", "position": {"x": -1010.0, "y": -670.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745406, "virtual_time_s": 1441.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789176745407, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0106", "position": {"x": -1010.0, "y": -690.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745407, "virtual_time_s": 1448.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789176745407, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0107", "position": {"x": -1030.0, "y": -690.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745407, "virtual_time_s": 1455.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789176745408, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0108", "position": {"x": -1030.0, "y": -710.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745408, "virtual_time_s": 1462.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789176745409, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0109", "position": {"x": -1050.0, "y": -710.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745409, "virtual_time_s": 1469.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789176745410, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0110", "position": {"x": -1050.0, "y": -730.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745410, "virtual_time_s": 1476.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789176745410, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0111", "position": {"x": -1050.0, "y": -750.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745410, "virtual_time_s": 1483.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789176745411, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0112", "position": {"x": -1070.0, "y": -750.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745411, "virtual_time_s": 1490.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789176745412, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0113", "position": {"x": -1070.0, "y": -770.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745412, "virtual_time_s": 1497.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789176745412, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0114", "position": {"x": -1070.0, "y": -790.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745412, "virtual_time_s": 1504.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789176745413, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0115", "position": {"x": -1090.0, "y": -790.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745413, "virtual_time_s": 1511.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789176745413, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0116", "position": {"x": -1090.0, "y": -810.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745413, "virtual_time_s": 1518.662557, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789176745414, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0117", "position": {"x": -1090.0, "y": -830.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176745414, "virtual_time_s": 1527.662557, "clear_result": "success"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789176745415, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0118", "position": {"x": -600.0, "y": -1000.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745415, "virtual_time_s": 1637.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789176745416, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0119", "position": {"x": -600.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745416, "virtual_time_s": 1643.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789176745416, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0120", "position": {"x": -600.0, "y": -1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745416, "virtual_time_s": 1649.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789176745417, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0121", "position": {"x": -600.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745417, "virtual_time_s": 1655.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789176745418, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0122", "position": {"x": -600.0, "y": -1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745418, "virtual_time_s": 1661.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789176745418, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0123", "position": {"x": -600.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745418, "virtual_time_s": 1667.392977, "measure_result": "direction", "svd_deg": 338.88}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789176745451, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0124", "position": {"x": -600.0, "y": -1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745451, "virtual_time_s": 1673.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789176745452, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0125", "position": {"x": -600.0, "y": -1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745452, "virtual_time_s": 1679.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789176745452, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0126", "position": {"x": -600.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745452, "virtual_time_s": 1685.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789176745453, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0127", "position": {"x": -600.0, "y": -1000.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745453, "virtual_time_s": 1691.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 128, "wall_ts_ms": 1789176745454, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0128", "position": {"x": -600.0, "y": -1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745454, "virtual_time_s": 1697.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 129, "wall_ts_ms": 1789176745455, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0129", "position": {"x": -600.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745455, "virtual_time_s": 1703.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 130, "wall_ts_ms": 1789176745455, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0130", "position": {"x": -600.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745455, "virtual_time_s": 1709.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 131, "wall_ts_ms": 1789176745456, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0131", "position": {"x": -600.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745456, "virtual_time_s": 1715.392977, "measure_result": "no_signal"}} +{"event": "action", "seq": 132, "wall_ts_ms": 1789176745575, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0132", "position": {"x": -650.2483354825911, "y": -1269.9287223757206}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745575, "virtual_time_s": 1776.306149, "measure_result": "direction", "svd_deg": 354.02}} +{"event": "action", "seq": 133, "wall_ts_ms": 1789176745605, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0133", "position": {"x": 184.07892973050934, "y": -1381.9520416188143}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745605, "virtual_time_s": 1949.668996, "measure_result": "direction", "svd_deg": 356.5}} +{"event": "action", "seq": 134, "wall_ts_ms": 1789176745627, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0134", "position": {"x": 318.3690827645098, "y": -1398.733855708937}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745627, "virtual_time_s": 1981.735931, "measure_result": "direction", "svd_deg": 1.74}} +{"event": "action", "seq": 135, "wall_ts_ms": 1789176745645, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0135", "position": {"x": 351.5150275325047, "y": -1396.2534123602163}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745645, "virtual_time_s": 1993.383656, "measure_result": "direction", "svd_deg": 359.83}} +{"event": "action", "seq": 136, "wall_ts_ms": 1789176745668, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0136", "position": {"x": 351.5150275325047, "y": -1396.2534123602163}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745668, "virtual_time_s": 1998.383656, "measure_result": "direction", "svd_deg": 359.83}} +{"event": "action", "seq": 137, "wall_ts_ms": 1789176745691, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0137", "position": {"x": 351.5150275325047, "y": -1396.2534123602163}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745691, "virtual_time_s": 2003.383656, "measure_result": "direction", "svd_deg": 359.83}} +{"event": "action", "seq": 138, "wall_ts_ms": 1789176745714, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0138", "position": {"x": 351.5150275325047, "y": -1396.2534123602163}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745714, "virtual_time_s": 2008.383656, "measure_result": "direction", "svd_deg": 359.83}} +{"event": "action", "seq": 139, "wall_ts_ms": 1789176745737, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0139", "position": {"x": 351.5150275325047, "y": -1396.2534123602163}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745737, "virtual_time_s": 2013.383656, "measure_result": "direction", "svd_deg": 359.83}} +{"event": "action", "seq": 140, "wall_ts_ms": 1789176745739, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0140", "position": {"x": 370.0, "y": -1390.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745739, "virtual_time_s": 2020.286472, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 141, "wall_ts_ms": 1789176745740, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0141", "position": {"x": 390.0, "y": -1390.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745740, "virtual_time_s": 2027.286472, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 142, "wall_ts_ms": 1789176745741, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0142", "position": {"x": 410.0, "y": -1390.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176745741, "virtual_time_s": 2036.286472, "clear_result": "success"}} +{"event": "action", "seq": 143, "wall_ts_ms": 1789176745741, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0143", "position": {"x": 600.0, "y": -1400.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745741, "virtual_time_s": 2080.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 144, "wall_ts_ms": 1789176745742, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0144", "position": {"x": 600.0, "y": -1400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745742, "virtual_time_s": 2086.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 145, "wall_ts_ms": 1789176745743, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0145", "position": {"x": 600.0, "y": -1400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745743, "virtual_time_s": 2092.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 146, "wall_ts_ms": 1789176745743, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0146", "position": {"x": 600.0, "y": -1400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745743, "virtual_time_s": 2098.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 147, "wall_ts_ms": 1789176745744, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0147", "position": {"x": 600.0, "y": -1400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745744, "virtual_time_s": 2104.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 148, "wall_ts_ms": 1789176745744, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0148", "position": {"x": 600.0, "y": -1400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745744, "virtual_time_s": 2110.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 149, "wall_ts_ms": 1789176745745, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0149", "position": {"x": 600.0, "y": -1400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745745, "virtual_time_s": 2116.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 150, "wall_ts_ms": 1789176745745, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0150", "position": {"x": 600.0, "y": -1400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745745, "virtual_time_s": 2122.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 151, "wall_ts_ms": 1789176745746, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0151", "position": {"x": 600.0, "y": -1400.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745746, "virtual_time_s": 2128.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 152, "wall_ts_ms": 1789176745747, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0152", "position": {"x": 600.0, "y": -1400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745747, "virtual_time_s": 2134.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 153, "wall_ts_ms": 1789176745747, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0153", "position": {"x": 600.0, "y": -1400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745747, "virtual_time_s": 2140.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 154, "wall_ts_ms": 1789176745748, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0154", "position": {"x": 600.0, "y": -1400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745748, "virtual_time_s": 2146.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 155, "wall_ts_ms": 1789176745748, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0155", "position": {"x": 600.0, "y": -1400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745748, "virtual_time_s": 2152.339067, "measure_result": "no_signal"}} +{"event": "action", "seq": 156, "wall_ts_ms": 1789176745749, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0156", "position": {"x": 800.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745749, "virtual_time_s": 2246.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 157, "wall_ts_ms": 1789176745750, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0157", "position": {"x": 800.0, "y": -1800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745750, "virtual_time_s": 2252.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 158, "wall_ts_ms": 1789176745750, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0158", "position": {"x": 800.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745750, "virtual_time_s": 2258.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 159, "wall_ts_ms": 1789176745751, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0159", "position": {"x": 800.0, "y": -1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745751, "virtual_time_s": 2264.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 160, "wall_ts_ms": 1789176745751, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0160", "position": {"x": 800.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745751, "virtual_time_s": 2270.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 161, "wall_ts_ms": 1789176745752, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0161", "position": {"x": 800.0, "y": -1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745752, "virtual_time_s": 2276.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 162, "wall_ts_ms": 1789176745752, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0162", "position": {"x": 800.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745752, "virtual_time_s": 2282.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 163, "wall_ts_ms": 1789176745753, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0163", "position": {"x": 800.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745753, "virtual_time_s": 2288.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 164, "wall_ts_ms": 1789176745753, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0164", "position": {"x": 800.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745753, "virtual_time_s": 2294.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 165, "wall_ts_ms": 1789176745754, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0165", "position": {"x": 800.0, "y": -1800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745754, "virtual_time_s": 2300.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 166, "wall_ts_ms": 1789176745754, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0166", "position": {"x": 800.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745754, "virtual_time_s": 2306.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 167, "wall_ts_ms": 1789176745755, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0167", "position": {"x": 800.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745755, "virtual_time_s": 2312.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 168, "wall_ts_ms": 1789176745756, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0168", "position": {"x": 800.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745756, "virtual_time_s": 2318.781786, "measure_result": "no_signal"}} +{"event": "action", "seq": 169, "wall_ts_ms": 1789176745756, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0169", "position": {"x": 1000.0, "y": -1600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745756, "virtual_time_s": 2380.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 170, "wall_ts_ms": 1789176745757, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0170", "position": {"x": 1000.0, "y": -1600.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745757, "virtual_time_s": 2386.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 171, "wall_ts_ms": 1789176745757, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0171", "position": {"x": 1000.0, "y": -1600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745757, "virtual_time_s": 2392.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 172, "wall_ts_ms": 1789176745758, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0172", "position": {"x": 1000.0, "y": -1600.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745758, "virtual_time_s": 2398.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 173, "wall_ts_ms": 1789176745758, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0173", "position": {"x": 1000.0, "y": -1600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745758, "virtual_time_s": 2404.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 174, "wall_ts_ms": 1789176745759, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0174", "position": {"x": 1000.0, "y": -1600.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745759, "virtual_time_s": 2410.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 175, "wall_ts_ms": 1789176745759, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0175", "position": {"x": 1000.0, "y": -1600.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745759, "virtual_time_s": 2416.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 176, "wall_ts_ms": 1789176745760, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0176", "position": {"x": 1000.0, "y": -1600.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745760, "virtual_time_s": 2422.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 177, "wall_ts_ms": 1789176745761, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0177", "position": {"x": 1000.0, "y": -1600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745760, "virtual_time_s": 2428.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 178, "wall_ts_ms": 1789176745761, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0178", "position": {"x": 1000.0, "y": -1600.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745761, "virtual_time_s": 2434.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 179, "wall_ts_ms": 1789176745762, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0179", "position": {"x": 1000.0, "y": -1600.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745762, "virtual_time_s": 2440.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 180, "wall_ts_ms": 1789176745762, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0180", "position": {"x": 1000.0, "y": -1600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745762, "virtual_time_s": 2446.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 181, "wall_ts_ms": 1789176745763, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0181", "position": {"x": 1000.0, "y": -1600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745763, "virtual_time_s": 2452.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 182, "wall_ts_ms": 1789176745763, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0182", "position": {"x": 1000.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745763, "virtual_time_s": 2577.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 183, "wall_ts_ms": 1789176745764, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0183", "position": {"x": 1000.0, "y": -1000.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745764, "virtual_time_s": 2583.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 184, "wall_ts_ms": 1789176745884, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0184", "position": {"x": 1000.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745884, "virtual_time_s": 2589.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 185, "wall_ts_ms": 1789176745885, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0185", "position": {"x": 1000.0, "y": -1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745885, "virtual_time_s": 2595.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 186, "wall_ts_ms": 1789176745886, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0186", "position": {"x": 1000.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745886, "virtual_time_s": 2601.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 187, "wall_ts_ms": 1789176745887, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0187", "position": {"x": 1000.0, "y": -1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745887, "virtual_time_s": 2607.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 188, "wall_ts_ms": 1789176745888, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0188", "position": {"x": 1000.0, "y": -1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745888, "virtual_time_s": 2613.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 189, "wall_ts_ms": 1789176745889, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0189", "position": {"x": 1000.0, "y": -1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745889, "virtual_time_s": 2619.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 190, "wall_ts_ms": 1789176745889, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0190", "position": {"x": 1000.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745889, "virtual_time_s": 2625.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 191, "wall_ts_ms": 1789176745890, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0191", "position": {"x": 1000.0, "y": -1000.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745890, "virtual_time_s": 2631.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 192, "wall_ts_ms": 1789176745891, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0192", "position": {"x": 1000.0, "y": -1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745891, "virtual_time_s": 2637.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 193, "wall_ts_ms": 1789176745892, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0193", "position": {"x": 1000.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745892, "virtual_time_s": 2643.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 194, "wall_ts_ms": 1789176745893, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0194", "position": {"x": 1000.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745893, "virtual_time_s": 2649.350328, "measure_result": "no_signal"}} +{"event": "action", "seq": 195, "wall_ts_ms": 1789176745894, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0195", "position": {"x": 400.0, "y": -800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745894, "virtual_time_s": 2780.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 196, "wall_ts_ms": 1789176745895, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0196", "position": {"x": 400.0, "y": -800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745895, "virtual_time_s": 2786.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 197, "wall_ts_ms": 1789176745895, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0197", "position": {"x": 400.0, "y": -800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745895, "virtual_time_s": 2792.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 198, "wall_ts_ms": 1789176745896, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0198", "position": {"x": 400.0, "y": -800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745896, "virtual_time_s": 2798.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 199, "wall_ts_ms": 1789176745897, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0199", "position": {"x": 400.0, "y": -800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745897, "virtual_time_s": 2804.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 200, "wall_ts_ms": 1789176745897, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0200", "position": {"x": 400.0, "y": -800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745897, "virtual_time_s": 2810.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 201, "wall_ts_ms": 1789176745898, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0201", "position": {"x": 400.0, "y": -800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745898, "virtual_time_s": 2816.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 202, "wall_ts_ms": 1789176745899, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0202", "position": {"x": 400.0, "y": -800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745899, "virtual_time_s": 2822.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 203, "wall_ts_ms": 1789176745900, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0203", "position": {"x": 400.0, "y": -800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745900, "virtual_time_s": 2828.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 204, "wall_ts_ms": 1789176745900, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0204", "position": {"x": 400.0, "y": -800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745900, "virtual_time_s": 2834.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 205, "wall_ts_ms": 1789176745901, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0205", "position": {"x": 400.0, "y": -800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745901, "virtual_time_s": 2840.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 206, "wall_ts_ms": 1789176745901, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0206", "position": {"x": 400.0, "y": -800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745901, "virtual_time_s": 2846.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 207, "wall_ts_ms": 1789176745902, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0207", "position": {"x": 400.0, "y": -800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745902, "virtual_time_s": 2852.841434, "measure_result": "no_signal"}} +{"event": "action", "seq": 208, "wall_ts_ms": 1789176745903, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0208", "position": {"x": 0.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745903, "virtual_time_s": 2947.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 209, "wall_ts_ms": 1789176745903, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0209", "position": {"x": 0.0, "y": -1000.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745903, "virtual_time_s": 2953.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 210, "wall_ts_ms": 1789176745904, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0210", "position": {"x": 0.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745904, "virtual_time_s": 2959.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 211, "wall_ts_ms": 1789176745904, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0211", "position": {"x": 0.0, "y": -1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745904, "virtual_time_s": 2965.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 212, "wall_ts_ms": 1789176745905, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0212", "position": {"x": 0.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745905, "virtual_time_s": 2971.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 213, "wall_ts_ms": 1789176745906, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0213", "position": {"x": 0.0, "y": -1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745905, "virtual_time_s": 2977.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 214, "wall_ts_ms": 1789176745906, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0214", "position": {"x": 0.0, "y": -1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745906, "virtual_time_s": 2983.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 215, "wall_ts_ms": 1789176745907, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0215", "position": {"x": 0.0, "y": -1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745907, "virtual_time_s": 2989.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 216, "wall_ts_ms": 1789176745907, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0216", "position": {"x": 0.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745907, "virtual_time_s": 2995.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 217, "wall_ts_ms": 1789176745908, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0217", "position": {"x": 0.0, "y": -1000.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745908, "virtual_time_s": 3001.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 218, "wall_ts_ms": 1789176745909, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0218", "position": {"x": 0.0, "y": -1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745908, "virtual_time_s": 3007.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 219, "wall_ts_ms": 1789176745909, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0219", "position": {"x": 0.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745909, "virtual_time_s": 3013.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 220, "wall_ts_ms": 1789176745910, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0220", "position": {"x": 0.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745910, "virtual_time_s": 3019.284153, "measure_result": "no_signal"}} +{"event": "action", "seq": 221, "wall_ts_ms": 1789176745911, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0221", "position": {"x": -400.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745911, "virtual_time_s": 3203.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 222, "wall_ts_ms": 1789176745911, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0222", "position": {"x": -400.0, "y": -1800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745911, "virtual_time_s": 3209.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 223, "wall_ts_ms": 1789176745912, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0223", "position": {"x": -400.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745912, "virtual_time_s": 3215.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 224, "wall_ts_ms": 1789176745913, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0224", "position": {"x": -400.0, "y": -1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745913, "virtual_time_s": 3221.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 225, "wall_ts_ms": 1789176745913, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0225", "position": {"x": -400.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745913, "virtual_time_s": 3227.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 226, "wall_ts_ms": 1789176745914, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0226", "position": {"x": -400.0, "y": -1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745914, "virtual_time_s": 3233.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 227, "wall_ts_ms": 1789176745914, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0227", "position": {"x": -400.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745914, "virtual_time_s": 3239.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 228, "wall_ts_ms": 1789176745915, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0228", "position": {"x": -400.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745915, "virtual_time_s": 3245.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 229, "wall_ts_ms": 1789176745916, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0229", "position": {"x": -400.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745916, "virtual_time_s": 3251.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 230, "wall_ts_ms": 1789176745917, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0230", "position": {"x": -400.0, "y": -1800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745916, "virtual_time_s": 3257.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 231, "wall_ts_ms": 1789176745917, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0231", "position": {"x": -400.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745917, "virtual_time_s": 3263.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 232, "wall_ts_ms": 1789176745918, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0232", "position": {"x": -400.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745918, "virtual_time_s": 3269.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 233, "wall_ts_ms": 1789176745918, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0233", "position": {"x": -400.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745918, "virtual_time_s": 3275.169591, "measure_result": "no_signal"}} +{"event": "action", "seq": 234, "wall_ts_ms": 1789176745919, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0234", "position": {"x": -200.0, "y": -2200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745919, "virtual_time_s": 3369.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 235, "wall_ts_ms": 1789176745919, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0235", "position": {"x": -200.0, "y": -2200.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745919, "virtual_time_s": 3375.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 236, "wall_ts_ms": 1789176745920, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0236", "position": {"x": -200.0, "y": -2200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745920, "virtual_time_s": 3381.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 237, "wall_ts_ms": 1789176745921, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0237", "position": {"x": -200.0, "y": -2200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745921, "virtual_time_s": 3387.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 238, "wall_ts_ms": 1789176745921, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0238", "position": {"x": -200.0, "y": -2200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745921, "virtual_time_s": 3393.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 239, "wall_ts_ms": 1789176745922, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0239", "position": {"x": -200.0, "y": -2200.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745922, "virtual_time_s": 3399.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 240, "wall_ts_ms": 1789176745922, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0240", "position": {"x": -200.0, "y": -2200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745922, "virtual_time_s": 3405.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 241, "wall_ts_ms": 1789176745923, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0241", "position": {"x": -200.0, "y": -2200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745923, "virtual_time_s": 3411.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 242, "wall_ts_ms": 1789176745924, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0242", "position": {"x": -200.0, "y": -2200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745924, "virtual_time_s": 3417.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 243, "wall_ts_ms": 1789176745925, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0243", "position": {"x": -200.0, "y": -2200.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745925, "virtual_time_s": 3423.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 244, "wall_ts_ms": 1789176745925, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0244", "position": {"x": -200.0, "y": -2200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745925, "virtual_time_s": 3429.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 245, "wall_ts_ms": 1789176745926, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0245", "position": {"x": -200.0, "y": -2200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745926, "virtual_time_s": 3435.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 246, "wall_ts_ms": 1789176745926, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0246", "position": {"x": -200.0, "y": -2200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745926, "virtual_time_s": 3441.61231, "measure_result": "no_signal"}} +{"event": "action", "seq": 247, "wall_ts_ms": 1789176745927, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0247", "position": {"x": -1400.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745927, "virtual_time_s": 3699.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 248, "wall_ts_ms": 1789176745927, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0248", "position": {"x": -1400.0, "y": -1800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745927, "virtual_time_s": 3705.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 249, "wall_ts_ms": 1789176745928, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0249", "position": {"x": -1400.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745928, "virtual_time_s": 3711.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 250, "wall_ts_ms": 1789176745929, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0250", "position": {"x": -1400.0, "y": -1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745929, "virtual_time_s": 3717.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 251, "wall_ts_ms": 1789176745929, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0251", "position": {"x": -1400.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745929, "virtual_time_s": 3723.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 252, "wall_ts_ms": 1789176745930, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0252", "position": {"x": -1400.0, "y": -1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745930, "virtual_time_s": 3729.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 253, "wall_ts_ms": 1789176745930, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0253", "position": {"x": -1400.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745930, "virtual_time_s": 3735.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 254, "wall_ts_ms": 1789176745931, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0254", "position": {"x": -1400.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745931, "virtual_time_s": 3741.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 255, "wall_ts_ms": 1789176745932, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0255", "position": {"x": -1400.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745932, "virtual_time_s": 3747.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 256, "wall_ts_ms": 1789176745933, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0256", "position": {"x": -1400.0, "y": -1800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745933, "virtual_time_s": 3753.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 257, "wall_ts_ms": 1789176745933, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0257", "position": {"x": -1400.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745933, "virtual_time_s": 3759.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 258, "wall_ts_ms": 1789176745934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0258", "position": {"x": -1400.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745934, "virtual_time_s": 3765.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 259, "wall_ts_ms": 1789176745934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0259", "position": {"x": -1400.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745934, "virtual_time_s": 3771.594523, "measure_result": "no_signal"}} +{"event": "action", "seq": 260, "wall_ts_ms": 1789176745935, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0260", "position": {"x": -1800.0, "y": -800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745935, "virtual_time_s": 3992.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 261, "wall_ts_ms": 1789176745936, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0261", "position": {"x": -1800.0, "y": -800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745936, "virtual_time_s": 3998.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 262, "wall_ts_ms": 1789176745936, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0262", "position": {"x": -1800.0, "y": -800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745936, "virtual_time_s": 4004.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 263, "wall_ts_ms": 1789176745937, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0263", "position": {"x": -1800.0, "y": -800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745937, "virtual_time_s": 4010.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 264, "wall_ts_ms": 1789176745938, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0264", "position": {"x": -1800.0, "y": -800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745938, "virtual_time_s": 4016.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 265, "wall_ts_ms": 1789176745938, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0265", "position": {"x": -1800.0, "y": -800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745938, "virtual_time_s": 4022.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 266, "wall_ts_ms": 1789176745939, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0266", "position": {"x": -1800.0, "y": -800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745939, "virtual_time_s": 4028.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 267, "wall_ts_ms": 1789176745940, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0267", "position": {"x": -1800.0, "y": -800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745939, "virtual_time_s": 4034.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 268, "wall_ts_ms": 1789176745941, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0268", "position": {"x": -1800.0, "y": -800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745941, "virtual_time_s": 4040.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 269, "wall_ts_ms": 1789176745941, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0269", "position": {"x": -1800.0, "y": -800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745941, "virtual_time_s": 4046.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 270, "wall_ts_ms": 1789176745942, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0270", "position": {"x": -1800.0, "y": -800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745942, "virtual_time_s": 4052.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 271, "wall_ts_ms": 1789176745943, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0271", "position": {"x": -1800.0, "y": -800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745943, "virtual_time_s": 4058.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 272, "wall_ts_ms": 1789176745943, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0272", "position": {"x": -1800.0, "y": -800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745943, "virtual_time_s": 4064.001115, "measure_result": "no_signal"}} +{"event": "action", "seq": 273, "wall_ts_ms": 1789176745944, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0273", "position": {"x": -2000.0, "y": -400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745944, "virtual_time_s": 4158.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 274, "wall_ts_ms": 1789176745945, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0274", "position": {"x": -2000.0, "y": -400.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745945, "virtual_time_s": 4164.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 275, "wall_ts_ms": 1789176745945, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0275", "position": {"x": -2000.0, "y": -400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745945, "virtual_time_s": 4170.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 276, "wall_ts_ms": 1789176745946, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0276", "position": {"x": -2000.0, "y": -400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745946, "virtual_time_s": 4176.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 277, "wall_ts_ms": 1789176745947, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0277", "position": {"x": -2000.0, "y": -400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745947, "virtual_time_s": 4182.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 278, "wall_ts_ms": 1789176745947, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0278", "position": {"x": -2000.0, "y": -400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745947, "virtual_time_s": 4188.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 279, "wall_ts_ms": 1789176745948, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0279", "position": {"x": -2000.0, "y": -400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745948, "virtual_time_s": 4194.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 280, "wall_ts_ms": 1789176745949, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0280", "position": {"x": -2000.0, "y": -400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745949, "virtual_time_s": 4200.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 281, "wall_ts_ms": 1789176745950, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0281", "position": {"x": -2000.0, "y": -400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745950, "virtual_time_s": 4206.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 282, "wall_ts_ms": 1789176745950, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0282", "position": {"x": -2000.0, "y": -400.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745950, "virtual_time_s": 4212.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 283, "wall_ts_ms": 1789176745951, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0283", "position": {"x": -2000.0, "y": -400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745951, "virtual_time_s": 4218.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 284, "wall_ts_ms": 1789176745951, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0284", "position": {"x": -2000.0, "y": -400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745951, "virtual_time_s": 4224.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 285, "wall_ts_ms": 1789176745952, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0285", "position": {"x": -2000.0, "y": -400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745952, "virtual_time_s": 4230.443834, "measure_result": "no_signal"}} +{"event": "action", "seq": 286, "wall_ts_ms": 1789176745953, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0286", "position": {"x": -1800.0, "y": 200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176745953, "virtual_time_s": 4361.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 287, "wall_ts_ms": 1789176745953, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0287", "position": {"x": -1800.0, "y": 200.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176745953, "virtual_time_s": 4367.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 288, "wall_ts_ms": 1789176745954, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0288", "position": {"x": -1800.0, "y": 200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176745954, "virtual_time_s": 4373.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 289, "wall_ts_ms": 1789176745954, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0289", "position": {"x": -1800.0, "y": 200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176745954, "virtual_time_s": 4379.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 290, "wall_ts_ms": 1789176745955, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0290", "position": {"x": -1800.0, "y": 200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176745955, "virtual_time_s": 4385.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 291, "wall_ts_ms": 1789176745955, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0291", "position": {"x": -1800.0, "y": 200.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176745955, "virtual_time_s": 4391.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 292, "wall_ts_ms": 1789176745956, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0292", "position": {"x": -1800.0, "y": 200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176745956, "virtual_time_s": 4397.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 293, "wall_ts_ms": 1789176745956, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0293", "position": {"x": -1800.0, "y": 200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176745956, "virtual_time_s": 4403.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 294, "wall_ts_ms": 1789176745957, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0294", "position": {"x": -1800.0, "y": 200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176745957, "virtual_time_s": 4409.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 295, "wall_ts_ms": 1789176745958, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0295", "position": {"x": -1800.0, "y": 200.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176745958, "virtual_time_s": 4415.93494, "measure_result": "direction", "svd_deg": 42.21}} +{"event": "action", "seq": 296, "wall_ts_ms": 1789176745986, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0296", "position": {"x": -1800.0, "y": 200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176745986, "virtual_time_s": 4421.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 297, "wall_ts_ms": 1789176745987, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0297", "position": {"x": -1800.0, "y": 200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176745987, "virtual_time_s": 4427.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 298, "wall_ts_ms": 1789176745988, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0298", "position": {"x": -1800.0, "y": 200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176745988, "virtual_time_s": 4433.93494, "measure_result": "no_signal"}} +{"event": "action", "seq": 299, "wall_ts_ms": 1789176746116, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0299", "position": {"x": -1763.0819823064817, "y": 184.7511178772495}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746116, "virtual_time_s": 4447.923603, "measure_result": "direction", "svd_deg": 43.12}} +{"event": "action", "seq": 300, "wall_ts_ms": 1789176746192, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0300", "position": {"x": -1389.2897139679978, "y": 528.1101586693555}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746192, "virtual_time_s": 4554.435394, "measure_result": "direction", "svd_deg": 45.84}} +{"event": "action", "seq": 301, "wall_ts_ms": 1789176746255, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0301", "position": {"x": -1351.2174928311083, "y": 570.8679541030758}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746255, "virtual_time_s": 4570.885675, "measure_result": "direction", "svd_deg": 46.07}} +{"event": "action", "seq": 302, "wall_ts_ms": 1789176746289, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0302", "position": {"x": -1293.8099551051155, "y": 631.8918912080569}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746289, "virtual_time_s": 4592.642222, "measure_result": "direction", "svd_deg": 43.99}} +{"event": "action", "seq": 303, "wall_ts_ms": 1789176746320, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0303", "position": {"x": -1267.7391838416484, "y": 656.6153146769659}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746320, "virtual_time_s": 4604.828133, "measure_result": "direction", "svd_deg": 45.72}} +{"event": "action", "seq": 304, "wall_ts_ms": 1789176746353, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0304", "position": {"x": -1267.7391838416484, "y": 656.6153146769659}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746353, "virtual_time_s": 4609.828133, "measure_result": "direction", "svd_deg": 45.72}} +{"event": "action", "seq": 305, "wall_ts_ms": 1789176746386, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0305", "position": {"x": -1267.7391838416484, "y": 656.6153146769659}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746386, "virtual_time_s": 4614.828133, "measure_result": "direction", "svd_deg": 45.72}} +{"event": "action", "seq": 306, "wall_ts_ms": 1789176746419, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0306", "position": {"x": -1267.7391838416484, "y": 656.6153146769659}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746419, "virtual_time_s": 4619.828133, "measure_result": "direction", "svd_deg": 45.72}} +{"event": "action", "seq": 307, "wall_ts_ms": 1789176746421, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0307", "position": {"x": -1210.0, "y": 730.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746421, "virtual_time_s": 4641.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 308, "wall_ts_ms": 1789176746422, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0308", "position": {"x": -1190.0, "y": 730.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746422, "virtual_time_s": 4648.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 309, "wall_ts_ms": 1789176746422, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0309", "position": {"x": -1190.0, "y": 750.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746422, "virtual_time_s": 4655.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 310, "wall_ts_ms": 1789176746423, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0310", "position": {"x": -1170.0, "y": 750.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746423, "virtual_time_s": 4662.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 311, "wall_ts_ms": 1789176746424, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0311", "position": {"x": -1170.0, "y": 770.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746424, "virtual_time_s": 4669.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 312, "wall_ts_ms": 1789176746424, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0312", "position": {"x": -1150.0, "y": 770.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746424, "virtual_time_s": 4676.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 313, "wall_ts_ms": 1789176746425, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0313", "position": {"x": -1150.0, "y": 790.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746425, "virtual_time_s": 4683.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 314, "wall_ts_ms": 1789176746425, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0314", "position": {"x": -1130.0, "y": 790.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746425, "virtual_time_s": 4690.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 315, "wall_ts_ms": 1789176746426, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0315", "position": {"x": -1130.0, "y": 810.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746426, "virtual_time_s": 4697.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 316, "wall_ts_ms": 1789176746426, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0316", "position": {"x": -1110.0, "y": 810.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746426, "virtual_time_s": 4704.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 317, "wall_ts_ms": 1789176746427, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0317", "position": {"x": -1110.0, "y": 830.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746427, "virtual_time_s": 4711.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 318, "wall_ts_ms": 1789176746427, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0318", "position": {"x": -1090.0, "y": 830.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746427, "virtual_time_s": 4718.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 319, "wall_ts_ms": 1789176746428, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0319", "position": {"x": -1090.0, "y": 850.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746428, "virtual_time_s": 4725.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 320, "wall_ts_ms": 1789176746428, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0320", "position": {"x": -1070.0, "y": 850.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746428, "virtual_time_s": 4732.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 321, "wall_ts_ms": 1789176746429, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0321", "position": {"x": -1070.0, "y": 870.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746429, "virtual_time_s": 4739.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 322, "wall_ts_ms": 1789176746429, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0322", "position": {"x": -1050.0, "y": 870.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746429, "virtual_time_s": 4746.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 323, "wall_ts_ms": 1789176746430, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0323", "position": {"x": -1050.0, "y": 890.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746430, "virtual_time_s": 4753.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 324, "wall_ts_ms": 1789176746431, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0324", "position": {"x": -1030.0, "y": 890.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746431, "virtual_time_s": 4760.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 325, "wall_ts_ms": 1789176746431, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0325", "position": {"x": -1030.0, "y": 910.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746431, "virtual_time_s": 4767.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 326, "wall_ts_ms": 1789176746432, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0326", "position": {"x": -1010.0, "y": 910.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746432, "virtual_time_s": 4774.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 327, "wall_ts_ms": 1789176746433, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0327", "position": {"x": -1010.0, "y": 930.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746433, "virtual_time_s": 4781.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 328, "wall_ts_ms": 1789176746433, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0328", "position": {"x": -990.0, "y": 930.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746433, "virtual_time_s": 4788.503384, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 329, "wall_ts_ms": 1789176746434, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0329", "position": {"x": -990.0, "y": 950.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176746434, "virtual_time_s": 4797.503384, "clear_result": "success"}} +{"event": "action", "seq": 330, "wall_ts_ms": 1789176746434, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0330", "position": {"x": -1000.0, "y": 1000.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176746434, "virtual_time_s": 4813.701423, "measure_result": "direction", "svd_deg": 352.01}} +{"event": "action", "seq": 331, "wall_ts_ms": 1789176746463, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0331", "position": {"x": -1000.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746463, "virtual_time_s": 4819.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 332, "wall_ts_ms": 1789176746464, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0332", "position": {"x": -1000.0, "y": 1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746464, "virtual_time_s": 4825.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 333, "wall_ts_ms": 1789176746464, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0333", "position": {"x": -1000.0, "y": 1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746464, "virtual_time_s": 4831.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 334, "wall_ts_ms": 1789176746465, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0334", "position": {"x": -1000.0, "y": 1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746465, "virtual_time_s": 4837.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 335, "wall_ts_ms": 1789176746465, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0335", "position": {"x": -1000.0, "y": 1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746465, "virtual_time_s": 4843.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 336, "wall_ts_ms": 1789176746466, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0336", "position": {"x": -1000.0, "y": 1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746466, "virtual_time_s": 4849.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 337, "wall_ts_ms": 1789176746466, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0337", "position": {"x": -1000.0, "y": 1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746466, "virtual_time_s": 4855.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 338, "wall_ts_ms": 1789176746467, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0338", "position": {"x": -1000.0, "y": 1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746467, "virtual_time_s": 4861.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 339, "wall_ts_ms": 1789176746467, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0339", "position": {"x": -1000.0, "y": 1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746467, "virtual_time_s": 4867.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 340, "wall_ts_ms": 1789176746468, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0340", "position": {"x": -1000.0, "y": 1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746468, "virtual_time_s": 4873.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 341, "wall_ts_ms": 1789176746468, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0341", "position": {"x": -1000.0, "y": 1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746468, "virtual_time_s": 4879.701423, "measure_result": "no_signal"}} +{"event": "action", "seq": 342, "wall_ts_ms": 1789176746580, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0342", "position": {"x": -1007.2274998149326, "y": 896.1201622259241}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176746580, "virtual_time_s": 4906.527616, "measure_result": "direction", "svd_deg": 2.83}} +{"event": "action", "seq": 343, "wall_ts_ms": 1789176746605, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0343", "position": {"x": -594.4281117361534, "y": 922.5533845877621}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176746605, "virtual_time_s": 4994.256583, "measure_result": "direction", "svd_deg": 359.76}} +{"event": "action", "seq": 344, "wall_ts_ms": 1789176746633, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0344", "position": {"x": -564.4823014109752, "y": 920.6633195049048}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176746633, "virtual_time_s": 5005.257663, "measure_result": "direction", "svd_deg": 0.06}} +{"event": "action", "seq": 345, "wall_ts_ms": 1789176746654, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0345", "position": {"x": -550.014263279546, "y": 919.749366674575}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176746654, "virtual_time_s": 5013.157038, "measure_result": "direction", "svd_deg": 3.33}} +{"event": "action", "seq": 346, "wall_ts_ms": 1789176746656, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0346", "position": {"x": -500.9902007989175, "y": 921.8436311504328}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176746656, "virtual_time_s": 5027.970793, "clear_result": "success"}} +{"event": "action", "seq": 347, "wall_ts_ms": 1789176746656, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0347", "position": {"x": 0.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746656, "virtual_time_s": 5135.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 348, "wall_ts_ms": 1789176746657, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0348", "position": {"x": 0.0, "y": 1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746657, "virtual_time_s": 5141.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 349, "wall_ts_ms": 1789176746658, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0349", "position": {"x": 0.0, "y": 1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746658, "virtual_time_s": 5147.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 350, "wall_ts_ms": 1789176746658, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0350", "position": {"x": 0.0, "y": 1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746658, "virtual_time_s": 5153.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 351, "wall_ts_ms": 1789176746659, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0351", "position": {"x": 0.0, "y": 1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746659, "virtual_time_s": 5159.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 352, "wall_ts_ms": 1789176746660, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0352", "position": {"x": 0.0, "y": 1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746660, "virtual_time_s": 5165.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 353, "wall_ts_ms": 1789176746661, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0353", "position": {"x": 0.0, "y": 1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746661, "virtual_time_s": 5171.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 354, "wall_ts_ms": 1789176746662, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0354", "position": {"x": 0.0, "y": 1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746662, "virtual_time_s": 5177.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 355, "wall_ts_ms": 1789176746663, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0355", "position": {"x": 0.0, "y": 1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746663, "virtual_time_s": 5183.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 356, "wall_ts_ms": 1789176746664, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0356", "position": {"x": 0.0, "y": 1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746664, "virtual_time_s": 5189.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 357, "wall_ts_ms": 1789176746667, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0357", "position": {"x": 0.0, "y": 1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746667, "virtual_time_s": 5195.380773, "measure_result": "no_signal"}} +{"event": "action", "seq": 358, "wall_ts_ms": 1789176746667, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0358", "position": {"x": -200.0, "y": 400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746667, "virtual_time_s": 5326.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 359, "wall_ts_ms": 1789176746668, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0359", "position": {"x": -200.0, "y": 400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746668, "virtual_time_s": 5332.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 360, "wall_ts_ms": 1789176746669, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0360", "position": {"x": -200.0, "y": 400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746669, "virtual_time_s": 5338.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 361, "wall_ts_ms": 1789176746669, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0361", "position": {"x": -200.0, "y": 400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746669, "virtual_time_s": 5344.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 362, "wall_ts_ms": 1789176746670, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0362", "position": {"x": -200.0, "y": 400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746670, "virtual_time_s": 5350.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 363, "wall_ts_ms": 1789176746671, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0363", "position": {"x": -200.0, "y": 400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746671, "virtual_time_s": 5356.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 364, "wall_ts_ms": 1789176746671, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0364", "position": {"x": -200.0, "y": 400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746671, "virtual_time_s": 5362.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 365, "wall_ts_ms": 1789176746672, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0365", "position": {"x": -200.0, "y": 400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746672, "virtual_time_s": 5368.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 366, "wall_ts_ms": 1789176746673, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0366", "position": {"x": -200.0, "y": 400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746673, "virtual_time_s": 5374.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 367, "wall_ts_ms": 1789176746673, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0367", "position": {"x": -200.0, "y": 400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746673, "virtual_time_s": 5380.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 368, "wall_ts_ms": 1789176746674, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0368", "position": {"x": -200.0, "y": 400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746674, "virtual_time_s": 5386.871879, "measure_result": "no_signal"}} +{"event": "action", "seq": 369, "wall_ts_ms": 1789176746674, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0369", "position": {"x": -800.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746674, "virtual_time_s": 5536.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 370, "wall_ts_ms": 1789176746675, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0370", "position": {"x": -800.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746675, "virtual_time_s": 5542.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 371, "wall_ts_ms": 1789176746675, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0371", "position": {"x": -800.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746675, "virtual_time_s": 5548.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 372, "wall_ts_ms": 1789176746676, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0372", "position": {"x": -800.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746676, "virtual_time_s": 5554.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 373, "wall_ts_ms": 1789176746677, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0373", "position": {"x": -800.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746677, "virtual_time_s": 5560.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 374, "wall_ts_ms": 1789176746677, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0374", "position": {"x": -800.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746677, "virtual_time_s": 5566.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 375, "wall_ts_ms": 1789176746678, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0375", "position": {"x": -800.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746678, "virtual_time_s": 5572.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 376, "wall_ts_ms": 1789176746678, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0376", "position": {"x": -800.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746678, "virtual_time_s": 5578.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 377, "wall_ts_ms": 1789176746679, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0377", "position": {"x": -800.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746679, "virtual_time_s": 5584.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 378, "wall_ts_ms": 1789176746679, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0378", "position": {"x": -800.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746679, "virtual_time_s": 5590.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 379, "wall_ts_ms": 1789176746680, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0379", "position": {"x": -800.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746680, "virtual_time_s": 5596.09393, "measure_result": "no_signal"}} +{"event": "action", "seq": 380, "wall_ts_ms": 1789176746681, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0380", "position": {"x": -1200.0, "y": 800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746681, "virtual_time_s": 5779.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 381, "wall_ts_ms": 1789176746681, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0381", "position": {"x": -1200.0, "y": 800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746681, "virtual_time_s": 5785.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 382, "wall_ts_ms": 1789176746682, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0382", "position": {"x": -1200.0, "y": 800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746682, "virtual_time_s": 5791.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 383, "wall_ts_ms": 1789176746682, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0383", "position": {"x": -1200.0, "y": 800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746682, "virtual_time_s": 5797.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 384, "wall_ts_ms": 1789176746683, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0384", "position": {"x": -1200.0, "y": 800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746683, "virtual_time_s": 5803.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 385, "wall_ts_ms": 1789176746683, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0385", "position": {"x": -1200.0, "y": 800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746683, "virtual_time_s": 5809.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 386, "wall_ts_ms": 1789176746684, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0386", "position": {"x": -1200.0, "y": 800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746684, "virtual_time_s": 5815.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 387, "wall_ts_ms": 1789176746684, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0387", "position": {"x": -1200.0, "y": 800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746684, "virtual_time_s": 5821.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 388, "wall_ts_ms": 1789176746685, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0388", "position": {"x": -1200.0, "y": 800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746685, "virtual_time_s": 5827.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 389, "wall_ts_ms": 1789176746685, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0389", "position": {"x": -1200.0, "y": 800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746685, "virtual_time_s": 5833.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 390, "wall_ts_ms": 1789176746686, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0390", "position": {"x": -1200.0, "y": 800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746686, "virtual_time_s": 5839.979368, "measure_result": "no_signal"}} +{"event": "action", "seq": 391, "wall_ts_ms": 1789176746687, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0391", "position": {"x": -1400.0, "y": 1400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746687, "virtual_time_s": 5971.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 392, "wall_ts_ms": 1789176746687, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0392", "position": {"x": -1400.0, "y": 1400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746687, "virtual_time_s": 5977.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 393, "wall_ts_ms": 1789176746688, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0393", "position": {"x": -1400.0, "y": 1400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746688, "virtual_time_s": 5983.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 394, "wall_ts_ms": 1789176746688, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0394", "position": {"x": -1400.0, "y": 1400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746688, "virtual_time_s": 5989.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 395, "wall_ts_ms": 1789176746689, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0395", "position": {"x": -1400.0, "y": 1400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746689, "virtual_time_s": 5995.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 396, "wall_ts_ms": 1789176746689, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0396", "position": {"x": -1400.0, "y": 1400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746689, "virtual_time_s": 6001.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 397, "wall_ts_ms": 1789176746690, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0397", "position": {"x": -1400.0, "y": 1400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746690, "virtual_time_s": 6007.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 398, "wall_ts_ms": 1789176746690, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0398", "position": {"x": -1400.0, "y": 1400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746690, "virtual_time_s": 6013.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 399, "wall_ts_ms": 1789176746691, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0399", "position": {"x": -1400.0, "y": 1400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746691, "virtual_time_s": 6019.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 400, "wall_ts_ms": 1789176746691, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0400", "position": {"x": -1400.0, "y": 1400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746691, "virtual_time_s": 6025.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 401, "wall_ts_ms": 1789176746692, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0401", "position": {"x": -1400.0, "y": 1400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746692, "virtual_time_s": 6031.470474, "measure_result": "no_signal"}} +{"event": "action", "seq": 402, "wall_ts_ms": 1789176746692, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0402", "position": {"x": -1200.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746692, "virtual_time_s": 6125.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 403, "wall_ts_ms": 1789176746693, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0403", "position": {"x": -1200.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746693, "virtual_time_s": 6131.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 404, "wall_ts_ms": 1789176746693, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0404", "position": {"x": -1200.0, "y": 1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746693, "virtual_time_s": 6137.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 405, "wall_ts_ms": 1789176746694, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0405", "position": {"x": -1200.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746694, "virtual_time_s": 6143.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 406, "wall_ts_ms": 1789176746694, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0406", "position": {"x": -1200.0, "y": 1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746694, "virtual_time_s": 6149.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 407, "wall_ts_ms": 1789176746695, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0407", "position": {"x": -1200.0, "y": 1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746695, "virtual_time_s": 6155.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 408, "wall_ts_ms": 1789176746696, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0408", "position": {"x": -1200.0, "y": 1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746696, "virtual_time_s": 6161.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 409, "wall_ts_ms": 1789176746696, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0409", "position": {"x": -1200.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746696, "virtual_time_s": 6167.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 410, "wall_ts_ms": 1789176746697, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0410", "position": {"x": -1200.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746697, "virtual_time_s": 6173.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 411, "wall_ts_ms": 1789176746697, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0411", "position": {"x": -1200.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746697, "virtual_time_s": 6179.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 412, "wall_ts_ms": 1789176746698, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0412", "position": {"x": -1200.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746698, "virtual_time_s": 6185.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 413, "wall_ts_ms": 1789176746698, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0413", "position": {"x": -200.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746698, "virtual_time_s": 6390.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 414, "wall_ts_ms": 1789176746699, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0414", "position": {"x": -200.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746699, "virtual_time_s": 6396.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 415, "wall_ts_ms": 1789176746699, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0415", "position": {"x": -200.0, "y": 1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746699, "virtual_time_s": 6402.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 416, "wall_ts_ms": 1789176746700, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0416", "position": {"x": -200.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746700, "virtual_time_s": 6408.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 417, "wall_ts_ms": 1789176746700, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0417", "position": {"x": -200.0, "y": 1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746700, "virtual_time_s": 6414.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 418, "wall_ts_ms": 1789176746701, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0418", "position": {"x": -200.0, "y": 1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746701, "virtual_time_s": 6420.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 419, "wall_ts_ms": 1789176746701, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0419", "position": {"x": -200.0, "y": 1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746701, "virtual_time_s": 6426.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 420, "wall_ts_ms": 1789176746702, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0420", "position": {"x": -200.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746702, "virtual_time_s": 6432.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 421, "wall_ts_ms": 1789176746702, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0421", "position": {"x": -200.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746702, "virtual_time_s": 6438.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 422, "wall_ts_ms": 1789176746703, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0422", "position": {"x": -200.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746703, "virtual_time_s": 6444.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 423, "wall_ts_ms": 1789176746703, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0423", "position": {"x": -200.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746703, "virtual_time_s": 6450.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 424, "wall_ts_ms": 1789176746704, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0424", "position": {"x": 400.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746704, "virtual_time_s": 6575.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 425, "wall_ts_ms": 1789176746704, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0425", "position": {"x": 400.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746704, "virtual_time_s": 6581.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 426, "wall_ts_ms": 1789176746705, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0426", "position": {"x": 400.0, "y": 1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746705, "virtual_time_s": 6587.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 427, "wall_ts_ms": 1789176746706, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0427", "position": {"x": 400.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746706, "virtual_time_s": 6593.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 428, "wall_ts_ms": 1789176746706, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0428", "position": {"x": 400.0, "y": 1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746706, "virtual_time_s": 6599.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 429, "wall_ts_ms": 1789176746707, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0429", "position": {"x": 400.0, "y": 1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746707, "virtual_time_s": 6605.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 430, "wall_ts_ms": 1789176746708, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0430", "position": {"x": 400.0, "y": 1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746708, "virtual_time_s": 6611.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 431, "wall_ts_ms": 1789176746709, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0431", "position": {"x": 400.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746709, "virtual_time_s": 6617.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 432, "wall_ts_ms": 1789176746710, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0432", "position": {"x": 400.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746710, "virtual_time_s": 6623.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 433, "wall_ts_ms": 1789176746711, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0433", "position": {"x": 400.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746711, "virtual_time_s": 6629.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 434, "wall_ts_ms": 1789176746711, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0434", "position": {"x": 400.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746711, "virtual_time_s": 6635.913193, "measure_result": "no_signal"}} +{"event": "action", "seq": 435, "wall_ts_ms": 1789176746712, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0435", "position": {"x": 1200.0, "y": 1600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176746712, "virtual_time_s": 6805.837418, "measure_result": "no_signal"}} +{"event": "action", "seq": 436, "wall_ts_ms": 1789176746712, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0436", "position": {"x": 1200.0, "y": 1600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176746712, "virtual_time_s": 6811.837418, "measure_result": "no_signal"}} +{"event": "action", "seq": 437, "wall_ts_ms": 1789176746713, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0437", "position": {"x": 1200.0, "y": 1600.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176746713, "virtual_time_s": 6817.837418, "measure_result": "no_signal"}} +{"event": "action", "seq": 438, "wall_ts_ms": 1789176746713, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0438", "position": {"x": 1200.0, "y": 1600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176746713, "virtual_time_s": 6823.837418, "measure_result": "no_signal"}} +{"event": "action", "seq": 439, "wall_ts_ms": 1789176746714, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0439", "position": {"x": 1200.0, "y": 1600.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176746714, "virtual_time_s": 6829.837418, "measure_result": "no_signal"}} +{"event": "action", "seq": 440, "wall_ts_ms": 1789176746714, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0440", "position": {"x": 1200.0, "y": 1600.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176746714, "virtual_time_s": 6835.837418, "measure_result": "no_signal"}} +{"event": "action", "seq": 441, "wall_ts_ms": 1789176746715, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0441", "position": {"x": 1200.0, "y": 1600.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176746715, "virtual_time_s": 6841.837418, "measure_result": "no_signal"}} +{"event": "action", "seq": 442, "wall_ts_ms": 1789176746716, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0442", "position": {"x": 1200.0, "y": 1600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746716, "virtual_time_s": 6847.837418, "measure_result": "direction", "svd_deg": 281.22}} +{"event": "action", "seq": 443, "wall_ts_ms": 1789176746743, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0443", "position": {"x": 1200.0, "y": 1600.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176746743, "virtual_time_s": 6853.837418, "measure_result": "no_signal"}} +{"event": "action", "seq": 444, "wall_ts_ms": 1789176746743, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0444", "position": {"x": 1200.0, "y": 1600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176746743, "virtual_time_s": 6859.837418, "measure_result": "direction", "svd_deg": 286.65}} +{"event": "action", "seq": 445, "wall_ts_ms": 1789176746771, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0445", "position": {"x": 1200.0, "y": 1600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176746771, "virtual_time_s": 6865.837418, "measure_result": "no_signal"}} +{"event": "action", "seq": 446, "wall_ts_ms": 1789176746870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0446", "position": {"x": 1376.9183394605325, "y": 1598.4618226024536}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746870, "virtual_time_s": 6907.222423, "measure_result": "direction", "svd_deg": 268.73}} +{"event": "action", "seq": 447, "wall_ts_ms": 1789176746895, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0447", "position": {"x": 1361.0274758841142, "y": 977.2163838723077}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746895, "virtual_time_s": 7036.512151, "measure_result": "direction", "svd_deg": 269.37}} +{"event": "action", "seq": 448, "wall_ts_ms": 1789176746914, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0448", "position": {"x": 1360.4285069307975, "y": 914.5146047789754}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746914, "virtual_time_s": 7054.053079, "measure_result": "direction", "svd_deg": 269.45}} +{"event": "action", "seq": 449, "wall_ts_ms": 1789176746932, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0449", "position": {"x": 1360.616258629032, "y": 907.0437018395313}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746932, "virtual_time_s": 7060.547731, "measure_result": "direction", "svd_deg": 269.56}} +{"event": "action", "seq": 450, "wall_ts_ms": 1789176746949, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0450", "position": {"x": 1360.8267706096776, "y": 904.6094986372296}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746949, "virtual_time_s": 7066.036389, "measure_result": "direction", "svd_deg": 268.57}} +{"event": "action", "seq": 451, "wall_ts_ms": 1789176746966, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0451", "position": {"x": 1359.473062458676, "y": 900.8377878197774}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746966, "virtual_time_s": 7071.837846, "measure_result": "direction", "svd_deg": 269.02}} +{"event": "action", "seq": 452, "wall_ts_ms": 1789176746982, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0452", "position": {"x": 1359.4561615203038, "y": 899.1627785108348}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746982, "virtual_time_s": 7077.172865, "measure_result": "direction", "svd_deg": 269.01}} +{"event": "action", "seq": 453, "wall_ts_ms": 1789176746999, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0453", "position": {"x": 1359.4442600587033, "y": 897.9832580766667}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176746999, "virtual_time_s": 7082.408781, "measure_result": "direction", "svd_deg": 269.95}} +{"event": "action", "seq": 454, "wall_ts_ms": 1789176747000, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0454", "position": {"x": 1350.0, "y": 870.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176747000, "virtual_time_s": 7091.31558, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 455, "wall_ts_ms": 1789176747000, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0455", "position": {"x": 1350.0, "y": 850.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176747000, "virtual_time_s": 7098.31558, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 456, "wall_ts_ms": 1789176747001, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0456", "position": {"x": 1350.0, "y": 830.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176747001, "virtual_time_s": 7105.31558, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 457, "wall_ts_ms": 1789176747002, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0457", "position": {"x": 1350.0, "y": 810.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176747002, "virtual_time_s": 7112.31558, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 458, "wall_ts_ms": 1789176747002, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0458", "position": {"x": 1350.0, "y": 790.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176747002, "virtual_time_s": 7119.31558, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 459, "wall_ts_ms": 1789176747003, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0459", "position": {"x": 1350.0, "y": 770.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176747003, "virtual_time_s": 7128.31558, "clear_result": "success"}} +{"event": "action", "seq": 460, "wall_ts_ms": 1789176747102, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0460", "position": {"x": 1267.751589068303, "y": 905.6407266151634}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176747102, "virtual_time_s": 7166.04141, "measure_result": "direction", "svd_deg": 71.8}} +{"event": "action", "seq": 461, "wall_ts_ms": 1789176747117, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0461", "position": {"x": 1317.933528813386, "y": 1105.8121429791947}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176747117, "virtual_time_s": 7212.31456, "measure_result": "direction", "svd_deg": 22.95}} +{"event": "action", "seq": 462, "wall_ts_ms": 1789176747118, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0462", "position": {"x": 1338.6900103764715, "y": 1114.6535341814697}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176747118, "virtual_time_s": 7221.826773, "clear_result": "success"}} +{"event": "action", "seq": 463, "wall_ts_ms": 1789176747119, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0463", "position": {"x": 1000.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176747119, "virtual_time_s": 7299.340787, "measure_result": "no_signal"}} +{"event": "action", "seq": 464, "wall_ts_ms": 1789176747120, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0464", "position": {"x": 1000.0, "y": 1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747120, "virtual_time_s": 7305.340787, "measure_result": "direction", "svd_deg": 307.65}} +{"event": "action", "seq": 465, "wall_ts_ms": 1789176747151, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0465", "position": {"x": 1000.0, "y": 1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176747151, "virtual_time_s": 7311.340787, "measure_result": "no_signal"}} +{"event": "action", "seq": 466, "wall_ts_ms": 1789176747152, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0466", "position": {"x": 1000.0, "y": 1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176747152, "virtual_time_s": 7317.340787, "measure_result": "no_signal"}} +{"event": "action", "seq": 467, "wall_ts_ms": 1789176747153, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0467", "position": {"x": 1000.0, "y": 1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176747153, "virtual_time_s": 7323.340787, "measure_result": "no_signal"}} +{"event": "action", "seq": 468, "wall_ts_ms": 1789176747153, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0468", "position": {"x": 1000.0, "y": 1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176747153, "virtual_time_s": 7329.340787, "measure_result": "no_signal"}} +{"event": "action", "seq": 469, "wall_ts_ms": 1789176747154, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0469", "position": {"x": 1000.0, "y": 1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176747154, "virtual_time_s": 7335.340787, "measure_result": "no_signal"}} +{"event": "action", "seq": 470, "wall_ts_ms": 1789176747154, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0470", "position": {"x": 1000.0, "y": 1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176747154, "virtual_time_s": 7341.340787, "measure_result": "no_signal"}} +{"event": "action", "seq": 471, "wall_ts_ms": 1789176747155, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0471", "position": {"x": 1000.0, "y": 1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176747155, "virtual_time_s": 7347.340787, "measure_result": "no_signal"}} +{"event": "action", "seq": 472, "wall_ts_ms": 1789176747255, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0472", "position": {"x": 926.2448542889847, "y": 936.2857052701793}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747255, "virtual_time_s": 7372.833691, "measure_result": "direction", "svd_deg": 313.86}} +{"event": "action", "seq": 473, "wall_ts_ms": 1789176747307, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0473", "position": {"x": 1281.7263770791885, "y": 545.6716560307773}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747307, "virtual_time_s": 7483.464453, "measure_result": "direction", "svd_deg": 316.07}} +{"event": "action", "seq": 474, "wall_ts_ms": 1789176747337, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0474", "position": {"x": 1404.2733501305574, "y": 429.96480985903656}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747337, "virtual_time_s": 7522.172514, "measure_result": "direction", "svd_deg": 316.97}} +{"event": "action", "seq": 475, "wall_ts_ms": 1789176747359, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0475", "position": {"x": 1422.849787772556, "y": 418.12719651105397}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747359, "virtual_time_s": 7531.578025, "measure_result": "direction", "svd_deg": 314.3}} +{"event": "action", "seq": 476, "wall_ts_ms": 1789176747386, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0476", "position": {"x": 1422.849787772556, "y": 418.12719651105397}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747386, "virtual_time_s": 7536.578025, "measure_result": "direction", "svd_deg": 314.3}} +{"event": "action", "seq": 477, "wall_ts_ms": 1789176747413, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0477", "position": {"x": 1422.849787772556, "y": 418.12719651105397}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747413, "virtual_time_s": 7541.578025, "measure_result": "direction", "svd_deg": 314.3}} +{"event": "action", "seq": 478, "wall_ts_ms": 1789176747440, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0478", "position": {"x": 1422.849787772556, "y": 418.12719651105397}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747440, "virtual_time_s": 7546.578025, "measure_result": "direction", "svd_deg": 314.3}} +{"event": "action", "seq": 479, "wall_ts_ms": 1789176747467, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0479", "position": {"x": 1422.849787772556, "y": 418.12719651105397}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747467, "virtual_time_s": 7551.578025, "measure_result": "direction", "svd_deg": 314.3}} +{"event": "action", "seq": 480, "wall_ts_ms": 1789176747468, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0480", "position": {"x": 1470.0, "y": 370.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747468, "virtual_time_s": 7568.052994, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 481, "wall_ts_ms": 1789176747469, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0481", "position": {"x": 1470.0, "y": 350.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747469, "virtual_time_s": 7575.052994, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 482, "wall_ts_ms": 1789176747469, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0482", "position": {"x": 1490.0, "y": 350.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747469, "virtual_time_s": 7582.052994, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 483, "wall_ts_ms": 1789176747470, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0483", "position": {"x": 1490.0, "y": 330.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747470, "virtual_time_s": 7589.052994, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 484, "wall_ts_ms": 1789176747470, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0484", "position": {"x": 1510.0, "y": 330.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747470, "virtual_time_s": 7596.052994, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 485, "wall_ts_ms": 1789176747471, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0485", "position": {"x": 1510.0, "y": 310.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747471, "virtual_time_s": 7603.052994, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 486, "wall_ts_ms": 1789176747471, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0486", "position": {"x": 1530.0, "y": 310.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747471, "virtual_time_s": 7610.052994, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 487, "wall_ts_ms": 1789176747472, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0487", "position": {"x": 1530.0, "y": 290.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747472, "virtual_time_s": 7617.052994, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 488, "wall_ts_ms": 1789176747472, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0488", "position": {"x": 1550.0, "y": 290.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747472, "virtual_time_s": 7624.052994, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 489, "wall_ts_ms": 1789176747473, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0489", "position": {"x": 1550.0, "y": 270.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176747473, "virtual_time_s": 7633.052994, "clear_result": "success"}} +{"event": "action", "seq": 490, "wall_ts_ms": 1789176747473, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0490", "position": {"x": 1800.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176747473, "virtual_time_s": 7712.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 491, "wall_ts_ms": 1789176747474, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0491", "position": {"x": 1800.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176747474, "virtual_time_s": 7718.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 492, "wall_ts_ms": 1789176747474, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0492", "position": {"x": 1800.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176747474, "virtual_time_s": 7724.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 493, "wall_ts_ms": 1789176747475, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0493", "position": {"x": 1800.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176747475, "virtual_time_s": 7730.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 494, "wall_ts_ms": 1789176747475, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0494", "position": {"x": 1800.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176747475, "virtual_time_s": 7736.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 495, "wall_ts_ms": 1789176747476, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0495", "position": {"x": 1800.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176747476, "virtual_time_s": 7742.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 496, "wall_ts_ms": 1789176747477, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0496", "position": {"x": 1800.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176747477, "virtual_time_s": 7748.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 497, "wall_ts_ms": 1789176747477, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0497", "position": {"x": 1800.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176747477, "virtual_time_s": 7754.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 498, "wall_ts_ms": 1789176747478, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0498", "position": {"x": 1800.0, "y": 600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176747478, "virtual_time_s": 7879.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 499, "wall_ts_ms": 1789176747478, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0499", "position": {"x": 1800.0, "y": 600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176747478, "virtual_time_s": 7885.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 500, "wall_ts_ms": 1789176747479, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0500", "position": {"x": 1800.0, "y": 600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176747479, "virtual_time_s": 7891.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 501, "wall_ts_ms": 1789176747479, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0501", "position": {"x": 1800.0, "y": 600.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176747479, "virtual_time_s": 7897.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 502, "wall_ts_ms": 1789176747480, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0502", "position": {"x": 1800.0, "y": 600.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176747480, "virtual_time_s": 7903.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 503, "wall_ts_ms": 1789176747480, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0503", "position": {"x": 1800.0, "y": 600.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176747480, "virtual_time_s": 7909.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 504, "wall_ts_ms": 1789176747481, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0504", "position": {"x": 1800.0, "y": 600.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176747481, "virtual_time_s": 7915.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 505, "wall_ts_ms": 1789176747482, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0505", "position": {"x": 1800.0, "y": 600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176747482, "virtual_time_s": 7921.646472, "measure_result": "no_signal"}} +{"event": "action", "seq": 506, "wall_ts_ms": 1789176747482, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0506", "position": {"x": 800.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176747482, "virtual_time_s": 8159.884548, "measure_result": "no_signal"}} +{"event": "action", "seq": 507, "wall_ts_ms": 1789176747483, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0507", "position": {"x": 800.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176747483, "virtual_time_s": 8165.884548, "measure_result": "no_signal"}} +{"event": "action", "seq": 508, "wall_ts_ms": 1789176747483, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0508", "position": {"x": 800.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176747483, "virtual_time_s": 8171.884548, "measure_result": "no_signal"}} +{"event": "action", "seq": 509, "wall_ts_ms": 1789176747484, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0509", "position": {"x": 800.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176747484, "virtual_time_s": 8177.884548, "measure_result": "no_signal"}} +{"event": "action", "seq": 510, "wall_ts_ms": 1789176747484, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0510", "position": {"x": 800.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176747484, "virtual_time_s": 8183.884548, "measure_result": "no_signal"}} +{"event": "action", "seq": 511, "wall_ts_ms": 1789176747485, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0511", "position": {"x": 800.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176747485, "virtual_time_s": 8189.884548, "measure_result": "no_signal"}} +{"event": "action", "seq": 512, "wall_ts_ms": 1789176747485, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0512", "position": {"x": 800.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176747485, "virtual_time_s": 8195.884548, "measure_result": "no_signal"}} +{"event": "action", "seq": 513, "wall_ts_ms": 1789176747486, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0513", "position": {"x": 800.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176747486, "virtual_time_s": 8201.884548, "measure_result": "no_signal"}} +{"event": "action", "seq": 514, "wall_ts_ms": 1789176747486, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0514", "position": {"x": 1800.0, "y": -800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176747486, "virtual_time_s": 8463.009517, "measure_result": "no_signal"}} +{"event": "action", "seq": 515, "wall_ts_ms": 1789176747487, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0515", "position": {"x": 1800.0, "y": -800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176747487, "virtual_time_s": 8469.009517, "measure_result": "no_signal"}} +{"event": "action", "seq": 516, "wall_ts_ms": 1789176747487, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0516", "position": {"x": 1800.0, "y": -800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176747487, "virtual_time_s": 8475.009517, "measure_result": "no_signal"}} +{"event": "action", "seq": 517, "wall_ts_ms": 1789176747488, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0517", "position": {"x": 1800.0, "y": -800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176747488, "virtual_time_s": 8481.009517, "measure_result": "no_signal"}} +{"event": "action", "seq": 518, "wall_ts_ms": 1789176747488, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0518", "position": {"x": 1800.0, "y": -800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176747488, "virtual_time_s": 8487.009517, "measure_result": "no_signal"}} +{"event": "action", "seq": 519, "wall_ts_ms": 1789176747489, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0519", "position": {"x": 1800.0, "y": -800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176747489, "virtual_time_s": 8493.009517, "measure_result": "no_signal"}} +{"event": "action", "seq": 520, "wall_ts_ms": 1789176747489, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0520", "position": {"x": 1800.0, "y": -800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176747489, "virtual_time_s": 8499.009517, "measure_result": "no_signal"}} +{"event": "action", "seq": 521, "wall_ts_ms": 1789176747490, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0521", "position": {"x": 1800.0, "y": -800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176747490, "virtual_time_s": 8505.009517, "measure_result": "no_signal"}} +{"event": "action", "seq": 522, "wall_ts_ms": 1789176747490, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0522", "position": {"x": -2200.0, "y": 600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176747490, "virtual_time_s": 9357.594321, "measure_result": "no_signal"}} +{"event": "action", "seq": 523, "wall_ts_ms": 1789176747491, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0523", "position": {"x": -2200.0, "y": 600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176747491, "virtual_time_s": 9363.594321, "measure_result": "no_signal"}} +{"event": "action", "seq": 524, "wall_ts_ms": 1789176747491, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0524", "position": {"x": -2200.0, "y": 600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176747491, "virtual_time_s": 9369.594321, "measure_result": "no_signal"}} +{"event": "action", "seq": 525, "wall_ts_ms": 1789176747492, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0525", "position": {"x": -2200.0, "y": 600.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176747492, "virtual_time_s": 9375.594321, "measure_result": "no_signal"}} +{"event": "action", "seq": 526, "wall_ts_ms": 1789176747492, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0526", "position": {"x": -2200.0, "y": 600.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176747492, "virtual_time_s": 9381.594321, "measure_result": "no_signal"}} +{"event": "action", "seq": 527, "wall_ts_ms": 1789176747493, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0527", "position": {"x": -2200.0, "y": 600.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176747493, "virtual_time_s": 9387.594321, "measure_result": "no_signal"}} +{"event": "action", "seq": 528, "wall_ts_ms": 1789176747493, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0528", "position": {"x": -2200.0, "y": 600.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176747493, "virtual_time_s": 9393.594321, "measure_result": "no_signal"}} +{"event": "action", "seq": 529, "wall_ts_ms": 1789176747494, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0529", "position": {"x": -2200.0, "y": 600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176747494, "virtual_time_s": 9399.594321, "measure_result": "no_signal"}} +{"event": "action", "seq": 530, "wall_ts_ms": 1789176747494, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "48cf97ba3914-0530"}, "response": {"accepted": true, "real_timestamp_ms": 1789176747494, "virtual_time_s": 9399.594321, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 9399.594321, "real_elapsed_s": 15.429505, "request_count": 530, "cleared_count": 12} diff --git a/referee-data/sessions/5TQF-A8K9-QW89-V2ET/meta.json b/referee-data/sessions/5TQF-A8K9-QW89-V2ET/meta.json new file mode 100644 index 0000000..3dcc3f3 --- /dev/null +++ b/referee-data/sessions/5TQF-A8K9-QW89-V2ET/meta.json @@ -0,0 +1,104 @@ +{ + "case_code": "5TQF-A8K9-QW89-V2ET", + "module": "q4_practice", + "robot_id": "1", + "seed": 1415283134, + "truth": [ + { + "channel": 17, + "x": 201.83789549004942, + "y": 411.9733699427643, + "r_eff_m": 1221.4478310143415, + "directional": true, + "heading_deg": 315.48877042891024 + }, + { + "channel": 4, + "x": -1105.4390726028914, + "y": -836.873727576673, + "r_eff_m": 1449.9048730606553, + "directional": true, + "heading_deg": 189.031114716249 + }, + { + "channel": 2, + "x": -502.2367519508228, + "y": 921.7249012630463, + "r_eff_m": 1222.172364639404, + "directional": true, + "heading_deg": 170.22567245589232 + }, + { + "channel": 15, + "x": 1338.5109618239856, + "y": 1114.8362795676107, + "r_eff_m": 1125.022131637457, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": -916.8137760578517, + "y": -848.3836360990396, + "r_eff_m": 1463.9469990173247, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": -962.2248701879902, + "y": -861.6772389852658, + "r_eff_m": 1057.5023609780635, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": 426.0100239176212, + "y": -1395.433153095009, + "r_eff_m": 1316.6412496443302, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 5, + "x": 1565.3993113628057, + "y": 276.7308299465653, + "r_eff_m": 1300.3648907717125, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": 1358.7991804165615, + "y": 756.6431101382647, + "r_eff_m": 1268.3365819478918, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": -1025.1717086952801, + "y": -1138.8576473722178, + "r_eff_m": 1274.8459885352177, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": -973.4448466468912, + "y": 950.3687397692318, + "r_eff_m": 1358.1824021574332, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": -679.5564210766588, + "y": -113.09168897579823, + "r_eff_m": 1357.5098916694712, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/8N5E-ZWC4-WH88-PLDD/log.jsonl b/referee-data/sessions/8N5E-ZWC4-WH88-PLDD/log.jsonl new file mode 100644 index 0000000..a45c96b --- /dev/null +++ b/referee-data/sessions/8N5E-ZWC4-WH88-PLDD/log.jsonl @@ -0,0 +1,122 @@ +{"event": "session_start", "case_code": "8N5E-ZWC4-WH88-PLDD", "module": "q3_practice", "robot_id": "1", "seed": 1527834650, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 16, "x": -1426.4751982022606, "y": 146.3393180231787, "r_eff_m": 1059.0849032882313, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": 290.56903183954273, "y": 787.6776134403464, "r_eff_m": 1117.8704763047594, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": -554.3720531046184, "y": -965.0426141773152, "r_eff_m": 1316.1384565200517, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": 1460.5517979776075, "y": -36.23476869190996, "r_eff_m": 1217.206292613953, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": -1526.409529554257, "y": 125.74005540490136, "r_eff_m": 1215.3478133430863, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": 395.0883005217367, "y": -3.392204073397361, "r_eff_m": 1408.4188419024495, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": -1217.7260094049198, "y": 153.8296545403218, "r_eff_m": 1215.4430480237338, "directional": false, "heading_deg": 0.0}, {"channel": 3, "x": 1564.1625306319058, "y": 361.40024430914116, "r_eff_m": 1403.217608954327, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": -766.740093640507, "y": -711.7971768719724, "r_eff_m": 1463.975512276439, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": 701.797784680196, "y": -990.3589505719676, "r_eff_m": 1438.666080940352, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": 826.2042304331064, "y": 169.49742165027592, "r_eff_m": 1189.741197001806, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": -1654.1635347253784, "y": -532.8383982214895, "r_eff_m": 1385.1047407256679, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789177718592, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789177718592, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789177718602, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177718602, "virtual_time_s": 5.0, "measure_result": "direction", "svd_deg": 223.42}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789177718637, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177718637, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789177718643, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177718643, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789177718648, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177718648, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789177718652, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177718652, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789177718658, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177718658, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789177718662, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177718662, "virtual_time_s": 41.0, "measure_result": "direction", "svd_deg": 306.28}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789177718693, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177718693, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789177718697, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177718697, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789177718703, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177718703, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789177718707, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177718707, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789177718713, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177718713, "virtual_time_s": 71.0, "measure_result": "direction", "svd_deg": 11.92}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789177718748, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177718748, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 358.77}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789177718787, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177718787, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789177718796, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177718796, "virtual_time_s": 89.0, "measure_result": "direction", "svd_deg": 69.34}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789177718833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177718833, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789177718841, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177718841, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789177718846, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177718846, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789177718853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177718853, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789177718861, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177718860, "virtual_time_s": 119.0, "measure_result": "direction", "svd_deg": 239.4}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789177718924, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0022", "position": {"x": -473.65244518877944, "y": -482.587298252437}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177718924, "virtual_time_s": 259.238625, "measure_result": "direction", "svd_deg": 261.24}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789177718925, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0023", "position": {"x": -473.65244518877944, "y": -482.587298252437}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177718925, "virtual_time_s": 265.238625, "measure_result": "direction", "svd_deg": 217.7}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789177718938, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0024", "position": {"x": -450.4061206175299, "y": -802.0243994224704}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177718938, "virtual_time_s": 334.294992, "measure_result": "direction", "svd_deg": 163.81}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789177718940, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0025", "position": {"x": -761.7574665299293, "y": -711.8326666959506}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177718940, "virtual_time_s": 404.125296, "clear_result": "success"}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789177718941, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0026", "position": {"x": -761.7574665299293, "y": -711.8326666959506}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177718941, "virtual_time_s": 410.125296, "measure_result": "direction", "svd_deg": 308.77}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789177718953, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0027", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177718953, "virtual_time_s": 485.01501, "measure_result": "direction", "svd_deg": 157.12}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789177718973, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0028", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177718973, "virtual_time_s": 491.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789177718976, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0029", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177718976, "virtual_time_s": 497.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789177718979, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0030", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177718979, "virtual_time_s": 503.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789177718981, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0031", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177718981, "virtual_time_s": 509.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789177718984, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0032", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177718984, "virtual_time_s": 515.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789177718986, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0033", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177718986, "virtual_time_s": 521.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789177718989, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0034", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177718989, "virtual_time_s": 527.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789177718992, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0035", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177718992, "virtual_time_s": 533.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789177718996, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0036", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177718996, "virtual_time_s": 539.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789177718999, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0037", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177718999, "virtual_time_s": 545.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789177719003, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0038", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177719003, "virtual_time_s": 551.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789177719006, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0039", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177719006, "virtual_time_s": 557.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789177719010, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0040", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177719010, "virtual_time_s": 563.01501, "measure_result": "no_signal"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789177719042, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0041", "position": {"x": -560.8418045015728, "y": -976.4060636017127}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177719042, "virtual_time_s": 574.770863, "clear_result": "success"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789177719055, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0042", "position": {"x": -1111.4165285548472, "y": -1023.8554907742282}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177719055, "virtual_time_s": 691.293978, "measure_result": "direction", "svd_deg": 138.8}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789177719067, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0043", "position": {"x": -1651.6401282029797, "y": -550.2251896012102}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177719067, "virtual_time_s": 839.983532, "measure_result": "direction", "svd_deg": 98.5}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789177719069, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0044", "position": {"x": -1651.777119702916, "y": -549.4069993054234}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177719069, "virtual_time_s": 845.149448, "clear_result": "success"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789177719081, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0045", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177719081, "virtual_time_s": 998.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789177719085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0046", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177719085, "virtual_time_s": 1004.660525, "measure_result": "direction", "svd_deg": 160.71}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789177719117, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0047", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177719117, "virtual_time_s": 1010.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789177719125, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0048", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177719125, "virtual_time_s": 1016.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789177719131, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0049", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177719131, "virtual_time_s": 1022.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789177719138, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0050", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177719138, "virtual_time_s": 1028.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789177719145, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0051", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177719145, "virtual_time_s": 1034.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789177719155, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0052", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177719155, "virtual_time_s": 1040.660525, "measure_result": "direction", "svd_deg": 109.68}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789177719188, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0053", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177719188, "virtual_time_s": 1046.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789177719191, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0054", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177719191, "virtual_time_s": 1052.660525, "measure_result": "direction", "svd_deg": 151.16}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789177719222, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0055", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177719222, "virtual_time_s": 1058.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789177719227, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0056", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177719227, "virtual_time_s": 1064.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789177719233, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0057", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177719233, "virtual_time_s": 1070.660525, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789177719278, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0058", "position": {"x": -1427.4425184408788, "y": -147.1906110389915}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177719278, "virtual_time_s": 1137.76736, "measure_result": "direction", "svd_deg": 109.35}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789177719280, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0059", "position": {"x": -1522.5599206546112, "y": 123.00010618867616}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177719280, "virtual_time_s": 1200.056222, "clear_result": "success"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789177719283, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0060", "position": {"x": -1522.5599206546112, "y": 123.00010618867616}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177719283, "virtual_time_s": 1206.056222, "measure_result": "direction", "svd_deg": 5.25}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789177719286, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0061", "position": {"x": -1522.5599206546112, "y": 123.00010618867616}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177719286, "virtual_time_s": 1212.056222, "measure_result": "direction", "svd_deg": 13.64}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789177719304, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0062", "position": {"x": -1434.3849567067336, "y": 144.23605066321733}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177719304, "virtual_time_s": 1235.19545, "clear_result": "success"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789177719323, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0063", "position": {"x": -1225.83931600015, "y": 150.90281387284583}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177719323, "virtual_time_s": 1281.925885, "clear_result": "success"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789177719344, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0064", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177719344, "virtual_time_s": 1501.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789177719351, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0065", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177719351, "virtual_time_s": 1507.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789177719359, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0066", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177719359, "virtual_time_s": 1513.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789177719366, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0067", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177719366, "virtual_time_s": 1519.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789177719374, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0068", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177719374, "virtual_time_s": 1525.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789177719382, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0069", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177719382, "virtual_time_s": 1531.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789177719389, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0070", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177719389, "virtual_time_s": 1537.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789177719395, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0071", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177719395, "virtual_time_s": 1543.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789177719402, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0072", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177719401, "virtual_time_s": 1549.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789177719408, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0073", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177719408, "virtual_time_s": 1555.994993, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789177719426, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0074", "position": {"x": 23.031096895769764, "y": 766.7491101366052}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177719426, "virtual_time_s": 1691.59594, "measure_result": "direction", "svd_deg": 4.82}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789177719435, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0075", "position": {"x": 298.2262092381425, "y": 790.2842455537672}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177719435, "virtual_time_s": 1751.835872, "measure_result": "direction", "svd_deg": 199.25}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789177719437, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0076", "position": {"x": 297.5814284315055, "y": 790.0580836065636}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177719437, "virtual_time_s": 1756.972531, "clear_result": "success"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789177719443, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0077", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177719443, "virtual_time_s": 1833.849285, "measure_result": "direction", "svd_deg": 326.84000000000003}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789177719459, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0078", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177719459, "virtual_time_s": 1839.849285, "measure_result": "no_signal"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789177719462, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0079", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177719462, "virtual_time_s": 1845.849285, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789177719465, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0080", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177719465, "virtual_time_s": 1851.849285, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789177719468, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0081", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177719468, "virtual_time_s": 1857.849285, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789177719470, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0082", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177719470, "virtual_time_s": 1863.849285, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789177719473, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0083", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177719473, "virtual_time_s": 1869.849285, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789177719475, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0084", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177719475, "virtual_time_s": 1875.849285, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789177719478, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0085", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177719478, "virtual_time_s": 1881.849285, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789177719480, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0086", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177719480, "virtual_time_s": 1887.849285, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789177719493, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0087", "position": {"x": 1004.1938800978712, "y": 505.72856686523653}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177719493, "virtual_time_s": 2024.795194, "measure_result": "direction", "svd_deg": 345.51}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789177719503, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0088", "position": {"x": 1573.9827834346736, "y": 356.74521333023995}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177719503, "virtual_time_s": 2147.584062, "measure_result": "direction", "svd_deg": 155.09}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789177719511, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0089", "position": {"x": 1543.6377024166522, "y": 370.19547054250387}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177719511, "virtual_time_s": 2159.222536, "measure_result": "direction", "svd_deg": 335.92}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789177719512, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0090", "position": {"x": 1557.1100795745858, "y": 364.22392813906714}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177719512, "virtual_time_s": 2167.169835, "clear_result": "success"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789177719520, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0091", "position": {"x": 1159.7, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177719520, "virtual_time_s": 2280.983348, "measure_result": "no_signal"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789177719523, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0092", "position": {"x": 1159.7, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177719523, "virtual_time_s": 2286.983348, "measure_result": "no_signal"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789177719525, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0093", "position": {"x": 1159.7, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177719525, "virtual_time_s": 2292.983348, "measure_result": "no_signal"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789177719529, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0094", "position": {"x": 1159.7, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177719529, "virtual_time_s": 2298.983348, "measure_result": "direction", "svd_deg": 352.36}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789177719543, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0095", "position": {"x": 1159.7, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177719543, "virtual_time_s": 2304.983348, "measure_result": "no_signal"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789177719546, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0096", "position": {"x": 1159.7, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177719546, "virtual_time_s": 2310.983348, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789177719548, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0097", "position": {"x": 1159.7, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177719548, "virtual_time_s": 2316.983348, "measure_result": "no_signal"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789177719550, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0098", "position": {"x": 1159.7, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177719550, "virtual_time_s": 2322.983348, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789177719553, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0099", "position": {"x": 1159.7, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177719553, "virtual_time_s": 2328.983348, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789177719563, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0100", "position": {"x": 1216.8639337515642, "y": -118.61861494713685}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177719563, "virtual_time_s": 2361.318185, "measure_result": "direction", "svd_deg": 18.67}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789177719572, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0101", "position": {"x": 1453.4828563318024, "y": -39.04678975266172}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177719572, "virtual_time_s": 2416.246209, "measure_result": "direction", "svd_deg": 21.54}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789177719573, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0102", "position": {"x": 1453.4828563318024, "y": -39.04678975266172}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177719573, "virtual_time_s": 2421.246209, "clear_result": "success"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789177719580, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0103", "position": {"x": 910.6859195822817, "y": -21.98341160349429}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177719580, "virtual_time_s": 2535.859224, "measure_result": "direction", "svd_deg": 114.4}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789177719581, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0104", "position": {"x": 822.8073384995189, "y": 171.07554651864916}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177719581, "virtual_time_s": 2583.282994, "clear_result": "success"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789177719582, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0105", "position": {"x": 822.8073384995189, "y": 171.07554651864916}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177719582, "virtual_time_s": 2589.282994, "measure_result": "direction", "svd_deg": 201.78}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789177719586, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0106", "position": {"x": 374.4278917389806, "y": -7.387837427605788}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177719586, "virtual_time_s": 2690.801035, "measure_result": "direction", "svd_deg": 10.52}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789177719587, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0107", "position": {"x": 390.52420942274483, "y": -4.68990542666626}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177719587, "virtual_time_s": 2699.065206, "clear_result": "success"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789177719591, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0108", "position": {"x": 549.0337185951404, "y": -378.2743998369704}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177719591, "virtual_time_s": 2786.229395, "measure_result": "direction", "svd_deg": 283.94}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789177719594, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0109", "position": {"x": 690.68714474162, "y": -943.2211921417838}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177719594, "virtual_time_s": 2907.716402, "measure_result": "direction", "svd_deg": 283.65}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789177719599, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0110", "position": {"x": 697.568788325503, "y": -969.5366442663299}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177719599, "virtual_time_s": 2918.156476, "measure_result": "direction", "svd_deg": 280.68}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789177719601, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0111", "position": {"x": 698.6787760077287, "y": -974.9036475070525}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177719601, "virtual_time_s": 2924.252593, "clear_result": "success"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789177719602, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0112", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177719602, "virtual_time_s": 2954.736194, "measure_result": "no_signal"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789177719604, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0113", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177719604, "virtual_time_s": 2960.736194, "measure_result": "no_signal"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789177719606, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0114", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177719606, "virtual_time_s": 2966.736194, "measure_result": "no_signal"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789177719609, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0115", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177719608, "virtual_time_s": 2972.736194, "measure_result": "no_signal"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789177719610, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0116", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177719610, "virtual_time_s": 2978.736194, "measure_result": "no_signal"}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789177719615, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0117", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177719615, "virtual_time_s": 2984.736194, "measure_result": "no_signal"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789177719617, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0118", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177719617, "virtual_time_s": 2990.736194, "measure_result": "no_signal"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789177719620, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0119", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177719620, "virtual_time_s": 2996.736194, "measure_result": "no_signal"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789177719622, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "44560cd3725b-0120"}, "response": {"accepted": true, "real_timestamp_ms": 1789177719622, "virtual_time_s": 2996.736194, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 2996.736194, "real_elapsed_s": 3.736418, "request_count": 120, "cleared_count": 12} diff --git a/referee-data/sessions/8N5E-ZWC4-WH88-PLDD/meta.json b/referee-data/sessions/8N5E-ZWC4-WH88-PLDD/meta.json new file mode 100644 index 0000000..986651b --- /dev/null +++ b/referee-data/sessions/8N5E-ZWC4-WH88-PLDD/meta.json @@ -0,0 +1,104 @@ +{ + "case_code": "8N5E-ZWC4-WH88-PLDD", + "module": "q3_practice", + "robot_id": "1", + "seed": 1527834650, + "truth": [ + { + "channel": 16, + "x": -1426.4751982022606, + "y": 146.3393180231787, + "r_eff_m": 1059.0849032882313, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": 290.56903183954273, + "y": 787.6776134403464, + "r_eff_m": 1117.8704763047594, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": -554.3720531046184, + "y": -965.0426141773152, + "r_eff_m": 1316.1384565200517, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": 1460.5517979776075, + "y": -36.23476869190996, + "r_eff_m": 1217.206292613953, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": -1526.409529554257, + "y": 125.74005540490136, + "r_eff_m": 1215.3478133430863, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": 395.0883005217367, + "y": -3.392204073397361, + "r_eff_m": 1408.4188419024495, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": -1217.7260094049198, + "y": 153.8296545403218, + "r_eff_m": 1215.4430480237338, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 3, + "x": 1564.1625306319058, + "y": 361.40024430914116, + "r_eff_m": 1403.217608954327, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": -766.740093640507, + "y": -711.7971768719724, + "r_eff_m": 1463.975512276439, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": 701.797784680196, + "y": -990.3589505719676, + "r_eff_m": 1438.666080940352, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": 826.2042304331064, + "y": 169.49742165027592, + "r_eff_m": 1189.741197001806, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": -1654.1635347253784, + "y": -532.8383982214895, + "r_eff_m": 1385.1047407256679, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/9JLX-QLL7-55AM-T44J/log.jsonl b/referee-data/sessions/9JLX-QLL7-55AM-T44J/log.jsonl new file mode 100644 index 0000000..913355e --- /dev/null +++ b/referee-data/sessions/9JLX-QLL7-55AM-T44J/log.jsonl @@ -0,0 +1,129 @@ +{"event": "session_start", "case_code": "9JLX-QLL7-55AM-T44J", "module": "q3_practice", "robot_id": "1", "seed": 166196614, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 19, "x": -523.3587944109715, "y": -705.637915631116, "r_eff_m": 1354.0119254354443, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": 767.7715038523728, "y": -631.6290894368279, "r_eff_m": 1167.6007483642861, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": -1175.4219907248012, "y": 1103.262952033477, "r_eff_m": 1115.0409881210335, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": -1.441736953621257, "y": -1319.5601215039164, "r_eff_m": 1422.344707388294, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": 1051.8233509306424, "y": 441.15314644636874, "r_eff_m": 1020.4433584823797, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": 980.686435060703, "y": -1088.8227424239224, "r_eff_m": 1085.5348833947269, "directional": false, "heading_deg": 0.0}, {"channel": 17, "x": 626.9885608585633, "y": -666.4190554969879, "r_eff_m": 1039.1927115702244, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": 747.1420713623061, "y": -1607.0697161756823, "r_eff_m": 1047.5838414380048, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": -285.32085267031505, "y": 81.30526215269114, "r_eff_m": 1155.1904462990838, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": 1104.7244301161581, "y": 630.3958738282346, "r_eff_m": 1174.5029244736986, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": -1303.7358372502276, "y": -712.0607631779634, "r_eff_m": 1230.3465487391618, "directional": false, "heading_deg": 0.0}, {"channel": 5, "x": 254.5572963795333, "y": 1631.2907127703388, "r_eff_m": 1401.3216851841335, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": -826.445000314019, "y": -1510.6440872122378, "r_eff_m": 1034.983583055589, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": -961.3476287947116, "y": -689.0367299798689, "r_eff_m": 1356.0025591706406, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789177766592, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789177766592, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789177766599, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177766599, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789177766603, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177766603, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789177766607, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177766607, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789177766611, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177766611, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789177766620, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177766620, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789177766624, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177766624, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789177766628, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177766628, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789177766632, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177766632, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789177766636, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177766636, "virtual_time_s": 53.0, "measure_result": "direction", "svd_deg": 163.23}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789177766662, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177766662, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789177766666, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177766666, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789177766669, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177766669, "virtual_time_s": 71.0, "measure_result": "direction", "svd_deg": 215.67}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789177766696, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177766696, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 270.69}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789177766723, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177766723, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789177766727, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177766727, "virtual_time_s": 89.0, "measure_result": "direction", "svd_deg": 320.08}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789177766753, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177766753, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789177766757, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177766757, "virtual_time_s": 101.0, "measure_result": "direction", "svd_deg": 314.25}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789177766784, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177766784, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789177766788, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177766788, "virtual_time_s": 113.0, "measure_result": "direction", "svd_deg": 233.57999999999998}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789177766814, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177766814, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789177766836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0022", "position": {"x": 489.6350424820172, "y": -246.47140225288155}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177766836, "virtual_time_s": 234.634051, "measure_result": "direction", "svd_deg": 305.89}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789177766849, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0023", "position": {"x": 673.8970703767643, "y": -425.3206924249047}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177766849, "virtual_time_s": 291.991451, "measure_result": "direction", "svd_deg": 258.49}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789177766853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0024", "position": {"x": 673.8970703767643, "y": -425.3206924249047}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177766853, "virtual_time_s": 297.991451, "measure_result": "direction", "svd_deg": 293.98}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789177766866, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0025", "position": {"x": 772.1839649274328, "y": -644.3829215058219}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177766866, "virtual_time_s": 351.011686, "measure_result": "direction", "svd_deg": 109.86}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789177766868, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0026", "position": {"x": 767.2085334403879, "y": -631.3296337526866}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177766868, "virtual_time_s": 358.80556, "clear_result": "success"}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789177766869, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0027", "position": {"x": 767.2085334403879, "y": -631.3296337526866}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177766869, "virtual_time_s": 364.80556, "measure_result": "direction", "svd_deg": 193.99}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789177766880, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0028", "position": {"x": 642.6800074518775, "y": -661.7342914663445}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177766880, "virtual_time_s": 395.442874, "clear_result": "success"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789177766890, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0029", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177766890, "virtual_time_s": 471.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789177766896, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0030", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177766896, "virtual_time_s": 477.104685, "measure_result": "direction", "svd_deg": 347.18}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789177766917, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0031", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177766917, "virtual_time_s": 483.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789177766920, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0032", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177766920, "virtual_time_s": 489.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789177766923, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0033", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177766923, "virtual_time_s": 495.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789177766927, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0034", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177766927, "virtual_time_s": 501.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789177766932, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0035", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177766932, "virtual_time_s": 507.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789177766935, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0036", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177766935, "virtual_time_s": 513.104685, "measure_result": "direction", "svd_deg": 284.81}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789177766955, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0037", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177766955, "virtual_time_s": 519.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789177766958, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0038", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177766958, "virtual_time_s": 525.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789177766961, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0039", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177766961, "virtual_time_s": 531.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789177766965, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0040", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177766965, "virtual_time_s": 537.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789177766969, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0041", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177766969, "virtual_time_s": 543.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789177766975, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0042", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177766975, "virtual_time_s": 549.104685, "measure_result": "no_signal"}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789177766992, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0043", "position": {"x": 747.3526207363128, "y": -1161.3657935602184}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177766992, "virtual_time_s": 601.025258, "measure_result": "direction", "svd_deg": 18.05}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789177766994, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0044", "position": {"x": 747.3526207363128, "y": -1161.3657935602184}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177766994, "virtual_time_s": 607.025258, "measure_result": "direction", "svd_deg": 270.33}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789177767012, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0045", "position": {"x": 963.5211199772604, "y": -1091.2909742490324}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177767012, "virtual_time_s": 658.473822, "measure_result": "direction", "svd_deg": 8.01}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789177767014, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0046", "position": {"x": 965.1912146305335, "y": -1091.0857644682935}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177767014, "virtual_time_s": 663.810353, "clear_result": "success"}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789177767015, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0047", "position": {"x": 965.1912146305335, "y": -1091.0857644682935}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177767015, "virtual_time_s": 669.810353, "measure_result": "direction", "svd_deg": 246.65}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789177767028, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0048", "position": {"x": 742.5291509836704, "y": -1607.958038929553}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177767028, "virtual_time_s": 787.368843, "measure_result": "near"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789177767031, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0049", "position": {"x": 742.5291509836698, "y": -1607.958038929553}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177767031, "virtual_time_s": 792.368843, "clear_result": "success"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789177767042, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0050", "position": {"x": 130.62369109323367, "y": -892.4938330500224}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177767042, "virtual_time_s": 986.657698, "measure_result": "direction", "svd_deg": 252.36}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789177767052, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0051", "position": {"x": 13.68301157192882, "y": -1265.5315955352305}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177767052, "virtual_time_s": 1069.84524, "measure_result": "direction", "svd_deg": 255.3}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789177767064, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0052", "position": {"x": 3.1244406788552324, "y": -1308.8610265514817}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177767064, "virtual_time_s": 1083.764709, "measure_result": "direction", "svd_deg": 247.73000000000002}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789177767066, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0053", "position": {"x": 3.1244406788552324, "y": -1308.8610265514817}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177767066, "virtual_time_s": 1088.764709, "clear_result": "success"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789177767078, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0054", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177767078, "virtual_time_s": 1226.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789177767081, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0055", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177767081, "virtual_time_s": 1232.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789177767084, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0056", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177767084, "virtual_time_s": 1238.309158, "measure_result": "direction", "svd_deg": 157.83}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789177767101, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0057", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177767101, "virtual_time_s": 1244.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789177767104, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0058", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177767104, "virtual_time_s": 1250.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789177767109, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0059", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177767109, "virtual_time_s": 1256.309158, "measure_result": "direction", "svd_deg": 243.23000000000002}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789177767130, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0060", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177767130, "virtual_time_s": 1262.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789177767136, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0061", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177767136, "virtual_time_s": 1268.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789177767142, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0062", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177767142, "virtual_time_s": 1274.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789177767146, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0063", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177767146, "virtual_time_s": 1280.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789177767152, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0064", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177767152, "virtual_time_s": 1286.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789177767155, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0065", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177767155, "virtual_time_s": 1292.309158, "measure_result": "no_signal"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789177767173, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0066", "position": {"x": -395.72920723973715, "y": -848.6102944407296}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177767173, "virtual_time_s": 1346.53736, "measure_result": "direction", "svd_deg": 131.06}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789177767175, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0067", "position": {"x": -518.8711546360015, "y": -706.8153241405213}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177767175, "virtual_time_s": 1389.097846, "clear_result": "success"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789177767177, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0068", "position": {"x": -518.8711546360015, "y": -706.8153241405213}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177767177, "virtual_time_s": 1395.097846, "measure_result": "direction", "svd_deg": 249.38}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789177767180, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0069", "position": {"x": -518.8711546360015, "y": -706.8153241405213}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177767180, "virtual_time_s": 1401.097846, "measure_result": "direction", "svd_deg": 176.84}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789177767209, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0070", "position": {"x": -788.9258328196925, "y": -1425.4372082063715}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177767209, "virtual_time_s": 1560.635716, "measure_result": "direction", "svd_deg": 247.2}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789177767218, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0071", "position": {"x": -788.9258328196925, "y": -1425.4372082063715}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177767218, "virtual_time_s": 1566.635716, "measure_result": "direction", "svd_deg": 103.85}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789177767231, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0072", "position": {"x": -819.8627938057007, "y": -1495.5641134766615}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177767231, "virtual_time_s": 1587.965267, "measure_result": "direction", "svd_deg": 246.25}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789177767238, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0073", "position": {"x": -835.331274298706, "y": -1530.6275661118095}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177767238, "virtual_time_s": 1600.630043, "measure_result": "direction", "svd_deg": 66.64}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789177767245, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0074", "position": {"x": -827.597034052204, "y": -1513.0958397942372}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177767245, "virtual_time_s": 1609.462431, "measure_result": "near"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789177767248, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0075", "position": {"x": -827.597034052204, "y": -1513.0958397942372}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177767248, "virtual_time_s": 1614.462431, "clear_result": "success"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789177767257, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0076", "position": {"x": -1079.2407691215467, "y": -1032.4258618629578}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177767257, "virtual_time_s": 1728.973849, "measure_result": "direction", "svd_deg": 125.69}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789177767262, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0077", "position": {"x": -972.104623820224, "y": -688.5467495180964}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177767262, "virtual_time_s": 1806.010228, "clear_result": "success"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789177767264, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0078", "position": {"x": -972.104623820224, "y": -688.5467495180964}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177767264, "virtual_time_s": 1811.010228, "measure_result": "direction", "svd_deg": 183.79}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789177767268, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0079", "position": {"x": -1305.1931087964313, "y": -710.4063394732779}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177767268, "virtual_time_s": 1882.771229, "clear_result": "success"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789177767271, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0080", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177767271, "virtual_time_s": 2033.801627, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789177767275, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0081", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177767274, "virtual_time_s": 2039.801627, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789177767277, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0082", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177767277, "virtual_time_s": 2045.801627, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789177767282, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0083", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177767282, "virtual_time_s": 2051.801627, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789177767285, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0084", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177767285, "virtual_time_s": 2057.801627, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789177767288, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0085", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177767288, "virtual_time_s": 2063.801627, "measure_result": "direction", "svd_deg": 91.25}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789177767302, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0086", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177767302, "virtual_time_s": 2069.801627, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789177767304, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0087", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177767304, "virtual_time_s": 2075.801627, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789177767306, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0088", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177767306, "virtual_time_s": 2081.801627, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789177767309, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0089", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177767309, "virtual_time_s": 2087.801627, "measure_result": "no_signal"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789177767319, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0090", "position": {"x": -942.2469849052626, "y": 106.92651127241031}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177767319, "virtual_time_s": 2142.265672, "measure_result": "direction", "svd_deg": 356.84}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789177767326, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0091", "position": {"x": -930.126373991146, "y": 648.4717049093001}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177767326, "virtual_time_s": 2256.601835, "measure_result": "direction", "svd_deg": 118.22}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789177767329, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0092", "position": {"x": -930.126373991146, "y": 648.4717049093001}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177767329, "virtual_time_s": 2262.601835, "measure_result": "direction", "svd_deg": 317.85}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789177767333, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0093", "position": {"x": -1185.325700889684, "y": 1126.327270409449}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177767333, "virtual_time_s": 2376.948065, "measure_result": "direction", "svd_deg": 293.81}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789177767336, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0094", "position": {"x": -1174.814082479677, "y": 1101.3272256504063}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177767336, "virtual_time_s": 2387.372072, "measure_result": "near"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789177767338, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0095", "position": {"x": -1174.814082479677, "y": 1101.3272256504063}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177767338, "virtual_time_s": 2392.372072, "clear_result": "success"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789177767339, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0096", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177767339, "virtual_time_s": 2518.935879, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789177767342, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0097", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177767342, "virtual_time_s": 2524.935879, "measure_result": "no_signal"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789177767348, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0098", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177767348, "virtual_time_s": 2530.935879, "measure_result": "direction", "svd_deg": 36.75}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789177767365, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0099", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177767365, "virtual_time_s": 2536.935879, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789177767368, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0100", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177767368, "virtual_time_s": 2542.935879, "measure_result": "no_signal"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789177767371, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0101", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177767371, "virtual_time_s": 2548.935879, "measure_result": "no_signal"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789177767374, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0102", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177767374, "virtual_time_s": 2554.935879, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789177767377, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0103", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177767377, "virtual_time_s": 2560.935879, "measure_result": "no_signal"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789177767380, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0104", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177767380, "virtual_time_s": 2566.935879, "measure_result": "no_signal"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789177767391, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0105", "position": {"x": -51.567425422995186, "y": 1227.8351252540965}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177767391, "virtual_time_s": 2687.659403, "measure_result": "direction", "svd_deg": 53.66}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789177767397, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0106", "position": {"x": 234.983483380124, "y": 1614.7165626537528}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177767397, "virtual_time_s": 2788.948275, "measure_result": "direction", "svd_deg": 40.41}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789177767399, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0107", "position": {"x": 247.46286320100452, "y": 1625.724423712807}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177767399, "virtual_time_s": 2797.276385, "clear_result": "success"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789177767400, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0108", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177767400, "virtual_time_s": 2944.217885, "measure_result": "direction", "svd_deg": 324.47}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789177767420, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0109", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177767420, "virtual_time_s": 2950.217885, "measure_result": "no_signal"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789177767424, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0110", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177767424, "virtual_time_s": 2956.217885, "measure_result": "direction", "svd_deg": 309.68}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789177767440, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0111", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177767440, "virtual_time_s": 2962.217885, "measure_result": "no_signal"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789177767447, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0112", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177767447, "virtual_time_s": 2968.217885, "measure_result": "no_signal"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789177767454, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0113", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177767454, "virtual_time_s": 2974.217885, "measure_result": "no_signal"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789177767458, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0114", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177767458, "virtual_time_s": 2980.217885, "measure_result": "no_signal"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789177767461, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0115", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177767461, "virtual_time_s": 2986.217885, "measure_result": "no_signal"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789177767469, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0116", "position": {"x": 1106.8965270182875, "y": 607.6264362867735}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177767469, "virtual_time_s": 3124.149911, "measure_result": "direction", "svd_deg": 251.20999999999998}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789177767472, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0117", "position": {"x": 1049.9599386610098, "y": 439.35865090520593}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177767472, "virtual_time_s": 3164.677828, "clear_result": "success"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789177767474, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0118", "position": {"x": 1049.9599386610098, "y": 439.35865090520593}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177767474, "virtual_time_s": 3170.677828, "measure_result": "direction", "svd_deg": 74.39}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789177767477, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0119", "position": {"x": 1101.7430212949757, "y": 625.5419590664989}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177767477, "virtual_time_s": 3214.327905, "clear_result": "success"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789177767478, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0120", "position": {"x": 1159.7, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177767478, "virtual_time_s": 3345.972126, "measure_result": "no_signal"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789177767482, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0121", "position": {"x": 1159.7, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177767482, "virtual_time_s": 3351.972126, "measure_result": "no_signal"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789177767486, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0122", "position": {"x": 1159.7, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177767486, "virtual_time_s": 3357.972126, "measure_result": "no_signal"}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789177767489, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0123", "position": {"x": 1159.7, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177767489, "virtual_time_s": 3363.972126, "measure_result": "no_signal"}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789177767491, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0124", "position": {"x": 1159.7, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177767491, "virtual_time_s": 3369.972126, "measure_result": "no_signal"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789177767493, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0125", "position": {"x": 1159.7, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177767493, "virtual_time_s": 3375.972126, "measure_result": "no_signal"}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789177767495, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0126", "position": {"x": -273.73636899253916, "y": 79.80401589928616}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177767495, "virtual_time_s": 3668.103351, "clear_result": "success"}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789177767495, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "8a5152667969-0127"}, "response": {"accepted": true, "real_timestamp_ms": 1789177767495, "virtual_time_s": 3668.103351, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3668.103351, "real_elapsed_s": 5.354167, "request_count": 127, "cleared_count": 14} diff --git a/referee-data/sessions/9JLX-QLL7-55AM-T44J/meta.json b/referee-data/sessions/9JLX-QLL7-55AM-T44J/meta.json new file mode 100644 index 0000000..22ce8bb --- /dev/null +++ b/referee-data/sessions/9JLX-QLL7-55AM-T44J/meta.json @@ -0,0 +1,120 @@ +{ + "case_code": "9JLX-QLL7-55AM-T44J", + "module": "q3_practice", + "robot_id": "1", + "seed": 166196614, + "truth": [ + { + "channel": 19, + "x": -523.3587944109715, + "y": -705.637915631116, + "r_eff_m": 1354.0119254354443, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": 767.7715038523728, + "y": -631.6290894368279, + "r_eff_m": 1167.6007483642861, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": -1175.4219907248012, + "y": 1103.262952033477, + "r_eff_m": 1115.0409881210335, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": -1.441736953621257, + "y": -1319.5601215039164, + "r_eff_m": 1422.344707388294, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": 1051.8233509306424, + "y": 441.15314644636874, + "r_eff_m": 1020.4433584823797, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": 980.686435060703, + "y": -1088.8227424239224, + "r_eff_m": 1085.5348833947269, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 17, + "x": 626.9885608585633, + "y": -666.4190554969879, + "r_eff_m": 1039.1927115702244, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": 747.1420713623061, + "y": -1607.0697161756823, + "r_eff_m": 1047.5838414380048, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": -285.32085267031505, + "y": 81.30526215269114, + "r_eff_m": 1155.1904462990838, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": 1104.7244301161581, + "y": 630.3958738282346, + "r_eff_m": 1174.5029244736986, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": -1303.7358372502276, + "y": -712.0607631779634, + "r_eff_m": 1230.3465487391618, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 5, + "x": 254.5572963795333, + "y": 1631.2907127703388, + "r_eff_m": 1401.3216851841335, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": -826.445000314019, + "y": -1510.6440872122378, + "r_eff_m": 1034.983583055589, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": -961.3476287947116, + "y": -689.0367299798689, + "r_eff_m": 1356.0025591706406, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/GM56-DFXZ-XKDM-XYV7/log.jsonl b/referee-data/sessions/GM56-DFXZ-XKDM-XYV7/log.jsonl new file mode 100644 index 0000000..4bb6c26 --- /dev/null +++ b/referee-data/sessions/GM56-DFXZ-XKDM-XYV7/log.jsonl @@ -0,0 +1,421 @@ +{"event": "session_start", "case_code": "GM56-DFXZ-XKDM-XYV7", "module": "q4_practice", "robot_id": "1", "seed": 862296605, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 16, "x": -524.5206714300155, "y": 1076.6097330631062, "r_eff_m": 1266.1144095417988, "directional": true, "heading_deg": 323.3365774469903}, {"channel": 10, "x": 712.0048721054991, "y": -350.77945242364206, "r_eff_m": 1142.2414995302777, "directional": true, "heading_deg": 256.5462028174308}, {"channel": 7, "x": 1591.9527024388633, "y": -417.6806591511811, "r_eff_m": 1488.5247138130503, "directional": true, "heading_deg": 145.9558235911333}, {"channel": 1, "x": -1088.117367198431, "y": -567.662158187589, "r_eff_m": 1174.5517593406385, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": 906.4341088975847, "y": -1164.9533159379737, "r_eff_m": 1205.6825113239083, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": -440.7136903976244, "y": -1125.6333701710744, "r_eff_m": 1392.7970264272578, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": 396.09072396953906, "y": -1233.8343338670759, "r_eff_m": 1447.254884675842, "directional": false, "heading_deg": 0.0}, {"channel": 18, "x": -924.1740699985598, "y": 1042.867539519964, "r_eff_m": 1397.743907895721, "directional": false, "heading_deg": 0.0}, {"channel": 5, "x": 404.69205111704883, "y": 1512.8465933025086, "r_eff_m": 1275.2012367943066, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": 346.29727268509714, "y": -1700.4782817821338, "r_eff_m": 1110.0997753757654, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": -848.0195414748022, "y": 647.6935881860475, "r_eff_m": 1437.3660943189293, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": 1284.0330369450317, "y": 1006.2534742058411, "r_eff_m": 1292.0520810945493, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789176627501, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789176627501, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789176627503, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176627503, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789176627504, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176627504, "virtual_time_s": 11.0, "measure_result": "direction", "svd_deg": 142.87}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789176627538, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176627538, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789176627539, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176627539, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789176627539, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176627539, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789176627540, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176627540, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789176627540, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176627540, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789176627541, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176627541, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789176627542, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176627542, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789176627543, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176627543, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789176627543, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176627543, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789176627544, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176627544, "virtual_time_s": 71.0, "measure_result": "direction", "svd_deg": 249.23000000000002}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789176627578, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176627578, "virtual_time_s": 77.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789176627579, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176627579, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789176627579, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176627579, "virtual_time_s": 89.0, "measure_result": "direction", "svd_deg": 287.02}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789176627614, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627614, "virtual_time_s": 95.0, "measure_result": "direction", "svd_deg": 115.81}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789176627648, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176627648, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789176627649, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176627649, "virtual_time_s": 107.0, "measure_result": "direction", "svd_deg": 131.59}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789176627683, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176627683, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789176627684, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176627684, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789176627792, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0022", "position": {"x": 203.4343811666737, "y": 144.6893122685409}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627792, "virtual_time_s": 174.928166, "measure_result": "direction", "svd_deg": 128.82}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789176627826, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0023", "position": {"x": -311.2425550798696, "y": 834.1583620758665}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627826, "virtual_time_s": 352.004884, "measure_result": "direction", "svd_deg": 131.54}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789176627848, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0024", "position": {"x": -417.950364283015, "y": 970.4361579464362}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627848, "virtual_time_s": 391.621755, "measure_result": "direction", "svd_deg": 134.21}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789176627864, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0025", "position": {"x": -480.46143877622444, "y": 1037.7141305929167}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627864, "virtual_time_s": 414.989074, "measure_result": "direction", "svd_deg": 137.8}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789176627879, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0026", "position": {"x": -495.83724096621324, "y": 1048.755585943092}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627879, "virtual_time_s": 423.77499, "measure_result": "direction", "svd_deg": 135.92}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789176627891, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0027", "position": {"x": -502.6708670887933, "y": 1055.235185439503}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627891, "virtual_time_s": 430.65843, "measure_result": "direction", "svd_deg": 135.46}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789176627907, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0028", "position": {"x": -504.15939756610106, "y": 1056.6465909981732}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627907, "virtual_time_s": 436.068688, "measure_result": "direction", "svd_deg": 136.32}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789176627919, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0029", "position": {"x": -509.2545636173579, "y": 1061.3274324862907}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627919, "virtual_time_s": 442.452465, "measure_result": "direction", "svd_deg": 134.7}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789176627921, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0030", "position": {"x": -530.0, "y": 1070.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176627921, "virtual_time_s": 451.949515, "clear_result": "success"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789176628039, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0031", "position": {"x": -497.5578416531835, "y": 936.4798565361209}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176628039, "virtual_time_s": 485.430507, "measure_result": "direction", "svd_deg": 165.91}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789176628056, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0032", "position": {"x": -870.5044046825748, "y": 986.9651951603664}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176628056, "virtual_time_s": 565.700131, "measure_result": "direction", "svd_deg": 134.69}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789176628058, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0033", "position": {"x": -928.1968994917735, "y": 1044.8514975713322}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176628058, "virtual_time_s": 587.045464, "clear_result": "success"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789176628166, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0034", "position": {"x": -862.9906179313325, "y": 718.4282467255796}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176628166, "virtual_time_s": 659.619933, "measure_result": "direction", "svd_deg": 282.52}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789176628176, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0035", "position": {"x": -845.1130456790994, "y": 686.001392824461}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176628176, "virtual_time_s": 672.025629, "measure_result": "direction", "svd_deg": 265.87}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789176628177, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0036", "position": {"x": -847.6746007769079, "y": 648.9342354479113}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176628177, "virtual_time_s": 684.456741, "clear_result": "success"}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789176628291, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0037", "position": {"x": -265.37802696051864, "y": 48.506777636046536}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176628291, "virtual_time_s": 857.73883, "measure_result": "direction", "svd_deg": 260.6}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789176628326, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0038", "position": {"x": -469.75721825078074, "y": -993.1945205185655}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176628326, "virtual_time_s": 1075.051095, "measure_result": "direction", "svd_deg": 282.38}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789176628327, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0039", "position": {"x": -441.5215936013995, "y": -1123.0747819124222}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176628327, "virtual_time_s": 1106.633896, "clear_result": "success"}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789176628449, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0040", "position": {"x": -311.5453347487594, "y": -1247.9984385205082}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176628448, "virtual_time_s": 1148.689269, "measure_result": "direction", "svd_deg": 2.01}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789176628465, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0041", "position": {"x": 344.2647005168924, "y": -1193.49630528446}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176628465, "virtual_time_s": 1285.303445, "measure_result": "direction", "svd_deg": 322.55}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789176628474, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0042", "position": {"x": 362.93782740943095, "y": -1202.306532513895}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176628474, "virtual_time_s": 1294.43288, "measure_result": "direction", "svd_deg": 315.62}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789176628475, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0043", "position": {"x": 389.58153144171735, "y": -1228.1021047955844}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176628475, "virtual_time_s": 1306.849883, "clear_result": "success"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789176628476, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0044", "position": {"x": 600.0, "y": -1400.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176628476, "virtual_time_s": 1367.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789176628476, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0045", "position": {"x": 600.0, "y": -1400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176628476, "virtual_time_s": 1373.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789176628477, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0046", "position": {"x": 600.0, "y": -1400.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176628477, "virtual_time_s": 1379.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789176628477, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0047", "position": {"x": 600.0, "y": -1400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176628477, "virtual_time_s": 1385.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789176628478, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0048", "position": {"x": 600.0, "y": -1400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176628478, "virtual_time_s": 1391.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789176628479, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0049", "position": {"x": 600.0, "y": -1400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176628479, "virtual_time_s": 1397.191329, "measure_result": "direction", "svd_deg": 44.78}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789176628507, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0050", "position": {"x": 600.0, "y": -1400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176628507, "virtual_time_s": 1403.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789176628508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0051", "position": {"x": 600.0, "y": -1400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176628508, "virtual_time_s": 1409.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789176628508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0052", "position": {"x": 600.0, "y": -1400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176628508, "virtual_time_s": 1415.191329, "measure_result": "direction", "svd_deg": 83.87}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789176628537, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0053", "position": {"x": 600.0, "y": -1400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176628537, "virtual_time_s": 1421.191329, "measure_result": "direction", "svd_deg": 36.51}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789176628566, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0054", "position": {"x": 600.0, "y": -1400.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628566, "virtual_time_s": 1427.191329, "measure_result": "direction", "svd_deg": 229.98}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789176628595, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0055", "position": {"x": 600.0, "y": -1400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176628595, "virtual_time_s": 1433.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789176628596, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0056", "position": {"x": 600.0, "y": -1400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176628596, "virtual_time_s": 1439.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789176628597, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0057", "position": {"x": 600.0, "y": -1400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176628597, "virtual_time_s": 1445.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789176628598, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0058", "position": {"x": 600.0, "y": -1400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176628598, "virtual_time_s": 1451.191329, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789176628635, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0059", "position": {"x": 612.769143781833, "y": -1411.9126285523905}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628635, "virtual_time_s": 1460.68396, "measure_result": "direction", "svd_deg": 228.03}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789176628656, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0060", "position": {"x": 488.28892399223247, "y": -1555.258637843486}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628656, "virtual_time_s": 1503.654161, "measure_result": "direction", "svd_deg": 225.09}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789176628680, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0061", "position": {"x": 464.24008775648366, "y": -1581.4091281036367}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628680, "virtual_time_s": 1515.759637, "measure_result": "direction", "svd_deg": 225.74}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789176628702, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0062", "position": {"x": 443.4541092572734, "y": -1604.012442774533}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628701, "virtual_time_s": 1526.90119, "measure_result": "direction", "svd_deg": 225.37}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789176628723, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0063", "position": {"x": 435.3536321162203, "y": -1612.8214287026208}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628723, "virtual_time_s": 1534.294647, "measure_result": "direction", "svd_deg": 224.12}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789176628741, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0064", "position": {"x": 431.6884641242621, "y": -1616.0029103437198}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628741, "virtual_time_s": 1540.265323, "measure_result": "direction", "svd_deg": 225.56}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789176628755, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0065", "position": {"x": 424.90388434893435, "y": -1623.0873437184766}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628755, "virtual_time_s": 1547.227156, "measure_result": "direction", "svd_deg": 224.55}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789176628769, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0066", "position": {"x": 424.90388434893435, "y": -1623.0873437184766}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628769, "virtual_time_s": 1552.227156, "measure_result": "direction", "svd_deg": 224.55}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789176628770, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0067", "position": {"x": 390.0, "y": -1650.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628770, "virtual_time_s": 1564.04208, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789176628771, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0068", "position": {"x": 390.0, "y": -1670.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628771, "virtual_time_s": 1571.04208, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789176628771, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0069", "position": {"x": 370.0, "y": -1670.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628771, "virtual_time_s": 1578.04208, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789176628772, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0070", "position": {"x": 370.0, "y": -1690.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628772, "virtual_time_s": 1585.04208, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789176628772, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0071", "position": {"x": 350.0, "y": -1690.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176628772, "virtual_time_s": 1594.04208, "clear_result": "success"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789176628874, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0072", "position": {"x": 411.79373555366476, "y": -1717.838581828962}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176628874, "virtual_time_s": 1613.597083, "measure_result": "direction", "svd_deg": 49.15}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789176628892, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0073", "position": {"x": 766.8838287107096, "y": -1296.2930792223774}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176628892, "virtual_time_s": 1728.831304, "measure_result": "direction", "svd_deg": 44.09}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789176628909, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0074", "position": {"x": 800.7301756620684, "y": -1266.6704889596645}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176628909, "virtual_time_s": 1742.827021, "measure_result": "direction", "svd_deg": 43.75}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789176628923, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0075", "position": {"x": 820.3781924062749, "y": -1249.3764003674905}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176628923, "virtual_time_s": 1753.062019, "measure_result": "direction", "svd_deg": 44.6}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789176628935, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0076", "position": {"x": 844.4958977984477, "y": -1225.8950853428623}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176628935, "virtual_time_s": 1764.794139, "measure_result": "direction", "svd_deg": 45.05}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789176628945, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0077", "position": {"x": 855.9562038575117, "y": -1214.7371822060427}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176628945, "virtual_time_s": 1772.993123, "measure_result": "direction", "svd_deg": 44.9}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789176628955, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0078", "position": {"x": 865.9179588599695, "y": -1205.038289492462}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176628955, "virtual_time_s": 1780.773807, "measure_result": "direction", "svd_deg": 43.98}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789176628956, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0079", "position": {"x": 898.21078066507, "y": -1173.1730975244195}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176628955, "virtual_time_s": 1794.847322, "clear_result": "success"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789176629078, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0080", "position": {"x": 866.8151916328336, "y": -1136.3661336833432}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629078, "virtual_time_s": 1810.522932, "measure_result": "direction", "svd_deg": 44.48}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789176629176, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0081", "position": {"x": 871.4749861156209, "y": -1141.0811615347607}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629176, "virtual_time_s": 1816.848755, "measure_result": "direction", "svd_deg": 44.56}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789176629261, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0082", "position": {"x": 835.0610147818679, "y": -1181.2600790843733}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629261, "virtual_time_s": 1832.693704, "measure_result": "direction", "svd_deg": 45.09}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789176629343, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0083", "position": {"x": 834.9071059567416, "y": -1181.1002911848286}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629343, "virtual_time_s": 1837.738075, "measure_result": "direction", "svd_deg": 45.24}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789176629428, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0084", "position": {"x": 834.8004921492156, "y": -1180.9897369495718}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629428, "virtual_time_s": 1842.768792, "measure_result": "direction", "svd_deg": 44.67}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789176629512, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0085", "position": {"x": 864.7230500744597, "y": -1151.0671790243275}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629512, "virtual_time_s": 1856.232169, "measure_result": "direction", "svd_deg": 45.95}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789176629589, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0086", "position": {"x": 860.4040223975106, "y": -1146.6963845782388}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629589, "virtual_time_s": 1862.461117, "measure_result": "direction", "svd_deg": 45.79}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789176629648, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0087", "position": {"x": 979.6223276288076, "y": -1025.3778081444027}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629648, "virtual_time_s": 1901.479466, "measure_result": "direction", "svd_deg": 45.37}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789176629652, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0088", "position": {"x": 1130.0, "y": -870.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629652, "virtual_time_s": 1947.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789176629653, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0089", "position": {"x": 1150.0, "y": -870.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629653, "virtual_time_s": 1954.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789176629653, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0090", "position": {"x": 1150.0, "y": -850.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629653, "virtual_time_s": 1961.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789176629654, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0091", "position": {"x": 1170.0, "y": -850.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629654, "virtual_time_s": 1968.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789176629654, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0092", "position": {"x": 1170.0, "y": -830.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629654, "virtual_time_s": 1975.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789176629655, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0093", "position": {"x": 1190.0, "y": -830.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629655, "virtual_time_s": 1982.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789176629656, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0094", "position": {"x": 1190.0, "y": -810.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629656, "virtual_time_s": 1989.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789176629656, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0095", "position": {"x": 1210.0, "y": -810.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629656, "virtual_time_s": 1996.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789176629657, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0096", "position": {"x": 1210.0, "y": -790.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629657, "virtual_time_s": 2003.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789176629658, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0097", "position": {"x": 1230.0, "y": -790.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629658, "virtual_time_s": 2010.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789176629658, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0098", "position": {"x": 1230.0, "y": -770.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629658, "virtual_time_s": 2017.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789176629659, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0099", "position": {"x": 1250.0, "y": -770.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629659, "virtual_time_s": 2024.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789176629660, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0100", "position": {"x": 1250.0, "y": -750.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629660, "virtual_time_s": 2031.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789176629660, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0101", "position": {"x": 1270.0, "y": -750.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629660, "virtual_time_s": 2038.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789176629661, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0102", "position": {"x": 1270.0, "y": -730.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629661, "virtual_time_s": 2045.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789176629661, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0103", "position": {"x": 1290.0, "y": -730.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629661, "virtual_time_s": 2052.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789176629662, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0104", "position": {"x": 1290.0, "y": -710.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629662, "virtual_time_s": 2059.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789176629662, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0105", "position": {"x": 1310.0, "y": -710.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629662, "virtual_time_s": 2066.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789176629663, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0106", "position": {"x": 1310.0, "y": -690.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629663, "virtual_time_s": 2073.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789176629664, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0107", "position": {"x": 1330.0, "y": -690.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629664, "virtual_time_s": 2080.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789176629664, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0108", "position": {"x": 1330.0, "y": -670.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629664, "virtual_time_s": 2087.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789176629665, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0109", "position": {"x": 1350.0, "y": -670.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629665, "virtual_time_s": 2094.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789176629666, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0110", "position": {"x": 1350.0, "y": -650.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629666, "virtual_time_s": 2101.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789176629666, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0111", "position": {"x": 1370.0, "y": -650.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629666, "virtual_time_s": 2108.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789176629667, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0112", "position": {"x": 1370.0, "y": -630.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629667, "virtual_time_s": 2115.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789176629667, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0113", "position": {"x": 1390.0, "y": -630.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629667, "virtual_time_s": 2122.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789176629668, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0114", "position": {"x": 1390.0, "y": -610.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629668, "virtual_time_s": 2129.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789176629669, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0115", "position": {"x": 1410.0, "y": -610.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629669, "virtual_time_s": 2136.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789176629669, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0116", "position": {"x": 1410.0, "y": -590.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629669, "virtual_time_s": 2143.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789176629670, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0117", "position": {"x": 1430.0, "y": -590.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629670, "virtual_time_s": 2150.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789176629670, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0118", "position": {"x": 1430.0, "y": -570.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629670, "virtual_time_s": 2157.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789176629671, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0119", "position": {"x": 1450.0, "y": -570.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629671, "virtual_time_s": 2164.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789176629672, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0120", "position": {"x": 1450.0, "y": -550.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629671, "virtual_time_s": 2171.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789176629672, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0121", "position": {"x": 1470.0, "y": -550.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629672, "virtual_time_s": 2178.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789176629673, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0122", "position": {"x": 1470.0, "y": -530.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629673, "virtual_time_s": 2185.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789176629673, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0123", "position": {"x": 1490.0, "y": -530.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629673, "virtual_time_s": 2192.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789176629674, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0124", "position": {"x": 1490.0, "y": -510.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629674, "virtual_time_s": 2199.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789176629674, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0125", "position": {"x": 1510.0, "y": -510.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629674, "virtual_time_s": 2206.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789176629675, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0126", "position": {"x": 1510.0, "y": -490.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629675, "virtual_time_s": 2213.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789176629675, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0127", "position": {"x": 1510.0, "y": -470.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629675, "virtual_time_s": 2220.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 128, "wall_ts_ms": 1789176629676, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0128", "position": {"x": 1530.0, "y": -470.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629676, "virtual_time_s": 2227.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 129, "wall_ts_ms": 1789176629676, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0129", "position": {"x": 1530.0, "y": -490.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629676, "virtual_time_s": 2234.725602, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 130, "wall_ts_ms": 1789176629677, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0130", "position": {"x": 1550.0, "y": -470.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629677, "virtual_time_s": 2243.382456, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 131, "wall_ts_ms": 1789176629677, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0131", "position": {"x": 1550.0, "y": -450.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629677, "virtual_time_s": 2250.382456, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 132, "wall_ts_ms": 1789176629678, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0132", "position": {"x": 1530.0, "y": -450.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629678, "virtual_time_s": 2257.382456, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 133, "wall_ts_ms": 1789176629678, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0133", "position": {"x": 1550.0, "y": -430.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629678, "virtual_time_s": 2266.03931, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 134, "wall_ts_ms": 1789176629679, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0134", "position": {"x": 1570.0, "y": -430.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629679, "virtual_time_s": 2273.03931, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 135, "wall_ts_ms": 1789176629679, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0135", "position": {"x": 1570.0, "y": -450.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629679, "virtual_time_s": 2280.03931, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 136, "wall_ts_ms": 1789176629680, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0136", "position": {"x": 1590.0, "y": -430.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176629680, "virtual_time_s": 2290.696164, "clear_result": "success"}} +{"event": "action", "seq": 137, "wall_ts_ms": 1789176629790, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0137", "position": {"x": 1429.8624502943494, "y": -654.1112669539796}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176629790, "virtual_time_s": 2351.785145, "measure_result": "direction", "svd_deg": 157.78}} +{"event": "action", "seq": 138, "wall_ts_ms": 1789176629806, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0138", "position": {"x": 739.7053147276195, "y": -388.5273903936236}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176629806, "virtual_time_s": 2504.683984, "measure_result": "direction", "svd_deg": 126.53}} +{"event": "action", "seq": 139, "wall_ts_ms": 1789176629815, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0139", "position": {"x": 737.259244277467, "y": -379.09950798866356}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176629815, "virtual_time_s": 2511.63199, "measure_result": "direction", "svd_deg": 131.0}} +{"event": "action", "seq": 140, "wall_ts_ms": 1789176629816, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0140", "position": {"x": 710.6302761970189, "y": -349.5302324286764}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176629816, "virtual_time_s": 2524.590492, "clear_result": "success"}} +{"event": "action", "seq": 141, "wall_ts_ms": 1789176629817, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0141", "position": {"x": 800.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176629817, "virtual_time_s": 2602.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 142, "wall_ts_ms": 1789176629818, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0142", "position": {"x": 800.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176629818, "virtual_time_s": 2608.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 143, "wall_ts_ms": 1789176629818, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0143", "position": {"x": 800.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176629818, "virtual_time_s": 2614.745417, "measure_result": "direction", "svd_deg": 63.87}} +{"event": "action", "seq": 144, "wall_ts_ms": 1789176629851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0144", "position": {"x": 800.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176629851, "virtual_time_s": 2620.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 145, "wall_ts_ms": 1789176629851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0145", "position": {"x": 800.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176629851, "virtual_time_s": 2626.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 146, "wall_ts_ms": 1789176629852, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0146", "position": {"x": 800.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176629852, "virtual_time_s": 2632.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 147, "wall_ts_ms": 1789176629852, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0147", "position": {"x": 800.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176629852, "virtual_time_s": 2638.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 148, "wall_ts_ms": 1789176629853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0148", "position": {"x": 800.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176629853, "virtual_time_s": 2644.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 149, "wall_ts_ms": 1789176629853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0149", "position": {"x": 800.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176629853, "virtual_time_s": 2650.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 150, "wall_ts_ms": 1789176629854, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0150", "position": {"x": 800.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176629854, "virtual_time_s": 2656.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 151, "wall_ts_ms": 1789176629854, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0151", "position": {"x": 800.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176629854, "virtual_time_s": 2662.745417, "measure_result": "no_signal"}} +{"event": "action", "seq": 152, "wall_ts_ms": 1789176629944, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0152", "position": {"x": 615.2131848563207, "y": 129.68975025133534}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176629944, "virtual_time_s": 2713.89654, "measure_result": "direction", "svd_deg": 53.64}} +{"event": "action", "seq": 153, "wall_ts_ms": 1789176629973, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0153", "position": {"x": 1177.7314832954046, "y": 943.2140959095032}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176629973, "virtual_time_s": 2916.709451, "measure_result": "direction", "svd_deg": 31.61}} +{"event": "action", "seq": 154, "wall_ts_ms": 1789176629974, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0154", "position": {"x": 1279.8090675459375, "y": 1006.3704010851982}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176629974, "virtual_time_s": 2945.716577, "clear_result": "success"}} +{"event": "action", "seq": 155, "wall_ts_ms": 1789176629974, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0155", "position": {"x": 1000.0, "y": 1000.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176629974, "virtual_time_s": 3007.692892, "measure_result": "no_signal"}} +{"event": "action", "seq": 156, "wall_ts_ms": 1789176629975, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0156", "position": {"x": 1000.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176629975, "virtual_time_s": 3013.692892, "measure_result": "no_signal"}} +{"event": "action", "seq": 157, "wall_ts_ms": 1789176629976, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0157", "position": {"x": 1000.0, "y": 1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176629975, "virtual_time_s": 3019.692892, "measure_result": "direction", "svd_deg": 139.28}} +{"event": "action", "seq": 158, "wall_ts_ms": 1789176630005, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0158", "position": {"x": 1000.0, "y": 1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630005, "virtual_time_s": 3025.692892, "measure_result": "no_signal"}} +{"event": "action", "seq": 159, "wall_ts_ms": 1789176630006, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0159", "position": {"x": 1000.0, "y": 1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630006, "virtual_time_s": 3031.692892, "measure_result": "no_signal"}} +{"event": "action", "seq": 160, "wall_ts_ms": 1789176630007, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0160", "position": {"x": 1000.0, "y": 1000.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630007, "virtual_time_s": 3037.692892, "measure_result": "no_signal"}} +{"event": "action", "seq": 161, "wall_ts_ms": 1789176630008, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0161", "position": {"x": 1000.0, "y": 1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630008, "virtual_time_s": 3043.692892, "measure_result": "no_signal"}} +{"event": "action", "seq": 162, "wall_ts_ms": 1789176630008, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0162", "position": {"x": 1000.0, "y": 1000.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630008, "virtual_time_s": 3049.692892, "measure_result": "no_signal"}} +{"event": "action", "seq": 163, "wall_ts_ms": 1789176630009, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0163", "position": {"x": 1000.0, "y": 1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630009, "virtual_time_s": 3055.692892, "measure_result": "no_signal"}} +{"event": "action", "seq": 164, "wall_ts_ms": 1789176630009, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0164", "position": {"x": 1000.0, "y": 1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630009, "virtual_time_s": 3061.692892, "measure_result": "no_signal"}} +{"event": "action", "seq": 165, "wall_ts_ms": 1789176630102, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0165", "position": {"x": 961.1212618824487, "y": 957.3588710610661}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630102, "virtual_time_s": 3079.233814, "measure_result": "direction", "svd_deg": 134.72}} +{"event": "action", "seq": 166, "wall_ts_ms": 1789176630157, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0166", "position": {"x": 727.4962312194393, "y": 1188.2072757884716}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630156, "virtual_time_s": 3149.921451, "measure_result": "direction", "svd_deg": 134.94}} +{"event": "action", "seq": 167, "wall_ts_ms": 1789176630212, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0167", "position": {"x": 644.8369478160281, "y": 1264.9765735176386}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630212, "virtual_time_s": 3177.483439, "measure_result": "direction", "svd_deg": 133.41}} +{"event": "action", "seq": 168, "wall_ts_ms": 1789176630247, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0168", "position": {"x": 602.1706583987492, "y": 1317.180739025646}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630247, "virtual_time_s": 3195.967781, "measure_result": "direction", "svd_deg": 136.01}} +{"event": "action", "seq": 169, "wall_ts_ms": 1789176630277, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0169", "position": {"x": 593.2790406267442, "y": 1325.43794313003}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630277, "virtual_time_s": 3203.39465, "measure_result": "direction", "svd_deg": 135.64}} +{"event": "action", "seq": 170, "wall_ts_ms": 1789176630306, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0170", "position": {"x": 593.2790406267442, "y": 1325.43794313003}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630306, "virtual_time_s": 3208.39465, "measure_result": "direction", "svd_deg": 135.64}} +{"event": "action", "seq": 171, "wall_ts_ms": 1789176630337, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0171", "position": {"x": 593.2790406267442, "y": 1325.43794313003}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630337, "virtual_time_s": 3213.39465, "measure_result": "direction", "svd_deg": 135.64}} +{"event": "action", "seq": 172, "wall_ts_ms": 1789176630367, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0172", "position": {"x": 593.2790406267442, "y": 1325.43794313003}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630367, "virtual_time_s": 3218.39465, "measure_result": "direction", "svd_deg": 135.64}} +{"event": "action", "seq": 173, "wall_ts_ms": 1789176630369, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0173", "position": {"x": 530.0, "y": 1390.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630369, "virtual_time_s": 3239.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 174, "wall_ts_ms": 1789176630369, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0174", "position": {"x": 510.0, "y": 1390.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630369, "virtual_time_s": 3246.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 175, "wall_ts_ms": 1789176630370, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0175", "position": {"x": 510.0, "y": 1410.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630370, "virtual_time_s": 3253.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 176, "wall_ts_ms": 1789176630370, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0176", "position": {"x": 490.0, "y": 1410.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630370, "virtual_time_s": 3260.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 177, "wall_ts_ms": 1789176630371, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0177", "position": {"x": 490.0, "y": 1430.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630371, "virtual_time_s": 3267.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 178, "wall_ts_ms": 1789176630372, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0178", "position": {"x": 470.0, "y": 1430.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630372, "virtual_time_s": 3274.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 179, "wall_ts_ms": 1789176630372, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0179", "position": {"x": 470.0, "y": 1450.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630372, "virtual_time_s": 3281.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 180, "wall_ts_ms": 1789176630373, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0180", "position": {"x": 450.0, "y": 1450.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630373, "virtual_time_s": 3288.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 181, "wall_ts_ms": 1789176630373, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0181", "position": {"x": 450.0, "y": 1470.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630373, "virtual_time_s": 3295.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 182, "wall_ts_ms": 1789176630374, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0182", "position": {"x": 430.0, "y": 1470.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630374, "virtual_time_s": 3302.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 183, "wall_ts_ms": 1789176630375, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0183", "position": {"x": 430.0, "y": 1490.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630375, "virtual_time_s": 3309.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 184, "wall_ts_ms": 1789176630375, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0184", "position": {"x": 410.0, "y": 1490.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630375, "virtual_time_s": 3316.475022, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 185, "wall_ts_ms": 1789176630376, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0185", "position": {"x": 410.0, "y": 1510.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176630376, "virtual_time_s": 3325.475022, "clear_result": "success"}} +{"event": "action", "seq": 186, "wall_ts_ms": 1789176630376, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0186", "position": {"x": 400.0, "y": 1800.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630376, "virtual_time_s": 3389.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 187, "wall_ts_ms": 1789176630377, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0187", "position": {"x": 400.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630377, "virtual_time_s": 3395.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 188, "wall_ts_ms": 1789176630562, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0188", "position": {"x": 400.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630559, "virtual_time_s": 3401.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 189, "wall_ts_ms": 1789176630564, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0189", "position": {"x": 400.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630564, "virtual_time_s": 3407.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 190, "wall_ts_ms": 1789176630565, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0190", "position": {"x": 400.0, "y": 1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630565, "virtual_time_s": 3413.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 191, "wall_ts_ms": 1789176630565, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0191", "position": {"x": 400.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630565, "virtual_time_s": 3419.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 192, "wall_ts_ms": 1789176630566, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0192", "position": {"x": 400.0, "y": 1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630566, "virtual_time_s": 3425.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 193, "wall_ts_ms": 1789176630568, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0193", "position": {"x": 400.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630568, "virtual_time_s": 3431.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 194, "wall_ts_ms": 1789176630569, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0194", "position": {"x": 400.0, "y": 1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630569, "virtual_time_s": 3437.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 195, "wall_ts_ms": 1789176630570, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0195", "position": {"x": -200.0, "y": 1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630570, "virtual_time_s": 3562.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 196, "wall_ts_ms": 1789176630571, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0196", "position": {"x": -200.0, "y": 1800.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630571, "virtual_time_s": 3568.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 197, "wall_ts_ms": 1789176630572, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0197", "position": {"x": -200.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630572, "virtual_time_s": 3574.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 198, "wall_ts_ms": 1789176630572, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0198", "position": {"x": -200.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630572, "virtual_time_s": 3580.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 199, "wall_ts_ms": 1789176630573, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0199", "position": {"x": -200.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630573, "virtual_time_s": 3586.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 200, "wall_ts_ms": 1789176630574, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0200", "position": {"x": -200.0, "y": 1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630574, "virtual_time_s": 3592.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 201, "wall_ts_ms": 1789176630575, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0201", "position": {"x": -200.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630575, "virtual_time_s": 3598.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 202, "wall_ts_ms": 1789176630575, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0202", "position": {"x": -200.0, "y": 1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630575, "virtual_time_s": 3604.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 203, "wall_ts_ms": 1789176630576, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0203", "position": {"x": -200.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630576, "virtual_time_s": 3610.509495, "measure_result": "no_signal"}} +{"event": "action", "seq": 204, "wall_ts_ms": 1789176630577, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0204", "position": {"x": 0.0, "y": 1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630577, "virtual_time_s": 3780.43372, "measure_result": "no_signal"}} +{"event": "action", "seq": 205, "wall_ts_ms": 1789176630577, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0205", "position": {"x": 0.0, "y": 1000.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630577, "virtual_time_s": 3786.43372, "measure_result": "no_signal"}} +{"event": "action", "seq": 206, "wall_ts_ms": 1789176630578, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0206", "position": {"x": 0.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630578, "virtual_time_s": 3792.43372, "measure_result": "no_signal"}} +{"event": "action", "seq": 207, "wall_ts_ms": 1789176630578, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0207", "position": {"x": 0.0, "y": 1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630578, "virtual_time_s": 3798.43372, "measure_result": "no_signal"}} +{"event": "action", "seq": 208, "wall_ts_ms": 1789176630579, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0208", "position": {"x": 0.0, "y": 1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630579, "virtual_time_s": 3804.43372, "measure_result": "no_signal"}} +{"event": "action", "seq": 209, "wall_ts_ms": 1789176630579, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0209", "position": {"x": 0.0, "y": 1000.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630579, "virtual_time_s": 3810.43372, "measure_result": "no_signal"}} +{"event": "action", "seq": 210, "wall_ts_ms": 1789176630580, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0210", "position": {"x": 0.0, "y": 1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630580, "virtual_time_s": 3816.43372, "measure_result": "no_signal"}} +{"event": "action", "seq": 211, "wall_ts_ms": 1789176630580, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0211", "position": {"x": 0.0, "y": 1000.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630580, "virtual_time_s": 3822.43372, "measure_result": "no_signal"}} +{"event": "action", "seq": 212, "wall_ts_ms": 1789176630581, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0212", "position": {"x": 0.0, "y": 1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630581, "virtual_time_s": 3828.43372, "measure_result": "no_signal"}} +{"event": "action", "seq": 213, "wall_ts_ms": 1789176630581, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0213", "position": {"x": -200.0, "y": 400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630581, "virtual_time_s": 3959.924826, "measure_result": "no_signal"}} +{"event": "action", "seq": 214, "wall_ts_ms": 1789176630582, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0214", "position": {"x": -200.0, "y": 400.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630582, "virtual_time_s": 3965.924826, "measure_result": "no_signal"}} +{"event": "action", "seq": 215, "wall_ts_ms": 1789176630582, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0215", "position": {"x": -200.0, "y": 400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630582, "virtual_time_s": 3971.924826, "measure_result": "no_signal"}} +{"event": "action", "seq": 216, "wall_ts_ms": 1789176630583, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0216", "position": {"x": -200.0, "y": 400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630583, "virtual_time_s": 3977.924826, "measure_result": "no_signal"}} +{"event": "action", "seq": 217, "wall_ts_ms": 1789176630584, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0217", "position": {"x": -200.0, "y": 400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630583, "virtual_time_s": 3983.924826, "measure_result": "no_signal"}} +{"event": "action", "seq": 218, "wall_ts_ms": 1789176630584, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0218", "position": {"x": -200.0, "y": 400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630584, "virtual_time_s": 3989.924826, "measure_result": "no_signal"}} +{"event": "action", "seq": 219, "wall_ts_ms": 1789176630585, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0219", "position": {"x": -200.0, "y": 400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630585, "virtual_time_s": 3995.924826, "measure_result": "no_signal"}} +{"event": "action", "seq": 220, "wall_ts_ms": 1789176630585, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0220", "position": {"x": -200.0, "y": 400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630585, "virtual_time_s": 4001.924826, "measure_result": "no_signal"}} +{"event": "action", "seq": 221, "wall_ts_ms": 1789176630586, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0221", "position": {"x": -200.0, "y": 400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630586, "virtual_time_s": 4007.924826, "measure_result": "no_signal"}} +{"event": "action", "seq": 222, "wall_ts_ms": 1789176630586, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0222", "position": {"x": -800.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630586, "virtual_time_s": 4157.146877, "measure_result": "no_signal"}} +{"event": "action", "seq": 223, "wall_ts_ms": 1789176630587, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0223", "position": {"x": -800.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630587, "virtual_time_s": 4163.146877, "measure_result": "direction", "svd_deg": 244.07999999999998}} +{"event": "action", "seq": 224, "wall_ts_ms": 1789176630618, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0224", "position": {"x": -800.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630618, "virtual_time_s": 4169.146877, "measure_result": "no_signal"}} +{"event": "action", "seq": 225, "wall_ts_ms": 1789176630619, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0225", "position": {"x": -800.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630619, "virtual_time_s": 4175.146877, "measure_result": "no_signal"}} +{"event": "action", "seq": 226, "wall_ts_ms": 1789176630619, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0226", "position": {"x": -800.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630619, "virtual_time_s": 4181.146877, "measure_result": "no_signal"}} +{"event": "action", "seq": 227, "wall_ts_ms": 1789176630620, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0227", "position": {"x": -800.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630620, "virtual_time_s": 4187.146877, "measure_result": "no_signal"}} +{"event": "action", "seq": 228, "wall_ts_ms": 1789176630620, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0228", "position": {"x": -800.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630620, "virtual_time_s": 4193.146877, "measure_result": "no_signal"}} +{"event": "action", "seq": 229, "wall_ts_ms": 1789176630621, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0229", "position": {"x": -800.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630621, "virtual_time_s": 4199.146877, "measure_result": "no_signal"}} +{"event": "action", "seq": 230, "wall_ts_ms": 1789176630622, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0230", "position": {"x": -800.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630622, "virtual_time_s": 4205.146877, "measure_result": "no_signal"}} +{"event": "action", "seq": 231, "wall_ts_ms": 1789176630712, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0231", "position": {"x": -612.7393373735924, "y": -130.91442858438631}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630712, "virtual_time_s": 4256.843767, "measure_result": "direction", "svd_deg": 222.42}} +{"event": "action", "seq": 232, "wall_ts_ms": 1789176630729, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0232", "position": {"x": -1006.5000668981338, "y": -486.82119505919434}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630729, "virtual_time_s": 4367.997832, "measure_result": "direction", "svd_deg": 224.01}} +{"event": "action", "seq": 233, "wall_ts_ms": 1789176630741, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0233", "position": {"x": -1028.1817467480657, "y": -507.3587406401402}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630741, "virtual_time_s": 4378.970724, "measure_result": "direction", "svd_deg": 224.99}} +{"event": "action", "seq": 234, "wall_ts_ms": 1789176630755, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0234", "position": {"x": -1029.2304268190826, "y": -508.76489554880675}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630755, "virtual_time_s": 4384.321552, "measure_result": "direction", "svd_deg": 224.82}} +{"event": "action", "seq": 235, "wall_ts_ms": 1789176630769, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0235", "position": {"x": -1029.6867212721636, "y": -509.3769214602712}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630769, "virtual_time_s": 4389.474232, "measure_result": "direction", "svd_deg": 225.27}} +{"event": "action", "seq": 236, "wall_ts_ms": 1789176630782, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0236", "position": {"x": -1030.2048717132175, "y": -510.072059916583}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630782, "virtual_time_s": 4394.647633, "measure_result": "direction", "svd_deg": 224.0}} +{"event": "action", "seq": 237, "wall_ts_ms": 1789176630795, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0237", "position": {"x": -1030.5146387597, "y": -510.13828087271185}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630795, "virtual_time_s": 4399.710986, "measure_result": "direction", "svd_deg": 224.73}} +{"event": "action", "seq": 238, "wall_ts_ms": 1789176630807, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0238", "position": {"x": -1030.5146387597, "y": -510.13828087271185}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630807, "virtual_time_s": 4404.710986, "measure_result": "direction", "svd_deg": 224.73}} +{"event": "action", "seq": 239, "wall_ts_ms": 1789176630808, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0239", "position": {"x": -1050.0, "y": -530.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630808, "virtual_time_s": 4413.275758, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 240, "wall_ts_ms": 1789176630809, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0240", "position": {"x": -1070.0, "y": -530.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630809, "virtual_time_s": 4420.275758, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 241, "wall_ts_ms": 1789176630810, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0241", "position": {"x": -1070.0, "y": -550.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630810, "virtual_time_s": 4427.275758, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 242, "wall_ts_ms": 1789176630810, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0242", "position": {"x": -1090.0, "y": -550.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176630810, "virtual_time_s": 4436.275758, "clear_result": "success"}} +{"event": "action", "seq": 243, "wall_ts_ms": 1789176630811, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0243", "position": {"x": -1200.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630811, "virtual_time_s": 4534.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 244, "wall_ts_ms": 1789176630811, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0244", "position": {"x": -1200.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630811, "virtual_time_s": 4540.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 245, "wall_ts_ms": 1789176630812, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0245", "position": {"x": -1200.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630812, "virtual_time_s": 4546.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 246, "wall_ts_ms": 1789176630812, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0246", "position": {"x": -1200.0, "y": -1000.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630812, "virtual_time_s": 4552.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 247, "wall_ts_ms": 1789176630813, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0247", "position": {"x": -1200.0, "y": -1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630813, "virtual_time_s": 4558.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 248, "wall_ts_ms": 1789176630814, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0248", "position": {"x": -1200.0, "y": -1000.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630814, "virtual_time_s": 4564.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 249, "wall_ts_ms": 1789176630814, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0249", "position": {"x": -1200.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630814, "virtual_time_s": 4570.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 250, "wall_ts_ms": 1789176630815, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0250", "position": {"x": -1200.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630815, "virtual_time_s": 4576.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 251, "wall_ts_ms": 1789176630815, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0251", "position": {"x": -600.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630815, "virtual_time_s": 4701.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 252, "wall_ts_ms": 1789176630816, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0252", "position": {"x": -600.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630816, "virtual_time_s": 4707.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 253, "wall_ts_ms": 1789176630816, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0253", "position": {"x": -600.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630816, "virtual_time_s": 4713.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 254, "wall_ts_ms": 1789176630817, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0254", "position": {"x": -600.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630817, "virtual_time_s": 4719.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 255, "wall_ts_ms": 1789176630817, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0255", "position": {"x": -600.0, "y": -1000.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630817, "virtual_time_s": 4725.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 256, "wall_ts_ms": 1789176630818, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0256", "position": {"x": -600.0, "y": -1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630818, "virtual_time_s": 4731.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 257, "wall_ts_ms": 1789176630818, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0257", "position": {"x": -600.0, "y": -1000.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630818, "virtual_time_s": 4737.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 258, "wall_ts_ms": 1789176630819, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0258", "position": {"x": -600.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630819, "virtual_time_s": 4743.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 259, "wall_ts_ms": 1789176630820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0259", "position": {"x": 0.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630820, "virtual_time_s": 4868.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 260, "wall_ts_ms": 1789176630820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0260", "position": {"x": 0.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630820, "virtual_time_s": 4874.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 261, "wall_ts_ms": 1789176630821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0261", "position": {"x": 0.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630821, "virtual_time_s": 4880.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 262, "wall_ts_ms": 1789176630821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0262", "position": {"x": 0.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630821, "virtual_time_s": 4886.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 263, "wall_ts_ms": 1789176630822, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0263", "position": {"x": 0.0, "y": -1000.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630822, "virtual_time_s": 4892.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 264, "wall_ts_ms": 1789176630822, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0264", "position": {"x": 0.0, "y": -1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630822, "virtual_time_s": 4898.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 265, "wall_ts_ms": 1789176630823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0265", "position": {"x": 0.0, "y": -1000.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630823, "virtual_time_s": 4904.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 266, "wall_ts_ms": 1789176630823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0266", "position": {"x": 0.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630823, "virtual_time_s": 4910.925637, "measure_result": "no_signal"}} +{"event": "action", "seq": 267, "wall_ts_ms": 1789176630824, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0267", "position": {"x": 400.0, "y": -800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630824, "virtual_time_s": 5005.368356, "measure_result": "no_signal"}} +{"event": "action", "seq": 268, "wall_ts_ms": 1789176630824, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0268", "position": {"x": 400.0, "y": -800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630824, "virtual_time_s": 5011.368356, "measure_result": "no_signal"}} +{"event": "action", "seq": 269, "wall_ts_ms": 1789176630825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0269", "position": {"x": 400.0, "y": -800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630825, "virtual_time_s": 5017.368356, "measure_result": "no_signal"}} +{"event": "action", "seq": 270, "wall_ts_ms": 1789176630826, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0270", "position": {"x": 400.0, "y": -800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630826, "virtual_time_s": 5023.368356, "measure_result": "no_signal"}} +{"event": "action", "seq": 271, "wall_ts_ms": 1789176630826, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0271", "position": {"x": 400.0, "y": -800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630826, "virtual_time_s": 5029.368356, "measure_result": "no_signal"}} +{"event": "action", "seq": 272, "wall_ts_ms": 1789176630827, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0272", "position": {"x": 400.0, "y": -800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630827, "virtual_time_s": 5035.368356, "measure_result": "no_signal"}} +{"event": "action", "seq": 273, "wall_ts_ms": 1789176630827, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0273", "position": {"x": 400.0, "y": -800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630827, "virtual_time_s": 5041.368356, "measure_result": "no_signal"}} +{"event": "action", "seq": 274, "wall_ts_ms": 1789176630828, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0274", "position": {"x": 400.0, "y": -800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630828, "virtual_time_s": 5047.368356, "measure_result": "no_signal"}} +{"event": "action", "seq": 275, "wall_ts_ms": 1789176630828, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0275", "position": {"x": 1000.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630828, "virtual_time_s": 5178.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 276, "wall_ts_ms": 1789176630829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0276", "position": {"x": 1000.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630829, "virtual_time_s": 5184.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 277, "wall_ts_ms": 1789176630829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0277", "position": {"x": 1000.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630829, "virtual_time_s": 5190.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 278, "wall_ts_ms": 1789176630830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0278", "position": {"x": 1000.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630830, "virtual_time_s": 5196.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 279, "wall_ts_ms": 1789176630830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0279", "position": {"x": 1000.0, "y": -1000.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630830, "virtual_time_s": 5202.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 280, "wall_ts_ms": 1789176630831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0280", "position": {"x": 1000.0, "y": -1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630831, "virtual_time_s": 5208.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 281, "wall_ts_ms": 1789176630832, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0281", "position": {"x": 1000.0, "y": -1000.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630832, "virtual_time_s": 5214.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 282, "wall_ts_ms": 1789176630832, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0282", "position": {"x": 1000.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630832, "virtual_time_s": 5220.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 283, "wall_ts_ms": 1789176630833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0283", "position": {"x": 1000.0, "y": -1600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630833, "virtual_time_s": 5345.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 284, "wall_ts_ms": 1789176630833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0284", "position": {"x": 1000.0, "y": -1600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630833, "virtual_time_s": 5351.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 285, "wall_ts_ms": 1789176630834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0285", "position": {"x": 1000.0, "y": -1600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630834, "virtual_time_s": 5357.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 286, "wall_ts_ms": 1789176630834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0286", "position": {"x": 1000.0, "y": -1600.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630834, "virtual_time_s": 5363.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 287, "wall_ts_ms": 1789176630835, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0287", "position": {"x": 1000.0, "y": -1600.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630835, "virtual_time_s": 5369.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 288, "wall_ts_ms": 1789176630835, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0288", "position": {"x": 1000.0, "y": -1600.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630835, "virtual_time_s": 5375.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 289, "wall_ts_ms": 1789176630836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0289", "position": {"x": 1000.0, "y": -1600.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630836, "virtual_time_s": 5381.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 290, "wall_ts_ms": 1789176630836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0290", "position": {"x": 1000.0, "y": -1600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630836, "virtual_time_s": 5387.859462, "measure_result": "no_signal"}} +{"event": "action", "seq": 291, "wall_ts_ms": 1789176630837, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0291", "position": {"x": 800.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630837, "virtual_time_s": 5449.428004, "measure_result": "no_signal"}} +{"event": "action", "seq": 292, "wall_ts_ms": 1789176630837, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0292", "position": {"x": 800.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630837, "virtual_time_s": 5455.428004, "measure_result": "no_signal"}} +{"event": "action", "seq": 293, "wall_ts_ms": 1789176630838, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0293", "position": {"x": 800.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630838, "virtual_time_s": 5461.428004, "measure_result": "no_signal"}} +{"event": "action", "seq": 294, "wall_ts_ms": 1789176630838, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0294", "position": {"x": 800.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630838, "virtual_time_s": 5467.428004, "measure_result": "no_signal"}} +{"event": "action", "seq": 295, "wall_ts_ms": 1789176630839, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0295", "position": {"x": 800.0, "y": -1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630839, "virtual_time_s": 5473.428004, "measure_result": "no_signal"}} +{"event": "action", "seq": 296, "wall_ts_ms": 1789176630839, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0296", "position": {"x": 800.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630839, "virtual_time_s": 5479.428004, "measure_result": "no_signal"}} +{"event": "action", "seq": 297, "wall_ts_ms": 1789176630840, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0297", "position": {"x": 800.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630840, "virtual_time_s": 5485.428004, "measure_result": "no_signal"}} +{"event": "action", "seq": 298, "wall_ts_ms": 1789176630840, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0298", "position": {"x": 800.0, "y": -1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630840, "virtual_time_s": 5491.428004, "measure_result": "no_signal"}} +{"event": "action", "seq": 299, "wall_ts_ms": 1789176630841, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0299", "position": {"x": -200.0, "y": -2200.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630841, "virtual_time_s": 5711.834596, "measure_result": "no_signal"}} +{"event": "action", "seq": 300, "wall_ts_ms": 1789176630841, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0300", "position": {"x": -200.0, "y": -2200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630841, "virtual_time_s": 5717.834596, "measure_result": "no_signal"}} +{"event": "action", "seq": 301, "wall_ts_ms": 1789176630842, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0301", "position": {"x": -200.0, "y": -2200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630842, "virtual_time_s": 5723.834596, "measure_result": "no_signal"}} +{"event": "action", "seq": 302, "wall_ts_ms": 1789176630842, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0302", "position": {"x": -200.0, "y": -2200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630842, "virtual_time_s": 5729.834596, "measure_result": "no_signal"}} +{"event": "action", "seq": 303, "wall_ts_ms": 1789176630843, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0303", "position": {"x": -200.0, "y": -2200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630843, "virtual_time_s": 5735.834596, "measure_result": "no_signal"}} +{"event": "action", "seq": 304, "wall_ts_ms": 1789176630843, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0304", "position": {"x": -200.0, "y": -2200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630843, "virtual_time_s": 5741.834596, "measure_result": "no_signal"}} +{"event": "action", "seq": 305, "wall_ts_ms": 1789176630844, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0305", "position": {"x": -200.0, "y": -2200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630844, "virtual_time_s": 5747.834596, "measure_result": "no_signal"}} +{"event": "action", "seq": 306, "wall_ts_ms": 1789176630844, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0306", "position": {"x": -200.0, "y": -2200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630844, "virtual_time_s": 5753.834596, "measure_result": "no_signal"}} +{"event": "action", "seq": 307, "wall_ts_ms": 1789176630845, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0307", "position": {"x": -400.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630845, "virtual_time_s": 5848.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 308, "wall_ts_ms": 1789176630845, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0308", "position": {"x": -400.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630845, "virtual_time_s": 5854.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 309, "wall_ts_ms": 1789176630846, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0309", "position": {"x": -400.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630846, "virtual_time_s": 5860.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 310, "wall_ts_ms": 1789176630846, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0310", "position": {"x": -400.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630846, "virtual_time_s": 5866.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 311, "wall_ts_ms": 1789176630847, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0311", "position": {"x": -400.0, "y": -1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630847, "virtual_time_s": 5872.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 312, "wall_ts_ms": 1789176630847, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0312", "position": {"x": -400.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630847, "virtual_time_s": 5878.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 313, "wall_ts_ms": 1789176630848, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0313", "position": {"x": -400.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630848, "virtual_time_s": 5884.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 314, "wall_ts_ms": 1789176630848, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0314", "position": {"x": -400.0, "y": -1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630848, "virtual_time_s": 5890.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 315, "wall_ts_ms": 1789176630849, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0315", "position": {"x": -1400.0, "y": -1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630849, "virtual_time_s": 6095.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 316, "wall_ts_ms": 1789176630849, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0316", "position": {"x": -1400.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630849, "virtual_time_s": 6101.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 317, "wall_ts_ms": 1789176630850, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0317", "position": {"x": -1400.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630850, "virtual_time_s": 6107.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 318, "wall_ts_ms": 1789176630850, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0318", "position": {"x": -1400.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630850, "virtual_time_s": 6113.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 319, "wall_ts_ms": 1789176630851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0319", "position": {"x": -1400.0, "y": -1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630851, "virtual_time_s": 6119.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 320, "wall_ts_ms": 1789176630851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0320", "position": {"x": -1400.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630851, "virtual_time_s": 6125.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 321, "wall_ts_ms": 1789176630852, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0321", "position": {"x": -1400.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630852, "virtual_time_s": 6131.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 322, "wall_ts_ms": 1789176630852, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0322", "position": {"x": -1400.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630852, "virtual_time_s": 6137.277315, "measure_result": "no_signal"}} +{"event": "action", "seq": 323, "wall_ts_ms": 1789176630853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0323", "position": {"x": -1800.0, "y": -800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630853, "virtual_time_s": 6357.683907, "measure_result": "no_signal"}} +{"event": "action", "seq": 324, "wall_ts_ms": 1789176630853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0324", "position": {"x": -1800.0, "y": -800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630853, "virtual_time_s": 6363.683907, "measure_result": "no_signal"}} +{"event": "action", "seq": 325, "wall_ts_ms": 1789176630854, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0325", "position": {"x": -1800.0, "y": -800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630854, "virtual_time_s": 6369.683907, "measure_result": "no_signal"}} +{"event": "action", "seq": 326, "wall_ts_ms": 1789176630854, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0326", "position": {"x": -1800.0, "y": -800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630854, "virtual_time_s": 6375.683907, "measure_result": "no_signal"}} +{"event": "action", "seq": 327, "wall_ts_ms": 1789176630855, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0327", "position": {"x": -1800.0, "y": -800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630855, "virtual_time_s": 6381.683907, "measure_result": "no_signal"}} +{"event": "action", "seq": 328, "wall_ts_ms": 1789176630855, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0328", "position": {"x": -1800.0, "y": -800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630855, "virtual_time_s": 6387.683907, "measure_result": "no_signal"}} +{"event": "action", "seq": 329, "wall_ts_ms": 1789176630856, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0329", "position": {"x": -1800.0, "y": -800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630856, "virtual_time_s": 6393.683907, "measure_result": "no_signal"}} +{"event": "action", "seq": 330, "wall_ts_ms": 1789176630856, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0330", "position": {"x": -1800.0, "y": -800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630856, "virtual_time_s": 6399.683907, "measure_result": "no_signal"}} +{"event": "action", "seq": 331, "wall_ts_ms": 1789176630857, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0331", "position": {"x": -2000.0, "y": -400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630857, "virtual_time_s": 6494.126626, "measure_result": "no_signal"}} +{"event": "action", "seq": 332, "wall_ts_ms": 1789176630857, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0332", "position": {"x": -2000.0, "y": -400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630857, "virtual_time_s": 6500.126626, "measure_result": "no_signal"}} +{"event": "action", "seq": 333, "wall_ts_ms": 1789176630858, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0333", "position": {"x": -2000.0, "y": -400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630858, "virtual_time_s": 6506.126626, "measure_result": "no_signal"}} +{"event": "action", "seq": 334, "wall_ts_ms": 1789176630858, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0334", "position": {"x": -2000.0, "y": -400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630858, "virtual_time_s": 6512.126626, "measure_result": "no_signal"}} +{"event": "action", "seq": 335, "wall_ts_ms": 1789176630859, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0335", "position": {"x": -2000.0, "y": -400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630859, "virtual_time_s": 6518.126626, "measure_result": "no_signal"}} +{"event": "action", "seq": 336, "wall_ts_ms": 1789176630859, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0336", "position": {"x": -2000.0, "y": -400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630859, "virtual_time_s": 6524.126626, "measure_result": "no_signal"}} +{"event": "action", "seq": 337, "wall_ts_ms": 1789176630860, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0337", "position": {"x": -2000.0, "y": -400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630860, "virtual_time_s": 6530.126626, "measure_result": "no_signal"}} +{"event": "action", "seq": 338, "wall_ts_ms": 1789176630860, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0338", "position": {"x": -2000.0, "y": -400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630860, "virtual_time_s": 6536.126626, "measure_result": "no_signal"}} +{"event": "action", "seq": 339, "wall_ts_ms": 1789176630861, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0339", "position": {"x": -1800.0, "y": 200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630861, "virtual_time_s": 6667.617732, "measure_result": "no_signal"}} +{"event": "action", "seq": 340, "wall_ts_ms": 1789176630862, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0340", "position": {"x": -1800.0, "y": 200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630862, "virtual_time_s": 6673.617732, "measure_result": "no_signal"}} +{"event": "action", "seq": 341, "wall_ts_ms": 1789176630862, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0341", "position": {"x": -1800.0, "y": 200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630862, "virtual_time_s": 6679.617732, "measure_result": "no_signal"}} +{"event": "action", "seq": 342, "wall_ts_ms": 1789176630863, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0342", "position": {"x": -1800.0, "y": 200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630863, "virtual_time_s": 6685.617732, "measure_result": "no_signal"}} +{"event": "action", "seq": 343, "wall_ts_ms": 1789176630863, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0343", "position": {"x": -1800.0, "y": 200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630863, "virtual_time_s": 6691.617732, "measure_result": "no_signal"}} +{"event": "action", "seq": 344, "wall_ts_ms": 1789176630863, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0344", "position": {"x": -1800.0, "y": 200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630863, "virtual_time_s": 6697.617732, "measure_result": "no_signal"}} +{"event": "action", "seq": 345, "wall_ts_ms": 1789176630864, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0345", "position": {"x": -1800.0, "y": 200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630864, "virtual_time_s": 6703.617732, "measure_result": "no_signal"}} +{"event": "action", "seq": 346, "wall_ts_ms": 1789176630864, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0346", "position": {"x": -1800.0, "y": 200.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630864, "virtual_time_s": 6709.617732, "measure_result": "no_signal"}} +{"event": "action", "seq": 347, "wall_ts_ms": 1789176630865, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0347", "position": {"x": -2200.0, "y": 600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630865, "virtual_time_s": 6827.754817, "measure_result": "no_signal"}} +{"event": "action", "seq": 348, "wall_ts_ms": 1789176630865, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0348", "position": {"x": -2200.0, "y": 600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630865, "virtual_time_s": 6833.754817, "measure_result": "no_signal"}} +{"event": "action", "seq": 349, "wall_ts_ms": 1789176630866, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0349", "position": {"x": -2200.0, "y": 600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630866, "virtual_time_s": 6839.754817, "measure_result": "no_signal"}} +{"event": "action", "seq": 350, "wall_ts_ms": 1789176630866, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0350", "position": {"x": -2200.0, "y": 600.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630866, "virtual_time_s": 6845.754817, "measure_result": "no_signal"}} +{"event": "action", "seq": 351, "wall_ts_ms": 1789176630867, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0351", "position": {"x": -2200.0, "y": 600.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630867, "virtual_time_s": 6851.754817, "measure_result": "no_signal"}} +{"event": "action", "seq": 352, "wall_ts_ms": 1789176630867, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0352", "position": {"x": -2200.0, "y": 600.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630867, "virtual_time_s": 6857.754817, "measure_result": "no_signal"}} +{"event": "action", "seq": 353, "wall_ts_ms": 1789176630868, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0353", "position": {"x": -2200.0, "y": 600.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630868, "virtual_time_s": 6863.754817, "measure_result": "no_signal"}} +{"event": "action", "seq": 354, "wall_ts_ms": 1789176630868, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0354", "position": {"x": -2200.0, "y": 600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630868, "virtual_time_s": 6869.754817, "measure_result": "no_signal"}} +{"event": "action", "seq": 355, "wall_ts_ms": 1789176630869, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0355", "position": {"x": -1200.0, "y": 800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630869, "virtual_time_s": 7078.715598, "measure_result": "no_signal"}} +{"event": "action", "seq": 356, "wall_ts_ms": 1789176630869, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0356", "position": {"x": -1200.0, "y": 800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630869, "virtual_time_s": 7084.715598, "measure_result": "no_signal"}} +{"event": "action", "seq": 357, "wall_ts_ms": 1789176630870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0357", "position": {"x": -1200.0, "y": 800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630870, "virtual_time_s": 7090.715598, "measure_result": "no_signal"}} +{"event": "action", "seq": 358, "wall_ts_ms": 1789176630870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0358", "position": {"x": -1200.0, "y": 800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630870, "virtual_time_s": 7096.715598, "measure_result": "no_signal"}} +{"event": "action", "seq": 359, "wall_ts_ms": 1789176630870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0359", "position": {"x": -1200.0, "y": 800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630870, "virtual_time_s": 7102.715598, "measure_result": "no_signal"}} +{"event": "action", "seq": 360, "wall_ts_ms": 1789176630871, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0360", "position": {"x": -1200.0, "y": 800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630871, "virtual_time_s": 7108.715598, "measure_result": "no_signal"}} +{"event": "action", "seq": 361, "wall_ts_ms": 1789176630871, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0361", "position": {"x": -1200.0, "y": 800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630871, "virtual_time_s": 7114.715598, "measure_result": "no_signal"}} +{"event": "action", "seq": 362, "wall_ts_ms": 1789176630872, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0362", "position": {"x": -1200.0, "y": 800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630872, "virtual_time_s": 7120.715598, "measure_result": "no_signal"}} +{"event": "action", "seq": 363, "wall_ts_ms": 1789176630872, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0363", "position": {"x": -1000.0, "y": 1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630872, "virtual_time_s": 7182.28414, "measure_result": "no_signal"}} +{"event": "action", "seq": 364, "wall_ts_ms": 1789176630873, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0364", "position": {"x": -1000.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630873, "virtual_time_s": 7188.28414, "measure_result": "no_signal"}} +{"event": "action", "seq": 365, "wall_ts_ms": 1789176630873, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0365", "position": {"x": -1000.0, "y": 1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630873, "virtual_time_s": 7194.28414, "measure_result": "no_signal"}} +{"event": "action", "seq": 366, "wall_ts_ms": 1789176630874, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0366", "position": {"x": -1000.0, "y": 1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630874, "virtual_time_s": 7200.28414, "measure_result": "no_signal"}} +{"event": "action", "seq": 367, "wall_ts_ms": 1789176630874, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0367", "position": {"x": -1000.0, "y": 1000.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630874, "virtual_time_s": 7206.28414, "measure_result": "no_signal"}} +{"event": "action", "seq": 368, "wall_ts_ms": 1789176630875, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0368", "position": {"x": -1000.0, "y": 1000.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630875, "virtual_time_s": 7212.28414, "measure_result": "no_signal"}} +{"event": "action", "seq": 369, "wall_ts_ms": 1789176630875, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0369", "position": {"x": -1000.0, "y": 1000.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630875, "virtual_time_s": 7218.28414, "measure_result": "no_signal"}} +{"event": "action", "seq": 370, "wall_ts_ms": 1789176630876, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0370", "position": {"x": -1000.0, "y": 1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630876, "virtual_time_s": 7224.28414, "measure_result": "no_signal"}} +{"event": "action", "seq": 371, "wall_ts_ms": 1789176630876, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0371", "position": {"x": -1400.0, "y": 1400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630876, "virtual_time_s": 7342.421225, "measure_result": "no_signal"}} +{"event": "action", "seq": 372, "wall_ts_ms": 1789176630877, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0372", "position": {"x": -1400.0, "y": 1400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630877, "virtual_time_s": 7348.421225, "measure_result": "no_signal"}} +{"event": "action", "seq": 373, "wall_ts_ms": 1789176630877, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0373", "position": {"x": -1400.0, "y": 1400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630877, "virtual_time_s": 7354.421225, "measure_result": "no_signal"}} +{"event": "action", "seq": 374, "wall_ts_ms": 1789176630877, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0374", "position": {"x": -1400.0, "y": 1400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630877, "virtual_time_s": 7360.421225, "measure_result": "no_signal"}} +{"event": "action", "seq": 375, "wall_ts_ms": 1789176630878, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0375", "position": {"x": -1400.0, "y": 1400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630878, "virtual_time_s": 7366.421225, "measure_result": "no_signal"}} +{"event": "action", "seq": 376, "wall_ts_ms": 1789176630878, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0376", "position": {"x": -1400.0, "y": 1400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630878, "virtual_time_s": 7372.421225, "measure_result": "no_signal"}} +{"event": "action", "seq": 377, "wall_ts_ms": 1789176630879, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0377", "position": {"x": -1400.0, "y": 1400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630879, "virtual_time_s": 7378.421225, "measure_result": "no_signal"}} +{"event": "action", "seq": 378, "wall_ts_ms": 1789176630879, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0378", "position": {"x": -1400.0, "y": 1400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630879, "virtual_time_s": 7384.421225, "measure_result": "no_signal"}} +{"event": "action", "seq": 379, "wall_ts_ms": 1789176630880, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0379", "position": {"x": -1200.0, "y": 1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630880, "virtual_time_s": 7478.863944, "measure_result": "no_signal"}} +{"event": "action", "seq": 380, "wall_ts_ms": 1789176630880, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0380", "position": {"x": -1200.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630880, "virtual_time_s": 7484.863944, "measure_result": "no_signal"}} +{"event": "action", "seq": 381, "wall_ts_ms": 1789176630880, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0381", "position": {"x": -1200.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630880, "virtual_time_s": 7490.863944, "measure_result": "no_signal"}} +{"event": "action", "seq": 382, "wall_ts_ms": 1789176630881, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0382", "position": {"x": -1200.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630881, "virtual_time_s": 7496.863944, "measure_result": "no_signal"}} +{"event": "action", "seq": 383, "wall_ts_ms": 1789176630881, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0383", "position": {"x": -1200.0, "y": 1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630881, "virtual_time_s": 7502.863944, "measure_result": "no_signal"}} +{"event": "action", "seq": 384, "wall_ts_ms": 1789176630882, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0384", "position": {"x": -1200.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630882, "virtual_time_s": 7508.863944, "measure_result": "no_signal"}} +{"event": "action", "seq": 385, "wall_ts_ms": 1789176630882, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0385", "position": {"x": -1200.0, "y": 1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630882, "virtual_time_s": 7514.863944, "measure_result": "no_signal"}} +{"event": "action", "seq": 386, "wall_ts_ms": 1789176630883, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0386", "position": {"x": -1200.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630883, "virtual_time_s": 7520.863944, "measure_result": "no_signal"}} +{"event": "action", "seq": 387, "wall_ts_ms": 1789176630883, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0387", "position": {"x": 1200.0, "y": 1600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630883, "virtual_time_s": 8007.527727, "measure_result": "no_signal"}} +{"event": "action", "seq": 388, "wall_ts_ms": 1789176630884, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0388", "position": {"x": 1200.0, "y": 1600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630884, "virtual_time_s": 8013.527727, "measure_result": "no_signal"}} +{"event": "action", "seq": 389, "wall_ts_ms": 1789176630884, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0389", "position": {"x": 1200.0, "y": 1600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630884, "virtual_time_s": 8019.527727, "measure_result": "no_signal"}} +{"event": "action", "seq": 390, "wall_ts_ms": 1789176630885, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0390", "position": {"x": 1200.0, "y": 1600.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630885, "virtual_time_s": 8025.527727, "measure_result": "no_signal"}} +{"event": "action", "seq": 391, "wall_ts_ms": 1789176630885, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0391", "position": {"x": 1200.0, "y": 1600.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630885, "virtual_time_s": 8031.527727, "measure_result": "no_signal"}} +{"event": "action", "seq": 392, "wall_ts_ms": 1789176630886, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0392", "position": {"x": 1200.0, "y": 1600.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630886, "virtual_time_s": 8037.527727, "measure_result": "no_signal"}} +{"event": "action", "seq": 393, "wall_ts_ms": 1789176630886, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0393", "position": {"x": 1200.0, "y": 1600.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630886, "virtual_time_s": 8043.527727, "measure_result": "no_signal"}} +{"event": "action", "seq": 394, "wall_ts_ms": 1789176630887, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0394", "position": {"x": 1200.0, "y": 1600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630887, "virtual_time_s": 8049.527727, "measure_result": "no_signal"}} +{"event": "action", "seq": 395, "wall_ts_ms": 1789176630887, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0395", "position": {"x": 1800.0, "y": 600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630887, "virtual_time_s": 8287.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 396, "wall_ts_ms": 1789176630888, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0396", "position": {"x": 1800.0, "y": 600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630888, "virtual_time_s": 8293.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 397, "wall_ts_ms": 1789176630888, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0397", "position": {"x": 1800.0, "y": 600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630888, "virtual_time_s": 8299.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 398, "wall_ts_ms": 1789176630889, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0398", "position": {"x": 1800.0, "y": 600.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630888, "virtual_time_s": 8305.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 399, "wall_ts_ms": 1789176630889, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0399", "position": {"x": 1800.0, "y": 600.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630889, "virtual_time_s": 8311.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 400, "wall_ts_ms": 1789176630889, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0400", "position": {"x": 1800.0, "y": 600.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630889, "virtual_time_s": 8317.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 401, "wall_ts_ms": 1789176630890, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0401", "position": {"x": 1800.0, "y": 600.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630890, "virtual_time_s": 8323.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 402, "wall_ts_ms": 1789176630890, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0402", "position": {"x": 1800.0, "y": 600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630890, "virtual_time_s": 8329.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 403, "wall_ts_ms": 1789176630891, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0403", "position": {"x": 1800.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630891, "virtual_time_s": 8454.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 404, "wall_ts_ms": 1789176630891, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0404", "position": {"x": 1800.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630891, "virtual_time_s": 8460.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 405, "wall_ts_ms": 1789176630892, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0405", "position": {"x": 1800.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630892, "virtual_time_s": 8466.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 406, "wall_ts_ms": 1789176630892, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0406", "position": {"x": 1800.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630892, "virtual_time_s": 8472.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 407, "wall_ts_ms": 1789176630893, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0407", "position": {"x": 1800.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630893, "virtual_time_s": 8478.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 408, "wall_ts_ms": 1789176630893, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0408", "position": {"x": 1800.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630893, "virtual_time_s": 8484.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 409, "wall_ts_ms": 1789176630894, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0409", "position": {"x": 1800.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630894, "virtual_time_s": 8490.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 410, "wall_ts_ms": 1789176630894, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0410", "position": {"x": 1800.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630894, "virtual_time_s": 8496.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 411, "wall_ts_ms": 1789176630895, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0411", "position": {"x": 1800.0, "y": -800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176630895, "virtual_time_s": 8661.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 412, "wall_ts_ms": 1789176630895, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0412", "position": {"x": 1800.0, "y": -800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176630895, "virtual_time_s": 8667.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 413, "wall_ts_ms": 1789176630896, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0413", "position": {"x": 1800.0, "y": -800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176630896, "virtual_time_s": 8673.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 414, "wall_ts_ms": 1789176630896, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0414", "position": {"x": 1800.0, "y": -800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176630896, "virtual_time_s": 8679.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 415, "wall_ts_ms": 1789176630896, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0415", "position": {"x": 1800.0, "y": -800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176630896, "virtual_time_s": 8685.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 416, "wall_ts_ms": 1789176630897, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0416", "position": {"x": 1800.0, "y": -800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176630897, "virtual_time_s": 8691.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 417, "wall_ts_ms": 1789176630897, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0417", "position": {"x": 1800.0, "y": -800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176630897, "virtual_time_s": 8697.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 418, "wall_ts_ms": 1789176630898, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0418", "position": {"x": 1800.0, "y": -800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176630898, "virtual_time_s": 8703.765803, "measure_result": "no_signal"}} +{"event": "action", "seq": 419, "wall_ts_ms": 1789176630898, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "2d8c15ad42ce-0419"}, "response": {"accepted": true, "real_timestamp_ms": 1789176630898, "virtual_time_s": 8703.765803, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 8703.765803, "real_elapsed_s": 8.459184, "request_count": 419, "cleared_count": 12} diff --git a/referee-data/sessions/GM56-DFXZ-XKDM-XYV7/meta.json b/referee-data/sessions/GM56-DFXZ-XKDM-XYV7/meta.json new file mode 100644 index 0000000..890ffb7 --- /dev/null +++ b/referee-data/sessions/GM56-DFXZ-XKDM-XYV7/meta.json @@ -0,0 +1,104 @@ +{ + "case_code": "GM56-DFXZ-XKDM-XYV7", + "module": "q4_practice", + "robot_id": "1", + "seed": 862296605, + "truth": [ + { + "channel": 16, + "x": -524.5206714300155, + "y": 1076.6097330631062, + "r_eff_m": 1266.1144095417988, + "directional": true, + "heading_deg": 323.3365774469903 + }, + { + "channel": 10, + "x": 712.0048721054991, + "y": -350.77945242364206, + "r_eff_m": 1142.2414995302777, + "directional": true, + "heading_deg": 256.5462028174308 + }, + { + "channel": 7, + "x": 1591.9527024388633, + "y": -417.6806591511811, + "r_eff_m": 1488.5247138130503, + "directional": true, + "heading_deg": 145.9558235911333 + }, + { + "channel": 1, + "x": -1088.117367198431, + "y": -567.662158187589, + "r_eff_m": 1174.5517593406385, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": 906.4341088975847, + "y": -1164.9533159379737, + "r_eff_m": 1205.6825113239083, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": -440.7136903976244, + "y": -1125.6333701710744, + "r_eff_m": 1392.7970264272578, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": 396.09072396953906, + "y": -1233.8343338670759, + "r_eff_m": 1447.254884675842, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 18, + "x": -924.1740699985598, + "y": 1042.867539519964, + "r_eff_m": 1397.743907895721, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 5, + "x": 404.69205111704883, + "y": 1512.8465933025086, + "r_eff_m": 1275.2012367943066, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": 346.29727268509714, + "y": -1700.4782817821338, + "r_eff_m": 1110.0997753757654, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": -848.0195414748022, + "y": 647.6935881860475, + "r_eff_m": 1437.3660943189293, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": 1284.0330369450317, + "y": 1006.2534742058411, + "r_eff_m": 1292.0520810945493, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/HCRW-2Z2C-PVYC-M9C2/log.jsonl b/referee-data/sessions/HCRW-2Z2C-PVYC-M9C2/log.jsonl new file mode 100644 index 0000000..06b1ae3 --- /dev/null +++ b/referee-data/sessions/HCRW-2Z2C-PVYC-M9C2/log.jsonl @@ -0,0 +1,115 @@ +{"event": "session_start", "case_code": "HCRW-2Z2C-PVYC-M9C2", "module": "q3_practice", "robot_id": "1", "seed": 84771051, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 9, "x": -942.7785768594701, "y": 624.2732815632515, "r_eff_m": 1312.0798443114295, "directional": false, "heading_deg": 0.0}, {"channel": 18, "x": -778.0079309538162, "y": -987.8720367972102, "r_eff_m": 1432.9094810993804, "directional": false, "heading_deg": 0.0}, {"channel": 14, "x": 71.75865591768107, "y": -205.3390923526445, "r_eff_m": 1141.156458900928, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": -1549.5774315995245, "y": 331.77684946226316, "r_eff_m": 1312.8996549219328, "directional": false, "heading_deg": 0.0}, {"channel": 5, "x": -128.9597983944469, "y": -1365.1529648865026, "r_eff_m": 1404.1447180150687, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": 998.8486214454606, "y": -999.1838398061524, "r_eff_m": 1294.8143168602783, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": 374.9964560673927, "y": 423.47098096956796, "r_eff_m": 1031.942105162195, "directional": false, "heading_deg": 0.0}, {"channel": 19, "x": 632.2537539643375, "y": -795.3934218785372, "r_eff_m": 1184.0104011551648, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": 323.4592948492432, "y": -1581.0202991726173, "r_eff_m": 1398.3907404679082, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": -647.1877509011108, "y": -1175.074282747567, "r_eff_m": 1331.0824553599075, "directional": false, "heading_deg": 0.0}, {"channel": 17, "x": -791.264758550555, "y": -348.59653815427583, "r_eff_m": 1098.9297715706111, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": -802.800024274768, "y": 202.18180204461092, "r_eff_m": 1020.4097133957516, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": -925.2418009101181, "y": -992.2701247399935, "r_eff_m": 1435.7437407508473, "directional": false, "heading_deg": 0.0}, {"channel": 3, "x": 1146.580299608664, "y": 21.397160235682215, "r_eff_m": 1352.0891858358755, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": -439.3863693231951, "y": 999.0030648324807, "r_eff_m": 1475.259624443237, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": 30.502760683294348, "y": -760.4159579286602, "r_eff_m": 1434.8907484087442, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789177749471, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789177749470, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789177749486, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177749486, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789177749497, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177749497, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789177749508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177749508, "virtual_time_s": 17.0, "measure_result": "direction", "svd_deg": 0.16}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789177749574, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177749574, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789177749585, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177749585, "virtual_time_s": 29.0, "measure_result": "direction", "svd_deg": 264.42}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789177749656, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177749655, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789177749666, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177749665, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789177749675, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177749675, "virtual_time_s": 47.0, "measure_result": "direction", "svd_deg": 227.61}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789177749749, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177749749, "virtual_time_s": 53.0, "measure_result": "direction", "svd_deg": 146.11}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789177749832, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177749832, "virtual_time_s": 59.0, "measure_result": "direction", "svd_deg": 114.31}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789177749933, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177749933, "virtual_time_s": 65.0, "measure_result": "direction", "svd_deg": 165.41}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789177750011, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177750011, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789177750021, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177750021, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 272.90999999999997}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789177750098, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177750098, "virtual_time_s": 83.0, "measure_result": "direction", "svd_deg": 288.81}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789177750166, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177750166, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789177750177, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177750177, "virtual_time_s": 95.0, "measure_result": "direction", "svd_deg": 48.79}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789177750238, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177750238, "virtual_time_s": 101.0, "measure_result": "direction", "svd_deg": 204.44}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789177750313, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177750313, "virtual_time_s": 107.0, "measure_result": "direction", "svd_deg": 231.93}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789177750386, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177750386, "virtual_time_s": 113.0, "measure_result": "direction", "svd_deg": 307.6}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789177750444, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177750444, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789177750535, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0022", "position": {"x": -427.32386895597784, "y": -343.33783178402473}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177750535, "virtual_time_s": 234.633308, "measure_result": "direction", "svd_deg": 240.85}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789177750547, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0023", "position": {"x": -427.32386895597784, "y": -343.33783178402473}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177750547, "virtual_time_s": 240.633308, "measure_result": "direction", "svd_deg": 231.76}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789177750561, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0024", "position": {"x": -427.32386895597784, "y": -343.33783178402473}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177750560, "virtual_time_s": 246.633308, "measure_result": "direction", "svd_deg": 180.37}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789177750623, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0025", "position": {"x": -764.1834288358483, "y": -346.37836091028805}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177750623, "virtual_time_s": 319.007964, "measure_result": "direction", "svd_deg": 183.85}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789177750625, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0026", "position": {"x": -764.1834288358483, "y": -346.37836091028805}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177750625, "virtual_time_s": 325.007964, "measure_result": "direction", "svd_deg": 256.27}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789177750627, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0027", "position": {"x": -764.1834288358483, "y": -346.37836091028805}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177750627, "virtual_time_s": 331.007964, "measure_result": "direction", "svd_deg": 268.08}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789177750651, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0028", "position": {"x": -785.8924690809838, "y": -348.22230777809386}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177750651, "virtual_time_s": 341.365406, "measure_result": "direction", "svd_deg": 183.51}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789177750652, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0029", "position": {"x": -788.837068465409, "y": -348.4548284607665}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177750652, "virtual_time_s": 346.956159, "clear_result": "success"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789177750653, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0030", "position": {"x": -788.837068465409, "y": -348.4548284607665}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177750653, "virtual_time_s": 352.956159, "measure_result": "direction", "svd_deg": 257.05}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789177750654, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0031", "position": {"x": -788.837068465409, "y": -348.4548284607665}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177750654, "virtual_time_s": 358.956159, "measure_result": "direction", "svd_deg": 92.34}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789177750679, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0032", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177750679, "virtual_time_s": 466.7324, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789177750682, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0033", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177750682, "virtual_time_s": 472.7324, "measure_result": "no_signal"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789177750685, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0034", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177750685, "virtual_time_s": 478.7324, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789177750689, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0035", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177750689, "virtual_time_s": 484.7324, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789177750691, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0036", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177750691, "virtual_time_s": 490.7324, "measure_result": "direction", "svd_deg": 292.69}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789177750709, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0037", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177750709, "virtual_time_s": 496.7324, "measure_result": "direction", "svd_deg": 140.1}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789177750729, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0038", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177750729, "virtual_time_s": 502.7324, "measure_result": "no_signal"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789177750733, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0039", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177750733, "virtual_time_s": 508.7324, "measure_result": "no_signal"}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789177750737, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0040", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177750737, "virtual_time_s": 514.7324, "measure_result": "direction", "svd_deg": 29.22}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789177750762, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0041", "position": {"x": -1492.3687356514374, "y": 3.0707859246264775}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177750762, "virtual_time_s": 587.268982, "measure_result": "direction", "svd_deg": 99.27}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789177750785, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0042", "position": {"x": -1544.857594250827, "y": 322.47351844882735}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177750785, "virtual_time_s": 657.006355, "measure_result": "direction", "svd_deg": 115.95}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789177750786, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0043", "position": {"x": -1545.782224034194, "y": 324.44892563528686}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177750786, "virtual_time_s": 662.442574, "clear_result": "success"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789177750806, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0044", "position": {"x": -817.2069243336434, "y": 202.22240806254018}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177750806, "virtual_time_s": 815.193891, "clear_result": "success"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789177750807, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0045", "position": {"x": -817.2069243336434, "y": 202.22240806254018}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177750807, "virtual_time_s": 821.193891, "measure_result": "direction", "svd_deg": 105.94}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789177750828, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0046", "position": {"x": -940.9132228357589, "y": 632.7845070656857}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177750828, "virtual_time_s": 915.790089, "measure_result": "direction", "svd_deg": 258.07}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789177750829, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0047", "position": {"x": -940.9132228357589, "y": 632.7845070656857}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177750829, "virtual_time_s": 920.790089, "clear_result": "success"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789177750848, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0048", "position": {"x": -558.5079292007226, "y": 663.4271496003829}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177750848, "virtual_time_s": 1003.516298, "measure_result": "direction", "svd_deg": 69.64}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789177750865, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0049", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177750865, "virtual_time_s": 1077.830281, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789177750868, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0050", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177750868, "virtual_time_s": 1083.830281, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789177750870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0051", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177750870, "virtual_time_s": 1089.830281, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789177750872, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0052", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177750872, "virtual_time_s": 1095.830281, "measure_result": "no_signal"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789177750874, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0053", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177750874, "virtual_time_s": 1101.830281, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789177750877, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0054", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177750877, "virtual_time_s": 1107.830281, "measure_result": "no_signal"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789177750879, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0055", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177750879, "virtual_time_s": 1113.830281, "measure_result": "direction", "svd_deg": 357.9}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789177750896, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0056", "position": {"x": -447.6382545185093, "y": 997.9583189379846}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177750896, "virtual_time_s": 1145.303316, "clear_result": "success"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789177750911, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0057", "position": {"x": 317.95675761388156, "y": 740.7112808166512}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177750911, "virtual_time_s": 1312.834955, "measure_result": "direction", "svd_deg": 280.59000000000003}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789177750913, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0058", "position": {"x": 375.6683289560625, "y": 430.40558489316544}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177750913, "virtual_time_s": 1380.960307, "clear_result": "success"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789177750927, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0059", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177750927, "virtual_time_s": 1508.792815, "measure_result": "no_signal"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789177750929, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0060", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177750929, "virtual_time_s": 1514.792815, "measure_result": "no_signal"}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789177750932, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0061", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177750932, "virtual_time_s": 1520.792815, "measure_result": "no_signal"}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789177750934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0062", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177750934, "virtual_time_s": 1526.792815, "measure_result": "no_signal"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789177750936, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0063", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177750936, "virtual_time_s": 1532.792815, "measure_result": "no_signal"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789177750939, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0064", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177750939, "virtual_time_s": 1538.792815, "measure_result": "no_signal"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789177750955, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0065", "position": {"x": 708.3550206912051, "y": 247.69809081052605}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177750955, "virtual_time_s": 1698.286121, "measure_result": "direction", "svd_deg": 333.09}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789177750969, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0066", "position": {"x": 1194.4633585034937, "y": 2.248093198528668}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177750969, "virtual_time_s": 1812.198382, "measure_result": "direction", "svd_deg": 157.8}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789177750983, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0067", "position": {"x": 1167.4579140151095, "y": 12.720103661576696}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177750983, "virtual_time_s": 1822.991333, "measure_result": "direction", "svd_deg": 157.33}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789177750984, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0068", "position": {"x": 1158.2168277757112, "y": 16.391041081025044}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177750984, "virtual_time_s": 1829.980036, "clear_result": "success"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789177750997, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0069", "position": {"x": 1159.7, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177750997, "virtual_time_s": 1839.271638, "measure_result": "direction", "svd_deg": 260.81}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789177751009, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0070", "position": {"x": 1159.7, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177751009, "virtual_time_s": 1845.271638, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789177751012, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0071", "position": {"x": 1159.7, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177751012, "virtual_time_s": 1851.271638, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789177751014, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0072", "position": {"x": 1159.7, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177751014, "virtual_time_s": 1857.271638, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789177751017, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0073", "position": {"x": 1159.7, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177751017, "virtual_time_s": 1863.271638, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789177751019, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0074", "position": {"x": 1159.7, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177751019, "virtual_time_s": 1869.271638, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789177751036, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0075", "position": {"x": 845.7528701704658, "y": -582.4164342918293}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177751036, "virtual_time_s": 2007.600275, "measure_result": "direction", "svd_deg": 291.11}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789177751050, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0076", "position": {"x": 706.8203865974717, "y": -586.8515619485748}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177751050, "virtual_time_s": 2041.400926, "measure_result": "direction", "svd_deg": 249.95}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789177751051, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0077", "position": {"x": 706.8203865974717, "y": -586.8515619485748}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177751051, "virtual_time_s": 2047.400926, "measure_result": "direction", "svd_deg": 305.17}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789177751053, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0078", "position": {"x": 706.8203865974717, "y": -586.8515619485748}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177751053, "virtual_time_s": 2053.400926, "measure_result": "direction", "svd_deg": 149.1}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789177751066, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0079", "position": {"x": 625.0539581718367, "y": -812.1195690086508}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177751066, "virtual_time_s": 2107.330634, "measure_result": "direction", "svd_deg": 66.16}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789177751068, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0080", "position": {"x": 625.8825535471503, "y": -810.1517842308831}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177751068, "virtual_time_s": 2112.757658, "clear_result": "success"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789177751069, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0081", "position": {"x": 625.8825535471503, "y": -810.1517842308831}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177751069, "virtual_time_s": 2118.757658, "measure_result": "direction", "svd_deg": 332.71}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789177751079, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0082", "position": {"x": 1001.927545227187, "y": -1004.4246695756439}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177751079, "virtual_time_s": 2208.410311, "clear_result": "success"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789177751090, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0083", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177751090, "virtual_time_s": 2298.825822, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789177751093, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0084", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177751093, "virtual_time_s": 2304.825822, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789177751096, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0085", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177751096, "virtual_time_s": 2310.825822, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789177751098, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0086", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177751098, "virtual_time_s": 2316.825822, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789177751101, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0087", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177751101, "virtual_time_s": 2322.825822, "measure_result": "direction", "svd_deg": 245.55}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789177751128, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0088", "position": {"x": 264.906250170401, "y": -1209.893318162828}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177751128, "virtual_time_s": 2403.044432, "measure_result": "direction", "svd_deg": 278.88}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789177751140, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0089", "position": {"x": 321.2951413066443, "y": -1574.197393968069}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177751140, "virtual_time_s": 2481.772898, "measure_result": "direction", "svd_deg": 286.96}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789177751141, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0090", "position": {"x": 321.2951413066443, "y": -1574.197393968069}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177751141, "virtual_time_s": 2486.772898, "clear_result": "success"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789177751151, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0091", "position": {"x": 214.86024468883443, "y": -925.8386337013903}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177751151, "virtual_time_s": 2624.180275, "measure_result": "direction", "svd_deg": 137.33}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789177751153, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0092", "position": {"x": 214.86024468883443, "y": -925.8386337013903}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177751153, "virtual_time_s": 2630.180275, "measure_result": "direction", "svd_deg": 230.97}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789177751164, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0093", "position": {"x": 39.146669403399635, "y": -763.3058081178461}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177751164, "virtual_time_s": 2684.051845, "measure_result": "direction", "svd_deg": 161.19}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789177751166, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0094", "position": {"x": 39.146669403399635, "y": -763.3058081178461}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177751166, "virtual_time_s": 2689.051845, "clear_result": "success"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789177751167, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0095", "position": {"x": 39.146669403399635, "y": -763.3058081178461}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177751167, "virtual_time_s": 2695.051845, "measure_result": "direction", "svd_deg": 254.01}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789177751169, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0096", "position": {"x": 39.146669403399635, "y": -763.3058081178461}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177751169, "virtual_time_s": 2701.051845, "measure_result": "direction", "svd_deg": 196.2}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789177751177, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0097", "position": {"x": 70.4798431033513, "y": -205.57525529827217}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177751177, "virtual_time_s": 2818.773846, "measure_result": "near"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789177751180, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0098", "position": {"x": 70.47984310335072, "y": -205.57525529827245}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177751180, "virtual_time_s": 2823.773846, "clear_result": "success"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789177751186, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0099", "position": {"x": -621.3778847315368, "y": -703.9529869181498}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177751186, "virtual_time_s": 3000.308004, "measure_result": "direction", "svd_deg": 267.44}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789177751188, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0100", "position": {"x": -621.3778847315368, "y": -703.9529869181498}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177751188, "virtual_time_s": 3006.308004, "measure_result": "direction", "svd_deg": 305.89}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789177751189, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0101", "position": {"x": -621.3778847315368, "y": -703.9529869181498}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177751189, "virtual_time_s": 3012.308004, "measure_result": "direction", "svd_deg": 224.28}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789177751194, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0102", "position": {"x": -932.1229554227012, "y": -1003.7212479710146}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177751194, "virtual_time_s": 3103.661582, "clear_result": "success"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789177751196, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0103", "position": {"x": -932.1229554227012, "y": -1003.7212479710146}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177751196, "virtual_time_s": 3109.661582, "measure_result": "direction", "svd_deg": 335.42}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789177751197, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0104", "position": {"x": -932.1229554227012, "y": -1003.7212479710146}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177751197, "virtual_time_s": 3115.661582, "measure_result": "direction", "svd_deg": 328.37}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789177751199, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0105", "position": {"x": -932.1229554227012, "y": -1003.7212479710146}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177751199, "virtual_time_s": 3121.661582, "measure_result": "direction", "svd_deg": 5.75}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789177751201, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0106", "position": {"x": -792.0081952531123, "y": -989.4144941141669}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177751201, "virtual_time_s": 3154.830238, "clear_result": "success"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789177751202, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0107", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177751202, "virtual_time_s": 3203.366605, "measure_result": "no_signal"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789177751204, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0108", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177751204, "virtual_time_s": 3209.366605, "measure_result": "no_signal"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789177751206, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0109", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177751206, "virtual_time_s": 3215.366605, "measure_result": "no_signal"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789177751209, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0110", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177751209, "virtual_time_s": 3221.366605, "measure_result": "no_signal"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789177751211, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0111", "position": {"x": -641.488869782412, "y": -1177.1097344192283}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177751211, "virtual_time_s": 3263.055734, "clear_result": "success"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789177751212, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0112", "position": {"x": -142.70841081501092, "y": -1365.0664529340952}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177751212, "virtual_time_s": 3374.659613, "clear_result": "success"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789177751213, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "27d86ae8a155-0113"}, "response": {"accepted": true, "real_timestamp_ms": 1789177751213, "virtual_time_s": 3374.659613, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3374.659613, "real_elapsed_s": 3.573615, "request_count": 113, "cleared_count": 16} diff --git a/referee-data/sessions/HCRW-2Z2C-PVYC-M9C2/meta.json b/referee-data/sessions/HCRW-2Z2C-PVYC-M9C2/meta.json new file mode 100644 index 0000000..2639388 --- /dev/null +++ b/referee-data/sessions/HCRW-2Z2C-PVYC-M9C2/meta.json @@ -0,0 +1,136 @@ +{ + "case_code": "HCRW-2Z2C-PVYC-M9C2", + "module": "q3_practice", + "robot_id": "1", + "seed": 84771051, + "truth": [ + { + "channel": 9, + "x": -942.7785768594701, + "y": 624.2732815632515, + "r_eff_m": 1312.0798443114295, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 18, + "x": -778.0079309538162, + "y": -987.8720367972102, + "r_eff_m": 1432.9094810993804, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 14, + "x": 71.75865591768107, + "y": -205.3390923526445, + "r_eff_m": 1141.156458900928, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": -1549.5774315995245, + "y": 331.77684946226316, + "r_eff_m": 1312.8996549219328, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 5, + "x": -128.9597983944469, + "y": -1365.1529648865026, + "r_eff_m": 1404.1447180150687, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": 998.8486214454606, + "y": -999.1838398061524, + "r_eff_m": 1294.8143168602783, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": 374.9964560673927, + "y": 423.47098096956796, + "r_eff_m": 1031.942105162195, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 19, + "x": 632.2537539643375, + "y": -795.3934218785372, + "r_eff_m": 1184.0104011551648, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": 323.4592948492432, + "y": -1581.0202991726173, + "r_eff_m": 1398.3907404679082, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": -647.1877509011108, + "y": -1175.074282747567, + "r_eff_m": 1331.0824553599075, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 17, + "x": -791.264758550555, + "y": -348.59653815427583, + "r_eff_m": 1098.9297715706111, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": -802.800024274768, + "y": 202.18180204461092, + "r_eff_m": 1020.4097133957516, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": -925.2418009101181, + "y": -992.2701247399935, + "r_eff_m": 1435.7437407508473, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 3, + "x": 1146.580299608664, + "y": 21.397160235682215, + "r_eff_m": 1352.0891858358755, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": -439.3863693231951, + "y": 999.0030648324807, + "r_eff_m": 1475.259624443237, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": 30.502760683294348, + "y": -760.4159579286602, + "r_eff_m": 1434.8907484087442, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/J362-6CKW-9XVL-GEBY/log.jsonl b/referee-data/sessions/J362-6CKW-9XVL-GEBY/log.jsonl new file mode 100644 index 0000000..9fe0e3f --- /dev/null +++ b/referee-data/sessions/J362-6CKW-9XVL-GEBY/log.jsonl @@ -0,0 +1,334 @@ +{"event": "session_start", "case_code": "J362-6CKW-9XVL-GEBY", "module": "q4_practice", "robot_id": "1", "seed": 113612701, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 14, "x": 1470.4207562780527, "y": -651.6042865961393, "r_eff_m": 1363.9682235296764, "directional": true, "heading_deg": 176.2574418959534}, {"channel": 7, "x": 836.1821848231111, "y": -522.5175021712796, "r_eff_m": 1209.854482765384, "directional": true, "heading_deg": 144.93979785829004}, {"channel": 19, "x": -838.7132030876095, "y": -977.5525821124045, "r_eff_m": 1099.867720047544, "directional": true, "heading_deg": 149.34104553510116}, {"channel": 16, "x": 503.3825736123371, "y": 1682.5455816584576, "r_eff_m": 1402.0277539067167, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": -621.5540436830894, "y": 535.1995768485111, "r_eff_m": 1426.9101098814824, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": -500.0181669549165, "y": -1224.8756857550302, "r_eff_m": 1326.0503063075626, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": -485.7772334360728, "y": -1156.6300713169117, "r_eff_m": 1300.806844749737, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": 1032.5055845216568, "y": 418.80033405849554, "r_eff_m": 1273.5119419828438, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": -401.4441768249083, "y": -1523.0177302677398, "r_eff_m": 1448.0772279665287, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": 408.90891333175847, "y": -825.7205581192022, "r_eff_m": 1490.8354339769842, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": -860.4275838731623, "y": 1528.011033450523, "r_eff_m": 1454.5005656547696, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": -55.42842671969672, "y": 203.68207145060492, "r_eff_m": 1435.5534087414435, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": 418.9959236647655, "y": -198.25330673309287, "r_eff_m": 1425.8069445786427, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789189795084, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789189795084, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789189795085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189795085, "virtual_time_s": 5.0, "measure_result": "direction", "svd_deg": 333.77}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789189795126, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189795126, "virtual_time_s": 11.0, "measure_result": "direction", "svd_deg": 21.67}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789189795165, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189795165, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789189795166, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189795166, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789189795167, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189795167, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789189795168, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189795168, "virtual_time_s": 35.0, "measure_result": "direction", "svd_deg": 248.20999999999998}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789189795206, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189795206, "virtual_time_s": 41.0, "measure_result": "direction", "svd_deg": 327.3}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789189795243, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795243, "virtual_time_s": 47.0, "measure_result": "direction", "svd_deg": 140.19}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789189795280, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189795280, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789189795280, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189795280, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789189795281, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189795281, "virtual_time_s": 65.0, "measure_result": "direction", "svd_deg": 246.43}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789189795325, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189795325, "virtual_time_s": 71.0, "measure_result": "direction", "svd_deg": 296.55}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789189795363, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189795363, "virtual_time_s": 77.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789189795364, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189795364, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789189795365, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189795365, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789189795366, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189795366, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789189795367, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189795367, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789189795368, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189795368, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789189795368, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189795368, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789189795369, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189795369, "virtual_time_s": 119.0, "measure_result": "direction", "svd_deg": 106.01}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789189795531, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0022", "position": {"x": -206.94724870916377, "y": 345.9463350950602}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189795531, "virtual_time_s": 204.624073, "measure_result": "direction", "svd_deg": 317.58}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789189795532, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0023", "position": {"x": -61.19641336852614, "y": 212.45408489401618}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189795532, "virtual_time_s": 249.153043, "clear_result": "success"}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789189795646, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0024", "position": {"x": -311.3066596645796, "y": 214.71984076001814}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795646, "virtual_time_s": 305.177145, "measure_result": "direction", "svd_deg": 134.11}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789189795683, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0025", "position": {"x": -515.9949483585017, "y": 423.2012127600317}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795683, "virtual_time_s": 368.610621, "measure_result": "direction", "svd_deg": 133.22}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789189795701, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0026", "position": {"x": -549.7571274784418, "y": 458.84118712009047}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795701, "virtual_time_s": 383.42916, "measure_result": "direction", "svd_deg": 132.52}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789189795717, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0027", "position": {"x": -570.2626925955456, "y": 481.5742172388845}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795717, "virtual_time_s": 394.552129, "measure_result": "direction", "svd_deg": 133.66}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789189795729, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0028", "position": {"x": -585.9250784483692, "y": 498.35033559255317}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795729, "virtual_time_s": 404.142329, "measure_result": "direction", "svd_deg": 133.49}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789189795740, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0029", "position": {"x": -597.8126773263832, "y": 510.7948007209898}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795739, "virtual_time_s": 412.584304, "measure_result": "direction", "svd_deg": 133.49}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789189795747, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0030", "position": {"x": -606.6470950990475, "y": 519.9462914763074}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795747, "virtual_time_s": 420.128291, "measure_result": "direction", "svd_deg": 135.08}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789189795757, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0031", "position": {"x": -612.9868891054272, "y": 526.4446219740136}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795757, "virtual_time_s": 426.944014, "measure_result": "direction", "svd_deg": 135.2}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789189795758, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0032", "position": {"x": -623.2278539204829, "y": 536.7648550347326}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189795758, "virtual_time_s": 434.851828, "clear_result": "success"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789189795893, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0033", "position": {"x": -300.0558086342534, "y": -312.43170263328375}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189795893, "virtual_time_s": 622.57414, "measure_result": "direction", "svd_deg": 257.47}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789189795930, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0034", "position": {"x": -480.4960843080898, "y": -1017.0438535384199}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189795930, "virtual_time_s": 773.043996, "measure_result": "direction", "svd_deg": 268.74}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789189795945, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0035", "position": {"x": -483.64184503374315, "y": -1062.7689481124828}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189795945, "virtual_time_s": 787.210631, "measure_result": "direction", "svd_deg": 268.19}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789189795953, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0036", "position": {"x": -485.48118808056165, "y": -1129.1332368567978}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189795953, "virtual_time_s": 805.488586, "measure_result": "direction", "svd_deg": 268.86}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789189795954, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0037", "position": {"x": -486.04994051213384, "y": -1157.461840474562}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189795954, "virtual_time_s": 816.155448, "clear_result": "success"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789189796069, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0038", "position": {"x": -101.94546440162645, "y": -873.1416674970699}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189796069, "virtual_time_s": 917.732476, "measure_result": "direction", "svd_deg": 222.3}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789189796086, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0039", "position": {"x": -467.66104532936544, "y": -1205.309850712406}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189796086, "virtual_time_s": 1021.542109, "measure_result": "direction", "svd_deg": 210.22}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789189796093, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0040", "position": {"x": -479.44577649047073, "y": -1209.1829252197967}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189796093, "virtual_time_s": 1029.023081, "measure_result": "direction", "svd_deg": 216.8}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789189796095, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0041", "position": {"x": -499.9175152304996, "y": -1224.2926311819197}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189796095, "virtual_time_s": 1039.111874, "clear_result": "success"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789189796203, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0042", "position": {"x": 158.14403847707038, "y": -847.9653092779104}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189796203, "virtual_time_s": 1196.725496, "measure_result": "direction", "svd_deg": 4.48}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789189796215, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0043", "position": {"x": 404.07912509499624, "y": -828.2532298074012}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189796215, "virtual_time_s": 1251.070256, "measure_result": "direction", "svd_deg": 26.83}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789189796216, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0044", "position": {"x": 409.110664376816, "y": -825.8181796309461}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189796216, "virtual_time_s": 1257.188216, "clear_result": "success"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789189796328, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0045", "position": {"x": 566.6111549652207, "y": -646.5275308082498}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189796328, "virtual_time_s": 1310.91726, "measure_result": "direction", "svd_deg": 25.03}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789189796345, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0046", "position": {"x": 810.3696494372278, "y": -527.5759160140111}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189796345, "virtual_time_s": 1370.163989, "measure_result": "direction", "svd_deg": 12.03}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789189796347, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0047", "position": {"x": 827.0988530807316, "y": -524.3165123011554}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189796347, "virtual_time_s": 1378.572742, "clear_result": "success"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789189796470, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0048", "position": {"x": 849.4844285376688, "y": -155.14110107603943}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189796470, "virtual_time_s": 1458.543438, "measure_result": "direction", "svd_deg": 185.13}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789189796484, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0049", "position": {"x": 411.91380947493775, "y": -195.23742875957637}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189796484, "virtual_time_s": 1551.424212, "measure_result": "direction", "svd_deg": 337.54}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789189796485, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0050", "position": {"x": 418.8438590829012, "y": -197.96096244966242}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189796485, "virtual_time_s": 1557.913416, "clear_result": "success"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789189796596, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0051", "position": {"x": 431.8620851782999, "y": 11.869793640849025}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189796596, "virtual_time_s": 1605.960257, "measure_result": "direction", "svd_deg": 33.2}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789189796626, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0052", "position": {"x": 1019.5919713158996, "y": 372.2944090198341}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189796626, "virtual_time_s": 1748.848954, "measure_result": "direction", "svd_deg": 75.01}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789189796627, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0053", "position": {"x": 1028.2327522153325, "y": 403.32618894788743}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189796627, "virtual_time_s": 1760.291421, "clear_result": "success"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789189796628, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0054", "position": {"x": 800.0, "y": 200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189796628, "virtual_time_s": 1827.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789189796629, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0055", "position": {"x": 800.0, "y": 200.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189796629, "virtual_time_s": 1833.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789189796630, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0056", "position": {"x": 800.0, "y": 200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189796630, "virtual_time_s": 1839.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789189796630, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0057", "position": {"x": 800.0, "y": 200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189796630, "virtual_time_s": 1845.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789189796631, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0058", "position": {"x": 800.0, "y": 200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189796631, "virtual_time_s": 1851.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789189796632, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0059", "position": {"x": 800.0, "y": 200.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189796632, "virtual_time_s": 1857.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789189796632, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0060", "position": {"x": 800.0, "y": 200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189796632, "virtual_time_s": 1863.424629, "measure_result": "direction", "svd_deg": 308.93}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789189796667, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0061", "position": {"x": 800.0, "y": 200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189796667, "virtual_time_s": 1869.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789189796668, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0062", "position": {"x": 800.0, "y": 200.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189796668, "virtual_time_s": 1875.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789189796668, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0063", "position": {"x": 800.0, "y": 200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189796668, "virtual_time_s": 1881.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789189796669, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0064", "position": {"x": 800.0, "y": 200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189796669, "virtual_time_s": 1887.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789189796670, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0065", "position": {"x": 800.0, "y": 200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189796670, "virtual_time_s": 1893.424629, "measure_result": "no_signal"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789189796766, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0066", "position": {"x": 969.7954588457231, "y": -83.08077096373484}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189796766, "virtual_time_s": 1965.44439, "measure_result": "direction", "svd_deg": 311.94}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789189796811, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0067", "position": {"x": 1352.7341228638538, "y": -526.212522637775}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189796811, "virtual_time_s": 2087.57812, "measure_result": "direction", "svd_deg": 313.24}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789189796839, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0068", "position": {"x": 1462.7483751398088, "y": -650.0831829108039}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189796839, "virtual_time_s": 2125.712438, "measure_result": "direction", "svd_deg": 348.38}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789189796840, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0069", "position": {"x": 1471.0208740677872, "y": -651.8822737190164}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189796840, "virtual_time_s": 2132.405612, "clear_result": "success"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789189796841, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0070", "position": {"x": 1200.0, "y": -700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189796841, "virtual_time_s": 2193.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789189796842, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0071", "position": {"x": 1200.0, "y": -700.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189796842, "virtual_time_s": 2199.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789189796843, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0072", "position": {"x": 1200.0, "y": -700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189796843, "virtual_time_s": 2205.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789189796843, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0073", "position": {"x": 1200.0, "y": -700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189796843, "virtual_time_s": 2211.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789189796844, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0074", "position": {"x": 1200.0, "y": -700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189796844, "virtual_time_s": 2217.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789189796845, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0075", "position": {"x": 1200.0, "y": -700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189796845, "virtual_time_s": 2223.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789189796845, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0076", "position": {"x": 1200.0, "y": -700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189796845, "virtual_time_s": 2229.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789189796846, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0077", "position": {"x": 1200.0, "y": -700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189796846, "virtual_time_s": 2235.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789189796847, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0078", "position": {"x": 1200.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189796847, "virtual_time_s": 2241.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789189796848, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0079", "position": {"x": 1200.0, "y": -700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189796848, "virtual_time_s": 2247.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789189796848, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0080", "position": {"x": 1200.0, "y": -700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189796848, "virtual_time_s": 2253.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789189796849, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0081", "position": {"x": 900.0, "y": -700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189796849, "virtual_time_s": 2318.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789189796849, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0082", "position": {"x": 900.0, "y": -700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189796849, "virtual_time_s": 2324.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789189796850, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0083", "position": {"x": 900.0, "y": -700.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189796850, "virtual_time_s": 2330.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789189796850, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0084", "position": {"x": 900.0, "y": -700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189796850, "virtual_time_s": 2336.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789189796851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0085", "position": {"x": 900.0, "y": -700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189796851, "virtual_time_s": 2342.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789189796851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0086", "position": {"x": 900.0, "y": -700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189796851, "virtual_time_s": 2348.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789189796852, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0087", "position": {"x": 900.0, "y": -700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189796852, "virtual_time_s": 2354.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789189796853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0088", "position": {"x": 900.0, "y": -700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189796853, "virtual_time_s": 2360.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789189796853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0089", "position": {"x": 900.0, "y": -700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189796853, "virtual_time_s": 2366.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789189796854, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0090", "position": {"x": 900.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189796854, "virtual_time_s": 2372.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789189796854, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0091", "position": {"x": 900.0, "y": -700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189796854, "virtual_time_s": 2378.457453, "measure_result": "no_signal"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789189796855, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0092", "position": {"x": 200.0, "y": -900.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189796855, "virtual_time_s": 2529.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789189796855, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0093", "position": {"x": 200.0, "y": -900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189796855, "virtual_time_s": 2535.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789189796856, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0094", "position": {"x": 200.0, "y": -900.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189796856, "virtual_time_s": 2541.059651, "measure_result": "direction", "svd_deg": 226.84}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789189796890, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0095", "position": {"x": 200.0, "y": -900.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189796890, "virtual_time_s": 2547.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789189796891, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0096", "position": {"x": 200.0, "y": -900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189796891, "virtual_time_s": 2553.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789189796891, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0097", "position": {"x": 200.0, "y": -900.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189796891, "virtual_time_s": 2559.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789189796892, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0098", "position": {"x": 200.0, "y": -900.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189796892, "virtual_time_s": 2565.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789189796892, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0099", "position": {"x": 200.0, "y": -900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189796892, "virtual_time_s": 2571.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789189796893, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0100", "position": {"x": 200.0, "y": -900.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189796893, "virtual_time_s": 2577.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789189796894, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0101", "position": {"x": 200.0, "y": -900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189796894, "virtual_time_s": 2583.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789189796894, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0102", "position": {"x": 200.0, "y": -900.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189796894, "virtual_time_s": 2589.059651, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789189796982, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0103", "position": {"x": 7.738970292891935, "y": -1103.8072756037566}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189796982, "virtual_time_s": 2651.095964, "measure_result": "direction", "svd_deg": 226.62}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789189797048, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0104", "position": {"x": -137.53746862177778, "y": -1255.4586389729425}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189797048, "virtual_time_s": 2698.097573, "measure_result": "direction", "svd_deg": 225.02}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789189797098, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0105", "position": {"x": -247.29736567880943, "y": -1368.4059982572323}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189797098, "virtual_time_s": 2734.596361, "measure_result": "direction", "svd_deg": 226.01}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789189797138, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0106", "position": {"x": -330.01762201362465, "y": -1452.7199857056764}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189797138, "virtual_time_s": 2763.219646, "measure_result": "direction", "svd_deg": 223.58}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789189797155, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0107", "position": {"x": -356.7178864360071, "y": -1478.6576909079818}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189797155, "virtual_time_s": 2775.66456, "measure_result": "direction", "svd_deg": 224.65}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789189797170, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0108", "position": {"x": -376.64822512806643, "y": -1498.2067499900024}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189797170, "virtual_time_s": 2786.24805, "measure_result": "direction", "svd_deg": 225.62}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789189797184, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0109", "position": {"x": -391.54847262149156, "y": -1512.916357678408}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189797184, "virtual_time_s": 2795.435603, "measure_result": "direction", "svd_deg": 224.87}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789189797197, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0110", "position": {"x": -402.6998794077743, "y": -1523.9724445621812}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189797197, "virtual_time_s": 2803.576246, "measure_result": "near"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789189797199, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0111", "position": {"x": -402.6983888073894, "y": -1523.9739351625662}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189797199, "virtual_time_s": 2808.576668, "clear_result": "success"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789189797199, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0112", "position": {"x": -400.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797199, "virtual_time_s": 2869.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789189797200, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0113", "position": {"x": -400.0, "y": -1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797200, "virtual_time_s": 2875.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789189797201, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0114", "position": {"x": -400.0, "y": -1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797201, "virtual_time_s": 2881.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789189797201, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0115", "position": {"x": -400.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797201, "virtual_time_s": 2887.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789189797202, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0116", "position": {"x": -400.0, "y": -1800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797202, "virtual_time_s": 2893.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789189797203, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0117", "position": {"x": -400.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797203, "virtual_time_s": 2899.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789189797203, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0118", "position": {"x": -400.0, "y": -1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797203, "virtual_time_s": 2905.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789189797204, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0119", "position": {"x": -400.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797204, "virtual_time_s": 2911.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789189797205, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0120", "position": {"x": -400.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797205, "virtual_time_s": 2917.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789189797205, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0121", "position": {"x": -400.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189797205, "virtual_time_s": 2923.784519, "measure_result": "no_signal"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789189797206, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0122", "position": {"x": -900.0, "y": -2100.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189797206, "virtual_time_s": 3045.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789189797206, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0123", "position": {"x": -900.0, "y": -2100.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797206, "virtual_time_s": 3051.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789189797207, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0124", "position": {"x": -900.0, "y": -2100.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797207, "virtual_time_s": 3057.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789189797208, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0125", "position": {"x": -900.0, "y": -2100.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797208, "virtual_time_s": 3063.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789189797208, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0126", "position": {"x": -900.0, "y": -2100.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797208, "virtual_time_s": 3069.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789189797209, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0127", "position": {"x": -900.0, "y": -2100.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797209, "virtual_time_s": 3075.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 128, "wall_ts_ms": 1789189797209, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0128", "position": {"x": -900.0, "y": -2100.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797209, "virtual_time_s": 3081.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 129, "wall_ts_ms": 1789189797210, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0129", "position": {"x": -900.0, "y": -2100.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797210, "virtual_time_s": 3087.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 130, "wall_ts_ms": 1789189797210, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0130", "position": {"x": -900.0, "y": -2100.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797210, "virtual_time_s": 3093.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 131, "wall_ts_ms": 1789189797211, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0131", "position": {"x": -900.0, "y": -2100.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797211, "virtual_time_s": 3099.403557, "measure_result": "no_signal"}} +{"event": "action", "seq": 132, "wall_ts_ms": 1789189797211, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0132", "position": {"x": -700.0, "y": -1200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797211, "virtual_time_s": 3288.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 133, "wall_ts_ms": 1789189797212, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0133", "position": {"x": -700.0, "y": -1200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797212, "virtual_time_s": 3294.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 134, "wall_ts_ms": 1789189797212, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0134", "position": {"x": -700.0, "y": -1200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797212, "virtual_time_s": 3300.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 135, "wall_ts_ms": 1789189797213, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0135", "position": {"x": -700.0, "y": -1200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797213, "virtual_time_s": 3306.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 136, "wall_ts_ms": 1789189797213, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0136", "position": {"x": -700.0, "y": -1200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797213, "virtual_time_s": 3312.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 137, "wall_ts_ms": 1789189797214, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0137", "position": {"x": -700.0, "y": -1200.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797214, "virtual_time_s": 3318.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 138, "wall_ts_ms": 1789189797214, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0138", "position": {"x": -700.0, "y": -1200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797214, "virtual_time_s": 3324.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 139, "wall_ts_ms": 1789189797215, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0139", "position": {"x": -700.0, "y": -1200.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797215, "virtual_time_s": 3330.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 140, "wall_ts_ms": 1789189797215, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0140", "position": {"x": -700.0, "y": -1200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797215, "virtual_time_s": 3336.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 141, "wall_ts_ms": 1789189797216, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0141", "position": {"x": -700.0, "y": -1200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189797216, "virtual_time_s": 3342.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 142, "wall_ts_ms": 1789189797217, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0142", "position": {"x": -700.0, "y": -700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189797217, "virtual_time_s": 3447.794446, "measure_result": "direction", "svd_deg": 242.61}} +{"event": "action", "seq": 143, "wall_ts_ms": 1789189797250, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0143", "position": {"x": -700.0, "y": -700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797250, "virtual_time_s": 3453.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 144, "wall_ts_ms": 1789189797251, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0144", "position": {"x": -700.0, "y": -700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797251, "virtual_time_s": 3459.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 145, "wall_ts_ms": 1789189797251, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0145", "position": {"x": -700.0, "y": -700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797251, "virtual_time_s": 3465.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 146, "wall_ts_ms": 1789189797252, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0146", "position": {"x": -700.0, "y": -700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797252, "virtual_time_s": 3471.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 147, "wall_ts_ms": 1789189797252, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0147", "position": {"x": -700.0, "y": -700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797252, "virtual_time_s": 3477.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 148, "wall_ts_ms": 1789189797253, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0148", "position": {"x": -700.0, "y": -700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797253, "virtual_time_s": 3483.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 149, "wall_ts_ms": 1789189797253, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0149", "position": {"x": -700.0, "y": -700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797253, "virtual_time_s": 3489.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 150, "wall_ts_ms": 1789189797254, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0150", "position": {"x": -700.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797254, "virtual_time_s": 3495.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 151, "wall_ts_ms": 1789189797254, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0151", "position": {"x": -700.0, "y": -700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797254, "virtual_time_s": 3501.794446, "measure_result": "no_signal"}} +{"event": "action", "seq": 152, "wall_ts_ms": 1789189797316, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0152", "position": {"x": -737.8876668840163, "y": -926.1545490753924}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189797316, "virtual_time_s": 3553.655696, "measure_result": "no_signal"}} +{"event": "action", "seq": 153, "wall_ts_ms": 1789189797378, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0153", "position": {"x": -885.3363697487036, "y": -865.0792965945183}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189797378, "virtual_time_s": 3590.575161, "measure_result": "direction", "svd_deg": 292.98}} +{"event": "action", "seq": 154, "wall_ts_ms": 1789189797379, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0154", "position": {"x": -840.444150311994, "y": -971.329443413368}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189797379, "virtual_time_s": 3618.644106, "clear_result": "success"}} +{"event": "action", "seq": 155, "wall_ts_ms": 1789189797380, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0155", "position": {"x": -1500.0, "y": -1300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797380, "virtual_time_s": 3772.026365, "measure_result": "no_signal"}} +{"event": "action", "seq": 156, "wall_ts_ms": 1789189797380, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0156", "position": {"x": -1500.0, "y": -1300.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797380, "virtual_time_s": 3778.026365, "measure_result": "no_signal"}} +{"event": "action", "seq": 157, "wall_ts_ms": 1789189797381, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0157", "position": {"x": -1500.0, "y": -1300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797381, "virtual_time_s": 3784.026365, "measure_result": "no_signal"}} +{"event": "action", "seq": 158, "wall_ts_ms": 1789189797382, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0158", "position": {"x": -1500.0, "y": -1300.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797382, "virtual_time_s": 3790.026365, "measure_result": "no_signal"}} +{"event": "action", "seq": 159, "wall_ts_ms": 1789189797382, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0159", "position": {"x": -1500.0, "y": -1300.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797382, "virtual_time_s": 3796.026365, "measure_result": "no_signal"}} +{"event": "action", "seq": 160, "wall_ts_ms": 1789189797383, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0160", "position": {"x": -1500.0, "y": -1300.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797383, "virtual_time_s": 3802.026365, "measure_result": "no_signal"}} +{"event": "action", "seq": 161, "wall_ts_ms": 1789189797383, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0161", "position": {"x": -1500.0, "y": -1300.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797383, "virtual_time_s": 3808.026365, "measure_result": "no_signal"}} +{"event": "action", "seq": 162, "wall_ts_ms": 1789189797384, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0162", "position": {"x": -1500.0, "y": -1300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797384, "virtual_time_s": 3814.026365, "measure_result": "no_signal"}} +{"event": "action", "seq": 163, "wall_ts_ms": 1789189797384, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0163", "position": {"x": -1500.0, "y": -1300.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797384, "virtual_time_s": 3820.026365, "measure_result": "no_signal"}} +{"event": "action", "seq": 164, "wall_ts_ms": 1789189797385, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0164", "position": {"x": -1700.0, "y": -500.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797385, "virtual_time_s": 3989.95059, "measure_result": "no_signal"}} +{"event": "action", "seq": 165, "wall_ts_ms": 1789189797385, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0165", "position": {"x": -1700.0, "y": -500.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797385, "virtual_time_s": 3995.95059, "measure_result": "no_signal"}} +{"event": "action", "seq": 166, "wall_ts_ms": 1789189797386, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0166", "position": {"x": -1700.0, "y": -500.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797386, "virtual_time_s": 4001.95059, "measure_result": "no_signal"}} +{"event": "action", "seq": 167, "wall_ts_ms": 1789189797386, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0167", "position": {"x": -1700.0, "y": -500.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797386, "virtual_time_s": 4007.95059, "measure_result": "no_signal"}} +{"event": "action", "seq": 168, "wall_ts_ms": 1789189797387, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0168", "position": {"x": -1700.0, "y": -500.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797387, "virtual_time_s": 4013.95059, "measure_result": "no_signal"}} +{"event": "action", "seq": 169, "wall_ts_ms": 1789189797387, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0169", "position": {"x": -1700.0, "y": -500.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797387, "virtual_time_s": 4019.95059, "measure_result": "no_signal"}} +{"event": "action", "seq": 170, "wall_ts_ms": 1789189797388, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0170", "position": {"x": -1700.0, "y": -500.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797388, "virtual_time_s": 4025.95059, "measure_result": "no_signal"}} +{"event": "action", "seq": 171, "wall_ts_ms": 1789189797388, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0171", "position": {"x": -1700.0, "y": -500.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797388, "virtual_time_s": 4031.95059, "measure_result": "no_signal"}} +{"event": "action", "seq": 172, "wall_ts_ms": 1789189797390, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0172", "position": {"x": -1700.0, "y": -500.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797390, "virtual_time_s": 4037.95059, "measure_result": "no_signal"}} +{"event": "action", "seq": 173, "wall_ts_ms": 1789189797391, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0173", "position": {"x": -1800.0, "y": -300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797391, "virtual_time_s": 4087.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 174, "wall_ts_ms": 1789189797392, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0174", "position": {"x": -1800.0, "y": -300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797392, "virtual_time_s": 4093.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 175, "wall_ts_ms": 1789189797392, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0175", "position": {"x": -1800.0, "y": -300.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797392, "virtual_time_s": 4099.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 176, "wall_ts_ms": 1789189797393, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0176", "position": {"x": -1800.0, "y": -300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797393, "virtual_time_s": 4105.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 177, "wall_ts_ms": 1789189797393, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0177", "position": {"x": -1800.0, "y": -300.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797393, "virtual_time_s": 4111.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 178, "wall_ts_ms": 1789189797394, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0178", "position": {"x": -1800.0, "y": -300.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797394, "virtual_time_s": 4117.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 179, "wall_ts_ms": 1789189797394, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0179", "position": {"x": -1800.0, "y": -300.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797394, "virtual_time_s": 4123.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 180, "wall_ts_ms": 1789189797395, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0180", "position": {"x": -1800.0, "y": -300.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797395, "virtual_time_s": 4129.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 181, "wall_ts_ms": 1789189797396, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0181", "position": {"x": -1800.0, "y": -300.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797396, "virtual_time_s": 4135.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 182, "wall_ts_ms": 1789189797396, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0182", "position": {"x": -1800.0, "y": 400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797396, "virtual_time_s": 4280.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 183, "wall_ts_ms": 1789189797397, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0183", "position": {"x": -1800.0, "y": 400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797397, "virtual_time_s": 4286.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 184, "wall_ts_ms": 1789189797397, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0184", "position": {"x": -1800.0, "y": 400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797397, "virtual_time_s": 4292.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 185, "wall_ts_ms": 1789189797398, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0185", "position": {"x": -1800.0, "y": 400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797398, "virtual_time_s": 4298.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 186, "wall_ts_ms": 1789189797399, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0186", "position": {"x": -1800.0, "y": 400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797398, "virtual_time_s": 4304.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 187, "wall_ts_ms": 1789189797399, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0187", "position": {"x": -1800.0, "y": 400.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797399, "virtual_time_s": 4310.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 188, "wall_ts_ms": 1789189797407, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0188", "position": {"x": -1800.0, "y": 400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797407, "virtual_time_s": 4316.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 189, "wall_ts_ms": 1789189797408, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0189", "position": {"x": -1800.0, "y": 400.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797408, "virtual_time_s": 4322.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 190, "wall_ts_ms": 1789189797409, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0190", "position": {"x": -1800.0, "y": 400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797409, "virtual_time_s": 4328.67195, "measure_result": "no_signal"}} +{"event": "action", "seq": 191, "wall_ts_ms": 1789189797409, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0191", "position": {"x": -1200.0, "y": 700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797409, "virtual_time_s": 4467.836029, "measure_result": "no_signal"}} +{"event": "action", "seq": 192, "wall_ts_ms": 1789189797410, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0192", "position": {"x": -1200.0, "y": 700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797410, "virtual_time_s": 4473.836029, "measure_result": "no_signal"}} +{"event": "action", "seq": 193, "wall_ts_ms": 1789189797410, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0193", "position": {"x": -1200.0, "y": 700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797410, "virtual_time_s": 4479.836029, "measure_result": "no_signal"}} +{"event": "action", "seq": 194, "wall_ts_ms": 1789189797411, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0194", "position": {"x": -1200.0, "y": 700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797411, "virtual_time_s": 4485.836029, "measure_result": "no_signal"}} +{"event": "action", "seq": 195, "wall_ts_ms": 1789189797411, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0195", "position": {"x": -1200.0, "y": 700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797411, "virtual_time_s": 4491.836029, "measure_result": "direction", "svd_deg": 68.69}} +{"event": "action", "seq": 196, "wall_ts_ms": 1789189797446, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0196", "position": {"x": -1200.0, "y": 700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797445, "virtual_time_s": 4497.836029, "measure_result": "no_signal"}} +{"event": "action", "seq": 197, "wall_ts_ms": 1789189797447, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0197", "position": {"x": -1200.0, "y": 700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797447, "virtual_time_s": 4503.836029, "measure_result": "no_signal"}} +{"event": "action", "seq": 198, "wall_ts_ms": 1789189797447, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0198", "position": {"x": -1200.0, "y": 700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797447, "virtual_time_s": 4509.836029, "measure_result": "no_signal"}} +{"event": "action", "seq": 199, "wall_ts_ms": 1789189797448, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0199", "position": {"x": -1200.0, "y": 700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797448, "virtual_time_s": 4515.836029, "measure_result": "no_signal"}} +{"event": "action", "seq": 200, "wall_ts_ms": 1789189797521, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0200", "position": {"x": -1016.08485575561, "y": 905.9114220749395}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797521, "virtual_time_s": 4577.053524, "measure_result": "direction", "svd_deg": 76.89}} +{"event": "action", "seq": 201, "wall_ts_ms": 1789189797544, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0201", "position": {"x": -875.7023463452379, "y": 1454.582192586387}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797544, "virtual_time_s": 4695.32256, "measure_result": "direction", "svd_deg": 77.88}} +{"event": "action", "seq": 202, "wall_ts_ms": 1789189797560, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0202", "position": {"x": -853.2429001389798, "y": 1538.9187253887133}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797560, "virtual_time_s": 4717.777734, "measure_result": "direction", "svd_deg": 236.07}} +{"event": "action", "seq": 203, "wall_ts_ms": 1789189797561, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0203", "position": {"x": -860.4227255077803, "y": 1528.1636526280033}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189797561, "virtual_time_s": 4725.364017, "clear_result": "success"}} +{"event": "action", "seq": 204, "wall_ts_ms": 1789189797562, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0204", "position": {"x": -1300.0, "y": 1500.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797562, "virtual_time_s": 4819.459731, "measure_result": "no_signal"}} +{"event": "action", "seq": 205, "wall_ts_ms": 1789189797562, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0205", "position": {"x": -1300.0, "y": 1500.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797562, "virtual_time_s": 4825.459731, "measure_result": "no_signal"}} +{"event": "action", "seq": 206, "wall_ts_ms": 1789189797563, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0206", "position": {"x": -1300.0, "y": 1500.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797563, "virtual_time_s": 4831.459731, "measure_result": "no_signal"}} +{"event": "action", "seq": 207, "wall_ts_ms": 1789189797564, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0207", "position": {"x": -1300.0, "y": 1500.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797564, "virtual_time_s": 4837.459731, "measure_result": "no_signal"}} +{"event": "action", "seq": 208, "wall_ts_ms": 1789189797564, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0208", "position": {"x": -1300.0, "y": 1500.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797564, "virtual_time_s": 4843.459731, "measure_result": "no_signal"}} +{"event": "action", "seq": 209, "wall_ts_ms": 1789189797565, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0209", "position": {"x": -1300.0, "y": 1500.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797565, "virtual_time_s": 4849.459731, "measure_result": "no_signal"}} +{"event": "action", "seq": 210, "wall_ts_ms": 1789189797565, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0210", "position": {"x": -1300.0, "y": 1500.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797565, "virtual_time_s": 4855.459731, "measure_result": "no_signal"}} +{"event": "action", "seq": 211, "wall_ts_ms": 1789189797566, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0211", "position": {"x": -1300.0, "y": 1500.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797566, "virtual_time_s": 4861.459731, "measure_result": "no_signal"}} +{"event": "action", "seq": 212, "wall_ts_ms": 1789189797566, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0212", "position": {"x": -400.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797566, "virtual_time_s": 5056.196391, "measure_result": "no_signal"}} +{"event": "action", "seq": 213, "wall_ts_ms": 1789189797567, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0213", "position": {"x": -400.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797567, "virtual_time_s": 5062.196391, "measure_result": "no_signal"}} +{"event": "action", "seq": 214, "wall_ts_ms": 1789189797567, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0214", "position": {"x": -400.0, "y": 1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797567, "virtual_time_s": 5068.196391, "measure_result": "no_signal"}} +{"event": "action", "seq": 215, "wall_ts_ms": 1789189797568, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0215", "position": {"x": -400.0, "y": 1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797568, "virtual_time_s": 5074.196391, "measure_result": "no_signal"}} +{"event": "action", "seq": 216, "wall_ts_ms": 1789189797568, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0216", "position": {"x": -400.0, "y": 1800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797568, "virtual_time_s": 5080.196391, "measure_result": "no_signal"}} +{"event": "action", "seq": 217, "wall_ts_ms": 1789189797569, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0217", "position": {"x": -400.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797569, "virtual_time_s": 5086.196391, "measure_result": "no_signal"}} +{"event": "action", "seq": 218, "wall_ts_ms": 1789189797570, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0218", "position": {"x": -400.0, "y": 1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797570, "virtual_time_s": 5092.196391, "measure_result": "direction", "svd_deg": 351.98}} +{"event": "action", "seq": 219, "wall_ts_ms": 1789189797599, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0219", "position": {"x": -400.0, "y": 1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797599, "virtual_time_s": 5098.196391, "measure_result": "no_signal"}} +{"event": "action", "seq": 220, "wall_ts_ms": 1789189797685, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0220", "position": {"x": -4.616244637087618, "y": 1693.758550167221}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797685, "virtual_time_s": 5186.07815, "measure_result": "direction", "svd_deg": 359.72}} +{"event": "action", "seq": 221, "wall_ts_ms": 1789189797716, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0221", "position": {"x": 328.365367531713, "y": 1688.9421225673636}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797716, "virtual_time_s": 5257.681439, "measure_result": "direction", "svd_deg": 357.61}} +{"event": "action", "seq": 222, "wall_ts_ms": 1789189797737, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0222", "position": {"x": 388.1739348470247, "y": 1684.931072699826}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797737, "virtual_time_s": 5274.670022, "measure_result": "direction", "svd_deg": 359.13}} +{"event": "action", "seq": 223, "wall_ts_ms": 1789189797758, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0223", "position": {"x": 438.68211728997807, "y": 1682.9343912880354}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797758, "virtual_time_s": 5289.779549, "measure_result": "direction", "svd_deg": 359.6}} +{"event": "action", "seq": 224, "wall_ts_ms": 1789189797772, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0224", "position": {"x": 490.95387372005223, "y": 1682.0681093118433}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797772, "virtual_time_s": 5305.235336, "measure_result": "direction", "svd_deg": 1.71}} +{"event": "action", "seq": 225, "wall_ts_ms": 1789189797787, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0225", "position": {"x": 512.448079143366, "y": 1682.6402757900098}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797787, "virtual_time_s": 5314.5357, "measure_result": "direction", "svd_deg": 180.66}} +{"event": "action", "seq": 226, "wall_ts_ms": 1789189797789, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0226", "position": {"x": 505.81098121136523, "y": 1682.5490938591954}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189797789, "virtual_time_s": 5320.863245, "clear_result": "success"}} +{"event": "action", "seq": 227, "wall_ts_ms": 1789189797789, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0227", "position": {"x": 400.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797789, "virtual_time_s": 5358.480126, "measure_result": "no_signal"}} +{"event": "action", "seq": 228, "wall_ts_ms": 1789189797790, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0228", "position": {"x": 400.0, "y": 1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797790, "virtual_time_s": 5364.480126, "measure_result": "no_signal"}} +{"event": "action", "seq": 229, "wall_ts_ms": 1789189797790, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0229", "position": {"x": 400.0, "y": 1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797790, "virtual_time_s": 5370.480126, "measure_result": "no_signal"}} +{"event": "action", "seq": 230, "wall_ts_ms": 1789189797791, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0230", "position": {"x": 400.0, "y": 1800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797791, "virtual_time_s": 5376.480126, "measure_result": "no_signal"}} +{"event": "action", "seq": 231, "wall_ts_ms": 1789189797792, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0231", "position": {"x": 400.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797792, "virtual_time_s": 5382.480126, "measure_result": "no_signal"}} +{"event": "action", "seq": 232, "wall_ts_ms": 1789189797792, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0232", "position": {"x": 400.0, "y": 1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797792, "virtual_time_s": 5388.480126, "measure_result": "no_signal"}} +{"event": "action", "seq": 233, "wall_ts_ms": 1789189797793, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0233", "position": {"x": 400.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797793, "virtual_time_s": 5394.480126, "measure_result": "no_signal"}} +{"event": "action", "seq": 234, "wall_ts_ms": 1789189797793, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0234", "position": {"x": 600.0, "y": 1900.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797793, "virtual_time_s": 5444.201486, "measure_result": "no_signal"}} +{"event": "action", "seq": 235, "wall_ts_ms": 1789189797794, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0235", "position": {"x": 600.0, "y": 1900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797794, "virtual_time_s": 5450.201486, "measure_result": "no_signal"}} +{"event": "action", "seq": 236, "wall_ts_ms": 1789189797794, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0236", "position": {"x": 600.0, "y": 1900.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797794, "virtual_time_s": 5456.201486, "measure_result": "no_signal"}} +{"event": "action", "seq": 237, "wall_ts_ms": 1789189797795, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0237", "position": {"x": 600.0, "y": 1900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797795, "virtual_time_s": 5462.201486, "measure_result": "no_signal"}} +{"event": "action", "seq": 238, "wall_ts_ms": 1789189797795, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0238", "position": {"x": 600.0, "y": 1900.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797795, "virtual_time_s": 5468.201486, "measure_result": "no_signal"}} +{"event": "action", "seq": 239, "wall_ts_ms": 1789189797796, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0239", "position": {"x": 600.0, "y": 1900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797796, "virtual_time_s": 5474.201486, "measure_result": "no_signal"}} +{"event": "action", "seq": 240, "wall_ts_ms": 1789189797796, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0240", "position": {"x": 600.0, "y": 1900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797796, "virtual_time_s": 5480.201486, "measure_result": "no_signal"}} +{"event": "action", "seq": 241, "wall_ts_ms": 1789189797797, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0241", "position": {"x": 800.0, "y": 1200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797797, "virtual_time_s": 5630.803684, "measure_result": "no_signal"}} +{"event": "action", "seq": 242, "wall_ts_ms": 1789189797797, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0242", "position": {"x": 800.0, "y": 1200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797797, "virtual_time_s": 5636.803684, "measure_result": "no_signal"}} +{"event": "action", "seq": 243, "wall_ts_ms": 1789189797798, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0243", "position": {"x": 800.0, "y": 1200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797798, "virtual_time_s": 5642.803684, "measure_result": "no_signal"}} +{"event": "action", "seq": 244, "wall_ts_ms": 1789189797798, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0244", "position": {"x": 800.0, "y": 1200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797798, "virtual_time_s": 5648.803684, "measure_result": "no_signal"}} +{"event": "action", "seq": 245, "wall_ts_ms": 1789189797799, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0245", "position": {"x": 800.0, "y": 1200.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797799, "virtual_time_s": 5654.803684, "measure_result": "no_signal"}} +{"event": "action", "seq": 246, "wall_ts_ms": 1789189797799, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0246", "position": {"x": 800.0, "y": 1200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797799, "virtual_time_s": 5660.803684, "measure_result": "no_signal"}} +{"event": "action", "seq": 247, "wall_ts_ms": 1789189797800, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0247", "position": {"x": 800.0, "y": 1200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797800, "virtual_time_s": 5666.803684, "measure_result": "no_signal"}} +{"event": "action", "seq": 248, "wall_ts_ms": 1789189797801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0248", "position": {"x": 700.0, "y": 700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797800, "virtual_time_s": 5773.784074, "measure_result": "no_signal"}} +{"event": "action", "seq": 249, "wall_ts_ms": 1789189797801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0249", "position": {"x": 700.0, "y": 700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797801, "virtual_time_s": 5779.784074, "measure_result": "no_signal"}} +{"event": "action", "seq": 250, "wall_ts_ms": 1789189797802, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0250", "position": {"x": 700.0, "y": 700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797802, "virtual_time_s": 5785.784074, "measure_result": "no_signal"}} +{"event": "action", "seq": 251, "wall_ts_ms": 1789189797802, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0251", "position": {"x": 700.0, "y": 700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797802, "virtual_time_s": 5791.784074, "measure_result": "no_signal"}} +{"event": "action", "seq": 252, "wall_ts_ms": 1789189797803, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0252", "position": {"x": 700.0, "y": 700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797803, "virtual_time_s": 5797.784074, "measure_result": "no_signal"}} +{"event": "action", "seq": 253, "wall_ts_ms": 1789189797803, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0253", "position": {"x": 700.0, "y": 700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797803, "virtual_time_s": 5803.784074, "measure_result": "no_signal"}} +{"event": "action", "seq": 254, "wall_ts_ms": 1789189797804, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0254", "position": {"x": 700.0, "y": 700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797804, "virtual_time_s": 5809.784074, "measure_result": "no_signal"}} +{"event": "action", "seq": 255, "wall_ts_ms": 1789189797804, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0255", "position": {"x": 1300.0, "y": 1100.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797804, "virtual_time_s": 5959.006125, "measure_result": "no_signal"}} +{"event": "action", "seq": 256, "wall_ts_ms": 1789189797805, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0256", "position": {"x": 1300.0, "y": 1100.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797805, "virtual_time_s": 5965.006125, "measure_result": "no_signal"}} +{"event": "action", "seq": 257, "wall_ts_ms": 1789189797806, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0257", "position": {"x": 1300.0, "y": 1100.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797805, "virtual_time_s": 5971.006125, "measure_result": "no_signal"}} +{"event": "action", "seq": 258, "wall_ts_ms": 1789189797806, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0258", "position": {"x": 1300.0, "y": 1100.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797806, "virtual_time_s": 5977.006125, "measure_result": "no_signal"}} +{"event": "action", "seq": 259, "wall_ts_ms": 1789189797807, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0259", "position": {"x": 1300.0, "y": 1100.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797807, "virtual_time_s": 5983.006125, "measure_result": "no_signal"}} +{"event": "action", "seq": 260, "wall_ts_ms": 1789189797807, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0260", "position": {"x": 1300.0, "y": 1100.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797807, "virtual_time_s": 5989.006125, "measure_result": "no_signal"}} +{"event": "action", "seq": 261, "wall_ts_ms": 1789189797808, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0261", "position": {"x": 1300.0, "y": 1100.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797808, "virtual_time_s": 5995.006125, "measure_result": "no_signal"}} +{"event": "action", "seq": 262, "wall_ts_ms": 1789189797808, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0262", "position": {"x": 1500.0, "y": 1300.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797808, "virtual_time_s": 6056.574667, "measure_result": "no_signal"}} +{"event": "action", "seq": 263, "wall_ts_ms": 1789189797809, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0263", "position": {"x": 1500.0, "y": 1300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797809, "virtual_time_s": 6062.574667, "measure_result": "no_signal"}} +{"event": "action", "seq": 264, "wall_ts_ms": 1789189797809, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0264", "position": {"x": 1500.0, "y": 1300.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797809, "virtual_time_s": 6068.574667, "measure_result": "no_signal"}} +{"event": "action", "seq": 265, "wall_ts_ms": 1789189797810, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0265", "position": {"x": 1500.0, "y": 1300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797810, "virtual_time_s": 6074.574667, "measure_result": "no_signal"}} +{"event": "action", "seq": 266, "wall_ts_ms": 1789189797810, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0266", "position": {"x": 1500.0, "y": 1300.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797810, "virtual_time_s": 6080.574667, "measure_result": "no_signal"}} +{"event": "action", "seq": 267, "wall_ts_ms": 1789189797811, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0267", "position": {"x": 1500.0, "y": 1300.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797811, "virtual_time_s": 6086.574667, "measure_result": "no_signal"}} +{"event": "action", "seq": 268, "wall_ts_ms": 1789189797811, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0268", "position": {"x": 1500.0, "y": 1300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797811, "virtual_time_s": 6092.574667, "measure_result": "no_signal"}} +{"event": "action", "seq": 269, "wall_ts_ms": 1789189797812, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0269", "position": {"x": 1800.0, "y": 300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797812, "virtual_time_s": 6306.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 270, "wall_ts_ms": 1789189797812, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0270", "position": {"x": 1800.0, "y": 300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797812, "virtual_time_s": 6312.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 271, "wall_ts_ms": 1789189797813, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0271", "position": {"x": 1800.0, "y": 300.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797813, "virtual_time_s": 6318.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 272, "wall_ts_ms": 1789189797813, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0272", "position": {"x": 1800.0, "y": 300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797813, "virtual_time_s": 6324.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 273, "wall_ts_ms": 1789189797814, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0273", "position": {"x": 1800.0, "y": 300.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797814, "virtual_time_s": 6330.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 274, "wall_ts_ms": 1789189797814, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0274", "position": {"x": 1800.0, "y": 300.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797814, "virtual_time_s": 6336.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 275, "wall_ts_ms": 1789189797815, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0275", "position": {"x": 1800.0, "y": 300.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797815, "virtual_time_s": 6342.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 276, "wall_ts_ms": 1789189797815, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0276", "position": {"x": 1800.0, "y": -400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797815, "virtual_time_s": 6487.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 277, "wall_ts_ms": 1789189797816, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0277", "position": {"x": 1800.0, "y": -400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797816, "virtual_time_s": 6493.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 278, "wall_ts_ms": 1789189797816, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0278", "position": {"x": 1800.0, "y": -400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797816, "virtual_time_s": 6499.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 279, "wall_ts_ms": 1789189797817, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0279", "position": {"x": 1800.0, "y": -400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797817, "virtual_time_s": 6505.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 280, "wall_ts_ms": 1789189797817, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0280", "position": {"x": 1800.0, "y": -400.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797817, "virtual_time_s": 6511.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 281, "wall_ts_ms": 1789189797818, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0281", "position": {"x": 1800.0, "y": -400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797818, "virtual_time_s": 6517.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 282, "wall_ts_ms": 1789189797818, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0282", "position": {"x": 1800.0, "y": -400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797818, "virtual_time_s": 6523.380797, "measure_result": "no_signal"}} +{"event": "action", "seq": 283, "wall_ts_ms": 1789189797819, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0283", "position": {"x": 1900.0, "y": -900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797819, "virtual_time_s": 6630.361187, "measure_result": "no_signal"}} +{"event": "action", "seq": 284, "wall_ts_ms": 1789189797819, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0284", "position": {"x": 1900.0, "y": -900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797819, "virtual_time_s": 6636.361187, "measure_result": "no_signal"}} +{"event": "action", "seq": 285, "wall_ts_ms": 1789189797820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0285", "position": {"x": 1900.0, "y": -900.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797820, "virtual_time_s": 6642.361187, "measure_result": "no_signal"}} +{"event": "action", "seq": 286, "wall_ts_ms": 1789189797820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0286", "position": {"x": 1900.0, "y": -900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797820, "virtual_time_s": 6648.361187, "measure_result": "no_signal"}} +{"event": "action", "seq": 287, "wall_ts_ms": 1789189797821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0287", "position": {"x": 1900.0, "y": -900.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797821, "virtual_time_s": 6654.361187, "measure_result": "no_signal"}} +{"event": "action", "seq": 288, "wall_ts_ms": 1789189797821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0288", "position": {"x": 1900.0, "y": -900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797821, "virtual_time_s": 6660.361187, "measure_result": "no_signal"}} +{"event": "action", "seq": 289, "wall_ts_ms": 1789189797822, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0289", "position": {"x": 1900.0, "y": -900.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797822, "virtual_time_s": 6666.361187, "measure_result": "no_signal"}} +{"event": "action", "seq": 290, "wall_ts_ms": 1789189797822, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0290", "position": {"x": 1400.0, "y": -1400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797822, "virtual_time_s": 6812.782543, "measure_result": "no_signal"}} +{"event": "action", "seq": 291, "wall_ts_ms": 1789189797823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0291", "position": {"x": 1400.0, "y": -1400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797823, "virtual_time_s": 6818.782543, "measure_result": "no_signal"}} +{"event": "action", "seq": 292, "wall_ts_ms": 1789189797823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0292", "position": {"x": 1400.0, "y": -1400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797823, "virtual_time_s": 6824.782543, "measure_result": "no_signal"}} +{"event": "action", "seq": 293, "wall_ts_ms": 1789189797824, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0293", "position": {"x": 1400.0, "y": -1400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797824, "virtual_time_s": 6830.782543, "measure_result": "no_signal"}} +{"event": "action", "seq": 294, "wall_ts_ms": 1789189797824, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0294", "position": {"x": 1400.0, "y": -1400.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797824, "virtual_time_s": 6836.782543, "measure_result": "no_signal"}} +{"event": "action", "seq": 295, "wall_ts_ms": 1789189797825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0295", "position": {"x": 1400.0, "y": -1400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797825, "virtual_time_s": 6842.782543, "measure_result": "no_signal"}} +{"event": "action", "seq": 296, "wall_ts_ms": 1789189797825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0296", "position": {"x": 1400.0, "y": -1400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797825, "virtual_time_s": 6848.782543, "measure_result": "no_signal"}} +{"event": "action", "seq": 297, "wall_ts_ms": 1789189797826, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0297", "position": {"x": 500.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797826, "virtual_time_s": 7050.759699, "measure_result": "no_signal"}} +{"event": "action", "seq": 298, "wall_ts_ms": 1789189797826, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0298", "position": {"x": 500.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797826, "virtual_time_s": 7056.759699, "measure_result": "no_signal"}} +{"event": "action", "seq": 299, "wall_ts_ms": 1789189797827, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0299", "position": {"x": 500.0, "y": -1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797827, "virtual_time_s": 7062.759699, "measure_result": "no_signal"}} +{"event": "action", "seq": 300, "wall_ts_ms": 1789189797827, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0300", "position": {"x": 500.0, "y": -1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797827, "virtual_time_s": 7068.759699, "measure_result": "no_signal"}} +{"event": "action", "seq": 301, "wall_ts_ms": 1789189797828, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0301", "position": {"x": 500.0, "y": -1800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797827, "virtual_time_s": 7074.759699, "measure_result": "no_signal"}} +{"event": "action", "seq": 302, "wall_ts_ms": 1789189797828, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0302", "position": {"x": 500.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797828, "virtual_time_s": 7080.759699, "measure_result": "no_signal"}} +{"event": "action", "seq": 303, "wall_ts_ms": 1789189797828, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0303", "position": {"x": 500.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797828, "virtual_time_s": 7086.759699, "measure_result": "no_signal"}} +{"event": "action", "seq": 304, "wall_ts_ms": 1789189797829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0304", "position": {"x": -800.0, "y": -200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797829, "virtual_time_s": 7504.070262, "measure_result": "no_signal"}} +{"event": "action", "seq": 305, "wall_ts_ms": 1789189797829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0305", "position": {"x": -800.0, "y": -200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797829, "virtual_time_s": 7510.070262, "measure_result": "no_signal"}} +{"event": "action", "seq": 306, "wall_ts_ms": 1789189797830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0306", "position": {"x": -800.0, "y": -200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797830, "virtual_time_s": 7516.070262, "measure_result": "no_signal"}} +{"event": "action", "seq": 307, "wall_ts_ms": 1789189797830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0307", "position": {"x": -800.0, "y": -200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797830, "virtual_time_s": 7522.070262, "measure_result": "no_signal"}} +{"event": "action", "seq": 308, "wall_ts_ms": 1789189797831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0308", "position": {"x": -800.0, "y": -200.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797831, "virtual_time_s": 7528.070262, "measure_result": "no_signal"}} +{"event": "action", "seq": 309, "wall_ts_ms": 1789189797831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0309", "position": {"x": -800.0, "y": -200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797831, "virtual_time_s": 7534.070262, "measure_result": "no_signal"}} +{"event": "action", "seq": 310, "wall_ts_ms": 1789189797832, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0310", "position": {"x": -800.0, "y": -200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797832, "virtual_time_s": 7540.070262, "measure_result": "no_signal"}} +{"event": "action", "seq": 311, "wall_ts_ms": 1789189797832, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0311", "position": {"x": -500.0, "y": 700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797832, "virtual_time_s": 7734.806922, "measure_result": "no_signal"}} +{"event": "action", "seq": 312, "wall_ts_ms": 1789189797833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0312", "position": {"x": -500.0, "y": 700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797833, "virtual_time_s": 7740.806922, "measure_result": "no_signal"}} +{"event": "action", "seq": 313, "wall_ts_ms": 1789189797833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0313", "position": {"x": -500.0, "y": 700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797833, "virtual_time_s": 7746.806922, "measure_result": "no_signal"}} +{"event": "action", "seq": 314, "wall_ts_ms": 1789189797834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0314", "position": {"x": -500.0, "y": 700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797834, "virtual_time_s": 7752.806922, "measure_result": "no_signal"}} +{"event": "action", "seq": 315, "wall_ts_ms": 1789189797834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0315", "position": {"x": -500.0, "y": 700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797834, "virtual_time_s": 7758.806922, "measure_result": "no_signal"}} +{"event": "action", "seq": 316, "wall_ts_ms": 1789189797835, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0316", "position": {"x": -500.0, "y": 700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797835, "virtual_time_s": 7764.806922, "measure_result": "no_signal"}} +{"event": "action", "seq": 317, "wall_ts_ms": 1789189797835, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0317", "position": {"x": -500.0, "y": 700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797835, "virtual_time_s": 7770.806922, "measure_result": "no_signal"}} +{"event": "action", "seq": 318, "wall_ts_ms": 1789189797836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0318", "position": {"x": -200.0, "y": 900.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797836, "virtual_time_s": 7847.917948, "measure_result": "no_signal"}} +{"event": "action", "seq": 319, "wall_ts_ms": 1789189797836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0319", "position": {"x": -200.0, "y": 900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797836, "virtual_time_s": 7853.917948, "measure_result": "no_signal"}} +{"event": "action", "seq": 320, "wall_ts_ms": 1789189797837, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0320", "position": {"x": -200.0, "y": 900.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797837, "virtual_time_s": 7859.917948, "measure_result": "no_signal"}} +{"event": "action", "seq": 321, "wall_ts_ms": 1789189797837, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0321", "position": {"x": -200.0, "y": 900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797837, "virtual_time_s": 7865.917948, "measure_result": "no_signal"}} +{"event": "action", "seq": 322, "wall_ts_ms": 1789189797838, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0322", "position": {"x": -200.0, "y": 900.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797838, "virtual_time_s": 7871.917948, "measure_result": "no_signal"}} +{"event": "action", "seq": 323, "wall_ts_ms": 1789189797838, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0323", "position": {"x": -200.0, "y": 900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797838, "virtual_time_s": 7877.917948, "measure_result": "no_signal"}} +{"event": "action", "seq": 324, "wall_ts_ms": 1789189797839, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0324", "position": {"x": -200.0, "y": 900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797839, "virtual_time_s": 7883.917948, "measure_result": "no_signal"}} +{"event": "action", "seq": 325, "wall_ts_ms": 1789189797839, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0325", "position": {"x": -2500.0, "y": 500.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189797839, "virtual_time_s": 8355.822649, "measure_result": "no_signal"}} +{"event": "action", "seq": 326, "wall_ts_ms": 1789189797840, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0326", "position": {"x": -2500.0, "y": 500.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189797840, "virtual_time_s": 8361.822649, "measure_result": "no_signal"}} +{"event": "action", "seq": 327, "wall_ts_ms": 1789189797840, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0327", "position": {"x": -2500.0, "y": 500.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189797840, "virtual_time_s": 8367.822649, "measure_result": "no_signal"}} +{"event": "action", "seq": 328, "wall_ts_ms": 1789189797841, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0328", "position": {"x": -2500.0, "y": 500.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189797841, "virtual_time_s": 8373.822649, "measure_result": "no_signal"}} +{"event": "action", "seq": 329, "wall_ts_ms": 1789189797841, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0329", "position": {"x": -2500.0, "y": 500.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189797841, "virtual_time_s": 8379.822649, "measure_result": "no_signal"}} +{"event": "action", "seq": 330, "wall_ts_ms": 1789189797842, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0330", "position": {"x": -2500.0, "y": 500.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189797842, "virtual_time_s": 8385.822649, "measure_result": "no_signal"}} +{"event": "action", "seq": 331, "wall_ts_ms": 1789189797842, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0331", "position": {"x": -2500.0, "y": 500.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189797842, "virtual_time_s": 8391.822649, "measure_result": "no_signal"}} +{"event": "action", "seq": 332, "wall_ts_ms": 1789189797843, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "d619f4cbcb30-0332"}, "response": {"accepted": true, "real_timestamp_ms": 1789189797843, "virtual_time_s": 8391.822649, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 8391.822649, "real_elapsed_s": 10.803553, "request_count": 332, "cleared_count": 13} diff --git a/referee-data/sessions/J362-6CKW-9XVL-GEBY/meta.json b/referee-data/sessions/J362-6CKW-9XVL-GEBY/meta.json new file mode 100644 index 0000000..39d0a76 --- /dev/null +++ b/referee-data/sessions/J362-6CKW-9XVL-GEBY/meta.json @@ -0,0 +1,112 @@ +{ + "case_code": "J362-6CKW-9XVL-GEBY", + "module": "q4_practice", + "robot_id": "1", + "seed": 113612701, + "truth": [ + { + "channel": 14, + "x": 1470.4207562780527, + "y": -651.6042865961393, + "r_eff_m": 1363.9682235296764, + "directional": true, + "heading_deg": 176.2574418959534 + }, + { + "channel": 7, + "x": 836.1821848231111, + "y": -522.5175021712796, + "r_eff_m": 1209.854482765384, + "directional": true, + "heading_deg": 144.93979785829004 + }, + { + "channel": 19, + "x": -838.7132030876095, + "y": -977.5525821124045, + "r_eff_m": 1099.867720047544, + "directional": true, + "heading_deg": 149.34104553510116 + }, + { + "channel": 16, + "x": 503.3825736123371, + "y": 1682.5455816584576, + "r_eff_m": 1402.0277539067167, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": -621.5540436830894, + "y": 535.1995768485111, + "r_eff_m": 1426.9101098814824, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": -500.0181669549165, + "y": -1224.8756857550302, + "r_eff_m": 1326.0503063075626, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": -485.7772334360728, + "y": -1156.6300713169117, + "r_eff_m": 1300.806844749737, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": 1032.5055845216568, + "y": 418.80033405849554, + "r_eff_m": 1273.5119419828438, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": -401.4441768249083, + "y": -1523.0177302677398, + "r_eff_m": 1448.0772279665287, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": 408.90891333175847, + "y": -825.7205581192022, + "r_eff_m": 1490.8354339769842, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": -860.4275838731623, + "y": 1528.011033450523, + "r_eff_m": 1454.5005656547696, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": -55.42842671969672, + "y": 203.68207145060492, + "r_eff_m": 1435.5534087414435, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": 418.9959236647655, + "y": -198.25330673309287, + "r_eff_m": 1425.8069445786427, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/JF3H-3W93-C6HG-NZNL/log.jsonl b/referee-data/sessions/JF3H-3W93-C6HG-NZNL/log.jsonl new file mode 100644 index 0000000..acd9715 --- /dev/null +++ b/referee-data/sessions/JF3H-3W93-C6HG-NZNL/log.jsonl @@ -0,0 +1,124 @@ +{"event": "session_start", "case_code": "JF3H-3W93-C6HG-NZNL", "module": "q3_practice", "robot_id": "1", "seed": 200527360, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 12, "x": -829.6709980118327, "y": 1175.0186169476228, "r_eff_m": 1392.6507569213757, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": 1312.4198514579969, "y": 175.55959831321275, "r_eff_m": 1373.4971535190514, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": 873.1647541607986, "y": 1536.5263123836592, "r_eff_m": 1423.1240861351494, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": -1050.8891549792875, "y": 227.7494012937605, "r_eff_m": 1094.143230661049, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": 100.82780707316623, "y": 773.4835024016819, "r_eff_m": 1243.9876028741053, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": -683.2567304115873, "y": -288.37100330423976, "r_eff_m": 1157.7926554992937, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": -1288.0477653137357, "y": -506.7388614051034, "r_eff_m": 1315.9402807097429, "directional": false, "heading_deg": 0.0}, {"channel": 19, "x": -334.05638059601034, "y": -1492.162227610753, "r_eff_m": 1273.193035543722, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": 1165.289691177461, "y": 543.2086082256018, "r_eff_m": 1263.4855675522572, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": -83.54536261981478, "y": -189.8055789389668, "r_eff_m": 1442.3166859288438, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": -420.1269701616991, "y": 1336.1881993145944, "r_eff_m": 1497.9979001223833, "directional": false, "heading_deg": 0.0}, {"channel": 17, "x": 506.4460768292159, "y": -714.216980196575, "r_eff_m": 1295.0753640895696, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": -597.0914995717578, "y": 1664.0515178344365, "r_eff_m": 1179.4903720833731, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789179633406, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789179633406, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789179633412, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179633412, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789179633416, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179633416, "virtual_time_s": 11.0, "measure_result": "direction", "svd_deg": 246.23000000000002}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789179633443, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179633443, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789179633446, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179633446, "virtual_time_s": 23.0, "measure_result": "direction", "svd_deg": 7.77}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789179633473, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179633473, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789179633476, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179633476, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789179633480, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179633480, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789179633484, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789179633484, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789179633488, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179633488, "virtual_time_s": 53.0, "measure_result": "direction", "svd_deg": 167.1}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789179633515, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179633515, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789179633519, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179633519, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789179633523, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179633523, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789179633526, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789179633526, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 107.84}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789179633553, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179633553, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789179633556, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179633556, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789179633560, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789179633560, "virtual_time_s": 95.0, "measure_result": "direction", "svd_deg": 203.35}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789179633587, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789179633587, "virtual_time_s": 101.0, "measure_result": "direction", "svd_deg": 304.44}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789179633614, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179633614, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789179633618, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179633618, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789179633622, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179633622, "virtual_time_s": 119.0, "measure_result": "direction", "svd_deg": 82.98}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789179633685, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0022", "position": {"x": -278.3343697119779, "y": 533.0134889584388}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789179633685, "virtual_time_s": 245.261948, "measure_result": "direction", "svd_deg": 99.52}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789179633716, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0023", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179633716, "virtual_time_s": 363.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789179633719, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0024", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179633719, "virtual_time_s": 369.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789179633722, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0025", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179633722, "virtual_time_s": 375.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789179633725, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0026", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179633725, "virtual_time_s": 381.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789179633728, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0027", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179633728, "virtual_time_s": 387.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789179633730, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0028", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789179633730, "virtual_time_s": 393.163799, "measure_result": "direction", "svd_deg": 90.64}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789179633747, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0029", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179633747, "virtual_time_s": 399.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789179633750, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0030", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179633750, "virtual_time_s": 405.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789179633753, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0031", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179633753, "virtual_time_s": 411.163799, "measure_result": "direction", "svd_deg": 145.72}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789179633771, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0032", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179633771, "virtual_time_s": 417.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789179633775, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0033", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179633775, "virtual_time_s": 423.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789179633777, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0034", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179633777, "virtual_time_s": 429.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789179633780, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0035", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179633780, "virtual_time_s": 435.163799, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789179633783, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0036", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789179633783, "virtual_time_s": 441.163799, "measure_result": "direction", "svd_deg": 63.59}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789179633821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0037", "position": {"x": -867.0529312178796, "y": 1192.8073876870528}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179633821, "virtual_time_s": 515.868785, "measure_result": "direction", "svd_deg": 334.59}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789179633822, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0038", "position": {"x": -867.0529312178796, "y": 1192.8073876870528}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789179633822, "virtual_time_s": 521.868785, "measure_result": "direction", "svd_deg": 60.49}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789179633823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0039", "position": {"x": -867.0529312178796, "y": 1192.8073876870528}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789179633823, "virtual_time_s": 527.868785, "measure_result": "direction", "svd_deg": 18.44}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789179633855, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0040", "position": {"x": -832.0616724727358, "y": 1175.4261564726726}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179633855, "virtual_time_s": 541.682863, "measure_result": "near"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789179633856, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0041", "position": {"x": -832.0616724727358, "y": 1175.4261564726726}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179633856, "virtual_time_s": 546.682863, "clear_result": "success"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789179633883, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0042", "position": {"x": -586.8689706844891, "y": 1677.1279943580194}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789179633883, "virtual_time_s": 664.365305, "measure_result": "direction", "svd_deg": 232.37}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789179633885, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0043", "position": {"x": -587.5840626085131, "y": 1676.165999476378}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789179633885, "virtual_time_s": 669.605037, "clear_result": "success"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789179633909, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0044", "position": {"x": -419.3639919253215, "y": 1347.602570690296}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789179633909, "virtual_time_s": 748.429672, "clear_result": "success"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789179633933, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0045", "position": {"x": -84.59885086436212, "y": 921.144317561707}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179633933, "virtual_time_s": 862.861096, "measure_result": "direction", "svd_deg": 320.79}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789179633956, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0046", "position": {"x": 95.08697920663366, "y": 774.1198324750516}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179633956, "virtual_time_s": 914.29522, "measure_result": "direction", "svd_deg": 352.73}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789179633957, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0047", "position": {"x": 95.08697920663366, "y": 774.1198324750516}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179633957, "virtual_time_s": 919.29522, "clear_result": "success"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789179633978, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0048", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179633977, "virtual_time_s": 1032.624946, "measure_result": "no_signal"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789179633981, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0049", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179633981, "virtual_time_s": 1038.624946, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789179633983, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0050", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179633983, "virtual_time_s": 1044.624946, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789179633986, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0051", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179633986, "virtual_time_s": 1050.624946, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789179633988, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0052", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179633988, "virtual_time_s": 1056.624946, "measure_result": "no_signal"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789179633991, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0053", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179633991, "virtual_time_s": 1062.624946, "measure_result": "direction", "svd_deg": 60.56}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789179634005, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0054", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179634005, "virtual_time_s": 1068.624946, "measure_result": "direction", "svd_deg": 321.97}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789179634019, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0055", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179634019, "virtual_time_s": 1074.624946, "measure_result": "no_signal"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789179634022, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0056", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179634022, "virtual_time_s": 1080.624946, "measure_result": "no_signal"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789179634024, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0057", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179634024, "virtual_time_s": 1086.624946, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789179634026, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0058", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179634026, "virtual_time_s": 1092.624946, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789179634056, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0059", "position": {"x": 734.5373738884086, "y": 1284.7766867997893}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179634056, "virtual_time_s": 1162.680771, "measure_result": "direction", "svd_deg": 61.43}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789179634082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0060", "position": {"x": 809.6936654099835, "y": 1426.1846475277882}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179634082, "virtual_time_s": 1199.708684, "measure_result": "direction", "svd_deg": 59.21}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789179634108, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0061", "position": {"x": 850.8509295701094, "y": 1494.829247605499}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179634108, "virtual_time_s": 1220.716184, "measure_result": "direction", "svd_deg": 62.43}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789179634135, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0062", "position": {"x": 869.2116842175276, "y": 1528.5402438168385}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179634135, "virtual_time_s": 1233.39355, "measure_result": "direction", "svd_deg": 63.31}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789179634137, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0063", "position": {"x": 871.0577989881459, "y": 1532.0573199951043}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179634137, "virtual_time_s": 1239.18798, "clear_result": "success"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789179634159, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0064", "position": {"x": 1116.5944860616264, "y": 721.8172001845696}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179634159, "virtual_time_s": 1414.513385, "measure_result": "direction", "svd_deg": 285.95}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789179634182, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0065", "position": {"x": 1167.9500731615153, "y": 543.8350152492294}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179634182, "virtual_time_s": 1456.562031, "measure_result": "near"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789179634185, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0066", "position": {"x": 1167.9500731615144, "y": 543.8350152492296}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179634185, "virtual_time_s": 1461.562031, "clear_result": "success"}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789179634204, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0067", "position": {"x": 920.0165818594043, "y": 277.4964607772727}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179634204, "virtual_time_s": 1540.337643, "measure_result": "direction", "svd_deg": 345.1}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789179634223, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0068", "position": {"x": 1304.2113059422834, "y": 176.6603666288167}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179634223, "virtual_time_s": 1624.779069, "measure_result": "direction", "svd_deg": 351.89}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789179634242, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0069", "position": {"x": 1337.5279942317648, "y": 171.31495133274672}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179634242, "virtual_time_s": 1636.527625, "measure_result": "direction", "svd_deg": 171.33}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789179634243, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0070", "position": {"x": 1322.434126628736, "y": 173.73665033419152}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179634243, "virtual_time_s": 1644.585006, "clear_result": "success"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789179634259, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0071", "position": {"x": 1159.7, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179634259, "virtual_time_s": 1698.194593, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789179634262, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0072", "position": {"x": 1159.7, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179634262, "virtual_time_s": 1704.194593, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789179634264, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0073", "position": {"x": 1159.7, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179634264, "virtual_time_s": 1710.194593, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789179634266, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0074", "position": {"x": 1159.7, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179634266, "virtual_time_s": 1716.194593, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789179634268, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0075", "position": {"x": 1159.7, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179634268, "virtual_time_s": 1722.194593, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789179634270, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0076", "position": {"x": 1159.7, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179634270, "virtual_time_s": 1728.194593, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789179634273, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0077", "position": {"x": 1159.7, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179634273, "virtual_time_s": 1734.194593, "measure_result": "no_signal"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789179634275, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0078", "position": {"x": 1159.7, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179634275, "virtual_time_s": 1740.194593, "measure_result": "no_signal"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789179634277, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0079", "position": {"x": 1159.7, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179634277, "virtual_time_s": 1746.194593, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789179634295, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0080", "position": {"x": 615.2741242858137, "y": -457.9210736550038}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789179634295, "virtual_time_s": 1894.474773, "measure_result": "direction", "svd_deg": 247.51999999999998}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789179634310, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0081", "position": {"x": 502.0270081022294, "y": -732.6027655462593}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789179634310, "virtual_time_s": 1958.896971, "measure_result": "direction", "svd_deg": 76.78}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789179634312, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0082", "position": {"x": 502.6206647943071, "y": -729.8604705808809}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789179634312, "virtual_time_s": 1964.458134, "clear_result": "success"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789179634324, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0083", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179634324, "virtual_time_s": 2027.483639, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789179634327, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0084", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179634327, "virtual_time_s": 2033.483639, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789179634329, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0085", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179634329, "virtual_time_s": 2039.483639, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789179634331, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0086", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179634331, "virtual_time_s": 2045.483639, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789179634334, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0087", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179634334, "virtual_time_s": 2051.483639, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789179634336, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0088", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179634336, "virtual_time_s": 2057.483639, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789179634338, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0089", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179634338, "virtual_time_s": 2063.483639, "measure_result": "no_signal"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789179634341, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0090", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179634341, "virtual_time_s": 2069.483639, "measure_result": "no_signal"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789179634343, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0091", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179634343, "virtual_time_s": 2075.483639, "measure_result": "direction", "svd_deg": 207.37}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789179634370, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0092", "position": {"x": -10.101820488798197, "y": -1235.608607508437}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179634370, "virtual_time_s": 2207.216918, "measure_result": "direction", "svd_deg": 217.72}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789179634385, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0093", "position": {"x": -322.34282910592174, "y": -1474.0705719118416}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179634385, "virtual_time_s": 2290.793901, "measure_result": "direction", "svd_deg": 237.0}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789179634387, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0094", "position": {"x": -329.41875212172084, "y": -1484.5590847192395}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179634387, "virtual_time_s": 2298.324336, "clear_result": "success"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789179634399, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0095", "position": {"x": -237.94777021992184, "y": -927.734203735741}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179634399, "virtual_time_s": 2417.181926, "measure_result": "direction", "svd_deg": 78.8}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789179634410, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0096", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179634410, "virtual_time_s": 2493.257314, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789179634413, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0097", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179634413, "virtual_time_s": 2499.257314, "measure_result": "no_signal"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789179634415, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0098", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179634415, "virtual_time_s": 2505.257314, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789179634417, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0099", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179634417, "virtual_time_s": 2511.257314, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789179634420, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0100", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179634420, "virtual_time_s": 2517.257314, "measure_result": "direction", "svd_deg": 144.82}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789179634429, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0101", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179634429, "virtual_time_s": 2523.257314, "measure_result": "no_signal"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789179634432, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0102", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179634432, "virtual_time_s": 2529.257314, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789179634434, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0103", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179634434, "virtual_time_s": 2535.257314, "measure_result": "no_signal"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789179634451, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0104", "position": {"x": -943.7692060527052, "y": -626.2079513842945}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179634451, "virtual_time_s": 2646.216966, "measure_result": "direction", "svd_deg": 160.3}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789179634453, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0105", "position": {"x": -943.7692060527052, "y": -626.2079513842945}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179634453, "virtual_time_s": 2652.216966, "measure_result": "direction", "svd_deg": 27.62}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789179634466, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0106", "position": {"x": -1303.7929748527858, "y": -495.76535286392703}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179634466, "virtual_time_s": 2734.802183, "measure_result": "direction", "svd_deg": 326.05}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789179634467, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0107", "position": {"x": -1291.6244757580603, "y": -503.65107179715415}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179634467, "virtual_time_s": 2742.702231, "clear_result": "success"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789179634478, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0108", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179634478, "virtual_time_s": 2852.830703, "measure_result": "no_signal"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789179634480, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0109", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179634480, "virtual_time_s": 2858.830703, "measure_result": "no_signal"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789179634482, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0110", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179634482, "virtual_time_s": 2864.830703, "measure_result": "no_signal"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789179634484, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0111", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179634484, "virtual_time_s": 2870.830703, "measure_result": "no_signal"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789179634486, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0112", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179634486, "virtual_time_s": 2876.830703, "measure_result": "no_signal"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789179634488, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0113", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179634488, "virtual_time_s": 2882.830703, "measure_result": "no_signal"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789179634490, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0114", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179634490, "virtual_time_s": 2888.830703, "measure_result": "no_signal"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789179634501, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0115", "position": {"x": -972.4127979028253, "y": 103.4277058797442}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179634501, "virtual_time_s": 2937.620322, "measure_result": "direction", "svd_deg": 123.16}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789179634503, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0116", "position": {"x": -972.4127979028253, "y": 103.4277058797442}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179634503, "virtual_time_s": 2943.620322, "measure_result": "direction", "svd_deg": 341.43}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789179634504, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0117", "position": {"x": -972.4127979028253, "y": 103.4277058797442}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789179634504, "virtual_time_s": 2949.620322, "measure_result": "direction", "svd_deg": 305.94}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789179634508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0118", "position": {"x": -1065.1577568395746, "y": 244.38847895878683}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179634508, "virtual_time_s": 2989.367362, "measure_result": "direction", "svd_deg": 311.28}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789179634509, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0119", "position": {"x": -1061.208899153043, "y": 239.72802495847537}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179634509, "virtual_time_s": 2995.589054, "clear_result": "success"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789179634510, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0120", "position": {"x": -684.1326626714367, "y": -293.7472237854223}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789179634510, "virtual_time_s": 3131.246213, "clear_result": "success"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789179634510, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0121", "position": {"x": -90.10761708974319, "y": -190.8602168790606}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179634510, "virtual_time_s": 3256.820089, "clear_result": "success"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789179634511, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "80ea982f0f8b-0122"}, "response": {"accepted": true, "real_timestamp_ms": 1789179634511, "virtual_time_s": 3256.820089, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3256.820089, "real_elapsed_s": 2.277801, "request_count": 122, "cleared_count": 13} diff --git a/referee-data/sessions/JF3H-3W93-C6HG-NZNL/meta.json b/referee-data/sessions/JF3H-3W93-C6HG-NZNL/meta.json new file mode 100644 index 0000000..7f60052 --- /dev/null +++ b/referee-data/sessions/JF3H-3W93-C6HG-NZNL/meta.json @@ -0,0 +1,112 @@ +{ + "case_code": "JF3H-3W93-C6HG-NZNL", + "module": "q3_practice", + "robot_id": "1", + "seed": 200527360, + "truth": [ + { + "channel": 12, + "x": -829.6709980118327, + "y": 1175.0186169476228, + "r_eff_m": 1392.6507569213757, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": 1312.4198514579969, + "y": 175.55959831321275, + "r_eff_m": 1373.4971535190514, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": 873.1647541607986, + "y": 1536.5263123836592, + "r_eff_m": 1423.1240861351494, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": -1050.8891549792875, + "y": 227.7494012937605, + "r_eff_m": 1094.143230661049, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": 100.82780707316623, + "y": 773.4835024016819, + "r_eff_m": 1243.9876028741053, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": -683.2567304115873, + "y": -288.37100330423976, + "r_eff_m": 1157.7926554992937, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": -1288.0477653137357, + "y": -506.7388614051034, + "r_eff_m": 1315.9402807097429, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 19, + "x": -334.05638059601034, + "y": -1492.162227610753, + "r_eff_m": 1273.193035543722, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": 1165.289691177461, + "y": 543.2086082256018, + "r_eff_m": 1263.4855675522572, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": -83.54536261981478, + "y": -189.8055789389668, + "r_eff_m": 1442.3166859288438, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": -420.1269701616991, + "y": 1336.1881993145944, + "r_eff_m": 1497.9979001223833, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 17, + "x": 506.4460768292159, + "y": -714.216980196575, + "r_eff_m": 1295.0753640895696, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": -597.0914995717578, + "y": 1664.0515178344365, + "r_eff_m": 1179.4903720833731, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/JJNT-Y73D-Q8MJ-GJRP/log.jsonl b/referee-data/sessions/JJNT-Y73D-Q8MJ-GJRP/log.jsonl new file mode 100644 index 0000000..842e474 --- /dev/null +++ b/referee-data/sessions/JJNT-Y73D-Q8MJ-GJRP/log.jsonl @@ -0,0 +1,559 @@ +{"event": "session_start", "case_code": "JJNT-Y73D-Q8MJ-GJRP", "module": "q4_practice", "robot_id": "1", "seed": 369347818, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 17, "x": 961.259680638565, "y": -322.20435540206125, "r_eff_m": 1337.2120314399085, "directional": true, "heading_deg": 32.95446851929418}, {"channel": 1, "x": 699.579415669797, "y": -994.3795640722756, "r_eff_m": 1053.9698667251757, "directional": true, "heading_deg": 243.6689331576609}, {"channel": 11, "x": 1291.8056059219246, "y": -42.08078698921171, "r_eff_m": 1311.933931088018, "directional": true, "heading_deg": 79.48225873460355}, {"channel": 5, "x": 703.7264620515039, "y": -1129.5240904414413, "r_eff_m": 1169.8360466535823, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": 338.22565201794697, "y": 874.6768350631039, "r_eff_m": 1482.6080399361215, "directional": false, "heading_deg": 0.0}, {"channel": 14, "x": 265.9256037625333, "y": -528.3497986875859, "r_eff_m": 1084.8425177148724, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": 1519.236663407262, "y": 210.04641805920818, "r_eff_m": 1081.0121686329037, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": -1000.721484279969, "y": 295.0893652511872, "r_eff_m": 1042.0550839806635, "directional": false, "heading_deg": 0.0}, {"channel": 3, "x": 739.8133165162162, "y": 1635.229555780632, "r_eff_m": 1315.950863699557, "directional": false, "heading_deg": 0.0}, {"channel": 19, "x": -430.4482958491599, "y": -668.1153751259395, "r_eff_m": 1373.4152142261964, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": 190.38314454210118, "y": 877.3179340248826, "r_eff_m": 1047.4487397403734, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": 534.6402542389394, "y": 1081.7607081644426, "r_eff_m": 1448.3687216908386, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": 1183.9602682706345, "y": 553.3850303313459, "r_eff_m": 1006.3347926372188, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": -491.4531452851653, "y": -448.1434827844846, "r_eff_m": 1243.8775021977112, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789176456552, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789176456552, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789176456553, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176456553, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789176456554, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176456554, "virtual_time_s": 11.0, "measure_result": "direction", "svd_deg": 78.12}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789176456587, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176456587, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789176456588, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176456588, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789176456589, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176456589, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789176456590, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176456590, "virtual_time_s": 35.0, "measure_result": "direction", "svd_deg": 68.88}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789176456624, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176456624, "virtual_time_s": 41.0, "measure_result": "direction", "svd_deg": 63.82}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789176456658, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176456658, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789176456658, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176456658, "virtual_time_s": 53.0, "measure_result": "direction", "svd_deg": 221.37}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789176456692, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176456692, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789176456693, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176456693, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789176456693, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176456693, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789176456694, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176456694, "virtual_time_s": 77.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789176456694, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456694, "virtual_time_s": 83.0, "measure_result": "direction", "svd_deg": 297.39}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789176456729, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176456729, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789176456730, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176456730, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789176456731, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176456731, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789176456731, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176456731, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789176456732, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176456732, "virtual_time_s": 113.0, "measure_result": "direction", "svd_deg": 236.32}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789176456766, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176456766, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789176456877, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0022", "position": {"x": -185.16819221427704, "y": -135.53156202300988}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456877, "virtual_time_s": 170.893818, "measure_result": "direction", "svd_deg": 319.12}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789176456895, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0023", "position": {"x": 220.59716919469093, "y": -479.9321135233781}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456895, "virtual_time_s": 282.337656, "measure_result": "direction", "svd_deg": 313.95}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789176456909, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0024", "position": {"x": 238.2341739964928, "y": -501.0455390791392}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456909, "virtual_time_s": 292.839803, "measure_result": "direction", "svd_deg": 315.34000000000003}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789176456924, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0025", "position": {"x": 243.4859219729599, "y": -506.7052373352511}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456924, "virtual_time_s": 299.383993, "measure_result": "direction", "svd_deg": 315.82}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789176456937, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0026", "position": {"x": 246.27654505792117, "y": -509.2176589956293}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456937, "virtual_time_s": 305.134988, "measure_result": "direction", "svd_deg": 315.47}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789176456949, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0027", "position": {"x": 246.7572725376804, "y": -509.7123835605395}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456949, "virtual_time_s": 310.272952, "measure_result": "direction", "svd_deg": 314.93}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789176456961, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0028", "position": {"x": 250.061006219256, "y": -513.1123112020275}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456961, "virtual_time_s": 316.22109, "measure_result": "direction", "svd_deg": 315.95}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789176456974, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0029", "position": {"x": 250.38795249387505, "y": -513.1963005670538}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456974, "virtual_time_s": 321.288602, "measure_result": "direction", "svd_deg": 316.12}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789176456975, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0030", "position": {"x": 270.0, "y": -530.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176456975, "virtual_time_s": 331.453858, "clear_result": "success"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789176457084, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0031", "position": {"x": 333.5400109585063, "y": -623.8557680690343}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176457084, "virtual_time_s": 360.122107, "measure_result": "direction", "svd_deg": 183.1}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789176457099, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0032", "position": {"x": -411.9093592428077, "y": -633.6617305386343}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176457099, "virtual_time_s": 514.22488, "measure_result": "direction", "svd_deg": 242.66}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789176457100, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0033", "position": {"x": -428.57132900678994, "y": -665.2812408688274}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176457100, "virtual_time_s": 526.373068, "clear_result": "success"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789176457235, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0034", "position": {"x": -298.22919650582304, "y": -760.509988780036}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176457235, "virtual_time_s": 564.657793, "measure_result": "direction", "svd_deg": 121.52}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789176457237, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0035", "position": {"x": -496.22693080385113, "y": -437.2261973363702}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176457237, "virtual_time_s": 645.477451, "clear_result": "success"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789176457354, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0036", "position": {"x": -376.26125558895694, "y": 203.69561637407128}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176457354, "virtual_time_s": 781.887962, "measure_result": "direction", "svd_deg": 49.36}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789176457372, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0037", "position": {"x": 115.97958414039188, "y": 789.4824929031379}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176457372, "virtual_time_s": 939.917019, "measure_result": "direction", "svd_deg": 49.2}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789176457386, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0038", "position": {"x": 145.56204721900767, "y": 830.6807584462567}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176457386, "virtual_time_s": 955.060823, "measure_result": "direction", "svd_deg": 45.63}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789176457396, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0039", "position": {"x": 162.72924354930174, "y": 849.3986223037385}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176457396, "virtual_time_s": 965.140473, "measure_result": "direction", "svd_deg": 45.78}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789176457397, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0040", "position": {"x": 192.59251372089466, "y": 880.1391550998891}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176457397, "virtual_time_s": 978.712043, "clear_result": "success"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789176457511, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0041", "position": {"x": 93.25058664033824, "y": 876.5681845210223}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176457511, "virtual_time_s": 1004.593261, "measure_result": "direction", "svd_deg": 0.17}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789176457523, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0042", "position": {"x": 318.1368507677812, "y": 856.5626116229552}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176457523, "virtual_time_s": 1054.74813, "measure_result": "direction", "svd_deg": 41.37}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789176457524, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0043", "position": {"x": 341.99951433067184, "y": 877.4084844301774}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176457524, "virtual_time_s": 1066.08525, "clear_result": "success"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789176457633, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0044", "position": {"x": 155.03520546097855, "y": 849.5368853236122}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176457633, "virtual_time_s": 1109.891323, "measure_result": "direction", "svd_deg": 32.28}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789176457649, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0045", "position": {"x": 480.4632560285579, "y": 1034.969204034213}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176457649, "virtual_time_s": 1189.801552, "measure_result": "direction", "svd_deg": 41.47}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789176457662, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0046", "position": {"x": 507.75172473468206, "y": 1056.5068222296736}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176457662, "virtual_time_s": 1201.754334, "measure_result": "direction", "svd_deg": 43.45}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789176457678, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0047", "position": {"x": 515.5445066371443, "y": 1062.9181326327068}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176457678, "virtual_time_s": 1208.772574, "measure_result": "direction", "svd_deg": 44.96}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789176457696, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0048", "position": {"x": 517.1364891110029, "y": 1064.2274024376864}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176457696, "virtual_time_s": 1214.184816, "measure_result": "direction", "svd_deg": 44.78}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789176457715, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0049", "position": {"x": 518.2189824208846, "y": 1065.1175493206485}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176457715, "virtual_time_s": 1219.465113, "measure_result": "direction", "svd_deg": 44.87}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789176457733, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0050", "position": {"x": 518.7025341969436, "y": 1065.515148922587}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176457733, "virtual_time_s": 1224.590318, "measure_result": "direction", "svd_deg": 44.91}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789176457752, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0051", "position": {"x": 518.9222011170209, "y": 1065.6957632259353}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176457752, "virtual_time_s": 1229.647195, "measure_result": "direction", "svd_deg": 46.22}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789176457754, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0052", "position": {"x": 530.0, "y": 1070.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176457754, "virtual_time_s": 1237.024118, "clear_result": "success"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789176457754, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0053", "position": {"x": 1000.0, "y": 1000.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176457754, "virtual_time_s": 1338.060953, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789176457755, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0054", "position": {"x": 1000.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176457755, "virtual_time_s": 1344.060953, "measure_result": "direction", "svd_deg": 111.62}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789176457786, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0055", "position": {"x": 1000.0, "y": 1000.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176457786, "virtual_time_s": 1350.060953, "measure_result": "direction", "svd_deg": 291.74}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789176457817, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0056", "position": {"x": 1000.0, "y": 1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176457817, "virtual_time_s": 1356.060953, "measure_result": "no_signal"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789176457818, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0057", "position": {"x": 1000.0, "y": 1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176457818, "virtual_time_s": 1362.060953, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789176457819, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0058", "position": {"x": 1000.0, "y": 1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176457819, "virtual_time_s": 1368.060953, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789176457820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0059", "position": {"x": 1000.0, "y": 1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176457820, "virtual_time_s": 1374.060953, "measure_result": "direction", "svd_deg": 285.02}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789176457850, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0060", "position": {"x": 1000.0, "y": 1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176457850, "virtual_time_s": 1380.060953, "measure_result": "no_signal"}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789176457851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0061", "position": {"x": 1000.0, "y": 1000.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176457851, "virtual_time_s": 1386.060953, "measure_result": "direction", "svd_deg": 302.35}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789176457881, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0062", "position": {"x": 1000.0, "y": 1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176457881, "virtual_time_s": 1392.060953, "measure_result": "no_signal"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789176457882, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0063", "position": {"x": 1000.0, "y": 1000.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176457882, "virtual_time_s": 1398.060953, "measure_result": "no_signal"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789176457883, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0064", "position": {"x": 1000.0, "y": 1000.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176457883, "virtual_time_s": 1404.060953, "measure_result": "direction", "svd_deg": 269.17}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789176457912, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0065", "position": {"x": 1000.0, "y": 1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176457912, "virtual_time_s": 1410.060953, "measure_result": "no_signal"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789176457913, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0066", "position": {"x": 1000.0, "y": 1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176457913, "virtual_time_s": 1416.060953, "measure_result": "no_signal"}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789176457963, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0067", "position": {"x": 1112.6138239031402, "y": 1075.423968417429}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176457963, "virtual_time_s": 1449.168626, "measure_result": "direction", "svd_deg": 122.86}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789176457978, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0068", "position": {"x": 819.6337457813277, "y": 1541.043807763908}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176457978, "virtual_time_s": 1564.193925, "measure_result": "direction", "svd_deg": 131.21}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789176457994, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0069", "position": {"x": 796.7476562187987, "y": 1573.6520663562255}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176457994, "virtual_time_s": 1577.161539, "measure_result": "direction", "svd_deg": 131.82}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789176457995, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0070", "position": {"x": 737.4558740027242, "y": 1637.8778605276875}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176457995, "virtual_time_s": 1599.643493, "clear_result": "success"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789176458102, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0071", "position": {"x": 989.2285140492995, "y": 1375.1359609859153}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458102, "virtual_time_s": 1678.423372, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789176458210, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0072", "position": {"x": 989.2285140492995, "y": 1375.1359609859153}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458210, "virtual_time_s": 1683.423372, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789176458333, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0073", "position": {"x": 989.2285140492995, "y": 1375.1359609859153}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458333, "virtual_time_s": 1688.423372, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789176458456, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0074", "position": {"x": 989.2285140492995, "y": 1375.1359609859153}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458456, "virtual_time_s": 1693.423372, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789176458458, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0075", "position": {"x": 990.0, "y": 1010.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458458, "virtual_time_s": 1769.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789176458459, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0076", "position": {"x": 990.0, "y": 990.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458459, "virtual_time_s": 1776.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789176458460, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0077", "position": {"x": 990.0, "y": 970.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458460, "virtual_time_s": 1783.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789176458460, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0078", "position": {"x": 990.0, "y": 950.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458460, "virtual_time_s": 1790.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789176458461, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0079", "position": {"x": 990.0, "y": 930.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458461, "virtual_time_s": 1797.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789176458461, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0080", "position": {"x": 990.0, "y": 910.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458461, "virtual_time_s": 1804.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789176458462, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0081", "position": {"x": 990.0, "y": 890.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458462, "virtual_time_s": 1811.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789176458463, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0082", "position": {"x": 990.0, "y": 870.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458463, "virtual_time_s": 1818.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789176458463, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0083", "position": {"x": 990.0, "y": 850.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458463, "virtual_time_s": 1825.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789176458464, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0084", "position": {"x": 990.0, "y": 830.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458464, "virtual_time_s": 1832.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789176458464, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0085", "position": {"x": 990.0, "y": 810.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458464, "virtual_time_s": 1839.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789176458465, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0086", "position": {"x": 990.0, "y": 790.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458465, "virtual_time_s": 1846.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789176458465, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0087", "position": {"x": 990.0, "y": 770.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458465, "virtual_time_s": 1853.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789176458466, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0088", "position": {"x": 990.0, "y": 750.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458466, "virtual_time_s": 1860.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789176458467, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0089", "position": {"x": 990.0, "y": 730.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458467, "virtual_time_s": 1867.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789176458467, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0090", "position": {"x": 990.0, "y": 710.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458467, "virtual_time_s": 1874.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789176458468, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0091", "position": {"x": 990.0, "y": 690.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458468, "virtual_time_s": 1881.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789176458468, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0092", "position": {"x": 990.0, "y": 670.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458468, "virtual_time_s": 1888.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789176458469, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0093", "position": {"x": 990.0, "y": 650.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458469, "virtual_time_s": 1895.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789176458469, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0094", "position": {"x": 990.0, "y": 630.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458469, "virtual_time_s": 1902.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789176458470, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0095", "position": {"x": 990.0, "y": 610.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458470, "virtual_time_s": 1909.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789176458471, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0096", "position": {"x": 990.0, "y": 590.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458471, "virtual_time_s": 1916.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789176458471, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0097", "position": {"x": 990.0, "y": 570.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458471, "virtual_time_s": 1923.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789176458471, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0098", "position": {"x": 990.0, "y": 550.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458471, "virtual_time_s": 1930.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789176458472, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0099", "position": {"x": 990.0, "y": 530.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458472, "virtual_time_s": 1937.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789176458473, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0100", "position": {"x": 990.0, "y": 510.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458473, "virtual_time_s": 1944.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789176458473, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0101", "position": {"x": 990.0, "y": 490.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458473, "virtual_time_s": 1951.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789176458474, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0102", "position": {"x": 990.0, "y": 470.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458474, "virtual_time_s": 1958.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789176458474, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0103", "position": {"x": 990.0, "y": 450.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458474, "virtual_time_s": 1965.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789176458475, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0104", "position": {"x": 990.0, "y": 430.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458475, "virtual_time_s": 1972.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789176458475, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0105", "position": {"x": 990.0, "y": 410.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458475, "virtual_time_s": 1979.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789176458476, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0106", "position": {"x": 990.0, "y": 390.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458476, "virtual_time_s": 1986.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789176458477, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0107", "position": {"x": 990.0, "y": 370.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458477, "virtual_time_s": 1993.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789176458477, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0108", "position": {"x": 970.0, "y": 370.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458477, "virtual_time_s": 2000.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789176458478, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0109", "position": {"x": 970.0, "y": 350.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458478, "virtual_time_s": 2007.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789176458478, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0110", "position": {"x": 970.0, "y": 330.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458478, "virtual_time_s": 2014.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789176458479, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0111", "position": {"x": 970.0, "y": 310.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458479, "virtual_time_s": 2021.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789176458479, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0112", "position": {"x": 970.0, "y": 290.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458479, "virtual_time_s": 2028.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789176458480, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0113", "position": {"x": 970.0, "y": 270.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458480, "virtual_time_s": 2035.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789176458480, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0114", "position": {"x": 970.0, "y": 250.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458480, "virtual_time_s": 2042.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789176458481, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0115", "position": {"x": 970.0, "y": 230.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458481, "virtual_time_s": 2049.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789176458482, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0116", "position": {"x": 970.0, "y": 210.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458482, "virtual_time_s": 2056.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789176458482, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0117", "position": {"x": 970.0, "y": 190.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458482, "virtual_time_s": 2063.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789176458483, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0118", "position": {"x": 970.0, "y": 170.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458483, "virtual_time_s": 2070.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789176458483, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0119", "position": {"x": 970.0, "y": 150.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458483, "virtual_time_s": 2077.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789176458484, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0120", "position": {"x": 970.0, "y": 130.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458484, "virtual_time_s": 2084.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789176458484, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0121", "position": {"x": 970.0, "y": 110.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458484, "virtual_time_s": 2091.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789176458485, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0122", "position": {"x": 970.0, "y": 90.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458485, "virtual_time_s": 2098.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789176458485, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0123", "position": {"x": 970.0, "y": 70.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458485, "virtual_time_s": 2105.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789176458486, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0124", "position": {"x": 970.0, "y": 50.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458486, "virtual_time_s": 2112.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789176458486, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0125", "position": {"x": 970.0, "y": 30.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458486, "virtual_time_s": 2119.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789176458487, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0126", "position": {"x": 970.0, "y": 10.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458487, "virtual_time_s": 2126.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789176458487, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0127", "position": {"x": 970.0, "y": -10.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458487, "virtual_time_s": 2133.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 128, "wall_ts_ms": 1789176458488, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0128", "position": {"x": 970.0, "y": -30.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458488, "virtual_time_s": 2140.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 129, "wall_ts_ms": 1789176458488, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0129", "position": {"x": 970.0, "y": -50.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458488, "virtual_time_s": 2147.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 130, "wall_ts_ms": 1789176458489, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0130", "position": {"x": 970.0, "y": -70.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458489, "virtual_time_s": 2154.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 131, "wall_ts_ms": 1789176458489, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0131", "position": {"x": 970.0, "y": -90.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458489, "virtual_time_s": 2161.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 132, "wall_ts_ms": 1789176458490, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0132", "position": {"x": 970.0, "y": -110.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458490, "virtual_time_s": 2168.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 133, "wall_ts_ms": 1789176458490, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0133", "position": {"x": 970.0, "y": -130.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458490, "virtual_time_s": 2175.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 134, "wall_ts_ms": 1789176458491, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0134", "position": {"x": 970.0, "y": -150.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458491, "virtual_time_s": 2182.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 135, "wall_ts_ms": 1789176458491, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0135", "position": {"x": 970.0, "y": -170.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458491, "virtual_time_s": 2189.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 136, "wall_ts_ms": 1789176458492, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0136", "position": {"x": 970.0, "y": -190.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458492, "virtual_time_s": 2196.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 137, "wall_ts_ms": 1789176458492, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0137", "position": {"x": 970.0, "y": -210.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458492, "virtual_time_s": 2203.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 138, "wall_ts_ms": 1789176458493, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0138", "position": {"x": 970.0, "y": -230.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458493, "virtual_time_s": 2210.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 139, "wall_ts_ms": 1789176458493, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0139", "position": {"x": 970.0, "y": -250.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458493, "virtual_time_s": 2217.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 140, "wall_ts_ms": 1789176458494, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0140", "position": {"x": 950.0, "y": -250.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458494, "virtual_time_s": 2224.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 141, "wall_ts_ms": 1789176458494, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0141", "position": {"x": 950.0, "y": -270.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458494, "virtual_time_s": 2231.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 142, "wall_ts_ms": 1789176458495, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0142", "position": {"x": 950.0, "y": -290.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458495, "virtual_time_s": 2238.450727, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 143, "wall_ts_ms": 1789176458495, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0143", "position": {"x": 950.0, "y": -310.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176458495, "virtual_time_s": 2247.450727, "clear_result": "success"}} +{"event": "action", "seq": 144, "wall_ts_ms": 1789176458624, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0144", "position": {"x": 928.9640921663192, "y": 10.133218672571672}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176458624, "virtual_time_s": 2317.615448, "measure_result": "no_signal"}} +{"event": "action", "seq": 145, "wall_ts_ms": 1789176458752, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0145", "position": {"x": 928.9640921663192, "y": 10.133218672571672}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176458752, "virtual_time_s": 2322.615448, "measure_result": "no_signal"}} +{"event": "action", "seq": 146, "wall_ts_ms": 1789176458881, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0146", "position": {"x": 928.9640921663192, "y": 10.133218672571672}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176458881, "virtual_time_s": 2327.615448, "measure_result": "no_signal"}} +{"event": "action", "seq": 147, "wall_ts_ms": 1789176459010, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0147", "position": {"x": 928.9640921663192, "y": 10.133218672571672}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459010, "virtual_time_s": 2332.615448, "measure_result": "no_signal"}} +{"event": "action", "seq": 148, "wall_ts_ms": 1789176459016, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0148", "position": {"x": 1210.0, "y": 110.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459016, "virtual_time_s": 2395.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 149, "wall_ts_ms": 1789176459017, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0149", "position": {"x": 1210.0, "y": 130.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459017, "virtual_time_s": 2402.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 150, "wall_ts_ms": 1789176459017, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0150", "position": {"x": 1210.0, "y": 150.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459017, "virtual_time_s": 2409.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 151, "wall_ts_ms": 1789176459018, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0151", "position": {"x": 1210.0, "y": 170.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459018, "virtual_time_s": 2416.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 152, "wall_ts_ms": 1789176459019, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0152", "position": {"x": 1210.0, "y": 190.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459019, "virtual_time_s": 2423.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 153, "wall_ts_ms": 1789176459019, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0153", "position": {"x": 1190.0, "y": 190.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459019, "virtual_time_s": 2430.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 154, "wall_ts_ms": 1789176459020, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0154", "position": {"x": 1190.0, "y": 210.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459020, "virtual_time_s": 2437.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 155, "wall_ts_ms": 1789176459020, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0155", "position": {"x": 1190.0, "y": 230.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459020, "virtual_time_s": 2444.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 156, "wall_ts_ms": 1789176459021, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0156", "position": {"x": 1190.0, "y": 250.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459021, "virtual_time_s": 2451.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 157, "wall_ts_ms": 1789176459022, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0157", "position": {"x": 1190.0, "y": 270.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459022, "virtual_time_s": 2458.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 158, "wall_ts_ms": 1789176459022, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0158", "position": {"x": 1170.0, "y": 270.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459022, "virtual_time_s": 2465.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 159, "wall_ts_ms": 1789176459045, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0159", "position": {"x": 1170.0, "y": 290.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459045, "virtual_time_s": 2472.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 160, "wall_ts_ms": 1789176459046, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0160", "position": {"x": 1170.0, "y": 310.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459046, "virtual_time_s": 2479.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 161, "wall_ts_ms": 1789176459047, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0161", "position": {"x": 1170.0, "y": 330.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459047, "virtual_time_s": 2486.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 162, "wall_ts_ms": 1789176459047, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0162", "position": {"x": 1170.0, "y": 350.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459047, "virtual_time_s": 2493.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 163, "wall_ts_ms": 1789176459048, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0163", "position": {"x": 1150.0, "y": 350.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459048, "virtual_time_s": 2500.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 164, "wall_ts_ms": 1789176459048, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0164", "position": {"x": 1150.0, "y": 370.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459048, "virtual_time_s": 2507.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 165, "wall_ts_ms": 1789176459049, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0165", "position": {"x": 1150.0, "y": 390.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459049, "virtual_time_s": 2514.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 166, "wall_ts_ms": 1789176459049, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0166", "position": {"x": 1150.0, "y": 410.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459049, "virtual_time_s": 2521.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 167, "wall_ts_ms": 1789176459050, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0167", "position": {"x": 1150.0, "y": 430.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459050, "virtual_time_s": 2528.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 168, "wall_ts_ms": 1789176459050, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0168", "position": {"x": 1130.0, "y": 430.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459050, "virtual_time_s": 2535.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 169, "wall_ts_ms": 1789176459051, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0169", "position": {"x": 1130.0, "y": 450.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459051, "virtual_time_s": 2542.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 170, "wall_ts_ms": 1789176459051, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0170", "position": {"x": 1130.0, "y": 470.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459051, "virtual_time_s": 2549.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 171, "wall_ts_ms": 1789176459052, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0171", "position": {"x": 1130.0, "y": 490.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459052, "virtual_time_s": 2556.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 172, "wall_ts_ms": 1789176459053, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0172", "position": {"x": 1130.0, "y": 510.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459053, "virtual_time_s": 2563.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 173, "wall_ts_ms": 1789176459054, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0173", "position": {"x": 1110.0, "y": 510.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459054, "virtual_time_s": 2570.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 174, "wall_ts_ms": 1789176459054, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0174", "position": {"x": 1110.0, "y": 530.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459054, "virtual_time_s": 2577.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 175, "wall_ts_ms": 1789176459055, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0175", "position": {"x": 1110.0, "y": 550.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459055, "virtual_time_s": 2584.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 176, "wall_ts_ms": 1789176459055, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0176", "position": {"x": 1110.0, "y": 570.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459055, "virtual_time_s": 2591.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 177, "wall_ts_ms": 1789176459056, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0177", "position": {"x": 1110.0, "y": 590.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459056, "virtual_time_s": 2598.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 178, "wall_ts_ms": 1789176459056, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0178", "position": {"x": 1090.0, "y": 590.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459056, "virtual_time_s": 2605.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 179, "wall_ts_ms": 1789176459057, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0179", "position": {"x": 1090.0, "y": 610.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459057, "virtual_time_s": 2612.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 180, "wall_ts_ms": 1789176459057, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0180", "position": {"x": 1090.0, "y": 630.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459057, "virtual_time_s": 2619.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 181, "wall_ts_ms": 1789176459058, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0181", "position": {"x": 1090.0, "y": 650.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459058, "virtual_time_s": 2626.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 182, "wall_ts_ms": 1789176459058, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0182", "position": {"x": 1090.0, "y": 670.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459058, "virtual_time_s": 2633.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 183, "wall_ts_ms": 1789176459059, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0183", "position": {"x": 1070.0, "y": 670.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459059, "virtual_time_s": 2640.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 184, "wall_ts_ms": 1789176459059, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0184", "position": {"x": 1070.0, "y": 690.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459059, "virtual_time_s": 2647.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 185, "wall_ts_ms": 1789176459060, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0185", "position": {"x": 1070.0, "y": 710.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459060, "virtual_time_s": 2654.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 186, "wall_ts_ms": 1789176459060, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0186", "position": {"x": 1070.0, "y": 730.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459060, "virtual_time_s": 2661.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 187, "wall_ts_ms": 1789176459061, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0187", "position": {"x": 1070.0, "y": 750.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459060, "virtual_time_s": 2668.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 188, "wall_ts_ms": 1789176459061, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0188", "position": {"x": 1050.0, "y": 750.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459061, "virtual_time_s": 2675.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 189, "wall_ts_ms": 1789176459061, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0189", "position": {"x": 1050.0, "y": 770.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459061, "virtual_time_s": 2682.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 190, "wall_ts_ms": 1789176459062, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0190", "position": {"x": 1050.0, "y": 790.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459062, "virtual_time_s": 2689.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 191, "wall_ts_ms": 1789176459062, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0191", "position": {"x": 1050.0, "y": 810.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459062, "virtual_time_s": 2696.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 192, "wall_ts_ms": 1789176459063, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0192", "position": {"x": 1050.0, "y": 830.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459063, "virtual_time_s": 2703.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 193, "wall_ts_ms": 1789176459063, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0193", "position": {"x": 1030.0, "y": 830.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459063, "virtual_time_s": 2710.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 194, "wall_ts_ms": 1789176459064, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0194", "position": {"x": 1030.0, "y": 850.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459064, "virtual_time_s": 2717.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 195, "wall_ts_ms": 1789176459064, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0195", "position": {"x": 1030.0, "y": 870.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459064, "virtual_time_s": 2724.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 196, "wall_ts_ms": 1789176459065, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0196", "position": {"x": 1030.0, "y": 890.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459065, "virtual_time_s": 2731.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 197, "wall_ts_ms": 1789176459067, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0197", "position": {"x": 1030.0, "y": 910.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459067, "virtual_time_s": 2738.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 198, "wall_ts_ms": 1789176459067, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0198", "position": {"x": 1010.0, "y": 910.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459067, "virtual_time_s": 2745.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 199, "wall_ts_ms": 1789176459068, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0199", "position": {"x": 1010.0, "y": 930.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459068, "virtual_time_s": 2752.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 200, "wall_ts_ms": 1789176459068, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0200", "position": {"x": 1010.0, "y": 950.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459068, "virtual_time_s": 2759.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 201, "wall_ts_ms": 1789176459069, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0201", "position": {"x": 1010.0, "y": 970.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459069, "virtual_time_s": 2766.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 202, "wall_ts_ms": 1789176459069, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0202", "position": {"x": 1010.0, "y": 990.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459069, "virtual_time_s": 2773.265949, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 203, "wall_ts_ms": 1789176459070, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0203", "position": {"x": 1030.0, "y": 930.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459070, "virtual_time_s": 2788.91506, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 204, "wall_ts_ms": 1789176459070, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0204", "position": {"x": 1050.0, "y": 870.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459070, "virtual_time_s": 2804.564171, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 205, "wall_ts_ms": 1789176459071, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0205", "position": {"x": 1050.0, "y": 850.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459071, "virtual_time_s": 2811.564171, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 206, "wall_ts_ms": 1789176459071, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0206", "position": {"x": 1070.0, "y": 790.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459071, "virtual_time_s": 2827.213282, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 207, "wall_ts_ms": 1789176459072, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0207", "position": {"x": 1070.0, "y": 770.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459072, "virtual_time_s": 2834.213282, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 208, "wall_ts_ms": 1789176459072, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0208", "position": {"x": 1090.0, "y": 730.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459072, "virtual_time_s": 2846.157554, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 209, "wall_ts_ms": 1789176459073, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0209", "position": {"x": 1090.0, "y": 710.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459073, "virtual_time_s": 2853.157554, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 210, "wall_ts_ms": 1789176459073, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0210", "position": {"x": 1090.0, "y": 690.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459073, "virtual_time_s": 2860.157554, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 211, "wall_ts_ms": 1789176459074, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0211", "position": {"x": 1110.0, "y": 650.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459074, "virtual_time_s": 2872.101826, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 212, "wall_ts_ms": 1789176459074, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0212", "position": {"x": 1110.0, "y": 630.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459074, "virtual_time_s": 2879.101826, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 213, "wall_ts_ms": 1789176459075, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0213", "position": {"x": 1110.0, "y": 610.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459075, "virtual_time_s": 2886.101826, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 214, "wall_ts_ms": 1789176459075, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0214", "position": {"x": 1130.0, "y": 590.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459075, "virtual_time_s": 2894.75868, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 215, "wall_ts_ms": 1789176459076, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0215", "position": {"x": 1130.0, "y": 570.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459076, "virtual_time_s": 2901.75868, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 216, "wall_ts_ms": 1789176459076, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0216", "position": {"x": 1130.0, "y": 550.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459076, "virtual_time_s": 2908.75868, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 217, "wall_ts_ms": 1789176459077, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0217", "position": {"x": 1130.0, "y": 530.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459077, "virtual_time_s": 2915.75868, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 218, "wall_ts_ms": 1789176459077, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0218", "position": {"x": 1150.0, "y": 510.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459077, "virtual_time_s": 2924.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 219, "wall_ts_ms": 1789176459078, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0219", "position": {"x": 1150.0, "y": 490.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459078, "virtual_time_s": 2931.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 220, "wall_ts_ms": 1789176459078, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0220", "position": {"x": 1150.0, "y": 470.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459078, "virtual_time_s": 2938.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 221, "wall_ts_ms": 1789176459079, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0221", "position": {"x": 1150.0, "y": 450.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459079, "virtual_time_s": 2945.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 222, "wall_ts_ms": 1789176459079, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0222", "position": {"x": 1170.0, "y": 450.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459079, "virtual_time_s": 2952.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 223, "wall_ts_ms": 1789176459079, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0223", "position": {"x": 1170.0, "y": 430.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459079, "virtual_time_s": 2959.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 224, "wall_ts_ms": 1789176459080, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0224", "position": {"x": 1170.0, "y": 410.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459080, "virtual_time_s": 2966.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 225, "wall_ts_ms": 1789176459080, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0225", "position": {"x": 1170.0, "y": 390.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459080, "virtual_time_s": 2973.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 226, "wall_ts_ms": 1789176459081, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0226", "position": {"x": 1170.0, "y": 370.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459081, "virtual_time_s": 2980.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 227, "wall_ts_ms": 1789176459081, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0227", "position": {"x": 1190.0, "y": 370.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459081, "virtual_time_s": 2987.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 228, "wall_ts_ms": 1789176459082, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0228", "position": {"x": 1190.0, "y": 350.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459082, "virtual_time_s": 2994.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 229, "wall_ts_ms": 1789176459082, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0229", "position": {"x": 1190.0, "y": 330.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459082, "virtual_time_s": 3001.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 230, "wall_ts_ms": 1789176459083, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0230", "position": {"x": 1190.0, "y": 310.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459083, "virtual_time_s": 3008.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 231, "wall_ts_ms": 1789176459083, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0231", "position": {"x": 1190.0, "y": 290.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459083, "virtual_time_s": 3015.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 232, "wall_ts_ms": 1789176459084, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0232", "position": {"x": 1210.0, "y": 290.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459084, "virtual_time_s": 3022.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 233, "wall_ts_ms": 1789176459084, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0233", "position": {"x": 1210.0, "y": 270.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459084, "virtual_time_s": 3029.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 234, "wall_ts_ms": 1789176459085, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0234", "position": {"x": 1210.0, "y": 250.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459085, "virtual_time_s": 3036.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 235, "wall_ts_ms": 1789176459085, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0235", "position": {"x": 1210.0, "y": 230.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459085, "virtual_time_s": 3043.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 236, "wall_ts_ms": 1789176459086, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0236", "position": {"x": 1210.0, "y": 210.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459086, "virtual_time_s": 3050.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 237, "wall_ts_ms": 1789176459086, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0237", "position": {"x": 1230.0, "y": 210.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459086, "virtual_time_s": 3057.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 238, "wall_ts_ms": 1789176459087, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0238", "position": {"x": 1230.0, "y": 190.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459087, "virtual_time_s": 3064.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 239, "wall_ts_ms": 1789176459087, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0239", "position": {"x": 1230.0, "y": 170.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459087, "virtual_time_s": 3071.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 240, "wall_ts_ms": 1789176459088, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0240", "position": {"x": 1230.0, "y": 150.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459088, "virtual_time_s": 3078.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 241, "wall_ts_ms": 1789176459088, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0241", "position": {"x": 1230.0, "y": 130.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459088, "virtual_time_s": 3085.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 242, "wall_ts_ms": 1789176459089, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0242", "position": {"x": 1230.0, "y": 110.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459089, "virtual_time_s": 3092.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 243, "wall_ts_ms": 1789176459089, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0243", "position": {"x": 1230.0, "y": 90.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459089, "virtual_time_s": 3099.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 244, "wall_ts_ms": 1789176459090, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0244", "position": {"x": 1230.0, "y": 70.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459090, "virtual_time_s": 3106.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 245, "wall_ts_ms": 1789176459090, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0245", "position": {"x": 1230.0, "y": 50.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459090, "virtual_time_s": 3113.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 246, "wall_ts_ms": 1789176459091, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0246", "position": {"x": 1230.0, "y": 30.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459091, "virtual_time_s": 3120.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 247, "wall_ts_ms": 1789176459091, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0247", "position": {"x": 1250.0, "y": 30.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459091, "virtual_time_s": 3127.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 248, "wall_ts_ms": 1789176459092, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0248", "position": {"x": 1250.0, "y": 10.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459092, "virtual_time_s": 3134.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 249, "wall_ts_ms": 1789176459092, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0249", "position": {"x": 1250.0, "y": -10.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459092, "virtual_time_s": 3141.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 250, "wall_ts_ms": 1789176459093, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0250", "position": {"x": 1250.0, "y": -30.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459093, "virtual_time_s": 3148.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 251, "wall_ts_ms": 1789176459093, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0251", "position": {"x": 1250.0, "y": -50.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459093, "virtual_time_s": 3155.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 252, "wall_ts_ms": 1789176459094, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0252", "position": {"x": 1270.0, "y": -50.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459094, "virtual_time_s": 3162.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 253, "wall_ts_ms": 1789176459094, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0253", "position": {"x": 1270.0, "y": -70.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459094, "virtual_time_s": 3169.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 254, "wall_ts_ms": 1789176459095, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0254", "position": {"x": 1270.0, "y": -90.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459095, "virtual_time_s": 3176.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 255, "wall_ts_ms": 1789176459095, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0255", "position": {"x": 1270.0, "y": -110.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459095, "virtual_time_s": 3183.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 256, "wall_ts_ms": 1789176459096, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0256", "position": {"x": 1270.0, "y": -130.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459096, "virtual_time_s": 3190.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 257, "wall_ts_ms": 1789176459096, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0257", "position": {"x": 1290.0, "y": -130.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459096, "virtual_time_s": 3197.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 258, "wall_ts_ms": 1789176459097, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0258", "position": {"x": 1290.0, "y": -150.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459097, "virtual_time_s": 3204.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 259, "wall_ts_ms": 1789176459097, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0259", "position": {"x": 1290.0, "y": -170.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459097, "virtual_time_s": 3211.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 260, "wall_ts_ms": 1789176459098, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0260", "position": {"x": 1290.0, "y": -190.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459098, "virtual_time_s": 3218.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 261, "wall_ts_ms": 1789176459098, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0261", "position": {"x": 1290.0, "y": -210.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459098, "virtual_time_s": 3225.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 262, "wall_ts_ms": 1789176459099, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0262", "position": {"x": 1310.0, "y": -210.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459099, "virtual_time_s": 3232.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 263, "wall_ts_ms": 1789176459099, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0263", "position": {"x": 1310.0, "y": -230.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459099, "virtual_time_s": 3239.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 264, "wall_ts_ms": 1789176459100, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0264", "position": {"x": 1310.0, "y": -250.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459100, "virtual_time_s": 3246.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 265, "wall_ts_ms": 1789176459100, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0265", "position": {"x": 1310.0, "y": -270.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459100, "virtual_time_s": 3253.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 266, "wall_ts_ms": 1789176459101, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0266", "position": {"x": 1310.0, "y": -290.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459101, "virtual_time_s": 3260.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 267, "wall_ts_ms": 1789176459101, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0267", "position": {"x": 1330.0, "y": -290.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459101, "virtual_time_s": 3267.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 268, "wall_ts_ms": 1789176459102, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0268", "position": {"x": 1330.0, "y": -310.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459102, "virtual_time_s": 3274.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 269, "wall_ts_ms": 1789176459102, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0269", "position": {"x": 1330.0, "y": -330.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459102, "virtual_time_s": 3281.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 270, "wall_ts_ms": 1789176459103, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0270", "position": {"x": 1330.0, "y": -350.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459103, "virtual_time_s": 3288.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 271, "wall_ts_ms": 1789176459103, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0271", "position": {"x": 1330.0, "y": -370.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459103, "virtual_time_s": 3295.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 272, "wall_ts_ms": 1789176459104, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0272", "position": {"x": 1350.0, "y": -370.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459103, "virtual_time_s": 3302.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 273, "wall_ts_ms": 1789176459104, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0273", "position": {"x": 1350.0, "y": -390.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459104, "virtual_time_s": 3309.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 274, "wall_ts_ms": 1789176459104, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0274", "position": {"x": 1350.0, "y": -410.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459104, "virtual_time_s": 3316.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 275, "wall_ts_ms": 1789176459105, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0275", "position": {"x": 1350.0, "y": -430.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459105, "virtual_time_s": 3323.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 276, "wall_ts_ms": 1789176459105, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0276", "position": {"x": 1350.0, "y": -450.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459105, "virtual_time_s": 3330.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 277, "wall_ts_ms": 1789176459106, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0277", "position": {"x": 1370.0, "y": -450.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459106, "virtual_time_s": 3337.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 278, "wall_ts_ms": 1789176459106, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0278", "position": {"x": 1370.0, "y": -430.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459106, "virtual_time_s": 3344.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 279, "wall_ts_ms": 1789176459107, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0279", "position": {"x": 1370.0, "y": -410.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459107, "virtual_time_s": 3351.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 280, "wall_ts_ms": 1789176459107, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0280", "position": {"x": 1370.0, "y": -390.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459107, "virtual_time_s": 3358.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 281, "wall_ts_ms": 1789176459108, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0281", "position": {"x": 1370.0, "y": -370.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459108, "virtual_time_s": 3365.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 282, "wall_ts_ms": 1789176459109, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0282", "position": {"x": 1370.0, "y": -350.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459109, "virtual_time_s": 3372.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 283, "wall_ts_ms": 1789176459109, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0283", "position": {"x": 1350.0, "y": -350.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459109, "virtual_time_s": 3379.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 284, "wall_ts_ms": 1789176459110, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0284", "position": {"x": 1350.0, "y": -330.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459110, "virtual_time_s": 3386.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 285, "wall_ts_ms": 1789176459110, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0285", "position": {"x": 1350.0, "y": -310.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459110, "virtual_time_s": 3393.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 286, "wall_ts_ms": 1789176459111, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0286", "position": {"x": 1350.0, "y": -290.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459111, "virtual_time_s": 3400.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 287, "wall_ts_ms": 1789176459111, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0287", "position": {"x": 1350.0, "y": -270.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459111, "virtual_time_s": 3407.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 288, "wall_ts_ms": 1789176459112, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0288", "position": {"x": 1330.0, "y": -270.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459112, "virtual_time_s": 3414.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 289, "wall_ts_ms": 1789176459112, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0289", "position": {"x": 1330.0, "y": -250.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459112, "virtual_time_s": 3421.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 290, "wall_ts_ms": 1789176459113, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0290", "position": {"x": 1330.0, "y": -230.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459113, "virtual_time_s": 3428.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 291, "wall_ts_ms": 1789176459113, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0291", "position": {"x": 1330.0, "y": -210.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459113, "virtual_time_s": 3435.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 292, "wall_ts_ms": 1789176459114, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0292", "position": {"x": 1330.0, "y": -190.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459114, "virtual_time_s": 3442.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 293, "wall_ts_ms": 1789176459114, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0293", "position": {"x": 1310.0, "y": -190.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459114, "virtual_time_s": 3449.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 294, "wall_ts_ms": 1789176459115, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0294", "position": {"x": 1310.0, "y": -170.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459115, "virtual_time_s": 3456.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 295, "wall_ts_ms": 1789176459115, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0295", "position": {"x": 1310.0, "y": -150.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459115, "virtual_time_s": 3463.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 296, "wall_ts_ms": 1789176459116, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0296", "position": {"x": 1310.0, "y": -130.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459116, "virtual_time_s": 3470.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 297, "wall_ts_ms": 1789176459116, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0297", "position": {"x": 1310.0, "y": -110.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459116, "virtual_time_s": 3477.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 298, "wall_ts_ms": 1789176459117, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0298", "position": {"x": 1290.0, "y": -110.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459117, "virtual_time_s": 3484.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 299, "wall_ts_ms": 1789176459117, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0299", "position": {"x": 1290.0, "y": -90.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459117, "virtual_time_s": 3491.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 300, "wall_ts_ms": 1789176459118, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0300", "position": {"x": 1290.0, "y": -70.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459118, "virtual_time_s": 3498.415534, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 301, "wall_ts_ms": 1789176459118, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0301", "position": {"x": 1290.0, "y": -50.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176459118, "virtual_time_s": 3507.415534, "clear_result": "success"}} +{"event": "action", "seq": 302, "wall_ts_ms": 1789176459232, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0302", "position": {"x": 1277.985722791724, "y": -71.76862996738339}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176459232, "virtual_time_s": 3518.388324, "measure_result": "direction", "svd_deg": 99.25}} +{"event": "action", "seq": 303, "wall_ts_ms": 1789176459252, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0303", "position": {"x": 1173.338284713871, "y": 426.3937168252834}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176459252, "virtual_time_s": 3625.195359, "measure_result": "direction", "svd_deg": 86.2}} +{"event": "action", "seq": 304, "wall_ts_ms": 1789176459262, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0304", "position": {"x": 1154.967399080033, "y": 519.6087852993088}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176459262, "virtual_time_s": 3649.196978, "measure_result": "direction", "svd_deg": 49.44}} +{"event": "action", "seq": 305, "wall_ts_ms": 1789176459263, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0305", "position": {"x": 1181.6839608578052, "y": 550.9484175184673}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176459263, "virtual_time_s": 3662.433354, "clear_result": "success"}} +{"event": "action", "seq": 306, "wall_ts_ms": 1789176459371, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0306", "position": {"x": 1124.6847131173, "y": 625.5064979165684}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459371, "virtual_time_s": 3687.203353, "measure_result": "direction", "svd_deg": 313.73}} +{"event": "action", "seq": 307, "wall_ts_ms": 1789176459396, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0307", "position": {"x": 1341.406744041681, "y": 389.9933527913719}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459395, "virtual_time_s": 3756.214252, "measure_result": "direction", "svd_deg": 315.12}} +{"event": "action", "seq": 308, "wall_ts_ms": 1789176459414, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0308", "position": {"x": 1382.194016074385, "y": 347.66865779434903}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459414, "virtual_time_s": 3772.97007, "measure_result": "direction", "svd_deg": 314.74}} +{"event": "action", "seq": 309, "wall_ts_ms": 1789176459432, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0309", "position": {"x": 1390.0886059428879, "y": 338.0823028063429}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459432, "virtual_time_s": 3780.453799, "measure_result": "direction", "svd_deg": 314.57}} +{"event": "action", "seq": 310, "wall_ts_ms": 1789176459448, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0310", "position": {"x": 1395.6915783202878, "y": 331.48556133051807}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459448, "virtual_time_s": 3787.184814, "measure_result": "direction", "svd_deg": 316.26}} +{"event": "action", "seq": 311, "wall_ts_ms": 1789176459463, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0311", "position": {"x": 1398.0859307169458, "y": 330.48346577850623}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459463, "virtual_time_s": 3792.703933, "measure_result": "direction", "svd_deg": 314.21}} +{"event": "action", "seq": 312, "wall_ts_ms": 1789176459478, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0312", "position": {"x": 1400.4514100167016, "y": 328.08857296655526}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459478, "virtual_time_s": 3798.377164, "measure_result": "direction", "svd_deg": 315.96}} +{"event": "action", "seq": 313, "wall_ts_ms": 1789176459495, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0313", "position": {"x": 1400.4847115117077, "y": 328.07469205713477}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459495, "virtual_time_s": 3803.38438, "measure_result": "direction", "svd_deg": 315.4}} +{"event": "action", "seq": 314, "wall_ts_ms": 1789176459496, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0314", "position": {"x": 1430.0, "y": 310.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459496, "virtual_time_s": 3813.306365, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 315, "wall_ts_ms": 1789176459496, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0315", "position": {"x": 1430.0, "y": 290.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459496, "virtual_time_s": 3820.306365, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 316, "wall_ts_ms": 1789176459497, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0316", "position": {"x": 1450.0, "y": 290.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459497, "virtual_time_s": 3827.306365, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 317, "wall_ts_ms": 1789176459497, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0317", "position": {"x": 1450.0, "y": 270.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459497, "virtual_time_s": 3834.306365, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 318, "wall_ts_ms": 1789176459498, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0318", "position": {"x": 1470.0, "y": 270.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459498, "virtual_time_s": 3841.306365, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 319, "wall_ts_ms": 1789176459498, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0319", "position": {"x": 1470.0, "y": 250.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459498, "virtual_time_s": 3848.306365, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 320, "wall_ts_ms": 1789176459499, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0320", "position": {"x": 1490.0, "y": 250.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459499, "virtual_time_s": 3855.306365, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 321, "wall_ts_ms": 1789176459499, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0321", "position": {"x": 1490.0, "y": 230.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459499, "virtual_time_s": 3862.306365, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 322, "wall_ts_ms": 1789176459500, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0322", "position": {"x": 1510.0, "y": 230.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459500, "virtual_time_s": 3869.306365, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 323, "wall_ts_ms": 1789176459500, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0323", "position": {"x": 1510.0, "y": 210.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176459500, "virtual_time_s": 3878.306365, "clear_result": "success"}} +{"event": "action", "seq": 324, "wall_ts_ms": 1789176459501, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0324", "position": {"x": 1800.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176459501, "virtual_time_s": 3955.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 325, "wall_ts_ms": 1789176459501, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0325", "position": {"x": 1800.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459501, "virtual_time_s": 3961.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 326, "wall_ts_ms": 1789176459502, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0326", "position": {"x": 1800.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176459502, "virtual_time_s": 3967.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 327, "wall_ts_ms": 1789176459503, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0327", "position": {"x": 1800.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176459503, "virtual_time_s": 3973.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 328, "wall_ts_ms": 1789176459503, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0328", "position": {"x": 1800.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176459503, "virtual_time_s": 3979.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 329, "wall_ts_ms": 1789176459504, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0329", "position": {"x": 1800.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176459504, "virtual_time_s": 3985.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 330, "wall_ts_ms": 1789176459504, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0330", "position": {"x": 1800.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176459504, "virtual_time_s": 3991.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 331, "wall_ts_ms": 1789176459505, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0331", "position": {"x": 1800.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176459505, "virtual_time_s": 3997.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 332, "wall_ts_ms": 1789176459505, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0332", "position": {"x": 1800.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176459505, "virtual_time_s": 4003.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 333, "wall_ts_ms": 1789176459506, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0333", "position": {"x": 1800.0, "y": 600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176459506, "virtual_time_s": 4128.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 334, "wall_ts_ms": 1789176459506, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0334", "position": {"x": 1800.0, "y": 600.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176459506, "virtual_time_s": 4134.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 335, "wall_ts_ms": 1789176459507, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0335", "position": {"x": 1800.0, "y": 600.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459507, "virtual_time_s": 4140.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 336, "wall_ts_ms": 1789176459507, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0336", "position": {"x": 1800.0, "y": 600.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176459507, "virtual_time_s": 4146.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 337, "wall_ts_ms": 1789176459508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0337", "position": {"x": 1800.0, "y": 600.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176459508, "virtual_time_s": 4152.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 338, "wall_ts_ms": 1789176459508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0338", "position": {"x": 1800.0, "y": 600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176459508, "virtual_time_s": 4158.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 339, "wall_ts_ms": 1789176459509, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0339", "position": {"x": 1800.0, "y": 600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176459509, "virtual_time_s": 4164.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 340, "wall_ts_ms": 1789176459510, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0340", "position": {"x": 1800.0, "y": 600.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176459510, "virtual_time_s": 4170.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 341, "wall_ts_ms": 1789176459510, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0341", "position": {"x": 1800.0, "y": 600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176459510, "virtual_time_s": 4176.91642, "measure_result": "no_signal"}} +{"event": "action", "seq": 342, "wall_ts_ms": 1789176459511, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0342", "position": {"x": 800.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176459511, "virtual_time_s": 4415.154496, "measure_result": "no_signal"}} +{"event": "action", "seq": 343, "wall_ts_ms": 1789176459511, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0343", "position": {"x": 800.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176459511, "virtual_time_s": 4421.154496, "measure_result": "no_signal"}} +{"event": "action", "seq": 344, "wall_ts_ms": 1789176459512, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0344", "position": {"x": 800.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459512, "virtual_time_s": 4427.154496, "measure_result": "direction", "svd_deg": 264.94}} +{"event": "action", "seq": 345, "wall_ts_ms": 1789176459544, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0345", "position": {"x": 800.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176459544, "virtual_time_s": 4433.154496, "measure_result": "no_signal"}} +{"event": "action", "seq": 346, "wall_ts_ms": 1789176459545, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0346", "position": {"x": 800.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176459545, "virtual_time_s": 4439.154496, "measure_result": "no_signal"}} +{"event": "action", "seq": 347, "wall_ts_ms": 1789176459545, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0347", "position": {"x": 800.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176459545, "virtual_time_s": 4445.154496, "measure_result": "no_signal"}} +{"event": "action", "seq": 348, "wall_ts_ms": 1789176459546, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0348", "position": {"x": 800.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176459546, "virtual_time_s": 4451.154496, "measure_result": "no_signal"}} +{"event": "action", "seq": 349, "wall_ts_ms": 1789176459546, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0349", "position": {"x": 800.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176459546, "virtual_time_s": 4457.154496, "measure_result": "no_signal"}} +{"event": "action", "seq": 350, "wall_ts_ms": 1789176459547, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0350", "position": {"x": 800.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176459547, "virtual_time_s": 4463.154496, "measure_result": "no_signal"}} +{"event": "action", "seq": 351, "wall_ts_ms": 1789176459656, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0351", "position": {"x": 733.5129521272692, "y": 2.9523101497658217}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459656, "virtual_time_s": 4482.465009, "measure_result": "direction", "svd_deg": 268.28}} +{"event": "action", "seq": 352, "wall_ts_ms": 1789176459724, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0352", "position": {"x": 709.275055381388, "y": -512.2653465819026}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459724, "virtual_time_s": 4590.622502, "measure_result": "direction", "svd_deg": 270.37}} +{"event": "action", "seq": 353, "wall_ts_ms": 1789176459774, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0353", "position": {"x": 707.5778855647807, "y": -632.9834520070874}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459774, "virtual_time_s": 4619.768509, "measure_result": "direction", "svd_deg": 270.28}} +{"event": "action", "seq": 354, "wall_ts_ms": 1789176459820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0354", "position": {"x": 705.5784989101579, "y": -680.091273404085}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459820, "virtual_time_s": 4634.198555, "measure_result": "direction", "svd_deg": 269.65999999999997}} +{"event": "action", "seq": 355, "wall_ts_ms": 1789176459863, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0355", "position": {"x": 703.4765675840429, "y": -729.6012126986859}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459863, "virtual_time_s": 4649.109463, "measure_result": "direction", "svd_deg": 270.79}} +{"event": "action", "seq": 356, "wall_ts_ms": 1789176459906, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0356", "position": {"x": 704.3667737470131, "y": -735.8968930487995}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459906, "virtual_time_s": 4655.381124, "measure_result": "direction", "svd_deg": 270.44}} +{"event": "action", "seq": 357, "wall_ts_ms": 1789176459951, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0357", "position": {"x": 704.343023250654, "y": -736.4561495219407}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459951, "virtual_time_s": 4660.493076, "measure_result": "direction", "svd_deg": 270.2}} +{"event": "action", "seq": 358, "wall_ts_ms": 1789176459997, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0358", "position": {"x": 704.0961284103728, "y": -742.2696710446052}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459997, "virtual_time_s": 4666.656828, "measure_result": "direction", "svd_deg": 269.31}} +{"event": "action", "seq": 359, "wall_ts_ms": 1789176459998, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0359", "position": {"x": 710.0, "y": -910.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459998, "virtual_time_s": 4703.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 360, "wall_ts_ms": 1789176459998, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0360", "position": {"x": 710.0, "y": -930.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459998, "virtual_time_s": 4710.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 361, "wall_ts_ms": 1789176459999, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0361", "position": {"x": 710.0, "y": -950.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176459999, "virtual_time_s": 4717.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 362, "wall_ts_ms": 1789176460000, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0362", "position": {"x": 710.0, "y": -970.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176460000, "virtual_time_s": 4724.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 363, "wall_ts_ms": 1789176460000, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0363", "position": {"x": 710.0, "y": -990.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176460000, "virtual_time_s": 4731.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 364, "wall_ts_ms": 1789176460001, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0364", "position": {"x": 710.0, "y": -1010.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176460001, "virtual_time_s": 4738.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 365, "wall_ts_ms": 1789176460001, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0365", "position": {"x": 710.0, "y": -1030.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176460001, "virtual_time_s": 4745.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 366, "wall_ts_ms": 1789176460002, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0366", "position": {"x": 710.0, "y": -1050.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176460002, "virtual_time_s": 4752.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 367, "wall_ts_ms": 1789176460002, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0367", "position": {"x": 710.0, "y": -1070.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176460002, "virtual_time_s": 4759.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 368, "wall_ts_ms": 1789176460003, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0368", "position": {"x": 710.0, "y": -1090.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176460003, "virtual_time_s": 4766.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 369, "wall_ts_ms": 1789176460003, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0369", "position": {"x": 710.0, "y": -1110.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176460003, "virtual_time_s": 4773.223668, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 370, "wall_ts_ms": 1789176460004, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0370", "position": {"x": 710.0, "y": -1130.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176460004, "virtual_time_s": 4782.223668, "clear_result": "success"}} +{"event": "action", "seq": 371, "wall_ts_ms": 1789176460004, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0371", "position": {"x": 600.0, "y": -1400.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176460004, "virtual_time_s": 4846.533187, "measure_result": "direction", "svd_deg": 76.91}} +{"event": "action", "seq": 372, "wall_ts_ms": 1789176460033, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0372", "position": {"x": 600.0, "y": -1400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460033, "virtual_time_s": 4852.533187, "measure_result": "no_signal"}} +{"event": "action", "seq": 373, "wall_ts_ms": 1789176460033, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0373", "position": {"x": 600.0, "y": -1400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460033, "virtual_time_s": 4858.533187, "measure_result": "no_signal"}} +{"event": "action", "seq": 374, "wall_ts_ms": 1789176460034, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0374", "position": {"x": 600.0, "y": -1400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460034, "virtual_time_s": 4864.533187, "measure_result": "no_signal"}} +{"event": "action", "seq": 375, "wall_ts_ms": 1789176460034, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0375", "position": {"x": 600.0, "y": -1400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460034, "virtual_time_s": 4870.533187, "measure_result": "no_signal"}} +{"event": "action", "seq": 376, "wall_ts_ms": 1789176460035, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0376", "position": {"x": 600.0, "y": -1400.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460035, "virtual_time_s": 4876.533187, "measure_result": "no_signal"}} +{"event": "action", "seq": 377, "wall_ts_ms": 1789176460035, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0377", "position": {"x": 600.0, "y": -1400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460035, "virtual_time_s": 4882.533187, "measure_result": "no_signal"}} +{"event": "action", "seq": 378, "wall_ts_ms": 1789176460036, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0378", "position": {"x": 600.0, "y": -1400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460036, "virtual_time_s": 4888.533187, "measure_result": "no_signal"}} +{"event": "action", "seq": 379, "wall_ts_ms": 1789176460162, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0379", "position": {"x": 770.2931325373089, "y": -1419.5835670886179}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176460162, "virtual_time_s": 4928.816283, "measure_result": "direction", "svd_deg": 98.71}} +{"event": "action", "seq": 380, "wall_ts_ms": 1789176460175, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0380", "position": {"x": 700.9949447373205, "y": -1025.854650095408}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176460175, "virtual_time_s": 5013.772446, "measure_result": "direction", "svd_deg": 92.31}} +{"event": "action", "seq": 381, "wall_ts_ms": 1789176460187, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0381", "position": {"x": 699.3297947067429, "y": -1019.3793938787909}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176460187, "virtual_time_s": 5020.109632, "measure_result": "direction", "svd_deg": 89.14}} +{"event": "action", "seq": 382, "wall_ts_ms": 1789176460200, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0382", "position": {"x": 699.406718675603, "y": -1017.6901305952828}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176460200, "virtual_time_s": 5025.447835, "measure_result": "direction", "svd_deg": 90.36}} +{"event": "action", "seq": 383, "wall_ts_ms": 1789176460211, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0383", "position": {"x": 699.3641715534397, "y": -1015.8532418780125}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176460211, "virtual_time_s": 5030.815311, "measure_result": "direction", "svd_deg": 88.62}} +{"event": "action", "seq": 384, "wall_ts_ms": 1789176460212, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0384", "position": {"x": 699.6327526943057, "y": -984.7906962086886}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176460212, "virtual_time_s": 5042.028052, "clear_result": "success"}} +{"event": "action", "seq": 385, "wall_ts_ms": 1789176460212, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0385", "position": {"x": 1000.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460212, "virtual_time_s": 5108.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 386, "wall_ts_ms": 1789176460213, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0386", "position": {"x": 1000.0, "y": -1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460213, "virtual_time_s": 5114.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 387, "wall_ts_ms": 1789176460214, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0387", "position": {"x": 1000.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460214, "virtual_time_s": 5120.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 388, "wall_ts_ms": 1789176460214, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0388", "position": {"x": 1000.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460214, "virtual_time_s": 5126.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 389, "wall_ts_ms": 1789176460215, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0389", "position": {"x": 1000.0, "y": -1000.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460215, "virtual_time_s": 5132.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 390, "wall_ts_ms": 1789176460215, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0390", "position": {"x": 1000.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460215, "virtual_time_s": 5138.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 391, "wall_ts_ms": 1789176460216, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0391", "position": {"x": 1000.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460216, "virtual_time_s": 5144.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 392, "wall_ts_ms": 1789176460216, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0392", "position": {"x": 1000.0, "y": -1600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460216, "virtual_time_s": 5269.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 393, "wall_ts_ms": 1789176460217, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0393", "position": {"x": 1000.0, "y": -1600.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460217, "virtual_time_s": 5275.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 394, "wall_ts_ms": 1789176460217, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0394", "position": {"x": 1000.0, "y": -1600.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460217, "virtual_time_s": 5281.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 395, "wall_ts_ms": 1789176460218, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0395", "position": {"x": 1000.0, "y": -1600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460218, "virtual_time_s": 5287.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 396, "wall_ts_ms": 1789176460218, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0396", "position": {"x": 1000.0, "y": -1600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460218, "virtual_time_s": 5293.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 397, "wall_ts_ms": 1789176460219, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0397", "position": {"x": 1000.0, "y": -1600.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460219, "virtual_time_s": 5299.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 398, "wall_ts_ms": 1789176460219, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0398", "position": {"x": 1000.0, "y": -1600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460219, "virtual_time_s": 5305.178466, "measure_result": "no_signal"}} +{"event": "action", "seq": 399, "wall_ts_ms": 1789176460220, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0399", "position": {"x": 800.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460220, "virtual_time_s": 5366.747008, "measure_result": "no_signal"}} +{"event": "action", "seq": 400, "wall_ts_ms": 1789176460220, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0400", "position": {"x": 800.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460220, "virtual_time_s": 5372.747008, "measure_result": "no_signal"}} +{"event": "action", "seq": 401, "wall_ts_ms": 1789176460221, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0401", "position": {"x": 800.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460221, "virtual_time_s": 5378.747008, "measure_result": "no_signal"}} +{"event": "action", "seq": 402, "wall_ts_ms": 1789176460221, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0402", "position": {"x": 800.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460221, "virtual_time_s": 5384.747008, "measure_result": "no_signal"}} +{"event": "action", "seq": 403, "wall_ts_ms": 1789176460222, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0403", "position": {"x": 800.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460222, "virtual_time_s": 5390.747008, "measure_result": "no_signal"}} +{"event": "action", "seq": 404, "wall_ts_ms": 1789176460222, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0404", "position": {"x": 800.0, "y": -1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460222, "virtual_time_s": 5396.747008, "measure_result": "no_signal"}} +{"event": "action", "seq": 405, "wall_ts_ms": 1789176460224, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0405", "position": {"x": 800.0, "y": -1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460224, "virtual_time_s": 5402.747008, "measure_result": "no_signal"}} +{"event": "action", "seq": 406, "wall_ts_ms": 1789176460226, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0406", "position": {"x": 400.0, "y": -800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460226, "virtual_time_s": 5623.1536, "measure_result": "no_signal"}} +{"event": "action", "seq": 407, "wall_ts_ms": 1789176460226, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0407", "position": {"x": 400.0, "y": -800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460226, "virtual_time_s": 5629.1536, "measure_result": "no_signal"}} +{"event": "action", "seq": 408, "wall_ts_ms": 1789176460227, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0408", "position": {"x": 400.0, "y": -800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460227, "virtual_time_s": 5635.1536, "measure_result": "no_signal"}} +{"event": "action", "seq": 409, "wall_ts_ms": 1789176460227, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0409", "position": {"x": 400.0, "y": -800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460227, "virtual_time_s": 5641.1536, "measure_result": "no_signal"}} +{"event": "action", "seq": 410, "wall_ts_ms": 1789176460228, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0410", "position": {"x": 400.0, "y": -800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460228, "virtual_time_s": 5647.1536, "measure_result": "no_signal"}} +{"event": "action", "seq": 411, "wall_ts_ms": 1789176460229, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0411", "position": {"x": 400.0, "y": -800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460229, "virtual_time_s": 5653.1536, "measure_result": "no_signal"}} +{"event": "action", "seq": 412, "wall_ts_ms": 1789176460229, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0412", "position": {"x": 400.0, "y": -800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460229, "virtual_time_s": 5659.1536, "measure_result": "no_signal"}} +{"event": "action", "seq": 413, "wall_ts_ms": 1789176460230, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0413", "position": {"x": 0.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460230, "virtual_time_s": 5753.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 414, "wall_ts_ms": 1789176460230, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0414", "position": {"x": 0.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460230, "virtual_time_s": 5759.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 415, "wall_ts_ms": 1789176460231, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0415", "position": {"x": 0.0, "y": -1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460231, "virtual_time_s": 5765.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 416, "wall_ts_ms": 1789176460231, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0416", "position": {"x": 0.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460231, "virtual_time_s": 5771.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 417, "wall_ts_ms": 1789176460232, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0417", "position": {"x": 0.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460232, "virtual_time_s": 5777.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 418, "wall_ts_ms": 1789176460232, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0418", "position": {"x": 0.0, "y": -1000.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460232, "virtual_time_s": 5783.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 419, "wall_ts_ms": 1789176460233, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0419", "position": {"x": 0.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460233, "virtual_time_s": 5789.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 420, "wall_ts_ms": 1789176460233, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0420", "position": {"x": -600.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460233, "virtual_time_s": 5914.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 421, "wall_ts_ms": 1789176460234, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0421", "position": {"x": -600.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460234, "virtual_time_s": 5920.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 422, "wall_ts_ms": 1789176460234, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0422", "position": {"x": -600.0, "y": -1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460234, "virtual_time_s": 5926.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 423, "wall_ts_ms": 1789176460235, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0423", "position": {"x": -600.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460235, "virtual_time_s": 5932.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 424, "wall_ts_ms": 1789176460236, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0424", "position": {"x": -600.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460236, "virtual_time_s": 5938.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 425, "wall_ts_ms": 1789176460236, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0425", "position": {"x": -600.0, "y": -1000.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460236, "virtual_time_s": 5944.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 426, "wall_ts_ms": 1789176460237, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0426", "position": {"x": -600.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460237, "virtual_time_s": 5950.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 427, "wall_ts_ms": 1789176460237, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0427", "position": {"x": -1200.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460237, "virtual_time_s": 6075.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 428, "wall_ts_ms": 1789176460238, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0428", "position": {"x": -1200.0, "y": -1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460238, "virtual_time_s": 6081.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 429, "wall_ts_ms": 1789176460238, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0429", "position": {"x": -1200.0, "y": -1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460238, "virtual_time_s": 6087.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 430, "wall_ts_ms": 1789176460238, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0430", "position": {"x": -1200.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460238, "virtual_time_s": 6093.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 431, "wall_ts_ms": 1789176460239, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0431", "position": {"x": -1200.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460239, "virtual_time_s": 6099.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 432, "wall_ts_ms": 1789176460239, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0432", "position": {"x": -1200.0, "y": -1000.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460239, "virtual_time_s": 6105.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 433, "wall_ts_ms": 1789176460240, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0433", "position": {"x": -1200.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460240, "virtual_time_s": 6111.596319, "measure_result": "no_signal"}} +{"event": "action", "seq": 434, "wall_ts_ms": 1789176460240, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0434", "position": {"x": -1800.0, "y": -800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460240, "virtual_time_s": 6243.087425, "measure_result": "no_signal"}} +{"event": "action", "seq": 435, "wall_ts_ms": 1789176460241, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0435", "position": {"x": -1800.0, "y": -800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460241, "virtual_time_s": 6249.087425, "measure_result": "no_signal"}} +{"event": "action", "seq": 436, "wall_ts_ms": 1789176460241, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0436", "position": {"x": -1800.0, "y": -800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460241, "virtual_time_s": 6255.087425, "measure_result": "no_signal"}} +{"event": "action", "seq": 437, "wall_ts_ms": 1789176460242, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0437", "position": {"x": -1800.0, "y": -800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460242, "virtual_time_s": 6261.087425, "measure_result": "no_signal"}} +{"event": "action", "seq": 438, "wall_ts_ms": 1789176460242, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0438", "position": {"x": -1800.0, "y": -800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460242, "virtual_time_s": 6267.087425, "measure_result": "no_signal"}} +{"event": "action", "seq": 439, "wall_ts_ms": 1789176460242, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0439", "position": {"x": -1800.0, "y": -800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460242, "virtual_time_s": 6273.087425, "measure_result": "no_signal"}} +{"event": "action", "seq": 440, "wall_ts_ms": 1789176460243, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0440", "position": {"x": -1800.0, "y": -800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460243, "virtual_time_s": 6279.087425, "measure_result": "no_signal"}} +{"event": "action", "seq": 441, "wall_ts_ms": 1789176460244, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0441", "position": {"x": -2000.0, "y": -400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460244, "virtual_time_s": 6373.530144, "measure_result": "no_signal"}} +{"event": "action", "seq": 442, "wall_ts_ms": 1789176460244, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0442", "position": {"x": -2000.0, "y": -400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460244, "virtual_time_s": 6379.530144, "measure_result": "no_signal"}} +{"event": "action", "seq": 443, "wall_ts_ms": 1789176460244, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0443", "position": {"x": -2000.0, "y": -400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460244, "virtual_time_s": 6385.530144, "measure_result": "no_signal"}} +{"event": "action", "seq": 444, "wall_ts_ms": 1789176460245, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0444", "position": {"x": -2000.0, "y": -400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460245, "virtual_time_s": 6391.530144, "measure_result": "no_signal"}} +{"event": "action", "seq": 445, "wall_ts_ms": 1789176460245, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0445", "position": {"x": -2000.0, "y": -400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460245, "virtual_time_s": 6397.530144, "measure_result": "no_signal"}} +{"event": "action", "seq": 446, "wall_ts_ms": 1789176460246, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0446", "position": {"x": -2000.0, "y": -400.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460246, "virtual_time_s": 6403.530144, "measure_result": "no_signal"}} +{"event": "action", "seq": 447, "wall_ts_ms": 1789176460246, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0447", "position": {"x": -2000.0, "y": -400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460246, "virtual_time_s": 6409.530144, "measure_result": "no_signal"}} +{"event": "action", "seq": 448, "wall_ts_ms": 1789176460247, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0448", "position": {"x": -1800.0, "y": 200.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460247, "virtual_time_s": 6541.02125, "measure_result": "no_signal"}} +{"event": "action", "seq": 449, "wall_ts_ms": 1789176460247, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0449", "position": {"x": -1800.0, "y": 200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460247, "virtual_time_s": 6547.02125, "measure_result": "no_signal"}} +{"event": "action", "seq": 450, "wall_ts_ms": 1789176460248, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0450", "position": {"x": -1800.0, "y": 200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460248, "virtual_time_s": 6553.02125, "measure_result": "direction", "svd_deg": 6.78}} +{"event": "action", "seq": 451, "wall_ts_ms": 1789176460275, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0451", "position": {"x": -1800.0, "y": 200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460275, "virtual_time_s": 6559.02125, "measure_result": "no_signal"}} +{"event": "action", "seq": 452, "wall_ts_ms": 1789176460276, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0452", "position": {"x": -1800.0, "y": 200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460276, "virtual_time_s": 6565.02125, "measure_result": "no_signal"}} +{"event": "action", "seq": 453, "wall_ts_ms": 1789176460277, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0453", "position": {"x": -1800.0, "y": 200.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460277, "virtual_time_s": 6571.02125, "measure_result": "no_signal"}} +{"event": "action", "seq": 454, "wall_ts_ms": 1789176460277, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0454", "position": {"x": -1800.0, "y": 200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460277, "virtual_time_s": 6577.02125, "measure_result": "no_signal"}} +{"event": "action", "seq": 455, "wall_ts_ms": 1789176460392, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0455", "position": {"x": -1794.1529717903322, "y": 289.4044432225812}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460391, "virtual_time_s": 6600.940337, "measure_result": "direction", "svd_deg": 1.33}} +{"event": "action", "seq": 456, "wall_ts_ms": 1789176460456, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0456", "position": {"x": -1318.304211411735, "y": 321.32110346086057}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460456, "virtual_time_s": 6701.323924, "measure_result": "direction", "svd_deg": 355.12}} +{"event": "action", "seq": 457, "wall_ts_ms": 1789176460474, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0457", "position": {"x": -1128.6972118392828, "y": 295.9202076789207}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460474, "virtual_time_s": 6744.584096, "measure_result": "direction", "svd_deg": 358.93}} +{"event": "action", "seq": 458, "wall_ts_ms": 1789176460491, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0458", "position": {"x": -1108.9861434627296, "y": 295.1081903789875}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460491, "virtual_time_s": 6753.529653, "measure_result": "direction", "svd_deg": 0.86}} +{"event": "action", "seq": 459, "wall_ts_ms": 1789176460508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0459", "position": {"x": -1107.9518990319254, "y": 295.24805815360696}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460508, "virtual_time_s": 6758.738385, "measure_result": "direction", "svd_deg": 0.24}} +{"event": "action", "seq": 460, "wall_ts_ms": 1789176460525, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0460", "position": {"x": -1107.9518990319254, "y": 295.24805815360696}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460525, "virtual_time_s": 6763.738385, "measure_result": "direction", "svd_deg": 0.24}} +{"event": "action", "seq": 461, "wall_ts_ms": 1789176460542, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0461", "position": {"x": -1107.9518990319254, "y": 295.24805815360696}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460542, "virtual_time_s": 6768.738385, "measure_result": "direction", "svd_deg": 0.24}} +{"event": "action", "seq": 462, "wall_ts_ms": 1789176460559, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0462", "position": {"x": -1107.9518990319254, "y": 295.24805815360696}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460559, "virtual_time_s": 6773.738385, "measure_result": "direction", "svd_deg": 0.24}} +{"event": "action", "seq": 463, "wall_ts_ms": 1789176460560, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0463", "position": {"x": -1070.0, "y": 290.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460560, "virtual_time_s": 6784.400992, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 464, "wall_ts_ms": 1789176460561, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0464", "position": {"x": -1050.0, "y": 290.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460561, "virtual_time_s": 6791.400992, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 465, "wall_ts_ms": 1789176460561, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0465", "position": {"x": -1030.0, "y": 290.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460561, "virtual_time_s": 6798.400992, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 466, "wall_ts_ms": 1789176460562, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0466", "position": {"x": -1010.0, "y": 290.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176460562, "virtual_time_s": 6807.400992, "clear_result": "success"}} +{"event": "action", "seq": 467, "wall_ts_ms": 1789176460562, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0467", "position": {"x": -800.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460562, "virtual_time_s": 6885.011047, "measure_result": "no_signal"}} +{"event": "action", "seq": 468, "wall_ts_ms": 1789176460563, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0468", "position": {"x": -800.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460563, "virtual_time_s": 6891.011047, "measure_result": "no_signal"}} +{"event": "action", "seq": 469, "wall_ts_ms": 1789176460563, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0469", "position": {"x": -800.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460563, "virtual_time_s": 6897.011047, "measure_result": "no_signal"}} +{"event": "action", "seq": 470, "wall_ts_ms": 1789176460564, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0470", "position": {"x": -800.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460564, "virtual_time_s": 6903.011047, "measure_result": "no_signal"}} +{"event": "action", "seq": 471, "wall_ts_ms": 1789176460564, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0471", "position": {"x": -800.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460564, "virtual_time_s": 6909.011047, "measure_result": "no_signal"}} +{"event": "action", "seq": 472, "wall_ts_ms": 1789176460565, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0472", "position": {"x": -800.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460565, "virtual_time_s": 6915.011047, "measure_result": "no_signal"}} +{"event": "action", "seq": 473, "wall_ts_ms": 1789176460565, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0473", "position": {"x": -200.0, "y": 400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460565, "virtual_time_s": 7064.233098, "measure_result": "no_signal"}} +{"event": "action", "seq": 474, "wall_ts_ms": 1789176460566, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0474", "position": {"x": -200.0, "y": 400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460566, "virtual_time_s": 7070.233098, "measure_result": "no_signal"}} +{"event": "action", "seq": 475, "wall_ts_ms": 1789176460566, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0475", "position": {"x": -200.0, "y": 400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460566, "virtual_time_s": 7076.233098, "measure_result": "no_signal"}} +{"event": "action", "seq": 476, "wall_ts_ms": 1789176460567, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0476", "position": {"x": -200.0, "y": 400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460567, "virtual_time_s": 7082.233098, "measure_result": "no_signal"}} +{"event": "action", "seq": 477, "wall_ts_ms": 1789176460567, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0477", "position": {"x": -200.0, "y": 400.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460567, "virtual_time_s": 7088.233098, "measure_result": "no_signal"}} +{"event": "action", "seq": 478, "wall_ts_ms": 1789176460568, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0478", "position": {"x": -200.0, "y": 400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460568, "virtual_time_s": 7094.233098, "measure_result": "no_signal"}} +{"event": "action", "seq": 479, "wall_ts_ms": 1789176460568, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0479", "position": {"x": 0.0, "y": 1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460568, "virtual_time_s": 7225.724204, "measure_result": "no_signal"}} +{"event": "action", "seq": 480, "wall_ts_ms": 1789176460569, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0480", "position": {"x": 0.0, "y": 1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460569, "virtual_time_s": 7231.724204, "measure_result": "no_signal"}} +{"event": "action", "seq": 481, "wall_ts_ms": 1789176460569, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0481", "position": {"x": 0.0, "y": 1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460569, "virtual_time_s": 7237.724204, "measure_result": "no_signal"}} +{"event": "action", "seq": 482, "wall_ts_ms": 1789176460570, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0482", "position": {"x": 0.0, "y": 1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460570, "virtual_time_s": 7243.724204, "measure_result": "no_signal"}} +{"event": "action", "seq": 483, "wall_ts_ms": 1789176460570, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0483", "position": {"x": 0.0, "y": 1000.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460570, "virtual_time_s": 7249.724204, "measure_result": "no_signal"}} +{"event": "action", "seq": 484, "wall_ts_ms": 1789176460571, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0484", "position": {"x": 0.0, "y": 1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460571, "virtual_time_s": 7255.724204, "measure_result": "no_signal"}} +{"event": "action", "seq": 485, "wall_ts_ms": 1789176460571, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0485", "position": {"x": -200.0, "y": 1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460571, "virtual_time_s": 7425.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 486, "wall_ts_ms": 1789176460572, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0486", "position": {"x": -200.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460572, "virtual_time_s": 7431.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 487, "wall_ts_ms": 1789176460572, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0487", "position": {"x": -200.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460572, "virtual_time_s": 7437.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 488, "wall_ts_ms": 1789176460573, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0488", "position": {"x": -200.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460573, "virtual_time_s": 7443.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 489, "wall_ts_ms": 1789176460573, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0489", "position": {"x": -200.0, "y": 1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460573, "virtual_time_s": 7449.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 490, "wall_ts_ms": 1789176460574, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0490", "position": {"x": -200.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460574, "virtual_time_s": 7455.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 491, "wall_ts_ms": 1789176460574, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0491", "position": {"x": 400.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460574, "virtual_time_s": 7580.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 492, "wall_ts_ms": 1789176460575, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0492", "position": {"x": 400.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460575, "virtual_time_s": 7586.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 493, "wall_ts_ms": 1789176460575, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0493", "position": {"x": 400.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460575, "virtual_time_s": 7592.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 494, "wall_ts_ms": 1789176460576, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0494", "position": {"x": 400.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460576, "virtual_time_s": 7598.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 495, "wall_ts_ms": 1789176460576, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0495", "position": {"x": 400.0, "y": 1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460576, "virtual_time_s": 7604.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 496, "wall_ts_ms": 1789176460576, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0496", "position": {"x": 400.0, "y": 1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460576, "virtual_time_s": 7610.648429, "measure_result": "no_signal"}} +{"event": "action", "seq": 497, "wall_ts_ms": 1789176460577, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0497", "position": {"x": 1200.0, "y": 1600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460577, "virtual_time_s": 7780.572654, "measure_result": "no_signal"}} +{"event": "action", "seq": 498, "wall_ts_ms": 1789176460577, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0498", "position": {"x": 1200.0, "y": 1600.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460577, "virtual_time_s": 7786.572654, "measure_result": "no_signal"}} +{"event": "action", "seq": 499, "wall_ts_ms": 1789176460578, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0499", "position": {"x": 1200.0, "y": 1600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460578, "virtual_time_s": 7792.572654, "measure_result": "no_signal"}} +{"event": "action", "seq": 500, "wall_ts_ms": 1789176460578, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0500", "position": {"x": 1200.0, "y": 1600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460578, "virtual_time_s": 7798.572654, "measure_result": "no_signal"}} +{"event": "action", "seq": 501, "wall_ts_ms": 1789176460579, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0501", "position": {"x": 1200.0, "y": 1600.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460579, "virtual_time_s": 7804.572654, "measure_result": "no_signal"}} +{"event": "action", "seq": 502, "wall_ts_ms": 1789176460579, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0502", "position": {"x": 1200.0, "y": 1600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460579, "virtual_time_s": 7810.572654, "measure_result": "no_signal"}} +{"event": "action", "seq": 503, "wall_ts_ms": 1789176460580, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0503", "position": {"x": -1000.0, "y": 1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460580, "virtual_time_s": 8271.642824, "measure_result": "no_signal"}} +{"event": "action", "seq": 504, "wall_ts_ms": 1789176460580, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0504", "position": {"x": -1000.0, "y": 1000.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460580, "virtual_time_s": 8277.642824, "measure_result": "no_signal"}} +{"event": "action", "seq": 505, "wall_ts_ms": 1789176460581, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0505", "position": {"x": -1000.0, "y": 1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460581, "virtual_time_s": 8283.642824, "measure_result": "no_signal"}} +{"event": "action", "seq": 506, "wall_ts_ms": 1789176460581, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0506", "position": {"x": -1000.0, "y": 1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460581, "virtual_time_s": 8289.642824, "measure_result": "no_signal"}} +{"event": "action", "seq": 507, "wall_ts_ms": 1789176460582, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0507", "position": {"x": -1000.0, "y": 1000.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460582, "virtual_time_s": 8295.642824, "measure_result": "no_signal"}} +{"event": "action", "seq": 508, "wall_ts_ms": 1789176460582, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0508", "position": {"x": -1000.0, "y": 1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460582, "virtual_time_s": 8301.642824, "measure_result": "no_signal"}} +{"event": "action", "seq": 509, "wall_ts_ms": 1789176460583, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0509", "position": {"x": -1200.0, "y": 800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460583, "virtual_time_s": 8363.211366, "measure_result": "no_signal"}} +{"event": "action", "seq": 510, "wall_ts_ms": 1789176460583, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0510", "position": {"x": -1200.0, "y": 800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460583, "virtual_time_s": 8369.211366, "measure_result": "no_signal"}} +{"event": "action", "seq": 511, "wall_ts_ms": 1789176460584, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0511", "position": {"x": -1200.0, "y": 800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460584, "virtual_time_s": 8375.211366, "measure_result": "no_signal"}} +{"event": "action", "seq": 512, "wall_ts_ms": 1789176460584, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0512", "position": {"x": -1200.0, "y": 800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460584, "virtual_time_s": 8381.211366, "measure_result": "no_signal"}} +{"event": "action", "seq": 513, "wall_ts_ms": 1789176460585, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0513", "position": {"x": -1200.0, "y": 800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460585, "virtual_time_s": 8387.211366, "measure_result": "no_signal"}} +{"event": "action", "seq": 514, "wall_ts_ms": 1789176460585, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0514", "position": {"x": -1200.0, "y": 800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460585, "virtual_time_s": 8393.211366, "measure_result": "no_signal"}} +{"event": "action", "seq": 515, "wall_ts_ms": 1789176460586, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0515", "position": {"x": -1400.0, "y": 1400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460586, "virtual_time_s": 8524.702472, "measure_result": "no_signal"}} +{"event": "action", "seq": 516, "wall_ts_ms": 1789176460587, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0516", "position": {"x": -1400.0, "y": 1400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460586, "virtual_time_s": 8530.702472, "measure_result": "no_signal"}} +{"event": "action", "seq": 517, "wall_ts_ms": 1789176460587, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0517", "position": {"x": -1400.0, "y": 1400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460587, "virtual_time_s": 8536.702472, "measure_result": "no_signal"}} +{"event": "action", "seq": 518, "wall_ts_ms": 1789176460587, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0518", "position": {"x": -1400.0, "y": 1400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460587, "virtual_time_s": 8542.702472, "measure_result": "no_signal"}} +{"event": "action", "seq": 519, "wall_ts_ms": 1789176460588, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0519", "position": {"x": -1400.0, "y": 1400.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460588, "virtual_time_s": 8548.702472, "measure_result": "no_signal"}} +{"event": "action", "seq": 520, "wall_ts_ms": 1789176460588, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0520", "position": {"x": -1400.0, "y": 1400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460588, "virtual_time_s": 8554.702472, "measure_result": "no_signal"}} +{"event": "action", "seq": 521, "wall_ts_ms": 1789176460589, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0521", "position": {"x": -1200.0, "y": 1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460589, "virtual_time_s": 8649.145191, "measure_result": "no_signal"}} +{"event": "action", "seq": 522, "wall_ts_ms": 1789176460589, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0522", "position": {"x": -1200.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460589, "virtual_time_s": 8655.145191, "measure_result": "no_signal"}} +{"event": "action", "seq": 523, "wall_ts_ms": 1789176460590, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0523", "position": {"x": -1200.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460590, "virtual_time_s": 8661.145191, "measure_result": "no_signal"}} +{"event": "action", "seq": 524, "wall_ts_ms": 1789176460590, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0524", "position": {"x": -1200.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460590, "virtual_time_s": 8667.145191, "measure_result": "no_signal"}} +{"event": "action", "seq": 525, "wall_ts_ms": 1789176460591, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0525", "position": {"x": -1200.0, "y": 1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460591, "virtual_time_s": 8673.145191, "measure_result": "no_signal"}} +{"event": "action", "seq": 526, "wall_ts_ms": 1789176460591, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0526", "position": {"x": -1200.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460591, "virtual_time_s": 8679.145191, "measure_result": "no_signal"}} +{"event": "action", "seq": 527, "wall_ts_ms": 1789176460592, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0527", "position": {"x": -2200.0, "y": 600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460592, "virtual_time_s": 8996.555178, "measure_result": "no_signal"}} +{"event": "action", "seq": 528, "wall_ts_ms": 1789176460592, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0528", "position": {"x": -2200.0, "y": 600.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460592, "virtual_time_s": 9002.555178, "measure_result": "no_signal"}} +{"event": "action", "seq": 529, "wall_ts_ms": 1789176460593, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0529", "position": {"x": -2200.0, "y": 600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460593, "virtual_time_s": 9008.555178, "measure_result": "no_signal"}} +{"event": "action", "seq": 530, "wall_ts_ms": 1789176460593, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0530", "position": {"x": -2200.0, "y": 600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460593, "virtual_time_s": 9014.555178, "measure_result": "no_signal"}} +{"event": "action", "seq": 531, "wall_ts_ms": 1789176460594, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0531", "position": {"x": -2200.0, "y": 600.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460594, "virtual_time_s": 9020.555178, "measure_result": "no_signal"}} +{"event": "action", "seq": 532, "wall_ts_ms": 1789176460594, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0532", "position": {"x": -2200.0, "y": 600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460594, "virtual_time_s": 9026.555178, "measure_result": "no_signal"}} +{"event": "action", "seq": 533, "wall_ts_ms": 1789176460595, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0533", "position": {"x": -1400.0, "y": -1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460595, "virtual_time_s": 9537.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 534, "wall_ts_ms": 1789176460596, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0534", "position": {"x": -1400.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460595, "virtual_time_s": 9543.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 535, "wall_ts_ms": 1789176460596, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0535", "position": {"x": -1400.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460596, "virtual_time_s": 9549.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 536, "wall_ts_ms": 1789176460596, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0536", "position": {"x": -1400.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460596, "virtual_time_s": 9555.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 537, "wall_ts_ms": 1789176460597, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0537", "position": {"x": -1400.0, "y": -1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460597, "virtual_time_s": 9561.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 538, "wall_ts_ms": 1789176460597, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0538", "position": {"x": -1400.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460597, "virtual_time_s": 9567.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 539, "wall_ts_ms": 1789176460598, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0539", "position": {"x": -400.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460598, "virtual_time_s": 9772.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 540, "wall_ts_ms": 1789176460598, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0540", "position": {"x": -400.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460598, "virtual_time_s": 9778.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 541, "wall_ts_ms": 1789176460599, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0541", "position": {"x": -400.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460599, "virtual_time_s": 9784.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 542, "wall_ts_ms": 1789176460599, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0542", "position": {"x": -400.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460599, "virtual_time_s": 9790.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 543, "wall_ts_ms": 1789176460600, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0543", "position": {"x": -400.0, "y": -1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460600, "virtual_time_s": 9796.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 544, "wall_ts_ms": 1789176460600, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0544", "position": {"x": -400.0, "y": -1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460600, "virtual_time_s": 9802.519604, "measure_result": "no_signal"}} +{"event": "action", "seq": 545, "wall_ts_ms": 1789176460601, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0545", "position": {"x": -200.0, "y": -2200.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460601, "virtual_time_s": 9896.962323, "measure_result": "no_signal"}} +{"event": "action", "seq": 546, "wall_ts_ms": 1789176460601, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0546", "position": {"x": -200.0, "y": -2200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460601, "virtual_time_s": 9902.962323, "measure_result": "no_signal"}} +{"event": "action", "seq": 547, "wall_ts_ms": 1789176460601, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0547", "position": {"x": -200.0, "y": -2200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460601, "virtual_time_s": 9908.962323, "measure_result": "no_signal"}} +{"event": "action", "seq": 548, "wall_ts_ms": 1789176460602, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0548", "position": {"x": -200.0, "y": -2200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460602, "virtual_time_s": 9914.962323, "measure_result": "no_signal"}} +{"event": "action", "seq": 549, "wall_ts_ms": 1789176460602, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0549", "position": {"x": -200.0, "y": -2200.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460602, "virtual_time_s": 9920.962323, "measure_result": "no_signal"}} +{"event": "action", "seq": 550, "wall_ts_ms": 1789176460603, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0550", "position": {"x": -200.0, "y": -2200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460603, "virtual_time_s": 9926.962323, "measure_result": "no_signal"}} +{"event": "action", "seq": 551, "wall_ts_ms": 1789176460603, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0551", "position": {"x": 1800.0, "y": -800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176460603, "virtual_time_s": 10420.224548, "measure_result": "no_signal"}} +{"event": "action", "seq": 552, "wall_ts_ms": 1789176460604, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0552", "position": {"x": 1800.0, "y": -800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176460604, "virtual_time_s": 10426.224548, "measure_result": "no_signal"}} +{"event": "action", "seq": 553, "wall_ts_ms": 1789176460604, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0553", "position": {"x": 1800.0, "y": -800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176460604, "virtual_time_s": 10432.224548, "measure_result": "no_signal"}} +{"event": "action", "seq": 554, "wall_ts_ms": 1789176460605, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0554", "position": {"x": 1800.0, "y": -800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176460605, "virtual_time_s": 10438.224548, "measure_result": "no_signal"}} +{"event": "action", "seq": 555, "wall_ts_ms": 1789176460605, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0555", "position": {"x": 1800.0, "y": -800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176460605, "virtual_time_s": 10444.224548, "measure_result": "no_signal"}} +{"event": "action", "seq": 556, "wall_ts_ms": 1789176460606, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0556", "position": {"x": 1800.0, "y": -800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176460606, "virtual_time_s": 10450.224548, "measure_result": "no_signal"}} +{"event": "action", "seq": 557, "wall_ts_ms": 1789176460606, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "1cbd613130d2-0557"}, "response": {"accepted": true, "real_timestamp_ms": 1789176460606, "virtual_time_s": 10450.224548, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 10450.224548, "real_elapsed_s": 4.965891, "request_count": 557, "cleared_count": 14} diff --git a/referee-data/sessions/JJNT-Y73D-Q8MJ-GJRP/meta.json b/referee-data/sessions/JJNT-Y73D-Q8MJ-GJRP/meta.json new file mode 100644 index 0000000..24ae1d2 --- /dev/null +++ b/referee-data/sessions/JJNT-Y73D-Q8MJ-GJRP/meta.json @@ -0,0 +1,120 @@ +{ + "case_code": "JJNT-Y73D-Q8MJ-GJRP", + "module": "q4_practice", + "robot_id": "1", + "seed": 369347818, + "truth": [ + { + "channel": 17, + "x": 961.259680638565, + "y": -322.20435540206125, + "r_eff_m": 1337.2120314399085, + "directional": true, + "heading_deg": 32.95446851929418 + }, + { + "channel": 1, + "x": 699.579415669797, + "y": -994.3795640722756, + "r_eff_m": 1053.9698667251757, + "directional": true, + "heading_deg": 243.6689331576609 + }, + { + "channel": 11, + "x": 1291.8056059219246, + "y": -42.08078698921171, + "r_eff_m": 1311.933931088018, + "directional": true, + "heading_deg": 79.48225873460355 + }, + { + "channel": 5, + "x": 703.7264620515039, + "y": -1129.5240904414413, + "r_eff_m": 1169.8360466535823, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": 338.22565201794697, + "y": 874.6768350631039, + "r_eff_m": 1482.6080399361215, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 14, + "x": 265.9256037625333, + "y": -528.3497986875859, + "r_eff_m": 1084.8425177148724, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": 1519.236663407262, + "y": 210.04641805920818, + "r_eff_m": 1081.0121686329037, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": -1000.721484279969, + "y": 295.0893652511872, + "r_eff_m": 1042.0550839806635, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 3, + "x": 739.8133165162162, + "y": 1635.229555780632, + "r_eff_m": 1315.950863699557, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 19, + "x": -430.4482958491599, + "y": -668.1153751259395, + "r_eff_m": 1373.4152142261964, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": 190.38314454210118, + "y": 877.3179340248826, + "r_eff_m": 1047.4487397403734, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": 534.6402542389394, + "y": 1081.7607081644426, + "r_eff_m": 1448.3687216908386, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": 1183.9602682706345, + "y": 553.3850303313459, + "r_eff_m": 1006.3347926372188, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": -491.4531452851653, + "y": -448.1434827844846, + "r_eff_m": 1243.8775021977112, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/JYCW-VMN7-W4Z8-FDDR/log.jsonl b/referee-data/sessions/JYCW-VMN7-W4Z8-FDDR/log.jsonl new file mode 100644 index 0000000..ab49f79 --- /dev/null +++ b/referee-data/sessions/JYCW-VMN7-W4Z8-FDDR/log.jsonl @@ -0,0 +1,259 @@ +{"event": "session_start", "case_code": "JYCW-VMN7-W4Z8-FDDR", "module": "q4_practice", "robot_id": "1", "seed": 1136651233, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 12, "x": -1202.6905196007817, "y": 532.6019870005632, "r_eff_m": 1176.3155025395015, "directional": true, "heading_deg": 138.77466967489136}, {"channel": 11, "x": 512.8383589621155, "y": -1628.8985674968442, "r_eff_m": 1405.807107356282, "directional": true, "heading_deg": 287.47595701099374}, {"channel": 13, "x": -395.00492565279814, "y": -1579.6362069307759, "r_eff_m": 1390.5647746374957, "directional": true, "heading_deg": 330.69307033879033}, {"channel": 3, "x": -64.76572458073815, "y": 1129.246650053679, "r_eff_m": 1202.4707717536946, "directional": false, "heading_deg": 0.0}, {"channel": 5, "x": 695.0335185097014, "y": -1095.5846338563172, "r_eff_m": 1268.8339197132543, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": 739.3795158281649, "y": -1337.9506177103044, "r_eff_m": 1088.8459529706615, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": -60.404526398522606, "y": -1175.6982128851098, "r_eff_m": 1120.724982155038, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": -1278.6393704932552, "y": 608.6781413295402, "r_eff_m": 1466.2308885782784, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": 1321.5883393834322, "y": -241.52896288885367, "r_eff_m": 1006.5938404345096, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": -1303.3510110751201, "y": 692.8017295346029, "r_eff_m": 1159.941227703783, "directional": false, "heading_deg": 0.0}, {"channel": 14, "x": -932.5165422011986, "y": 907.4724153747146, "r_eff_m": 1216.0652243761767, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": -1543.3569666083235, "y": 917.0489930454934, "r_eff_m": 1417.422441038484, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": 337.2030502936078, "y": -666.6368556619858, "r_eff_m": 1068.6367095663993, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": 1715.3023013911206, "y": 509.64586592845404, "r_eff_m": 1221.452552834075, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": -298.4445285961911, "y": -1288.3036519132675, "r_eff_m": 1098.2048203547604, "directional": false, "heading_deg": 0.0}, {"channel": 18, "x": 922.1552059510833, "y": 1514.1251033773742, "r_eff_m": 1317.4958824858843, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789189450869, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789189450869, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789189450878, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189450878, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789189450880, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189450880, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789189450882, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189450882, "virtual_time_s": 17.0, "measure_result": "direction", "svd_deg": 93.1}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789189450919, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189450919, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789189450920, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189450920, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789189450921, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189450921, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789189450921, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189450921, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789189450922, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189450922, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789189450923, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189450923, "virtual_time_s": 53.0, "measure_result": "direction", "svd_deg": 295.87}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789189450958, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189450958, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789189450959, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189450959, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789189450959, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189450959, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789189450960, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189450960, "virtual_time_s": 77.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789189450960, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189450960, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789189450961, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189450961, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789189450962, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189450962, "virtual_time_s": 95.0, "measure_result": "direction", "svd_deg": 155.26}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789189450998, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189450998, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789189450999, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189450999, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789189450999, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189450999, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789189451000, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189451000, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789189451110, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0022", "position": {"x": -40.81830087564069, "y": 373.9513056531375}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189451110, "virtual_time_s": 200.23449, "measure_result": "direction", "svd_deg": 92.76}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789189451171, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0023", "position": {"x": -65.680847029012, "y": 909.8033982364855}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189451171, "virtual_time_s": 312.520204, "measure_result": "direction", "svd_deg": 89.0}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789189451198, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0024", "position": {"x": -65.62970642220832, "y": 981.6045387717687}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189451198, "virtual_time_s": 331.880436, "measure_result": "direction", "svd_deg": 89.52}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789189451218, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0025", "position": {"x": -65.66733576822502, "y": 1032.7474746816752}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189451218, "virtual_time_s": 347.109026, "measure_result": "direction", "svd_deg": 90.24}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789189451235, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0026", "position": {"x": -65.68615044123335, "y": 1071.1046789213112}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189451235, "virtual_time_s": 359.780468, "measure_result": "direction", "svd_deg": 88.87}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789189451248, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0027", "position": {"x": -65.56959546278371, "y": 1097.8170063554212}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189451248, "virtual_time_s": 370.122984, "measure_result": "direction", "svd_deg": 88.52}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789189451260, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0028", "position": {"x": -65.29573750472925, "y": 1114.3328026610468}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189451260, "virtual_time_s": 378.426597, "measure_result": "direction", "svd_deg": 88.02}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789189451270, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0029", "position": {"x": -64.97577038217653, "y": 1123.1338242908105}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189451270, "virtual_time_s": 385.187964, "measure_result": "direction", "svd_deg": 88.93}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789189451271, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0030", "position": {"x": -64.81578682090019, "y": 1137.5343351056918}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189451271, "virtual_time_s": 393.068244, "clear_result": "success"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789189451383, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0031", "position": {"x": -416.2928049509664, "y": 578.7022339019627}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189451383, "virtual_time_s": 531.102999, "measure_result": "direction", "svd_deg": 177.32}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789189451401, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0032", "position": {"x": -1280.943942968648, "y": 604.8739238257563}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189451401, "virtual_time_s": 709.112426, "measure_result": "near"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789189451405, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0033", "position": {"x": -1280.943942968648, "y": 604.8739238257563}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189451405, "virtual_time_s": 714.112426, "clear_result": "success"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789189451517, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0034", "position": {"x": 62.5365559799518, "y": -409.54349424330076}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189451517, "virtual_time_s": 1056.801158, "measure_result": "direction", "svd_deg": 317.74}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789189451535, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0035", "position": {"x": 291.3708150318495, "y": -617.0529615465632}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189451535, "virtual_time_s": 1123.583129, "measure_result": "direction", "svd_deg": 313.28}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789189451547, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0036", "position": {"x": 302.8084882764618, "y": -630.9002992163716}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189451547, "virtual_time_s": 1132.175171, "measure_result": "direction", "svd_deg": 313.85}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789189451549, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0037", "position": {"x": 327.8729203710101, "y": -657.2034316508523}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189451549, "virtual_time_s": 1144.441754, "clear_result": "success"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789189451550, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0038", "position": {"x": 200.0, "y": -900.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189451550, "virtual_time_s": 1205.324049, "measure_result": "direction", "svd_deg": 218.74}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789189451584, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0039", "position": {"x": 200.0, "y": -900.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189451584, "virtual_time_s": 1211.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789189451585, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0040", "position": {"x": 200.0, "y": -900.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189451585, "virtual_time_s": 1217.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789189451585, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0041", "position": {"x": 200.0, "y": -900.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189451585, "virtual_time_s": 1223.324049, "measure_result": "direction", "svd_deg": 339.03}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789189451619, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0042", "position": {"x": 200.0, "y": -900.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189451619, "virtual_time_s": 1229.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789189451620, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0043", "position": {"x": 200.0, "y": -900.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189451620, "virtual_time_s": 1235.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789189451621, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0044", "position": {"x": 200.0, "y": -900.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189451621, "virtual_time_s": 1241.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789189451621, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0045", "position": {"x": 200.0, "y": -900.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189451621, "virtual_time_s": 1247.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789189451622, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0046", "position": {"x": 200.0, "y": -900.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189451622, "virtual_time_s": 1253.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789189451623, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0047", "position": {"x": 200.0, "y": -900.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189451623, "virtual_time_s": 1259.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789189451623, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0048", "position": {"x": 200.0, "y": -900.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189451623, "virtual_time_s": 1265.324049, "measure_result": "direction", "svd_deg": 228.97}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789189451657, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0049", "position": {"x": 200.0, "y": -900.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189451657, "virtual_time_s": 1271.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789189451658, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0050", "position": {"x": 200.0, "y": -900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189451658, "virtual_time_s": 1277.324049, "measure_result": "direction", "svd_deg": 320.11}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789189451692, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0051", "position": {"x": 200.0, "y": -900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189451692, "virtual_time_s": 1283.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789189451693, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0052", "position": {"x": 200.0, "y": -900.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189451693, "virtual_time_s": 1289.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789189451694, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0053", "position": {"x": 200.0, "y": -900.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189451694, "virtual_time_s": 1295.324049, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789189451695, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0054", "position": {"x": 200.0, "y": -900.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189451695, "virtual_time_s": 1301.324049, "measure_result": "direction", "svd_deg": 227.36}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789189451801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0055", "position": {"x": 409.26768535025633, "y": -1035.0638493157248}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189451801, "virtual_time_s": 1357.137785, "measure_result": "direction", "svd_deg": 318.36}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789189451829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0056", "position": {"x": 775.3917006736533, "y": -1352.4618581876568}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189451829, "virtual_time_s": 1459.0477, "measure_result": "direction", "svd_deg": 158.33}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789189451830, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0057", "position": {"x": 742.2383510249547, "y": -1339.1580595940632}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189451830, "virtual_time_s": 1471.192308, "clear_result": "success"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789189451913, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0058", "position": {"x": 530.7516315244313, "y": -1292.0405746113518}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189451913, "virtual_time_s": 1520.526678, "measure_result": "direction", "svd_deg": 50.79}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789189451914, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0059", "position": {"x": 695.9141671618158, "y": -1089.9175023338598}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189451914, "virtual_time_s": 1577.731045, "clear_result": "success"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789189451998, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0060", "position": {"x": 106.618562460681, "y": -1308.986511187421}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189451998, "virtual_time_s": 1709.470544, "measure_result": "direction", "svd_deg": 208.49}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789189452018, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0061", "position": {"x": -370.53761594218355, "y": -1557.582631616376}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189452017, "virtual_time_s": 1822.076873, "measure_result": "direction", "svd_deg": 222.79}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789189452030, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0062", "position": {"x": -387.62161979974036, "y": -1571.2108922335426}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189452030, "virtual_time_s": 1831.447652, "measure_result": "direction", "svd_deg": 229.46}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789189452031, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0063", "position": {"x": -398.3058632911069, "y": -1583.482212921481}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189452031, "virtual_time_s": 1839.701809, "clear_result": "success"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789189452125, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0064", "position": {"x": -62.9090449679932, "y": -1480.5110598124757}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189452125, "virtual_time_s": 1915.871342, "measure_result": "direction", "svd_deg": 140.23}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789189452127, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0065", "position": {"x": -289.28445153779455, "y": -1292.3831029973603}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189452127, "virtual_time_s": 1979.739993, "clear_result": "success"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789189452214, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0066", "position": {"x": -185.02933409580143, "y": -1024.7545638754696}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189452214, "virtual_time_s": 2043.183588, "measure_result": "direction", "svd_deg": 309.98}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789189452216, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0067", "position": {"x": -56.31062403002363, "y": -1178.459556363276}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189452216, "virtual_time_s": 2088.280337, "clear_result": "success"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789189452217, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0068", "position": {"x": -700.0, "y": -1200.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189452217, "virtual_time_s": 2223.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789189452217, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0069", "position": {"x": -700.0, "y": -1200.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189452217, "virtual_time_s": 2229.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789189452218, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0070", "position": {"x": -700.0, "y": -1200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189452218, "virtual_time_s": 2235.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789189452219, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0071", "position": {"x": -700.0, "y": -1200.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189452219, "virtual_time_s": 2241.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789189452219, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0072", "position": {"x": -700.0, "y": -1200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189452219, "virtual_time_s": 2247.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789189452220, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0073", "position": {"x": -700.0, "y": -1200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189452220, "virtual_time_s": 2253.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789189452221, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0074", "position": {"x": -700.0, "y": -1200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189452221, "virtual_time_s": 2259.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789189452221, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0075", "position": {"x": -700.0, "y": -1200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189452221, "virtual_time_s": 2265.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789189452222, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0076", "position": {"x": -700.0, "y": -1200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189452222, "virtual_time_s": 2271.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789189452223, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0077", "position": {"x": -700.0, "y": -1200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189452223, "virtual_time_s": 2277.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789189452224, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0078", "position": {"x": -700.0, "y": -1200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189452224, "virtual_time_s": 2283.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789189452224, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0079", "position": {"x": -700.0, "y": -1200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189452224, "virtual_time_s": 2289.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789189452225, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0080", "position": {"x": -700.0, "y": -700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189452225, "virtual_time_s": 2394.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789189452225, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0081", "position": {"x": -700.0, "y": -700.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189452225, "virtual_time_s": 2400.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789189452226, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0082", "position": {"x": -700.0, "y": -700.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189452226, "virtual_time_s": 2406.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789189452226, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0083", "position": {"x": -700.0, "y": -700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189452226, "virtual_time_s": 2412.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789189452227, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0084", "position": {"x": -700.0, "y": -700.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189452227, "virtual_time_s": 2418.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789189452227, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0085", "position": {"x": -700.0, "y": -700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189452227, "virtual_time_s": 2424.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789189452228, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0086", "position": {"x": -700.0, "y": -700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189452228, "virtual_time_s": 2430.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789189452229, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0087", "position": {"x": -700.0, "y": -700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189452229, "virtual_time_s": 2436.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789189452229, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0088", "position": {"x": -700.0, "y": -700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189452229, "virtual_time_s": 2442.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789189452230, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0089", "position": {"x": -700.0, "y": -700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189452230, "virtual_time_s": 2448.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789189452230, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0090", "position": {"x": -700.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189452230, "virtual_time_s": 2454.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789189452231, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0091", "position": {"x": -700.0, "y": -700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189452231, "virtual_time_s": 2460.090275, "measure_result": "no_signal"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789189452232, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0092", "position": {"x": -800.0, "y": -200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189452232, "virtual_time_s": 2567.070665, "measure_result": "no_signal"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789189452233, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0093", "position": {"x": -800.0, "y": -200.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189452233, "virtual_time_s": 2573.070665, "measure_result": "direction", "svd_deg": 120.26}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789189452266, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0094", "position": {"x": -800.0, "y": -200.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189452266, "virtual_time_s": 2579.070665, "measure_result": "no_signal"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789189452267, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0095", "position": {"x": -800.0, "y": -200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189452267, "virtual_time_s": 2585.070665, "measure_result": "no_signal"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789189452267, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0096", "position": {"x": -800.0, "y": -200.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189452267, "virtual_time_s": 2591.070665, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789189452268, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0097", "position": {"x": -800.0, "y": -200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189452268, "virtual_time_s": 2597.070665, "measure_result": "direction", "svd_deg": 122.97}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789189452301, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0098", "position": {"x": -800.0, "y": -200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189452301, "virtual_time_s": 2603.070665, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789189452302, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0099", "position": {"x": -800.0, "y": -200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189452302, "virtual_time_s": 2609.070665, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789189452303, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0100", "position": {"x": -800.0, "y": -200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189452303, "virtual_time_s": 2615.070665, "measure_result": "no_signal"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789189452303, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0101", "position": {"x": -800.0, "y": -200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189452303, "virtual_time_s": 2621.070665, "measure_result": "direction", "svd_deg": 97.44}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789189452336, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0102", "position": {"x": -800.0, "y": -200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189452336, "virtual_time_s": 2627.070665, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789189452337, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0103", "position": {"x": -800.0, "y": -200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189452337, "virtual_time_s": 2633.070665, "measure_result": "no_signal"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789189452437, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0104", "position": {"x": -920.1212560163991, "y": 138.00942386527535}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189452437, "virtual_time_s": 2710.814511, "measure_result": "direction", "svd_deg": 128.65}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789189452482, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0105", "position": {"x": -1335.2737648113914, "y": 682.4691521054833}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189452482, "virtual_time_s": 2852.750701, "measure_result": "direction", "svd_deg": 132.2}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789189452510, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0106", "position": {"x": -1418.7934734547548, "y": 782.4632150367795}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189452510, "virtual_time_s": 2883.807834, "measure_result": "direction", "svd_deg": 132.99}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789189452526, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0107", "position": {"x": -1481.0867811385267, "y": 852.2733953606713}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189452526, "virtual_time_s": 2907.520308, "measure_result": "direction", "svd_deg": 133.51}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789189452537, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0108", "position": {"x": -1515.7563213772614, "y": 890.1053319883869}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189452537, "virtual_time_s": 2922.783314, "measure_result": "direction", "svd_deg": 135.0}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789189452538, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0109", "position": {"x": -1535.0843911991342, "y": 909.8387930250774}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189452538, "virtual_time_s": 2933.307746, "clear_result": "success"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789189452640, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0110", "position": {"x": -1388.8542098620494, "y": 162.7855793977353}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189452640, "virtual_time_s": 3091.553832, "measure_result": "direction", "svd_deg": 81.43}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789189452653, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0111", "position": {"x": -1311.8305138416813, "y": 658.15206078786}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189452653, "virtual_time_s": 3196.817604, "measure_result": "direction", "svd_deg": 75.42}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789189452661, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0112", "position": {"x": -1307.13985268207, "y": 667.5780131365971}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189452661, "virtual_time_s": 3203.923319, "measure_result": "direction", "svd_deg": 81.36}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789189452662, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0113", "position": {"x": -1303.840749063616, "y": 689.4060288875694}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189452662, "virtual_time_s": 3213.338504, "clear_result": "success"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789189452778, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0114", "position": {"x": -1139.1012420873221, "y": 608.4503439235888}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189452778, "virtual_time_s": 3256.049771, "measure_result": "direction", "svd_deg": 54.73}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789189452791, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0115", "position": {"x": -954.1683071973606, "y": 876.1751568341149}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189452791, "virtual_time_s": 3326.127191, "measure_result": "direction", "svd_deg": 55.87}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789189452799, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0116", "position": {"x": -949.2334851322893, "y": 888.554211436556}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189452799, "virtual_time_s": 3333.792475, "measure_result": "direction", "svd_deg": 49.26}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789189452800, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0117", "position": {"x": -931.7385242833589, "y": 909.1190705343273}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189452800, "virtual_time_s": 3344.192427, "clear_result": "success"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789189452801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0118", "position": {"x": -1200.0, "y": 700.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189452801, "virtual_time_s": 3418.220364, "measure_result": "no_signal"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789189452802, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0119", "position": {"x": -1200.0, "y": 700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189452802, "virtual_time_s": 3424.220364, "measure_result": "no_signal"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789189452802, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0120", "position": {"x": -1200.0, "y": 700.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189452802, "virtual_time_s": 3430.220364, "measure_result": "no_signal"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789189452803, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0121", "position": {"x": -1200.0, "y": 700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189452803, "virtual_time_s": 3436.220364, "measure_result": "no_signal"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789189452803, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0122", "position": {"x": -1200.0, "y": 700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189452803, "virtual_time_s": 3442.220364, "measure_result": "no_signal"}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789189452804, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0123", "position": {"x": -1200.0, "y": 700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189452804, "virtual_time_s": 3448.220364, "measure_result": "direction", "svd_deg": 268.58}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789189452834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0124", "position": {"x": -1200.0, "y": 700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189452834, "virtual_time_s": 3454.220364, "measure_result": "no_signal"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789189452835, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0125", "position": {"x": -1200.0, "y": 700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189452835, "virtual_time_s": 3460.220364, "measure_result": "no_signal"}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789189452836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0126", "position": {"x": -1200.0, "y": 700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189452836, "virtual_time_s": 3466.220364, "measure_result": "no_signal"}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789189452946, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0127", "position": {"x": -1219.0135052658925, "y": 325.16968641154904}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189452946, "virtual_time_s": 3547.282812, "measure_result": "no_signal"}} +{"event": "action", "seq": 128, "wall_ts_ms": 1789189453061, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0128", "position": {"x": -1484.2289758130723, "y": 215.31384155974501}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189453061, "virtual_time_s": 3609.696243, "measure_result": "direction", "svd_deg": 48.71}} +{"event": "action", "seq": 129, "wall_ts_ms": 1789189453062, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0129", "position": {"x": -1204.3713975152914, "y": 534.3387009500723}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189453062, "virtual_time_s": 3699.571946, "clear_result": "success"}} +{"event": "action", "seq": 130, "wall_ts_ms": 1789189453063, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0130", "position": {"x": -1800.0, "y": 400.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453063, "virtual_time_s": 3827.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 131, "wall_ts_ms": 1789189453064, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0131", "position": {"x": -1800.0, "y": 400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453064, "virtual_time_s": 3833.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 132, "wall_ts_ms": 1789189453064, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0132", "position": {"x": -1800.0, "y": 400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453064, "virtual_time_s": 3839.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 133, "wall_ts_ms": 1789189453065, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0133", "position": {"x": -1800.0, "y": 400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453065, "virtual_time_s": 3845.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 134, "wall_ts_ms": 1789189453066, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0134", "position": {"x": -1800.0, "y": 400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453066, "virtual_time_s": 3851.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 135, "wall_ts_ms": 1789189453066, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0135", "position": {"x": -1800.0, "y": 400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453066, "virtual_time_s": 3857.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 136, "wall_ts_ms": 1789189453067, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0136", "position": {"x": -1800.0, "y": 400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453067, "virtual_time_s": 3863.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 137, "wall_ts_ms": 1789189453067, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0137", "position": {"x": -1800.0, "y": 400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453067, "virtual_time_s": 3869.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 138, "wall_ts_ms": 1789189453068, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0138", "position": {"x": -1800.0, "y": -300.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453068, "virtual_time_s": 4014.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 139, "wall_ts_ms": 1789189453069, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0139", "position": {"x": -1800.0, "y": -300.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453069, "virtual_time_s": 4020.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 140, "wall_ts_ms": 1789189453069, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0140", "position": {"x": -1800.0, "y": -300.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453069, "virtual_time_s": 4026.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 141, "wall_ts_ms": 1789189453070, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0141", "position": {"x": -1800.0, "y": -300.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453070, "virtual_time_s": 4032.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 142, "wall_ts_ms": 1789189453071, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0142", "position": {"x": -1800.0, "y": -300.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453071, "virtual_time_s": 4038.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 143, "wall_ts_ms": 1789189453071, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0143", "position": {"x": -1800.0, "y": -300.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453071, "virtual_time_s": 4044.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 144, "wall_ts_ms": 1789189453072, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0144", "position": {"x": -1800.0, "y": -300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453072, "virtual_time_s": 4050.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 145, "wall_ts_ms": 1789189453072, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0145", "position": {"x": -1800.0, "y": -300.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453072, "virtual_time_s": 4056.689974, "measure_result": "no_signal"}} +{"event": "action", "seq": 146, "wall_ts_ms": 1789189453073, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0146", "position": {"x": -1700.0, "y": -500.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453073, "virtual_time_s": 4106.411334, "measure_result": "no_signal"}} +{"event": "action", "seq": 147, "wall_ts_ms": 1789189453074, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0147", "position": {"x": -1700.0, "y": -500.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453074, "virtual_time_s": 4112.411334, "measure_result": "no_signal"}} +{"event": "action", "seq": 148, "wall_ts_ms": 1789189453074, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0148", "position": {"x": -1700.0, "y": -500.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453074, "virtual_time_s": 4118.411334, "measure_result": "no_signal"}} +{"event": "action", "seq": 149, "wall_ts_ms": 1789189453075, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0149", "position": {"x": -1700.0, "y": -500.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453075, "virtual_time_s": 4124.411334, "measure_result": "no_signal"}} +{"event": "action", "seq": 150, "wall_ts_ms": 1789189453076, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0150", "position": {"x": -1700.0, "y": -500.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453076, "virtual_time_s": 4130.411334, "measure_result": "no_signal"}} +{"event": "action", "seq": 151, "wall_ts_ms": 1789189453076, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0151", "position": {"x": -1700.0, "y": -500.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453076, "virtual_time_s": 4136.411334, "measure_result": "no_signal"}} +{"event": "action", "seq": 152, "wall_ts_ms": 1789189453077, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0152", "position": {"x": -1700.0, "y": -500.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453077, "virtual_time_s": 4142.411334, "measure_result": "no_signal"}} +{"event": "action", "seq": 153, "wall_ts_ms": 1789189453077, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0153", "position": {"x": -1700.0, "y": -500.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453077, "virtual_time_s": 4148.411334, "measure_result": "no_signal"}} +{"event": "action", "seq": 154, "wall_ts_ms": 1789189453078, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0154", "position": {"x": -1500.0, "y": -1300.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453078, "virtual_time_s": 4318.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 155, "wall_ts_ms": 1789189453079, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0155", "position": {"x": -1500.0, "y": -1300.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453079, "virtual_time_s": 4324.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 156, "wall_ts_ms": 1789189453079, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0156", "position": {"x": -1500.0, "y": -1300.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453079, "virtual_time_s": 4330.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 157, "wall_ts_ms": 1789189453080, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0157", "position": {"x": -1500.0, "y": -1300.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453080, "virtual_time_s": 4336.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 158, "wall_ts_ms": 1789189453081, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0158", "position": {"x": -1500.0, "y": -1300.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453081, "virtual_time_s": 4342.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 159, "wall_ts_ms": 1789189453081, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0159", "position": {"x": -1500.0, "y": -1300.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453081, "virtual_time_s": 4348.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 160, "wall_ts_ms": 1789189453082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0160", "position": {"x": -1500.0, "y": -1300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453082, "virtual_time_s": 4354.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 161, "wall_ts_ms": 1789189453082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0161", "position": {"x": -1500.0, "y": -1300.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453082, "virtual_time_s": 4360.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 162, "wall_ts_ms": 1789189453083, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0162", "position": {"x": -900.0, "y": -2100.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453083, "virtual_time_s": 4565.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 163, "wall_ts_ms": 1789189453083, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0163", "position": {"x": -900.0, "y": -2100.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453083, "virtual_time_s": 4571.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 164, "wall_ts_ms": 1789189453084, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0164", "position": {"x": -900.0, "y": -2100.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453084, "virtual_time_s": 4577.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 165, "wall_ts_ms": 1789189453084, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0165", "position": {"x": -900.0, "y": -2100.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453084, "virtual_time_s": 4583.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 166, "wall_ts_ms": 1789189453085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0166", "position": {"x": -900.0, "y": -2100.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453085, "virtual_time_s": 4589.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 167, "wall_ts_ms": 1789189453085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0167", "position": {"x": -900.0, "y": -2100.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453085, "virtual_time_s": 4595.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 168, "wall_ts_ms": 1789189453086, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0168", "position": {"x": -900.0, "y": -2100.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453086, "virtual_time_s": 4601.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 169, "wall_ts_ms": 1789189453086, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0169", "position": {"x": -900.0, "y": -2100.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453086, "virtual_time_s": 4607.335559, "measure_result": "no_signal"}} +{"event": "action", "seq": 170, "wall_ts_ms": 1789189453087, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0170", "position": {"x": -400.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453087, "virtual_time_s": 4728.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 171, "wall_ts_ms": 1789189453088, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0171", "position": {"x": -400.0, "y": -1800.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453088, "virtual_time_s": 4734.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 172, "wall_ts_ms": 1789189453091, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0172", "position": {"x": -400.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453091, "virtual_time_s": 4740.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 173, "wall_ts_ms": 1789189453092, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0173", "position": {"x": -400.0, "y": -1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453091, "virtual_time_s": 4746.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 174, "wall_ts_ms": 1789189453092, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0174", "position": {"x": -400.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453092, "virtual_time_s": 4752.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 175, "wall_ts_ms": 1789189453093, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0175", "position": {"x": -400.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453093, "virtual_time_s": 4758.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 176, "wall_ts_ms": 1789189453093, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0176", "position": {"x": -400.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453093, "virtual_time_s": 4764.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 177, "wall_ts_ms": 1789189453094, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0177", "position": {"x": -400.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453094, "virtual_time_s": 4770.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 178, "wall_ts_ms": 1789189453094, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0178", "position": {"x": 500.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453094, "virtual_time_s": 4955.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 179, "wall_ts_ms": 1789189453095, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0179", "position": {"x": 500.0, "y": -1800.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453095, "virtual_time_s": 4961.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 180, "wall_ts_ms": 1789189453095, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0180", "position": {"x": 500.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453095, "virtual_time_s": 4967.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 181, "wall_ts_ms": 1789189453096, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0181", "position": {"x": 500.0, "y": -1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453096, "virtual_time_s": 4973.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 182, "wall_ts_ms": 1789189453097, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0182", "position": {"x": 500.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453096, "virtual_time_s": 4979.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 183, "wall_ts_ms": 1789189453097, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0183", "position": {"x": 500.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453097, "virtual_time_s": 4985.954597, "measure_result": "direction", "svd_deg": 86.59}} +{"event": "action", "seq": 184, "wall_ts_ms": 1789189453126, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0184", "position": {"x": 500.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453126, "virtual_time_s": 4991.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 185, "wall_ts_ms": 1789189453126, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0185", "position": {"x": 500.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453126, "virtual_time_s": 4997.954597, "measure_result": "no_signal"}} +{"event": "action", "seq": 186, "wall_ts_ms": 1789189453235, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0186", "position": {"x": 547.2504712322657, "y": -1372.6069292786067}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453235, "virtual_time_s": 5089.954003, "measure_result": "no_signal"}} +{"event": "action", "seq": 187, "wall_ts_ms": 1789189453344, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0187", "position": {"x": 294.69024782489475, "y": -1267.9930594272948}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453344, "virtual_time_s": 5149.627846, "measure_result": "no_signal"}} +{"event": "action", "seq": 188, "wall_ts_ms": 1789189453452, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0188", "position": {"x": 799.8106946396367, "y": -1267.9930594272948}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453452, "virtual_time_s": 5255.651935, "measure_result": "no_signal"}} +{"event": "action", "seq": 189, "wall_ts_ms": 1789189453564, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0189", "position": {"x": 547.2504712322657, "y": -1729.7810225372896}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453564, "virtual_time_s": 5365.920124, "measure_result": "direction", "svd_deg": 108.55}} +{"event": "action", "seq": 190, "wall_ts_ms": 1789189453566, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0190", "position": {"x": 510.5172628329734, "y": -1619.568380305735}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189453566, "virtual_time_s": 5394.154715, "clear_result": "success"}} +{"event": "action", "seq": 191, "wall_ts_ms": 1789189453567, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0191", "position": {"x": 1400.0, "y": -1400.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453567, "virtual_time_s": 5583.391154, "measure_result": "no_signal"}} +{"event": "action", "seq": 192, "wall_ts_ms": 1789189453568, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0192", "position": {"x": 1400.0, "y": -1400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453568, "virtual_time_s": 5589.391154, "measure_result": "no_signal"}} +{"event": "action", "seq": 193, "wall_ts_ms": 1789189453568, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0193", "position": {"x": 1400.0, "y": -1400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453568, "virtual_time_s": 5595.391154, "measure_result": "no_signal"}} +{"event": "action", "seq": 194, "wall_ts_ms": 1789189453569, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0194", "position": {"x": 1400.0, "y": -1400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453569, "virtual_time_s": 5601.391154, "measure_result": "no_signal"}} +{"event": "action", "seq": 195, "wall_ts_ms": 1789189453569, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0195", "position": {"x": 1400.0, "y": -1400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453569, "virtual_time_s": 5607.391154, "measure_result": "no_signal"}} +{"event": "action", "seq": 196, "wall_ts_ms": 1789189453570, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0196", "position": {"x": 1400.0, "y": -1400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453570, "virtual_time_s": 5613.391154, "measure_result": "no_signal"}} +{"event": "action", "seq": 197, "wall_ts_ms": 1789189453570, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0197", "position": {"x": 1400.0, "y": -1400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453570, "virtual_time_s": 5619.391154, "measure_result": "no_signal"}} +{"event": "action", "seq": 198, "wall_ts_ms": 1789189453571, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0198", "position": {"x": 1900.0, "y": -900.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453571, "virtual_time_s": 5765.81251, "measure_result": "no_signal"}} +{"event": "action", "seq": 199, "wall_ts_ms": 1789189453572, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0199", "position": {"x": 1900.0, "y": -900.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453572, "virtual_time_s": 5771.81251, "measure_result": "no_signal"}} +{"event": "action", "seq": 200, "wall_ts_ms": 1789189453572, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0200", "position": {"x": 1900.0, "y": -900.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453572, "virtual_time_s": 5777.81251, "measure_result": "no_signal"}} +{"event": "action", "seq": 201, "wall_ts_ms": 1789189453573, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0201", "position": {"x": 1900.0, "y": -900.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453573, "virtual_time_s": 5783.81251, "measure_result": "no_signal"}} +{"event": "action", "seq": 202, "wall_ts_ms": 1789189453574, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0202", "position": {"x": 1900.0, "y": -900.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453574, "virtual_time_s": 5789.81251, "measure_result": "direction", "svd_deg": 130.59}} +{"event": "action", "seq": 203, "wall_ts_ms": 1789189453601, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0203", "position": {"x": 1900.0, "y": -900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453601, "virtual_time_s": 5795.81251, "measure_result": "no_signal"}} +{"event": "action", "seq": 204, "wall_ts_ms": 1789189453602, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0204", "position": {"x": 1900.0, "y": -900.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453602, "virtual_time_s": 5801.81251, "measure_result": "no_signal"}} +{"event": "action", "seq": 205, "wall_ts_ms": 1789189453701, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0205", "position": {"x": 1509.4685178421228, "y": -410.0179138815235}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453701, "virtual_time_s": 5933.127678, "measure_result": "direction", "svd_deg": 138.56}} +{"event": "action", "seq": 206, "wall_ts_ms": 1789189453725, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0206", "position": {"x": 1411.8045747483138, "y": -326.0925666228784}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453725, "virtual_time_s": 5963.881676, "measure_result": "direction", "svd_deg": 136.39}} +{"event": "action", "seq": 207, "wall_ts_ms": 1789189453744, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0207", "position": {"x": 1376.4069857896793, "y": -293.91010620466477}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453744, "virtual_time_s": 5978.449748, "measure_result": "direction", "svd_deg": 135.41}} +{"event": "action", "seq": 208, "wall_ts_ms": 1789189453763, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0208", "position": {"x": 1347.4828425224525, "y": -266.5548797763227}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453763, "virtual_time_s": 5991.411945, "measure_result": "direction", "svd_deg": 135.31}} +{"event": "action", "seq": 209, "wall_ts_ms": 1789189453779, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0209", "position": {"x": 1326.9503636329282, "y": -246.81607342538294}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453779, "virtual_time_s": 6002.108271, "measure_result": "direction", "svd_deg": 134.74}} +{"event": "action", "seq": 210, "wall_ts_ms": 1789189453791, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0210", "position": {"x": 1313.4544137118726, "y": -233.74639308580277}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453791, "virtual_time_s": 6010.865702, "measure_result": "direction", "svd_deg": 315.47}} +{"event": "action", "seq": 211, "wall_ts_ms": 1789189453792, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0211", "position": {"x": 1321.8285305987333, "y": -241.82573338423924}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189453792, "virtual_time_s": 6018.192946, "clear_result": "success"}} +{"event": "action", "seq": 212, "wall_ts_ms": 1789189453793, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0212", "position": {"x": 1200.0, "y": -700.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453793, "virtual_time_s": 6119.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 213, "wall_ts_ms": 1789189453794, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0213", "position": {"x": 1200.0, "y": -700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453794, "virtual_time_s": 6125.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 214, "wall_ts_ms": 1789189453794, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0214", "position": {"x": 1200.0, "y": -700.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453794, "virtual_time_s": 6131.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 215, "wall_ts_ms": 1789189453795, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0215", "position": {"x": 1200.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453795, "virtual_time_s": 6137.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 216, "wall_ts_ms": 1789189453795, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0216", "position": {"x": 1200.0, "y": -700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453795, "virtual_time_s": 6143.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 217, "wall_ts_ms": 1789189453796, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0217", "position": {"x": 1200.0, "y": -700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453796, "virtual_time_s": 6149.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 218, "wall_ts_ms": 1789189453797, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0218", "position": {"x": 900.0, "y": -700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453797, "virtual_time_s": 6214.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 219, "wall_ts_ms": 1789189453797, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0219", "position": {"x": 900.0, "y": -700.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453797, "virtual_time_s": 6220.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 220, "wall_ts_ms": 1789189453798, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0220", "position": {"x": 900.0, "y": -700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453798, "virtual_time_s": 6226.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 221, "wall_ts_ms": 1789189453798, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0221", "position": {"x": 900.0, "y": -700.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453798, "virtual_time_s": 6232.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 222, "wall_ts_ms": 1789189453799, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0222", "position": {"x": 900.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453799, "virtual_time_s": 6238.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 223, "wall_ts_ms": 1789189453799, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0223", "position": {"x": 900.0, "y": -700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453799, "virtual_time_s": 6244.0119, "measure_result": "no_signal"}} +{"event": "action", "seq": 224, "wall_ts_ms": 1789189453800, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0224", "position": {"x": 800.0, "y": 200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189453800, "virtual_time_s": 6430.119603, "measure_result": "no_signal"}} +{"event": "action", "seq": 225, "wall_ts_ms": 1789189453801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0225", "position": {"x": 800.0, "y": 200.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189453800, "virtual_time_s": 6436.119603, "measure_result": "no_signal"}} +{"event": "action", "seq": 226, "wall_ts_ms": 1789189453801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0226", "position": {"x": 800.0, "y": 200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189453801, "virtual_time_s": 6442.119603, "measure_result": "no_signal"}} +{"event": "action", "seq": 227, "wall_ts_ms": 1789189453802, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0227", "position": {"x": 800.0, "y": 200.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453802, "virtual_time_s": 6448.119603, "measure_result": "direction", "svd_deg": 19.32}} +{"event": "action", "seq": 228, "wall_ts_ms": 1789189453835, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0228", "position": {"x": 800.0, "y": 200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189453835, "virtual_time_s": 6454.119603, "measure_result": "no_signal"}} +{"event": "action", "seq": 229, "wall_ts_ms": 1789189453836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0229", "position": {"x": 800.0, "y": 200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189453836, "virtual_time_s": 6460.119603, "measure_result": "no_signal"}} +{"event": "action", "seq": 230, "wall_ts_ms": 1789189453910, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0230", "position": {"x": 1014.089412160458, "y": 369.88003190425724}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453910, "virtual_time_s": 6520.779827, "measure_result": "direction", "svd_deg": 11.22}} +{"event": "action", "seq": 231, "wall_ts_ms": 1789189453939, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0231", "position": {"x": 1548.1634584617175, "y": 481.3059244733561}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453939, "virtual_time_s": 6634.894595, "measure_result": "direction", "svd_deg": 9.82}} +{"event": "action", "seq": 232, "wall_ts_ms": 1789189453966, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0232", "position": {"x": 1606.858386985546, "y": 496.64685988805184}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453966, "virtual_time_s": 6652.027919, "measure_result": "direction", "svd_deg": 6.13}} +{"event": "action", "seq": 233, "wall_ts_ms": 1789189453993, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0233", "position": {"x": 1667.0936147470672, "y": 504.6307234052089}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189453993, "virtual_time_s": 6669.180326, "measure_result": "direction", "svd_deg": 6.19}} +{"event": "action", "seq": 234, "wall_ts_ms": 1789189454002, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0234", "position": {"x": 1691.5109058983671, "y": 507.9012173666711}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189454002, "virtual_time_s": 6679.107395, "measure_result": "direction", "svd_deg": 4.62}} +{"event": "action", "seq": 235, "wall_ts_ms": 1789189454003, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0235", "position": {"x": 1714.1898929780891, "y": 509.33401923722147}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189454003, "virtual_time_s": 6688.652235, "clear_result": "success"}} +{"event": "action", "seq": 236, "wall_ts_ms": 1789189454004, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0236", "position": {"x": 1800.0, "y": 300.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189454004, "virtual_time_s": 6739.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 237, "wall_ts_ms": 1789189454005, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0237", "position": {"x": 1800.0, "y": 300.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189454005, "virtual_time_s": 6745.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 238, "wall_ts_ms": 1789189454005, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0238", "position": {"x": 1800.0, "y": 300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189454005, "virtual_time_s": 6751.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 239, "wall_ts_ms": 1789189454006, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0239", "position": {"x": 1800.0, "y": 300.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189454006, "virtual_time_s": 6757.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 240, "wall_ts_ms": 1789189454006, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0240", "position": {"x": 1800.0, "y": 300.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189454006, "virtual_time_s": 6763.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 241, "wall_ts_ms": 1789189454007, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0241", "position": {"x": 1800.0, "y": -400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189454007, "virtual_time_s": 6908.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 242, "wall_ts_ms": 1789189454008, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0242", "position": {"x": 1800.0, "y": -400.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189454008, "virtual_time_s": 6914.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 243, "wall_ts_ms": 1789189454008, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0243", "position": {"x": 1800.0, "y": -400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189454008, "virtual_time_s": 6920.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 244, "wall_ts_ms": 1789189454009, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0244", "position": {"x": 1800.0, "y": -400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189454009, "virtual_time_s": 6926.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 245, "wall_ts_ms": 1789189454009, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0245", "position": {"x": 1800.0, "y": -400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189454009, "virtual_time_s": 6932.900044, "measure_result": "no_signal"}} +{"event": "action", "seq": 246, "wall_ts_ms": 1789189454010, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0246", "position": {"x": 700.0, "y": 700.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189454010, "virtual_time_s": 7249.027028, "measure_result": "direction", "svd_deg": 74.76}} +{"event": "action", "seq": 247, "wall_ts_ms": 1789189454043, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0247", "position": {"x": 700.0, "y": 700.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189454043, "virtual_time_s": 7255.027028, "measure_result": "no_signal"}} +{"event": "action", "seq": 248, "wall_ts_ms": 1789189454044, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0248", "position": {"x": 700.0, "y": 700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189454044, "virtual_time_s": 7261.027028, "measure_result": "no_signal"}} +{"event": "action", "seq": 249, "wall_ts_ms": 1789189454048, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0249", "position": {"x": 700.0, "y": 700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189454048, "virtual_time_s": 7267.027028, "measure_result": "no_signal"}} +{"event": "action", "seq": 250, "wall_ts_ms": 1789189454049, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0250", "position": {"x": 700.0, "y": 700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189454049, "virtual_time_s": 7273.027028, "measure_result": "no_signal"}} +{"event": "action", "seq": 251, "wall_ts_ms": 1789189454124, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0251", "position": {"x": 807.7977342012825, "y": 905.7302424325104}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189454124, "virtual_time_s": 7325.479276, "measure_result": "direction", "svd_deg": 80.0}} +{"event": "action", "seq": 252, "wall_ts_ms": 1789189454158, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0252", "position": {"x": 890.1553019837165, "y": 1335.3038526376977}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189454158, "virtual_time_s": 7417.958703, "measure_result": "direction", "svd_deg": 79.35}} +{"event": "action", "seq": 253, "wall_ts_ms": 1789189454177, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0253", "position": {"x": 911.4200412844574, "y": 1418.0252351235247}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189454177, "virtual_time_s": 7440.040876, "measure_result": "direction", "svd_deg": 82.87}} +{"event": "action", "seq": 254, "wall_ts_ms": 1789189454192, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0254", "position": {"x": 920.9846176001406, "y": 1463.601846969937}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189454192, "virtual_time_s": 7454.354755, "measure_result": "direction", "svd_deg": 88.48}} +{"event": "action", "seq": 255, "wall_ts_ms": 1789189454205, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0255", "position": {"x": 922.6797741841672, "y": 1500.5012981744692}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189454205, "virtual_time_s": 7466.742429, "measure_result": "direction", "svd_deg": 91.46}} +{"event": "action", "seq": 256, "wall_ts_ms": 1789189454206, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0256", "position": {"x": 922.5799864065177, "y": 1511.3430361312505}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189454206, "virtual_time_s": 7473.910868, "clear_result": "success"}} +{"event": "action", "seq": 257, "wall_ts_ms": 1789189454207, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ec1932a3b807-0257"}, "response": {"accepted": true, "real_timestamp_ms": 1789189454207, "virtual_time_s": 7473.910868, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 7473.910868, "real_elapsed_s": 26.306641, "request_count": 257, "cleared_count": 16} diff --git a/referee-data/sessions/JYCW-VMN7-W4Z8-FDDR/meta.json b/referee-data/sessions/JYCW-VMN7-W4Z8-FDDR/meta.json new file mode 100644 index 0000000..1df8c57 --- /dev/null +++ b/referee-data/sessions/JYCW-VMN7-W4Z8-FDDR/meta.json @@ -0,0 +1,136 @@ +{ + "case_code": "JYCW-VMN7-W4Z8-FDDR", + "module": "q4_practice", + "robot_id": "1", + "seed": 1136651233, + "truth": [ + { + "channel": 12, + "x": -1202.6905196007817, + "y": 532.6019870005632, + "r_eff_m": 1176.3155025395015, + "directional": true, + "heading_deg": 138.77466967489136 + }, + { + "channel": 11, + "x": 512.8383589621155, + "y": -1628.8985674968442, + "r_eff_m": 1405.807107356282, + "directional": true, + "heading_deg": 287.47595701099374 + }, + { + "channel": 13, + "x": -395.00492565279814, + "y": -1579.6362069307759, + "r_eff_m": 1390.5647746374957, + "directional": true, + "heading_deg": 330.69307033879033 + }, + { + "channel": 3, + "x": -64.76572458073815, + "y": 1129.246650053679, + "r_eff_m": 1202.4707717536946, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 5, + "x": 695.0335185097014, + "y": -1095.5846338563172, + "r_eff_m": 1268.8339197132543, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": 739.3795158281649, + "y": -1337.9506177103044, + "r_eff_m": 1088.8459529706615, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": -60.404526398522606, + "y": -1175.6982128851098, + "r_eff_m": 1120.724982155038, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": -1278.6393704932552, + "y": 608.6781413295402, + "r_eff_m": 1466.2308885782784, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": 1321.5883393834322, + "y": -241.52896288885367, + "r_eff_m": 1006.5938404345096, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": -1303.3510110751201, + "y": 692.8017295346029, + "r_eff_m": 1159.941227703783, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 14, + "x": -932.5165422011986, + "y": 907.4724153747146, + "r_eff_m": 1216.0652243761767, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": -1543.3569666083235, + "y": 917.0489930454934, + "r_eff_m": 1417.422441038484, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": 337.2030502936078, + "y": -666.6368556619858, + "r_eff_m": 1068.6367095663993, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": 1715.3023013911206, + "y": 509.64586592845404, + "r_eff_m": 1221.452552834075, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": -298.4445285961911, + "y": -1288.3036519132675, + "r_eff_m": 1098.2048203547604, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 18, + "x": 922.1552059510833, + "y": 1514.1251033773742, + "r_eff_m": 1317.4958824858843, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/LBKP-3SJK-DEB6-EAVB/log.jsonl b/referee-data/sessions/LBKP-3SJK-DEB6-EAVB/log.jsonl new file mode 100644 index 0000000..340077d --- /dev/null +++ b/referee-data/sessions/LBKP-3SJK-DEB6-EAVB/log.jsonl @@ -0,0 +1,130 @@ +{"event": "session_start", "case_code": "LBKP-3SJK-DEB6-EAVB", "module": "q3_practice", "robot_id": "1", "seed": 1847000615, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 5, "x": 85.08720632750632, "y": -242.39995707936063, "r_eff_m": 1388.8268871910968, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": 541.1644728013711, "y": 609.1550046714676, "r_eff_m": 1167.8668327413895, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": 462.6325017185848, "y": -1113.7535234243655, "r_eff_m": 1325.520154019888, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": 21.545300243005844, "y": -1456.5574095845639, "r_eff_m": 1200.8112837922881, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": -1656.521759830839, "y": 453.1018677510036, "r_eff_m": 1427.2287951323785, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": -903.6786650268884, "y": 417.97032036715177, "r_eff_m": 1376.6389883453558, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": 1128.1993727896672, "y": -1313.3170676513018, "r_eff_m": 1395.2536018926182, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": 364.36723243992236, "y": -455.8565724170913, "r_eff_m": 1341.8764438172927, "directional": false, "heading_deg": 0.0}, {"channel": 3, "x": -655.6811646636072, "y": -828.5611577311319, "r_eff_m": 1481.705956873556, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": 1610.374402056594, "y": 60.38579599168508, "r_eff_m": 1044.1523023771226, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": -890.9732714189884, "y": 1183.3557845474193, "r_eff_m": 1230.256803809429, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789194538470, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789194538470, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789194538476, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194538476, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789194538479, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789194538479, "virtual_time_s": 11.0, "measure_result": "direction", "svd_deg": 292.58}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789194538505, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194538505, "virtual_time_s": 17.0, "measure_result": "direction", "svd_deg": 232.51}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789194538531, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789194538531, "virtual_time_s": 23.0, "measure_result": "direction", "svd_deg": 47.39}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789194538556, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194538556, "virtual_time_s": 29.0, "measure_result": "direction", "svd_deg": 289.25}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789194538581, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194538581, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789194538585, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194538585, "virtual_time_s": 41.0, "measure_result": "direction", "svd_deg": 155.56}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789194538611, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194538611, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789194538617, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194538617, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789194538621, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789194538621, "virtual_time_s": 59.0, "measure_result": "direction", "svd_deg": 307.8}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789194538647, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194538647, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789194538650, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194538650, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789194538654, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194538654, "virtual_time_s": 77.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789194538657, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194538657, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789194538661, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194538661, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789194538664, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194538664, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789194538668, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194538668, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789194538671, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194538671, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789194538675, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194538675, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789194538679, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194538679, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789194538700, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0022", "position": {"x": -408.190835311235, "y": -414.22178159595876}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194538700, "virtual_time_s": 241.309835, "measure_result": "direction", "svd_deg": 238.89}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789194538711, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0023", "position": {"x": -678.7133102995605, "y": -704.269811844781}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194538711, "virtual_time_s": 325.634552, "measure_result": "direction", "svd_deg": 280.45}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789194538712, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0024", "position": {"x": -656.9685667049622, "y": -822.9654239699405}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194538712, "virtual_time_s": 354.768745, "clear_result": "success"}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789194538721, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0025", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194538721, "virtual_time_s": 400.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789194538723, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0026", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194538723, "virtual_time_s": 406.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789194538726, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0027", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194538726, "virtual_time_s": 412.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789194538728, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0028", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194538728, "virtual_time_s": 418.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789194538731, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0029", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194538731, "virtual_time_s": 424.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789194538733, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0030", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194538733, "virtual_time_s": 430.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789194538736, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0031", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194538736, "virtual_time_s": 436.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789194538738, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0032", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194538738, "virtual_time_s": 442.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789194538741, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0033", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194538741, "virtual_time_s": 448.18461, "measure_result": "direction", "svd_deg": 323.09000000000003}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789194538756, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0034", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194538756, "virtual_time_s": 454.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789194538759, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0035", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194538759, "virtual_time_s": 460.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789194538761, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0036", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194538761, "virtual_time_s": 466.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789194538764, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0037", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194538764, "virtual_time_s": 472.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789194538766, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0038", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194538766, "virtual_time_s": 478.18461, "measure_result": "no_signal"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789194538781, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0039", "position": {"x": -106.63671356352035, "y": -1232.136024827806}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194538781, "virtual_time_s": 589.222994, "measure_result": "direction", "svd_deg": 300.35}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789194538792, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0040", "position": {"x": 29.423278723824737, "y": -1462.9182634545405}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194538792, "virtual_time_s": 647.803872, "measure_result": "direction", "svd_deg": 141.75}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789194538792, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0041", "position": {"x": 29.423278723824737, "y": -1462.9182634545405}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194538792, "virtual_time_s": 652.803872, "clear_result": "success"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789194538801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0042", "position": {"x": 208.00944574641397, "y": -929.8427414286421}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789194538801, "virtual_time_s": 771.24275, "measure_result": "direction", "svd_deg": 323.82}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789194538803, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0043", "position": {"x": 208.00944574641397, "y": -929.8427414286421}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194538803, "virtual_time_s": 777.24275, "measure_result": "direction", "svd_deg": 99.25}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789194538804, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0044", "position": {"x": 208.00944574641397, "y": -929.8427414286421}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789194538804, "virtual_time_s": 783.24275, "measure_result": "direction", "svd_deg": 71.18}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789194538811, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0045", "position": {"x": 466.67103666996667, "y": -1120.109636731759}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789194538811, "virtual_time_s": 853.463404, "measure_result": "direction", "svd_deg": 121.55}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789194538812, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0046", "position": {"x": 466.67103666996667, "y": -1120.109636731759}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789194538812, "virtual_time_s": 858.463404, "clear_result": "success"}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789194538819, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0047", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194538819, "virtual_time_s": 896.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789194538821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0048", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194538821, "virtual_time_s": 902.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789194538823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0049", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194538823, "virtual_time_s": 908.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789194538825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0050", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194538825, "virtual_time_s": 914.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789194538827, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0051", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194538827, "virtual_time_s": 920.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789194538829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0052", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194538829, "virtual_time_s": 926.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789194538831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0053", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194538831, "virtual_time_s": 932.845177, "measure_result": "direction", "svd_deg": 330.43}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789194538844, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0054", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194538844, "virtual_time_s": 938.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789194538846, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0055", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194538846, "virtual_time_s": 944.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789194538848, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0056", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194538848, "virtual_time_s": 950.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789194538850, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0057", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194538850, "virtual_time_s": 956.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789194538852, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0058", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194538852, "virtual_time_s": 962.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789194538854, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0059", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194538854, "virtual_time_s": 968.845177, "measure_result": "no_signal"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789194538856, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0060", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194538856, "virtual_time_s": 974.845177, "measure_result": "direction", "svd_deg": 123.26}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789194538865, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0061", "position": {"x": 889.8546912996467, "y": -1173.104123129166}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194538865, "virtual_time_s": 1051.439151, "measure_result": "direction", "svd_deg": 330.08}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789194538872, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0062", "position": {"x": 1043.995375474022, "y": -1258.2470111423797}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194538872, "virtual_time_s": 1091.657704, "measure_result": "direction", "svd_deg": 326.97}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789194538879, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0063", "position": {"x": 1117.3157010998352, "y": -1304.10713132145}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194538879, "virtual_time_s": 1113.95397, "measure_result": "direction", "svd_deg": 320.75}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789194538880, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0064", "position": {"x": 1130.6582603023378, "y": -1314.6236690247401}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194538880, "virtual_time_s": 1122.351743, "clear_result": "success"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789194538886, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0065", "position": {"x": 364.33336761785904, "y": -470.18445091353146}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789194538886, "virtual_time_s": 1356.415895, "measure_result": "direction", "svd_deg": 90.01}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789194538887, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0066", "position": {"x": 364.33336761785904, "y": -470.18445091353146}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789194538887, "virtual_time_s": 1361.415895, "clear_result": "success"}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789194538888, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0067", "position": {"x": 364.33336761785904, "y": -470.18445091353146}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194538888, "virtual_time_s": 1367.415895, "measure_result": "direction", "svd_deg": 141.33}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789194538892, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0068", "position": {"x": 92.13719868732423, "y": -252.02480747918815}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194538892, "virtual_time_s": 1442.182473, "clear_result": "success"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789194538896, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0069", "position": {"x": 1159.7, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194538896, "virtual_time_s": 1667.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789194538898, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0070", "position": {"x": 1159.7, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194538898, "virtual_time_s": 1673.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789194538900, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0071", "position": {"x": 1159.7, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194538900, "virtual_time_s": 1679.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789194538901, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0072", "position": {"x": 1159.7, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194538901, "virtual_time_s": 1685.564044, "measure_result": "direction", "svd_deg": 8.56}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789194538913, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0073", "position": {"x": 1159.7, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194538913, "virtual_time_s": 1691.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789194538915, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0074", "position": {"x": 1159.7, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194538915, "virtual_time_s": 1697.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789194538917, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0075", "position": {"x": 1159.7, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194538917, "virtual_time_s": 1703.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789194538919, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0076", "position": {"x": 1159.7, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194538919, "virtual_time_s": 1709.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789194538921, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0077", "position": {"x": 1159.7, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194538921, "virtual_time_s": 1715.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789194538923, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0078", "position": {"x": 1159.7, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194538923, "virtual_time_s": 1721.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789194538925, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0079", "position": {"x": 1159.7, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194538925, "virtual_time_s": 1727.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789194538927, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0080", "position": {"x": 1159.7, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194538927, "virtual_time_s": 1733.564044, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789194538934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0081", "position": {"x": 1478.2626847717336, "y": 53.680699854908745}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194538934, "virtual_time_s": 1804.174818, "measure_result": "direction", "svd_deg": 3.35}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789194538939, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0082", "position": {"x": 1579.460700627557, "y": 61.38751630047568}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194538939, "virtual_time_s": 1829.473028, "measure_result": "direction", "svd_deg": 358.8}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789194538944, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0083", "position": {"x": 1600.466675103773, "y": 61.31602445808966}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194538944, "virtual_time_s": 1838.674247, "measure_result": "direction", "svd_deg": 355.09}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789194538945, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0084", "position": {"x": 1600.466675103773, "y": 61.31602445808966}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194538945, "virtual_time_s": 1843.674247, "clear_result": "success"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789194538949, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0085", "position": {"x": 749.467752065697, "y": 487.16382367384676}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789194538949, "virtual_time_s": 2039.994558, "measure_result": "direction", "svd_deg": 149.54}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789194538950, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0086", "position": {"x": 556.2728446286668, "y": 600.4705244681237}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789194538950, "virtual_time_s": 2089.788611, "clear_result": "success"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789194538952, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0087", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194538952, "virtual_time_s": 2176.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789194538954, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0088", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194538954, "virtual_time_s": 2182.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789194538956, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0089", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194538956, "virtual_time_s": 2188.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789194538959, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0090", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194538959, "virtual_time_s": 2194.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789194538962, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0091", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194538962, "virtual_time_s": 2200.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789194538964, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0092", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194538964, "virtual_time_s": 2206.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789194538967, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0093", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194538967, "virtual_time_s": 2212.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789194538969, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0094", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194538969, "virtual_time_s": 2218.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789194538972, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0095", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194538971, "virtual_time_s": 2224.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789194538974, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0096", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194538974, "virtual_time_s": 2230.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789194538976, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0097", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194538976, "virtual_time_s": 2236.697964, "measure_result": "no_signal"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789194538980, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0098", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194538980, "virtual_time_s": 2473.637964, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789194538982, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0099", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194538982, "virtual_time_s": 2479.637964, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789194538984, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0100", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194538984, "virtual_time_s": 2485.637964, "measure_result": "direction", "svd_deg": 207.16}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789194538993, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0101", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194538993, "virtual_time_s": 2491.637964, "measure_result": "direction", "svd_deg": 150.99}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789194539002, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0102", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194539002, "virtual_time_s": 2497.637964, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789194539004, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0103", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194539004, "virtual_time_s": 2503.637964, "measure_result": "no_signal"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789194539006, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0104", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194539006, "virtual_time_s": 2509.637964, "measure_result": "no_signal"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789194539008, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0105", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194539008, "virtual_time_s": 2515.637964, "measure_result": "no_signal"}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789194539010, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0106", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194539010, "virtual_time_s": 2521.637964, "measure_result": "no_signal"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789194539012, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0107", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194539012, "virtual_time_s": 2527.637964, "measure_result": "no_signal"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789194539014, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0108", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194539014, "virtual_time_s": 2533.637964, "measure_result": "no_signal"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789194539021, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0109", "position": {"x": -892.6282199909965, "y": 1170.6718037474172}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194539021, "virtual_time_s": 2610.489901, "measure_result": "direction", "svd_deg": 82.99}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789194539022, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0110", "position": {"x": -892.6282199909965, "y": 1170.6718037474172}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194539022, "virtual_time_s": 2615.489901, "clear_result": "success"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789194539026, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0111", "position": {"x": -1005.9275670106962, "y": 973.9448280885778}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194539026, "virtual_time_s": 2666.893973, "measure_result": "direction", "svd_deg": 218.68}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789194539030, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0112", "position": {"x": -792.4271848585241, "y": 534.4095053536304}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194539030, "virtual_time_s": 2770.622927, "measure_result": "direction", "svd_deg": 225.42}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789194539031, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0113", "position": {"x": -792.4271848585241, "y": 534.4095053536304}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194539031, "virtual_time_s": 2776.622927, "measure_result": "direction", "svd_deg": 185.79}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789194539034, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0114", "position": {"x": -911.5106208733605, "y": 414.06203150286194}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194539034, "virtual_time_s": 2816.484043, "measure_result": "direction", "svd_deg": 26.33}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789194539035, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0115", "position": {"x": -911.5106208733605, "y": 414.06203150286194}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194539035, "virtual_time_s": 2821.484043, "clear_result": "success"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789194539036, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0116", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194539036, "virtual_time_s": 2924.033581, "measure_result": "no_signal"}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789194539038, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0117", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194539038, "virtual_time_s": 2930.033581, "measure_result": "no_signal"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789194539039, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0118", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194539039, "virtual_time_s": 2936.033581, "measure_result": "no_signal"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789194539041, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0119", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194539041, "virtual_time_s": 2942.033581, "measure_result": "no_signal"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789194539042, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0120", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194539042, "virtual_time_s": 2948.033581, "measure_result": "no_signal"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789194539044, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0121", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194539044, "virtual_time_s": 2954.033581, "measure_result": "no_signal"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789194539045, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0122", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194539045, "virtual_time_s": 2960.033581, "measure_result": "no_signal"}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789194539047, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0123", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194539047, "virtual_time_s": 2966.033581, "measure_result": "no_signal"}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789194539048, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0124", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194539048, "virtual_time_s": 2972.033581, "measure_result": "no_signal"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789194539050, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0125", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194539050, "virtual_time_s": 2978.033581, "measure_result": "direction", "svd_deg": 138.36}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789194539052, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0126", "position": {"x": -1663.6824271953378, "y": 447.6868946139401}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194539052, "virtual_time_s": 3117.855218, "measure_result": "direction", "svd_deg": 37.21}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789194539053, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0127", "position": {"x": -1663.6824271953378, "y": 447.6868946139401}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194539053, "virtual_time_s": 3122.855218, "clear_result": "success"}} +{"event": "action", "seq": 128, "wall_ts_ms": 1789194539053, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "cf4f7f6f9c52-0128"}, "response": {"accepted": true, "real_timestamp_ms": 1789194539053, "virtual_time_s": 3122.855218, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3122.855218, "real_elapsed_s": 2.54152, "request_count": 128, "cleared_count": 11} diff --git a/referee-data/sessions/LBKP-3SJK-DEB6-EAVB/meta.json b/referee-data/sessions/LBKP-3SJK-DEB6-EAVB/meta.json new file mode 100644 index 0000000..f472982 --- /dev/null +++ b/referee-data/sessions/LBKP-3SJK-DEB6-EAVB/meta.json @@ -0,0 +1,96 @@ +{ + "case_code": "LBKP-3SJK-DEB6-EAVB", + "module": "q3_practice", + "robot_id": "1", + "seed": 1847000615, + "truth": [ + { + "channel": 5, + "x": 85.08720632750632, + "y": -242.39995707936063, + "r_eff_m": 1388.8268871910968, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": 541.1644728013711, + "y": 609.1550046714676, + "r_eff_m": 1167.8668327413895, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": 462.6325017185848, + "y": -1113.7535234243655, + "r_eff_m": 1325.520154019888, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": 21.545300243005844, + "y": -1456.5574095845639, + "r_eff_m": 1200.8112837922881, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": -1656.521759830839, + "y": 453.1018677510036, + "r_eff_m": 1427.2287951323785, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": -903.6786650268884, + "y": 417.97032036715177, + "r_eff_m": 1376.6389883453558, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": 1128.1993727896672, + "y": -1313.3170676513018, + "r_eff_m": 1395.2536018926182, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": 364.36723243992236, + "y": -455.8565724170913, + "r_eff_m": 1341.8764438172927, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 3, + "x": -655.6811646636072, + "y": -828.5611577311319, + "r_eff_m": 1481.705956873556, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": 1610.374402056594, + "y": 60.38579599168508, + "r_eff_m": 1044.1523023771226, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": -890.9732714189884, + "y": 1183.3557845474193, + "r_eff_m": 1230.256803809429, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/LTW7-P3KE-HP6H-MYBZ/log.jsonl b/referee-data/sessions/LTW7-P3KE-HP6H-MYBZ/log.jsonl new file mode 100644 index 0000000..a3f5838 --- /dev/null +++ b/referee-data/sessions/LTW7-P3KE-HP6H-MYBZ/log.jsonl @@ -0,0 +1,114 @@ +{"event": "session_start", "case_code": "LTW7-P3KE-HP6H-MYBZ", "module": "q3_practice", "robot_id": "1", "seed": 2108549265, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 17, "x": 1559.5020098964385, "y": -432.1893014762776, "r_eff_m": 1135.1406333518141, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": -936.4180419478505, "y": -1149.0960258952086, "r_eff_m": 1415.3507389321605, "directional": false, "heading_deg": 0.0}, {"channel": 19, "x": 231.5808417505164, "y": -455.59465719886583, "r_eff_m": 1019.0792837603416, "directional": false, "heading_deg": 0.0}, {"channel": 18, "x": 1227.4318595654365, "y": -1014.085213983558, "r_eff_m": 1068.028819774209, "directional": false, "heading_deg": 0.0}, {"channel": 5, "x": 152.30033036443, "y": 1260.8761109314933, "r_eff_m": 1237.408348460949, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": 1206.8943237464407, "y": -1325.721414203673, "r_eff_m": 1382.0467814654066, "directional": false, "heading_deg": 0.0}, {"channel": 14, "x": -1554.186627417198, "y": 68.11901985373935, "r_eff_m": 1173.6407747955384, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": -635.8496326373523, "y": -1584.0631609028214, "r_eff_m": 1347.952969674949, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": 119.71691243496198, "y": 848.6941442522802, "r_eff_m": 1399.967345445903, "directional": false, "heading_deg": 0.0}, {"channel": 3, "x": 1311.8947272856265, "y": 1142.8930869281076, "r_eff_m": 1374.4382834388919, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": 765.4891684918392, "y": 727.2437575451629, "r_eff_m": 1326.1799186859262, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": -75.43659241833988, "y": -597.1456660933867, "r_eff_m": 1043.3030451783488, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": -311.5392617257707, "y": 1044.7424398578485, "r_eff_m": 1484.9209806414049, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": 707.5093976986224, "y": 207.484763693364, "r_eff_m": 1210.1175591084682, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": 511.50858190853404, "y": -323.6497098562599, "r_eff_m": 1195.8857988717414, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": 1172.1847778827894, "y": 947.1983338762033, "r_eff_m": 1402.741012473061, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789176356010, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789176356010, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789176356019, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176356019, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789176356025, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176356025, "virtual_time_s": 11.0, "measure_result": "direction", "svd_deg": 82.94}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789176356067, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176356067, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789176356089, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176356089, "virtual_time_s": 23.0, "measure_result": "direction", "svd_deg": 327.81}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789176356125, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176356125, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789176356130, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176356130, "virtual_time_s": 35.0, "measure_result": "direction", "svd_deg": 42.96}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789176356157, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176356157, "virtual_time_s": 41.0, "measure_result": "direction", "svd_deg": 263.44}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789176356187, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176356187, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789176356192, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176356192, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789176356197, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176356197, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789176356203, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176356203, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789176356208, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176356208, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789176356213, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176356213, "virtual_time_s": 77.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789176356220, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176356220, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789176356227, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176356227, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789176356234, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176356234, "virtual_time_s": 95.0, "measure_result": "direction", "svd_deg": 15.79}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789176356285, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176356285, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789176356293, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176356293, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789176356301, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176356300, "virtual_time_s": 113.0, "measure_result": "direction", "svd_deg": 297.65999999999997}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789176356352, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176356352, "virtual_time_s": 119.0, "measure_result": "direction", "svd_deg": 107.54}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789176356420, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0022", "position": {"x": -327.0622992838006, "y": -680.5304765252165}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176356420, "virtual_time_s": 276.008805, "measure_result": "direction", "svd_deg": 18.92}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789176356422, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0023", "position": {"x": -72.1697047209798, "y": -592.9087372894932}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789176356422, "virtual_time_s": 334.915318, "clear_result": "success"}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789176356434, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0024", "position": {"x": 171.92557797195036, "y": -840.8967493771845}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176356434, "virtual_time_s": 410.508582, "measure_result": "direction", "svd_deg": 81.68}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789176356447, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0025", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176356447, "virtual_time_s": 504.397751, "measure_result": "no_signal"}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789176356452, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0026", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176356452, "virtual_time_s": 510.397751, "measure_result": "no_signal"}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789176356458, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0027", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176356458, "virtual_time_s": 516.397751, "measure_result": "no_signal"}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789176356461, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0028", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176356461, "virtual_time_s": 522.397751, "measure_result": "no_signal"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789176356466, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0029", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176356465, "virtual_time_s": 528.397751, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789176356470, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0030", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176356470, "virtual_time_s": 534.397751, "measure_result": "direction", "svd_deg": 332.08}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789176356496, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0031", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176356496, "virtual_time_s": 540.397751, "measure_result": "no_signal"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789176356501, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0032", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176356501, "virtual_time_s": 546.397751, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789176356507, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0033", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176356507, "virtual_time_s": 552.397751, "measure_result": "direction", "svd_deg": 205.19}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789176356537, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0034", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176356536, "virtual_time_s": 558.397751, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789176356542, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0035", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176356542, "virtual_time_s": 564.397751, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789176356546, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0036", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176356546, "virtual_time_s": 570.397751, "measure_result": "direction", "svd_deg": 29.87}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789176356573, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0037", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176356573, "virtual_time_s": 576.397751, "measure_result": "direction", "svd_deg": 359.34}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789176356633, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0038", "position": {"x": 715.9894566452763, "y": -1347.7531634392226}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176356633, "virtual_time_s": 656.282432, "measure_result": "direction", "svd_deg": 3.5}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789176356635, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0039", "position": {"x": 715.9894566452763, "y": -1347.7531634392226}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176356635, "virtual_time_s": 662.282432, "measure_result": "direction", "svd_deg": 32.18}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789176356652, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0040", "position": {"x": 1177.1894938960995, "y": -1320.1777629294452}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176356652, "virtual_time_s": 760.687167, "measure_result": "direction", "svd_deg": 349.02}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789176356653, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0041", "position": {"x": 1192.8967579720374, "y": -1322.940311249212}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789176356653, "virtual_time_s": 768.876837, "clear_result": "success"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789176356654, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0042", "position": {"x": 1192.8967579720374, "y": -1322.940311249212}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176356654, "virtual_time_s": 774.876837, "measure_result": "direction", "svd_deg": 83.49}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789176356669, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0043", "position": {"x": 1227.0317115448172, "y": -1024.9750755907535}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789176356669, "virtual_time_s": 839.85966, "clear_result": "success"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789176356670, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0044", "position": {"x": 1227.0317115448172, "y": -1024.9750755907535}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176356670, "virtual_time_s": 845.85966, "measure_result": "direction", "svd_deg": 60.13}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789176356684, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0045", "position": {"x": 1566.090662804638, "y": -436.73276004939805}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176356684, "virtual_time_s": 986.652148, "measure_result": "direction", "svd_deg": 144.9}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789176356685, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0046", "position": {"x": 1566.090662804638, "y": -436.73276004939805}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789176356685, "virtual_time_s": 991.652148, "clear_result": "success"}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789176356698, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0047", "position": {"x": 1159.7, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176356698, "virtual_time_s": 1116.964993, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789176356700, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0048", "position": {"x": 1159.7, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176356700, "virtual_time_s": 1122.964993, "measure_result": "direction", "svd_deg": 83.09}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789176356715, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0049", "position": {"x": 1159.7, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176356715, "virtual_time_s": 1128.964993, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789176356717, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0050", "position": {"x": 1159.7, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176356717, "virtual_time_s": 1134.964993, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789176356719, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0051", "position": {"x": 1159.7, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176356719, "virtual_time_s": 1140.964993, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789176356721, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0052", "position": {"x": 1159.7, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176356721, "virtual_time_s": 1146.964993, "measure_result": "no_signal"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789176356723, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0053", "position": {"x": 1159.7, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176356723, "virtual_time_s": 1152.964993, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789176356725, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0054", "position": {"x": 1159.7, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176356725, "virtual_time_s": 1158.964993, "measure_result": "no_signal"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789176356727, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0055", "position": {"x": 1159.7, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176356727, "virtual_time_s": 1164.964993, "measure_result": "direction", "svd_deg": 89.12}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789176356760, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0056", "position": {"x": 898.5406052143003, "y": 27.299392656872755}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176356760, "virtual_time_s": 1223.481461, "measure_result": "direction", "svd_deg": 137.31}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789176356761, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0057", "position": {"x": 710.4797335053928, "y": 200.34865280774693}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789176356761, "virtual_time_s": 1279.594253, "clear_result": "success"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789176356762, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0058", "position": {"x": 710.4797335053928, "y": 200.34865280774693}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176356762, "virtual_time_s": 1285.594253, "measure_result": "direction", "svd_deg": 84.65}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789176356777, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0059", "position": {"x": 993.6053782989981, "y": 525.0533317179301}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176356777, "virtual_time_s": 1377.755325, "measure_result": "direction", "svd_deg": 66.58}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789176356778, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0060", "position": {"x": 993.6053782989981, "y": 525.0533317179301}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176356778, "virtual_time_s": 1383.755325, "measure_result": "direction", "svd_deg": 62.58}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789176356780, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0061", "position": {"x": 993.6053782989981, "y": 525.0533317179301}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176356780, "virtual_time_s": 1389.755325, "measure_result": "direction", "svd_deg": 138.45}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789176356792, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0062", "position": {"x": 1175.3230825989258, "y": 947.3476414841302}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176356791, "virtual_time_s": 1487.701789, "measure_result": "near"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789176356795, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0063", "position": {"x": 1175.3230825989258, "y": 947.3476414841301}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789176356795, "virtual_time_s": 1492.701789, "clear_result": "success"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789176356796, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0064", "position": {"x": 1175.3230825989258, "y": 947.3476414841301}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176356796, "virtual_time_s": 1498.701789, "measure_result": "direction", "svd_deg": 54.91}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789176356806, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0065", "position": {"x": 1296.3620035202616, "y": 1121.1243938645891}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176356806, "virtual_time_s": 1546.05685, "measure_result": "direction", "svd_deg": 54.32}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789176356816, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0066", "position": {"x": 1308.3803422874535, "y": 1138.4972706807737}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176356816, "virtual_time_s": 1555.281811, "measure_result": "direction", "svd_deg": 50.71}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789176356817, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0067", "position": {"x": 1308.7260353065578, "y": 1138.9352296479515}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789176356817, "virtual_time_s": 1560.393402, "clear_result": "success"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789176356826, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0068", "position": {"x": 772.1664569607412, "y": 732.4253267530355}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789176356826, "virtual_time_s": 1700.025713, "clear_result": "success"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789176356834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0069", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176356834, "virtual_time_s": 1772.634297, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789176356837, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0070", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176356837, "virtual_time_s": 1778.634297, "measure_result": "direction", "svd_deg": 148.82}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789176356849, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0071", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176356849, "virtual_time_s": 1784.634297, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789176356851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0072", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176356851, "virtual_time_s": 1790.634297, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789176356853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0073", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176356853, "virtual_time_s": 1796.634297, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789176356855, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0074", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176356855, "virtual_time_s": 1802.634297, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789176356857, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0075", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176356857, "virtual_time_s": 1808.634297, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789176356870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0076", "position": {"x": 273.6391654489538, "y": 792.9031841441562}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176356870, "virtual_time_s": 1889.056399, "measure_result": "direction", "svd_deg": 159.22}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789176356871, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0077", "position": {"x": 108.04782339363166, "y": 856.0424727960627}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789176356871, "virtual_time_s": 1929.500475, "clear_result": "success"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789176356871, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0078", "position": {"x": 108.04782339363166, "y": 856.0424727960627}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176356871, "virtual_time_s": 1935.500475, "measure_result": "direction", "svd_deg": 156.44}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789176356879, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0079", "position": {"x": -179.94689600349434, "y": 1183.3328119478522}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176356879, "virtual_time_s": 2028.6922, "measure_result": "direction", "svd_deg": 13.56}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789176356881, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0080", "position": {"x": -179.94689600349434, "y": 1183.3328119478522}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176356881, "virtual_time_s": 2034.6922, "measure_result": "direction", "svd_deg": 226.87}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789176356887, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0081", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176356887, "virtual_time_s": 2128.319735, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789176356889, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0082", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176356889, "virtual_time_s": 2134.319735, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789176356891, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0083", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176356891, "virtual_time_s": 2140.319735, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789176356893, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0084", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176356893, "virtual_time_s": 2146.319735, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789176356895, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0085", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176356895, "virtual_time_s": 2152.319735, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789176356897, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0086", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176356897, "virtual_time_s": 2158.319735, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789176356905, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0087", "position": {"x": -326.7545621079094, "y": 1039.7756864418807}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789176356905, "virtual_time_s": 2214.432834, "clear_result": "success"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789176356911, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0088", "position": {"x": 151.79302297362847, "y": 1263.0101168427154}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176356911, "virtual_time_s": 2326.043705, "measure_result": "near"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789176356914, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0089", "position": {"x": 151.7930229736284, "y": 1263.0101168427157}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789176356914, "virtual_time_s": 2331.043705, "clear_result": "success"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789176356919, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0090", "position": {"x": 699.8047731885003, "y": -157.84296930236198}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176356919, "virtual_time_s": 2641.618187, "measure_result": "direction", "svd_deg": 220.56}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789176356920, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0091", "position": {"x": 513.7374756680778, "y": -316.81648248360267}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789176356920, "virtual_time_s": 2695.564532, "clear_result": "success"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789176356921, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0092", "position": {"x": 513.7374756680778, "y": -316.81648248360267}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176356921, "virtual_time_s": 2701.564532, "measure_result": "direction", "svd_deg": 207.11}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789176356923, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0093", "position": {"x": 245.62782977931036, "y": -453.56317795565735}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789176356923, "virtual_time_s": 2766.758366, "clear_result": "success"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789176356926, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0094", "position": {"x": -236.74190839825437, "y": -1178.6154488771283}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176356926, "virtual_time_s": 2946.928554, "measure_result": "direction", "svd_deg": 224.55}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789176356928, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0095", "position": {"x": -651.3189971209385, "y": -1584.3101915090074}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176356928, "virtual_time_s": 3067.93931, "measure_result": "direction", "svd_deg": 0.32}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789176356929, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0096", "position": {"x": -651.3189971209385, "y": -1584.3101915090074}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789176356929, "virtual_time_s": 3072.93931, "clear_result": "success"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789176356930, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0097", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176356930, "virtual_time_s": 3195.812786, "measure_result": "no_signal"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789176356932, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0098", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176356932, "virtual_time_s": 3201.812786, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789176356934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0099", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176356934, "virtual_time_s": 3207.812786, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789176356936, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0100", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176356936, "virtual_time_s": 3213.812786, "measure_result": "direction", "svd_deg": 202.61}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789176356945, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0101", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176356945, "virtual_time_s": 3219.812786, "measure_result": "no_signal"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789176356947, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0102", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176356947, "virtual_time_s": 3225.812786, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789176356951, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0103", "position": {"x": -887.4151591419518, "y": -891.537564310089}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176356951, "virtual_time_s": 3297.331756, "measure_result": "direction", "svd_deg": 258.99}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789176356952, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0104", "position": {"x": -937.4065949832368, "y": -1147.4687189948047}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789176356952, "virtual_time_s": 3354.485337, "clear_result": "success"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789176356952, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0105", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789176356952, "virtual_time_s": 3594.245797, "measure_result": "no_signal"}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789176356954, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0106", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789176356954, "virtual_time_s": 3600.245797, "measure_result": "no_signal"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789176356956, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0107", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789176356956, "virtual_time_s": 3606.245797, "measure_result": "no_signal"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789176356957, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0108", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789176356957, "virtual_time_s": 3612.245797, "measure_result": "no_signal"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789176356959, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0109", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176356959, "virtual_time_s": 3618.245797, "measure_result": "direction", "svd_deg": 171.08}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789176356967, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0110", "position": {"x": -1408.068713636956, "y": -205.75115923001024}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176356967, "virtual_time_s": 3687.750233, "measure_result": "direction", "svd_deg": 119.04}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789176356968, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0111", "position": {"x": -1555.0899173367548, "y": 58.57759183743361}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789176356968, "virtual_time_s": 3753.243182, "clear_result": "success"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789176356968, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "b97b45bbc6d2-0112"}, "response": {"accepted": true, "real_timestamp_ms": 1789176356968, "virtual_time_s": 3753.243182, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3753.243182, "real_elapsed_s": 3.048705, "request_count": 112, "cleared_count": 16} diff --git a/referee-data/sessions/LTW7-P3KE-HP6H-MYBZ/meta.json b/referee-data/sessions/LTW7-P3KE-HP6H-MYBZ/meta.json new file mode 100644 index 0000000..c57bbcf --- /dev/null +++ b/referee-data/sessions/LTW7-P3KE-HP6H-MYBZ/meta.json @@ -0,0 +1,136 @@ +{ + "case_code": "LTW7-P3KE-HP6H-MYBZ", + "module": "q3_practice", + "robot_id": "1", + "seed": 2108549265, + "truth": [ + { + "channel": 17, + "x": 1559.5020098964385, + "y": -432.1893014762776, + "r_eff_m": 1135.1406333518141, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": -936.4180419478505, + "y": -1149.0960258952086, + "r_eff_m": 1415.3507389321605, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 19, + "x": 231.5808417505164, + "y": -455.59465719886583, + "r_eff_m": 1019.0792837603416, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 18, + "x": 1227.4318595654365, + "y": -1014.085213983558, + "r_eff_m": 1068.028819774209, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 5, + "x": 152.30033036443, + "y": 1260.8761109314933, + "r_eff_m": 1237.408348460949, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": 1206.8943237464407, + "y": -1325.721414203673, + "r_eff_m": 1382.0467814654066, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 14, + "x": -1554.186627417198, + "y": 68.11901985373935, + "r_eff_m": 1173.6407747955384, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": -635.8496326373523, + "y": -1584.0631609028214, + "r_eff_m": 1347.952969674949, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": 119.71691243496198, + "y": 848.6941442522802, + "r_eff_m": 1399.967345445903, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 3, + "x": 1311.8947272856265, + "y": 1142.8930869281076, + "r_eff_m": 1374.4382834388919, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": 765.4891684918392, + "y": 727.2437575451629, + "r_eff_m": 1326.1799186859262, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": -75.43659241833988, + "y": -597.1456660933867, + "r_eff_m": 1043.3030451783488, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": -311.5392617257707, + "y": 1044.7424398578485, + "r_eff_m": 1484.9209806414049, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": 707.5093976986224, + "y": 207.484763693364, + "r_eff_m": 1210.1175591084682, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": 511.50858190853404, + "y": -323.6497098562599, + "r_eff_m": 1195.8857988717414, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": 1172.1847778827894, + "y": 947.1983338762033, + "r_eff_m": 1402.741012473061, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/LWPB-XBMT-XV33-E3JJ/log.jsonl b/referee-data/sessions/LWPB-XBMT-XV33-E3JJ/log.jsonl new file mode 100644 index 0000000..f8bc216 --- /dev/null +++ b/referee-data/sessions/LWPB-XBMT-XV33-E3JJ/log.jsonl @@ -0,0 +1,124 @@ +{"event": "session_start", "case_code": "LWPB-XBMT-XV33-E3JJ", "module": "q3_practice", "robot_id": "1", "seed": 466589689, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 13, "x": 1183.8799779542103, "y": 16.300162130843276, "r_eff_m": 1043.030963311299, "directional": false, "heading_deg": 0.0}, {"channel": 3, "x": -494.40554360323546, "y": -1123.3377923138162, "r_eff_m": 1285.8137481279477, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": 829.1664109386256, "y": 78.5091474344814, "r_eff_m": 1045.3263758140272, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": 662.3825336941362, "y": -1518.9231934680724, "r_eff_m": 1153.2925367421587, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": 789.4964794469357, "y": 660.3865975013626, "r_eff_m": 1020.9539467830554, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": -732.4501890737728, "y": 793.2310557368128, "r_eff_m": 1385.2645781290362, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": 841.4916378718221, "y": -662.1070229591213, "r_eff_m": 1352.3676099100746, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": -174.3729331779657, "y": 216.32141569722754, "r_eff_m": 1185.614317142923, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": 345.85957584054034, "y": -131.23937805552274, "r_eff_m": 1345.6158666458105, "directional": false, "heading_deg": 0.0}, {"channel": 14, "x": 38.810287868144485, "y": 577.1940530259867, "r_eff_m": 1183.5215272978703, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": 1414.512318246177, "y": -473.7057790400485, "r_eff_m": 1162.3574469455866, "directional": false, "heading_deg": 0.0}, {"channel": 18, "x": 244.96688917783823, "y": 1721.3774836621453, "r_eff_m": 1281.230583348082, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789180976368, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789180976368, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789180976375, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180976375, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789180976379, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180976379, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789180976383, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180976383, "virtual_time_s": 17.0, "measure_result": "direction", "svd_deg": 245.6}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789180976409, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789180976409, "virtual_time_s": 23.0, "measure_result": "direction", "svd_deg": 4.61}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789180976436, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180976436, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789180976440, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180976440, "virtual_time_s": 35.0, "measure_result": "direction", "svd_deg": 132.62}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789180976466, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180976466, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789180976470, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180976470, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789180976474, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180976474, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789180976478, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180976478, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789180976481, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180976481, "virtual_time_s": 65.0, "measure_result": "direction", "svd_deg": 321.3}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789180976508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180976508, "virtual_time_s": 71.0, "measure_result": "direction", "svd_deg": 338.53}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789180976534, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180976534, "virtual_time_s": 77.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789180976538, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180976538, "virtual_time_s": 83.0, "measure_result": "direction", "svd_deg": 87.02}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789180976564, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180976564, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789180976568, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180976568, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789180976572, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180976572, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789180976575, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180976575, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789180976579, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180976579, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789180976583, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180976583, "virtual_time_s": 119.0, "measure_result": "direction", "svd_deg": 128.8}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789180976646, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0022", "position": {"x": -335.51458496206266, "y": -586.7995624292403}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180976646, "virtual_time_s": 260.189314, "measure_result": "direction", "svd_deg": 253.3}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789180976675, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0023", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180976675, "virtual_time_s": 362.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789180976678, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0024", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180976678, "virtual_time_s": 368.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789180976681, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0025", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180976681, "virtual_time_s": 374.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789180976683, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0026", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180976683, "virtual_time_s": 380.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789180976686, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0027", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180976686, "virtual_time_s": 386.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789180976689, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0028", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180976689, "virtual_time_s": 392.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789180976691, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0029", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180976691, "virtual_time_s": 398.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789180976694, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0030", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180976694, "virtual_time_s": 404.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789180976697, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0031", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180976697, "virtual_time_s": 410.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789180976699, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0032", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180976699, "virtual_time_s": 416.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789180976702, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0033", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180976702, "virtual_time_s": 422.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789180976705, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0034", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180976705, "virtual_time_s": 428.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789180976707, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0035", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180976707, "virtual_time_s": 434.942852, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789180976710, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0036", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180976710, "virtual_time_s": 440.942852, "measure_result": "direction", "svd_deg": 306.09000000000003}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789180976737, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0037", "position": {"x": -498.72722324734974, "y": -1116.0060470794328}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789180976737, "virtual_time_s": 473.549025, "clear_result": "success"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789180976761, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0038", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180976761, "virtual_time_s": 696.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789180976763, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0039", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180976763, "virtual_time_s": 702.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789180976766, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0040", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180976766, "virtual_time_s": 708.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789180976768, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0041", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180976768, "virtual_time_s": 714.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789180976770, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0042", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180976770, "virtual_time_s": 720.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789180976773, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0043", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180976773, "virtual_time_s": 726.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789180976775, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0044", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180976775, "virtual_time_s": 732.41769, "measure_result": "direction", "svd_deg": 279.58}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789180976789, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0045", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180976789, "virtual_time_s": 738.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789180976791, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0046", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180976791, "virtual_time_s": 744.41769, "measure_result": "direction", "svd_deg": 31.92}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789180976804, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0047", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180976804, "virtual_time_s": 750.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789180976807, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0048", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180976807, "virtual_time_s": 756.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789180976809, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0049", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180976809, "virtual_time_s": 762.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789180976811, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0050", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180976811, "virtual_time_s": 768.41769, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789180976845, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0051", "position": {"x": 698.6434954585109, "y": -1078.586397396444}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180976845, "virtual_time_s": 802.436225, "measure_result": "direction", "svd_deg": 265.98}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789180976875, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0052", "position": {"x": 667.9314911501156, "y": -1533.8982804722548}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180976875, "virtual_time_s": 898.705527, "measure_result": "direction", "svd_deg": 109.96}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789180976876, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0053", "position": {"x": 666.5691162499644, "y": -1529.9315384716097}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789180976876, "virtual_time_s": 904.544362, "clear_result": "success"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789180976903, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0054", "position": {"x": 1110.157969050383, "y": -885.6082971503146}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180976903, "virtual_time_s": 1066.995442, "measure_result": "direction", "svd_deg": 53.43}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789180976932, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0055", "position": {"x": 1406.738275901601, "y": -487.84900828674677}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180976932, "virtual_time_s": 1171.226955, "measure_result": "direction", "svd_deg": 61.7}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789180976933, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0056", "position": {"x": 1414.3334113095004, "y": -474.31740323039145}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789180976933, "virtual_time_s": 1179.33044, "clear_result": "success"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789180976958, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0057", "position": {"x": 835.1455050187864, "y": -470.735009710057}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180976958, "virtual_time_s": 1301.170237, "measure_result": "direction", "svd_deg": 271.13}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789180976960, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0058", "position": {"x": 835.1455050187864, "y": -470.735009710057}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789180976960, "virtual_time_s": 1307.170237, "measure_result": "direction", "svd_deg": 89.65}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789180976961, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0059", "position": {"x": 835.1455050187864, "y": -470.735009710057}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180976961, "virtual_time_s": 1313.170237, "measure_result": "direction", "svd_deg": 145.7}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789180977000, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0060", "position": {"x": 839.6208051530755, "y": -673.1209669795376}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180977000, "virtual_time_s": 1359.657323, "measure_result": "direction", "svd_deg": 80.68}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789180977001, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0061", "position": {"x": 839.6208051530755, "y": -673.1209669795376}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789180977001, "virtual_time_s": 1364.657323, "clear_result": "success"}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789180977002, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0062", "position": {"x": 839.6208051530755, "y": -673.1209669795376}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180977002, "virtual_time_s": 1370.657323, "measure_result": "direction", "svd_deg": 133.1}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789180977018, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0063", "position": {"x": 331.488230123545, "y": -131.19625427431842}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180977018, "virtual_time_s": 1524.234725, "measure_result": "direction", "svd_deg": 0.68}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789180977019, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0064", "position": {"x": 331.6801285533027, "y": -131.19734279530724}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789180977019, "virtual_time_s": 1529.273105, "clear_result": "success"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789180977032, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0065", "position": {"x": 838.1618688049903, "y": 67.60273086466188}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789180977032, "virtual_time_s": 1643.093181, "clear_result": "success"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789180977045, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0066", "position": {"x": 1159.7, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180977045, "virtual_time_s": 1714.806771, "measure_result": "no_signal"}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789180977047, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0067", "position": {"x": 1159.7, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180977047, "virtual_time_s": 1720.806771, "measure_result": "direction", "svd_deg": 120.13}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789180977060, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0068", "position": {"x": 1159.7, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180977060, "virtual_time_s": 1726.806771, "measure_result": "no_signal"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789180977063, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0069", "position": {"x": 1159.7, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180977063, "virtual_time_s": 1732.806771, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789180977065, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0070", "position": {"x": 1159.7, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180977065, "virtual_time_s": 1738.806771, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789180977067, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0071", "position": {"x": 1159.7, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180977067, "virtual_time_s": 1744.806771, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789180977070, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0072", "position": {"x": 1159.7, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180977070, "virtual_time_s": 1750.806771, "measure_result": "direction", "svd_deg": 34.52}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789180977082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0073", "position": {"x": 1159.7, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180977082, "virtual_time_s": 1756.806771, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789180977085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0074", "position": {"x": 1159.7, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180977085, "virtual_time_s": 1762.806771, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789180977087, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0075", "position": {"x": 1159.7, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180977087, "virtual_time_s": 1768.806771, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789180977089, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0076", "position": {"x": 1159.7, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180977089, "virtual_time_s": 1774.806771, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789180977110, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0077", "position": {"x": 1454.8565963663455, "y": 210.72752582579713}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180977110, "virtual_time_s": 1853.33911, "measure_result": "direction", "svd_deg": 216.2}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789180977131, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0078", "position": {"x": 1307.2782981831692, "y": 105.36376291289581}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180977131, "virtual_time_s": 1894.60528, "measure_result": "direction", "svd_deg": 216.42}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789180977149, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0079", "position": {"x": 1233.4891490915716, "y": 52.681881456438624}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180977149, "virtual_time_s": 1917.738365, "measure_result": "direction", "svd_deg": 216.17}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789180977168, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0080", "position": {"x": 1196.5945745457923, "y": 26.340940728223888}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180977168, "virtual_time_s": 1931.804907, "measure_result": "direction", "svd_deg": 218.88}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789180977169, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0081", "position": {"x": 1194.495208035425, "y": 24.70809914763047}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789180977169, "virtual_time_s": 1937.336828, "clear_result": "success"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789180977186, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0082", "position": {"x": 880.2643175740311, "y": 623.3256082824572}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180977186, "virtual_time_s": 2078.5528, "measure_result": "direction", "svd_deg": 158.23}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789180977201, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0083", "position": {"x": 772.2012273736221, "y": 666.9456248339889}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180977201, "virtual_time_s": 2106.859741, "measure_result": "direction", "svd_deg": 339.41}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789180977202, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0084", "position": {"x": 775.2532964561254, "y": 665.7375332837706}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789180977202, "virtual_time_s": 2112.516235, "clear_result": "success"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789180977214, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0085", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180977214, "virtual_time_s": 2196.702443, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789180977217, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0086", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180977217, "virtual_time_s": 2202.702443, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789180977219, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0087", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180977219, "virtual_time_s": 2208.702443, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789180977221, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0088", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180977221, "virtual_time_s": 2214.702443, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789180977223, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0089", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180977223, "virtual_time_s": 2220.702443, "measure_result": "no_signal"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789180977226, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0090", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180977226, "virtual_time_s": 2226.702443, "measure_result": "no_signal"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789180977228, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0091", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180977228, "virtual_time_s": 2232.702443, "measure_result": "no_signal"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789180977230, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0092", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180977230, "virtual_time_s": 2238.702443, "measure_result": "direction", "svd_deg": 114.33}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789180977242, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0093", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180977242, "virtual_time_s": 2244.702443, "measure_result": "no_signal"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789180977259, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0094", "position": {"x": 375.8999077090483, "y": 1170.35911811255}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180977259, "virtual_time_s": 2303.299561, "measure_result": "direction", "svd_deg": 103.31}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789180977273, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0095", "position": {"x": 243.7130538886985, "y": 1724.0213813746086}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180977273, "virtual_time_s": 2422.144239, "measure_result": "near"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789180977277, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0096", "position": {"x": 243.71305388869865, "y": 1724.0213813746088}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789180977277, "virtual_time_s": 2427.144239, "clear_result": "success"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789180977288, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0097", "position": {"x": -31.53291110217519, "y": 819.7738067992453}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180977288, "virtual_time_s": 2622.186458, "measure_result": "direction", "svd_deg": 285.6}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789180977290, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0098", "position": {"x": -31.53291110217519, "y": 819.7738067992453}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180977290, "virtual_time_s": 2628.186458, "measure_result": "direction", "svd_deg": 256.58}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789180977297, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0099", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180977297, "virtual_time_s": 2749.895143, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789180977299, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0100", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180977299, "virtual_time_s": 2755.895143, "measure_result": "no_signal"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789180977301, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0101", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180977301, "virtual_time_s": 2761.895143, "measure_result": "no_signal"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789180977303, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0102", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180977303, "virtual_time_s": 2767.895143, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789180977305, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0103", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180977305, "virtual_time_s": 2773.895143, "measure_result": "no_signal"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789180977308, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0104", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180977308, "virtual_time_s": 2779.895143, "measure_result": "no_signal"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789180977310, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0105", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180977310, "virtual_time_s": 2785.895143, "measure_result": "no_signal"}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789180977312, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0106", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180977312, "virtual_time_s": 2791.895143, "measure_result": "no_signal"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789180977314, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0107", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180977314, "virtual_time_s": 2797.895143, "measure_result": "direction", "svd_deg": 324.71}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789180977322, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0108", "position": {"x": -537.5154334188039, "y": 736.8316743646568}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180977322, "virtual_time_s": 2858.060589, "measure_result": "direction", "svd_deg": 164.74}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789180977323, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0109", "position": {"x": -537.5154334188039, "y": 736.8316743646568}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180977323, "virtual_time_s": 2864.060589, "measure_result": "direction", "svd_deg": 343.85}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789180977327, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0110", "position": {"x": -727.2000138441692, "y": 789.3250720337206}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180977327, "virtual_time_s": 2909.423413, "measure_result": "direction", "svd_deg": 143.01}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789180977328, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0111", "position": {"x": -727.2000138441692, "y": 789.3250720337206}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789180977328, "virtual_time_s": 2914.423413, "clear_result": "success"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789180977329, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0112", "position": {"x": 29.20127924490942, "y": 572.56587640886}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789180977329, "virtual_time_s": 3076.792719, "clear_result": "success"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789180977329, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0113", "position": {"x": -174.53394939267704, "y": 218.54068479109839}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789180977329, "virtual_time_s": 3163.485284, "clear_result": "success"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789180977330, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0114", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789180977330, "virtual_time_s": 3371.308194, "measure_result": "no_signal"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789180977332, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0115", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789180977332, "virtual_time_s": 3377.308194, "measure_result": "no_signal"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789180977333, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0116", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789180977333, "virtual_time_s": 3383.308194, "measure_result": "no_signal"}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789180977335, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0117", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789180977335, "virtual_time_s": 3389.308194, "measure_result": "no_signal"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789180977337, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0118", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789180977337, "virtual_time_s": 3395.308194, "measure_result": "no_signal"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789180977338, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0119", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789180977338, "virtual_time_s": 3401.308194, "measure_result": "no_signal"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789180977340, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0120", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789180977340, "virtual_time_s": 3407.308194, "measure_result": "no_signal"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789180977341, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0121", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789180977341, "virtual_time_s": 3413.308194, "measure_result": "no_signal"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789180977343, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "6bc63ed894ca-0122"}, "response": {"accepted": true, "real_timestamp_ms": 1789180977343, "virtual_time_s": 3413.308194, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3413.308194, "real_elapsed_s": 7.536613, "request_count": 122, "cleared_count": 12} diff --git a/referee-data/sessions/LWPB-XBMT-XV33-E3JJ/meta.json b/referee-data/sessions/LWPB-XBMT-XV33-E3JJ/meta.json new file mode 100644 index 0000000..5b43fb8 --- /dev/null +++ b/referee-data/sessions/LWPB-XBMT-XV33-E3JJ/meta.json @@ -0,0 +1,104 @@ +{ + "case_code": "LWPB-XBMT-XV33-E3JJ", + "module": "q3_practice", + "robot_id": "1", + "seed": 466589689, + "truth": [ + { + "channel": 13, + "x": 1183.8799779542103, + "y": 16.300162130843276, + "r_eff_m": 1043.030963311299, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 3, + "x": -494.40554360323546, + "y": -1123.3377923138162, + "r_eff_m": 1285.8137481279477, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": 829.1664109386256, + "y": 78.5091474344814, + "r_eff_m": 1045.3263758140272, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": 662.3825336941362, + "y": -1518.9231934680724, + "r_eff_m": 1153.2925367421587, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": 789.4964794469357, + "y": 660.3865975013626, + "r_eff_m": 1020.9539467830554, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": -732.4501890737728, + "y": 793.2310557368128, + "r_eff_m": 1385.2645781290362, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": 841.4916378718221, + "y": -662.1070229591213, + "r_eff_m": 1352.3676099100746, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": -174.3729331779657, + "y": 216.32141569722754, + "r_eff_m": 1185.614317142923, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": 345.85957584054034, + "y": -131.23937805552274, + "r_eff_m": 1345.6158666458105, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 14, + "x": 38.810287868144485, + "y": 577.1940530259867, + "r_eff_m": 1183.5215272978703, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": 1414.512318246177, + "y": -473.7057790400485, + "r_eff_m": 1162.3574469455866, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 18, + "x": 244.96688917783823, + "y": 1721.3774836621453, + "r_eff_m": 1281.230583348082, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/M2JC-2FUG-U24L-N4SK/log.jsonl b/referee-data/sessions/M2JC-2FUG-U24L-N4SK/log.jsonl new file mode 100644 index 0000000..c06f644 --- /dev/null +++ b/referee-data/sessions/M2JC-2FUG-U24L-N4SK/log.jsonl @@ -0,0 +1,121 @@ +{"event": "session_start", "case_code": "M2JC-2FUG-U24L-N4SK", "module": "q3_practice", "robot_id": "1", "seed": 561730678, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 7, "x": 992.9922954671985, "y": -572.8831917957239, "r_eff_m": 1159.3728284643937, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": -932.8022734074337, "y": 222.2778821359437, "r_eff_m": 1391.3855924360862, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": -1221.3658333075325, "y": 1315.294163749138, "r_eff_m": 1086.2247557307164, "directional": false, "heading_deg": 0.0}, {"channel": 19, "x": 1185.7418227013986, "y": 519.1917195992197, "r_eff_m": 1216.576985758082, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": 751.9378182446494, "y": -1569.9848064372927, "r_eff_m": 1108.9916202276936, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": -968.6910327424837, "y": 1131.8946524109022, "r_eff_m": 1450.827633039983, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": -698.504311246741, "y": 77.14260764446972, "r_eff_m": 1418.579599752641, "directional": false, "heading_deg": 0.0}, {"channel": 14, "x": -303.7718485226303, "y": 1420.0853993856056, "r_eff_m": 1494.9823590542044, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": -187.13171879939264, "y": -1786.6009166258568, "r_eff_m": 1226.406397838425, "directional": false, "heading_deg": 0.0}, {"channel": 17, "x": -554.4599081745821, "y": -1344.8799232724436, "r_eff_m": 1134.1935620624806, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": 529.3513482768576, "y": 541.3150623543333, "r_eff_m": 1275.5003580338403, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": -427.12904640741056, "y": -738.8500754250632, "r_eff_m": 1325.7905876406735, "directional": false, "heading_deg": 0.0}, {"channel": 3, "x": -1360.1784097101026, "y": -217.40140977049808, "r_eff_m": 1174.0439812999412, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": 465.07901802628845, "y": 86.20416230236997, "r_eff_m": 1209.5906051462753, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": 1388.7069035097174, "y": 803.7618595279113, "r_eff_m": 1084.5897538490804, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": 326.5264435507345, "y": 1368.0165190368805, "r_eff_m": 1020.9605091595391, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789177734855, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789177734855, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789177734868, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177734867, "virtual_time_s": 5.0, "measure_result": "direction", "svd_deg": 173.5}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789177734910, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177734910, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789177734922, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177734922, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789177734935, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177734935, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789177734944, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177734944, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789177734953, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177734953, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789177734958, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177734958, "virtual_time_s": 41.0, "measure_result": "direction", "svd_deg": 329.23}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789177735010, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177735010, "virtual_time_s": 47.0, "measure_result": "direction", "svd_deg": 45.35}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789177735082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177735081, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789177735098, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177735098, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789177735108, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177735108, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789177735117, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177735117, "virtual_time_s": 71.0, "measure_result": "direction", "svd_deg": 167.33}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789177735167, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177735167, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 240.36}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789177735236, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177735236, "virtual_time_s": 83.0, "measure_result": "direction", "svd_deg": 101.26}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789177735290, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177735290, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789177735302, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177735302, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789177735316, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177735316, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789177735324, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177735323, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789177735337, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177735337, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789177735344, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177735344, "virtual_time_s": 119.0, "measure_result": "direction", "svd_deg": 11.49}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789177735495, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0022", "position": {"x": -372.82978317384163, "y": -401.9042600698891}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177735495, "virtual_time_s": 234.641066, "measure_result": "direction", "svd_deg": 260.52}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789177735570, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0023", "position": {"x": -434.78635779748595, "y": -766.2803844723742}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177735570, "virtual_time_s": 313.562261, "measure_result": "direction", "svd_deg": 75.11}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789177735605, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0024", "position": {"x": -426.44136697817106, "y": -735.9885923987272}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177735605, "virtual_time_s": 324.846309, "measure_result": "near"}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789177735608, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0025", "position": {"x": -426.4413669781709, "y": -735.9885923987272}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789177735608, "virtual_time_s": 329.846309, "clear_result": "success"}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789177735636, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0026", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177735636, "virtual_time_s": 397.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789177735666, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0027", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177735666, "virtual_time_s": 403.665768, "measure_result": "direction", "svd_deg": 135.68}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789177735745, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0028", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177735745, "virtual_time_s": 409.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789177735759, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0029", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177735759, "virtual_time_s": 415.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789177735794, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0030", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177735794, "virtual_time_s": 421.665768, "measure_result": "direction", "svd_deg": 296.75}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789177735870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0031", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177735870, "virtual_time_s": 427.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789177735877, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0032", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177735877, "virtual_time_s": 433.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789177735903, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0033", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177735903, "virtual_time_s": 439.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789177735913, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0034", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177735913, "virtual_time_s": 445.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789177735919, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0035", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177735919, "virtual_time_s": 451.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789177735926, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0036", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177735926, "virtual_time_s": 457.665768, "measure_result": "direction", "svd_deg": 274.81}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789177735960, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0037", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177735960, "virtual_time_s": 463.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789177735970, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0038", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177735970, "virtual_time_s": 469.665768, "measure_result": "no_signal"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789177736039, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0039", "position": {"x": -315.0541317404469, "y": -1184.065623054773}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177736039, "virtual_time_s": 539.672601, "measure_result": "direction", "svd_deg": 281.72}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789177736043, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0040", "position": {"x": -315.0541317404469, "y": -1184.065623054773}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177736043, "virtual_time_s": 545.672601, "measure_result": "direction", "svd_deg": 213.96}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789177736083, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0041", "position": {"x": -544.8291341125628, "y": -1339.0154102661554}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789177736083, "virtual_time_s": 606.100388, "clear_result": "success"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789177736085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0042", "position": {"x": -544.8291341125628, "y": -1339.0154102661554}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177736085, "virtual_time_s": 612.100388, "measure_result": "direction", "svd_deg": 309.38}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789177736158, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0043", "position": {"x": -194.78175751283283, "y": -1760.9698146298556}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177736158, "virtual_time_s": 726.750502, "measure_result": "direction", "svd_deg": 286.81}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789177736171, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0044", "position": {"x": -190.9519556635431, "y": -1772.887530262556}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789177736171, "virtual_time_s": 734.254094, "clear_result": "success"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789177736239, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0045", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177736239, "virtual_time_s": 957.95268, "measure_result": "no_signal"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789177736258, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0046", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177736258, "virtual_time_s": 963.95268, "measure_result": "no_signal"}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789177736268, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0047", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177736268, "virtual_time_s": 969.95268, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789177736275, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0048", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177736275, "virtual_time_s": 975.95268, "measure_result": "no_signal"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789177736296, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0049", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177736296, "virtual_time_s": 981.95268, "measure_result": "direction", "svd_deg": 287.68}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789177736333, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0050", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177736333, "virtual_time_s": 987.95268, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789177736339, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0051", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177736339, "virtual_time_s": 993.95268, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789177736349, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0052", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177736349, "virtual_time_s": 999.95268, "measure_result": "no_signal"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789177736386, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0053", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177736385, "virtual_time_s": 1005.95268, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789177736398, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0054", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177736398, "virtual_time_s": 1011.95268, "measure_result": "no_signal"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789177736435, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0055", "position": {"x": 858.3737314195452, "y": -1120.3448872484244}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177736435, "virtual_time_s": 1078.296694, "measure_result": "direction", "svd_deg": 256.23}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789177736472, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0056", "position": {"x": 753.4618797286566, "y": -1550.7942912953347}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177736472, "virtual_time_s": 1171.906668, "measure_result": "direction", "svd_deg": 266.26}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789177736491, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0057", "position": {"x": 752.9870386971137, "y": -1560.7342253675329}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789177736491, "virtual_time_s": 1178.896922, "clear_result": "success"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789177736521, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0058", "position": {"x": 661.7827077364329, "y": -570.2495941744079}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177736521, "virtual_time_s": 1383.83189, "measure_result": "direction", "svd_deg": 359.65}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789177736542, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0059", "position": {"x": 963.758262854542, "y": -572.9339960701111}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177736542, "virtual_time_s": 1449.229387, "measure_result": "direction", "svd_deg": 359.17}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789177736569, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0060", "position": {"x": 983.9173018184574, "y": -573.579846247965}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177736569, "virtual_time_s": 1458.263263, "measure_result": "direction", "svd_deg": 4.91}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789177736573, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0061", "position": {"x": 983.9173018184574, "y": -573.579846247965}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789177736573, "virtual_time_s": 1463.263263, "clear_result": "success"}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789177736603, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0062", "position": {"x": 1159.7, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177736603, "virtual_time_s": 1589.245495, "measure_result": "no_signal"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789177736608, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0063", "position": {"x": 1159.7, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177736608, "virtual_time_s": 1595.245495, "measure_result": "no_signal"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789177736613, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0064", "position": {"x": 1159.7, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177736613, "virtual_time_s": 1601.245495, "measure_result": "no_signal"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789177736619, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0065", "position": {"x": 1159.7, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177736619, "virtual_time_s": 1607.245495, "measure_result": "direction", "svd_deg": 74.21}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789177736634, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0066", "position": {"x": 1159.7, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177736634, "virtual_time_s": 1613.245495, "measure_result": "no_signal"}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789177736636, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0067", "position": {"x": 1159.7, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177736636, "virtual_time_s": 1619.245495, "measure_result": "no_signal"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789177736639, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0068", "position": {"x": 1159.7, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177736639, "virtual_time_s": 1625.245495, "measure_result": "no_signal"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789177736641, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0069", "position": {"x": 1159.7, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177736641, "virtual_time_s": 1631.245495, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789177736644, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0070", "position": {"x": 1159.7, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177736644, "virtual_time_s": 1637.245495, "measure_result": "direction", "svd_deg": 87.73}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789177736675, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0071", "position": {"x": 898.0946974669339, "y": -40.63811341085267}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177736675, "virtual_time_s": 1696.19407, "measure_result": "direction", "svd_deg": 163.6}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789177736690, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0072", "position": {"x": 1140.8665389129317, "y": 462.46570567505364}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177736690, "virtual_time_s": 1813.917231, "measure_result": "direction", "svd_deg": 53.44}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789177736692, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0073", "position": {"x": 1140.8665389129317, "y": 462.46570567505364}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177736692, "virtual_time_s": 1819.917231, "measure_result": "direction", "svd_deg": 52.38}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789177736706, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0074", "position": {"x": 1179.3642997298195, "y": 512.9023856049083}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789177736706, "virtual_time_s": 1837.607284, "clear_result": "success"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789177736719, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0075", "position": {"x": 1385.2210394109434, "y": 793.7324933992936}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177736719, "virtual_time_s": 1913.247085, "measure_result": "direction", "svd_deg": 71.75}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789177736721, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0076", "position": {"x": 1386.3182018452933, "y": 796.8734034773178}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789177736721, "virtual_time_s": 1918.91249, "clear_result": "success"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789177736732, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0077", "position": {"x": 771.057976432937, "y": 477.3681866403853}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177736732, "virtual_time_s": 2063.567274, "measure_result": "direction", "svd_deg": 164.89}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789177736734, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0078", "position": {"x": 535.1821250414456, "y": 540.7344458439704}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789177736734, "virtual_time_s": 2117.415078, "clear_result": "success"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789177736735, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0079", "position": {"x": 535.1821250414456, "y": 540.7344458439704}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177736735, "virtual_time_s": 2123.415078, "measure_result": "direction", "svd_deg": 262.08}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789177736744, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0080", "position": {"x": 473.186777213897, "y": 99.06592193440225}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789177736744, "virtual_time_s": 2217.614744, "clear_result": "success"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789177736753, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0081", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177736753, "virtual_time_s": 2405.919925, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789177736755, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0082", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177736755, "virtual_time_s": 2411.919925, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789177736758, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0083", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177736757, "virtual_time_s": 2417.919925, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789177736760, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0084", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177736760, "virtual_time_s": 2423.919925, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789177736762, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0085", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177736762, "virtual_time_s": 2429.919925, "measure_result": "direction", "svd_deg": 125.33}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789177736774, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0086", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177736774, "virtual_time_s": 2435.919925, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789177736776, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0087", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177736776, "virtual_time_s": 2441.919925, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789177736788, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0088", "position": {"x": 144.07829402906418, "y": 1259.0064363484457}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177736788, "virtual_time_s": 2548.866889, "measure_result": "direction", "svd_deg": 31.63}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789177736789, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0089", "position": {"x": 313.2691151357656, "y": 1363.0569808968753}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789177736789, "virtual_time_s": 2593.591969, "clear_result": "success"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789177736797, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0090", "position": {"x": 30.258844503025728, "y": 912.4167707258575}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177736797, "virtual_time_s": 2706.019674, "measure_result": "direction", "svd_deg": 123.69}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789177736806, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0091", "position": {"x": -274.8447002636086, "y": 1372.8513270222422}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177736806, "virtual_time_s": 2821.489245, "measure_result": "direction", "svd_deg": 120.54}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789177736814, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0092", "position": {"x": -293.9967723169739, "y": 1406.654303338556}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177736814, "virtual_time_s": 2834.259555, "measure_result": "direction", "svd_deg": 126.17}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789177736815, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0093", "position": {"x": -295.7973274042744, "y": 1409.2100659612777}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789177736815, "virtual_time_s": 2839.88482, "clear_result": "success"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789177736821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0094", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177736821, "virtual_time_s": 2944.801768, "measure_result": "no_signal"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789177736824, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0095", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177736824, "virtual_time_s": 2950.801768, "measure_result": "direction", "svd_deg": 154.2}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789177736834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0096", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177736834, "virtual_time_s": 2956.801768, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789177736836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0097", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177736836, "virtual_time_s": 2962.801768, "measure_result": "direction", "svd_deg": 161.2}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789177736846, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0098", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177736846, "virtual_time_s": 2968.801768, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789177736849, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0099", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177736849, "virtual_time_s": 2974.801768, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789177736861, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0100", "position": {"x": -777.2980477956612, "y": 937.8576240023}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177736861, "virtual_time_s": 3022.469148, "measure_result": "direction", "svd_deg": 134.19}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789177736863, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0101", "position": {"x": -777.2980477956612, "y": 937.8576240023}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177736863, "virtual_time_s": 3028.469148, "measure_result": "direction", "svd_deg": 139.24}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789177736872, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0102", "position": {"x": -973.1584395907925, "y": 1138.6886289187291}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177736872, "virtual_time_s": 3090.574187, "measure_result": "direction", "svd_deg": 303.11}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789177737422, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0103", "position": {"x": -973.1584395907925, "y": 1138.6886289187291}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789177737422, "virtual_time_s": 3095.574187, "clear_result": "success"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789177737447, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0104", "position": {"x": -1186.490749147812, "y": 1289.427825587637}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177737447, "virtual_time_s": 3153.817073, "measure_result": "direction", "svd_deg": 143.36}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789177737465, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0105", "position": {"x": -1206.3022670931205, "y": 1303.6297925605186}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177737465, "virtual_time_s": 3163.692284, "measure_result": "direction", "svd_deg": 142.34}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789177737467, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0106", "position": {"x": -1210.9858413564525, "y": 1307.1151023921566}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789177737466, "virtual_time_s": 3169.859901, "clear_result": "success"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789177737480, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0107", "position": {"x": -700.2979726032004, "y": 412.81137739395336}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177737480, "virtual_time_s": 3381.828952, "measure_result": "direction", "svd_deg": 220.26}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789177737482, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0108", "position": {"x": -700.2979726032004, "y": 412.81137739395336}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177737482, "virtual_time_s": 3387.828952, "measure_result": "direction", "svd_deg": 269.52}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789177737488, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0109", "position": {"x": -702.8199899414, "y": 84.72909891872276}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789177737488, "virtual_time_s": 3458.447346, "clear_result": "success"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789177737490, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0110", "position": {"x": -702.8199899414, "y": 84.72909891872276}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177737490, "virtual_time_s": 3464.447346, "measure_result": "direction", "svd_deg": 149.6}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789177737494, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0111", "position": {"x": -921.7080714594483, "y": 213.00857870313752}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789177737494, "virtual_time_s": 3520.188894, "clear_result": "success"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789177737498, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0112", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789177737498, "virtual_time_s": 3590.067783, "measure_result": "no_signal"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789177737503, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0113", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789177737503, "virtual_time_s": 3596.067783, "measure_result": "no_signal"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789177737506, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0114", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789177737506, "virtual_time_s": 3602.067783, "measure_result": "no_signal"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789177737508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0115", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789177737508, "virtual_time_s": 3608.067783, "measure_result": "no_signal"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789177737512, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0116", "position": {"x": -1138.8297526329393, "y": -231.21884145846948}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177737512, "virtual_time_s": 3660.499548, "measure_result": "direction", "svd_deg": 176.63}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789177737515, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0117", "position": {"x": -1387.9290756244095, "y": -215.93083218494718}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177737515, "virtual_time_s": 3715.413152, "measure_result": "direction", "svd_deg": 356.87}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789177737517, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0118", "position": {"x": -1375.7634999868226, "y": -216.81034152932963}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789177737517, "virtual_time_s": 3722.852617, "clear_result": "success"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789177737518, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "9871c043f2ec-0119"}, "response": {"accepted": true, "real_timestamp_ms": 1789177737518, "virtual_time_s": 3722.852617, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3722.852617, "real_elapsed_s": 4.829706, "request_count": 119, "cleared_count": 16} diff --git a/referee-data/sessions/M2JC-2FUG-U24L-N4SK/meta.json b/referee-data/sessions/M2JC-2FUG-U24L-N4SK/meta.json new file mode 100644 index 0000000..cd18de1 --- /dev/null +++ b/referee-data/sessions/M2JC-2FUG-U24L-N4SK/meta.json @@ -0,0 +1,136 @@ +{ + "case_code": "M2JC-2FUG-U24L-N4SK", + "module": "q3_practice", + "robot_id": "1", + "seed": 561730678, + "truth": [ + { + "channel": 7, + "x": 992.9922954671985, + "y": -572.8831917957239, + "r_eff_m": 1159.3728284643937, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": -932.8022734074337, + "y": 222.2778821359437, + "r_eff_m": 1391.3855924360862, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": -1221.3658333075325, + "y": 1315.294163749138, + "r_eff_m": 1086.2247557307164, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 19, + "x": 1185.7418227013986, + "y": 519.1917195992197, + "r_eff_m": 1216.576985758082, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": 751.9378182446494, + "y": -1569.9848064372927, + "r_eff_m": 1108.9916202276936, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": -968.6910327424837, + "y": 1131.8946524109022, + "r_eff_m": 1450.827633039983, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": -698.504311246741, + "y": 77.14260764446972, + "r_eff_m": 1418.579599752641, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 14, + "x": -303.7718485226303, + "y": 1420.0853993856056, + "r_eff_m": 1494.9823590542044, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": -187.13171879939264, + "y": -1786.6009166258568, + "r_eff_m": 1226.406397838425, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 17, + "x": -554.4599081745821, + "y": -1344.8799232724436, + "r_eff_m": 1134.1935620624806, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": 529.3513482768576, + "y": 541.3150623543333, + "r_eff_m": 1275.5003580338403, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": -427.12904640741056, + "y": -738.8500754250632, + "r_eff_m": 1325.7905876406735, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 3, + "x": -1360.1784097101026, + "y": -217.40140977049808, + "r_eff_m": 1174.0439812999412, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": 465.07901802628845, + "y": 86.20416230236997, + "r_eff_m": 1209.5906051462753, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": 1388.7069035097174, + "y": 803.7618595279113, + "r_eff_m": 1084.5897538490804, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": 326.5264435507345, + "y": 1368.0165190368805, + "r_eff_m": 1020.9605091595391, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/TX7X-UUR6-Y4UV-MUUB/log.jsonl b/referee-data/sessions/TX7X-UUR6-Y4UV-MUUB/log.jsonl new file mode 100644 index 0000000..da581cf --- /dev/null +++ b/referee-data/sessions/TX7X-UUR6-Y4UV-MUUB/log.jsonl @@ -0,0 +1,273 @@ +{"event": "session_start", "case_code": "TX7X-UUR6-Y4UV-MUUB", "module": "q4_practice", "robot_id": "1", "seed": 929064884, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 11, "x": -346.0952285856926, "y": 989.9145923610024, "r_eff_m": 1191.1186338701666, "directional": true, "heading_deg": 159.16176801694468}, {"channel": 4, "x": 1257.5970122653036, "y": 708.5794688738446, "r_eff_m": 1282.7900042652702, "directional": true, "heading_deg": 154.8024123492864}, {"channel": 2, "x": 1247.2180811445091, "y": 827.963811693902, "r_eff_m": 1438.3112261396586, "directional": true, "heading_deg": 107.25471794541161}, {"channel": 17, "x": -1445.4112663857652, "y": -666.0557096868885, "r_eff_m": 1480.701942576361, "directional": false, "heading_deg": 0.0}, {"channel": 19, "x": 740.6271606649069, "y": 1455.1536399428974, "r_eff_m": 1466.0899211603937, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": -1113.8988244234347, "y": -1311.046678312703, "r_eff_m": 1075.9228215068247, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": 4.704690796209142, "y": 491.99358548417763, "r_eff_m": 1355.6451542681552, "directional": false, "heading_deg": 0.0}, {"channel": 5, "x": 1348.5869421581046, "y": 859.496070323148, "r_eff_m": 1401.497166204074, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": -996.9311591277022, "y": -484.06258446248745, "r_eff_m": 1186.0180321765483, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": 1500.1830623826106, "y": -930.8255328807501, "r_eff_m": 1295.214809419549, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": 304.72552422856904, "y": 1040.2786845859162, "r_eff_m": 1311.2305594784523, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": -140.7329097694391, "y": 428.97148149422145, "r_eff_m": 1311.8628957838528, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": 1194.2366952711407, "y": -881.3087874452754, "r_eff_m": 1099.1448946730875, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": 955.5810703522162, "y": 531.3505462907465, "r_eff_m": 1032.284212437818, "directional": false, "heading_deg": 0.0}, {"channel": 18, "x": -1134.4903153396365, "y": -120.51927284530734, "r_eff_m": 1277.1076111276584, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789194634388, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789194634388, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789194634397, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194634397, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789194634399, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789194634399, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789194634401, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194634401, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789194634404, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789194634404, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789194634405, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194634405, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789194634406, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194634405, "virtual_time_s": 35.0, "measure_result": "direction", "svd_deg": 88.95}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789194634440, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194634440, "virtual_time_s": 41.0, "measure_result": "direction", "svd_deg": 205.31}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789194634475, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194634475, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789194634475, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194634475, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789194634476, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789194634476, "virtual_time_s": 59.0, "measure_result": "direction", "svd_deg": 74.16}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789194634511, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194634511, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789194634512, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194634512, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789194634513, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194634512, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 108.42}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789194634549, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194634549, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789194634550, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194634550, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789194634550, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194634550, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789194634551, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194634551, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789194634552, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194634552, "virtual_time_s": 107.0, "measure_result": "direction", "svd_deg": 186.47}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789194634587, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194634587, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789194634588, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194634588, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789194634700, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0022", "position": {"x": -412.90566236888577, "y": -55.4782799485173}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194634700, "virtual_time_s": 208.323208, "measure_result": "direction", "svd_deg": 216.2}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789194634730, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0023", "position": {"x": -920.4634001012616, "y": -407.753305048853}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194634730, "virtual_time_s": 336.888988, "measure_result": "direction", "svd_deg": 225.52}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789194634745, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0024", "position": {"x": -957.2988701400119, "y": -444.219659342231}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194634745, "virtual_time_s": 352.255563, "measure_result": "direction", "svd_deg": 224.35}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789194634759, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0025", "position": {"x": -972.5318418110339, "y": -458.8217975538558}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194634759, "virtual_time_s": 361.475828, "measure_result": "direction", "svd_deg": 226.17}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789194634773, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0026", "position": {"x": -984.3311816442076, "y": -470.79815563926684}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194634773, "virtual_time_s": 369.838313, "measure_result": "direction", "svd_deg": 226.34}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789194634783, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0027", "position": {"x": -992.023894159275, "y": -478.6729147769956}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194634783, "virtual_time_s": 377.040036, "measure_result": "direction", "svd_deg": 227.71}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789194634784, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0028", "position": {"x": -999.2314650780772, "y": -486.3227406358485}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789194634784, "virtual_time_s": 384.14212, "clear_result": "success"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789194634897, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0029", "position": {"x": -810.0228019065687, "y": -325.812164790396}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194634897, "virtual_time_s": 439.766132, "measure_result": "direction", "svd_deg": 147.91}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789194634915, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0030", "position": {"x": -1113.5480972133782, "y": -141.6873443954185}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194634915, "virtual_time_s": 515.767415, "measure_result": "direction", "svd_deg": 134.69}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789194634922, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0031", "position": {"x": -1121.8456679146145, "y": -133.78288440171804}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194634922, "virtual_time_s": 523.059402, "measure_result": "direction", "svd_deg": 134.42}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789194634924, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0032", "position": {"x": -1135.2822607072865, "y": -120.4581543478324}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789194634924, "virtual_time_s": 531.844058, "clear_result": "success"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789194635041, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0033", "position": {"x": -502.7629374124657, "y": 446.3345190290234}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194635041, "virtual_time_s": 707.7069, "measure_result": "direction", "svd_deg": 357.43}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789194635042, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0034", "position": {"x": -143.39411967738602, "y": 430.01215148772485}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789194635042, "virtual_time_s": 784.654761, "clear_result": "success"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789194635148, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0035", "position": {"x": -251.36179213753707, "y": 484.7830514226679}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194635148, "virtual_time_s": 814.867873, "measure_result": "direction", "svd_deg": 1.2}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789194635149, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0036", "position": {"x": 9.074090999657395, "y": 490.3926418907314}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789194635149, "virtual_time_s": 871.967131, "clear_result": "success"}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789194635271, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0037", "position": {"x": -60.542992564778416, "y": 456.4502980239974}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789194635271, "virtual_time_s": 893.457284, "measure_result": "direction", "svd_deg": 58.52}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789194635295, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0038", "position": {"x": 258.8336303498391, "y": 1007.6156154051822}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789194635295, "virtual_time_s": 1025.859738, "measure_result": "direction", "svd_deg": 35.41}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789194635306, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0039", "position": {"x": 282.53279167349666, "y": 1021.9617773485994}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789194635306, "virtual_time_s": 1036.400361, "measure_result": "direction", "svd_deg": 38.88}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789194635307, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0040", "position": {"x": 306.6756237871564, "y": 1041.9512592077438}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789194635307, "virtual_time_s": 1047.669191, "clear_result": "success"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789194635308, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0041", "position": {"x": 800.0, "y": 1200.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194635308, "virtual_time_s": 1157.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789194635309, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0042", "position": {"x": 800.0, "y": 1200.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789194635309, "virtual_time_s": 1163.273891, "measure_result": "direction", "svd_deg": 319.65}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789194635338, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0043", "position": {"x": 800.0, "y": 1200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194635338, "virtual_time_s": 1169.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789194635339, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0044", "position": {"x": 800.0, "y": 1200.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789194635339, "virtual_time_s": 1175.273891, "measure_result": "direction", "svd_deg": 313.33}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789194635369, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0045", "position": {"x": 800.0, "y": 1200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194635369, "virtual_time_s": 1181.273891, "measure_result": "direction", "svd_deg": 329.03}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789194635399, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0046", "position": {"x": 800.0, "y": 1200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194635399, "virtual_time_s": 1187.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789194635400, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0047", "position": {"x": 800.0, "y": 1200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194635400, "virtual_time_s": 1193.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789194635401, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0048", "position": {"x": 800.0, "y": 1200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194635401, "virtual_time_s": 1199.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789194635401, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0049", "position": {"x": 800.0, "y": 1200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194635401, "virtual_time_s": 1205.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789194635402, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0050", "position": {"x": 800.0, "y": 1200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194635402, "virtual_time_s": 1211.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789194635402, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0051", "position": {"x": 800.0, "y": 1200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194635402, "virtual_time_s": 1217.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789194635403, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0052", "position": {"x": 800.0, "y": 1200.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194635403, "virtual_time_s": 1223.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789194635404, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0053", "position": {"x": 800.0, "y": 1200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194635404, "virtual_time_s": 1229.273891, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789194635405, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0054", "position": {"x": 800.0, "y": 1200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194635405, "virtual_time_s": 1235.273891, "measure_result": "direction", "svd_deg": 103.27}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789194635434, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0055", "position": {"x": 800.0, "y": 1200.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194635434, "virtual_time_s": 1241.273891, "measure_result": "direction", "svd_deg": 282.26}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789194635499, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0056", "position": {"x": 740.7106905156503, "y": 1312.8008537580772}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194635499, "virtual_time_s": 1272.760558, "measure_result": "direction", "svd_deg": 90.77}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789194635509, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0057", "position": {"x": 738.0633779619358, "y": 1448.095377284604}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194635509, "virtual_time_s": 1304.824642, "measure_result": "direction", "svd_deg": 70.6}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789194635510, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0058", "position": {"x": 739.6844862561125, "y": 1452.9700288522004}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789194635510, "virtual_time_s": 1310.85207, "clear_result": "success"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789194635585, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0059", "position": {"x": 1055.9966808216973, "y": 1108.9306954805663}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194635585, "virtual_time_s": 1410.322165, "measure_result": "direction", "svd_deg": 319.22}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789194635605, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0060", "position": {"x": 1276.4763134899213, "y": 925.5981918254806}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194635605, "virtual_time_s": 1472.670949, "measure_result": "direction", "svd_deg": 317.12}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789194635618, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0061", "position": {"x": 1299.8665326649425, "y": 906.6205186566978}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194635618, "virtual_time_s": 1483.695082, "measure_result": "direction", "svd_deg": 315.86}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789194635627, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0062", "position": {"x": 1329.0106694646756, "y": 879.3127613783226}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194635627, "virtual_time_s": 1496.682808, "measure_result": "direction", "svd_deg": 313.68}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789194635628, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0063", "position": {"x": 1343.5126439522735, "y": 864.4921604289209}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789194635628, "virtual_time_s": 1505.829891, "clear_result": "success"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789194635720, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0064", "position": {"x": 1510.232989670949, "y": 1002.4226689033234}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789194635720, "virtual_time_s": 1555.105981, "measure_result": "direction", "svd_deg": 214.01}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789194635721, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0065", "position": {"x": 1243.9723979658093, "y": 823.0179131308244}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789194635721, "virtual_time_s": 1624.318369, "clear_result": "success"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789194635830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0066", "position": {"x": 1298.4797223546968, "y": 1022.8151015618688}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789194635830, "virtual_time_s": 1671.738154, "measure_result": "direction", "svd_deg": 262.05}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789194635843, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0067", "position": {"x": 1256.0015513350756, "y": 726.2188328372158}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789194635843, "virtual_time_s": 1736.662687, "measure_result": "direction", "svd_deg": 274.96}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789194635844, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0068", "position": {"x": 1257.355772035512, "y": 711.2724031692014}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789194635844, "virtual_time_s": 1744.664218, "clear_result": "success"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789194635966, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0069", "position": {"x": 1224.554439526177, "y": 732.2103731098723}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194635966, "virtual_time_s": 1758.447086, "measure_result": "direction", "svd_deg": 216.81}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789194635967, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0070", "position": {"x": 946.6959018181427, "y": 523.916675956933}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789194635967, "virtual_time_s": 1832.899698, "clear_result": "success"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789194635968, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0071", "position": {"x": 700.0, "y": 700.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194635968, "virtual_time_s": 1899.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789194635969, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0072", "position": {"x": 700.0, "y": 700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194635968, "virtual_time_s": 1905.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789194635969, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0073", "position": {"x": 700.0, "y": 700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194635969, "virtual_time_s": 1911.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789194635970, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0074", "position": {"x": 700.0, "y": 700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194635970, "virtual_time_s": 1917.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789194635970, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0075", "position": {"x": 700.0, "y": 700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194635970, "virtual_time_s": 1923.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789194635971, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0076", "position": {"x": 700.0, "y": 700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194635971, "virtual_time_s": 1929.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789194635972, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0077", "position": {"x": 700.0, "y": 700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194635972, "virtual_time_s": 1935.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789194635972, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0078", "position": {"x": 700.0, "y": 700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194635972, "virtual_time_s": 1941.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789194635973, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0079", "position": {"x": 700.0, "y": 700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194635973, "virtual_time_s": 1947.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789194635973, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0080", "position": {"x": 700.0, "y": 700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194635973, "virtual_time_s": 1953.517915, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789194635974, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0081", "position": {"x": 800.0, "y": 200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194635974, "virtual_time_s": 2060.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789194635974, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0082", "position": {"x": 800.0, "y": 200.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194635974, "virtual_time_s": 2066.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789194635975, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0083", "position": {"x": 800.0, "y": 200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194635975, "virtual_time_s": 2072.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789194635975, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0084", "position": {"x": 800.0, "y": 200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194635975, "virtual_time_s": 2078.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789194635976, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0085", "position": {"x": 800.0, "y": 200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194635976, "virtual_time_s": 2084.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789194635976, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0086", "position": {"x": 800.0, "y": 200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194635976, "virtual_time_s": 2090.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789194635977, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0087", "position": {"x": 800.0, "y": 200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194635977, "virtual_time_s": 2096.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789194635977, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0088", "position": {"x": 800.0, "y": 200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194635977, "virtual_time_s": 2102.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789194635978, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0089", "position": {"x": 800.0, "y": 200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194635978, "virtual_time_s": 2108.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789194635978, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0090", "position": {"x": 800.0, "y": 200.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194635978, "virtual_time_s": 2114.498305, "measure_result": "no_signal"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789194635979, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0091", "position": {"x": 900.0, "y": -700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194635979, "virtual_time_s": 2300.606008, "measure_result": "no_signal"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789194635979, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0092", "position": {"x": 900.0, "y": -700.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194635979, "virtual_time_s": 2306.606008, "measure_result": "direction", "svd_deg": 338.03}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789194636010, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0093", "position": {"x": 900.0, "y": -700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636010, "virtual_time_s": 2312.606008, "measure_result": "no_signal"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789194636011, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0094", "position": {"x": 900.0, "y": -700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636011, "virtual_time_s": 2318.606008, "measure_result": "no_signal"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789194636012, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0095", "position": {"x": 900.0, "y": -700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636012, "virtual_time_s": 2324.606008, "measure_result": "no_signal"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789194636013, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0096", "position": {"x": 900.0, "y": -700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636013, "virtual_time_s": 2330.606008, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789194636013, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0097", "position": {"x": 900.0, "y": -700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194636013, "virtual_time_s": 2336.606008, "measure_result": "direction", "svd_deg": 327.81}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789194636045, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0098", "position": {"x": 900.0, "y": -700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636045, "virtual_time_s": 2342.606008, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789194636046, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0099", "position": {"x": 900.0, "y": -700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636046, "virtual_time_s": 2348.606008, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789194636046, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0100", "position": {"x": 900.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636046, "virtual_time_s": 2354.606008, "measure_result": "no_signal"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789194636100, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0101", "position": {"x": 1066.3180442679925, "y": -754.4235005682468}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194636099, "virtual_time_s": 2395.605213, "measure_result": "direction", "svd_deg": 314.31}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789194636110, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0102", "position": {"x": 1183.9958964408418, "y": -874.307369393867}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194636110, "virtual_time_s": 2434.202962, "measure_result": "direction", "svd_deg": 325.84000000000003}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789194636111, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0103", "position": {"x": 1190.1333250243817, "y": -878.6312366266026}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789194636111, "virtual_time_s": 2440.704479, "clear_result": "success"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789194636161, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0104", "position": {"x": 1096.7993201542185, "y": -941.2656761702663}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194636161, "virtual_time_s": 2469.184968, "measure_result": "direction", "svd_deg": 1.79}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789194636174, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0105", "position": {"x": 1451.4909408157146, "y": -930.2535212077989}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194636174, "virtual_time_s": 2545.157473, "measure_result": "direction", "svd_deg": 358.5}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789194636182, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0106", "position": {"x": 1465.4298539293607, "y": -931.4742985101396}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194636182, "virtual_time_s": 2552.955927, "measure_result": "direction", "svd_deg": 0.19}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789194636183, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0107", "position": {"x": 1490.2459711891129, "y": -931.6614247282728}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789194636183, "virtual_time_s": 2562.919292, "clear_result": "success"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789194636183, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0108", "position": {"x": 1200.0, "y": -700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636183, "virtual_time_s": 2643.191693, "measure_result": "no_signal"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789194636184, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0109", "position": {"x": 1200.0, "y": -700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636184, "virtual_time_s": 2649.191693, "measure_result": "no_signal"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789194636184, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0110", "position": {"x": 1200.0, "y": -700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636184, "virtual_time_s": 2655.191693, "measure_result": "no_signal"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789194636185, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0111", "position": {"x": 1200.0, "y": -700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636185, "virtual_time_s": 2661.191693, "measure_result": "no_signal"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789194636186, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0112", "position": {"x": 1200.0, "y": -700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636186, "virtual_time_s": 2667.191693, "measure_result": "no_signal"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789194636186, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0113", "position": {"x": 1200.0, "y": -700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636186, "virtual_time_s": 2673.191693, "measure_result": "no_signal"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789194636187, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0114", "position": {"x": 1200.0, "y": -700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636187, "virtual_time_s": 2679.191693, "measure_result": "no_signal"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789194636187, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0115", "position": {"x": 1200.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636187, "virtual_time_s": 2685.191693, "measure_result": "no_signal"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789194636188, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0116", "position": {"x": 1800.0, "y": -400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636188, "virtual_time_s": 2824.355772, "measure_result": "no_signal"}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789194636188, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0117", "position": {"x": 1800.0, "y": -400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636188, "virtual_time_s": 2830.355772, "measure_result": "no_signal"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789194636189, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0118", "position": {"x": 1800.0, "y": -400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636189, "virtual_time_s": 2836.355772, "measure_result": "no_signal"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789194636190, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0119", "position": {"x": 1800.0, "y": -400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636190, "virtual_time_s": 2842.355772, "measure_result": "no_signal"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789194636190, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0120", "position": {"x": 1800.0, "y": -400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636190, "virtual_time_s": 2848.355772, "measure_result": "no_signal"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789194636191, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0121", "position": {"x": 1800.0, "y": -400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636191, "virtual_time_s": 2854.355772, "measure_result": "no_signal"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789194636191, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0122", "position": {"x": 1800.0, "y": -400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636191, "virtual_time_s": 2860.355772, "measure_result": "no_signal"}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789194636192, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0123", "position": {"x": 1800.0, "y": -400.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636192, "virtual_time_s": 2866.355772, "measure_result": "no_signal"}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789194636193, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0124", "position": {"x": 1900.0, "y": -900.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636193, "virtual_time_s": 2973.336162, "measure_result": "no_signal"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789194636193, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0125", "position": {"x": 1900.0, "y": -900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636193, "virtual_time_s": 2979.336162, "measure_result": "no_signal"}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789194636194, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0126", "position": {"x": 1900.0, "y": -900.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636194, "virtual_time_s": 2985.336162, "measure_result": "no_signal"}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789194636194, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0127", "position": {"x": 1900.0, "y": -900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636194, "virtual_time_s": 2991.336162, "measure_result": "no_signal"}} +{"event": "action", "seq": 128, "wall_ts_ms": 1789194636195, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0128", "position": {"x": 1900.0, "y": -900.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636195, "virtual_time_s": 2997.336162, "measure_result": "no_signal"}} +{"event": "action", "seq": 129, "wall_ts_ms": 1789194636195, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0129", "position": {"x": 1900.0, "y": -900.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636195, "virtual_time_s": 3003.336162, "measure_result": "no_signal"}} +{"event": "action", "seq": 130, "wall_ts_ms": 1789194636196, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0130", "position": {"x": 1900.0, "y": -900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636196, "virtual_time_s": 3009.336162, "measure_result": "no_signal"}} +{"event": "action", "seq": 131, "wall_ts_ms": 1789194636197, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0131", "position": {"x": 1900.0, "y": -900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636197, "virtual_time_s": 3015.336162, "measure_result": "no_signal"}} +{"event": "action", "seq": 132, "wall_ts_ms": 1789194636197, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0132", "position": {"x": 1400.0, "y": -1400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636197, "virtual_time_s": 3161.757518, "measure_result": "no_signal"}} +{"event": "action", "seq": 133, "wall_ts_ms": 1789194636198, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0133", "position": {"x": 1400.0, "y": -1400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636198, "virtual_time_s": 3167.757518, "measure_result": "no_signal"}} +{"event": "action", "seq": 134, "wall_ts_ms": 1789194636198, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0134", "position": {"x": 1400.0, "y": -1400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636198, "virtual_time_s": 3173.757518, "measure_result": "no_signal"}} +{"event": "action", "seq": 135, "wall_ts_ms": 1789194636199, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0135", "position": {"x": 1400.0, "y": -1400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636199, "virtual_time_s": 3179.757518, "measure_result": "no_signal"}} +{"event": "action", "seq": 136, "wall_ts_ms": 1789194636199, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0136", "position": {"x": 1400.0, "y": -1400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636199, "virtual_time_s": 3185.757518, "measure_result": "no_signal"}} +{"event": "action", "seq": 137, "wall_ts_ms": 1789194636200, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0137", "position": {"x": 1400.0, "y": -1400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636200, "virtual_time_s": 3191.757518, "measure_result": "no_signal"}} +{"event": "action", "seq": 138, "wall_ts_ms": 1789194636201, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0138", "position": {"x": 1400.0, "y": -1400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636201, "virtual_time_s": 3197.757518, "measure_result": "no_signal"}} +{"event": "action", "seq": 139, "wall_ts_ms": 1789194636201, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0139", "position": {"x": 1400.0, "y": -1400.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636201, "virtual_time_s": 3203.757518, "measure_result": "no_signal"}} +{"event": "action", "seq": 140, "wall_ts_ms": 1789194636202, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0140", "position": {"x": 500.0, "y": -1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636202, "virtual_time_s": 3405.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 141, "wall_ts_ms": 1789194636202, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0141", "position": {"x": 500.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636202, "virtual_time_s": 3411.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 142, "wall_ts_ms": 1789194636203, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0142", "position": {"x": 500.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636203, "virtual_time_s": 3417.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 143, "wall_ts_ms": 1789194636203, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0143", "position": {"x": 500.0, "y": -1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636203, "virtual_time_s": 3423.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 144, "wall_ts_ms": 1789194636204, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0144", "position": {"x": 500.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636204, "virtual_time_s": 3429.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 145, "wall_ts_ms": 1789194636204, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0145", "position": {"x": 500.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636204, "virtual_time_s": 3435.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 146, "wall_ts_ms": 1789194636205, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0146", "position": {"x": 500.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636205, "virtual_time_s": 3441.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 147, "wall_ts_ms": 1789194636205, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0147", "position": {"x": 500.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636205, "virtual_time_s": 3447.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 148, "wall_ts_ms": 1789194636206, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0148", "position": {"x": -400.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636206, "virtual_time_s": 3632.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 149, "wall_ts_ms": 1789194636206, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0149", "position": {"x": -400.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636206, "virtual_time_s": 3638.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 150, "wall_ts_ms": 1789194636207, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0150", "position": {"x": -400.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636207, "virtual_time_s": 3644.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 151, "wall_ts_ms": 1789194636207, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0151", "position": {"x": -400.0, "y": -1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636207, "virtual_time_s": 3650.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 152, "wall_ts_ms": 1789194636208, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0152", "position": {"x": -400.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636208, "virtual_time_s": 3656.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 153, "wall_ts_ms": 1789194636209, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0153", "position": {"x": -400.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636209, "virtual_time_s": 3662.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 154, "wall_ts_ms": 1789194636209, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0154", "position": {"x": -400.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636209, "virtual_time_s": 3668.734674, "measure_result": "direction", "svd_deg": 145.14}} +{"event": "action", "seq": 155, "wall_ts_ms": 1789194636236, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0155", "position": {"x": -400.0, "y": -1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636236, "virtual_time_s": 3674.734674, "measure_result": "no_signal"}} +{"event": "action", "seq": 156, "wall_ts_ms": 1789194636328, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0156", "position": {"x": -775.54570912096, "y": -1588.4054929601093}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636328, "virtual_time_s": 3766.945303, "measure_result": "direction", "svd_deg": 139.93}} +{"event": "action", "seq": 157, "wall_ts_ms": 1789194636374, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0157", "position": {"x": -1106.9599212316098, "y": -1333.478643576927}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636374, "virtual_time_s": 3855.569003, "measure_result": "direction", "svd_deg": 107.96}} +{"event": "action", "seq": 158, "wall_ts_ms": 1789194636375, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0158", "position": {"x": -1118.1326115441632, "y": -1299.9115395336312}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789194636375, "virtual_time_s": 3867.644537, "clear_result": "success"}} +{"event": "action", "seq": 159, "wall_ts_ms": 1789194636376, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0159", "position": {"x": -1500.0, "y": -1300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636376, "virtual_time_s": 3950.018017, "measure_result": "no_signal"}} +{"event": "action", "seq": 160, "wall_ts_ms": 1789194636376, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0160", "position": {"x": -1500.0, "y": -1300.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636376, "virtual_time_s": 3956.018017, "measure_result": "no_signal"}} +{"event": "action", "seq": 161, "wall_ts_ms": 1789194636377, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0161", "position": {"x": -1500.0, "y": -1300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636377, "virtual_time_s": 3962.018017, "measure_result": "no_signal"}} +{"event": "action", "seq": 162, "wall_ts_ms": 1789194636377, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0162", "position": {"x": -1500.0, "y": -1300.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636377, "virtual_time_s": 3968.018017, "measure_result": "no_signal"}} +{"event": "action", "seq": 163, "wall_ts_ms": 1789194636378, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0163", "position": {"x": -1500.0, "y": -1300.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636378, "virtual_time_s": 3974.018017, "measure_result": "no_signal"}} +{"event": "action", "seq": 164, "wall_ts_ms": 1789194636378, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0164", "position": {"x": -1500.0, "y": -1300.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636378, "virtual_time_s": 3980.018017, "measure_result": "no_signal"}} +{"event": "action", "seq": 165, "wall_ts_ms": 1789194636379, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0165", "position": {"x": -1500.0, "y": -1300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636379, "virtual_time_s": 3986.018017, "measure_result": "direction", "svd_deg": 85.3}} +{"event": "action", "seq": 166, "wall_ts_ms": 1789194636499, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0166", "position": {"x": -1427.5768668723379, "y": -727.495607285851}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636499, "virtual_time_s": 4106.431429, "measure_result": "direction", "svd_deg": 106.81}} +{"event": "action", "seq": 167, "wall_ts_ms": 1789194636511, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0167", "position": {"x": -1447.8184353139202, "y": -675.4435778612119}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636511, "virtual_time_s": 4122.601272, "measure_result": "direction", "svd_deg": 76.37}} +{"event": "action", "seq": 168, "wall_ts_ms": 1789194636512, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0168", "position": {"x": -1445.8142316177564, "y": -666.9959638418626}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789194636512, "virtual_time_s": 4129.337694, "clear_result": "success"}} +{"event": "action", "seq": 169, "wall_ts_ms": 1789194636513, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0169", "position": {"x": -1700.0, "y": -500.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636513, "virtual_time_s": 4196.16468, "measure_result": "no_signal"}} +{"event": "action", "seq": 170, "wall_ts_ms": 1789194636515, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0170", "position": {"x": -1700.0, "y": -500.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636515, "virtual_time_s": 4202.16468, "measure_result": "no_signal"}} +{"event": "action", "seq": 171, "wall_ts_ms": 1789194636516, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0171", "position": {"x": -1700.0, "y": -500.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636516, "virtual_time_s": 4208.16468, "measure_result": "no_signal"}} +{"event": "action", "seq": 172, "wall_ts_ms": 1789194636517, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0172", "position": {"x": -1700.0, "y": -500.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636517, "virtual_time_s": 4214.16468, "measure_result": "no_signal"}} +{"event": "action", "seq": 173, "wall_ts_ms": 1789194636518, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0173", "position": {"x": -1700.0, "y": -500.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636518, "virtual_time_s": 4220.16468, "measure_result": "no_signal"}} +{"event": "action", "seq": 174, "wall_ts_ms": 1789194636518, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0174", "position": {"x": -1700.0, "y": -500.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636518, "virtual_time_s": 4226.16468, "measure_result": "no_signal"}} +{"event": "action", "seq": 175, "wall_ts_ms": 1789194636519, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0175", "position": {"x": -1800.0, "y": -300.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636519, "virtual_time_s": 4275.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 176, "wall_ts_ms": 1789194636519, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0176", "position": {"x": -1800.0, "y": -300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636519, "virtual_time_s": 4281.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 177, "wall_ts_ms": 1789194636520, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0177", "position": {"x": -1800.0, "y": -300.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636520, "virtual_time_s": 4287.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 178, "wall_ts_ms": 1789194636520, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0178", "position": {"x": -1800.0, "y": -300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636520, "virtual_time_s": 4293.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 179, "wall_ts_ms": 1789194636521, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0179", "position": {"x": -1800.0, "y": -300.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636521, "virtual_time_s": 4299.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 180, "wall_ts_ms": 1789194636521, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0180", "position": {"x": -1800.0, "y": -300.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636521, "virtual_time_s": 4305.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 181, "wall_ts_ms": 1789194636522, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0181", "position": {"x": -1800.0, "y": 400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636522, "virtual_time_s": 4450.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 182, "wall_ts_ms": 1789194636523, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0182", "position": {"x": -1800.0, "y": 400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636523, "virtual_time_s": 4456.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 183, "wall_ts_ms": 1789194636523, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0183", "position": {"x": -1800.0, "y": 400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636523, "virtual_time_s": 4462.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 184, "wall_ts_ms": 1789194636524, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0184", "position": {"x": -1800.0, "y": 400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636524, "virtual_time_s": 4468.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 185, "wall_ts_ms": 1789194636524, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0185", "position": {"x": -1800.0, "y": 400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636524, "virtual_time_s": 4474.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 186, "wall_ts_ms": 1789194636525, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0186", "position": {"x": -1800.0, "y": 400.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636525, "virtual_time_s": 4480.88604, "measure_result": "no_signal"}} +{"event": "action", "seq": 187, "wall_ts_ms": 1789194636536, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0187", "position": {"x": -1200.0, "y": 700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636536, "virtual_time_s": 4620.050119, "measure_result": "no_signal"}} +{"event": "action", "seq": 188, "wall_ts_ms": 1789194636537, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0188", "position": {"x": -1200.0, "y": 700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636537, "virtual_time_s": 4626.050119, "measure_result": "no_signal"}} +{"event": "action", "seq": 189, "wall_ts_ms": 1789194636537, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0189", "position": {"x": -1200.0, "y": 700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636537, "virtual_time_s": 4632.050119, "measure_result": "no_signal"}} +{"event": "action", "seq": 190, "wall_ts_ms": 1789194636538, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0190", "position": {"x": -1200.0, "y": 700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636538, "virtual_time_s": 4638.050119, "measure_result": "no_signal"}} +{"event": "action", "seq": 191, "wall_ts_ms": 1789194636538, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0191", "position": {"x": -1200.0, "y": 700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636538, "virtual_time_s": 4644.050119, "measure_result": "direction", "svd_deg": 18.39}} +{"event": "action", "seq": 192, "wall_ts_ms": 1789194636567, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0192", "position": {"x": -1200.0, "y": 700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636567, "virtual_time_s": 4650.050119, "measure_result": "no_signal"}} +{"event": "action", "seq": 193, "wall_ts_ms": 1789194636687, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0193", "position": {"x": -863.3928275483106, "y": 937.1430180565037}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636687, "virtual_time_s": 4738.400881, "measure_result": "direction", "svd_deg": 5.94}} +{"event": "action", "seq": 194, "wall_ts_ms": 1789194636711, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0194", "position": {"x": -357.3796078446857, "y": 998.3699793371476}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636711, "virtual_time_s": 4845.341672, "measure_result": "direction", "svd_deg": 322.67}} +{"event": "action", "seq": 195, "wall_ts_ms": 1789194636712, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0195", "position": {"x": -345.9561140083965, "y": 989.9291675457919}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789194636712, "virtual_time_s": 4853.182401, "clear_result": "success"}} +{"event": "action", "seq": 196, "wall_ts_ms": 1789194636713, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0196", "position": {"x": -200.0, "y": 900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636713, "virtual_time_s": 4893.469683, "measure_result": "no_signal"}} +{"event": "action", "seq": 197, "wall_ts_ms": 1789194636713, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0197", "position": {"x": -200.0, "y": 900.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636713, "virtual_time_s": 4899.469683, "measure_result": "no_signal"}} +{"event": "action", "seq": 198, "wall_ts_ms": 1789194636714, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0198", "position": {"x": -200.0, "y": 900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636714, "virtual_time_s": 4905.469683, "measure_result": "no_signal"}} +{"event": "action", "seq": 199, "wall_ts_ms": 1789194636715, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0199", "position": {"x": -200.0, "y": 900.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636715, "virtual_time_s": 4911.469683, "measure_result": "no_signal"}} +{"event": "action", "seq": 200, "wall_ts_ms": 1789194636715, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0200", "position": {"x": -200.0, "y": 900.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636715, "virtual_time_s": 4917.469683, "measure_result": "no_signal"}} +{"event": "action", "seq": 201, "wall_ts_ms": 1789194636716, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0201", "position": {"x": -500.0, "y": 700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636716, "virtual_time_s": 4994.580709, "measure_result": "no_signal"}} +{"event": "action", "seq": 202, "wall_ts_ms": 1789194636716, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0202", "position": {"x": -500.0, "y": 700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636716, "virtual_time_s": 5000.580709, "measure_result": "no_signal"}} +{"event": "action", "seq": 203, "wall_ts_ms": 1789194636717, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0203", "position": {"x": -500.0, "y": 700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636717, "virtual_time_s": 5006.580709, "measure_result": "no_signal"}} +{"event": "action", "seq": 204, "wall_ts_ms": 1789194636717, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0204", "position": {"x": -500.0, "y": 700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636717, "virtual_time_s": 5012.580709, "measure_result": "no_signal"}} +{"event": "action", "seq": 205, "wall_ts_ms": 1789194636718, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0205", "position": {"x": -500.0, "y": 700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636718, "virtual_time_s": 5018.580709, "measure_result": "no_signal"}} +{"event": "action", "seq": 206, "wall_ts_ms": 1789194636719, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0206", "position": {"x": -800.0, "y": -200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636719, "virtual_time_s": 5213.317369, "measure_result": "no_signal"}} +{"event": "action", "seq": 207, "wall_ts_ms": 1789194636719, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0207", "position": {"x": -800.0, "y": -200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636719, "virtual_time_s": 5219.317369, "measure_result": "no_signal"}} +{"event": "action", "seq": 208, "wall_ts_ms": 1789194636720, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0208", "position": {"x": -800.0, "y": -200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636720, "virtual_time_s": 5225.317369, "measure_result": "no_signal"}} +{"event": "action", "seq": 209, "wall_ts_ms": 1789194636720, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0209", "position": {"x": -800.0, "y": -200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636720, "virtual_time_s": 5231.317369, "measure_result": "no_signal"}} +{"event": "action", "seq": 210, "wall_ts_ms": 1789194636721, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0210", "position": {"x": -800.0, "y": -200.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636721, "virtual_time_s": 5237.317369, "measure_result": "no_signal"}} +{"event": "action", "seq": 211, "wall_ts_ms": 1789194636721, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0211", "position": {"x": -700.0, "y": -700.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636721, "virtual_time_s": 5344.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 212, "wall_ts_ms": 1789194636722, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0212", "position": {"x": -700.0, "y": -700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636722, "virtual_time_s": 5350.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 213, "wall_ts_ms": 1789194636722, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0213", "position": {"x": -700.0, "y": -700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636722, "virtual_time_s": 5356.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 214, "wall_ts_ms": 1789194636723, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0214", "position": {"x": -700.0, "y": -700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636723, "virtual_time_s": 5362.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 215, "wall_ts_ms": 1789194636723, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0215", "position": {"x": -700.0, "y": -700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636723, "virtual_time_s": 5368.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 216, "wall_ts_ms": 1789194636724, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0216", "position": {"x": -700.0, "y": -1200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636724, "virtual_time_s": 5473.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 217, "wall_ts_ms": 1789194636725, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0217", "position": {"x": -700.0, "y": -1200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636724, "virtual_time_s": 5479.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 218, "wall_ts_ms": 1789194636725, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0218", "position": {"x": -700.0, "y": -1200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636725, "virtual_time_s": 5485.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 219, "wall_ts_ms": 1789194636726, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0219", "position": {"x": -700.0, "y": -1200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636726, "virtual_time_s": 5491.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 220, "wall_ts_ms": 1789194636726, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0220", "position": {"x": -700.0, "y": -1200.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636726, "virtual_time_s": 5497.297759, "measure_result": "no_signal"}} +{"event": "action", "seq": 221, "wall_ts_ms": 1789194636727, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0221", "position": {"x": -900.0, "y": -2100.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636727, "virtual_time_s": 5686.688648, "measure_result": "no_signal"}} +{"event": "action", "seq": 222, "wall_ts_ms": 1789194636727, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0222", "position": {"x": -900.0, "y": -2100.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636727, "virtual_time_s": 5692.688648, "measure_result": "no_signal"}} +{"event": "action", "seq": 223, "wall_ts_ms": 1789194636728, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0223", "position": {"x": -900.0, "y": -2100.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636728, "virtual_time_s": 5698.688648, "measure_result": "no_signal"}} +{"event": "action", "seq": 224, "wall_ts_ms": 1789194636728, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0224", "position": {"x": -900.0, "y": -2100.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636728, "virtual_time_s": 5704.688648, "measure_result": "no_signal"}} +{"event": "action", "seq": 225, "wall_ts_ms": 1789194636729, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0225", "position": {"x": -900.0, "y": -2100.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636729, "virtual_time_s": 5710.688648, "measure_result": "no_signal"}} +{"event": "action", "seq": 226, "wall_ts_ms": 1789194636729, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0226", "position": {"x": 200.0, "y": -900.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636729, "virtual_time_s": 6041.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 227, "wall_ts_ms": 1789194636730, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0227", "position": {"x": 200.0, "y": -900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636730, "virtual_time_s": 6047.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 228, "wall_ts_ms": 1789194636730, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0228", "position": {"x": 200.0, "y": -900.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636730, "virtual_time_s": 6053.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 229, "wall_ts_ms": 1789194636731, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0229", "position": {"x": 200.0, "y": -900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636731, "virtual_time_s": 6059.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 230, "wall_ts_ms": 1789194636731, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0230", "position": {"x": 200.0, "y": -900.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636731, "virtual_time_s": 6065.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 231, "wall_ts_ms": 1789194636732, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0231", "position": {"x": 1800.0, "y": 300.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636732, "virtual_time_s": 6470.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 232, "wall_ts_ms": 1789194636732, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0232", "position": {"x": 1800.0, "y": 300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636732, "virtual_time_s": 6476.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 233, "wall_ts_ms": 1789194636733, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0233", "position": {"x": 1800.0, "y": 300.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636733, "virtual_time_s": 6482.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 234, "wall_ts_ms": 1789194636733, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0234", "position": {"x": 1800.0, "y": 300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636733, "virtual_time_s": 6488.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 235, "wall_ts_ms": 1789194636734, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0235", "position": {"x": 1800.0, "y": 300.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636734, "virtual_time_s": 6494.26506, "measure_result": "no_signal"}} +{"event": "action", "seq": 236, "wall_ts_ms": 1789194636734, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0236", "position": {"x": 1300.0, "y": 1100.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636734, "virtual_time_s": 6687.944683, "measure_result": "no_signal"}} +{"event": "action", "seq": 237, "wall_ts_ms": 1789194636735, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0237", "position": {"x": 1300.0, "y": 1100.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636735, "virtual_time_s": 6693.944683, "measure_result": "no_signal"}} +{"event": "action", "seq": 238, "wall_ts_ms": 1789194636735, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0238", "position": {"x": 1300.0, "y": 1100.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636735, "virtual_time_s": 6699.944683, "measure_result": "no_signal"}} +{"event": "action", "seq": 239, "wall_ts_ms": 1789194636736, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0239", "position": {"x": 1300.0, "y": 1100.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636735, "virtual_time_s": 6705.944683, "measure_result": "no_signal"}} +{"event": "action", "seq": 240, "wall_ts_ms": 1789194636736, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0240", "position": {"x": 1300.0, "y": 1100.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636736, "virtual_time_s": 6711.944683, "measure_result": "no_signal"}} +{"event": "action", "seq": 241, "wall_ts_ms": 1789194636737, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0241", "position": {"x": 1500.0, "y": 1300.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636737, "virtual_time_s": 6773.513225, "measure_result": "no_signal"}} +{"event": "action", "seq": 242, "wall_ts_ms": 1789194636737, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0242", "position": {"x": 1500.0, "y": 1300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636737, "virtual_time_s": 6779.513225, "measure_result": "no_signal"}} +{"event": "action", "seq": 243, "wall_ts_ms": 1789194636738, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0243", "position": {"x": 1500.0, "y": 1300.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636738, "virtual_time_s": 6785.513225, "measure_result": "no_signal"}} +{"event": "action", "seq": 244, "wall_ts_ms": 1789194636738, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0244", "position": {"x": 1500.0, "y": 1300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636738, "virtual_time_s": 6791.513225, "measure_result": "no_signal"}} +{"event": "action", "seq": 245, "wall_ts_ms": 1789194636738, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0245", "position": {"x": 1500.0, "y": 1300.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636738, "virtual_time_s": 6797.513225, "measure_result": "no_signal"}} +{"event": "action", "seq": 246, "wall_ts_ms": 1789194636739, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0246", "position": {"x": 600.0, "y": 1900.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636739, "virtual_time_s": 7018.846302, "measure_result": "no_signal"}} +{"event": "action", "seq": 247, "wall_ts_ms": 1789194636739, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0247", "position": {"x": 600.0, "y": 1900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636739, "virtual_time_s": 7024.846302, "measure_result": "no_signal"}} +{"event": "action", "seq": 248, "wall_ts_ms": 1789194636740, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0248", "position": {"x": 600.0, "y": 1900.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636740, "virtual_time_s": 7030.846302, "measure_result": "no_signal"}} +{"event": "action", "seq": 249, "wall_ts_ms": 1789194636740, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0249", "position": {"x": 600.0, "y": 1900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636740, "virtual_time_s": 7036.846302, "measure_result": "no_signal"}} +{"event": "action", "seq": 250, "wall_ts_ms": 1789194636741, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0250", "position": {"x": 600.0, "y": 1900.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636741, "virtual_time_s": 7042.846302, "measure_result": "no_signal"}} +{"event": "action", "seq": 251, "wall_ts_ms": 1789194636741, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0251", "position": {"x": 400.0, "y": 1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636741, "virtual_time_s": 7092.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 252, "wall_ts_ms": 1789194636742, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0252", "position": {"x": 400.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636742, "virtual_time_s": 7098.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 253, "wall_ts_ms": 1789194636742, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0253", "position": {"x": 400.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636742, "virtual_time_s": 7104.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 254, "wall_ts_ms": 1789194636743, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0254", "position": {"x": 400.0, "y": 1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636743, "virtual_time_s": 7110.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 255, "wall_ts_ms": 1789194636743, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0255", "position": {"x": 400.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636743, "virtual_time_s": 7116.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 256, "wall_ts_ms": 1789194636744, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0256", "position": {"x": -400.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636744, "virtual_time_s": 7281.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 257, "wall_ts_ms": 1789194636744, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0257", "position": {"x": -400.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636744, "virtual_time_s": 7287.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 258, "wall_ts_ms": 1789194636745, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0258", "position": {"x": -400.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636745, "virtual_time_s": 7293.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 259, "wall_ts_ms": 1789194636745, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0259", "position": {"x": -400.0, "y": 1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636745, "virtual_time_s": 7299.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 260, "wall_ts_ms": 1789194636746, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0260", "position": {"x": -400.0, "y": 1800.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636746, "virtual_time_s": 7305.567662, "measure_result": "no_signal"}} +{"event": "action", "seq": 261, "wall_ts_ms": 1789194636746, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0261", "position": {"x": -1300.0, "y": 1500.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636746, "virtual_time_s": 7500.304322, "measure_result": "no_signal"}} +{"event": "action", "seq": 262, "wall_ts_ms": 1789194636747, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0262", "position": {"x": -1300.0, "y": 1500.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636747, "virtual_time_s": 7506.304322, "measure_result": "no_signal"}} +{"event": "action", "seq": 263, "wall_ts_ms": 1789194636747, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0263", "position": {"x": -1300.0, "y": 1500.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636747, "virtual_time_s": 7512.304322, "measure_result": "no_signal"}} +{"event": "action", "seq": 264, "wall_ts_ms": 1789194636748, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0264", "position": {"x": -1300.0, "y": 1500.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636748, "virtual_time_s": 7518.304322, "measure_result": "no_signal"}} +{"event": "action", "seq": 265, "wall_ts_ms": 1789194636748, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0265", "position": {"x": -1300.0, "y": 1500.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636748, "virtual_time_s": 7524.304322, "measure_result": "no_signal"}} +{"event": "action", "seq": 266, "wall_ts_ms": 1789194636749, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0266", "position": {"x": -2500.0, "y": 500.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789194636749, "virtual_time_s": 7841.714309, "measure_result": "no_signal"}} +{"event": "action", "seq": 267, "wall_ts_ms": 1789194636749, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0267", "position": {"x": -2500.0, "y": 500.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789194636749, "virtual_time_s": 7847.714309, "measure_result": "no_signal"}} +{"event": "action", "seq": 268, "wall_ts_ms": 1789194636750, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0268", "position": {"x": -2500.0, "y": 500.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789194636750, "virtual_time_s": 7853.714309, "measure_result": "no_signal"}} +{"event": "action", "seq": 269, "wall_ts_ms": 1789194636750, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0269", "position": {"x": -2500.0, "y": 500.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789194636750, "virtual_time_s": 7859.714309, "measure_result": "no_signal"}} +{"event": "action", "seq": 270, "wall_ts_ms": 1789194636751, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0270", "position": {"x": -2500.0, "y": 500.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789194636751, "virtual_time_s": 7865.714309, "measure_result": "no_signal"}} +{"event": "action", "seq": 271, "wall_ts_ms": 1789194636751, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "ac9ebaf1981c-0271"}, "response": {"accepted": true, "real_timestamp_ms": 1789194636751, "virtual_time_s": 7865.714309, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 7865.714309, "real_elapsed_s": 10.450974, "request_count": 271, "cleared_count": 15} diff --git a/referee-data/sessions/TX7X-UUR6-Y4UV-MUUB/meta.json b/referee-data/sessions/TX7X-UUR6-Y4UV-MUUB/meta.json new file mode 100644 index 0000000..8652350 --- /dev/null +++ b/referee-data/sessions/TX7X-UUR6-Y4UV-MUUB/meta.json @@ -0,0 +1,128 @@ +{ + "case_code": "TX7X-UUR6-Y4UV-MUUB", + "module": "q4_practice", + "robot_id": "1", + "seed": 929064884, + "truth": [ + { + "channel": 11, + "x": -346.0952285856926, + "y": 989.9145923610024, + "r_eff_m": 1191.1186338701666, + "directional": true, + "heading_deg": 159.16176801694468 + }, + { + "channel": 4, + "x": 1257.5970122653036, + "y": 708.5794688738446, + "r_eff_m": 1282.7900042652702, + "directional": true, + "heading_deg": 154.8024123492864 + }, + { + "channel": 2, + "x": 1247.2180811445091, + "y": 827.963811693902, + "r_eff_m": 1438.3112261396586, + "directional": true, + "heading_deg": 107.25471794541161 + }, + { + "channel": 17, + "x": -1445.4112663857652, + "y": -666.0557096868885, + "r_eff_m": 1480.701942576361, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 19, + "x": 740.6271606649069, + "y": 1455.1536399428974, + "r_eff_m": 1466.0899211603937, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": -1113.8988244234347, + "y": -1311.046678312703, + "r_eff_m": 1075.9228215068247, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": 4.704690796209142, + "y": 491.99358548417763, + "r_eff_m": 1355.6451542681552, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 5, + "x": 1348.5869421581046, + "y": 859.496070323148, + "r_eff_m": 1401.497166204074, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": -996.9311591277022, + "y": -484.06258446248745, + "r_eff_m": 1186.0180321765483, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": 1500.1830623826106, + "y": -930.8255328807501, + "r_eff_m": 1295.214809419549, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": 304.72552422856904, + "y": 1040.2786845859162, + "r_eff_m": 1311.2305594784523, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": -140.7329097694391, + "y": 428.97148149422145, + "r_eff_m": 1311.8628957838528, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": 1194.2366952711407, + "y": -881.3087874452754, + "r_eff_m": 1099.1448946730875, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": 955.5810703522162, + "y": 531.3505462907465, + "r_eff_m": 1032.284212437818, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 18, + "x": -1134.4903153396365, + "y": -120.51927284530734, + "r_eff_m": 1277.1076111276584, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/TYR8-GWY6-RTT5-CUU5/log.jsonl b/referee-data/sessions/TYR8-GWY6-RTT5-CUU5/log.jsonl new file mode 100644 index 0000000..dc2f6a5 --- /dev/null +++ b/referee-data/sessions/TYR8-GWY6-RTT5-CUU5/log.jsonl @@ -0,0 +1,122 @@ +{"event": "session_start", "case_code": "TYR8-GWY6-RTT5-CUU5", "module": "q3_practice", "robot_id": "1", "seed": 1774138957, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 5, "x": -573.9508082230632, "y": 511.816484363508, "r_eff_m": 1191.6310718359277, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": -195.06751210327303, "y": 1595.5151385610077, "r_eff_m": 1174.9240188716697, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": -521.590776713547, "y": 1073.6578503090748, "r_eff_m": 1360.5209504906595, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": 380.12986035557594, "y": 176.90949594533467, "r_eff_m": 1438.723565236096, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": -1519.7740438296719, "y": -297.4265664451192, "r_eff_m": 1170.4688406061734, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": 466.8598445442655, "y": -924.72297953971, "r_eff_m": 1001.235554487661, "directional": false, "heading_deg": 0.0}, {"channel": 3, "x": -8.410611537419632, "y": 610.8245279736681, "r_eff_m": 1291.9306462297366, "directional": false, "heading_deg": 0.0}, {"channel": 14, "x": -690.5268534391013, "y": 639.2869028716582, "r_eff_m": 1423.016084631462, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": -1340.4889838721895, "y": 245.799641536199, "r_eff_m": 1038.017674063789, "directional": false, "heading_deg": 0.0}, {"channel": 19, "x": -1374.9352083787826, "y": 399.19724221918614, "r_eff_m": 1173.7915749303015, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": -1662.121049862249, "y": -277.1992882300525, "r_eff_m": 1119.5922327712537, "directional": false, "heading_deg": 0.0}, {"channel": 12, "x": -747.9507589421428, "y": -374.08156550931204, "r_eff_m": 1091.6739323622166, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": 1672.2176366384522, "y": 521.8474646373385, "r_eff_m": 1493.299904394122, "directional": false, "heading_deg": 0.0}, {"channel": 17, "x": -346.5315509606044, "y": 1334.7146570687396, "r_eff_m": 1300.8688824523067, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": -640.807876246101, "y": -783.1062706024456, "r_eff_m": 1343.7954251248743, "directional": false, "heading_deg": 0.0}, {"channel": 18, "x": -900.3439447267083, "y": -1294.3077902966577, "r_eff_m": 1009.4056920721855, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789178171744, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789178171744, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789178171751, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178171751, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789178171757, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178171757, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789178171761, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178171761, "virtual_time_s": 17.0, "measure_result": "direction", "svd_deg": 90.63}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789178171794, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178171794, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789178171798, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178171798, "virtual_time_s": 29.0, "measure_result": "direction", "svd_deg": 139.25}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789178171829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178171829, "virtual_time_s": 35.0, "measure_result": "direction", "svd_deg": 116.85}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789178171861, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178171861, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789178171866, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178171866, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789178171870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178171870, "virtual_time_s": 53.0, "measure_result": "direction", "svd_deg": 230.72}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789178171909, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178171909, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789178171915, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178171915, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789178171922, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178171922, "virtual_time_s": 71.0, "measure_result": "direction", "svd_deg": 207.36}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789178171968, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789178171968, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 25.46}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789178172008, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789178172008, "virtual_time_s": 83.0, "measure_result": "direction", "svd_deg": 136.43}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789178172049, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178172049, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789178172055, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178172055, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789178172061, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178172061, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789178172066, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178172066, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789178172071, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178172071, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789178172076, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172076, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789178172110, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0022", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172110, "virtual_time_s": 355.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789178172114, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0023", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178172114, "virtual_time_s": 361.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789178172120, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0024", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178172120, "virtual_time_s": 367.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789178172125, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0025", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178172125, "virtual_time_s": 373.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789178172130, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0026", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178172130, "virtual_time_s": 379.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789178172135, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0027", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178172135, "virtual_time_s": 385.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789178172139, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0028", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178172139, "virtual_time_s": 391.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789178172142, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0029", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178172142, "virtual_time_s": 397.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789178172146, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0030", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178172146, "virtual_time_s": 403.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789178172151, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0031", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178172151, "virtual_time_s": 409.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789178172154, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0032", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178172154, "virtual_time_s": 415.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789178172157, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0033", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178172157, "virtual_time_s": 421.94, "measure_result": "direction", "svd_deg": 221.25}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789178172178, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0034", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178172178, "virtual_time_s": 427.94, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789178172209, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0035", "position": {"x": -1022.5329611794161, "y": -1030.524751033619}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178172209, "virtual_time_s": 522.631462, "measure_result": "direction", "svd_deg": 295.53}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789178172212, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0036", "position": {"x": -904.3618631534317, "y": -1278.3045476294355}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178172212, "virtual_time_s": 582.534735, "clear_result": "success"}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789178172237, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0037", "position": {"x": -727.9304573237391, "y": -586.9934442645894}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178172237, "virtual_time_s": 731.228685, "measure_result": "direction", "svd_deg": 95.13}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789178172240, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0038", "position": {"x": -745.5641424460284, "y": -387.1871305254415}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178172240, "virtual_time_s": 776.34527, "clear_result": "success"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789178172242, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0039", "position": {"x": -745.5641424460284, "y": -387.1871305254415}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178172242, "virtual_time_s": 782.34527, "measure_result": "direction", "svd_deg": 283.93}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789178172262, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0040", "position": {"x": -646.0359839921024, "y": -790.4873161798846}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178172262, "virtual_time_s": 870.425206, "measure_result": "direction", "svd_deg": 54.0}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789178172264, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0041", "position": {"x": -646.0359839921024, "y": -790.4873161798846}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178172264, "virtual_time_s": 875.425206, "clear_result": "success"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789178172285, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0042", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178172285, "virtual_time_s": 1069.969198, "measure_result": "no_signal"}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789178172288, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0043", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178172288, "virtual_time_s": 1075.969198, "measure_result": "direction", "svd_deg": 209.03}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789178172309, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0044", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178172309, "virtual_time_s": 1081.969198, "measure_result": "no_signal"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789178172313, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0045", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178172313, "virtual_time_s": 1087.969198, "measure_result": "no_signal"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789178172317, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0046", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178172317, "virtual_time_s": 1093.969198, "measure_result": "direction", "svd_deg": 220.32}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789178172337, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0047", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178172337, "virtual_time_s": 1099.969198, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789178172340, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0048", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178172340, "virtual_time_s": 1105.969198, "measure_result": "direction", "svd_deg": 126.89}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789178172357, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0049", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178172357, "virtual_time_s": 1111.969198, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789178172360, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0050", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178172360, "virtual_time_s": 1117.969198, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789178172364, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0051", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178172364, "virtual_time_s": 1123.969198, "measure_result": "no_signal"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789178172366, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0052", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178172366, "virtual_time_s": 1129.969198, "measure_result": "direction", "svd_deg": 118.38}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789178172381, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0053", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172381, "virtual_time_s": 1135.969198, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789178172405, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0054", "position": {"x": -1198.4981846521725, "y": 304.78282405790236}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178172405, "virtual_time_s": 1203.41767, "measure_result": "direction", "svd_deg": 150.91}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789178172406, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0055", "position": {"x": -1198.4981846521725, "y": 304.78282405790236}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178172406, "virtual_time_s": 1209.41767, "measure_result": "direction", "svd_deg": 232.26999999999998}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789178172407, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0056", "position": {"x": -1198.4981846521725, "y": 304.78282405790236}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178172407, "virtual_time_s": 1215.41767, "measure_result": "direction", "svd_deg": 242.28}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789178172409, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0057", "position": {"x": -1198.4981846521725, "y": 304.78282405790236}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178172409, "virtual_time_s": 1221.41767, "measure_result": "direction", "svd_deg": 202.02}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789178172425, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0058", "position": {"x": -1333.26488168762, "y": 250.3892086938299}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178172425, "virtual_time_s": 1255.483614, "clear_result": "success"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789178172427, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0059", "position": {"x": -1333.26488168762, "y": 250.3892086938299}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178172427, "virtual_time_s": 1261.483614, "measure_result": "direction", "svd_deg": 238.67000000000002}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789178172429, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0060", "position": {"x": -1333.26488168762, "y": 250.3892086938299}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178172429, "virtual_time_s": 1267.483614, "measure_result": "direction", "svd_deg": 251.26999999999998}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789178172430, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0061", "position": {"x": -1333.26488168762, "y": 250.3892086938299}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178172430, "virtual_time_s": 1273.483614, "measure_result": "direction", "svd_deg": 104.68}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789178172444, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0062", "position": {"x": -1370.4290288268485, "y": 391.7688757737647}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178172444, "virtual_time_s": 1307.720156, "clear_result": "success"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789178172458, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0063", "position": {"x": -816.0384077111247, "y": 459.6043780422413}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178172458, "virtual_time_s": 1425.425235, "measure_result": "direction", "svd_deg": 11.33}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789178172459, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0064", "position": {"x": -816.0384077111247, "y": 459.6043780422413}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178172459, "virtual_time_s": 1431.425235, "measure_result": "direction", "svd_deg": 64.77}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789178172461, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0065", "position": {"x": -816.0384077111247, "y": 459.6043780422413}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789178172461, "virtual_time_s": 1437.425235, "measure_result": "direction", "svd_deg": 54.15}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789178172472, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0066", "position": {"x": -586.7214226086801, "y": 505.18611306681953}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178172472, "virtual_time_s": 1490.185891, "measure_result": "direction", "svd_deg": 26.83}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789178172473, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0067", "position": {"x": -586.7214226086801, "y": 505.18611306681953}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178172473, "virtual_time_s": 1495.185891, "clear_result": "success"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789178172481, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0068", "position": {"x": -679.9230523181725, "y": 646.5827547895616}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789178172481, "virtual_time_s": 1534.055969, "clear_result": "success"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789178172489, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0069", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178172489, "virtual_time_s": 1614.351989, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789178172492, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0070", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178172492, "virtual_time_s": 1620.351989, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789178172495, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0071", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178172495, "virtual_time_s": 1626.351989, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789178172498, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0072", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178172498, "virtual_time_s": 1632.351989, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789178172501, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0073", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178172501, "virtual_time_s": 1638.351989, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789178172504, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0074", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178172504, "virtual_time_s": 1644.351989, "measure_result": "direction", "svd_deg": 56.35}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789178172517, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0075", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178172517, "virtual_time_s": 1650.351989, "measure_result": "direction", "svd_deg": 53.86}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789178172530, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0076", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172530, "virtual_time_s": 1656.351989, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789178172533, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0077", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178172533, "virtual_time_s": 1662.351989, "measure_result": "direction", "svd_deg": 49.64}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789178172546, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0078", "position": {"x": -535.1616811200909, "y": 1057.5373817366826}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178172546, "virtual_time_s": 1681.248906, "measure_result": "direction", "svd_deg": 50.47}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789178172548, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0079", "position": {"x": -532.4175098188499, "y": 1060.9841897803205}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178172548, "virtual_time_s": 1687.130063, "clear_result": "success"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789178172549, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0080", "position": {"x": -532.4175098188499, "y": 1060.9841897803205}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178172549, "virtual_time_s": 1693.130063, "measure_result": "direction", "svd_deg": 57.15}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789178172550, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0081", "position": {"x": -532.4175098188499, "y": 1060.9841897803205}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178172550, "virtual_time_s": 1699.130063, "measure_result": "direction", "svd_deg": 55.91}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789178172562, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0082", "position": {"x": -489.31279826883946, "y": 1424.6472829541779}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178172561, "virtual_time_s": 1778.371817, "measure_result": "direction", "svd_deg": 29.75}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789178172563, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0083", "position": {"x": -489.31279826883946, "y": 1424.6472829541779}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178172563, "virtual_time_s": 1784.371817, "measure_result": "direction", "svd_deg": 327.48}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789178172652, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0084", "position": {"x": -183.5564493591197, "y": 1600.1371128914677}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178172652, "virtual_time_s": 1860.879583, "measure_result": "direction", "svd_deg": 201.06}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789178172654, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0085", "position": {"x": -185.14375315713355, "y": 1599.493704880636}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178172654, "virtual_time_s": 1866.222133, "clear_result": "success"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789178172661, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0086", "position": {"x": -337.71672686074663, "y": 1345.0498136211488}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178172661, "virtual_time_s": 1930.558532, "clear_result": "success"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789178172668, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0087", "position": {"x": -184.66390913095088, "y": 926.7706948418804}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178172668, "virtual_time_s": 2025.638852, "measure_result": "direction", "svd_deg": 299.46}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789178172675, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0088", "position": {"x": -7.297514001564663, "y": 611.5606098726595}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178172675, "virtual_time_s": 2102.975906, "measure_result": "near"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789178172680, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0089", "position": {"x": -7.29751400156465, "y": 611.5606098726595}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178172680, "virtual_time_s": 2107.975906, "clear_result": "success"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789178172685, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0090", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178172685, "virtual_time_s": 2255.257148, "measure_result": "direction", "svd_deg": 336.83}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789178172698, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0091", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178172698, "virtual_time_s": 2261.257148, "measure_result": "no_signal"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789178172701, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0092", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178172701, "virtual_time_s": 2267.257148, "measure_result": "no_signal"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789178172704, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0093", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178172704, "virtual_time_s": 2273.257148, "measure_result": "no_signal"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789178172707, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0094", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178172707, "virtual_time_s": 2279.257148, "measure_result": "no_signal"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789178172710, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0095", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172710, "virtual_time_s": 2285.257148, "measure_result": "no_signal"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789178172721, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0096", "position": {"x": 650.7188955569911, "y": 508.10656641994916}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789178172721, "virtual_time_s": 2391.508783, "measure_result": "direction", "svd_deg": 231.04}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789178172727, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0097", "position": {"x": 389.6347253114434, "y": 186.14711197044892}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789178172727, "virtual_time_s": 2479.411819, "measure_result": "direction", "svd_deg": 224.21}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789178172729, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0098", "position": {"x": 384.7595812084055, "y": 181.56824626432336}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789178172729, "virtual_time_s": 2485.749474, "clear_result": "success"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789178172734, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0099", "position": {"x": 896.3022583102411, "y": 485.31253142832435}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178172734, "virtual_time_s": 2610.734599, "measure_result": "direction", "svd_deg": 3.4}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789178172739, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0100", "position": {"x": 1668.1737941655742, "y": 530.214122651231}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178172739, "virtual_time_s": 2770.369889, "measure_result": "direction", "svd_deg": 295.15}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789178172741, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0101", "position": {"x": 1668.1737941655742, "y": 530.214122651231}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178172741, "virtual_time_s": 2775.369889, "clear_result": "success"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789178172743, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0102", "position": {"x": 1159.7, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178172743, "virtual_time_s": 2928.294715, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789178172746, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0103", "position": {"x": 1159.7, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178172746, "virtual_time_s": 2934.294715, "measure_result": "no_signal"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789178172748, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0104", "position": {"x": 1159.7, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178172748, "virtual_time_s": 2940.294715, "measure_result": "no_signal"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789178172751, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0105", "position": {"x": 1159.7, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178172751, "virtual_time_s": 2946.294715, "measure_result": "no_signal"}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789178172753, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0106", "position": {"x": 1159.7, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172753, "virtual_time_s": 2952.294715, "measure_result": "no_signal"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789178172758, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0107", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172757, "virtual_time_s": 3189.234715, "measure_result": "direction", "svd_deg": 145.62}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789178172765, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0108", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178172765, "virtual_time_s": 3195.234715, "measure_result": "no_signal"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789178172767, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0109", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178172767, "virtual_time_s": 3201.234715, "measure_result": "no_signal"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789178172770, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0110", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178172770, "virtual_time_s": 3207.234715, "measure_result": "no_signal"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789178172772, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0111", "position": {"x": 579.8500000000001, "y": -1004.3296607688135}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178172772, "virtual_time_s": 3213.234715, "measure_result": "no_signal"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789178172779, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0112", "position": {"x": 201.96780181491366, "y": -645.6437256385627}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172778, "virtual_time_s": 3323.436549, "measure_result": "direction", "svd_deg": 314.24}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789178172783, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0113", "position": {"x": 494.66879135060697, "y": -945.0650344419719}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172783, "virtual_time_s": 3412.180681, "measure_result": "direction", "svd_deg": 143.49}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789178172788, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0114", "position": {"x": 476.08899967181617, "y": -931.2499077150492}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172788, "virtual_time_s": 3421.811302, "measure_result": "direction", "svd_deg": 144.85}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789178172789, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0115", "position": {"x": 473.1293591789802, "y": -929.0873459150212}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178172789, "virtual_time_s": 3427.544409, "clear_result": "success"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789178172792, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0116", "position": {"x": -1523.8319113092903, "y": -309.81107959316137}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178172792, "virtual_time_s": 3851.700237, "measure_result": "direction", "svd_deg": 72.53}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789178172793, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0117", "position": {"x": -1523.8319113092903, "y": -309.81107959316137}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178172793, "virtual_time_s": 3856.700237, "clear_result": "success"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789178172794, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0118", "position": {"x": -1523.8319113092903, "y": -309.81107959316137}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178172794, "virtual_time_s": 3862.700237, "measure_result": "direction", "svd_deg": 166.78}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789178172795, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0119", "position": {"x": -1648.4145877762821, "y": -280.74127573017756}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178172795, "virtual_time_s": 3893.28609, "clear_result": "success"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789178172796, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "e6941a0a3153-0120"}, "response": {"accepted": true, "real_timestamp_ms": 1789178172796, "virtual_time_s": 3893.28609, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3893.28609, "real_elapsed_s": 2.797876, "request_count": 120, "cleared_count": 16} diff --git a/referee-data/sessions/TYR8-GWY6-RTT5-CUU5/meta.json b/referee-data/sessions/TYR8-GWY6-RTT5-CUU5/meta.json new file mode 100644 index 0000000..ac665f5 --- /dev/null +++ b/referee-data/sessions/TYR8-GWY6-RTT5-CUU5/meta.json @@ -0,0 +1,136 @@ +{ + "case_code": "TYR8-GWY6-RTT5-CUU5", + "module": "q3_practice", + "robot_id": "1", + "seed": 1774138957, + "truth": [ + { + "channel": 5, + "x": -573.9508082230632, + "y": 511.816484363508, + "r_eff_m": 1191.6310718359277, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": -195.06751210327303, + "y": 1595.5151385610077, + "r_eff_m": 1174.9240188716697, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": -521.590776713547, + "y": 1073.6578503090748, + "r_eff_m": 1360.5209504906595, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": 380.12986035557594, + "y": 176.90949594533467, + "r_eff_m": 1438.723565236096, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": -1519.7740438296719, + "y": -297.4265664451192, + "r_eff_m": 1170.4688406061734, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": 466.8598445442655, + "y": -924.72297953971, + "r_eff_m": 1001.235554487661, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 3, + "x": -8.410611537419632, + "y": 610.8245279736681, + "r_eff_m": 1291.9306462297366, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 14, + "x": -690.5268534391013, + "y": 639.2869028716582, + "r_eff_m": 1423.016084631462, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": -1340.4889838721895, + "y": 245.799641536199, + "r_eff_m": 1038.017674063789, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 19, + "x": -1374.9352083787826, + "y": 399.19724221918614, + "r_eff_m": 1173.7915749303015, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": -1662.121049862249, + "y": -277.1992882300525, + "r_eff_m": 1119.5922327712537, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 12, + "x": -747.9507589421428, + "y": -374.08156550931204, + "r_eff_m": 1091.6739323622166, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": 1672.2176366384522, + "y": 521.8474646373385, + "r_eff_m": 1493.299904394122, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 17, + "x": -346.5315509606044, + "y": 1334.7146570687396, + "r_eff_m": 1300.8688824523067, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": -640.807876246101, + "y": -783.1062706024456, + "r_eff_m": 1343.7954251248743, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 18, + "x": -900.3439447267083, + "y": -1294.3077902966577, + "r_eff_m": 1009.4056920721855, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/VDHB-5CSS-HTSR-XDNG/log.jsonl b/referee-data/sessions/VDHB-5CSS-HTSR-XDNG/log.jsonl new file mode 100644 index 0000000..32b09a5 --- /dev/null +++ b/referee-data/sessions/VDHB-5CSS-HTSR-XDNG/log.jsonl @@ -0,0 +1,444 @@ +{"event": "session_start", "case_code": "VDHB-5CSS-HTSR-XDNG", "module": "q3_practice", "robot_id": "1", "seed": 105574083, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 14, "x": 856.6576709825006, "y": 155.34806194253457, "r_eff_m": 1140.1530721319214, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": -865.9125118641814, "y": 1442.8167017896603, "r_eff_m": 1244.5565001541352, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": 319.1053637544684, "y": 458.692968643061, "r_eff_m": 1091.2695108033713, "directional": false, "heading_deg": 0.0}, {"channel": 9, "x": -563.1737796657975, "y": 739.4365839088623, "r_eff_m": 1142.274653364676, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": -567.6125600333169, "y": -1425.1832055144764, "r_eff_m": 1116.8710584691612, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": -127.9221699731196, "y": 1321.5498823658088, "r_eff_m": 1099.2301991165552, "directional": false, "heading_deg": 0.0}, {"channel": 17, "x": -461.35901946709356, "y": -1443.421966352216, "r_eff_m": 1465.4750566774844, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": 734.3701319315119, "y": -327.11727905171244, "r_eff_m": 1099.8705279792375, "directional": false, "heading_deg": 0.0}, {"channel": 2, "x": -487.11614059930804, "y": -1689.7596378515718, "r_eff_m": 1133.7343047583447, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": -1276.209986977157, "y": 353.10637806882784, "r_eff_m": 1399.2534399355732, "directional": false, "heading_deg": 0.0}, {"channel": 5, "x": -1338.2418947443434, "y": 925.2249398194417, "r_eff_m": 1009.6649995728642, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789178183828, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789178183828, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789178183829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178183829, "virtual_time_s": 5.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789178183830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178183830, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789178183831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178183831, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789178183831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178183831, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789178183832, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178183832, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789178183833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178183833, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789178183834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178183834, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789178183834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178183834, "virtual_time_s": 47.0, "measure_result": "direction", "svd_deg": 55.97}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789178183870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178183870, "virtual_time_s": 53.0, "measure_result": "direction", "svd_deg": 126.92}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789178183909, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178183909, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789178183910, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178183910, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789178183911, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178183911, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789178183911, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789178183911, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 336.92}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789178183948, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789178183948, "virtual_time_s": 83.0, "measure_result": "direction", "svd_deg": 9.84}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789178183986, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178183986, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789178183987, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178183987, "virtual_time_s": 95.0, "measure_result": "direction", "svd_deg": 165.31}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789178184024, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178184024, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789178184025, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178184025, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789178184026, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178184025, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789178184026, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178184026, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789178184145, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0022", "position": {"x": 79.56822065795052, "y": 69.09937127187106}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184145, "virtual_time_s": 146.076835, "measure_result": "direction", "svd_deg": 133.13}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789178184203, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0023", "position": {"x": -284.8256370690821, "y": 492.292262818209}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184203, "virtual_time_s": 262.768394, "measure_result": "direction", "svd_deg": 138.81}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789178184229, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0024", "position": {"x": -432.6840702212402, "y": 610.0866954756438}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184229, "virtual_time_s": 305.5772, "measure_result": "direction", "svd_deg": 134.41}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789178184258, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0025", "position": {"x": -432.6840702212402, "y": 610.0866954756438}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184258, "virtual_time_s": 310.5772, "measure_result": "direction", "svd_deg": 134.41}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789178184291, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0026", "position": {"x": -432.6840702212402, "y": 610.0866954756438}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184291, "virtual_time_s": 315.5772, "measure_result": "direction", "svd_deg": 134.41}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789178184321, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0027", "position": {"x": -432.6840702212402, "y": 610.0866954756438}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184321, "virtual_time_s": 320.5772, "measure_result": "direction", "svd_deg": 134.41}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789178184350, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0028", "position": {"x": -432.6840702212402, "y": 610.0866954756438}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184350, "virtual_time_s": 325.5772, "measure_result": "direction", "svd_deg": 134.41}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789178184380, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0029", "position": {"x": -432.6840702212402, "y": 610.0866954756438}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184380, "virtual_time_s": 330.5772, "measure_result": "direction", "svd_deg": 134.41}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789178184381, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0030", "position": {"x": -470.0, "y": 650.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184381, "virtual_time_s": 344.505238, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789178184382, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0031", "position": {"x": -490.0, "y": 650.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184382, "virtual_time_s": 351.505238, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789178184383, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0032", "position": {"x": -490.0, "y": 670.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184383, "virtual_time_s": 358.505238, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789178184384, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0033", "position": {"x": -510.0, "y": 670.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184384, "virtual_time_s": 365.505238, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789178184384, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0034", "position": {"x": -510.0, "y": 690.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184384, "virtual_time_s": 372.505238, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789178184385, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0035", "position": {"x": -530.0, "y": 690.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184385, "virtual_time_s": 379.505238, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789178184386, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0036", "position": {"x": -530.0, "y": 710.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184386, "virtual_time_s": 386.505238, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789178184387, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0037", "position": {"x": -550.0, "y": 710.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184386, "virtual_time_s": 393.505238, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789178184388, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0038", "position": {"x": -550.0, "y": 730.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789178184388, "virtual_time_s": 402.505238, "clear_result": "success"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789178184531, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0039", "position": {"x": -460.2777376254325, "y": 455.98837637084534}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178184531, "virtual_time_s": 466.170636, "measure_result": "direction", "svd_deg": 188.15}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789178184556, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0040", "position": {"x": -1150.6475278095813, "y": 338.0183706216491}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178184556, "virtual_time_s": 611.245954, "measure_result": "direction", "svd_deg": 173.21}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789178184568, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0041", "position": {"x": -1217.989058474044, "y": 349.1848749488013}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178184568, "virtual_time_s": 629.898166, "measure_result": "direction", "svd_deg": 176.88}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789178184582, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0042", "position": {"x": -1235.6657689966596, "y": 351.1504392781333}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178184582, "virtual_time_s": 638.455297, "measure_result": "direction", "svd_deg": 176.34}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789178184583, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0043", "position": {"x": -1271.3231709576746, "y": 352.8039331617239}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789178184583, "virtual_time_s": 650.594441, "clear_result": "success"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789178184697, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0044", "position": {"x": -330.8319774439527, "y": 622.019045519816}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178184697, "virtual_time_s": 852.247242, "measure_result": "direction", "svd_deg": 345.83}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789178184699, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0045", "position": {"x": 311.09966418872955, "y": 460.20630976942914}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789178184699, "virtual_time_s": 989.649598, "clear_result": "success"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789178184819, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0046", "position": {"x": 473.9618789196234, "y": 393.0029582453942}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789178184819, "virtual_time_s": 1030.886165, "measure_result": "direction", "svd_deg": 328.35}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789178184833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0047", "position": {"x": 818.641606181082, "y": 150.19103767592716}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789178184833, "virtual_time_s": 1120.209766, "measure_result": "direction", "svd_deg": 7.58}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789178184835, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0048", "position": {"x": 859.7515794296448, "y": 155.4235128658855}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789178184834, "virtual_time_s": 1133.498092, "clear_result": "success"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789178184953, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0049", "position": {"x": 690.2120854655263, "y": 81.29128833179459}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789178184953, "virtual_time_s": 1176.505781, "measure_result": "direction", "svd_deg": 276.18}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789178184971, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0050", "position": {"x": 710.8476717118613, "y": -290.3651674409554}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789178184971, "virtual_time_s": 1255.95156, "measure_result": "direction", "svd_deg": 302.48}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789178184972, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0051", "position": {"x": 731.2553125316763, "y": -321.2152944459249}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789178184972, "virtual_time_s": 1268.349403, "clear_result": "success"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789178184973, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0052", "position": {"x": 800.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178184973, "virtual_time_s": 1340.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789178184974, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0053", "position": {"x": 800.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178184974, "virtual_time_s": 1346.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789178184975, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0054", "position": {"x": 800.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178184975, "virtual_time_s": 1352.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789178184975, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0055", "position": {"x": 800.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178184975, "virtual_time_s": 1358.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789178184976, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0056", "position": {"x": 800.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178184976, "virtual_time_s": 1364.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789178184977, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0057", "position": {"x": 800.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178184977, "virtual_time_s": 1370.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789178184977, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0058", "position": {"x": 800.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178184977, "virtual_time_s": 1376.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789178184978, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0059", "position": {"x": 800.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178184978, "virtual_time_s": 1382.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789178184978, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0060", "position": {"x": 800.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178184978, "virtual_time_s": 1388.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789178184979, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0061", "position": {"x": 800.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178184979, "virtual_time_s": 1394.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789178184979, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0062", "position": {"x": 800.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178184979, "virtual_time_s": 1400.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789178184980, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0063", "position": {"x": 800.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178184980, "virtual_time_s": 1406.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789178184981, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0064", "position": {"x": 800.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178184981, "virtual_time_s": 1412.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789178184981, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0065", "position": {"x": 800.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178184981, "virtual_time_s": 1418.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789178184982, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0066", "position": {"x": 800.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178184982, "virtual_time_s": 1424.047226, "measure_result": "no_signal"}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789178184982, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0067", "position": {"x": 400.0, "y": -800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178184982, "virtual_time_s": 1607.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789178184983, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0068", "position": {"x": 400.0, "y": -800.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178184983, "virtual_time_s": 1613.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789178184983, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0069", "position": {"x": 400.0, "y": -800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178184983, "virtual_time_s": 1619.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789178184984, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0070", "position": {"x": 400.0, "y": -800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178184984, "virtual_time_s": 1625.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789178184984, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0071", "position": {"x": 400.0, "y": -800.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178184984, "virtual_time_s": 1631.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789178184985, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0072", "position": {"x": 400.0, "y": -800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178184985, "virtual_time_s": 1637.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789178184985, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0073", "position": {"x": 400.0, "y": -800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178184985, "virtual_time_s": 1643.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789178184986, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0074", "position": {"x": 400.0, "y": -800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178184986, "virtual_time_s": 1649.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789178184987, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0075", "position": {"x": 400.0, "y": -800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178184987, "virtual_time_s": 1655.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789178184987, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0076", "position": {"x": 400.0, "y": -800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178184987, "virtual_time_s": 1661.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789178184988, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0077", "position": {"x": 400.0, "y": -800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178184988, "virtual_time_s": 1667.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789178184988, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0078", "position": {"x": 400.0, "y": -800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178184988, "virtual_time_s": 1673.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789178184989, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0079", "position": {"x": 400.0, "y": -800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178184989, "virtual_time_s": 1679.932664, "measure_result": "direction", "svd_deg": 215.88}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789178185022, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0080", "position": {"x": 400.0, "y": -800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185022, "virtual_time_s": 1685.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789178185023, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0081", "position": {"x": 400.0, "y": -800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185023, "virtual_time_s": 1691.932664, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789178185138, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0082", "position": {"x": 318.5284469595476, "y": -702.6906098528884}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185138, "virtual_time_s": 1723.315124, "measure_result": "direction", "svd_deg": 222.77}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789178185223, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0083", "position": {"x": -186.94388308543984, "y": -1139.4640424243044}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185223, "virtual_time_s": 1861.922505, "measure_result": "direction", "svd_deg": 227.76}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789178185250, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0084", "position": {"x": -302.8807775312872, "y": -1276.6516607395224}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185250, "virtual_time_s": 1902.845649, "measure_result": "direction", "svd_deg": 226.39}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789178185276, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0085", "position": {"x": -305.04487854284287, "y": -1280.5427309593315}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185276, "virtual_time_s": 1908.736127, "measure_result": "direction", "svd_deg": 225.5}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789178185302, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0086", "position": {"x": -306.76252997327254, "y": -1282.353233075672}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185301, "virtual_time_s": 1914.235256, "measure_result": "direction", "svd_deg": 225.28}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789178185327, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0087", "position": {"x": -306.76252997327254, "y": -1282.353233075672}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185327, "virtual_time_s": 1919.235256, "measure_result": "direction", "svd_deg": 225.28}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789178185351, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0088", "position": {"x": -306.76252997327254, "y": -1282.353233075672}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185351, "virtual_time_s": 1924.235256, "measure_result": "direction", "svd_deg": 225.28}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789178185375, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0089", "position": {"x": -306.76252997327254, "y": -1282.353233075672}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185375, "virtual_time_s": 1929.235256, "measure_result": "direction", "svd_deg": 225.28}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789178185377, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0090", "position": {"x": -350.0, "y": -1310.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185377, "virtual_time_s": 1942.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789178185378, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0091", "position": {"x": -350.0, "y": -1330.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185378, "virtual_time_s": 1949.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789178185379, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0092", "position": {"x": -370.0, "y": -1330.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185379, "virtual_time_s": 1956.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789178185379, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0093", "position": {"x": -370.0, "y": -1350.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185379, "virtual_time_s": 1963.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789178185380, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0094", "position": {"x": -390.0, "y": -1350.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185380, "virtual_time_s": 1970.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789178185381, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0095", "position": {"x": -390.0, "y": -1370.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185381, "virtual_time_s": 1977.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789178185381, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0096", "position": {"x": -410.0, "y": -1370.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185381, "virtual_time_s": 1984.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789178185382, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0097", "position": {"x": -410.0, "y": -1390.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185382, "virtual_time_s": 1991.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789178185383, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0098", "position": {"x": -430.0, "y": -1390.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185383, "virtual_time_s": 1998.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789178185383, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0099", "position": {"x": -430.0, "y": -1410.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185383, "virtual_time_s": 2005.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789178185384, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0100", "position": {"x": -450.0, "y": -1410.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185384, "virtual_time_s": 2012.499412, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789178185385, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0101", "position": {"x": -450.0, "y": -1430.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789178185385, "virtual_time_s": 2021.499412, "clear_result": "success"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789178185385, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0102", "position": {"x": -400.0, "y": -1800.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185385, "virtual_time_s": 2102.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789178185386, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0103", "position": {"x": -400.0, "y": -1800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178185386, "virtual_time_s": 2108.172031, "measure_result": "direction", "svd_deg": 128.94}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789178185418, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0104", "position": {"x": -400.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185417, "virtual_time_s": 2114.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789178185419, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0105", "position": {"x": -400.0, "y": -1800.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185419, "virtual_time_s": 2120.172031, "measure_result": "direction", "svd_deg": 115.04}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789178185447, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0106", "position": {"x": -400.0, "y": -1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185447, "virtual_time_s": 2126.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789178185449, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0107", "position": {"x": -400.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185449, "virtual_time_s": 2132.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789178185451, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0108", "position": {"x": -400.0, "y": -1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185451, "virtual_time_s": 2138.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789178185453, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0109", "position": {"x": -400.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185453, "virtual_time_s": 2144.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789178185455, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0110", "position": {"x": -400.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185455, "virtual_time_s": 2150.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789178185457, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0111", "position": {"x": -400.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185457, "virtual_time_s": 2156.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789178185459, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0112", "position": {"x": -400.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185459, "virtual_time_s": 2162.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789178185461, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0113", "position": {"x": -400.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185461, "virtual_time_s": 2168.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789178185462, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0114", "position": {"x": -400.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185462, "virtual_time_s": 2174.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789178185464, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0115", "position": {"x": -400.0, "y": -1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185464, "virtual_time_s": 2180.172031, "measure_result": "no_signal"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789178185579, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0116", "position": {"x": -217.92448340579557, "y": -1606.3664114906478}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185579, "virtual_time_s": 2239.330458, "measure_result": "direction", "svd_deg": 151.89}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789178185594, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0117", "position": {"x": -557.1452882380668, "y": -1436.265263018601}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185594, "virtual_time_s": 2320.22648, "measure_result": "direction", "svd_deg": 134.28}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789178185608, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0118", "position": {"x": -557.9563102379981, "y": -1435.1618939683372}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185608, "virtual_time_s": 2325.500354, "measure_result": "direction", "svd_deg": 134.9}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789178185628, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0119", "position": {"x": -558.1255369688424, "y": -1434.9315831549743}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185628, "virtual_time_s": 2330.557514, "measure_result": "direction", "svd_deg": 134.19}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789178185643, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0120", "position": {"x": -558.4910368607016, "y": -1434.4340498923193}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185643, "virtual_time_s": 2335.680985, "measure_result": "direction", "svd_deg": 135.42}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789178185660, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0121", "position": {"x": -558.4910368607016, "y": -1434.4340498923193}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185660, "virtual_time_s": 2340.680985, "measure_result": "direction", "svd_deg": 135.42}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789178185676, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0122", "position": {"x": -558.4910368607016, "y": -1434.4340498923193}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185676, "virtual_time_s": 2345.680985, "measure_result": "direction", "svd_deg": 135.42}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789178185691, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0123", "position": {"x": -558.4910368607016, "y": -1434.4340498923193}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185691, "virtual_time_s": 2350.680985, "measure_result": "direction", "svd_deg": 135.42}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789178185693, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0124", "position": {"x": -570.0, "y": -1430.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789178185693, "virtual_time_s": 2358.1477, "clear_result": "success"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789178185804, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0125", "position": {"x": -640.9540197376546, "y": -1442.416333169309}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178185804, "virtual_time_s": 2378.554141, "measure_result": "direction", "svd_deg": 302.74}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789178185817, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0126", "position": {"x": -469.4568387161619, "y": -1689.4037828069063}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178185817, "virtual_time_s": 2443.69201, "measure_result": "direction", "svd_deg": 180.53}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789178185819, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0127", "position": {"x": -487.0811269466444, "y": -1689.5454904445792}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789178185819, "virtual_time_s": 2452.216982, "clear_result": "success"}} +{"event": "action", "seq": 128, "wall_ts_ms": 1789178185820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0128", "position": {"x": -200.0, "y": -2200.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185820, "virtual_time_s": 2575.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 129, "wall_ts_ms": 1789178185820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0129", "position": {"x": -200.0, "y": -2200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185820, "virtual_time_s": 2581.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 130, "wall_ts_ms": 1789178185821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0130", "position": {"x": -200.0, "y": -2200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185821, "virtual_time_s": 2587.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 131, "wall_ts_ms": 1789178185822, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0131", "position": {"x": -200.0, "y": -2200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185822, "virtual_time_s": 2593.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 132, "wall_ts_ms": 1789178185822, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0132", "position": {"x": -200.0, "y": -2200.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185822, "virtual_time_s": 2599.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 133, "wall_ts_ms": 1789178185823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0133", "position": {"x": -200.0, "y": -2200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185823, "virtual_time_s": 2605.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 134, "wall_ts_ms": 1789178185823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0134", "position": {"x": -200.0, "y": -2200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185823, "virtual_time_s": 2611.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 135, "wall_ts_ms": 1789178185824, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0135", "position": {"x": -200.0, "y": -2200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185824, "virtual_time_s": 2617.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 136, "wall_ts_ms": 1789178185825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0136", "position": {"x": -200.0, "y": -2200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185825, "virtual_time_s": 2623.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 137, "wall_ts_ms": 1789178185825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0137", "position": {"x": -200.0, "y": -2200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185825, "virtual_time_s": 2629.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 138, "wall_ts_ms": 1789178185826, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0138", "position": {"x": -200.0, "y": -2200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185826, "virtual_time_s": 2635.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 139, "wall_ts_ms": 1789178185826, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0139", "position": {"x": -200.0, "y": -2200.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185826, "virtual_time_s": 2641.345865, "measure_result": "no_signal"}} +{"event": "action", "seq": 140, "wall_ts_ms": 1789178185827, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0140", "position": {"x": 800.0, "y": -1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185827, "virtual_time_s": 2861.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 141, "wall_ts_ms": 1789178185828, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0141", "position": {"x": 800.0, "y": -1800.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185828, "virtual_time_s": 2867.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 142, "wall_ts_ms": 1789178185828, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0142", "position": {"x": 800.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185828, "virtual_time_s": 2873.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 143, "wall_ts_ms": 1789178185829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0143", "position": {"x": 800.0, "y": -1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185829, "virtual_time_s": 2879.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 144, "wall_ts_ms": 1789178185830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0144", "position": {"x": 800.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185830, "virtual_time_s": 2885.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 145, "wall_ts_ms": 1789178185830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0145", "position": {"x": 800.0, "y": -1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185830, "virtual_time_s": 2891.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 146, "wall_ts_ms": 1789178185831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0146", "position": {"x": 800.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185831, "virtual_time_s": 2897.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 147, "wall_ts_ms": 1789178185831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0147", "position": {"x": 800.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185831, "virtual_time_s": 2903.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 148, "wall_ts_ms": 1789178185832, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0148", "position": {"x": 800.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185832, "virtual_time_s": 2909.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 149, "wall_ts_ms": 1789178185833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0149", "position": {"x": 800.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185833, "virtual_time_s": 2915.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 150, "wall_ts_ms": 1789178185833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0150", "position": {"x": 800.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185833, "virtual_time_s": 2921.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 151, "wall_ts_ms": 1789178185834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0151", "position": {"x": 800.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185834, "virtual_time_s": 2927.752457, "measure_result": "no_signal"}} +{"event": "action", "seq": 152, "wall_ts_ms": 1789178185834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0152", "position": {"x": 1000.0, "y": -1600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185834, "virtual_time_s": 2989.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 153, "wall_ts_ms": 1789178185835, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0153", "position": {"x": 1000.0, "y": -1600.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185835, "virtual_time_s": 2995.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 154, "wall_ts_ms": 1789178185836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0154", "position": {"x": 1000.0, "y": -1600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185836, "virtual_time_s": 3001.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 155, "wall_ts_ms": 1789178185836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0155", "position": {"x": 1000.0, "y": -1600.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185836, "virtual_time_s": 3007.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 156, "wall_ts_ms": 1789178185837, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0156", "position": {"x": 1000.0, "y": -1600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185837, "virtual_time_s": 3013.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 157, "wall_ts_ms": 1789178185838, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0157", "position": {"x": 1000.0, "y": -1600.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185838, "virtual_time_s": 3019.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 158, "wall_ts_ms": 1789178185838, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0158", "position": {"x": 1000.0, "y": -1600.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185838, "virtual_time_s": 3025.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 159, "wall_ts_ms": 1789178185839, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0159", "position": {"x": 1000.0, "y": -1600.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185839, "virtual_time_s": 3031.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 160, "wall_ts_ms": 1789178185840, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0160", "position": {"x": 1000.0, "y": -1600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185840, "virtual_time_s": 3037.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 161, "wall_ts_ms": 1789178185841, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0161", "position": {"x": 1000.0, "y": -1600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185841, "virtual_time_s": 3043.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 162, "wall_ts_ms": 1789178185841, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0162", "position": {"x": 1000.0, "y": -1600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185841, "virtual_time_s": 3049.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 163, "wall_ts_ms": 1789178185842, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0163", "position": {"x": 1000.0, "y": -1600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185842, "virtual_time_s": 3055.320999, "measure_result": "no_signal"}} +{"event": "action", "seq": 164, "wall_ts_ms": 1789178185843, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0164", "position": {"x": 600.0, "y": -1400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185843, "virtual_time_s": 3149.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 165, "wall_ts_ms": 1789178185843, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0165", "position": {"x": 600.0, "y": -1400.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185843, "virtual_time_s": 3155.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 166, "wall_ts_ms": 1789178185844, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0166", "position": {"x": 600.0, "y": -1400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185844, "virtual_time_s": 3161.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 167, "wall_ts_ms": 1789178185844, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0167", "position": {"x": 600.0, "y": -1400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185844, "virtual_time_s": 3167.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 168, "wall_ts_ms": 1789178185845, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0168", "position": {"x": 600.0, "y": -1400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185845, "virtual_time_s": 3173.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 169, "wall_ts_ms": 1789178185845, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0169", "position": {"x": 600.0, "y": -1400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185845, "virtual_time_s": 3179.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 170, "wall_ts_ms": 1789178185846, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0170", "position": {"x": 600.0, "y": -1400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185846, "virtual_time_s": 3185.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 171, "wall_ts_ms": 1789178185847, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0171", "position": {"x": 600.0, "y": -1400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185847, "virtual_time_s": 3191.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 172, "wall_ts_ms": 1789178185847, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0172", "position": {"x": 600.0, "y": -1400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185847, "virtual_time_s": 3197.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 173, "wall_ts_ms": 1789178185848, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0173", "position": {"x": 600.0, "y": -1400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185848, "virtual_time_s": 3203.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 174, "wall_ts_ms": 1789178185848, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0174", "position": {"x": 600.0, "y": -1400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185848, "virtual_time_s": 3209.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 175, "wall_ts_ms": 1789178185849, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0175", "position": {"x": 600.0, "y": -1400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185849, "virtual_time_s": 3215.763718, "measure_result": "no_signal"}} +{"event": "action", "seq": 176, "wall_ts_ms": 1789178185850, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0176", "position": {"x": 1000.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185850, "virtual_time_s": 3333.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 177, "wall_ts_ms": 1789178185850, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0177", "position": {"x": 1000.0, "y": -1000.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185850, "virtual_time_s": 3339.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 178, "wall_ts_ms": 1789178185851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0178", "position": {"x": 1000.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185851, "virtual_time_s": 3345.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 179, "wall_ts_ms": 1789178185851, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0179", "position": {"x": 1000.0, "y": -1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185851, "virtual_time_s": 3351.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 180, "wall_ts_ms": 1789178185852, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0180", "position": {"x": 1000.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185852, "virtual_time_s": 3357.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 181, "wall_ts_ms": 1789178185853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0181", "position": {"x": 1000.0, "y": -1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185853, "virtual_time_s": 3363.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 182, "wall_ts_ms": 1789178185853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0182", "position": {"x": 1000.0, "y": -1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185853, "virtual_time_s": 3369.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 183, "wall_ts_ms": 1789178185854, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0183", "position": {"x": 1000.0, "y": -1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185854, "virtual_time_s": 3375.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 184, "wall_ts_ms": 1789178185854, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0184", "position": {"x": 1000.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185854, "virtual_time_s": 3381.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 185, "wall_ts_ms": 1789178185855, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0185", "position": {"x": 1000.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185855, "virtual_time_s": 3387.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 186, "wall_ts_ms": 1789178185855, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0186", "position": {"x": 1000.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185855, "virtual_time_s": 3393.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 187, "wall_ts_ms": 1789178185856, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0187", "position": {"x": 1000.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185856, "virtual_time_s": 3399.900803, "measure_result": "no_signal"}} +{"event": "action", "seq": 188, "wall_ts_ms": 1789178185857, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0188", "position": {"x": 1800.0, "y": -800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185857, "virtual_time_s": 3569.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 189, "wall_ts_ms": 1789178185857, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0189", "position": {"x": 1800.0, "y": -800.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185857, "virtual_time_s": 3575.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 190, "wall_ts_ms": 1789178185858, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0190", "position": {"x": 1800.0, "y": -800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185858, "virtual_time_s": 3581.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 191, "wall_ts_ms": 1789178185859, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0191", "position": {"x": 1800.0, "y": -800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185859, "virtual_time_s": 3587.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 192, "wall_ts_ms": 1789178185860, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0192", "position": {"x": 1800.0, "y": -800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185860, "virtual_time_s": 3593.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 193, "wall_ts_ms": 1789178185860, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0193", "position": {"x": 1800.0, "y": -800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185860, "virtual_time_s": 3599.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 194, "wall_ts_ms": 1789178185863, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0194", "position": {"x": 1800.0, "y": -800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185863, "virtual_time_s": 3605.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 195, "wall_ts_ms": 1789178185863, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0195", "position": {"x": 1800.0, "y": -800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185863, "virtual_time_s": 3611.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 196, "wall_ts_ms": 1789178185864, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0196", "position": {"x": 1800.0, "y": -800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185864, "virtual_time_s": 3617.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 197, "wall_ts_ms": 1789178185864, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0197", "position": {"x": 1800.0, "y": -800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185864, "virtual_time_s": 3623.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 198, "wall_ts_ms": 1789178185865, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0198", "position": {"x": 1800.0, "y": -800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185865, "virtual_time_s": 3629.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 199, "wall_ts_ms": 1789178185866, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0199", "position": {"x": 1800.0, "y": -800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185866, "virtual_time_s": 3635.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 200, "wall_ts_ms": 1789178185866, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0200", "position": {"x": 1800.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185866, "virtual_time_s": 3800.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 201, "wall_ts_ms": 1789178185867, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0201", "position": {"x": 1800.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185867, "virtual_time_s": 3806.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 202, "wall_ts_ms": 1789178185867, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0202", "position": {"x": 1800.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185867, "virtual_time_s": 3812.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 203, "wall_ts_ms": 1789178185868, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0203", "position": {"x": 1800.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185868, "virtual_time_s": 3818.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 204, "wall_ts_ms": 1789178185869, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0204", "position": {"x": 1800.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185869, "virtual_time_s": 3824.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 205, "wall_ts_ms": 1789178185869, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0205", "position": {"x": 1800.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185869, "virtual_time_s": 3830.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 206, "wall_ts_ms": 1789178185870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0206", "position": {"x": 1800.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185870, "virtual_time_s": 3836.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 207, "wall_ts_ms": 1789178185870, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0207", "position": {"x": 1800.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185870, "virtual_time_s": 3842.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 208, "wall_ts_ms": 1789178185871, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0208", "position": {"x": 1800.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185871, "virtual_time_s": 3848.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 209, "wall_ts_ms": 1789178185871, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0209", "position": {"x": 1800.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185871, "virtual_time_s": 3854.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 210, "wall_ts_ms": 1789178185872, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0210", "position": {"x": 1800.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185872, "virtual_time_s": 3860.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 211, "wall_ts_ms": 1789178185872, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0211", "position": {"x": 1800.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185872, "virtual_time_s": 3866.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 212, "wall_ts_ms": 1789178185873, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0212", "position": {"x": 1800.0, "y": 600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185873, "virtual_time_s": 3991.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 213, "wall_ts_ms": 1789178185874, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0213", "position": {"x": 1800.0, "y": 600.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185874, "virtual_time_s": 3997.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 214, "wall_ts_ms": 1789178185874, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0214", "position": {"x": 1800.0, "y": 600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185874, "virtual_time_s": 4003.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 215, "wall_ts_ms": 1789178185875, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0215", "position": {"x": 1800.0, "y": 600.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185875, "virtual_time_s": 4009.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 216, "wall_ts_ms": 1789178185875, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0216", "position": {"x": 1800.0, "y": 600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185875, "virtual_time_s": 4015.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 217, "wall_ts_ms": 1789178185876, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0217", "position": {"x": 1800.0, "y": 600.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185876, "virtual_time_s": 4021.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 218, "wall_ts_ms": 1789178185876, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0218", "position": {"x": 1800.0, "y": 600.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185876, "virtual_time_s": 4027.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 219, "wall_ts_ms": 1789178185877, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0219", "position": {"x": 1800.0, "y": 600.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185877, "virtual_time_s": 4033.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 220, "wall_ts_ms": 1789178185878, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0220", "position": {"x": 1800.0, "y": 600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185878, "virtual_time_s": 4039.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 221, "wall_ts_ms": 1789178185878, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0221", "position": {"x": 1800.0, "y": 600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185878, "virtual_time_s": 4045.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 222, "wall_ts_ms": 1789178185879, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0222", "position": {"x": 1800.0, "y": 600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185879, "virtual_time_s": 4051.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 223, "wall_ts_ms": 1789178185879, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0223", "position": {"x": 1800.0, "y": 600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185879, "virtual_time_s": 4057.825028, "measure_result": "no_signal"}} +{"event": "action", "seq": 224, "wall_ts_ms": 1789178185880, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0224", "position": {"x": 1000.0, "y": 1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185880, "virtual_time_s": 4241.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 225, "wall_ts_ms": 1789178185880, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0225", "position": {"x": 1000.0, "y": 1000.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185880, "virtual_time_s": 4247.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 226, "wall_ts_ms": 1789178185881, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0226", "position": {"x": 1000.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185881, "virtual_time_s": 4253.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 227, "wall_ts_ms": 1789178185882, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0227", "position": {"x": 1000.0, "y": 1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185882, "virtual_time_s": 4259.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 228, "wall_ts_ms": 1789178185882, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0228", "position": {"x": 1000.0, "y": 1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185882, "virtual_time_s": 4265.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 229, "wall_ts_ms": 1789178185883, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0229", "position": {"x": 1000.0, "y": 1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185883, "virtual_time_s": 4271.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 230, "wall_ts_ms": 1789178185883, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0230", "position": {"x": 1000.0, "y": 1000.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185883, "virtual_time_s": 4277.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 231, "wall_ts_ms": 1789178185884, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0231", "position": {"x": 1000.0, "y": 1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185884, "virtual_time_s": 4283.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 232, "wall_ts_ms": 1789178185884, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0232", "position": {"x": 1000.0, "y": 1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185884, "virtual_time_s": 4289.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 233, "wall_ts_ms": 1789178185885, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0233", "position": {"x": 1000.0, "y": 1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185885, "virtual_time_s": 4295.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 234, "wall_ts_ms": 1789178185886, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0234", "position": {"x": 1000.0, "y": 1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185886, "virtual_time_s": 4301.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 235, "wall_ts_ms": 1789178185886, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0235", "position": {"x": 1000.0, "y": 1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185886, "virtual_time_s": 4307.710466, "measure_result": "no_signal"}} +{"event": "action", "seq": 236, "wall_ts_ms": 1789178185887, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0236", "position": {"x": 1200.0, "y": 1600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185887, "virtual_time_s": 4439.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 237, "wall_ts_ms": 1789178185887, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0237", "position": {"x": 1200.0, "y": 1600.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185887, "virtual_time_s": 4445.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 238, "wall_ts_ms": 1789178185888, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0238", "position": {"x": 1200.0, "y": 1600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185888, "virtual_time_s": 4451.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 239, "wall_ts_ms": 1789178185893, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0239", "position": {"x": 1200.0, "y": 1600.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185893, "virtual_time_s": 4457.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 240, "wall_ts_ms": 1789178185894, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0240", "position": {"x": 1200.0, "y": 1600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185894, "virtual_time_s": 4463.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 241, "wall_ts_ms": 1789178185895, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0241", "position": {"x": 1200.0, "y": 1600.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185895, "virtual_time_s": 4469.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 242, "wall_ts_ms": 1789178185895, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0242", "position": {"x": 1200.0, "y": 1600.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185895, "virtual_time_s": 4475.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 243, "wall_ts_ms": 1789178185896, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0243", "position": {"x": 1200.0, "y": 1600.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185896, "virtual_time_s": 4481.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 244, "wall_ts_ms": 1789178185896, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0244", "position": {"x": 1200.0, "y": 1600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185896, "virtual_time_s": 4487.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 245, "wall_ts_ms": 1789178185897, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0245", "position": {"x": 1200.0, "y": 1600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185897, "virtual_time_s": 4493.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 246, "wall_ts_ms": 1789178185897, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0246", "position": {"x": 1200.0, "y": 1600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185897, "virtual_time_s": 4499.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 247, "wall_ts_ms": 1789178185898, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0247", "position": {"x": 1200.0, "y": 1600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185898, "virtual_time_s": 4505.201572, "measure_result": "no_signal"}} +{"event": "action", "seq": 248, "wall_ts_ms": 1789178185898, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0248", "position": {"x": 400.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178185898, "virtual_time_s": 4675.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 249, "wall_ts_ms": 1789178185899, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0249", "position": {"x": 400.0, "y": 1800.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178185899, "virtual_time_s": 4681.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 250, "wall_ts_ms": 1789178185900, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0250", "position": {"x": 400.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178185900, "virtual_time_s": 4687.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 251, "wall_ts_ms": 1789178185901, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0251", "position": {"x": 400.0, "y": 1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178185901, "virtual_time_s": 4693.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 252, "wall_ts_ms": 1789178185901, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0252", "position": {"x": 400.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178185901, "virtual_time_s": 4699.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 253, "wall_ts_ms": 1789178185902, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0253", "position": {"x": 400.0, "y": 1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178185902, "virtual_time_s": 4705.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 254, "wall_ts_ms": 1789178185903, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0254", "position": {"x": 400.0, "y": 1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178185903, "virtual_time_s": 4711.125797, "measure_result": "direction", "svd_deg": 222.27}} +{"event": "action", "seq": 255, "wall_ts_ms": 1789178185933, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0255", "position": {"x": 400.0, "y": 1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178185933, "virtual_time_s": 4717.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 256, "wall_ts_ms": 1789178185934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0256", "position": {"x": 400.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178185934, "virtual_time_s": 4723.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 257, "wall_ts_ms": 1789178185934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0257", "position": {"x": 400.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178185934, "virtual_time_s": 4729.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 258, "wall_ts_ms": 1789178185935, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0258", "position": {"x": 400.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178185935, "virtual_time_s": 4735.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 259, "wall_ts_ms": 1789178185936, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0259", "position": {"x": 400.0, "y": 1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178185936, "virtual_time_s": 4741.125797, "measure_result": "no_signal"}} +{"event": "action", "seq": 260, "wall_ts_ms": 1789178186062, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0260", "position": {"x": 336.7879544992424, "y": 1789.012853898798}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186062, "virtual_time_s": 4759.957757, "measure_result": "direction", "svd_deg": 224.58}} +{"event": "action", "seq": 261, "wall_ts_ms": 1789178186155, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0261", "position": {"x": 196.35263825032604, "y": 1656.6277756187937}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186155, "virtual_time_s": 4803.55718, "measure_result": "direction", "svd_deg": 226.42}} +{"event": "action", "seq": 262, "wall_ts_ms": 1789178186214, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0262", "position": {"x": 147.33171378414153, "y": 1595.5474844700097}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186214, "virtual_time_s": 4824.220964, "measure_result": "direction", "svd_deg": 224.45}} +{"event": "action", "seq": 263, "wall_ts_ms": 1789178186270, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0263", "position": {"x": 143.33714438641022, "y": 1591.7561852227407}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186270, "virtual_time_s": 4830.322427, "measure_result": "direction", "svd_deg": 225.29}} +{"event": "action", "seq": 264, "wall_ts_ms": 1789178186332, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0264", "position": {"x": 143.33714438641022, "y": 1591.7561852227407}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186332, "virtual_time_s": 4835.322427, "measure_result": "direction", "svd_deg": 225.29}} +{"event": "action", "seq": 265, "wall_ts_ms": 1789178186394, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0265", "position": {"x": 143.33714438641022, "y": 1591.7561852227407}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186394, "virtual_time_s": 4840.322427, "measure_result": "direction", "svd_deg": 225.29}} +{"event": "action", "seq": 266, "wall_ts_ms": 1789178186457, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0266", "position": {"x": 143.33714438641022, "y": 1591.7561852227407}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186457, "virtual_time_s": 4845.322427, "measure_result": "direction", "svd_deg": 225.29}} +{"event": "action", "seq": 267, "wall_ts_ms": 1789178186525, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0267", "position": {"x": 143.33714438641022, "y": 1591.7561852227407}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186525, "virtual_time_s": 4850.322427, "measure_result": "direction", "svd_deg": 225.29}} +{"event": "action", "seq": 268, "wall_ts_ms": 1789178186531, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0268", "position": {"x": 30.0, "y": 1470.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186531, "virtual_time_s": 4886.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 269, "wall_ts_ms": 1789178186533, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0269", "position": {"x": 10.0, "y": 1470.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186532, "virtual_time_s": 4893.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 270, "wall_ts_ms": 1789178186534, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0270", "position": {"x": 10.0, "y": 1450.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186534, "virtual_time_s": 4900.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 271, "wall_ts_ms": 1789178186535, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0271", "position": {"x": -10.0, "y": 1450.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186535, "virtual_time_s": 4907.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 272, "wall_ts_ms": 1789178186536, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0272", "position": {"x": -10.0, "y": 1430.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186536, "virtual_time_s": 4914.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 273, "wall_ts_ms": 1789178186537, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0273", "position": {"x": -30.0, "y": 1430.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186537, "virtual_time_s": 4921.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 274, "wall_ts_ms": 1789178186538, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0274", "position": {"x": -30.0, "y": 1410.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186538, "virtual_time_s": 4928.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 275, "wall_ts_ms": 1789178186538, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0275", "position": {"x": -50.0, "y": 1410.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186538, "virtual_time_s": 4935.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 276, "wall_ts_ms": 1789178186539, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0276", "position": {"x": -50.0, "y": 1390.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186539, "virtual_time_s": 4942.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 277, "wall_ts_ms": 1789178186539, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0277", "position": {"x": -70.0, "y": 1390.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186539, "virtual_time_s": 4949.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 278, "wall_ts_ms": 1789178186540, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0278", "position": {"x": -70.0, "y": 1370.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186540, "virtual_time_s": 4956.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 279, "wall_ts_ms": 1789178186541, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0279", "position": {"x": -90.0, "y": 1370.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186541, "virtual_time_s": 4963.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 280, "wall_ts_ms": 1789178186542, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0280", "position": {"x": -90.0, "y": 1350.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186542, "virtual_time_s": 4970.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 281, "wall_ts_ms": 1789178186542, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0281", "position": {"x": -110.0, "y": 1350.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186542, "virtual_time_s": 4977.590957, "clear_result": "no_target_in_range"}} +{"event": "action", "seq": 282, "wall_ts_ms": 1789178186543, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0282", "position": {"x": -110.0, "y": 1330.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789178186543, "virtual_time_s": 4986.590957, "clear_result": "success"}} +{"event": "action", "seq": 283, "wall_ts_ms": 1789178186544, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0283", "position": {"x": 0.0, "y": 1000.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178186544, "virtual_time_s": 5062.161066, "measure_result": "direction", "svd_deg": 152.66}} +{"event": "action", "seq": 284, "wall_ts_ms": 1789178186581, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0284", "position": {"x": 0.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178186581, "virtual_time_s": 5068.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 285, "wall_ts_ms": 1789178186584, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0285", "position": {"x": 0.0, "y": 1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186584, "virtual_time_s": 5074.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 286, "wall_ts_ms": 1789178186594, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0286", "position": {"x": 0.0, "y": 1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178186594, "virtual_time_s": 5080.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 287, "wall_ts_ms": 1789178186601, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0287", "position": {"x": 0.0, "y": 1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178186601, "virtual_time_s": 5086.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 288, "wall_ts_ms": 1789178186603, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0288", "position": {"x": 0.0, "y": 1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178186603, "virtual_time_s": 5092.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 289, "wall_ts_ms": 1789178186604, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0289", "position": {"x": 0.0, "y": 1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178186604, "virtual_time_s": 5098.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 290, "wall_ts_ms": 1789178186605, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0290", "position": {"x": 0.0, "y": 1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178186605, "virtual_time_s": 5104.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 291, "wall_ts_ms": 1789178186608, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0291", "position": {"x": 0.0, "y": 1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178186608, "virtual_time_s": 5110.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 292, "wall_ts_ms": 1789178186610, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0292", "position": {"x": 0.0, "y": 1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178186610, "virtual_time_s": 5116.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 293, "wall_ts_ms": 1789178186611, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0293", "position": {"x": 0.0, "y": 1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178186611, "virtual_time_s": 5122.161066, "measure_result": "no_signal"}} +{"event": "action", "seq": 294, "wall_ts_ms": 1789178186700, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0294", "position": {"x": -105.65573535640135, "y": 852.7883472879993}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178186700, "virtual_time_s": 5164.401599, "measure_result": "direction", "svd_deg": 141.22}} +{"event": "action", "seq": 295, "wall_ts_ms": 1789178186745, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0295", "position": {"x": -660.8515879454901, "y": 1261.828239433777}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178186745, "virtual_time_s": 5307.322746, "measure_result": "direction", "svd_deg": 139.55}} +{"event": "action", "seq": 296, "wall_ts_ms": 1789178186764, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0296", "position": {"x": -838.1652128718179, "y": 1404.0421869661573}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178186764, "virtual_time_s": 5357.782587, "measure_result": "direction", "svd_deg": 125.03}} +{"event": "action", "seq": 297, "wall_ts_ms": 1789178186765, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0297", "position": {"x": -864.4633382455663, "y": 1441.43126764237}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789178186765, "virtual_time_s": 5371.924873, "clear_result": "success"}} +{"event": "action", "seq": 298, "wall_ts_ms": 1789178186766, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0298", "position": {"x": -1000.0, "y": 1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178186766, "virtual_time_s": 5470.27892, "measure_result": "no_signal"}} +{"event": "action", "seq": 299, "wall_ts_ms": 1789178186767, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0299", "position": {"x": -1000.0, "y": 1000.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186767, "virtual_time_s": 5476.27892, "measure_result": "direction", "svd_deg": 191.56}} +{"event": "action", "seq": 300, "wall_ts_ms": 1789178186797, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0300", "position": {"x": -1000.0, "y": 1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178186797, "virtual_time_s": 5482.27892, "measure_result": "no_signal"}} +{"event": "action", "seq": 301, "wall_ts_ms": 1789178186798, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0301", "position": {"x": -1000.0, "y": 1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178186798, "virtual_time_s": 5488.27892, "measure_result": "no_signal"}} +{"event": "action", "seq": 302, "wall_ts_ms": 1789178186799, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0302", "position": {"x": -1000.0, "y": 1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178186799, "virtual_time_s": 5494.27892, "measure_result": "no_signal"}} +{"event": "action", "seq": 303, "wall_ts_ms": 1789178186800, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0303", "position": {"x": -1000.0, "y": 1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178186800, "virtual_time_s": 5500.27892, "measure_result": "no_signal"}} +{"event": "action", "seq": 304, "wall_ts_ms": 1789178186801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0304", "position": {"x": -1000.0, "y": 1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178186801, "virtual_time_s": 5506.27892, "measure_result": "no_signal"}} +{"event": "action", "seq": 305, "wall_ts_ms": 1789178186801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0305", "position": {"x": -1000.0, "y": 1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178186801, "virtual_time_s": 5512.27892, "measure_result": "no_signal"}} +{"event": "action", "seq": 306, "wall_ts_ms": 1789178186802, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0306", "position": {"x": -1000.0, "y": 1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178186802, "virtual_time_s": 5518.27892, "measure_result": "no_signal"}} +{"event": "action", "seq": 307, "wall_ts_ms": 1789178186803, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0307", "position": {"x": -1000.0, "y": 1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178186803, "virtual_time_s": 5524.27892, "measure_result": "no_signal"}} +{"event": "action", "seq": 308, "wall_ts_ms": 1789178186853, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0308", "position": {"x": -992.9455104368235, "y": 935.9218011483044}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186853, "virtual_time_s": 5543.17199, "measure_result": "direction", "svd_deg": 180.82}} +{"event": "action", "seq": 309, "wall_ts_ms": 1789178186871, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0309", "position": {"x": -1249.4540781326764, "y": 929.6461194422758}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186871, "virtual_time_s": 5599.489055, "measure_result": "direction", "svd_deg": 182.35}} +{"event": "action", "seq": 310, "wall_ts_ms": 1789178186887, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0310", "position": {"x": -1300.1143824602234, "y": 925.17092233988}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186887, "virtual_time_s": 5614.660572, "measure_result": "direction", "svd_deg": 179.38}} +{"event": "action", "seq": 311, "wall_ts_ms": 1789178186913, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0311", "position": {"x": -1313.275340617225, "y": 925.2653718252719}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186913, "virtual_time_s": 5622.292831, "measure_result": "direction", "svd_deg": 179.78}} +{"event": "action", "seq": 312, "wall_ts_ms": 1789178186934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0312", "position": {"x": -1315.3667593260807, "y": 925.079375887616}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186934, "virtual_time_s": 5627.712766, "measure_result": "direction", "svd_deg": 180.11}} +{"event": "action", "seq": 313, "wall_ts_ms": 1789178186958, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0313", "position": {"x": -1317.1231859100708, "y": 924.9230876094863}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186958, "virtual_time_s": 5633.065439, "measure_result": "direction", "svd_deg": 178.43}} +{"event": "action", "seq": 314, "wall_ts_ms": 1789178186974, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0314", "position": {"x": -1318.8216688555253, "y": 925.5546386711737}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186974, "virtual_time_s": 5638.427859, "measure_result": "direction", "svd_deg": 181.75}} +{"event": "action", "seq": 315, "wall_ts_ms": 1789178186976, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0315", "position": {"x": -1340.3293447589303, "y": 925.2749649890634}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789178186976, "virtual_time_s": 5647.729758, "clear_result": "success"}} +{"event": "action", "seq": 316, "wall_ts_ms": 1789178186977, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0316", "position": {"x": -1200.0, "y": 800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178186977, "virtual_time_s": 5691.352167, "measure_result": "no_signal"}} +{"event": "action", "seq": 317, "wall_ts_ms": 1789178186978, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0317", "position": {"x": -1200.0, "y": 800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178186978, "virtual_time_s": 5697.352167, "measure_result": "no_signal"}} +{"event": "action", "seq": 318, "wall_ts_ms": 1789178186979, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0318", "position": {"x": -1200.0, "y": 800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178186979, "virtual_time_s": 5703.352167, "measure_result": "no_signal"}} +{"event": "action", "seq": 319, "wall_ts_ms": 1789178186980, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0319", "position": {"x": -1200.0, "y": 800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178186980, "virtual_time_s": 5709.352167, "measure_result": "no_signal"}} +{"event": "action", "seq": 320, "wall_ts_ms": 1789178186981, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0320", "position": {"x": -1200.0, "y": 800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178186981, "virtual_time_s": 5715.352167, "measure_result": "no_signal"}} +{"event": "action", "seq": 321, "wall_ts_ms": 1789178186981, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0321", "position": {"x": -1200.0, "y": 800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178186981, "virtual_time_s": 5721.352167, "measure_result": "no_signal"}} +{"event": "action", "seq": 322, "wall_ts_ms": 1789178186983, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0322", "position": {"x": -1200.0, "y": 800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178186983, "virtual_time_s": 5727.352167, "measure_result": "no_signal"}} +{"event": "action", "seq": 323, "wall_ts_ms": 1789178186984, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0323", "position": {"x": -1200.0, "y": 800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178186984, "virtual_time_s": 5733.352167, "measure_result": "no_signal"}} +{"event": "action", "seq": 324, "wall_ts_ms": 1789178186985, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0324", "position": {"x": -1200.0, "y": 800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178186985, "virtual_time_s": 5739.352167, "measure_result": "no_signal"}} +{"event": "action", "seq": 325, "wall_ts_ms": 1789178186986, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0325", "position": {"x": -1400.0, "y": 1400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178186986, "virtual_time_s": 5870.843273, "measure_result": "no_signal"}} +{"event": "action", "seq": 326, "wall_ts_ms": 1789178186987, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0326", "position": {"x": -1400.0, "y": 1400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178186987, "virtual_time_s": 5876.843273, "measure_result": "no_signal"}} +{"event": "action", "seq": 327, "wall_ts_ms": 1789178186988, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0327", "position": {"x": -1400.0, "y": 1400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178186988, "virtual_time_s": 5882.843273, "measure_result": "no_signal"}} +{"event": "action", "seq": 328, "wall_ts_ms": 1789178186989, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0328", "position": {"x": -1400.0, "y": 1400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178186989, "virtual_time_s": 5888.843273, "measure_result": "no_signal"}} +{"event": "action", "seq": 329, "wall_ts_ms": 1789178186989, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0329", "position": {"x": -1400.0, "y": 1400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178186989, "virtual_time_s": 5894.843273, "measure_result": "no_signal"}} +{"event": "action", "seq": 330, "wall_ts_ms": 1789178186991, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0330", "position": {"x": -1400.0, "y": 1400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178186990, "virtual_time_s": 5900.843273, "measure_result": "no_signal"}} +{"event": "action", "seq": 331, "wall_ts_ms": 1789178186991, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0331", "position": {"x": -1400.0, "y": 1400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178186991, "virtual_time_s": 5906.843273, "measure_result": "no_signal"}} +{"event": "action", "seq": 332, "wall_ts_ms": 1789178186992, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0332", "position": {"x": -1400.0, "y": 1400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178186992, "virtual_time_s": 5912.843273, "measure_result": "no_signal"}} +{"event": "action", "seq": 333, "wall_ts_ms": 1789178186993, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0333", "position": {"x": -1400.0, "y": 1400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178186993, "virtual_time_s": 5918.843273, "measure_result": "no_signal"}} +{"event": "action", "seq": 334, "wall_ts_ms": 1789178186994, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0334", "position": {"x": -1200.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178186994, "virtual_time_s": 6013.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 335, "wall_ts_ms": 1789178186995, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0335", "position": {"x": -1200.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178186995, "virtual_time_s": 6019.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 336, "wall_ts_ms": 1789178186996, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0336", "position": {"x": -1200.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178186996, "virtual_time_s": 6025.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 337, "wall_ts_ms": 1789178186997, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0337", "position": {"x": -1200.0, "y": 1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178186997, "virtual_time_s": 6031.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 338, "wall_ts_ms": 1789178186997, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0338", "position": {"x": -1200.0, "y": 1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178186997, "virtual_time_s": 6037.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 339, "wall_ts_ms": 1789178186998, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0339", "position": {"x": -1200.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178186998, "virtual_time_s": 6043.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 340, "wall_ts_ms": 1789178186999, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0340", "position": {"x": -1200.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178186999, "virtual_time_s": 6049.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 341, "wall_ts_ms": 1789178187000, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0341", "position": {"x": -1200.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187000, "virtual_time_s": 6055.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 342, "wall_ts_ms": 1789178187001, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0342", "position": {"x": -1200.0, "y": 1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187001, "virtual_time_s": 6061.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 343, "wall_ts_ms": 1789178187001, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0343", "position": {"x": -200.0, "y": 1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187001, "virtual_time_s": 6266.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 344, "wall_ts_ms": 1789178187002, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0344", "position": {"x": -200.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187002, "virtual_time_s": 6272.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 345, "wall_ts_ms": 1789178187003, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0345", "position": {"x": -200.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187003, "virtual_time_s": 6278.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 346, "wall_ts_ms": 1789178187004, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0346", "position": {"x": -200.0, "y": 1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187004, "virtual_time_s": 6284.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 347, "wall_ts_ms": 1789178187005, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0347", "position": {"x": -200.0, "y": 1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187005, "virtual_time_s": 6290.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 348, "wall_ts_ms": 1789178187006, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0348", "position": {"x": -200.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187006, "virtual_time_s": 6296.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 349, "wall_ts_ms": 1789178187007, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0349", "position": {"x": -200.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187007, "virtual_time_s": 6302.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 350, "wall_ts_ms": 1789178187008, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0350", "position": {"x": -200.0, "y": 1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187008, "virtual_time_s": 6308.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 351, "wall_ts_ms": 1789178187009, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0351", "position": {"x": -200.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187009, "virtual_time_s": 6314.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 352, "wall_ts_ms": 1789178187010, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0352", "position": {"x": -200.0, "y": 400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187010, "virtual_time_s": 6599.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 353, "wall_ts_ms": 1789178187010, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0353", "position": {"x": -200.0, "y": 400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187010, "virtual_time_s": 6605.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 354, "wall_ts_ms": 1789178187011, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0354", "position": {"x": -200.0, "y": 400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187011, "virtual_time_s": 6611.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 355, "wall_ts_ms": 1789178187013, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0355", "position": {"x": -200.0, "y": 400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187013, "virtual_time_s": 6617.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 356, "wall_ts_ms": 1789178187015, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0356", "position": {"x": -200.0, "y": 400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187015, "virtual_time_s": 6623.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 357, "wall_ts_ms": 1789178187016, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0357", "position": {"x": -200.0, "y": 400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187016, "virtual_time_s": 6629.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 358, "wall_ts_ms": 1789178187018, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0358", "position": {"x": -200.0, "y": 400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187017, "virtual_time_s": 6635.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 359, "wall_ts_ms": 1789178187021, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0359", "position": {"x": -200.0, "y": 400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187021, "virtual_time_s": 6641.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 360, "wall_ts_ms": 1789178187022, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0360", "position": {"x": -200.0, "y": 400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187022, "virtual_time_s": 6647.285992, "measure_result": "no_signal"}} +{"event": "action", "seq": 361, "wall_ts_ms": 1789178187023, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0361", "position": {"x": -800.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187023, "virtual_time_s": 6796.508043, "measure_result": "no_signal"}} +{"event": "action", "seq": 362, "wall_ts_ms": 1789178187024, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0362", "position": {"x": -800.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187024, "virtual_time_s": 6802.508043, "measure_result": "no_signal"}} +{"event": "action", "seq": 363, "wall_ts_ms": 1789178187026, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0363", "position": {"x": -800.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187026, "virtual_time_s": 6808.508043, "measure_result": "no_signal"}} +{"event": "action", "seq": 364, "wall_ts_ms": 1789178187027, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0364", "position": {"x": -800.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187027, "virtual_time_s": 6814.508043, "measure_result": "no_signal"}} +{"event": "action", "seq": 365, "wall_ts_ms": 1789178187028, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0365", "position": {"x": -800.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187028, "virtual_time_s": 6820.508043, "measure_result": "no_signal"}} +{"event": "action", "seq": 366, "wall_ts_ms": 1789178187030, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0366", "position": {"x": -800.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187030, "virtual_time_s": 6826.508043, "measure_result": "no_signal"}} +{"event": "action", "seq": 367, "wall_ts_ms": 1789178187032, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0367", "position": {"x": -800.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187032, "virtual_time_s": 6832.508043, "measure_result": "no_signal"}} +{"event": "action", "seq": 368, "wall_ts_ms": 1789178187033, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0368", "position": {"x": -800.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187033, "virtual_time_s": 6838.508043, "measure_result": "no_signal"}} +{"event": "action", "seq": 369, "wall_ts_ms": 1789178187034, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0369", "position": {"x": -800.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187034, "virtual_time_s": 6844.508043, "measure_result": "no_signal"}} +{"event": "action", "seq": 370, "wall_ts_ms": 1789178187035, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0370", "position": {"x": -1800.0, "y": 200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187035, "virtual_time_s": 7053.468824, "measure_result": "no_signal"}} +{"event": "action", "seq": 371, "wall_ts_ms": 1789178187036, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0371", "position": {"x": -1800.0, "y": 200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187036, "virtual_time_s": 7059.468824, "measure_result": "no_signal"}} +{"event": "action", "seq": 372, "wall_ts_ms": 1789178187037, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0372", "position": {"x": -1800.0, "y": 200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187037, "virtual_time_s": 7065.468824, "measure_result": "no_signal"}} +{"event": "action", "seq": 373, "wall_ts_ms": 1789178187037, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0373", "position": {"x": -1800.0, "y": 200.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187037, "virtual_time_s": 7071.468824, "measure_result": "no_signal"}} +{"event": "action", "seq": 374, "wall_ts_ms": 1789178187038, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0374", "position": {"x": -1800.0, "y": 200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187038, "virtual_time_s": 7077.468824, "measure_result": "no_signal"}} +{"event": "action", "seq": 375, "wall_ts_ms": 1789178187039, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0375", "position": {"x": -1800.0, "y": 200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187039, "virtual_time_s": 7083.468824, "measure_result": "no_signal"}} +{"event": "action", "seq": 376, "wall_ts_ms": 1789178187039, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0376", "position": {"x": -1800.0, "y": 200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187039, "virtual_time_s": 7089.468824, "measure_result": "no_signal"}} +{"event": "action", "seq": 377, "wall_ts_ms": 1789178187040, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0377", "position": {"x": -1800.0, "y": 200.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187040, "virtual_time_s": 7095.468824, "measure_result": "no_signal"}} +{"event": "action", "seq": 378, "wall_ts_ms": 1789178187041, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0378", "position": {"x": -1800.0, "y": 200.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187041, "virtual_time_s": 7101.468824, "measure_result": "no_signal"}} +{"event": "action", "seq": 379, "wall_ts_ms": 1789178187041, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0379", "position": {"x": -2200.0, "y": 600.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187041, "virtual_time_s": 7219.605909, "measure_result": "no_signal"}} +{"event": "action", "seq": 380, "wall_ts_ms": 1789178187042, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0380", "position": {"x": -2200.0, "y": 600.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187042, "virtual_time_s": 7225.605909, "measure_result": "no_signal"}} +{"event": "action", "seq": 381, "wall_ts_ms": 1789178187043, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0381", "position": {"x": -2200.0, "y": 600.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187043, "virtual_time_s": 7231.605909, "measure_result": "no_signal"}} +{"event": "action", "seq": 382, "wall_ts_ms": 1789178187044, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0382", "position": {"x": -2200.0, "y": 600.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187043, "virtual_time_s": 7237.605909, "measure_result": "no_signal"}} +{"event": "action", "seq": 383, "wall_ts_ms": 1789178187044, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0383", "position": {"x": -2200.0, "y": 600.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187044, "virtual_time_s": 7243.605909, "measure_result": "no_signal"}} +{"event": "action", "seq": 384, "wall_ts_ms": 1789178187045, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0384", "position": {"x": -2200.0, "y": 600.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187045, "virtual_time_s": 7249.605909, "measure_result": "no_signal"}} +{"event": "action", "seq": 385, "wall_ts_ms": 1789178187046, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0385", "position": {"x": -2200.0, "y": 600.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187046, "virtual_time_s": 7255.605909, "measure_result": "no_signal"}} +{"event": "action", "seq": 386, "wall_ts_ms": 1789178187047, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0386", "position": {"x": -2200.0, "y": 600.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187047, "virtual_time_s": 7261.605909, "measure_result": "no_signal"}} +{"event": "action", "seq": 387, "wall_ts_ms": 1789178187047, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0387", "position": {"x": -2200.0, "y": 600.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187047, "virtual_time_s": 7267.605909, "measure_result": "no_signal"}} +{"event": "action", "seq": 388, "wall_ts_ms": 1789178187048, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0388", "position": {"x": -2000.0, "y": -400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187048, "virtual_time_s": 7476.56669, "measure_result": "no_signal"}} +{"event": "action", "seq": 389, "wall_ts_ms": 1789178187049, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0389", "position": {"x": -2000.0, "y": -400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187049, "virtual_time_s": 7482.56669, "measure_result": "no_signal"}} +{"event": "action", "seq": 390, "wall_ts_ms": 1789178187050, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0390", "position": {"x": -2000.0, "y": -400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187050, "virtual_time_s": 7488.56669, "measure_result": "no_signal"}} +{"event": "action", "seq": 391, "wall_ts_ms": 1789178187051, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0391", "position": {"x": -2000.0, "y": -400.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187051, "virtual_time_s": 7494.56669, "measure_result": "no_signal"}} +{"event": "action", "seq": 392, "wall_ts_ms": 1789178187052, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0392", "position": {"x": -2000.0, "y": -400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187052, "virtual_time_s": 7500.56669, "measure_result": "no_signal"}} +{"event": "action", "seq": 393, "wall_ts_ms": 1789178187053, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0393", "position": {"x": -2000.0, "y": -400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187053, "virtual_time_s": 7506.56669, "measure_result": "no_signal"}} +{"event": "action", "seq": 394, "wall_ts_ms": 1789178187054, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0394", "position": {"x": -2000.0, "y": -400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187054, "virtual_time_s": 7512.56669, "measure_result": "no_signal"}} +{"event": "action", "seq": 395, "wall_ts_ms": 1789178187054, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0395", "position": {"x": -2000.0, "y": -400.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187054, "virtual_time_s": 7518.56669, "measure_result": "no_signal"}} +{"event": "action", "seq": 396, "wall_ts_ms": 1789178187055, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0396", "position": {"x": -2000.0, "y": -400.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187055, "virtual_time_s": 7524.56669, "measure_result": "no_signal"}} +{"event": "action", "seq": 397, "wall_ts_ms": 1789178187056, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0397", "position": {"x": -1800.0, "y": -800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187056, "virtual_time_s": 7619.009409, "measure_result": "no_signal"}} +{"event": "action", "seq": 398, "wall_ts_ms": 1789178187056, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0398", "position": {"x": -1800.0, "y": -800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187056, "virtual_time_s": 7625.009409, "measure_result": "no_signal"}} +{"event": "action", "seq": 399, "wall_ts_ms": 1789178187057, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0399", "position": {"x": -1800.0, "y": -800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187057, "virtual_time_s": 7631.009409, "measure_result": "no_signal"}} +{"event": "action", "seq": 400, "wall_ts_ms": 1789178187058, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0400", "position": {"x": -1800.0, "y": -800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187058, "virtual_time_s": 7637.009409, "measure_result": "no_signal"}} +{"event": "action", "seq": 401, "wall_ts_ms": 1789178187059, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0401", "position": {"x": -1800.0, "y": -800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187059, "virtual_time_s": 7643.009409, "measure_result": "no_signal"}} +{"event": "action", "seq": 402, "wall_ts_ms": 1789178187060, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0402", "position": {"x": -1800.0, "y": -800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187060, "virtual_time_s": 7649.009409, "measure_result": "no_signal"}} +{"event": "action", "seq": 403, "wall_ts_ms": 1789178187061, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0403", "position": {"x": -1800.0, "y": -800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187061, "virtual_time_s": 7655.009409, "measure_result": "no_signal"}} +{"event": "action", "seq": 404, "wall_ts_ms": 1789178187062, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0404", "position": {"x": -1800.0, "y": -800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187062, "virtual_time_s": 7661.009409, "measure_result": "no_signal"}} +{"event": "action", "seq": 405, "wall_ts_ms": 1789178187063, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0405", "position": {"x": -1800.0, "y": -800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187063, "virtual_time_s": 7667.009409, "measure_result": "no_signal"}} +{"event": "action", "seq": 406, "wall_ts_ms": 1789178187064, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0406", "position": {"x": -1200.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187064, "virtual_time_s": 7798.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 407, "wall_ts_ms": 1789178187064, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0407", "position": {"x": -1200.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187064, "virtual_time_s": 7804.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 408, "wall_ts_ms": 1789178187065, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0408", "position": {"x": -1200.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187065, "virtual_time_s": 7810.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 409, "wall_ts_ms": 1789178187066, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0409", "position": {"x": -1200.0, "y": -1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187066, "virtual_time_s": 7816.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 410, "wall_ts_ms": 1789178187066, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0410", "position": {"x": -1200.0, "y": -1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187066, "virtual_time_s": 7822.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 411, "wall_ts_ms": 1789178187067, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0411", "position": {"x": -1200.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187067, "virtual_time_s": 7828.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 412, "wall_ts_ms": 1789178187067, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0412", "position": {"x": -1200.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187067, "virtual_time_s": 7834.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 413, "wall_ts_ms": 1789178187068, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0413", "position": {"x": -1200.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187068, "virtual_time_s": 7840.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 414, "wall_ts_ms": 1789178187068, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0414", "position": {"x": -1200.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187068, "virtual_time_s": 7846.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 415, "wall_ts_ms": 1789178187069, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0415", "position": {"x": -600.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187069, "virtual_time_s": 7971.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 416, "wall_ts_ms": 1789178187070, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0416", "position": {"x": -600.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187070, "virtual_time_s": 7977.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 417, "wall_ts_ms": 1789178187070, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0417", "position": {"x": -600.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187070, "virtual_time_s": 7983.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 418, "wall_ts_ms": 1789178187071, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0418", "position": {"x": -600.0, "y": -1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187071, "virtual_time_s": 7989.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 419, "wall_ts_ms": 1789178187071, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0419", "position": {"x": -600.0, "y": -1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187071, "virtual_time_s": 7995.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 420, "wall_ts_ms": 1789178187072, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0420", "position": {"x": -600.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187072, "virtual_time_s": 8001.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 421, "wall_ts_ms": 1789178187073, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0421", "position": {"x": -600.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187073, "virtual_time_s": 8007.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 422, "wall_ts_ms": 1789178187073, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0422", "position": {"x": -600.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187073, "virtual_time_s": 8013.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 423, "wall_ts_ms": 1789178187074, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0423", "position": {"x": -600.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187074, "virtual_time_s": 8019.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 424, "wall_ts_ms": 1789178187075, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0424", "position": {"x": 0.0, "y": -1000.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187075, "virtual_time_s": 8144.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 425, "wall_ts_ms": 1789178187075, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0425", "position": {"x": 0.0, "y": -1000.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187075, "virtual_time_s": 8150.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 426, "wall_ts_ms": 1789178187076, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0426", "position": {"x": 0.0, "y": -1000.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187076, "virtual_time_s": 8156.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 427, "wall_ts_ms": 1789178187077, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0427", "position": {"x": 0.0, "y": -1000.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187077, "virtual_time_s": 8162.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 428, "wall_ts_ms": 1789178187077, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0428", "position": {"x": 0.0, "y": -1000.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187077, "virtual_time_s": 8168.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 429, "wall_ts_ms": 1789178187078, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0429", "position": {"x": 0.0, "y": -1000.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187078, "virtual_time_s": 8174.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 430, "wall_ts_ms": 1789178187079, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0430", "position": {"x": 0.0, "y": -1000.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187079, "virtual_time_s": 8180.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 431, "wall_ts_ms": 1789178187079, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0431", "position": {"x": 0.0, "y": -1000.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187079, "virtual_time_s": 8186.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 432, "wall_ts_ms": 1789178187080, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0432", "position": {"x": 0.0, "y": -1000.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187080, "virtual_time_s": 8192.500515, "measure_result": "no_signal"}} +{"event": "action", "seq": 433, "wall_ts_ms": 1789178187080, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0433", "position": {"x": -1400.0, "y": -1800.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789178187080, "virtual_time_s": 8519.990825, "measure_result": "no_signal"}} +{"event": "action", "seq": 434, "wall_ts_ms": 1789178187081, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0434", "position": {"x": -1400.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789178187081, "virtual_time_s": 8525.990825, "measure_result": "no_signal"}} +{"event": "action", "seq": 435, "wall_ts_ms": 1789178187082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0435", "position": {"x": -1400.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789178187082, "virtual_time_s": 8531.990825, "measure_result": "no_signal"}} +{"event": "action", "seq": 436, "wall_ts_ms": 1789178187082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0436", "position": {"x": -1400.0, "y": -1800.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789178187082, "virtual_time_s": 8537.990825, "measure_result": "no_signal"}} +{"event": "action", "seq": 437, "wall_ts_ms": 1789178187083, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0437", "position": {"x": -1400.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789178187083, "virtual_time_s": 8543.990825, "measure_result": "no_signal"}} +{"event": "action", "seq": 438, "wall_ts_ms": 1789178187084, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0438", "position": {"x": -1400.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789178187084, "virtual_time_s": 8549.990825, "measure_result": "no_signal"}} +{"event": "action", "seq": 439, "wall_ts_ms": 1789178187085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0439", "position": {"x": -1400.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789178187085, "virtual_time_s": 8555.990825, "measure_result": "no_signal"}} +{"event": "action", "seq": 440, "wall_ts_ms": 1789178187087, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0440", "position": {"x": -1400.0, "y": -1800.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789178187087, "virtual_time_s": 8561.990825, "measure_result": "no_signal"}} +{"event": "action", "seq": 441, "wall_ts_ms": 1789178187088, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0441", "position": {"x": -1400.0, "y": -1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789178187088, "virtual_time_s": 8567.990825, "measure_result": "no_signal"}} +{"event": "action", "seq": 442, "wall_ts_ms": 1789178187089, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "f412a48a351e-0442"}, "response": {"accepted": true, "real_timestamp_ms": 1789178187089, "virtual_time_s": 8567.990825, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 8567.990825, "real_elapsed_s": 4.237924, "request_count": 442, "cleared_count": 11} diff --git a/referee-data/sessions/VDHB-5CSS-HTSR-XDNG/meta.json b/referee-data/sessions/VDHB-5CSS-HTSR-XDNG/meta.json new file mode 100644 index 0000000..dfb2adc --- /dev/null +++ b/referee-data/sessions/VDHB-5CSS-HTSR-XDNG/meta.json @@ -0,0 +1,96 @@ +{ + "case_code": "VDHB-5CSS-HTSR-XDNG", + "module": "q3_practice", + "robot_id": "1", + "seed": 105574083, + "truth": [ + { + "channel": 14, + "x": 856.6576709825006, + "y": 155.34806194253457, + "r_eff_m": 1140.1530721319214, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": -865.9125118641814, + "y": 1442.8167017896603, + "r_eff_m": 1244.5565001541352, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": 319.1053637544684, + "y": 458.692968643061, + "r_eff_m": 1091.2695108033713, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 9, + "x": -563.1737796657975, + "y": 739.4365839088623, + "r_eff_m": 1142.274653364676, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": -567.6125600333169, + "y": -1425.1832055144764, + "r_eff_m": 1116.8710584691612, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": -127.9221699731196, + "y": 1321.5498823658088, + "r_eff_m": 1099.2301991165552, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 17, + "x": -461.35901946709356, + "y": -1443.421966352216, + "r_eff_m": 1465.4750566774844, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": 734.3701319315119, + "y": -327.11727905171244, + "r_eff_m": 1099.8705279792375, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 2, + "x": -487.11614059930804, + "y": -1689.7596378515718, + "r_eff_m": 1133.7343047583447, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": -1276.209986977157, + "y": 353.10637806882784, + "r_eff_m": 1399.2534399355732, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 5, + "x": -1338.2418947443434, + "y": 925.2249398194417, + "r_eff_m": 1009.6649995728642, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/W365-FDYC-UC55-XGEF/log.jsonl b/referee-data/sessions/W365-FDYC-UC55-XGEF/log.jsonl new file mode 100644 index 0000000..cfc5b9c --- /dev/null +++ b/referee-data/sessions/W365-FDYC-UC55-XGEF/log.jsonl @@ -0,0 +1,112 @@ +{"event": "session_start", "case_code": "W365-FDYC-UC55-XGEF", "module": "q3_practice", "robot_id": "1", "seed": 364272165, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 7, "x": 1414.210708250252, "y": -488.76145243798265, "r_eff_m": 1290.7966076631099, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": -1511.6300865890657, "y": -879.1313672804279, "r_eff_m": 1495.3487010610788, "directional": false, "heading_deg": 0.0}, {"channel": 17, "x": -1051.4156929763074, "y": -377.2832929347269, "r_eff_m": 1058.313538018151, "directional": false, "heading_deg": 0.0}, {"channel": 11, "x": 533.1394772910177, "y": 1626.1303810376696, "r_eff_m": 1287.2380492475218, "directional": false, "heading_deg": 0.0}, {"channel": 18, "x": 498.69917548521613, "y": -1400.9114695343671, "r_eff_m": 1315.6482656525632, "directional": false, "heading_deg": 0.0}, {"channel": 6, "x": -1049.8061530705609, "y": -540.2397480507124, "r_eff_m": 1318.5357664073829, "directional": false, "heading_deg": 0.0}, {"channel": 14, "x": 139.93791252770222, "y": 114.56370346733911, "r_eff_m": 1291.943220533085, "directional": false, "heading_deg": 0.0}, {"channel": 15, "x": -1585.5108352280338, "y": 717.0184041716028, "r_eff_m": 1270.5077212783133, "directional": false, "heading_deg": 0.0}, {"channel": 8, "x": 651.2187416823783, "y": -398.28434621525463, "r_eff_m": 1423.238132036014, "directional": false, "heading_deg": 0.0}, {"channel": 20, "x": -1592.397963468653, "y": -166.50927720086273, "r_eff_m": 1332.896828925001, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": 598.0801866711968, "y": 939.1377377739396, "r_eff_m": 1420.1191301716726, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": 379.535583013814, "y": -618.4323171195778, "r_eff_m": 1292.246917490242, "directional": false, "heading_deg": 0.0}, {"channel": 5, "x": -943.261994374228, "y": -677.6078474817377, "r_eff_m": 1319.8229638544815, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": -519.7470392464918, "y": 890.682133121856, "r_eff_m": 1486.0333085996554, "directional": false, "heading_deg": 0.0}, {"channel": 19, "x": 717.1798831774344, "y": 15.424727424507962, "r_eff_m": 1344.9211177198881, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": 873.846160590808, "y": -704.3812779834213, "r_eff_m": 1320.34100002308, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789179183524, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789179183524, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789179183530, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179183530, "virtual_time_s": 5.0, "measure_result": "direction", "svd_deg": 320.74}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789179183557, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179183557, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789179183561, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179183561, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789179183565, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179183565, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789179183569, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179183569, "virtual_time_s": 29.0, "measure_result": "direction", "svd_deg": 216.5}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789179183596, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179183596, "virtual_time_s": 35.0, "measure_result": "direction", "svd_deg": 208.02}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789179183624, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179183624, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789179183628, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789179183628, "virtual_time_s": 47.0, "measure_result": "direction", "svd_deg": 329.46}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789179183655, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179183654, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789179183658, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179183658, "virtual_time_s": 59.0, "measure_result": "direction", "svd_deg": 119.87}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789179183685, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179183685, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789179183689, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179183689, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789179183693, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789179183693, "virtual_time_s": 77.0, "measure_result": "direction", "svd_deg": 300.73}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789179183738, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179183738, "virtual_time_s": 83.0, "measure_result": "direction", "svd_deg": 39.63}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789179183765, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179183765, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789179183770, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789179183770, "virtual_time_s": 95.0, "measure_result": "direction", "svd_deg": 57.06}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789179183797, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789179183797, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789179183801, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179183801, "virtual_time_s": 107.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789179183805, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179183805, "virtual_time_s": 113.0, "measure_result": "direction", "svd_deg": 0.7}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789179183833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179183833, "virtual_time_s": 119.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789179183883, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0022", "position": {"x": -554.5130776735186, "y": -265.11605812045315}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179183883, "virtual_time_s": 247.926202, "measure_result": "direction", "svd_deg": 227.7}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789179183885, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0023", "position": {"x": -554.5130776735186, "y": -265.11605812045315}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179183885, "virtual_time_s": 253.926202, "measure_result": "direction", "svd_deg": 209.97}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789179183923, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0024", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179183923, "virtual_time_s": 407.855741, "measure_result": "no_signal"}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789179183926, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0025", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179183926, "virtual_time_s": 413.855741, "measure_result": "no_signal"}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789179183929, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0026", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179183929, "virtual_time_s": 419.855741, "measure_result": "direction", "svd_deg": 171.98}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789179183946, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0027", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179183946, "virtual_time_s": 425.855741, "measure_result": "no_signal"}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789179183949, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0028", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179183949, "virtual_time_s": 431.855741, "measure_result": "no_signal"}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789179183952, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0029", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179183952, "virtual_time_s": 437.855741, "measure_result": "no_signal"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789179183954, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0030", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179183954, "virtual_time_s": 443.855741, "measure_result": "no_signal"}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789179183957, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0031", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179183957, "virtual_time_s": 449.855741, "measure_result": "no_signal"}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789179183960, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0032", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789179183960, "virtual_time_s": 455.855741, "measure_result": "direction", "svd_deg": 126.19}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789179183977, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0033", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179183977, "virtual_time_s": 461.855741, "measure_result": "direction", "svd_deg": 340.51}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789179183994, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0034", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179183994, "virtual_time_s": 467.855741, "measure_result": "direction", "svd_deg": 140.78}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789179184011, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0035", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179184011, "virtual_time_s": 473.855741, "measure_result": "direction", "svd_deg": 137.37}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789179184012, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0036", "position": {"x": -579.8500000000006, "y": -1004.3296607688133}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179184012, "virtual_time_s": 479.855741, "measure_result": "direction", "svd_deg": 136.09}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789179184060, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0037", "position": {"x": -896.0956944176371, "y": -873.526868873512}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179184060, "virtual_time_s": 554.301547, "measure_result": "direction", "svd_deg": 181.13}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789179184106, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0038", "position": {"x": -1105.2627340132929, "y": -792.2011522231876}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179184106, "virtual_time_s": 604.185719, "measure_result": "direction", "svd_deg": 192.11}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789179184108, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0039", "position": {"x": -1105.2627340132929, "y": -792.2011522231876}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179184108, "virtual_time_s": 610.185719, "measure_result": "direction", "svd_deg": 127.74}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789179184153, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0040", "position": {"x": -937.0182830165697, "y": -683.1858902766666}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789179184153, "virtual_time_s": 655.280867, "clear_result": "success"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789179184154, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0041", "position": {"x": -937.0182830165697, "y": -683.1858902766666}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179184154, "virtual_time_s": 660.280867, "measure_result": "direction", "svd_deg": 141.76}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789179184201, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0042", "position": {"x": -974.0092991945581, "y": -579.7472522946921}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789179184201, "virtual_time_s": 688.251654, "measure_result": "direction", "svd_deg": 110.68}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789179184203, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0043", "position": {"x": -974.0092991945581, "y": -579.7472522946921}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179184203, "virtual_time_s": 694.251654, "measure_result": "direction", "svd_deg": 208.47}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789179184204, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0044", "position": {"x": -974.0092991945581, "y": -579.7472522946921}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179184204, "virtual_time_s": 700.251654, "measure_result": "direction", "svd_deg": 146.98}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789179184249, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0045", "position": {"x": -1050.3102814399574, "y": -551.3681240869745}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789179184249, "virtual_time_s": 721.533195, "clear_result": "success"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789179184250, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0046", "position": {"x": -1050.3102814399574, "y": -551.3681240869745}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179184250, "virtual_time_s": 727.533195, "measure_result": "direction", "svd_deg": 215.02}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789179184251, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0047", "position": {"x": -1050.3102814399574, "y": -551.3681240869745}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789179184251, "virtual_time_s": 733.533195, "measure_result": "direction", "svd_deg": 89.86}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789179184292, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0048", "position": {"x": -1050.1458050473418, "y": -376.5446423930064}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789179184292, "virtual_time_s": 773.497907, "clear_result": "success"}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789179184293, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0049", "position": {"x": -1050.1458050473418, "y": -376.5446423930064}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179184293, "virtual_time_s": 779.497907, "measure_result": "direction", "svd_deg": 159.52}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789179184333, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0050", "position": {"x": -1520.7662493554644, "y": -880.1756615772147}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179184333, "virtual_time_s": 923.356937, "measure_result": "direction", "svd_deg": 5.95}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789179184334, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0051", "position": {"x": -1519.2906884846866, "y": -879.9956617448927}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789179184334, "virtual_time_s": 928.654237, "clear_result": "success"}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789179184335, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0052", "position": {"x": -1519.2906884846866, "y": -879.9956617448927}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179184335, "virtual_time_s": 934.654237, "measure_result": "direction", "svd_deg": 95.49}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789179184370, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0053", "position": {"x": -1587.2984017110134, "y": -175.57484698230425}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179184370, "virtual_time_s": 1081.193452, "measure_result": "direction", "svd_deg": 118.8}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789179184372, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0054", "position": {"x": -1587.2984017110134, "y": -175.57484698230425}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789179184372, "virtual_time_s": 1086.193452, "clear_result": "success"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789179184404, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0055", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179184404, "virtual_time_s": 1184.64169, "measure_result": "no_signal"}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789179184407, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0056", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179184407, "virtual_time_s": 1190.64169, "measure_result": "no_signal"}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789179184409, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0057", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179184409, "virtual_time_s": 1196.64169, "measure_result": "no_signal"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789179184411, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0058", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179184411, "virtual_time_s": 1202.64169, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789179184413, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0059", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179184413, "virtual_time_s": 1208.64169, "measure_result": "no_signal"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789179184415, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0060", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179184415, "virtual_time_s": 1214.64169, "measure_result": "no_signal"}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789179184418, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0061", "position": {"x": -1159.7, "y": 1.4202228929711856e-13}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179184418, "virtual_time_s": 1220.64169, "measure_result": "direction", "svd_deg": 120.69}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789179184466, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0062", "position": {"x": -1388.0291635993642, "y": 181.92323567339446}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179184466, "virtual_time_s": 1284.030138, "measure_result": "direction", "svd_deg": 110.7}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789179184500, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0063", "position": {"x": -1580.9915291710822, "y": 712.88047119036}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179184500, "virtual_time_s": 1402.016874, "measure_result": "direction", "svd_deg": 138.36}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789179184534, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0064", "position": {"x": -1595.5044203498082, "y": 726.2468104512616}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179184534, "virtual_time_s": 1410.962925, "measure_result": "direction", "svd_deg": 317.35}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789179184536, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0065", "position": {"x": -1594.5670291255842, "y": 725.3834752984742}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789179184536, "virtual_time_s": 1416.217801, "clear_result": "success"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789179184567, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0066", "position": {"x": -623.571160929962, "y": 665.545161793988}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179184567, "virtual_time_s": 1616.785383, "measure_result": "direction", "svd_deg": 64.71}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789179184597, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0067", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179184597, "virtual_time_s": 1691.104188, "measure_result": "no_signal"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789179184600, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0068", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179184600, "virtual_time_s": 1697.104188, "measure_result": "no_signal"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789179184602, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0069", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179184602, "virtual_time_s": 1703.104188, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789179184605, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0070", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179184605, "virtual_time_s": 1709.104188, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789179184607, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0071", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179184607, "virtual_time_s": 1715.104188, "measure_result": "direction", "svd_deg": 29.13}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789179184620, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0072", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179184620, "virtual_time_s": 1721.104188, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789179184624, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0073", "position": {"x": -579.8499999999998, "y": 1004.3296607688136}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179184624, "virtual_time_s": 1727.104188, "measure_result": "direction", "svd_deg": 296.97}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789179184656, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0074", "position": {"x": -524.666195033849, "y": 895.6294677850573}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789179184656, "virtual_time_s": 1756.485315, "clear_result": "success"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789179184686, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0075", "position": {"x": 13.96115765859603, "y": 1224.9461960465349}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179184686, "virtual_time_s": 1888.749947, "measure_result": "direction", "svd_deg": 38.41}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789179184715, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0076", "position": {"x": 486.06654661282187, "y": 1595.5883776838273}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179184715, "virtual_time_s": 2013.793127, "measure_result": "direction", "svd_deg": 32.57}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789179184745, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0077", "position": {"x": 533.7501750749348, "y": 1627.23932321794}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179184745, "virtual_time_s": 2030.239543, "measure_result": "near"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789179184747, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0078", "position": {"x": 533.7501750749348, "y": 1627.23932321794}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789179184747, "virtual_time_s": 2035.239543, "clear_result": "success"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789179184773, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0079", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179184773, "virtual_time_s": 2166.162182, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789179184775, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0080", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179184775, "virtual_time_s": 2172.162182, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789179184778, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0081", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179184778, "virtual_time_s": 2178.162182, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789179184780, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0082", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179184780, "virtual_time_s": 2184.162182, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789179184782, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0083", "position": {"x": 579.8500000000001, "y": 1004.3296607688135}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179184782, "virtual_time_s": 2190.162182, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789179184810, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0084", "position": {"x": 472.6524997726218, "y": 870.8349460756808}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789179184810, "virtual_time_s": 2230.403761, "measure_result": "direction", "svd_deg": 27.71}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789179184812, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0085", "position": {"x": 472.6524997726218, "y": 870.8349460756808}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179184812, "virtual_time_s": 2236.403761, "measure_result": "direction", "svd_deg": 245.75}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789179184839, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0086", "position": {"x": 613.6509668562276, "y": 945.7904452611608}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789179184839, "virtual_time_s": 2274.340508, "measure_result": "direction", "svd_deg": 202.43}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789179184840, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0087", "position": {"x": 610.7714217080224, "y": 944.5422658391622}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789179184840, "virtual_time_s": 2279.968194, "clear_result": "success"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789179184861, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0088", "position": {"x": 713.2709610731921, "y": 256.1076876367877}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179184861, "virtual_time_s": 2425.172838, "measure_result": "direction", "svd_deg": 270.09000000000003}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789179184862, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0089", "position": {"x": 713.7355699459988, "y": 14.251870467095603}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789179184862, "virtual_time_s": 2478.544091, "clear_result": "success"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789179184863, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0090", "position": {"x": 713.7355699459988, "y": 14.251870467095603}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789179184863, "virtual_time_s": 2484.544091, "measure_result": "direction", "svd_deg": 261.15}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789179184864, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0091", "position": {"x": 713.7355699459988, "y": 14.251870467095603}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179184864, "virtual_time_s": 2490.544091, "measure_result": "direction", "svd_deg": 169.64}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789179184876, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0092", "position": {"x": 1159.7, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789179184876, "virtual_time_s": 2585.782511, "measure_result": "no_signal"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789179184879, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0093", "position": {"x": 1159.7, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789179184879, "virtual_time_s": 2591.782511, "measure_result": "no_signal"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789179184881, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0094", "position": {"x": 1159.7, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179184881, "virtual_time_s": 2597.782511, "measure_result": "direction", "svd_deg": 298.37}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789179184891, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0095", "position": {"x": 1159.7, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789179184891, "virtual_time_s": 2603.782511, "measure_result": "no_signal"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789179184892, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0096", "position": {"x": 1159.7, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789179184892, "virtual_time_s": 2609.782511, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789179184906, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0097", "position": {"x": 1198.4900542243918, "y": -304.85204243350813}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179184906, "virtual_time_s": 2677.244511, "measure_result": "direction", "svd_deg": 319.42}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789179184920, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0098", "position": {"x": 1435.145889831455, "y": -508.5284869521288}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179184920, "virtual_time_s": 2744.691314, "measure_result": "direction", "svd_deg": 136.6}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789179184921, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0099", "position": {"x": 1423.6424575247372, "y": -497.26152704412857}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789179184921, "virtual_time_s": 2752.911707, "clear_result": "success"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789179184933, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0100", "position": {"x": 830.1243883679499, "y": -481.81269987924514}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179184933, "virtual_time_s": 2877.655526, "measure_result": "direction", "svd_deg": 281.93}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789179184934, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0101", "position": {"x": 830.1243883679499, "y": -481.81269987924514}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789179184934, "virtual_time_s": 2883.655526, "measure_result": "direction", "svd_deg": 196.35}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789179184941, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0102", "position": {"x": 881.3394665198394, "y": -721.0589373082705}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179184941, "virtual_time_s": 2938.588846, "measure_result": "direction", "svd_deg": 115.16}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789179184942, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0103", "position": {"x": 880.1339696643104, "y": -718.3709408440659}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789179184942, "virtual_time_s": 2944.178033, "clear_result": "success"}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789179184946, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0104", "position": {"x": 259.86435599159677, "y": -1121.9197262904547}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179184946, "virtual_time_s": 3098.176143, "measure_result": "direction", "svd_deg": 310.89}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789179184950, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0105", "position": {"x": 486.90959013315864, "y": -1382.7578261274336}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179184950, "virtual_time_s": 3172.338576, "measure_result": "direction", "svd_deg": 302.63}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789179184951, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0106", "position": {"x": 494.56027448897476, "y": -1394.257784896845}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789179184951, "virtual_time_s": 3180.101053, "clear_result": "success"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789179184952, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0107", "position": {"x": 367.4672779704557, "y": -618.7955416589297}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789179184952, "virtual_time_s": 3342.262667, "clear_result": "success"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789179184952, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0108", "position": {"x": 651.6336380999976, "y": -385.08668566987257}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789179184952, "virtual_time_s": 3420.848087, "clear_result": "success"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789179184953, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0109", "position": {"x": 143.87980669955925, "y": 115.92985601471385}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789179184953, "virtual_time_s": 3568.512943, "clear_result": "success"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789179184954, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "05c5fb89d9f3-0110"}, "response": {"accepted": true, "real_timestamp_ms": 1789179184954, "virtual_time_s": 3568.512943, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 3568.512943, "real_elapsed_s": 3.754281, "request_count": 110, "cleared_count": 16} diff --git a/referee-data/sessions/W365-FDYC-UC55-XGEF/meta.json b/referee-data/sessions/W365-FDYC-UC55-XGEF/meta.json new file mode 100644 index 0000000..53dfb63 --- /dev/null +++ b/referee-data/sessions/W365-FDYC-UC55-XGEF/meta.json @@ -0,0 +1,136 @@ +{ + "case_code": "W365-FDYC-UC55-XGEF", + "module": "q3_practice", + "robot_id": "1", + "seed": 364272165, + "truth": [ + { + "channel": 7, + "x": 1414.210708250252, + "y": -488.76145243798265, + "r_eff_m": 1290.7966076631099, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": -1511.6300865890657, + "y": -879.1313672804279, + "r_eff_m": 1495.3487010610788, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 17, + "x": -1051.4156929763074, + "y": -377.2832929347269, + "r_eff_m": 1058.313538018151, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 11, + "x": 533.1394772910177, + "y": 1626.1303810376696, + "r_eff_m": 1287.2380492475218, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 18, + "x": 498.69917548521613, + "y": -1400.9114695343671, + "r_eff_m": 1315.6482656525632, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 6, + "x": -1049.8061530705609, + "y": -540.2397480507124, + "r_eff_m": 1318.5357664073829, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 14, + "x": 139.93791252770222, + "y": 114.56370346733911, + "r_eff_m": 1291.943220533085, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 15, + "x": -1585.5108352280338, + "y": 717.0184041716028, + "r_eff_m": 1270.5077212783133, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 8, + "x": 651.2187416823783, + "y": -398.28434621525463, + "r_eff_m": 1423.238132036014, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 20, + "x": -1592.397963468653, + "y": -166.50927720086273, + "r_eff_m": 1332.896828925001, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": 598.0801866711968, + "y": 939.1377377739396, + "r_eff_m": 1420.1191301716726, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": 379.535583013814, + "y": -618.4323171195778, + "r_eff_m": 1292.246917490242, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 5, + "x": -943.261994374228, + "y": -677.6078474817377, + "r_eff_m": 1319.8229638544815, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": -519.7470392464918, + "y": 890.682133121856, + "r_eff_m": 1486.0333085996554, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 19, + "x": 717.1798831774344, + "y": 15.424727424507962, + "r_eff_m": 1344.9211177198881, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": 873.846160590808, + "y": -704.3812779834213, + "r_eff_m": 1320.34100002308, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/referee-data/sessions/ZBUC-YW26-J7BH-V2WP/log.jsonl b/referee-data/sessions/ZBUC-YW26-J7BH-V2WP/log.jsonl new file mode 100644 index 0000000..fd22488 --- /dev/null +++ b/referee-data/sessions/ZBUC-YW26-J7BH-V2WP/log.jsonl @@ -0,0 +1,441 @@ +{"event": "session_start", "case_code": "ZBUC-YW26-J7BH-V2WP", "module": "q4_practice", "robot_id": "1", "seed": 863642061, "countdown_s": 5.0, "window_s": 1500.0, "max_real_duration_s": 1200.0, "truth": [{"channel": 19, "x": 1411.2207258221881, "y": -917.895587407795, "r_eff_m": 1091.9794913249818, "directional": true, "heading_deg": 153.47630212371047}, {"channel": 8, "x": 1498.3737761812351, "y": 930.3904917291879, "r_eff_m": 1272.8873716121275, "directional": true, "heading_deg": 31.83753169216975}, {"channel": 20, "x": 398.74127594294674, "y": 289.06782254078047, "r_eff_m": 1289.352680954292, "directional": true, "heading_deg": 160.24361954063997}, {"channel": 18, "x": -600.2602564102094, "y": 1150.9469673246213, "r_eff_m": 1418.9470346878875, "directional": false, "heading_deg": 0.0}, {"channel": 10, "x": -641.1344471816941, "y": -1528.5314521440819, "r_eff_m": 1343.871107386684, "directional": false, "heading_deg": 0.0}, {"channel": 4, "x": -673.4635271867537, "y": 1045.7718411070223, "r_eff_m": 1169.0688552732329, "directional": false, "heading_deg": 0.0}, {"channel": 1, "x": -1236.5632089871194, "y": -490.4229776016893, "r_eff_m": 1484.249955482677, "directional": false, "heading_deg": 0.0}, {"channel": 16, "x": -1426.9540787395435, "y": -176.611350029181, "r_eff_m": 1081.1607993545874, "directional": false, "heading_deg": 0.0}, {"channel": 13, "x": 1073.330745196976, "y": -1066.1914143107938, "r_eff_m": 1158.1511964548743, "directional": false, "heading_deg": 0.0}, {"channel": 7, "x": -1592.8182208096703, "y": 396.44615965418825, "r_eff_m": 1087.696159659708, "directional": false, "heading_deg": 0.0}]} +{"event": "action", "seq": 1, "wall_ts_ms": 1789189932352, "method": "POST", "path": "/enter", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0001"}, "response": {"accepted": true, "real_timestamp_ms": 1789189932352, "virtual_time_s": 0.0, "max_virtual_duration_s": 360000.0, "max_real_duration_s": 1200, "remaining_real_duration_s": 1200}} +{"event": "action", "seq": 2, "wall_ts_ms": 1789189932353, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0002", "position": {"x": 0.0, "y": 0.0}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189932353, "virtual_time_s": 5.0, "measure_result": "direction", "svd_deg": 202.38}} +{"event": "action", "seq": 3, "wall_ts_ms": 1789189932389, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0003", "position": {"x": 0.0, "y": 0.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189932389, "virtual_time_s": 11.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 4, "wall_ts_ms": 1789189932389, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0004", "position": {"x": 0.0, "y": 0.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189932389, "virtual_time_s": 17.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 5, "wall_ts_ms": 1789189932390, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0005", "position": {"x": 0.0, "y": 0.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189932390, "virtual_time_s": 23.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 6, "wall_ts_ms": 1789189932390, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0006", "position": {"x": 0.0, "y": 0.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189932390, "virtual_time_s": 29.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 7, "wall_ts_ms": 1789189932391, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0007", "position": {"x": 0.0, "y": 0.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189932391, "virtual_time_s": 35.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 8, "wall_ts_ms": 1789189932392, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0008", "position": {"x": 0.0, "y": 0.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189932392, "virtual_time_s": 41.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 9, "wall_ts_ms": 1789189932392, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0009", "position": {"x": 0.0, "y": 0.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189932392, "virtual_time_s": 47.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 10, "wall_ts_ms": 1789189932393, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0010", "position": {"x": 0.0, "y": 0.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189932393, "virtual_time_s": 53.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 11, "wall_ts_ms": 1789189932393, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0011", "position": {"x": 0.0, "y": 0.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189932393, "virtual_time_s": 59.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 12, "wall_ts_ms": 1789189932394, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0012", "position": {"x": 0.0, "y": 0.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189932394, "virtual_time_s": 65.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 13, "wall_ts_ms": 1789189932394, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0013", "position": {"x": 0.0, "y": 0.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189932394, "virtual_time_s": 71.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 14, "wall_ts_ms": 1789189932395, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0014", "position": {"x": 0.0, "y": 0.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189932395, "virtual_time_s": 77.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 15, "wall_ts_ms": 1789189932395, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0015", "position": {"x": 0.0, "y": 0.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189932395, "virtual_time_s": 83.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 16, "wall_ts_ms": 1789189932396, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0016", "position": {"x": 0.0, "y": 0.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189932396, "virtual_time_s": 89.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 17, "wall_ts_ms": 1789189932396, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0017", "position": {"x": 0.0, "y": 0.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189932396, "virtual_time_s": 95.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 18, "wall_ts_ms": 1789189932396, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0018", "position": {"x": 0.0, "y": 0.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189932396, "virtual_time_s": 101.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 19, "wall_ts_ms": 1789189932397, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0019", "position": {"x": 0.0, "y": 0.0}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189932397, "virtual_time_s": 107.0, "measure_result": "direction", "svd_deg": 117.03}} +{"event": "action", "seq": 20, "wall_ts_ms": 1789189932432, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0020", "position": {"x": 0.0, "y": 0.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189932432, "virtual_time_s": 113.0, "measure_result": "no_signal"}} +{"event": "action", "seq": 21, "wall_ts_ms": 1789189932432, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0021", "position": {"x": 0.0, "y": 0.0}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189932432, "virtual_time_s": 119.0, "measure_result": "direction", "svd_deg": 36.9}} +{"event": "action", "seq": 22, "wall_ts_ms": 1789189932573, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0022", "position": {"x": -75.56630767746503, "y": 403.0381972088477}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189932573, "virtual_time_s": 207.012208, "measure_result": "direction", "svd_deg": 124.48}} +{"event": "action", "seq": 23, "wall_ts_ms": 1789189932614, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0023", "position": {"x": -502.5726101078779, "y": 1053.268181290157}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189932614, "virtual_time_s": 367.592851, "measure_result": "direction", "svd_deg": 134.15}} +{"event": "action", "seq": 24, "wall_ts_ms": 1789189932632, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0024", "position": {"x": -552.2204751547453, "y": 1107.3720339273625}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189932632, "virtual_time_s": 387.279086, "measure_result": "direction", "svd_deg": 137.33}} +{"event": "action", "seq": 25, "wall_ts_ms": 1789189932647, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0025", "position": {"x": -576.4005469096595, "y": 1129.4778104843695}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189932647, "virtual_time_s": 398.831463, "measure_result": "direction", "svd_deg": 138.42}} +{"event": "action", "seq": 26, "wall_ts_ms": 1789189932657, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0026", "position": {"x": -585.9656655065711, "y": 1137.5536053679477}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189932657, "virtual_time_s": 406.33514, "measure_result": "direction", "svd_deg": 137.79}} +{"event": "action", "seq": 27, "wall_ts_ms": 1789189932658, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0027", "position": {"x": -598.850694725731, "y": 1149.6598027469995}, "channel": 18}, "response": {"accepted": true, "real_timestamp_ms": 1789189932658, "virtual_time_s": 414.871149, "clear_result": "success"}} +{"event": "action", "seq": 28, "wall_ts_ms": 1789189932767, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0028", "position": {"x": 334.47777553606113, "y": 715.8405281984692}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189932767, "virtual_time_s": 626.715867, "measure_result": "direction", "svd_deg": 279.28}} +{"event": "action", "seq": 29, "wall_ts_ms": 1789189932769, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0029", "position": {"x": 401.8526638453649, "y": 302.00283147739196}, "channel": 20}, "response": {"accepted": true, "real_timestamp_ms": 1789189932769, "virtual_time_s": 715.57313, "clear_result": "success"}} +{"event": "action", "seq": 30, "wall_ts_ms": 1789189932882, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0030", "position": {"x": -428.180179322003, "y": -21.065522836687876}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189932882, "virtual_time_s": 899.711018, "measure_result": "direction", "svd_deg": 210.24}} +{"event": "action", "seq": 31, "wall_ts_ms": 1789189932916, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0031", "position": {"x": -1187.4843971388118, "y": -459.3387638812871}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189932916, "virtual_time_s": 1080.053692, "measure_result": "direction", "svd_deg": 213.04}} +{"event": "action", "seq": 32, "wall_ts_ms": 1789189932938, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0032", "position": {"x": -1256.1816567561136, "y": -493.7852280091781}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189932938, "virtual_time_s": 1100.423627, "measure_result": "direction", "svd_deg": 10.01}} +{"event": "action", "seq": 33, "wall_ts_ms": 1789189932939, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0033", "position": {"x": -1234.6025972686807, "y": -489.91539101001524}, "channel": 1}, "response": {"accepted": true, "real_timestamp_ms": 1789189932939, "virtual_time_s": 1109.808289, "clear_result": "success"}} +{"event": "action", "seq": 34, "wall_ts_ms": 1789189932940, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0034", "position": {"x": -1700.0, "y": -500.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189932940, "virtual_time_s": 1208.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 35, "wall_ts_ms": 1789189932940, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0035", "position": {"x": -1700.0, "y": -500.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189932940, "virtual_time_s": 1214.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 36, "wall_ts_ms": 1789189932941, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0036", "position": {"x": -1700.0, "y": -500.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189932941, "virtual_time_s": 1220.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 37, "wall_ts_ms": 1789189932942, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0037", "position": {"x": -1700.0, "y": -500.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189932942, "virtual_time_s": 1226.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 38, "wall_ts_ms": 1789189932942, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0038", "position": {"x": -1700.0, "y": -500.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189932942, "virtual_time_s": 1232.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 39, "wall_ts_ms": 1789189932943, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0039", "position": {"x": -1700.0, "y": -500.0}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189932943, "virtual_time_s": 1238.909619, "measure_result": "direction", "svd_deg": 83.9}} +{"event": "action", "seq": 40, "wall_ts_ms": 1789189932972, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0040", "position": {"x": -1700.0, "y": -500.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189932972, "virtual_time_s": 1244.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 41, "wall_ts_ms": 1789189932973, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0041", "position": {"x": -1700.0, "y": -500.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189932973, "virtual_time_s": 1250.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 42, "wall_ts_ms": 1789189932973, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0042", "position": {"x": -1700.0, "y": -500.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189932973, "virtual_time_s": 1256.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 43, "wall_ts_ms": 1789189932974, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0043", "position": {"x": -1700.0, "y": -500.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189932974, "virtual_time_s": 1262.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 44, "wall_ts_ms": 1789189932975, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0044", "position": {"x": -1700.0, "y": -500.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189932975, "virtual_time_s": 1268.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 45, "wall_ts_ms": 1789189932975, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0045", "position": {"x": -1700.0, "y": -500.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189932975, "virtual_time_s": 1274.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 46, "wall_ts_ms": 1789189932976, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0046", "position": {"x": -1700.0, "y": -500.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189932976, "virtual_time_s": 1280.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 47, "wall_ts_ms": 1789189932976, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0047", "position": {"x": -1700.0, "y": -500.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189932976, "virtual_time_s": 1286.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 48, "wall_ts_ms": 1789189932977, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0048", "position": {"x": -1700.0, "y": -500.0}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189932977, "virtual_time_s": 1292.909619, "measure_result": "direction", "svd_deg": 50.55}} +{"event": "action", "seq": 49, "wall_ts_ms": 1789189933004, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0049", "position": {"x": -1700.0, "y": -500.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933004, "virtual_time_s": 1298.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 50, "wall_ts_ms": 1789189933005, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0050", "position": {"x": -1700.0, "y": -500.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933005, "virtual_time_s": 1304.909619, "measure_result": "no_signal"}} +{"event": "action", "seq": 51, "wall_ts_ms": 1789189933109, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0051", "position": {"x": -1608.4258525101527, "y": -135.503342363046}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189933109, "virtual_time_s": 1386.074408, "measure_result": "direction", "svd_deg": 89.07}} +{"event": "action", "seq": 52, "wall_ts_ms": 1789189933162, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0052", "position": {"x": -1591.6289287708137, "y": 391.14958912061826}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189933162, "virtual_time_s": 1496.458552, "measure_result": "direction", "svd_deg": 103.44}} +{"event": "action", "seq": 53, "wall_ts_ms": 1789189933173, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0053", "position": {"x": -1600.424296933165, "y": 410.6142054101469}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189933173, "virtual_time_s": 1505.730459, "measure_result": "direction", "svd_deg": 297.93}} +{"event": "action", "seq": 54, "wall_ts_ms": 1789189933174, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0054", "position": {"x": -1592.904545801282, "y": 396.3747701534845}, "channel": 7}, "response": {"accepted": true, "real_timestamp_ms": 1789189933174, "virtual_time_s": 1513.951069, "clear_result": "success"}} +{"event": "action", "seq": 55, "wall_ts_ms": 1789189933290, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0055", "position": {"x": -1489.1407723347609, "y": 345.007817297282}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189933290, "virtual_time_s": 1543.10748, "measure_result": "direction", "svd_deg": 276.17}} +{"event": "action", "seq": 56, "wall_ts_ms": 1789189933303, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0056", "position": {"x": -1433.2375472834733, "y": -153.8918439782556}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189933303, "virtual_time_s": 1648.511871, "measure_result": "direction", "svd_deg": 284.62}} +{"event": "action", "seq": 57, "wall_ts_ms": 1789189933305, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0057", "position": {"x": -1429.0571649197423, "y": -170.5750603484356}, "channel": 16}, "response": {"accepted": true, "real_timestamp_ms": 1789189933305, "virtual_time_s": 1656.951669, "clear_result": "success"}} +{"event": "action", "seq": 58, "wall_ts_ms": 1789189933305, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0058", "position": {"x": -1800.0, "y": -300.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933305, "virtual_time_s": 1741.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 59, "wall_ts_ms": 1789189933306, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0059", "position": {"x": -1800.0, "y": -300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933306, "virtual_time_s": 1747.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 60, "wall_ts_ms": 1789189933307, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0060", "position": {"x": -1800.0, "y": -300.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189933307, "virtual_time_s": 1753.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 61, "wall_ts_ms": 1789189933307, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0061", "position": {"x": -1800.0, "y": -300.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933307, "virtual_time_s": 1759.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 62, "wall_ts_ms": 1789189933308, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0062", "position": {"x": -1800.0, "y": -300.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933308, "virtual_time_s": 1765.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 63, "wall_ts_ms": 1789189933309, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0063", "position": {"x": -1800.0, "y": -300.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933309, "virtual_time_s": 1771.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 64, "wall_ts_ms": 1789189933309, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0064", "position": {"x": -1800.0, "y": -300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933309, "virtual_time_s": 1777.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 65, "wall_ts_ms": 1789189933310, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0065", "position": {"x": -1800.0, "y": -300.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933310, "virtual_time_s": 1783.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 66, "wall_ts_ms": 1789189933311, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0066", "position": {"x": -1800.0, "y": -300.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933311, "virtual_time_s": 1789.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 67, "wall_ts_ms": 1789189933311, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0067", "position": {"x": -1800.0, "y": -300.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933311, "virtual_time_s": 1795.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 68, "wall_ts_ms": 1789189933312, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0068", "position": {"x": -1800.0, "y": -300.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933312, "virtual_time_s": 1801.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 69, "wall_ts_ms": 1789189933312, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0069", "position": {"x": -1800.0, "y": -300.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933312, "virtual_time_s": 1807.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 70, "wall_ts_ms": 1789189933313, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0070", "position": {"x": -1800.0, "y": -300.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933313, "virtual_time_s": 1813.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 71, "wall_ts_ms": 1789189933313, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0071", "position": {"x": -1800.0, "y": -300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933313, "virtual_time_s": 1819.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 72, "wall_ts_ms": 1789189933314, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0072", "position": {"x": -1800.0, "y": -300.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933314, "virtual_time_s": 1825.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 73, "wall_ts_ms": 1789189933315, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0073", "position": {"x": -1800.0, "y": 400.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933315, "virtual_time_s": 1970.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 74, "wall_ts_ms": 1789189933315, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0074", "position": {"x": -1800.0, "y": 400.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933315, "virtual_time_s": 1976.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 75, "wall_ts_ms": 1789189933316, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0075", "position": {"x": -1800.0, "y": 400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933316, "virtual_time_s": 1982.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 76, "wall_ts_ms": 1789189933316, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0076", "position": {"x": -1800.0, "y": 400.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189933316, "virtual_time_s": 1988.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 77, "wall_ts_ms": 1789189933317, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0077", "position": {"x": -1800.0, "y": 400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933317, "virtual_time_s": 1994.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 78, "wall_ts_ms": 1789189933317, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0078", "position": {"x": -1800.0, "y": 400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933317, "virtual_time_s": 2000.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 79, "wall_ts_ms": 1789189933318, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0079", "position": {"x": -1800.0, "y": 400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933318, "virtual_time_s": 2006.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 80, "wall_ts_ms": 1789189933319, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0080", "position": {"x": -1800.0, "y": 400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933319, "virtual_time_s": 2012.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 81, "wall_ts_ms": 1789189933319, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0081", "position": {"x": -1800.0, "y": 400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933319, "virtual_time_s": 2018.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 82, "wall_ts_ms": 1789189933320, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0082", "position": {"x": -1800.0, "y": 400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933320, "virtual_time_s": 2024.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 83, "wall_ts_ms": 1789189933320, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0083", "position": {"x": -1800.0, "y": 400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933320, "virtual_time_s": 2030.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 84, "wall_ts_ms": 1789189933321, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0084", "position": {"x": -1800.0, "y": 400.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933321, "virtual_time_s": 2036.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 85, "wall_ts_ms": 1789189933321, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0085", "position": {"x": -1800.0, "y": 400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933321, "virtual_time_s": 2042.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 86, "wall_ts_ms": 1789189933322, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0086", "position": {"x": -1800.0, "y": 400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933322, "virtual_time_s": 2048.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 87, "wall_ts_ms": 1789189933322, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0087", "position": {"x": -1800.0, "y": 400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933322, "virtual_time_s": 2054.526322, "measure_result": "no_signal"}} +{"event": "action", "seq": 88, "wall_ts_ms": 1789189933323, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0088", "position": {"x": -1200.0, "y": 700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933323, "virtual_time_s": 2193.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 89, "wall_ts_ms": 1789189933324, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0089", "position": {"x": -1200.0, "y": 700.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933324, "virtual_time_s": 2199.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 90, "wall_ts_ms": 1789189933324, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0090", "position": {"x": -1200.0, "y": 700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933324, "virtual_time_s": 2205.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 91, "wall_ts_ms": 1789189933325, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0091", "position": {"x": -1200.0, "y": 700.0}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189933325, "virtual_time_s": 2211.690401, "measure_result": "direction", "svd_deg": 33.39}} +{"event": "action", "seq": 92, "wall_ts_ms": 1789189933354, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0092", "position": {"x": -1200.0, "y": 700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933354, "virtual_time_s": 2217.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 93, "wall_ts_ms": 1789189933355, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0093", "position": {"x": -1200.0, "y": 700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933355, "virtual_time_s": 2223.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 94, "wall_ts_ms": 1789189933356, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0094", "position": {"x": -1200.0, "y": 700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933356, "virtual_time_s": 2229.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 95, "wall_ts_ms": 1789189933356, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0095", "position": {"x": -1200.0, "y": 700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933356, "virtual_time_s": 2235.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 96, "wall_ts_ms": 1789189933357, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0096", "position": {"x": -1200.0, "y": 700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933357, "virtual_time_s": 2241.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 97, "wall_ts_ms": 1789189933357, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0097", "position": {"x": -1200.0, "y": 700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933357, "virtual_time_s": 2247.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 98, "wall_ts_ms": 1789189933358, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0098", "position": {"x": -1200.0, "y": 700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933358, "virtual_time_s": 2253.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 99, "wall_ts_ms": 1789189933358, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0099", "position": {"x": -1200.0, "y": 700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933358, "virtual_time_s": 2259.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 100, "wall_ts_ms": 1789189933359, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0100", "position": {"x": -1200.0, "y": 700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933359, "virtual_time_s": 2265.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 101, "wall_ts_ms": 1789189933359, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0101", "position": {"x": -1200.0, "y": 700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933359, "virtual_time_s": 2271.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 102, "wall_ts_ms": 1789189933360, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0102", "position": {"x": -1200.0, "y": 700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933360, "virtual_time_s": 2277.690401, "measure_result": "no_signal"}} +{"event": "action", "seq": 103, "wall_ts_ms": 1789189933468, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0103", "position": {"x": -839.1624729339037, "y": 848.0404511866946}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189933468, "virtual_time_s": 2361.695451, "measure_result": "direction", "svd_deg": 49.98}} +{"event": "action", "seq": 104, "wall_ts_ms": 1789189933486, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0104", "position": {"x": -684.9213160814054, "y": 1033.962549731719}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189933486, "virtual_time_s": 2415.009988, "measure_result": "direction", "svd_deg": 46.64}} +{"event": "action", "seq": 105, "wall_ts_ms": 1789189933498, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0105", "position": {"x": -671.2731699524902, "y": 1048.2295167085176}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189933498, "virtual_time_s": 2423.958751, "measure_result": "near"}} +{"event": "action", "seq": 106, "wall_ts_ms": 1789189933499, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0106", "position": {"x": -671.2731699524913, "y": 1048.2295167085185}, "channel": 4}, "response": {"accepted": true, "real_timestamp_ms": 1789189933499, "virtual_time_s": 2428.958751, "clear_result": "success"}} +{"event": "action", "seq": 107, "wall_ts_ms": 1789189933500, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0107", "position": {"x": -500.0, "y": 700.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933500, "virtual_time_s": 2512.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 108, "wall_ts_ms": 1789189933501, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0108", "position": {"x": -500.0, "y": 700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933501, "virtual_time_s": 2518.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 109, "wall_ts_ms": 1789189933501, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0109", "position": {"x": -500.0, "y": 700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933501, "virtual_time_s": 2524.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 110, "wall_ts_ms": 1789189933502, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0110", "position": {"x": -500.0, "y": 700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933502, "virtual_time_s": 2530.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 111, "wall_ts_ms": 1789189933502, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0111", "position": {"x": -500.0, "y": 700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933502, "virtual_time_s": 2536.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 112, "wall_ts_ms": 1789189933503, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0112", "position": {"x": -500.0, "y": 700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933503, "virtual_time_s": 2542.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 113, "wall_ts_ms": 1789189933504, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0113", "position": {"x": -500.0, "y": 700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933504, "virtual_time_s": 2548.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 114, "wall_ts_ms": 1789189933504, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0114", "position": {"x": -500.0, "y": 700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933504, "virtual_time_s": 2554.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 115, "wall_ts_ms": 1789189933505, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0115", "position": {"x": -500.0, "y": 700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933505, "virtual_time_s": 2560.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 116, "wall_ts_ms": 1789189933505, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0116", "position": {"x": -500.0, "y": 700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933505, "virtual_time_s": 2566.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 117, "wall_ts_ms": 1789189933506, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0117", "position": {"x": -500.0, "y": 700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933506, "virtual_time_s": 2572.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 118, "wall_ts_ms": 1789189933506, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0118", "position": {"x": -500.0, "y": 700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933506, "virtual_time_s": 2578.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 119, "wall_ts_ms": 1789189933507, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0119", "position": {"x": -500.0, "y": 700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933507, "virtual_time_s": 2584.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 120, "wall_ts_ms": 1789189933508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0120", "position": {"x": -500.0, "y": 700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933508, "virtual_time_s": 2590.572743, "measure_result": "no_signal"}} +{"event": "action", "seq": 121, "wall_ts_ms": 1789189933508, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0121", "position": {"x": -200.0, "y": 900.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933508, "virtual_time_s": 2667.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 122, "wall_ts_ms": 1789189933509, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0122", "position": {"x": -200.0, "y": 900.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933509, "virtual_time_s": 2673.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 123, "wall_ts_ms": 1789189933509, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0123", "position": {"x": -200.0, "y": 900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933509, "virtual_time_s": 2679.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 124, "wall_ts_ms": 1789189933510, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0124", "position": {"x": -200.0, "y": 900.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933510, "virtual_time_s": 2685.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 125, "wall_ts_ms": 1789189933511, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0125", "position": {"x": -200.0, "y": 900.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933511, "virtual_time_s": 2691.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 126, "wall_ts_ms": 1789189933511, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0126", "position": {"x": -200.0, "y": 900.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933511, "virtual_time_s": 2697.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 127, "wall_ts_ms": 1789189933512, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0127", "position": {"x": -200.0, "y": 900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933512, "virtual_time_s": 2703.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 128, "wall_ts_ms": 1789189933512, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0128", "position": {"x": -200.0, "y": 900.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933512, "virtual_time_s": 2709.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 129, "wall_ts_ms": 1789189933513, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0129", "position": {"x": -200.0, "y": 900.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933513, "virtual_time_s": 2715.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 130, "wall_ts_ms": 1789189933513, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0130", "position": {"x": -200.0, "y": 900.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933513, "virtual_time_s": 2721.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 131, "wall_ts_ms": 1789189933514, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0131", "position": {"x": -200.0, "y": 900.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933514, "virtual_time_s": 2727.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 132, "wall_ts_ms": 1789189933514, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0132", "position": {"x": -200.0, "y": 900.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933514, "virtual_time_s": 2733.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 133, "wall_ts_ms": 1789189933515, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0133", "position": {"x": -200.0, "y": 900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933515, "virtual_time_s": 2739.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 134, "wall_ts_ms": 1789189933515, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0134", "position": {"x": -200.0, "y": 900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933515, "virtual_time_s": 2745.683769, "measure_result": "no_signal"}} +{"event": "action", "seq": 135, "wall_ts_ms": 1789189933516, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0135", "position": {"x": -400.0, "y": 1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933516, "virtual_time_s": 2935.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 136, "wall_ts_ms": 1789189933516, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0136", "position": {"x": -400.0, "y": 1800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933516, "virtual_time_s": 2941.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 137, "wall_ts_ms": 1789189933517, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0137", "position": {"x": -400.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933517, "virtual_time_s": 2947.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 138, "wall_ts_ms": 1789189933517, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0138", "position": {"x": -400.0, "y": 1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933517, "virtual_time_s": 2953.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 139, "wall_ts_ms": 1789189933518, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0139", "position": {"x": -400.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933518, "virtual_time_s": 2959.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 140, "wall_ts_ms": 1789189933518, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0140", "position": {"x": -400.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933518, "virtual_time_s": 2965.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 141, "wall_ts_ms": 1789189933519, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0141", "position": {"x": -400.0, "y": 1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933519, "virtual_time_s": 2971.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 142, "wall_ts_ms": 1789189933519, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0142", "position": {"x": -400.0, "y": 1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933519, "virtual_time_s": 2977.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 143, "wall_ts_ms": 1789189933520, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0143", "position": {"x": -400.0, "y": 1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933520, "virtual_time_s": 2983.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 144, "wall_ts_ms": 1789189933520, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0144", "position": {"x": -400.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933520, "virtual_time_s": 2989.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 145, "wall_ts_ms": 1789189933521, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0145", "position": {"x": -400.0, "y": 1800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933521, "virtual_time_s": 2995.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 146, "wall_ts_ms": 1789189933521, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0146", "position": {"x": -400.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933521, "virtual_time_s": 3001.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 147, "wall_ts_ms": 1789189933522, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0147", "position": {"x": -400.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933522, "virtual_time_s": 3007.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 148, "wall_ts_ms": 1789189933522, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0148", "position": {"x": -400.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933522, "virtual_time_s": 3013.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 149, "wall_ts_ms": 1789189933523, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0149", "position": {"x": 400.0, "y": 1800.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933523, "virtual_time_s": 3178.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 150, "wall_ts_ms": 1789189933524, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0150", "position": {"x": 400.0, "y": 1800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933524, "virtual_time_s": 3184.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 151, "wall_ts_ms": 1789189933524, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0151", "position": {"x": 400.0, "y": 1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933524, "virtual_time_s": 3190.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 152, "wall_ts_ms": 1789189933525, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0152", "position": {"x": 400.0, "y": 1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933525, "virtual_time_s": 3196.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 153, "wall_ts_ms": 1789189933525, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0153", "position": {"x": 400.0, "y": 1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933525, "virtual_time_s": 3202.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 154, "wall_ts_ms": 1789189933526, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0154", "position": {"x": 400.0, "y": 1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933526, "virtual_time_s": 3208.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 155, "wall_ts_ms": 1789189933526, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0155", "position": {"x": 400.0, "y": 1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933526, "virtual_time_s": 3214.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 156, "wall_ts_ms": 1789189933527, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0156", "position": {"x": 400.0, "y": 1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933527, "virtual_time_s": 3220.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 157, "wall_ts_ms": 1789189933527, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0157", "position": {"x": 400.0, "y": 1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933527, "virtual_time_s": 3226.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 158, "wall_ts_ms": 1789189933528, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0158", "position": {"x": 400.0, "y": 1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933528, "virtual_time_s": 3232.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 159, "wall_ts_ms": 1789189933528, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0159", "position": {"x": 400.0, "y": 1800.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933528, "virtual_time_s": 3238.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 160, "wall_ts_ms": 1789189933529, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0160", "position": {"x": 400.0, "y": 1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933529, "virtual_time_s": 3244.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 161, "wall_ts_ms": 1789189933529, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0161", "position": {"x": 400.0, "y": 1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933529, "virtual_time_s": 3250.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 162, "wall_ts_ms": 1789189933530, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0162", "position": {"x": 400.0, "y": 1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933530, "virtual_time_s": 3256.074658, "measure_result": "no_signal"}} +{"event": "action", "seq": 163, "wall_ts_ms": 1789189933531, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0163", "position": {"x": 600.0, "y": 1900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933531, "virtual_time_s": 3305.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 164, "wall_ts_ms": 1789189933531, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0164", "position": {"x": 600.0, "y": 1900.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933531, "virtual_time_s": 3311.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 165, "wall_ts_ms": 1789189933532, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0165", "position": {"x": 600.0, "y": 1900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933532, "virtual_time_s": 3317.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 166, "wall_ts_ms": 1789189933532, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0166", "position": {"x": 600.0, "y": 1900.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933532, "virtual_time_s": 3323.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 167, "wall_ts_ms": 1789189933533, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0167", "position": {"x": 600.0, "y": 1900.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933533, "virtual_time_s": 3329.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 168, "wall_ts_ms": 1789189933533, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0168", "position": {"x": 600.0, "y": 1900.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933533, "virtual_time_s": 3335.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 169, "wall_ts_ms": 1789189933534, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0169", "position": {"x": 600.0, "y": 1900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933534, "virtual_time_s": 3341.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 170, "wall_ts_ms": 1789189933534, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0170", "position": {"x": 600.0, "y": 1900.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933534, "virtual_time_s": 3347.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 171, "wall_ts_ms": 1789189933535, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0171", "position": {"x": 600.0, "y": 1900.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933535, "virtual_time_s": 3353.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 172, "wall_ts_ms": 1789189933535, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0172", "position": {"x": 600.0, "y": 1900.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933535, "virtual_time_s": 3359.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 173, "wall_ts_ms": 1789189933536, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0173", "position": {"x": 600.0, "y": 1900.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933536, "virtual_time_s": 3365.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 174, "wall_ts_ms": 1789189933536, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0174", "position": {"x": 600.0, "y": 1900.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933536, "virtual_time_s": 3371.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 175, "wall_ts_ms": 1789189933537, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0175", "position": {"x": 600.0, "y": 1900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933537, "virtual_time_s": 3377.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 176, "wall_ts_ms": 1789189933538, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0176", "position": {"x": 600.0, "y": 1900.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933538, "virtual_time_s": 3383.796018, "measure_result": "no_signal"}} +{"event": "action", "seq": 177, "wall_ts_ms": 1789189933539, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0177", "position": {"x": 800.0, "y": 1200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933539, "virtual_time_s": 3534.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 178, "wall_ts_ms": 1789189933539, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0178", "position": {"x": 800.0, "y": 1200.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933539, "virtual_time_s": 3540.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 179, "wall_ts_ms": 1789189933540, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0179", "position": {"x": 800.0, "y": 1200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933540, "virtual_time_s": 3546.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 180, "wall_ts_ms": 1789189933540, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0180", "position": {"x": 800.0, "y": 1200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933540, "virtual_time_s": 3552.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 181, "wall_ts_ms": 1789189933541, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0181", "position": {"x": 800.0, "y": 1200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933541, "virtual_time_s": 3558.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 182, "wall_ts_ms": 1789189933541, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0182", "position": {"x": 800.0, "y": 1200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933541, "virtual_time_s": 3564.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 183, "wall_ts_ms": 1789189933542, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0183", "position": {"x": 800.0, "y": 1200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933542, "virtual_time_s": 3570.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 184, "wall_ts_ms": 1789189933586, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0184", "position": {"x": 800.0, "y": 1200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933586, "virtual_time_s": 3576.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 185, "wall_ts_ms": 1789189933588, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0185", "position": {"x": 800.0, "y": 1200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933588, "virtual_time_s": 3582.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 186, "wall_ts_ms": 1789189933588, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0186", "position": {"x": 800.0, "y": 1200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933588, "virtual_time_s": 3588.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 187, "wall_ts_ms": 1789189933589, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0187", "position": {"x": 800.0, "y": 1200.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933589, "virtual_time_s": 3594.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 188, "wall_ts_ms": 1789189933589, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0188", "position": {"x": 800.0, "y": 1200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933589, "virtual_time_s": 3600.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 189, "wall_ts_ms": 1789189933590, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0189", "position": {"x": 800.0, "y": 1200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933590, "virtual_time_s": 3606.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 190, "wall_ts_ms": 1789189933590, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0190", "position": {"x": 800.0, "y": 1200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933590, "virtual_time_s": 3612.398216, "measure_result": "no_signal"}} +{"event": "action", "seq": 191, "wall_ts_ms": 1789189933591, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0191", "position": {"x": 700.0, "y": 700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933591, "virtual_time_s": 3719.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 192, "wall_ts_ms": 1789189933592, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0192", "position": {"x": 700.0, "y": 700.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933592, "virtual_time_s": 3725.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 193, "wall_ts_ms": 1789189933592, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0193", "position": {"x": 700.0, "y": 700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933592, "virtual_time_s": 3731.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 194, "wall_ts_ms": 1789189933593, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0194", "position": {"x": 700.0, "y": 700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933593, "virtual_time_s": 3737.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 195, "wall_ts_ms": 1789189933593, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0195", "position": {"x": 700.0, "y": 700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933593, "virtual_time_s": 3743.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 196, "wall_ts_ms": 1789189933594, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0196", "position": {"x": 700.0, "y": 700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933594, "virtual_time_s": 3749.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 197, "wall_ts_ms": 1789189933594, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0197", "position": {"x": 700.0, "y": 700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933594, "virtual_time_s": 3755.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 198, "wall_ts_ms": 1789189933595, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0198", "position": {"x": 700.0, "y": 700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933595, "virtual_time_s": 3761.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 199, "wall_ts_ms": 1789189933595, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0199", "position": {"x": 700.0, "y": 700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933595, "virtual_time_s": 3767.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 200, "wall_ts_ms": 1789189933596, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0200", "position": {"x": 700.0, "y": 700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933596, "virtual_time_s": 3773.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 201, "wall_ts_ms": 1789189933596, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0201", "position": {"x": 700.0, "y": 700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933596, "virtual_time_s": 3779.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 202, "wall_ts_ms": 1789189933597, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0202", "position": {"x": 700.0, "y": 700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933597, "virtual_time_s": 3785.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 203, "wall_ts_ms": 1789189933597, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0203", "position": {"x": 700.0, "y": 700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933597, "virtual_time_s": 3791.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 204, "wall_ts_ms": 1789189933598, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0204", "position": {"x": 700.0, "y": 700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933598, "virtual_time_s": 3797.378606, "measure_result": "no_signal"}} +{"event": "action", "seq": 205, "wall_ts_ms": 1789189933599, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0205", "position": {"x": 800.0, "y": 200.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933599, "virtual_time_s": 3904.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 206, "wall_ts_ms": 1789189933599, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0206", "position": {"x": 800.0, "y": 200.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933599, "virtual_time_s": 3910.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 207, "wall_ts_ms": 1789189933600, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0207", "position": {"x": 800.0, "y": 200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933600, "virtual_time_s": 3916.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 208, "wall_ts_ms": 1789189933600, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0208", "position": {"x": 800.0, "y": 200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933600, "virtual_time_s": 3922.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 209, "wall_ts_ms": 1789189933601, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0209", "position": {"x": 800.0, "y": 200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933601, "virtual_time_s": 3928.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 210, "wall_ts_ms": 1789189933601, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0210", "position": {"x": 800.0, "y": 200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933601, "virtual_time_s": 3934.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 211, "wall_ts_ms": 1789189933602, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0211", "position": {"x": 800.0, "y": 200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933602, "virtual_time_s": 3940.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 212, "wall_ts_ms": 1789189933602, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0212", "position": {"x": 800.0, "y": 200.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933602, "virtual_time_s": 3946.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 213, "wall_ts_ms": 1789189933603, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0213", "position": {"x": 800.0, "y": 200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933603, "virtual_time_s": 3952.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 214, "wall_ts_ms": 1789189933603, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0214", "position": {"x": 800.0, "y": 200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933603, "virtual_time_s": 3958.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 215, "wall_ts_ms": 1789189933604, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0215", "position": {"x": 800.0, "y": 200.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933604, "virtual_time_s": 3964.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 216, "wall_ts_ms": 1789189933604, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0216", "position": {"x": 800.0, "y": 200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933604, "virtual_time_s": 3970.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 217, "wall_ts_ms": 1789189933604, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0217", "position": {"x": 800.0, "y": 200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933604, "virtual_time_s": 3976.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 218, "wall_ts_ms": 1789189933605, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0218", "position": {"x": 800.0, "y": 200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933605, "virtual_time_s": 3982.358996, "measure_result": "no_signal"}} +{"event": "action", "seq": 219, "wall_ts_ms": 1789189933606, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0219", "position": {"x": 900.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933606, "virtual_time_s": 4168.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 220, "wall_ts_ms": 1789189933606, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0220", "position": {"x": 900.0, "y": -700.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933606, "virtual_time_s": 4174.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 221, "wall_ts_ms": 1789189933607, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0221", "position": {"x": 900.0, "y": -700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933607, "virtual_time_s": 4180.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 222, "wall_ts_ms": 1789189933607, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0222", "position": {"x": 900.0, "y": -700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933607, "virtual_time_s": 4186.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 223, "wall_ts_ms": 1789189933607, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0223", "position": {"x": 900.0, "y": -700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933607, "virtual_time_s": 4192.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 224, "wall_ts_ms": 1789189933608, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0224", "position": {"x": 900.0, "y": -700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933608, "virtual_time_s": 4198.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 225, "wall_ts_ms": 1789189933609, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0225", "position": {"x": 900.0, "y": -700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933609, "virtual_time_s": 4204.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 226, "wall_ts_ms": 1789189933609, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0226", "position": {"x": 900.0, "y": -700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933609, "virtual_time_s": 4210.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 227, "wall_ts_ms": 1789189933610, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0227", "position": {"x": 900.0, "y": -700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933610, "virtual_time_s": 4216.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 228, "wall_ts_ms": 1789189933610, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0228", "position": {"x": 900.0, "y": -700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933610, "virtual_time_s": 4222.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 229, "wall_ts_ms": 1789189933611, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0229", "position": {"x": 900.0, "y": -700.0}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933611, "virtual_time_s": 4228.466699, "measure_result": "direction", "svd_deg": 294.87}} +{"event": "action", "seq": 230, "wall_ts_ms": 1789189933642, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0230", "position": {"x": 900.0, "y": -700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933642, "virtual_time_s": 4234.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 231, "wall_ts_ms": 1789189933642, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0231", "position": {"x": 900.0, "y": -700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933642, "virtual_time_s": 4240.466699, "measure_result": "no_signal"}} +{"event": "action", "seq": 232, "wall_ts_ms": 1789189933643, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0232", "position": {"x": 900.0, "y": -700.0}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933643, "virtual_time_s": 4246.466699, "measure_result": "direction", "svd_deg": 336.86}} +{"event": "action", "seq": 233, "wall_ts_ms": 1789189933723, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0233", "position": {"x": 1044.0488592039003, "y": -827.3196548564852}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933723, "virtual_time_s": 4289.916858, "measure_result": "direction", "svd_deg": 346.75}} +{"event": "action", "seq": 234, "wall_ts_ms": 1789189933744, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0234", "position": {"x": 1357.9768229836234, "y": -913.9346875948966}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933744, "virtual_time_s": 4360.048396, "measure_result": "direction", "svd_deg": 355.78}} +{"event": "action", "seq": 235, "wall_ts_ms": 1789189933754, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0235", "position": {"x": 1405.8001894045515, "y": -918.9165422821776}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933754, "virtual_time_s": 4374.664826, "measure_result": "direction", "svd_deg": 11.34}} +{"event": "action", "seq": 236, "wall_ts_ms": 1789189933755, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0236", "position": {"x": 1411.5925631629186, "y": -917.8244471376668}, "channel": 19}, "response": {"accepted": true, "real_timestamp_ms": 1789189933755, "virtual_time_s": 4380.843711, "clear_result": "success"}} +{"event": "action", "seq": 237, "wall_ts_ms": 1789189933806, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0237", "position": {"x": 1170.2246897903278, "y": -899.9402270486513}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933806, "virtual_time_s": 4435.249618, "measure_result": "direction", "svd_deg": 239.20999999999998}} +{"event": "action", "seq": 238, "wall_ts_ms": 1789189933807, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0238", "position": {"x": 1070.364677830551, "y": -1067.8988833686794}, "channel": 13}, "response": {"accepted": true, "real_timestamp_ms": 1789189933807, "virtual_time_s": 4479.330116, "clear_result": "success"}} +{"event": "action", "seq": 239, "wall_ts_ms": 1789189933808, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0239", "position": {"x": 1200.0, "y": -700.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933808, "virtual_time_s": 4563.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 240, "wall_ts_ms": 1789189933809, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0240", "position": {"x": 1200.0, "y": -700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933809, "virtual_time_s": 4569.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 241, "wall_ts_ms": 1789189933809, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0241", "position": {"x": 1200.0, "y": -700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933809, "virtual_time_s": 4575.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 242, "wall_ts_ms": 1789189933810, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0242", "position": {"x": 1200.0, "y": -700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933810, "virtual_time_s": 4581.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 243, "wall_ts_ms": 1789189933810, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0243", "position": {"x": 1200.0, "y": -700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933810, "virtual_time_s": 4587.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 244, "wall_ts_ms": 1789189933811, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0244", "position": {"x": 1200.0, "y": -700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933811, "virtual_time_s": 4593.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 245, "wall_ts_ms": 1789189933811, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0245", "position": {"x": 1200.0, "y": -700.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933811, "virtual_time_s": 4599.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 246, "wall_ts_ms": 1789189933812, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0246", "position": {"x": 1200.0, "y": -700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933812, "virtual_time_s": 4605.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 247, "wall_ts_ms": 1789189933812, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0247", "position": {"x": 1200.0, "y": -700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933812, "virtual_time_s": 4611.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 248, "wall_ts_ms": 1789189933813, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0248", "position": {"x": 1200.0, "y": -700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933813, "virtual_time_s": 4617.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 249, "wall_ts_ms": 1789189933813, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0249", "position": {"x": 1200.0, "y": -700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933813, "virtual_time_s": 4623.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 250, "wall_ts_ms": 1789189933814, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0250", "position": {"x": 1200.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933814, "virtual_time_s": 4629.344193, "measure_result": "no_signal"}} +{"event": "action", "seq": 251, "wall_ts_ms": 1789189933814, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0251", "position": {"x": 1800.0, "y": -400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933814, "virtual_time_s": 4768.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 252, "wall_ts_ms": 1789189933815, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0252", "position": {"x": 1800.0, "y": -400.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933815, "virtual_time_s": 4774.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 253, "wall_ts_ms": 1789189933815, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0253", "position": {"x": 1800.0, "y": -400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933815, "virtual_time_s": 4780.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 254, "wall_ts_ms": 1789189933816, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0254", "position": {"x": 1800.0, "y": -400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933816, "virtual_time_s": 4786.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 255, "wall_ts_ms": 1789189933816, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0255", "position": {"x": 1800.0, "y": -400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933816, "virtual_time_s": 4792.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 256, "wall_ts_ms": 1789189933817, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0256", "position": {"x": 1800.0, "y": -400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933817, "virtual_time_s": 4798.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 257, "wall_ts_ms": 1789189933818, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0257", "position": {"x": 1800.0, "y": -400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933818, "virtual_time_s": 4804.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 258, "wall_ts_ms": 1789189933818, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0258", "position": {"x": 1800.0, "y": -400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933818, "virtual_time_s": 4810.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 259, "wall_ts_ms": 1789189933819, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0259", "position": {"x": 1800.0, "y": -400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933819, "virtual_time_s": 4816.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 260, "wall_ts_ms": 1789189933819, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0260", "position": {"x": 1800.0, "y": -400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933819, "virtual_time_s": 4822.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 261, "wall_ts_ms": 1789189933820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0261", "position": {"x": 1800.0, "y": -400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933820, "virtual_time_s": 4828.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 262, "wall_ts_ms": 1789189933820, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0262", "position": {"x": 1800.0, "y": -400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933820, "virtual_time_s": 4834.508272, "measure_result": "no_signal"}} +{"event": "action", "seq": 263, "wall_ts_ms": 1789189933821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0263", "position": {"x": 1900.0, "y": -900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933821, "virtual_time_s": 4941.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 264, "wall_ts_ms": 1789189933821, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0264", "position": {"x": 1900.0, "y": -900.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933821, "virtual_time_s": 4947.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 265, "wall_ts_ms": 1789189933822, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0265", "position": {"x": 1900.0, "y": -900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933822, "virtual_time_s": 4953.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 266, "wall_ts_ms": 1789189933822, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0266", "position": {"x": 1900.0, "y": -900.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933822, "virtual_time_s": 4959.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 267, "wall_ts_ms": 1789189933823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0267", "position": {"x": 1900.0, "y": -900.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933823, "virtual_time_s": 4965.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 268, "wall_ts_ms": 1789189933823, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0268", "position": {"x": 1900.0, "y": -900.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933823, "virtual_time_s": 4971.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 269, "wall_ts_ms": 1789189933824, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0269", "position": {"x": 1900.0, "y": -900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933824, "virtual_time_s": 4977.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 270, "wall_ts_ms": 1789189933824, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0270", "position": {"x": 1900.0, "y": -900.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933824, "virtual_time_s": 4983.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 271, "wall_ts_ms": 1789189933825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0271", "position": {"x": 1900.0, "y": -900.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933825, "virtual_time_s": 4989.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 272, "wall_ts_ms": 1789189933825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0272", "position": {"x": 1900.0, "y": -900.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933825, "virtual_time_s": 4995.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 273, "wall_ts_ms": 1789189933825, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0273", "position": {"x": 1900.0, "y": -900.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933825, "virtual_time_s": 5001.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 274, "wall_ts_ms": 1789189933826, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0274", "position": {"x": 1900.0, "y": -900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933826, "virtual_time_s": 5007.488662, "measure_result": "no_signal"}} +{"event": "action", "seq": 275, "wall_ts_ms": 1789189933826, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0275", "position": {"x": 1400.0, "y": -1400.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933826, "virtual_time_s": 5153.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 276, "wall_ts_ms": 1789189933827, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0276", "position": {"x": 1400.0, "y": -1400.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933827, "virtual_time_s": 5159.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 277, "wall_ts_ms": 1789189933827, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0277", "position": {"x": 1400.0, "y": -1400.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933827, "virtual_time_s": 5165.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 278, "wall_ts_ms": 1789189933828, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0278", "position": {"x": 1400.0, "y": -1400.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933828, "virtual_time_s": 5171.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 279, "wall_ts_ms": 1789189933829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0279", "position": {"x": 1400.0, "y": -1400.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933829, "virtual_time_s": 5177.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 280, "wall_ts_ms": 1789189933829, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0280", "position": {"x": 1400.0, "y": -1400.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933829, "virtual_time_s": 5183.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 281, "wall_ts_ms": 1789189933830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0281", "position": {"x": 1400.0, "y": -1400.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933830, "virtual_time_s": 5189.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 282, "wall_ts_ms": 1789189933830, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0282", "position": {"x": 1400.0, "y": -1400.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933830, "virtual_time_s": 5195.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 283, "wall_ts_ms": 1789189933831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0283", "position": {"x": 1400.0, "y": -1400.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933831, "virtual_time_s": 5201.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 284, "wall_ts_ms": 1789189933831, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0284", "position": {"x": 1400.0, "y": -1400.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933831, "virtual_time_s": 5207.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 285, "wall_ts_ms": 1789189933832, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0285", "position": {"x": 1400.0, "y": -1400.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933832, "virtual_time_s": 5213.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 286, "wall_ts_ms": 1789189933832, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0286", "position": {"x": 1400.0, "y": -1400.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933832, "virtual_time_s": 5219.910018, "measure_result": "no_signal"}} +{"event": "action", "seq": 287, "wall_ts_ms": 1789189933833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0287", "position": {"x": 500.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189933833, "virtual_time_s": 5421.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 288, "wall_ts_ms": 1789189933833, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0288", "position": {"x": 500.0, "y": -1800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189933833, "virtual_time_s": 5427.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 289, "wall_ts_ms": 1789189933834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0289", "position": {"x": 500.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189933834, "virtual_time_s": 5433.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 290, "wall_ts_ms": 1789189933834, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0290", "position": {"x": 500.0, "y": -1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189933834, "virtual_time_s": 5439.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 291, "wall_ts_ms": 1789189933835, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0291", "position": {"x": 500.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189933835, "virtual_time_s": 5445.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 292, "wall_ts_ms": 1789189933835, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0292", "position": {"x": 500.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189933835, "virtual_time_s": 5451.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 293, "wall_ts_ms": 1789189933836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0293", "position": {"x": 500.0, "y": -1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189933836, "virtual_time_s": 5457.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 294, "wall_ts_ms": 1789189933836, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0294", "position": {"x": 500.0, "y": -1800.0}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933836, "virtual_time_s": 5463.887174, "measure_result": "direction", "svd_deg": 166.48}} +{"event": "action", "seq": 295, "wall_ts_ms": 1789189933864, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0295", "position": {"x": 500.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189933864, "virtual_time_s": 5469.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 296, "wall_ts_ms": 1789189933864, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0296", "position": {"x": 500.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189933864, "virtual_time_s": 5475.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 297, "wall_ts_ms": 1789189933865, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0297", "position": {"x": 500.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189933865, "virtual_time_s": 5481.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 298, "wall_ts_ms": 1789189933865, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0298", "position": {"x": 500.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189933865, "virtual_time_s": 5487.887174, "measure_result": "no_signal"}} +{"event": "action", "seq": 299, "wall_ts_ms": 1789189933982, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0299", "position": {"x": 39.038176448670924, "y": -1608.1186485017345}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189933982, "virtual_time_s": 5593.747928, "measure_result": "direction", "svd_deg": 173.28}} +{"event": "action", "seq": 300, "wall_ts_ms": 1789189934032, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0300", "position": {"x": -551.8447592561523, "y": -1518.7275492488257}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189934032, "virtual_time_s": 5718.269209, "measure_result": "direction", "svd_deg": 185.61}} +{"event": "action", "seq": 301, "wall_ts_ms": 1789189934048, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0301", "position": {"x": -618.8048957302169, "y": -1527.219249100424}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189934048, "virtual_time_s": 5736.768496, "measure_result": "direction", "svd_deg": 182.91}} +{"event": "action", "seq": 302, "wall_ts_ms": 1789189934061, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0302", "position": {"x": -648.1262295310768, "y": -1529.4822823802285}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189934061, "virtual_time_s": 5747.650203, "measure_result": "direction", "svd_deg": 8.28}} +{"event": "action", "seq": 303, "wall_ts_ms": 1789189934062, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0303", "position": {"x": -639.9565427868326, "y": -1528.3910228210898}, "channel": 10}, "response": {"accepted": true, "real_timestamp_ms": 1789189934062, "virtual_time_s": 5754.298652, "clear_result": "success"}} +{"event": "action", "seq": 304, "wall_ts_ms": 1789189934063, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0304", "position": {"x": -700.0, "y": -1200.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934063, "virtual_time_s": 5827.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 305, "wall_ts_ms": 1789189934064, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0305", "position": {"x": -700.0, "y": -1200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934064, "virtual_time_s": 5833.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 306, "wall_ts_ms": 1789189934064, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0306", "position": {"x": -700.0, "y": -1200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934064, "virtual_time_s": 5839.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 307, "wall_ts_ms": 1789189934065, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0307", "position": {"x": -700.0, "y": -1200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934065, "virtual_time_s": 5845.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 308, "wall_ts_ms": 1789189934065, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0308", "position": {"x": -700.0, "y": -1200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934065, "virtual_time_s": 5851.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 309, "wall_ts_ms": 1789189934066, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0309", "position": {"x": -700.0, "y": -1200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934066, "virtual_time_s": 5857.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 310, "wall_ts_ms": 1789189934067, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0310", "position": {"x": -700.0, "y": -1200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934066, "virtual_time_s": 5863.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 311, "wall_ts_ms": 1789189934067, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0311", "position": {"x": -700.0, "y": -1200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934067, "virtual_time_s": 5869.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 312, "wall_ts_ms": 1789189934068, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0312", "position": {"x": -700.0, "y": -1200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934068, "virtual_time_s": 5875.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 313, "wall_ts_ms": 1789189934068, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0313", "position": {"x": -700.0, "y": -1200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934068, "virtual_time_s": 5881.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 314, "wall_ts_ms": 1789189934069, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0314", "position": {"x": -700.0, "y": -1200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934069, "virtual_time_s": 5887.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 315, "wall_ts_ms": 1789189934069, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0315", "position": {"x": -700.0, "y": -700.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934069, "virtual_time_s": 5992.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 316, "wall_ts_ms": 1789189934070, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0316", "position": {"x": -700.0, "y": -700.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934070, "virtual_time_s": 5998.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 317, "wall_ts_ms": 1789189934070, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0317", "position": {"x": -700.0, "y": -700.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934070, "virtual_time_s": 6004.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 318, "wall_ts_ms": 1789189934071, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0318", "position": {"x": -700.0, "y": -700.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934071, "virtual_time_s": 6010.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 319, "wall_ts_ms": 1789189934071, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0319", "position": {"x": -700.0, "y": -700.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934071, "virtual_time_s": 6016.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 320, "wall_ts_ms": 1789189934072, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0320", "position": {"x": -700.0, "y": -700.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934072, "virtual_time_s": 6022.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 321, "wall_ts_ms": 1789189934072, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0321", "position": {"x": -700.0, "y": -700.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934072, "virtual_time_s": 6028.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 322, "wall_ts_ms": 1789189934073, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0322", "position": {"x": -700.0, "y": -700.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934073, "virtual_time_s": 6034.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 323, "wall_ts_ms": 1789189934074, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0323", "position": {"x": -700.0, "y": -700.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934073, "virtual_time_s": 6040.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 324, "wall_ts_ms": 1789189934074, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0324", "position": {"x": -700.0, "y": -700.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934074, "virtual_time_s": 6046.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 325, "wall_ts_ms": 1789189934075, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0325", "position": {"x": -700.0, "y": -700.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934075, "virtual_time_s": 6052.065674, "measure_result": "no_signal"}} +{"event": "action", "seq": 326, "wall_ts_ms": 1789189934075, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0326", "position": {"x": -800.0, "y": -200.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934075, "virtual_time_s": 6159.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 327, "wall_ts_ms": 1789189934076, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0327", "position": {"x": -800.0, "y": -200.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934076, "virtual_time_s": 6165.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 328, "wall_ts_ms": 1789189934076, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0328", "position": {"x": -800.0, "y": -200.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934076, "virtual_time_s": 6171.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 329, "wall_ts_ms": 1789189934077, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0329", "position": {"x": -800.0, "y": -200.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934077, "virtual_time_s": 6177.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 330, "wall_ts_ms": 1789189934077, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0330", "position": {"x": -800.0, "y": -200.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934077, "virtual_time_s": 6183.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 331, "wall_ts_ms": 1789189934078, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0331", "position": {"x": -800.0, "y": -200.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934078, "virtual_time_s": 6189.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 332, "wall_ts_ms": 1789189934079, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0332", "position": {"x": -800.0, "y": -200.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934079, "virtual_time_s": 6195.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 333, "wall_ts_ms": 1789189934079, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0333", "position": {"x": -800.0, "y": -200.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934079, "virtual_time_s": 6201.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 334, "wall_ts_ms": 1789189934080, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0334", "position": {"x": -800.0, "y": -200.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934080, "virtual_time_s": 6207.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 335, "wall_ts_ms": 1789189934080, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0335", "position": {"x": -800.0, "y": -200.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934080, "virtual_time_s": 6213.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 336, "wall_ts_ms": 1789189934081, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0336", "position": {"x": -800.0, "y": -200.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934081, "virtual_time_s": 6219.046064, "measure_result": "no_signal"}} +{"event": "action", "seq": 337, "wall_ts_ms": 1789189934081, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0337", "position": {"x": 200.0, "y": -900.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934081, "virtual_time_s": 6468.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 338, "wall_ts_ms": 1789189934082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0338", "position": {"x": 200.0, "y": -900.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934082, "virtual_time_s": 6474.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 339, "wall_ts_ms": 1789189934082, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0339", "position": {"x": 200.0, "y": -900.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934082, "virtual_time_s": 6480.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 340, "wall_ts_ms": 1789189934083, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0340", "position": {"x": 200.0, "y": -900.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934083, "virtual_time_s": 6486.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 341, "wall_ts_ms": 1789189934083, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0341", "position": {"x": 200.0, "y": -900.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934083, "virtual_time_s": 6492.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 342, "wall_ts_ms": 1789189934084, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0342", "position": {"x": 200.0, "y": -900.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934084, "virtual_time_s": 6498.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 343, "wall_ts_ms": 1789189934084, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0343", "position": {"x": 200.0, "y": -900.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934084, "virtual_time_s": 6504.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 344, "wall_ts_ms": 1789189934085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0344", "position": {"x": 200.0, "y": -900.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934085, "virtual_time_s": 6510.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 345, "wall_ts_ms": 1789189934085, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0345", "position": {"x": 200.0, "y": -900.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934085, "virtual_time_s": 6516.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 346, "wall_ts_ms": 1789189934086, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0346", "position": {"x": 200.0, "y": -900.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934086, "virtual_time_s": 6522.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 347, "wall_ts_ms": 1789189934087, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0347", "position": {"x": 200.0, "y": -900.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934087, "virtual_time_s": 6528.177176, "measure_result": "no_signal"}} +{"event": "action", "seq": 348, "wall_ts_ms": 1789189934087, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0348", "position": {"x": -400.0, "y": -1800.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934087, "virtual_time_s": 6749.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 349, "wall_ts_ms": 1789189934088, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0349", "position": {"x": -400.0, "y": -1800.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934088, "virtual_time_s": 6755.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 350, "wall_ts_ms": 1789189934088, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0350", "position": {"x": -400.0, "y": -1800.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934088, "virtual_time_s": 6761.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 351, "wall_ts_ms": 1789189934089, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0351", "position": {"x": -400.0, "y": -1800.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934089, "virtual_time_s": 6767.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 352, "wall_ts_ms": 1789189934089, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0352", "position": {"x": -400.0, "y": -1800.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934089, "virtual_time_s": 6773.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 353, "wall_ts_ms": 1789189934090, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0353", "position": {"x": -400.0, "y": -1800.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934090, "virtual_time_s": 6779.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 354, "wall_ts_ms": 1789189934090, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0354", "position": {"x": -400.0, "y": -1800.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934090, "virtual_time_s": 6785.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 355, "wall_ts_ms": 1789189934091, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0355", "position": {"x": -400.0, "y": -1800.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934091, "virtual_time_s": 6791.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 356, "wall_ts_ms": 1789189934091, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0356", "position": {"x": -400.0, "y": -1800.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934091, "virtual_time_s": 6797.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 357, "wall_ts_ms": 1789189934092, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0357", "position": {"x": -400.0, "y": -1800.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934092, "virtual_time_s": 6803.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 358, "wall_ts_ms": 1789189934092, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0358", "position": {"x": -400.0, "y": -1800.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934092, "virtual_time_s": 6809.510253, "measure_result": "no_signal"}} +{"event": "action", "seq": 359, "wall_ts_ms": 1789189934093, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0359", "position": {"x": -900.0, "y": -2100.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934093, "virtual_time_s": 6931.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 360, "wall_ts_ms": 1789189934093, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0360", "position": {"x": -900.0, "y": -2100.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934093, "virtual_time_s": 6937.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 361, "wall_ts_ms": 1789189934094, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0361", "position": {"x": -900.0, "y": -2100.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934094, "virtual_time_s": 6943.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 362, "wall_ts_ms": 1789189934094, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0362", "position": {"x": -900.0, "y": -2100.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934094, "virtual_time_s": 6949.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 363, "wall_ts_ms": 1789189934095, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0363", "position": {"x": -900.0, "y": -2100.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934095, "virtual_time_s": 6955.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 364, "wall_ts_ms": 1789189934095, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0364", "position": {"x": -900.0, "y": -2100.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934095, "virtual_time_s": 6961.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 365, "wall_ts_ms": 1789189934096, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0365", "position": {"x": -900.0, "y": -2100.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934096, "virtual_time_s": 6967.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 366, "wall_ts_ms": 1789189934096, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0366", "position": {"x": -900.0, "y": -2100.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934096, "virtual_time_s": 6973.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 367, "wall_ts_ms": 1789189934097, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0367", "position": {"x": -900.0, "y": -2100.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934097, "virtual_time_s": 6979.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 368, "wall_ts_ms": 1789189934098, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0368", "position": {"x": -900.0, "y": -2100.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934097, "virtual_time_s": 6985.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 369, "wall_ts_ms": 1789189934098, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0369", "position": {"x": -900.0, "y": -2100.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934098, "virtual_time_s": 6991.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 370, "wall_ts_ms": 1789189934099, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0370", "position": {"x": -1500.0, "y": -1300.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934099, "virtual_time_s": 7196.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 371, "wall_ts_ms": 1789189934099, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0371", "position": {"x": -1500.0, "y": -1300.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934099, "virtual_time_s": 7202.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 372, "wall_ts_ms": 1789189934100, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0372", "position": {"x": -1500.0, "y": -1300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934100, "virtual_time_s": 7208.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 373, "wall_ts_ms": 1789189934100, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0373", "position": {"x": -1500.0, "y": -1300.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934100, "virtual_time_s": 7214.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 374, "wall_ts_ms": 1789189934100, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0374", "position": {"x": -1500.0, "y": -1300.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934100, "virtual_time_s": 7220.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 375, "wall_ts_ms": 1789189934101, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0375", "position": {"x": -1500.0, "y": -1300.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934101, "virtual_time_s": 7226.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 376, "wall_ts_ms": 1789189934102, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0376", "position": {"x": -1500.0, "y": -1300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934102, "virtual_time_s": 7232.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 377, "wall_ts_ms": 1789189934102, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0377", "position": {"x": -1500.0, "y": -1300.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934102, "virtual_time_s": 7238.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 378, "wall_ts_ms": 1789189934103, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0378", "position": {"x": -1500.0, "y": -1300.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934103, "virtual_time_s": 7244.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 379, "wall_ts_ms": 1789189934103, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0379", "position": {"x": -1500.0, "y": -1300.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934103, "virtual_time_s": 7250.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 380, "wall_ts_ms": 1789189934104, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0380", "position": {"x": -1500.0, "y": -1300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934104, "virtual_time_s": 7256.129291, "measure_result": "no_signal"}} +{"event": "action", "seq": 381, "wall_ts_ms": 1789189934104, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0381", "position": {"x": -2500.0, "y": 500.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934104, "virtual_time_s": 7672.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 382, "wall_ts_ms": 1789189934105, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0382", "position": {"x": -2500.0, "y": 500.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934105, "virtual_time_s": 7678.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 383, "wall_ts_ms": 1789189934105, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0383", "position": {"x": -2500.0, "y": 500.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934105, "virtual_time_s": 7684.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 384, "wall_ts_ms": 1789189934106, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0384", "position": {"x": -2500.0, "y": 500.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934106, "virtual_time_s": 7690.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 385, "wall_ts_ms": 1789189934106, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0385", "position": {"x": -2500.0, "y": 500.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934106, "virtual_time_s": 7696.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 386, "wall_ts_ms": 1789189934107, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0386", "position": {"x": -2500.0, "y": 500.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934107, "virtual_time_s": 7702.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 387, "wall_ts_ms": 1789189934108, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0387", "position": {"x": -2500.0, "y": 500.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934108, "virtual_time_s": 7708.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 388, "wall_ts_ms": 1789189934109, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0388", "position": {"x": -2500.0, "y": 500.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934109, "virtual_time_s": 7714.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 389, "wall_ts_ms": 1789189934109, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0389", "position": {"x": -2500.0, "y": 500.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934109, "virtual_time_s": 7720.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 390, "wall_ts_ms": 1789189934110, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0390", "position": {"x": -2500.0, "y": 500.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934110, "virtual_time_s": 7726.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 391, "wall_ts_ms": 1789189934110, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0391", "position": {"x": -2500.0, "y": 500.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934110, "virtual_time_s": 7732.954497, "measure_result": "no_signal"}} +{"event": "action", "seq": 392, "wall_ts_ms": 1789189934111, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0392", "position": {"x": -1300.0, "y": 1500.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934111, "virtual_time_s": 8050.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 393, "wall_ts_ms": 1789189934111, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0393", "position": {"x": -1300.0, "y": 1500.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934111, "virtual_time_s": 8056.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 394, "wall_ts_ms": 1789189934112, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0394", "position": {"x": -1300.0, "y": 1500.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934112, "virtual_time_s": 8062.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 395, "wall_ts_ms": 1789189934112, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0395", "position": {"x": -1300.0, "y": 1500.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934112, "virtual_time_s": 8068.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 396, "wall_ts_ms": 1789189934113, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0396", "position": {"x": -1300.0, "y": 1500.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934113, "virtual_time_s": 8074.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 397, "wall_ts_ms": 1789189934113, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0397", "position": {"x": -1300.0, "y": 1500.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934113, "virtual_time_s": 8080.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 398, "wall_ts_ms": 1789189934114, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0398", "position": {"x": -1300.0, "y": 1500.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934114, "virtual_time_s": 8086.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 399, "wall_ts_ms": 1789189934114, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0399", "position": {"x": -1300.0, "y": 1500.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934114, "virtual_time_s": 8092.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 400, "wall_ts_ms": 1789189934115, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0400", "position": {"x": -1300.0, "y": 1500.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934115, "virtual_time_s": 8098.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 401, "wall_ts_ms": 1789189934115, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0401", "position": {"x": -1300.0, "y": 1500.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934115, "virtual_time_s": 8104.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 402, "wall_ts_ms": 1789189934116, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0402", "position": {"x": -1300.0, "y": 1500.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934116, "virtual_time_s": 8110.364484, "measure_result": "no_signal"}} +{"event": "action", "seq": 403, "wall_ts_ms": 1789189934116, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0403", "position": {"x": 1300.0, "y": 1100.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934116, "virtual_time_s": 8641.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 404, "wall_ts_ms": 1789189934117, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0404", "position": {"x": 1300.0, "y": 1100.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934117, "virtual_time_s": 8647.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 405, "wall_ts_ms": 1789189934117, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0405", "position": {"x": 1300.0, "y": 1100.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934117, "virtual_time_s": 8653.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 406, "wall_ts_ms": 1789189934118, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0406", "position": {"x": 1300.0, "y": 1100.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934118, "virtual_time_s": 8659.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 407, "wall_ts_ms": 1789189934118, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0407", "position": {"x": 1300.0, "y": 1100.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934118, "virtual_time_s": 8665.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 408, "wall_ts_ms": 1789189934119, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0408", "position": {"x": 1300.0, "y": 1100.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934119, "virtual_time_s": 8671.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 409, "wall_ts_ms": 1789189934119, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0409", "position": {"x": 1300.0, "y": 1100.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934119, "virtual_time_s": 8677.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 410, "wall_ts_ms": 1789189934119, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0410", "position": {"x": 1300.0, "y": 1100.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934119, "virtual_time_s": 8683.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 411, "wall_ts_ms": 1789189934120, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0411", "position": {"x": 1300.0, "y": 1100.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934120, "virtual_time_s": 8689.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 412, "wall_ts_ms": 1789189934120, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0412", "position": {"x": 1300.0, "y": 1100.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934120, "virtual_time_s": 8695.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 413, "wall_ts_ms": 1789189934121, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0413", "position": {"x": 1300.0, "y": 1100.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934121, "virtual_time_s": 8701.482342, "measure_result": "no_signal"}} +{"event": "action", "seq": 414, "wall_ts_ms": 1789189934121, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0414", "position": {"x": 1500.0, "y": 1300.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934121, "virtual_time_s": 8763.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 415, "wall_ts_ms": 1789189934122, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0415", "position": {"x": 1500.0, "y": 1300.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934122, "virtual_time_s": 8769.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 416, "wall_ts_ms": 1789189934123, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0416", "position": {"x": 1500.0, "y": 1300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934123, "virtual_time_s": 8775.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 417, "wall_ts_ms": 1789189934123, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0417", "position": {"x": 1500.0, "y": 1300.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934123, "virtual_time_s": 8781.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 418, "wall_ts_ms": 1789189934124, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0418", "position": {"x": 1500.0, "y": 1300.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934124, "virtual_time_s": 8787.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 419, "wall_ts_ms": 1789189934124, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0419", "position": {"x": 1500.0, "y": 1300.0}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934124, "virtual_time_s": 8793.050884, "measure_result": "direction", "svd_deg": 270.15}} +{"event": "action", "seq": 420, "wall_ts_ms": 1789189934152, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0420", "position": {"x": 1500.0, "y": 1300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934152, "virtual_time_s": 8799.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 421, "wall_ts_ms": 1789189934152, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0421", "position": {"x": 1500.0, "y": 1300.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934152, "virtual_time_s": 8805.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 422, "wall_ts_ms": 1789189934153, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0422", "position": {"x": 1500.0, "y": 1300.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934153, "virtual_time_s": 8811.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 423, "wall_ts_ms": 1789189934153, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0423", "position": {"x": 1500.0, "y": 1300.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934153, "virtual_time_s": 8817.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 424, "wall_ts_ms": 1789189934154, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0424", "position": {"x": 1500.0, "y": 1300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934154, "virtual_time_s": 8823.050884, "measure_result": "no_signal"}} +{"event": "action", "seq": 425, "wall_ts_ms": 1789189934245, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0425", "position": {"x": 1501.7998441019943, "y": 701.1544031874471}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934245, "virtual_time_s": 8948.820544, "measure_result": "no_signal"}} +{"event": "action", "seq": 426, "wall_ts_ms": 1789189934337, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0426", "position": {"x": 1501.7998441019943, "y": 1001.7014551198498}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934337, "virtual_time_s": 9013.929954, "measure_result": "direction", "svd_deg": 267.85}} +{"event": "action", "seq": 427, "wall_ts_ms": 1789189934419, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0427", "position": {"x": 1489.468113361522, "y": 993.1454045261961}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934419, "virtual_time_s": 9021.931804, "measure_result": "direction", "svd_deg": 277.68}} +{"event": "action", "seq": 428, "wall_ts_ms": 1789189934420, "method": "POST", "path": "/clear", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0428", "position": {"x": 1499.0191527409906, "y": 920.2417126862134}, "channel": 8}, "response": {"accepted": true, "real_timestamp_ms": 1789189934420, "virtual_time_s": 9041.637137, "clear_result": "success"}} +{"event": "action", "seq": 429, "wall_ts_ms": 1789189934421, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0429", "position": {"x": 1800.0, "y": 300.0}, "channel": 2}, "response": {"accepted": true, "real_timestamp_ms": 1789189934421, "virtual_time_s": 9185.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 430, "wall_ts_ms": 1789189934422, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0430", "position": {"x": 1800.0, "y": 300.0}, "channel": 3}, "response": {"accepted": true, "real_timestamp_ms": 1789189934422, "virtual_time_s": 9191.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 431, "wall_ts_ms": 1789189934422, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0431", "position": {"x": 1800.0, "y": 300.0}, "channel": 5}, "response": {"accepted": true, "real_timestamp_ms": 1789189934422, "virtual_time_s": 9197.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 432, "wall_ts_ms": 1789189934423, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0432", "position": {"x": 1800.0, "y": 300.0}, "channel": 6}, "response": {"accepted": true, "real_timestamp_ms": 1789189934423, "virtual_time_s": 9203.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 433, "wall_ts_ms": 1789189934423, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0433", "position": {"x": 1800.0, "y": 300.0}, "channel": 9}, "response": {"accepted": true, "real_timestamp_ms": 1789189934423, "virtual_time_s": 9209.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 434, "wall_ts_ms": 1789189934424, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0434", "position": {"x": 1800.0, "y": 300.0}, "channel": 11}, "response": {"accepted": true, "real_timestamp_ms": 1789189934424, "virtual_time_s": 9215.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 435, "wall_ts_ms": 1789189934424, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0435", "position": {"x": 1800.0, "y": 300.0}, "channel": 12}, "response": {"accepted": true, "real_timestamp_ms": 1789189934424, "virtual_time_s": 9221.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 436, "wall_ts_ms": 1789189934425, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0436", "position": {"x": 1800.0, "y": 300.0}, "channel": 14}, "response": {"accepted": true, "real_timestamp_ms": 1789189934425, "virtual_time_s": 9227.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 437, "wall_ts_ms": 1789189934425, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0437", "position": {"x": 1800.0, "y": 300.0}, "channel": 15}, "response": {"accepted": true, "real_timestamp_ms": 1789189934425, "virtual_time_s": 9233.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 438, "wall_ts_ms": 1789189934426, "method": "POST", "path": "/measure", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0438", "position": {"x": 1800.0, "y": 300.0}, "channel": 17}, "response": {"accepted": true, "real_timestamp_ms": 1789189934426, "virtual_time_s": 9239.519587, "measure_result": "no_signal"}} +{"event": "action", "seq": 439, "wall_ts_ms": 1789189934426, "method": "POST", "path": "/exit", "status": 200, "request": {"arena_id": "default", "robot_id": "1", "request_id": "593f8e5ecda7-0439"}, "response": {"accepted": true, "real_timestamp_ms": 1789189934426, "virtual_time_s": 9239.519587, "exit_reason": "user_exit"}} +{"event": "session_end", "reason": "user_exit", "virtual_time_s": 9239.519587, "real_elapsed_s": 8.559283, "request_count": 439, "cleared_count": 10} diff --git a/referee-data/sessions/ZBUC-YW26-J7BH-V2WP/meta.json b/referee-data/sessions/ZBUC-YW26-J7BH-V2WP/meta.json new file mode 100644 index 0000000..53d597d --- /dev/null +++ b/referee-data/sessions/ZBUC-YW26-J7BH-V2WP/meta.json @@ -0,0 +1,88 @@ +{ + "case_code": "ZBUC-YW26-J7BH-V2WP", + "module": "q4_practice", + "robot_id": "1", + "seed": 863642061, + "truth": [ + { + "channel": 19, + "x": 1411.2207258221881, + "y": -917.895587407795, + "r_eff_m": 1091.9794913249818, + "directional": true, + "heading_deg": 153.47630212371047 + }, + { + "channel": 8, + "x": 1498.3737761812351, + "y": 930.3904917291879, + "r_eff_m": 1272.8873716121275, + "directional": true, + "heading_deg": 31.83753169216975 + }, + { + "channel": 20, + "x": 398.74127594294674, + "y": 289.06782254078047, + "r_eff_m": 1289.352680954292, + "directional": true, + "heading_deg": 160.24361954063997 + }, + { + "channel": 18, + "x": -600.2602564102094, + "y": 1150.9469673246213, + "r_eff_m": 1418.9470346878875, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 10, + "x": -641.1344471816941, + "y": -1528.5314521440819, + "r_eff_m": 1343.871107386684, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 4, + "x": -673.4635271867537, + "y": 1045.7718411070223, + "r_eff_m": 1169.0688552732329, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 1, + "x": -1236.5632089871194, + "y": -490.4229776016893, + "r_eff_m": 1484.249955482677, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 16, + "x": -1426.9540787395435, + "y": -176.611350029181, + "r_eff_m": 1081.1607993545874, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 13, + "x": 1073.330745196976, + "y": -1066.1914143107938, + "r_eff_m": 1158.1511964548743, + "directional": false, + "heading_deg": 0.0 + }, + { + "channel": 7, + "x": -1592.8182208096703, + "y": 396.44615965418825, + "r_eff_m": 1087.696159659708, + "directional": false, + "heading_deg": 0.0 + } + ] +} \ No newline at end of file diff --git a/scripts/ablate_hrl.py b/scripts/ablate_hrl.py deleted file mode 100644 index c038a62..0000000 --- a/scripts/ablate_hrl.py +++ /dev/null @@ -1,25 +0,0 @@ -"""HRL 消融入口(P2 待实现)。 - -预定义消融维度:时间目标 vs prompt 塑形、信息增益奖励系数、动作掩码取消范围、 -课程学习、粒子统计特征。硬性协议守卫/证书/预算永远保留,不在消融中取消。 -""" -from __future__ import annotations - -import argparse - - -def main(argv=None) -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--variants", default="time,prompt,no_info,no_mask,no_curriculum") - parser.add_argument("--manifest", default="output/hrl/manifests/final.json") - parser.add_argument("--output", default="output/hrl/p2-ablation") - parser.add_argument("--timesteps", type=int, default=2048) - parser.add_argument("--seeds", type=int, default=5) - parser.parse_args(argv) - raise NotImplementedError( - "P2 尚未实现:必须先完成专家 BC 与冻结场景对照," - "再对相同训练步数/场景/种子逐项消融;P1 只保证 benchmark/training/CLI。") - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/analyze_run_timing.py b/scripts/analyze_run_timing.py new file mode 100644 index 0000000..0e43d11 --- /dev/null +++ b/scripts/analyze_run_timing.py @@ -0,0 +1,229 @@ +"""运行历史计时分解:对任意会话日志按官方计时模型独立复算并分相。 + +支持两种格式(自动识别): +- 参赛队客户端日志:``scripts/capture_practice.py`` / ``SimulatorClient`` 写出的 + JSONL,逐行 ``attempt`` / ``accepted`` / ``step``; +- 评测机日志:``referee-data/sessions//log.jsonl``,逐行 + ``session_start`` / ``action`` / ``session_end``。 + +复算口径与 ``scripts/verify_q3_practice.py::timing_rows`` 完全一致(题面附件2 §4.1): +``T = Σ 距离/5 + 5·N_measure + N_switch + 5·N_clear⁺ + 3·N_clear⁻``, +起点位置 (0,0)、起始频道 1,``/clear`` 不计换频,移动按整数微秒累计。 + +用途:把"虚拟时间花在哪"变成一条可随时重跑的命令,而不是一次性的分析结论。 + + uv run python scripts/analyze_run_timing.py session.jsonl + uv run python scripts/analyze_run_timing.py referee-data/sessions/*/log.jsonl --json out.json + uv run python scripts/analyze_run_timing.py session.jsonl --plan seven # 站点/探点分类 +""" + +from __future__ import annotations + +import argparse +import json +import math +from collections import Counter, defaultdict +from pathlib import Path + +SPEED_MPS = 5.0 # [题面] 附件1 表1 +MEASURE_S = 5 # [题面] +SWITCH_S = 1 # [题面] +CLEAR_SUCCESS_S = 5 # [题面] +CLEAR_FAIL_S = 3 # [题面] +START_POSITION = (0.0, 0.0) +START_CHANNEL = 1 + + +def load_actions(path: Path) -> list[dict]: + """读取一份 JSONL,归一化为已接受动作序列。""" + actions: list[dict] = [] + for line in path.read_text(encoding="utf-8", errors="replace").splitlines(): + line = line.strip() + if not line: + continue + try: + record = json.loads(line) + except json.JSONDecodeError: + continue + event = record.get("event") + if event == "accepted": + request, response = record.get("request", {}), record.get("response", {}) + accepted = bool(response.get("accepted", True)) + elif event == "action": + request, response = record.get("request", {}), record.get("response", {}) + accepted = bool(response.get("accepted", record.get("status") == 200)) + else: + continue + if not accepted: + continue + actions.append({ + "path": record.get("path") or request.get("path") or "", + "position": request.get("position"), + "channel": request.get("channel"), + "result": response.get("measure_result") or response.get("clear_result") or "", + "recorded_s": response.get("virtual_time_s"), + "elapsed_s": record.get("elapsed_s"), + }) + return actions + + +def recompute(actions: list[dict]) -> tuple[list[dict], dict]: + """按官方模型逐动作复算;返回明细与汇总(微秒整数累计)。""" + position, channel, virtual_us = START_POSITION, START_CHANNEL, 0 + rows: list[dict] = [] + totals = Counter() + distance_total = 0.0 + max_gap_us = 0 + for index, action in enumerate(actions): + path = action["path"] + move_s = switches = action_s = 0.0 + if path in ("/measure", "/clear") and action["position"] is not None: + target = (float(action["position"]["x"]), float(action["position"]["y"])) + distance_total += math.dist(position, target) + move_s = math.dist(position, target) / SPEED_MPS + position = target + if path == "/measure": + switches = int(channel != action["channel"]) + channel = action["channel"] + action_s = MEASURE_S + else: + action_s = CLEAR_SUCCESS_S if action["result"] == "success" else CLEAR_FAIL_S + move_us = round(move_s * 1_000_000) + virtual_us += move_us + int((switches + action_s) * 1_000_000) + totals["move_us"] += move_us + totals["switch_s"] += switches + totals["action_us"] += int(action_s * 1_000_000) + totals["count"] += 1 + if action["elapsed_s"]: + totals["elapsed_s"] += action["elapsed_s"] + recorded = action["recorded_s"] + gap_us = ((round(recorded * 1_000_000) - virtual_us) + if isinstance(recorded, (int, float)) else 0) + max_gap_us = max(max_gap_us, abs(gap_us)) + rows.append({"index": index, "path": path, "channel": action["channel"], + "x": position[0], "y": position[1], "result": action["result"], + "move_us": move_us, "switch_s": switches, "action_s": action_s, + "recomputed_us": virtual_us, "recorded_s": recorded, "gap_us": gap_us}) + summary = { + "actions": len(actions), + "virtual_s": round(virtual_us / 1_000_000, 6), + "move_s": round(totals["move_us"] / 1_000_000, 3), + "switch_s": float(totals["switch_s"]), + "action_s": round(totals["action_us"] / 1_000_000, 3), + "distance_m": round(distance_total, 1), + "real_elapsed_s": round(totals["elapsed_s"], 3), + "max_recorded_gap_s": max_gap_us / 1_000_000, + } + return rows, summary + + +def phase_report(rows: list[dict]) -> dict: + """清除前后分相 + 重复复扫检测(定位"时间被重复动作吃掉"的历史问题)。""" + clear_indices = [r["index"] for r in rows if r["path"] == "/clear"] + last_clear = max(clear_indices) if clear_indices else None + measure_keys = defaultdict(int) + for row in rows: + if row["path"] == "/measure": + key = (round(row["x"] * 2), round(row["y"] * 2), row["channel"]) + measure_keys[key] += 1 + repeated = sum(count - 1 for count in measure_keys.values() if count > 1) + report = { + "measures": sum(1 for r in rows if r["path"] == "/measure"), + "clears": len(clear_indices), + "failed_clears": sum(1 for r in rows + if r["path"] == "/clear" and r["result"] != "success"), + "distinct_measure_stops": len(measure_keys), + "repeated_measure_actions": repeated, + "repeat_ratio": round(repeated / max(1, len(measure_keys)), 3), + } + if last_clear is not None: + tail = [r for r in rows if r["index"] > last_clear] + report["last_clear_virtual_s"] = round(rows[last_clear]["recomputed_us"] / 1_000_000, 3) + report["after_last_clear_virtual_s"] = round( + sum(r["move_us"] + (r["switch_s"] + r["action_s"]) * 1_000_000 for r in tail) + / 1_000_000, 3) + report["after_last_clear_measures"] = sum(1 for r in tail if r["path"] == "/measure") + return report + + +def classify_by_plan(rows: list[dict], points, tol_m: float = 2.0) -> dict: + """按给定站点集把 /measure 分成"站点扫频"与"专用探点",并给出各自移动耗时。""" + buckets: dict[str, Counter] = defaultdict(Counter) + for row in rows: + if row["path"] != "/measure": + continue + nearest = min((math.dist((row["x"], row["y"]), p) for p in points), default=math.inf) + kind = "station" if nearest <= tol_m else "probe" + buckets[kind]["n"] += 1 + buckets[kind]["move_us"] += row["move_us"] + return {kind: {"measures": value["n"], + "move_s": round(value["move_us"] / 1_000_000, 3)} + for kind, value in buckets.items()} + + +def _plan_points(name: str): + if name == "none": + return None + if name == "seven": + from mcm26b.planner.seven import seven_points + return seven_points() + if name == "49": + from mcm26b.coverage import coverage_points + return coverage_points() + raise ValueError(f"未知 --plan: {name}") + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("logs", nargs="+", type=Path, help="会话 JSONL(客户端或评测机格式)") + parser.add_argument("--plan", choices=("none", "seven", "49"), default="none", + help="站点集,用于把 /measure 分成站点扫频与专用探点") + parser.add_argument("--json", type=Path, default=None, help="汇总输出路径") + parser.add_argument("--top", type=int, default=6, help="逐频道表格显示前 N 个热点频道") + args = parser.parse_args() + + points = _plan_points(args.plan) + payload = {} + for path in args.logs: + actions = load_actions(path) + if not actions: + print(f"[跳过] {path}:没有已接受动作") + continue + rows, summary = recompute(actions) + report = phase_report(rows) + total = summary["virtual_s"] or 1.0 + print(f"\n===== {path} =====") + print(f"虚拟总时间 {summary['virtual_s']:.3f} s " + f"移动 {summary['move_s']:.1f} s ({100 * summary['move_s'] / total:.1f}%) " + f"检测/清除动作 {summary['action_s']:.1f} s ({100 * summary['action_s'] / total:.1f}%) " + f"换频 {summary['switch_s']:.0f} s ({100 * summary['switch_s'] / total:.1f}%)") + print(f"移动距离 {summary['distance_m']:.1f} m 请求 {summary['actions']} 次 " + f"现实耗时 {summary['real_elapsed_s']:.3f} s " + f"与服务器记录最大偏差 {summary['max_recorded_gap_s']:.6f} s") + print(f"检测 {report['measures']} 清除 {report['clears']}(失败 {report['failed_clears']}) " + f"不同测点 {report['distinct_measure_stops']} " + f"重复检测 {report['repeated_measure_actions']}" + f"(重复率 {report['repeat_ratio']})") + if "last_clear_virtual_s" in report: + print(f"末次清除于 {report['last_clear_virtual_s']:.1f} s;其后又花 " + f"{report['after_last_clear_virtual_s']:.1f} s 做 " + f"{report['after_last_clear_measures']} 次检测") + per_channel = Counter(r["channel"] for r in rows if r["path"] == "/measure") + hottest = per_channel.most_common(args.top) + print("检测次数最多的频道:" + ",".join(f"ch{c}:{n}" for c, n in hottest)) + if points is not None: + print("测点分类:" + json.dumps(classify_by_plan(rows, points), + ensure_ascii=False)) + payload[str(path)] = {"summary": summary, "phases": report, + "per_channel_measures": dict(sorted(per_channel.items()))} + + if args.json is not None: + args.json.parent.mkdir(parents=True, exist_ok=True) + args.json.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8") + print(f"\n汇总已写入 {args.json}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/benchmark_hrl.py b/scripts/benchmark_hrl.py deleted file mode 100644 index 443090d..0000000 --- a/scripts/benchmark_hrl.py +++ /dev/null @@ -1,428 +0,0 @@ -"""HRL/基线统一评测入口(P1)。 - -特点: -- 同一 manifest 中的真值场景被所有 variant 复用,保证配对比较; -- 真值仅在测试端用于构造 ``LocalSimulator`` 与最终核对,策略端只收到协议响应; -- 支持 ``hrl_heuristic``(高层启发式降级)、``bayes``、``directional``; -- 支持已训练高层模型 ``hrl``(需 ``--hrl-model`` 或 manifest 中的 variant 配置)。 - -输出目录(默认拒绝覆盖已有结果): - /manifest.json - /runs///summary.json - /runs///session.jsonl - /results.json - /aggregate.json - /aggregate.csv - -示例: - python scripts/benchmark_hrl.py \ - --variants hrl_heuristic,bayes,directional \ - --manifest output/hrl/manifests/dev.json \ - --output output/hrl/p1-heuristic -""" - -from __future__ import annotations - -import argparse -import csv -import json -import statistics -import sys -import time -from collections import defaultdict -from dataclasses import dataclass -from pathlib import Path -from typing import Any - -from mcm26b.config import ProblemConfig -from mcm26b.harness import LocalSimTransport, mixed_scene, random_omni_scene -from mcm26b.harness.scenes import referee_spec -from mcm26b.protocol import SimulatorClient -from mcm26b.protocol.log import SessionLog - -try: # 测试端依赖;运行时代码不导入 - from referee import LocalSimulator, Source -except ImportError as exc: # pragma: no cover - raise SystemExit("benchmark_hrl 需要 dev 依赖 referee。请先 `uv sync`。") from exc - - -# --------------------------------------------------------------------------- -# manifest / scene -# --------------------------------------------------------------------------- -@dataclass(frozen=True) -class SceneSpec: - scene_id: str - seed: int - error_seed: int - problem: int - sources: list[dict[str, Any]] - - @property - def truth_channels(self) -> tuple[int, ...]: - return tuple(sorted(int(src["channel"]) for src in self.sources)) - - -def _source_dict(source: Source) -> dict[str, Any]: - return { - "channel": int(source.channel), - "x": float(source.x), - "y": float(source.y), - "r_eff_m": float(source.r_eff_m), - "directional": bool(source.directional), - "heading_deg": float(source.heading_deg), - } - - -def _sources_to_dicts(sources: list[Source]) -> list[dict[str, Any]]: - return [_source_dict(source) for source in sources] - - -def _source_from_dict(data: dict[str, Any]) -> Source: - return Source( - channel=int(data["channel"]), - x=float(data["x"]), - y=float(data["y"]), - r_eff_m=float(data["r_eff_m"]), - directional=bool(data.get("directional", False)), - heading_deg=float(data.get("heading_deg", 0.0)), - ) - - -def make_default_manifest(*, problem: int, scenes: int, sources: int | None, - directional: int, start_seed: int, - config: ProblemConfig) -> dict[str, Any]: - """按 CLI 参数生成可复现的固定场景清单。""" - entries: list[dict[str, Any]] = [] - for index in range(scenes): - seed = start_seed + index - if problem == 4: - scene_sources = mixed_scene(seed=seed, count=sources, - directional=directional, config=config) - else: - scene_sources = random_omni_scene(seed=seed, count=sources, - config=config) - entries.append({ - "scene_id": f"scene-{seed}", - "seed": seed, - "error_seed": seed + 10_000, - "problem": problem, - "sources": _sources_to_dicts(scene_sources), - }) - return {"version": 1, "problem": problem, "scenes": entries} - - -def load_or_generate_manifest(path: Path, *, problem: int, scenes: int, - sources: int | None, directional: int, - start_seed: int, - config: ProblemConfig) -> dict[str, Any]: - if path.exists(): - manifest = json.loads(path.read_text(encoding="utf-8")) - else: - manifest = make_default_manifest( - problem=problem, scenes=scenes, sources=sources, - directional=directional, start_seed=start_seed, config=config) - path.parent.mkdir(parents=True, exist_ok=True) - path.write_text(json.dumps(manifest, ensure_ascii=False, indent=2), - encoding="utf-8") - if "scenes" not in manifest or not manifest["scenes"]: - raise ValueError(f"manifest 无 scenes: {path}") - for raw in manifest["scenes"]: - if not {"scene_id", "error_seed", "problem", "sources"} <= set(raw): - raise ValueError(f"manifest scene 字段缺失: {raw!r}") - if not raw["sources"]: - raise ValueError(f"scene {raw.get('scene_id')} 没有来源真值") - return manifest - - -def scenes_from_manifest(manifest: dict[str, Any]) -> list[SceneSpec]: - result: list[SceneSpec] = [] - for raw in manifest["scenes"]: - result.append(SceneSpec( - scene_id=str(raw["scene_id"]), - seed=int(raw.get("seed", 0)), - error_seed=int(raw["error_seed"]), - problem=int(raw["problem"]), - sources=[dict(item) for item in raw["sources"]], - )) - return result - - -# --------------------------------------------------------------------------- -# variants -# --------------------------------------------------------------------------- -def _build_loop(variant: str, client: SimulatorClient, config: ProblemConfig, - problem: int, *, hrl_model: str | None, - hrl_device: str = "auto"): - """延迟导入变体实现,避免 benchmark 顶层拉起重依赖。""" - if variant == "bayes": - from mcm26b.planner.bayes_loop import BayesLoop - return BayesLoop(client, config) - if variant == "directional": - from mcm26b.planner import DirectionalExtension - return DirectionalExtension(client, config) - if variant == "hrl_heuristic": - from mcm26b.planner.hrl_loop import HRLLoop - return HRLLoop(client, config, problem=problem, high_policy=None) - if variant == "hrl": - if not hrl_model: - raise RuntimeError("variant=hrl 需要 --hrl-model") - from mcm26b.hrl.policy import HighLevelPolicy - from mcm26b.planner.hrl_loop import HRLLoop - policy = HighLevelPolicy(hrl_model, device=hrl_device, problem=problem) - return HRLLoop(client, config, problem=problem, high_policy=policy) - raise ValueError(f"未知 variant: {variant!r}") - - -def _validity(summary: dict[str, Any], truth_channels: tuple[int, ...]) -> dict[str, Any]: - """测试端有效性审计。真值只在此处进入。""" - cleared = set(int(c) for c in summary.get("cleared_channels", [])) - absent = set(int(c) for c in summary.get("absent_channels", [])) - truth = set(truth_channels) - declared_absent = truth & absent - cleared_matches_truth = cleared == truth - no_source_declared_absent = not declared_absent - completed = bool(summary.get("completed")) - anomalies = list(summary.get("anomalies", [])) - # 本地 benchmark 要求:清洗真值且无守恒性异常;缺席集合不得含真值。 - valid = completed and cleared_matches_truth and no_source_declared_absent \ - and not anomalies - return { - "valid": valid, - "completed": completed, - "cleared_matches_truth": cleared_matches_truth, - "no_source_declared_absent": no_source_declared_absent, - "truth_channels": sorted(truth), - "declared_absent_truth": sorted(declared_absent), - "anomaly_count": len(anomalies), - } - - -def _row_from_summary(*, scene: SceneSpec, variant: str, summary: dict[str, Any], - wall_s: float) -> dict[str, Any]: - validity = _validity(summary, scene.truth_channels) - cleared_count = len(summary.get("cleared_channels", [])) - virtual_s = float(summary.get("virtual_time_s") or 0.0) - avg_s = summary.get("avg_locate_clear_time_s") - totals = summary.get("step_totals", {}) or {} - return { - "scene_id": scene.scene_id, - "variant": variant, - "problem": scene.problem, - "truth_count": len(scene.truth_channels), - "cleared_count": cleared_count, - "virtual_time_s": virtual_s, - "avg_locate_clear_time_s": (float(avg_s) if avg_s is not None else None), - "accounted_virtual_time_s": summary.get("accounted_virtual_time_s"), - "program_run_time_s": round(wall_s, 6), - "real_elapsed_total_s": totals.get("real_elapsed_total_s"), - "total_requests": summary.get("total_requests"), - "measures": summary.get("measures"), - "clears": summary.get("clears"), - "clear_success": summary.get("clear_success"), - "completed": bool(summary.get("completed")), - "stop_reason": summary.get("stop_reason"), - "exit_reason": summary.get("exit_reason"), - **validity, - } - - -def _error_row(scene: SceneSpec, variant: str, exc: BaseException) -> dict[str, Any]: - return { - "scene_id": scene.scene_id, - "variant": variant, - "problem": scene.problem, - "truth_count": len(scene.truth_channels), - "cleared_count": 0, - "virtual_time_s": None, - "avg_locate_clear_time_s": None, - "accounted_virtual_time_s": None, - "program_run_time_s": None, - "real_elapsed_total_s": None, - "total_requests": None, - "measures": None, - "clears": None, - "clear_success": None, - "completed": False, - "stop_reason": None, - "exit_reason": None, - "valid": False, - "cleared_matches_truth": False, - "no_source_declared_absent": False, - "truth_channels": sorted(scene.truth_channels), - "declared_absent_truth": [], - "anomaly_count": 0, - "error": f"{type(exc).__name__}: {exc}", - } - - -def run_scene_variant(scene: SceneSpec, variant: str, *, config: ProblemConfig, - hrl_model: str | None, run_dir: Path, - hrl_device: str = "auto") -> dict[str, Any]: - """运行一个 scene × variant。返回可序列化结果行与 summary。""" - run_dir.mkdir(parents=True, exist_ok=True) - sources = [_source_from_dict(raw) for raw in scene.sources] - simulator = LocalSimulator( - sources, - robot_id="hrl-benchmark", - spec=referee_spec(config), - error_seed=scene.error_seed, - stress_mode=False, - ) - # 真值只用于 LocalSimulator;策略端仅持有 client/loop,不读取 simulator.sources。 - log_path = run_dir / "session.jsonl" - log = SessionLog(path=log_path) - client = SimulatorClient("hrl-benchmark", config=config, - transport=LocalSimTransport(simulator), log=log) - loop = _build_loop(variant, client, config, scene.problem, - hrl_model=hrl_model, hrl_device=hrl_device) - started = time.monotonic() - try: - summary = loop.run() - finally: - wall_s = time.monotonic() - started - row = _row_from_summary(scene=scene, variant=variant, summary=summary, - wall_s=wall_s) - # 完整 summary 可能很大;仍写入 runs 目录,供复算与异常审计。 - (run_dir / "summary.json").write_text( - json.dumps(summary, ensure_ascii=False, indent=2), encoding="utf-8") - return {"row": row, "summary": summary} - - -# --------------------------------------------------------------------------- -# aggregate -# --------------------------------------------------------------------------- -def _aggregate(rows: list[dict[str, Any]]) -> dict[str, Any]: - grouped: dict[str, list[dict[str, Any]]] = defaultdict(list) - for row in rows: - grouped[row["variant"]].append(row) - result: dict[str, Any] = {"variants": {}, "all_valid": True} - for variant, items in sorted(grouped.items()): - virtual = [float(item["virtual_time_s"]) for item in items - if item.get("virtual_time_s") is not None] - per_source = [float(item["avg_locate_clear_time_s"]) - for item in items - if item.get("avg_locate_clear_time_s") is not None] - cleared = [int(item["cleared_count"] or 0) for item in items] - program = [float(item["program_run_time_s"]) for item in items - if item.get("program_run_time_s") is not None] - success = [1.0 if item.get("valid") else 0.0 for item in items] - result["variants"][variant] = { - "episodes": len(items), - "valid_episodes": int(sum(success)), - "valid_rate": (sum(success) / len(items)) if items else 0.0, - "success_rate": (sum(success) / len(items)) if items else 0.0, - "cleared_count_mean": statistics.fmean(cleared) if cleared else 0.0, - "cleared_count_std": (statistics.pstdev(cleared) - if len(cleared) > 1 else 0.0), - "virtual_time_mean_s": statistics.fmean(virtual) if virtual else 0.0, - "virtual_time_std_s": (statistics.pstdev(virtual) - if len(virtual) > 1 else 0.0), - "virtual_time_min_s": min(virtual) if virtual else 0.0, - "virtual_time_max_s": max(virtual) if virtual else 0.0, - "avg_locate_clear_time_mean_s": (statistics.fmean(per_source) - if per_source else None), - "program_run_time_mean_s": (statistics.fmean(program) - if program else None), - "total_requests_mean": statistics.fmean( - [int(item.get("total_requests") or 0) for item in items]), - } - if result["variants"][variant]["valid_rate"] < 1.0: - result["all_valid"] = False - return result - - -def main(argv=None) -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--variants", default="hrl_heuristic,bayes,directional", - help="逗号分隔:hrl_heuristic,bayes,directional,hrl") - parser.add_argument("--manifest", default="output/hrl/manifests/dev.json") - parser.add_argument("--output", default="output/hrl/p1-benchmark") - parser.add_argument("--problem", type=int, choices=(3, 4), default=3) - parser.add_argument("--scenes", type=int, default=6, - help="manifest 不存在时生成的场景数") - parser.add_argument("--sources", type=int, default=None, - help="每局源数;默认按题面 10~16 随机") - parser.add_argument("--directional", type=int, default=3, - help="问题4定向源数量(生成 manifest 时使用)") - parser.add_argument("--start-seed", type=int, default=91_000) - parser.add_argument("--hrl-model", default=None) - parser.add_argument("--hrl-device", choices=("auto", "cpu", "cuda", "mps"), - default="auto") - parser.add_argument("--force", action="store_true", - help="允许覆盖已有输出目录") - parser.add_argument("--log", action="store_true", - help="为兼容 CLI 保留;当前始终写 session.jsonl") - args = parser.parse_args(argv) - - config = ProblemConfig() - output = Path(args.output) - if output.exists() and any(output.iterdir()) and not args.force: - print(f"输出目录已存在且非空:{output};如需覆盖请加 --force。", - file=sys.stderr) - return 2 - output.mkdir(parents=True, exist_ok=True) - manifest_path = Path(args.manifest) - manifest = load_or_generate_manifest( - manifest_path, problem=args.problem, scenes=args.scenes, - sources=args.sources, directional=args.directional, - start_seed=args.start_seed, config=config) - scenes = scenes_from_manifest(manifest) - variants = [item.strip() for item in args.variants.split(",") if item.strip()] - if not variants: - parser.error("--variants 不能为空") - if "hrl" in variants and not args.hrl_model: - # manifest 中也允许写明模型路径;此处先支持 CLI 显式路径。 - print("variant=hrl 需要 --hrl-model(P1 冒烟模型路径)。", file=sys.stderr) - return 2 - known = {"hrl_heuristic", "bayes", "directional", "hrl"} - unknown = sorted(set(variants) - known) - if unknown: - parser.error(f"未知 variant: {unknown}") - - rows: list[dict[str, Any]] = [] - runs_root = output / "runs" - wall_started = time.monotonic() - for scene in scenes: - for variant in variants: - run_dir = runs_root / scene.scene_id / variant - print(json.dumps({"event": "run_start", "scene": scene.scene_id, - "variant": variant}, ensure_ascii=False)) - try: - result = run_scene_variant( - scene, variant, config=config, hrl_model=args.hrl_model, - run_dir=run_dir, hrl_device=args.hrl_device) - row = result["row"] - except Exception as exc: # 单场异常也进入聚合,all_valid=false - row = _error_row(scene, variant, exc) - rows.append(row) - print(json.dumps({"event": "run_done", **{ - key: row.get(key) for key in - ("scene_id", "variant", "cleared_count", "virtual_time_s", - "valid", "program_run_time_s", "error")}}, ensure_ascii=False)) - aggregate = _aggregate(rows) - aggregate["wall_seconds"] = round(time.monotonic() - wall_started, 3) - aggregate["manifest"] = str(manifest_path) - aggregate["output"] = str(output) - aggregate["variants_requested"] = variants - aggregate["scenes"] = len(scenes) - (output / "results.json").write_text( - json.dumps(rows, ensure_ascii=False, indent=2), encoding="utf-8") - (output / "manifest.json").write_text( - json.dumps(manifest, ensure_ascii=False, indent=2), encoding="utf-8") - (output / "aggregate.json").write_text( - json.dumps(aggregate, ensure_ascii=False, indent=2), encoding="utf-8") - fieldnames = list(rows[0].keys()) - for row in rows: - for key in row: - if key not in fieldnames: - fieldnames.append(key) - with (output / "aggregate.csv").open("w", newline="", encoding="utf-8") as handle: - writer = csv.DictWriter(handle, fieldnames=fieldnames) - writer.writeheader() - writer.writerows(rows) - print(json.dumps(aggregate, ensure_ascii=False, indent=2)) - return 0 if aggregate.get("all_valid") else 1 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/benchmark_rl.py b/scripts/benchmark_rl.py deleted file mode 100644 index fbfd055..0000000 --- a/scripts/benchmark_rl.py +++ /dev/null @@ -1,128 +0,0 @@ -"""问题3/4 RL 策略与既有策略的配对自建消融。 - -同一种子、同一场景分别跑基线(Q3 bayes / Q4 directional)与 RL 变体, -比较全部清除成功、虚拟总时间、检测次数与请求总数。结果写入 -output/rl/benchmark.json。 - -用法: - uv sync --group rl --group dev - uv run python scripts/benchmark_rl.py --seeds 5 -""" - -from __future__ import annotations - -import argparse -import json -import statistics -import time -from pathlib import Path - -from mcm26b.config import ProblemConfig -from mcm26b.evaluation import recompute_virtual_time -from mcm26b.harness import (LocalSimTransport, mixed_scene, random_omni_scene, - referee_spec) -from mcm26b.planner import DirectionalExtension -from mcm26b.planner.bayes_loop import BayesLoop -from mcm26b.planner.rl_loop import RLBayesLoop, RLDirectionalLoop -from mcm26b.protocol.client import SimulatorClient -from referee import LocalSimulator - - -def run_one(loop_cls, sources, *, config, robot_id: str, **kwargs) -> dict: - simulator = LocalSimulator(sources, robot_id=robot_id, - spec=referee_spec(config, max_real_duration_s=3600.0), - stress_mode=True) - client = SimulatorClient(robot_id, config=config, - transport=LocalSimTransport(simulator)) - started = time.monotonic() - summary = loop_cls(client, config, **kwargs).run() \ - if kwargs else loop_cls(client, config).run() - events = client.log.action_events() - successful = {e['request']['channel'] for e in events - if e['response'].get('clear_result') == 'success'} - truth = {s.channel for s in sources} - return { - "completed": bool(summary["completed"]), - "all_cleared": successful == truth, - "correct_absence": not bool(set(summary['absent_channels']) & truth), - "anomalies": summary['anomalies'], - "timing_mismatches": len(recompute_virtual_time(events)['mismatches']), - "normal_exit": summary['exit_reason'] == 'user_exit', - "virtual_time_s": float(summary["virtual_time_s"]), - "measures": int(summary["measures"]), - "total_requests": int(summary["total_requests"]), - "move_distance_m": float(summary["move_distance_m"]), - "wall_s": round(time.monotonic() - started, 3), - } - - -def main(argv=None) -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--seeds", type=int, default=5) - parser.add_argument("--sources", type=int, default=10) - parser.add_argument("--directional", type=int, default=3) - parser.add_argument("--output", default="output/rl/benchmark.json") - args = parser.parse_args(argv) - config = ProblemConfig() - robot_id = "2026001" - report = {"config": {"seeds": args.seeds, "sources": args.sources, - "directional": args.directional}, - "q3": [], "q4": []} - - for seed in range(20260910, 20260910 + args.seeds): - omni = random_omni_scene(seed=seed, count=args.sources, config=config) - mixed = mixed_scene(seed=seed, count=args.sources, - directional=args.directional, config=config) - q3_base = run_one(BayesLoop, omni, config=config, robot_id=robot_id) - q3_rl = run_one(RLBayesLoop, omni, config=config, robot_id=robot_id) - q4_base = run_one(DirectionalExtension, mixed, config=config, - robot_id=robot_id) - q4_rl = run_one(RLDirectionalLoop, mixed, config=config, - robot_id=robot_id) - report["q3"].append({"seed": seed, "bayes": q3_base, "rl": q3_rl}) - report["q4"].append({"seed": seed, "directional": q4_base, "rl": q4_rl}) - print(json.dumps({"event": "seed_done", "seed": seed, - "q3_base_s": q3_base["virtual_time_s"], - "q3_rl_s": q3_rl["virtual_time_s"], - "q4_base_s": q4_base["virtual_time_s"], - "q4_rl_s": q4_rl["virtual_time_s"]}, - ensure_ascii=False)) - - for key, baseline in (("q3", "bayes"), ("q4", "directional")): - rows = report[key] - deltas = [row["rl"]["virtual_time_s"] - row[baseline]["virtual_time_s"] - for row in rows] - cleared = all(row["rl"]["all_cleared"] and row[baseline]["all_cleared"] - for row in rows) - valid = all(part['completed'] and part['all_cleared'] and part['correct_absence'] - and part['normal_exit'] and not part['anomalies'] - and not part['timing_mismatches'] - for row in rows for part in (row[baseline],row['rl'])) - report[key + "_summary"] = { - "mean_virtual_s": { - baseline: statistics.mean(row[baseline]["virtual_time_s"] for row in rows), - "rl": statistics.mean(row["rl"]["virtual_time_s"] for row in rows), - }, - "mean_delta_s": statistics.mean(deltas), - "relative_delta_pct": 100.0 * statistics.mean(deltas) - / statistics.mean(row[baseline]["virtual_time_s"] for row in rows), - "mean_measures": { - baseline: statistics.mean(row[baseline]["measures"] for row in rows), - "rl": statistics.mean(row["rl"]["measures"] for row in rows), - }, - "all_cleared": cleared, - "all_valid": valid, - } - output = Path(args.output) - output.parent.mkdir(parents=True, exist_ok=True) - output.write_text(json.dumps(report, ensure_ascii=False, indent=2), - encoding="utf-8") - print(json.dumps({"event": "benchmark_done", "path": str(output), - "q3": report["q3_summary"], - "q4": report["q4_summary"]}, - ensure_ascii=False, indent=2)) - return 0 if report['q3_summary']['all_valid'] and report['q4_summary']['all_valid'] else 1 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/evaluate_rl_revision.py b/scripts/evaluate_rl_revision.py deleted file mode 100644 index 209b151..0000000 --- a/scripts/evaluate_rl_revision.py +++ /dev/null @@ -1,125 +0,0 @@ -"""同场景配对比较手写策略、旧PPO及修订模型;真值仅在评测端使用。""" -import argparse -from dataclasses import asdict -import hashlib -import json -import math -from pathlib import Path -from statistics import mean, median -from time import perf_counter - -import torch - -from mcm26b.config import ProblemConfig -from mcm26b.evaluation import recompute_virtual_time -from mcm26b.harness import LocalSimTransport, mixed_scene, random_omni_scene, referee_spec -from mcm26b.planner import DirectionalExtension -from mcm26b.planner.bayes_loop import BayesLoop -from mcm26b.planner.rl_loop import RLBayesLoop, RLDirectionalLoop -from mcm26b.protocol.client import SimulatorClient -from referee import LocalSimulator, Source - - -def main(): - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument('--split', choices=('development','validation','stress'), - default='development') - parser.add_argument('--variants', default='baseline,legacy,revised') - parser.add_argument('--problems', default='3,4') - parser.add_argument('--model-dir', type=Path, default=Path('output/rl/review-20260911')) - parser.add_argument('--label', required=True) - args = parser.parse_args() - torch.set_num_threads(1) - config = ProblemConfig() - output = args.model_dir / 'evaluation' / args.split / args.label - output.mkdir(parents=True, exist_ok=False) - variants = args.variants.split(',') - rows = [] - def save(): - aggregates = {} - for problem in (3,4): - for variant in variants: - part = [r for r in rows if r['problem']==problem and r['variant']==variant] - if part: - aggregates[f'q{problem}-{variant}'] = dict( - runs=len(part), valid=sum(r['valid'] for r in part), - mean_virtual_s=mean(r['virtual_s'] for r in part), - median_virtual_s=median(r['virtual_s'] for r in part), - max_virtual_s=max(r['virtual_s'] for r in part), - failed_clears=sum(r['failed_clears'] for r in part), - repeated_measures=sum(r['repeated_measures'] for r in part)) - result = dict(source='local_referee_only', config=asdict(config), split=args.split, - rows=rows, aggregates=aggregates) - (output/'results.json').write_text( - json.dumps(result,ensure_ascii=False,indent=2),encoding='utf-8') - return aggregates - for problem in map(int, args.problems.split(',')): - scenes = [] - if args.split == 'stress': - for count in (10,16): - scenes.append((f'boundary-{count}', count, 99000+count, [ - Source(c+1,1800*math.cos(2*math.pi*c/count),1800*math.sin(2*math.pi*c/count), - 1000,directional=(problem==4 and c%2==0), - heading_deg=360*c/count if problem==4 and c%2==0 else 0) - for c in range(count)])) - else: - seeds = range(700,703) if args.split=='development' else range(91000,91006) - counts = (10,16) if args.split=='development' else (10,13,16) - for count in counts: - for seed in seeds: - directional = (1, count//2, count-1)[seed%3] - sources = (random_omni_scene(seed, count, config) if problem==3 else - mixed_scene(seed, count, directional, config)) - scenes.append((f'{count}-{seed}',count,seed,sources)) - for name,count,seed,sources in scenes: - scene_data = dict(sources=[asdict(s) for s in sources], error_seed=seed+2000000) - scene_path = output/f'q{problem}-{name}-scene.json' - scene_path.write_text(json.dumps(scene_data),encoding='utf-8') - for variant in variants: - model = None - cls = BayesLoop if problem==3 else DirectionalExtension - kwargs = {} - if variant != 'baseline': - cls = RLBayesLoop if problem==3 else RLDirectionalLoop - model = (Path(f'output/rl/q{problem}_ppo.zip') if variant=='legacy' - else args.model_dir/f'q{problem}_masked.zip') - kwargs = dict(model_path=model, device='cpu') - sim = LocalSimulator(sources,robot_id='RL-AUDIT',spec=referee_spec(config), - error_seed=seed+2000000) - client = SimulatorClient('RL-AUDIT',config=config,transport=LocalSimTransport(sim)) - start = perf_counter() - summary = cls(client,config,**kwargs).run() - events = client.log.action_events() - truth = {s.channel for s in sources} - successful = {e['request']['channel'] for e in events - if e['response'].get('clear_result')=='success'} - seen = set() - repeats = 0 - for e in events: - if e['path']=='/measure': - p=e['request']['position'] - tag=(e['request']['channel'],round(p['x'],6),round(p['y'],6)) - repeats += tag in seen - seen.add(tag) - mismatches = recompute_virtual_time(events)['mismatches'] - valid = (successful==truth and summary['completed'] and not summary['anomalies'] - and not set(summary['absent_channels']) & truth - and summary['exit_reason']=='user_exit' and not mismatches) - row = dict(case=name,problem=problem,variant=variant,valid=valid, - virtual_s=client.state.virtual_time_s,all_cleared=successful==truth, - measures=summary['measures'], - failed_clears=summary['clears']-len(successful), - repeated_measures=repeats,wall_s=perf_counter()-start, - model_sha256=(hashlib.sha256(model.read_bytes()).hexdigest() - if model else None)) - rows.append(row) - (output/f'q{problem}-{name}-{variant}.json').write_text(json.dumps( - dict(row=row,summary=summary,events=events,timing_mismatches=mismatches), - ensure_ascii=False),encoding='utf-8') - save() - print(json.dumps(row),flush=True) - print(json.dumps(save(),indent=2),flush=True) - - -if __name__=='__main__': - main() diff --git a/scripts/pretrain_hrl_expert.py b/scripts/pretrain_hrl_expert.py deleted file mode 100644 index f784984..0000000 --- a/scripts/pretrain_hrl_expert.py +++ /dev/null @@ -1,24 +0,0 @@ -"""高层专家轨迹预训练入口(P2 待实现)。 - -按 docs/hrl-sol-execution.md,P2 才运行 `hrl_heuristic` 收集 -(episode_id, state, candidates, mask, action),再按 episode 划分训练/验证集做 BC。 -本文件在 P0+P1 阶段只提供命令行占位,避免把未实现的 BC 说成已交付。 -""" -from __future__ import annotations - -import argparse - - -def main(argv=None) -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--problem", type=int, choices=(3, 4), default=3) - parser.add_argument("--episodes", type=int, default=3000) - parser.add_argument("--output", default="output/hrl/bc_high") - parser.parse_args(argv) - raise NotImplementedError( - "P2 尚未实现:专家轨迹收集/BC 需要先通过 P1 smoke;" - "当前请使用 scripts/benchmark_hrl.py --variants hrl_heuristic 做启发式骨架验证。") - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/pretrain_rl_expert.py b/scripts/pretrain_rl_expert.py deleted file mode 100644 index 7a3507c..0000000 --- a/scripts/pretrain_rl_expert.py +++ /dev/null @@ -1,255 +0,0 @@ -"""用自建模拟器的既有专家逻辑做行为克隆,初始化 PPO 策略网络。 - -思路:自建 referee 的观测模型与真值逻辑既快又可复现。先在它上面用 -手写专家(Q3: worst-posterior 选点器;Q4: 遮挡梯子选点器)生成 -(观测, 专家动作) 数据集,训练一个与 PPO policy_net 同构的 MLP 分类器, -再把权重拷入 PPO 模型作为初始化;随后 scripts/train_rl.py --init 继续 -PPO 微调。这样 RL 从强先验出发,而不是从随机策略开始。 - -产物: - output/rl/bc/q3_expert.npz output/rl/bc/q3_bc.pt output/rl/q3_ppo_bc_init.zip - output/rl/bc/q4_expert.npz output/rl/bc/q4_bc.pt output/rl/q4_ppo_bc_init.zip -""" -from __future__ import annotations - -import argparse -import json -import math -import time -from pathlib import Path - -import numpy as np -import torch -from stable_baselines3 import PPO - -from mcm26b.config import ProblemConfig -from mcm26b.planner import safe_disk_radius, select_measurement_point -from mcm26b.rl._constants import NUM_ACTIONS, OBS_DIM -from mcm26b.rl.env import LocalizationEnv -from mcm26b.rl.features import candidate_actions - -HIDDEN = (128, 128) - - -def expert_action(env: LocalizationEnv) -> int: - """当前状态的专家动作编号(与训练环境候选同源,就近映射)。""" - config = env.config - channel = env._channel - region = env._belief.candidate_set(channel) - position = env._client.state.position - blocked = env._blocked - candidates = candidate_actions(region, position, config, blocked) - - if env.problem == 3: - expert_point = select_measurement_point( - region, position, config).position - else: - center, radius = region.mec() - safe = safe_disk_radius(region, config) - if not blocked: - expert_point = select_measurement_point( - region, position, config).position - elif len(blocked) == 1 and safe >= 0: - first = blocked[0] - dx, dy = center[0] - first[0], center[1] - first[1] - norm = math.hypot(dx, dy) - if norm <= 1e-9: - expert_point = (center[0] + safe, center[1]) - else: - scale = min(1.0, safe / norm) - expert_point = (center[0] + dx * scale, - center[1] + dy * scale) - else: - first = blocked[0] - base = math.atan2(first[1] - center[1], first[0] - center[0]) - angle = base + math.radians(45.0 * (len(blocked) - 1)) - expert_point = (center[0] + radius * math.cos(angle), - center[1] + radius * math.sin(angle)) - return min(range(len(candidates)), - key=lambda k: math.dist(candidates[k], expert_point)) - - -class BCMlp(torch.nn.Module): - def __init__(self): - super().__init__() - self.net = torch.nn.Sequential( - torch.nn.Linear(OBS_DIM, HIDDEN[0]), torch.nn.Tanh(), - torch.nn.Linear(HIDDEN[0], HIDDEN[1]), torch.nn.Tanh(), - torch.nn.Linear(HIDDEN[1], NUM_ACTIONS)) - - def forward(self, x): - return self.net(x) - - -def collect(problem: int, episodes: int, seed: int, config: ProblemConfig): - env = LocalizationEnv( - config, problem=problem, - directional_probability=1.0 if problem == 4 else 0.0, - max_episode_steps=16) - observations, actions, groups = [], [], [] - for episode in range(episodes): - obs, _info = env.reset(seed=seed + episode) - for _step in range(env.max_episode_steps + 2): - action = expert_action(env) - observations.append(obs) - actions.append(action) - groups.append(episode) - obs, _reward, terminated, truncated, _info = env.step(action) - if terminated or truncated: - break - return np.asarray(observations, dtype=np.float32), \ - np.asarray(actions, dtype=np.int64), np.asarray(groups, dtype=np.int64) - - -def train_bc(x, y, *, epochs: int, batch_size: int, lr: float, - device: str, groups, valid_frac: float = 0.1): - model = BCMlp().to(device) - optimizer = torch.optim.AdamW(model.parameters(), lr=lr) - episodes = np.unique(groups) - if len(episodes) < 2: - raise ValueError('行为克隆至少需要两个独立episode才能划分验证集') - valid_groups = np.random.default_rng(0).permutation(episodes) - valid_groups = valid_groups[:max(1, int(len(episodes)*valid_frac))] - valid = torch.as_tensor(np.isin(groups, valid_groups), device=device) - x_t, y_t = torch.as_tensor(x, device=device), torch.as_tensor(y, device=device) - x_v, y_v = x_t[valid], y_t[valid] - x_tr, y_tr = x_t[~valid], y_t[~valid] - loss_fn = torch.nn.CrossEntropyLoss() - for epoch in range(epochs): - order = torch.randperm(len(x_tr), device=device) - total = correct = 0.0 - for start in range(0, len(order), batch_size): - idx = order[start:start + batch_size] - logits = model(x_tr[idx]) - loss = loss_fn(logits, y_tr[idx]) - optimizer.zero_grad() - loss.backward() - optimizer.step() - total += float(loss.item()) * len(idx) - correct += int((logits.argmax(1) == y_tr[idx]).sum().item()) - train_acc = correct / len(x_tr) - with torch.no_grad(): - valid_acc = float((model(x_v).argmax(1) == y_v).float().mean().item()) - if epoch == 0 or (epoch + 1) % 5 == 0: - print(json.dumps({"event": "bc_epoch", "epoch": epoch + 1, - "loss": round(total / len(x_tr), 4), - "train_acc": round(train_acc, 4), - "valid_acc": round(valid_acc, 4)}, - ensure_ascii=False)) - return model, float(valid_acc) - - -def copy_into_ppo(problem: int, model: BCMlp, device: str) -> Path | None: - """把 BC 网络权重按 SB3 的 policy_net/action_net 拆分拷入 PPO。""" - # 当前奖励/特征已修订,重新初始化critic,不能沿用旧任务的价值预测。 - env = LocalizationEnv(problem=problem) - ppo = PPO('MlpPolicy', env, policy_kwargs={'net_arch': list(HIDDEN)}, - n_steps=512, batch_size=128, gamma=1.0, device=device) - state = {key.removeprefix("net."): value - for key, value in model.state_dict().items()} - # SB3 MlpPolicy:policy_net 只含前两个 Linear(Tanh 激活), - # 输出层在 action_net。BC 的 Sequential 键为 0/2/4。 - policy_state = {key: value for key, value in state.items() - if key in ("0.weight", "0.bias", "2.weight", "2.bias")} - action_state = { - "weight": state["4.weight"], "bias": state["4.bias"]} - ppo.policy.mlp_extractor.policy_net.load_state_dict(policy_state) - ppo.policy.action_net.load_state_dict(action_state) - # 数值检查整个前向映射,而不只是线性层形状。 - probe = torch.randn((8, OBS_DIM), device=device) - with torch.no_grad(): - copied = ppo.policy.action_net(ppo.policy.mlp_extractor.policy_net(probe)) - if not torch.allclose(model(probe), copied, atol=1e-6): - raise RuntimeError('行为克隆与PPO激活函数/前向映射不一致') - init_path = Path(f"output/rl/q{problem}_ppo_bc_init.zip") - ppo.save(str(init_path)) - env.close() - init_path.with_suffix('.json').write_text(json.dumps( - dict(algorithm='ppo', feature_version=2, problem=problem)), encoding='utf-8') - return init_path - - -def main(argv=None) -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--problem", type=int, choices=(3, 4), required=True) - parser.add_argument("--episodes", type=int, default=3000) - parser.add_argument("--epochs", type=int, default=20) - parser.add_argument("--batch-size", type=int, default=256) - parser.add_argument("--lr", type=float, default=3e-4) - parser.add_argument("--seed", type=int, default=20260911) - parser.add_argument("--device", default="auto") - parser.add_argument("--copy-only", action="store_true", - help="跳过采集/训练,只把已有 q_bc.pt 拷入 PPO 初始化") - args = parser.parse_args(argv) - - if args.device == "auto": - device = "cuda" if torch.cuda.is_available() else "cpu" - else: - device = args.device - print(json.dumps({"event": "bc_start", "problem": args.problem, - "episodes": args.episodes, "device": device, - "cuda": torch.cuda.is_available()}, - ensure_ascii=False)) - - if args.copy_only: - bc_dir = Path("output/rl/bc") - checkpoint = torch.load(bc_dir / f"q{args.problem}_bc.pt", - map_location="cpu") - if checkpoint.get('activation') != 'Tanh' or checkpoint.get('feature_version') != 2: - parser.error('旧ReLU/旧特征BC检查点不能直接拷贝,请重新采集并训练') - model = BCMlp() - model.load_state_dict(checkpoint["state_dict"]) - init_path = copy_into_ppo(args.problem, model, device) - dataset = np.load(bc_dir / f"q{args.problem}_expert.npz", - allow_pickle=False) - report = { - "problem": args.problem, - "samples": int(len(dataset["obs"])), - "valid_accuracy": checkpoint.get("valid_acc"), - "dataset": str(bc_dir / f"q{args.problem}_expert.npz"), - "bc_model": str(bc_dir / f"q{args.problem}_bc.pt"), - "ppo_init": str(init_path) if init_path is not None else None, - } - (bc_dir / f"q{args.problem}_bc.json").write_text( - json.dumps(report, ensure_ascii=False, indent=2), encoding="utf-8") - print(json.dumps({"event": "bc_copy", "problem": args.problem, - "ppo_init": str(init_path), **report}, - ensure_ascii=False, indent=2)) - return 0 if init_path is not None else 2 - - config = ProblemConfig() - started = time.monotonic() - torch.manual_seed(args.seed) - x, y, groups = collect(args.problem, args.episodes, args.seed, config) - collect_s = time.monotonic() - started - bc_dir = Path("output/rl/bc") - bc_dir.mkdir(parents=True, exist_ok=True) - np.savez_compressed(bc_dir / f"q{args.problem}_expert.npz", obs=x, action=y, episode=groups) - - model, valid_acc = train_bc(x, y, epochs=args.epochs, - batch_size=args.batch_size, lr=args.lr, - device=device, groups=groups) - torch.save({"state_dict": model.state_dict(), "obs_dim": OBS_DIM, - "actions": NUM_ACTIONS, "valid_acc": valid_acc, - "activation": "Tanh", "feature_version": 2}, - bc_dir / f"q{args.problem}_bc.pt") - - # 拷入现有 PPO 的 policy_net/action_net 作为初始化(critic 保持原权重)。 - init_path = copy_into_ppo(args.problem, model, device) - report = { - "problem": args.problem, "episodes": args.episodes, - "samples": int(len(x)), "valid_accuracy": valid_acc, - "collect_seconds": round(collect_s, 1), - "train_seconds": round(time.monotonic() - started - collect_s, 1), - "dataset": str(bc_dir / f"q{args.problem}_expert.npz"), - "bc_model": str(bc_dir / f"q{args.problem}_bc.pt"), - "ppo_init": str(init_path) if init_path is not None else None, - } - (bc_dir / f"q{args.problem}_bc.json").write_text( - json.dumps(report, ensure_ascii=False, indent=2), encoding="utf-8") - print(json.dumps(report, ensure_ascii=False, indent=2)) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/run_suite.py b/scripts/run_suite.py new file mode 100644 index 0000000..124416e --- /dev/null +++ b/scripts/run_suite.py @@ -0,0 +1,361 @@ +"""冻结基准集的配对 runner:并行执行、逐局留档、有效性判定与配对统计。 + +取代散落的 benchmark_*.py 口径分叉(docs/第三四问架构优化与运行提速方案.md §P1-3): + +- 场景来自 :mod:`mcm26b.harness.suites`(版本化清单,真值只在测试端); +- 每个 (场景, 变体) 一局,落 manifest / results / aggregate(.json/.csv); +- 有效性定义与既有脚本一致且不得放宽: + ``全清 ∧ 缺席无误判 ∧ 正常退出 ∧ 零异常 ∧ 逐微秒计时复算一致``; +- 任何一局无效即 ``all_valid=false`` 且进程非零退出(失败不静默丢样本); +- 变体支持 ``名称@计划名`` 语法,用于同场配对比较两个覆盖计划; +- ``--jobs`` 走进程池并行(每进程独立内存回环,不共享端口)。 + + uv run python scripts/run_suite.py --problem 3 --suite core --jobs 6 + uv run python scripts/run_suite.py --problem 4 --suite all --jobs 6 \ + --variants directional@square49,directional@q4_mincover_v1 \ + --label q4-plan-ab +""" + +from __future__ import annotations + +import argparse +import csv +import json +import statistics +from concurrent.futures import ProcessPoolExecutor +from dataclasses import replace +from pathlib import Path +from time import perf_counter + +from mcm26b.config import ProblemConfig +from mcm26b.evaluation import recompute_virtual_time +from mcm26b.harness import LocalSimTransport, LocalSimulator +from mcm26b.harness.suites import (SUITE_VERSION, SceneSpec, suite, + suite_manifest) +from mcm26b.planner import DirectionalExtension +from mcm26b.planner.bayes_loop import BayesLoop +from mcm26b.planner.seven import SevenBatch +from mcm26b.protocol.client import SimulatorClient +from mcm26b.routing import route_metrics + +ROOT = Path(__file__).resolve().parents[1] +Q3_STRATEGIES = {"bayes": BayesLoop, "seven_batch": SevenBatch, + "seven_immediate": SevenBatch} +Q4_STRATEGIES = {"directional": DirectionalExtension} +UNDER_TARGET_S = 4000.0 + + +def build_config(margin_deg: float, q4_plan: str | None, + bayes_overrides: dict | None = None, + search_overrides: dict | None = None) -> ProblemConfig: + """基准配置:persistent 关闭(对齐"首次证明找全"口径)。""" + base = ProblemConfig() + search = replace(base.search, bearing_rounding_margin_deg=margin_deg, + persistent_search=False) + if q4_plan: + search = replace(search, q4_coverage_plan=q4_plan) + if search_overrides: + search = replace(search, **search_overrides) + bayes = base.bayes + if bayes_overrides: + bayes = replace(bayes, **bayes_overrides) + return replace(base, search=search, bayes=bayes) + + +def _coerce(text: str): + """变体覆盖值的字面量解析(true/false/整数/浮点/元组/字符串)。""" + lowered = text.lower() + if lowered in ("true", "yes", "on"): + return True + if lowered in ("false", "no", "off"): + return False + if text.startswith("(") and text.endswith(")"): + inner = text[1:-1].strip() + return () if not inner else tuple( + _coerce(chunk.strip()) for chunk in inner.split(",")) + for cast in (int, float): + try: + return cast(text) + except ValueError: + continue + return text + + +def parse_variant(spec: str, problem: int) -> tuple[str, str, str | None, dict, dict]: + """``名称[@计划][#键=值;键=值]`` → (标签, 策略名, 计划, bayes 覆盖, search 覆盖)。 + + 变体覆盖用于同场配对比较单个开关,例如 + ``bayes#fuse_localize_into_tour=false``;``search.`` 前缀写入 SearchConfig。 + """ + body, _, override_text = spec.partition("#") + name, _, plan = body.partition("@") + strategies = Q3_STRATEGIES if problem == 3 else Q4_STRATEGIES + if name not in strategies: + raise ValueError(f"未知策略 {name!r}(可选 {sorted(strategies)})") + bayes_overrides: dict = {} + search_overrides: dict = {} + for item in filter(None, (chunk.strip() for chunk in override_text.split(";"))): + key, _, value = item.partition("=") + if not value: + raise ValueError(f"变体覆盖须为 键=值:{item!r}") + if key.startswith("search."): + search_overrides[key[len("search."):]] = _coerce(value) + else: + bayes_overrides[key] = _coerce(value) + label = spec.replace(" ", "") + return label, name, plan or None, bayes_overrides, search_overrides + + +def run_episode(payload: dict) -> dict: + """执行一局并返回结果行(进程池 worker,必须可 pickle)。""" + spec = SceneSpec(**payload["scene"]) + label = payload["label"] + problem = spec.problem + config = build_config(payload["margin_deg"], payload["plan"], + payload.get("bayes"), payload.get("search")) + strategies = Q3_STRATEGIES if problem == 3 else Q4_STRATEGIES + loop_cls = strategies[payload["strategy"]] + sources = spec.sources(config) + simulator = LocalSimulator(sources, robot_id="SUITE", config=config, + error_seed=spec.error_seed) + client = SimulatorClient("SUITE", config=config, + transport=LocalSimTransport(simulator)) + setup_start = perf_counter() + loop = loop_cls(client, config) + setup_wall_s = perf_counter() - setup_start + start = perf_counter() + summary = loop.run() + compute_wall_s = perf_counter() - start + report = recompute_virtual_time(client.log.action_events()) + truth = sorted(source.channel for source in sources) + cleared = sorted(summary["cleared_channels"]) + absent = sorted(summary["absent_channels"]) + valid = (cleared == truth + and not (set(absent) & set(truth)) + and summary["exit_reason"] == "user_exit" + and not summary["anomalies"] + and not report["mismatches"]) + routing = _routing_metrics(summary, config) + return { + "scene_id": spec.scene_id, "variant": label, "problem": problem, + "kind": spec.kind, "sources": spec.count, "directional": spec.directional, + "virtual_time_s": summary["virtual_time_s"], + "accounted_virtual_time_s": summary["accounted_virtual_time_s"], + "measures": summary["measures"], "clears": summary["clears"], + "clear_success": summary["clear_success"], + "total_requests": summary["total_requests"], + "move_distance_m": summary["move_distance_m"], + "coverage_points": summary["coverage_points"], + "fallback_clear_attempts": summary.get("fallback_clear_attempts", 0), + "redundant_rescan_measures": summary["redundant_rescan_measures"], + "completion_basis": summary["completion_basis"], + "stop_reason": summary["stop_reason"], "exit_reason": summary["exit_reason"], + "cleared_matches_truth": cleared == truth, + "absent_misjudged": sorted(set(absent) & set(truth)), + "anomaly_count": len(summary["anomalies"]), + "virtual_recompute_mismatches": len(report["mismatches"]), + "compute_wall_s": round(compute_wall_s, 3), + "plan_verify_wall_s": round(setup_wall_s, 3), + "valid": valid, + **routing, + } + + +def _routing_metrics(summary: dict, config: ProblemConfig) -> dict: + """S1 必报路由列:作业点去重、离线最优开放回路、MST 下界、缺口与探测静默率。 + + 作业点 = 发生过 /measure 或 /clear 的位置(去重到 0.5 m);离线最优是 + "同一批作业点"上的开放路径最优值,用来把"排线不够好"与"点选得不对"分开。 + """ + rows = summary.get("steps") or [] + positions = [] + for row in rows: + position = row.get("position") + if isinstance(position, dict): + positions.append((float(position["x"]), float(position["y"]))) + elif position is not None: + positions.append((float(position[0]), float(position[1]))) + speed = config.cost.speed_mps + metrics = route_metrics(positions, summary["move_distance_m"], speed) + measures = [row for row in rows if row.get("action") == "measure"] + silent = sum(1 for row in measures if row.get("result") == "no_signal") + metrics["probe_no_signal_ratio"] = ( + round(silent / len(measures), 4) if measures else 0.0) + plan_points = summary.get("coverage_plan_points") or [] + if plan_points: + visited = 0 + for (px, py) in plan_points: + if any(abs(px - x) <= 1.0 and abs(py - y) <= 1.0 + for x, y in positions): + visited += 1 + metrics["coverage_actual_visited"] = visited + else: + metrics["coverage_actual_visited"] = 0 + return metrics + + +def _percentile(values: list[float], fraction: float) -> float: + if not values: + return 0.0 + ordered = sorted(values) + index = min(len(ordered) - 1, max(0, int(round(fraction * (len(ordered) - 1))))) + return ordered[index] + + +def aggregate(rows: list[dict], labels: list[str]) -> dict: + """逐变体汇总 + 相对首变体的配对统计。""" + summary: dict[str, dict] = {} + for label in labels: + part = [row for row in rows if row["variant"] == label] + if not part: + continue + times = [row["virtual_time_s"] for row in part] + summary[label] = { + "episodes": len(part), + "valid_episodes": sum(1 for row in part if row["valid"]), + "virtual_time_mean_s": round(statistics.fmean(times), 1), + "virtual_time_median_s": round(statistics.median(times), 1), + "virtual_time_max_s": round(max(times), 1), + "virtual_time_p90_s": round(_percentile(times, 0.9), 1), + "under_4000_ratio": round( + sum(1 for t in times if t < UNDER_TARGET_S) / len(times), 3), + "measures_mean": round(statistics.fmean( + [row["measures"] for row in part]), 1), + "total_requests_mean": round(statistics.fmean( + [row["total_requests"] for row in part]), 1), + "move_distance_mean_m": round(statistics.fmean( + [row["move_distance_m"] for row in part]), 1), + "fallback_attempts_mean": round(statistics.fmean( + [row["fallback_clear_attempts"] for row in part]), 1), + "compute_wall_mean_s": round(statistics.fmean( + [row["compute_wall_s"] for row in part]), 3), + "plan_verify_wall_mean_s": round(statistics.fmean( + [row["plan_verify_wall_s"] for row in part]), 3), + "distinct_service_points_mean": round(statistics.fmean( + [row["distinct_service_points"] for row in part]), 1), + "route_gap_vs_offline_mean": round(statistics.fmean( + [row["route_gap_vs_offline"] for row in part]), 4), + "route_lower_bound_mean_s": round(statistics.fmean( + [row["route_lower_bound_s"] for row in part]), 1), + "coverage_actual_visited_mean": round(statistics.fmean( + [row["coverage_actual_visited"] for row in part]), 1), + "probe_no_signal_ratio_mean": round(statistics.fmean( + [row["probe_no_signal_ratio"] for row in part]), 4), + } + paired: dict[str, dict] = {} + if len(labels) >= 2: + base = labels[0] + base_rows = {row["scene_id"]: row for row in rows + if row["variant"] == base} + for label in labels[1:]: + deltas, faster = [], 0 + for row in rows: + if row["variant"] != label or row["scene_id"] not in base_rows: + continue + reference = base_rows[row["scene_id"]]["virtual_time_s"] + if reference <= 0: + continue + deltas.append(row["virtual_time_s"] / reference - 1.0) + if row["virtual_time_s"] < reference: + faster += 1 + if deltas: + paired[f"{label}_vs_{base}"] = { + "mean_relative_change": round(statistics.fmean(deltas), 4), + "median_relative_change": round(statistics.median(deltas), 4), + "faster_scenes": faster, "compared": len(deltas)} + return {"variants": summary, "paired": paired} + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--problem", type=int, choices=(3, 4), default=3) + parser.add_argument("--suite", choices=("core", "boundary", "all"), default="core") + parser.add_argument("--variants", default=None, + help="逗号分隔;支持 名称@覆盖计划,默认取该问题的标准变体") + parser.add_argument("--q4-plan", default=None, help="第四问覆盖计划(所有变体默认值)") + parser.add_argument("--bearing-margin-deg", type=float, default=0.005) + parser.add_argument("--bayes-json", default=None, + help="BayesConfig 覆盖参数(JSON 字符串或文件路径)") + parser.add_argument("--jobs", type=int, default=1, help="并行进程数") + parser.add_argument("--label", default="run", help="输出子目录名") + parser.add_argument("--out", type=Path, default=None, + help="输出根目录,默认 output/suite/") + args = parser.parse_args() + + default_variants = "bayes,seven_batch" if args.problem == 3 else "directional" + variants = [parse_variant(item.strip(), args.problem) + for item in (args.variants or default_variants).split(",") if item.strip()] + labels = [label for label, *_ in variants] + + bayes_overrides = None + if args.bayes_json: + raw = (Path(args.bayes_json).read_text(encoding="utf-8") + if Path(args.bayes_json).exists() else args.bayes_json) + bayes_overrides = json.loads(raw) + print(f"bayes 覆盖参数:{json.dumps(bayes_overrides, ensure_ascii=False)}") + + scenes = suite(args.suite, args.problem) + out_dir = (args.out or (ROOT / "output/suite")) / f"q{args.problem}-{args.label}" + out_dir.mkdir(parents=True, exist_ok=True) + manifest = suite_manifest(args.suite, args.problem) + manifest.update({"suite_version": SUITE_VERSION, "label": args.label, + "variants": list( + (args.variants or default_variants).split(",")), + "jobs": args.jobs, + "bearing_margin_deg": args.bearing_margin_deg, + "q4_plan": args.q4_plan}) + (out_dir / "manifest.json").write_text( + json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + + payloads = [ + {"scene": scene.as_dict(), "label": label, "strategy": strategy, + "plan": plan or (args.q4_plan if args.problem == 4 else None), + "bayes": {**(bayes_overrides or {}), **variant_bayes}, + "search": variant_search, + "margin_deg": args.bearing_margin_deg} + for scene in scenes + for label, strategy, plan, variant_bayes, variant_search in variants] + print(f"基准集 {args.suite}/q{args.problem}:{len(scenes)} 场景 × " + f"{len(variants)} 变体 = {len(payloads)} 局,jobs={args.jobs}", flush=True) + + start = perf_counter() + if args.jobs > 1: + with ProcessPoolExecutor(max_workers=args.jobs) as pool: + rows = list(pool.map(run_episode, payloads)) + else: + rows = [run_episode(payload) for payload in payloads] + wall = perf_counter() - start + + rows.sort(key=lambda row: (row["scene_id"], row["variant"])) + for row in rows: + print(f" {row['scene_id']:28s} {row['variant']:34s} " + f"T={row['virtual_time_s']:9.1f} M={row['measures']:4d} " + f"wall={row['compute_wall_s']:6.2f}s " + f"{'OK' if row['valid'] else 'INVALID'}", flush=True) + + summary = aggregate(rows, labels) + summary["all_valid"] = all(row["valid"] for row in rows) + summary["wall_seconds"] = round(wall, 2) + summary["episodes"] = len(rows) + summary["suite"] = args.suite + summary["problem"] = args.problem + summary["label"] = args.label + payload = {"summary": summary, "rows": rows} + (out_dir / "results.json").write_text( + json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + (out_dir / "aggregate.json").write_text( + json.dumps(summary, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") + with (out_dir / "aggregate.csv").open("w", encoding="utf-8", newline="") as handle: + writer = csv.writer(handle) + header = ["scene_id", "variant", "problem", "kind", "sources", "directional"] + header += [key for key in rows[0] if key not in header] + writer.writerow(header) + for row in rows: + writer.writerow([row.get(key, "") for key in header]) + print(json.dumps(summary, ensure_ascii=False, indent=2)) + print(f"\n结果已写入 {out_dir}") + return 0 if summary["all_valid"] else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/save_official_rl_summary.py b/scripts/save_official_rl_summary.py deleted file mode 100644 index 8443a40..0000000 --- a/scripts/save_official_rl_summary.py +++ /dev/null @@ -1,36 +0,0 @@ -"""从 Tee 输出的 CLI 文本中提取末尾 JSON,落盘为 summary.json。 - -官方演练目录由 run 命令产生 cli-output.txt(前面可能有 CUDA 警告), -本脚本只提取最后一个完整 JSON 对象,并核对 adjacent 的官方 result.json。 -""" -import argparse -import json -from pathlib import Path - - -def extract(text: str) -> dict: - start = text.rfind("\n{") - if start < 0: - raise ValueError("未找到 JSON 对象") - return json.loads(text[start + 1:]) - - -def main() -> int: - parser = argparse.ArgumentParser() - parser.add_argument("folder", type=Path) - args = parser.parse_args() - folder = args.folder - summary = extract((folder / "cli-output.txt").read_text(encoding="utf-8")) - (folder / "summary.json").write_text( - json.dumps(summary, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") - print(json.dumps({ - "folder": str(folder), "completed": summary["completed"], - "virtual_time_s": summary["virtual_time_s"], - "cleared_channels": summary["cleared_channels"], - "total_requests": summary["total_requests"], - }, ensure_ascii=False)) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/summarize_rl_revision.py b/scripts/summarize_rl_revision.py deleted file mode 100644 index 60ba546..0000000 --- a/scripts/summarize_rl_revision.py +++ /dev/null @@ -1,78 +0,0 @@ -"""汇总配对置信区间、历史官方证据与BC/特征错位探针,不连接模拟器。""" -from pathlib import Path -import json -import hashlib -import numpy as np -import torch - -import verify_rl_practice -from mcm26b.rl.env import LocalizationEnv -from mcm26b.rl.features import build_observation - - -def main(): - root = Path('output/rl/review-20260911') - records = json.loads((root/'evaluation/validation/final/results.json') - .read_text(encoding='utf-8')) - rng = np.random.default_rng(20260911) - comparisons = {} - for problem in (3,4): - part = [r for r in records['rows'] if r['problem']==problem] - for label in ('baseline','legacy'): - baseline = {r['case']:r for r in part if r['variant']==label} - selected = sorted((r for r in part if r['variant']=='revised'),key=lambda r:r['case']) - a = np.array([baseline[r['case']]['virtual_s'] for r in selected]) - b = np.array([r['virtual_s'] for r in selected]) - samples = rng.integers(0,len(a),(10000,len(a))) - changes = (b[samples].mean(axis=1)/a[samples].mean(axis=1)-1)*100 - comparisons[f'q{problem}-revised-vs-{label}'] = dict( - relative_change_pct=(b.mean()/a.mean()-1)*100, - paired_bootstrap_95_pct=np.quantile(changes,[.025,.975]).tolist(), - faster_cases=int(sum(b/checkpoints/_latest.zip`` 原子覆盖写;训练开始前先写一份 - 起步基线。因此即使进程被 SIGKILL / ``taskkill /F`` 强杀(没有任何 Python - 收尾机会),也**最多只丢 ``--recovery-every`` 个环境步**,且磁盘上始终有一份 - 完整、可加载、可 ``--resume`` 的产物; -- **原子落盘**:模型 zip、旁挂 json 与 ``/resume.json`` 都是"临时文件 + - ``os.replace``",保存途中被杀不会留下半截文件,也不会破坏上一份完整快照; -- ``--checkpoint-every`` 每 N 个环境步在 ``<模型目录>/checkpoints/`` 另留一份历史 - checkpoint(``_<步数>.zip``),只保留最近 ``--checkpoint-keep`` 个,供 - 返祖对比与多档恢复; -- ``/resume.json`` 是恢复的**权威指针**:无论上一刻是滚动恢复点、历史 - checkpoint、优雅收尾还是异常兜底,它总指向一份可续训产物,并记录增量语义 - (``timesteps`` 是追加步数)与生效过的 PPO 超参; -- ``--control-file`` 是训练前端的**跨平台**控制通道:前端原子写 JSON - (``paused`` / ``stop``),本脚本每个 step 轮询。暂停时训练在 step 边界挂起, - 停止时先保存模型与元数据再退出; -- 信号(SIGTERM/SIGINT,Windows 上另有 SIGBREAK)仍可用:直接 kill 本脚本或 - 前端发进程组信号时同样走优雅收尾;subproc worker 在 :func:`_make_env` 里忽略 - 这些信号,保证它们活到主进程 ``vec_env.close()`` 之后再退出; -- 任何异常都会先落一份 ``*_emergency.zip`` + ``resume.json`` 再抛出,不再出现 - "跑了很久什么都没有"。 - -为什么暂停/停止不靠信号:Windows 没有 SIGSTOP,且 ``os.kill(pid, SIGTERM)`` 会 -退化成 ``TerminateProcess`` 硬杀——收尾分支根本不会执行。控制文件两端都只是 -普通文件 IO,POSIX 与 Windows 行为一致(见 :mod:`mcm26b.process_control`)。 - -P1 smoke 示例: - python scripts/train_hrl_high.py \ - --problem 3 --stage 1 --timesteps 2048 --seed 320001 \ - --envs 1 --vec-env dummy --device mps \ - --config-profile production --model output/hrl/p1-smoke/q3.zip \ - --eval-episodes 2 --verbose 0 -""" - -from __future__ import annotations - -import argparse -import hashlib -import json -import math -import os -import platform -import random -import signal -import sys -import time -from pathlib import Path -from typing import Any - -from mcm26b.config import ProblemConfig -from mcm26b.hrl.curriculum import STAGES -from mcm26b.hrl.constants import (ACTION_LAYOUT_VERSION, FEATURE_VERSION, - HIGH_OBS_DIM, N_CANDIDATES, REWARD_VERSION) -from mcm26b.process_control import ControlState, read_control - - -def _stage_from_index(index: int): - if not 1 <= int(index) <= len(STAGES): - raise ValueError(f"stage 必须在 1..{len(STAGES)}") - return STAGES[int(index) - 1] - - -def _profile_fidelity(profile: str) -> str: - if profile == "production": - return "production" - if profile == "coarse-pretrain": - return "fast" - raise ValueError(f"未知 config-profile: {profile}") - - -def _reward_from_profile(profile: str): - from mcm26b.hrl.hierarchical_env import HRLReward - - if profile == "time": - return HRLReward.time_only() - if profile == "prompt": - return HRLReward() - raise ValueError(f"未知 reward-profile: {profile}") - - -def _stop_signals() -> list[int]: - """本平台可用于"请求收尾"的信号集合。 - - Windows 上没有 SIGTERM 的软语义(``os.kill`` 直接 TerminateProcess),但 - ``SIGBREAK`` 可以由 ``CTRL_BREAK_EVENT`` 触发并进入 Python 处理器;POSIX 上 - SIGTERM/SIGINT 均可捕获。控制文件才是主通道,这里只是让"直接 kill 脚本" - 也尽量走优雅收尾。 - """ - signals = [signal.SIGTERM, signal.SIGINT] - sigbreak = getattr(signal, "SIGBREAK", None) - if sigbreak is not None: - signals.append(sigbreak) - return signals - - -def _ignore_stop_signals_in_worker() -> None: - """subproc worker 忽略收尾信号,保证主进程能优雅落盘。 - - 无论信号来自进程组 SIGTERM 还是 Windows ``CTRL_BREAK_EVENT``,若 worker - 同时退出,主进程会在保存模型之前就拿到断管/EOF 错误,整局训练白跑。worker - 活在管道后面,主进程收尾时通过 ``vec_env.close()`` 的 ``close`` 指令正常 - 结束它们。 - """ - try: - import multiprocessing - if multiprocessing.current_process().name == "MainProcess": - return - for signum in _stop_signals(): - signal.signal(signum, signal.SIG_IGN) - except (ImportError, ValueError, OSError): # 非主线程/平台不支持:不影响训练 - return - - -class _ControlPoll: - """控制文件轮询状态机(纯标准库,可脱离 SB3 单测)。 - - ``poll()`` 每 ``poll_every`` 次调用才真正读盘,避免每个 env step 都做一次 - 文件 IO;``wait_while_paused()`` 阻塞到暂停解除或收到 stop,并累计暂停秒数 - (``--max-wall-s`` 要把这段扣掉,否则"挂起一小时回来就判超时")。 - """ - - def __init__(self, path: Path, *, poll_every: int = 32, - poll_s: float = 0.2): - self.path = Path(path) - self.poll_every = max(1, int(poll_every)) - self.poll_s = max(0.02, float(poll_s)) - self.paused_total_s = 0.0 - self._calls = 0 - self._state = ControlState() - - def poll(self) -> ControlState: - """按抽样间隔返回最近一次控制状态。""" - self._calls += 1 - if self._calls % self.poll_every: - return self._state - self._state = read_control(self.path) - return self._state - - def wait_while_paused(self, on_pause, on_resume) -> bool: - """阻塞到继续或停止;返回 True 表示期间收到了 stop。 - - ``on_pause`` / ``on_resume`` 用来向前端回显事件(训练脚本的 JSON 行)。 - """ - on_pause() - started = time.monotonic() - stopped = False - while True: - time.sleep(self.poll_s) - self._state = read_control(self.path) - if self._state.stop: - stopped = True - break - if not self._state.paused: - break - self.paused_total_s += time.monotonic() - started - on_resume() - return stopped - - -def _make_env(problem: int, stage_index: int, - monitor_path: str | None, profile: str, - reward_profile: str): - """顶层工厂:供 DummyVecEnv / SubprocVecEnv 调用(必须是可 pickle 的)。""" - from stable_baselines3.common.monitor import Monitor - - from mcm26b.hrl.hierarchical_env import HierarchicalEnv - - _ignore_stop_signals_in_worker() - stage = _stage_from_index(stage_index) - env = HierarchicalEnv( - problem=problem, - stage=stage, - fidelity=_profile_fidelity(profile), - max_episode_steps=300, - real_budget_s=1800.0, - reward=_reward_from_profile(reward_profile), - ) - return Monitor(env, filename=monitor_path) - - -def _build_vec_env(args, monitor_paths: list[str]): - from stable_baselines3.common.vec_env import (DummyVecEnv, SubprocVecEnv) - - from functools import partial - - factories = [ - partial(_make_env, args.problem, args.stage, - monitor_paths[rank], args.config_profile, args.reward_profile) - for rank in range(args.envs) - ] - if args.vec_env == "subproc": - # 每个 worker 独立 Monitor 文件;spawn 入口在 __main__ 保护内。 - return SubprocVecEnv(factories, start_method="spawn") - return DummyVecEnv(factories) - - -def _hash_file(path: Path) -> str: - return hashlib.sha256(path.read_bytes()).hexdigest() - - -def _policy_hyperparams(model) -> dict[str, Any]: - """记录**实际生效**的 PPO 超参。 - - ``--resume``/``--init`` 时 ``MaskablePPO.load`` 会一并恢复 checkpoint 内的 - n_steps/batch_size/n_epochs 等,命令行同名参数被忽略;把它们写进元数据, - 事后才能核对一局到底用什么配置训的。 - """ - - def _scalar(value): - # SB3 2.9 的 learning_rate/clip_range 可能是 Schedule 对象 - current = getattr(value, "current_value", None) - if callable(current): - try: - value = current() - except Exception: - return str(value) - try: - return float(value) - except (TypeError, ValueError): - return str(value) - - return { - "n_steps": int(getattr(model, "n_steps", 0) or 0), - "batch_size": int(getattr(model, "batch_size", 0) or 0), - "n_epochs": int(getattr(model, "n_epochs", 0) or 0), - "gamma": _scalar(getattr(model, "gamma", 0.0)), - "gae_lambda": _scalar(getattr(model, "gae_lambda", 0.0)), - "learning_rate": _scalar(getattr(model, "learning_rate", 0.0)), - "clip_range": _scalar(getattr(model, "clip_range", 0.0)), - "ent_coef": _scalar(getattr(model, "ent_coef", 0.0)), - "vf_coef": _scalar(getattr(model, "vf_coef", 0.0)), - "max_grad_norm": _scalar(getattr(model, "max_grad_norm", 0.0)), - } - - -def _progress_payload(model, start: int) -> dict[str, Any]: - """组装 ``--progress-json`` 的单行负载。 - - 纯函数(只读 model 的 logger / ep_info_buffer),便于脱离训练循环测试; - NaN / ±inf 一律折算成 None,保证 ``json.dumps(allow_nan=False)`` 不会炸。 - """ - values = getattr(model.logger, "name_to_value", {}) or {} - - def _num(key, default=None): - value = values.get(key) - if value is None: - return default - try: - value = float(value) - except (TypeError, ValueError): - return default - if not math.isfinite(value): - return default - return value - - ep_rewards: list[float] = [] - ep_lengths: list[float] = [] - for item in getattr(model, "ep_info_buffer", []) or []: - try: - ep_rewards.append(float(item.get("r"))) - ep_lengths.append(float(item.get("l"))) - except (TypeError, ValueError, AttributeError): - continue - return { - "event": "progress", - "timesteps": int(model.num_timesteps), - "start_timesteps": int(start), - "n_updates": int(getattr(model, "_n_updates", 0) or 0), - "ep_rew_mean": (sum(ep_rewards) / len(ep_rewards) - if ep_rewards else None), - "ep_len_mean": (sum(ep_lengths) / len(ep_lengths) - if ep_lengths else None), - "value_loss": _num("train/value_loss"), - "policy_gradient_loss": _num("train/policy_gradient_loss"), - "approx_kl": _num("train/approx_kl"), - "entropy_loss": _num("train/entropy_loss"), - "explained_variance": _num("train/explained_variance"), - "fps": _num("time/fps"), - } - - -def _model_metadata(*, args, wall_s: float, n_envs: int, - actual_timesteps: int) -> dict[str, Any]: - import numpy - import stable_baselines3 - import sb3_contrib - import torch - - stage = _stage_from_index(args.stage) - return { - "level": "high", - "problem": int(args.problem), - "stage": int(args.stage), - "stage_name": stage.name, - "algorithm": "maskable_ppo", - "feature_version": FEATURE_VERSION, - "action_layout_version": ACTION_LAYOUT_VERSION, - "reward_version": REWARD_VERSION, - "obs_dim": HIGH_OBS_DIM, - "act_dim": N_CANDIDATES, - "seed": int(args.seed), - "requested_timesteps": int(args.timesteps), - "timesteps_semantics": ("additional" if (args.resume or args.init) - else "total"), - "actual_timesteps": int(actual_timesteps), - "n_envs": int(n_envs), - "vec_env": args.vec_env, - "config_profile": args.config_profile, - "fidelity": _profile_fidelity(args.config_profile), - "reward_profile": args.reward_profile, - "local_selector": args.local_selector, - "local_model": args.local_model, - "checkpoint_every": int(getattr(args, "checkpoint_every", 0) or 0), - "checkpoint_keep": int(getattr(args, "checkpoint_keep", 0) or 0), - "checkpoint_dir": getattr(args, "checkpoint_dir", None), - "recovery_every": int(getattr(args, "recovery_every", 0) or 0), - "device": args.device, - "wall_seconds": round(wall_s, 3), - "max_wall_s": float(args.max_wall_s), - "created_unix_s": time.time(), - "python": sys.version.split()[0], - "platform": platform.platform(), - "torch": torch.__version__, - "numpy": numpy.__version__, - "stable_baselines3": stable_baselines3.__version__, - "sb3_contrib": sb3_contrib.__version__, - "mps_available": bool(getattr(getattr(torch.backends, "mps", None), - "is_available", lambda: False)()), - } - - -def _write_json_atomic(path: Path, payload: dict[str, Any]) -> None: - """原子写 JSON:同目录 ``.tmp-`` 前缀临时文件 + ``os.replace``。 - - 急停(SIGKILL / ``taskkill /F``)会绕过所有 Python 清理逻辑,保存途中被杀 - 是完全可能的。原子替换保证**真实文件名下要么是旧的完整文件、要么是新的 - 完整文件**,不会出现半截 JSON 让续训读到一半就崩。 - """ - path = Path(path) - path.parent.mkdir(parents=True, exist_ok=True) - tmp = path.with_name(f".tmp-{path.name}") - tmp.write_text(json.dumps(payload, ensure_ascii=False, indent=2), - encoding="utf-8") - os.replace(tmp, path) - - -def _save_model_atomic(model, target: Path) -> Path: - """把 SB3 模型原子地写到 ``target``,返回实际落盘路径。 - - 先写 ``.tmp-``(同样以 ``.zip`` 结尾,SB3 不会再加后缀),完整写完后 - ``os.replace`` 覆盖目标。于是: - - - 保存途中被强杀 → 目标路径仍是上一份**完整**的快照,可继续复训; - - 保存成功 → 目标路径立即变成新快照,不存在"看起来存在但打不开"的窗口。 - - 临时名带 ``.tmp-`` 前缀,因此不会被 ``*_ckpt_*.zip`` 的清理逻辑误当成正式 - checkpoint。 - """ - target = Path(target) - target.parent.mkdir(parents=True, exist_ok=True) - tmp = target.with_name(f".tmp-{target.name}") - model.save(str(tmp)) - if not tmp.exists(): # SB3 对未知后缀可能自行补 .zip - candidate = tmp.with_name(tmp.name + ".zip") - if candidate.exists(): - tmp = candidate - os.replace(tmp, target) - return target - - -def _write_resume_hint(*, run_dir: Path, model_path: Path, timesteps: int, - reason: str, model=None) -> dict[str, Any]: - """把"从哪继续"写进 ``/resume.json``。 - - 这是急停恢复的**权威指针**:无论上一刻是周期 checkpoint、滚动恢复点、 - 优雅收尾还是异常兜底,这个文件总指向一份完整、可 ``--resume`` 的产物, - 并带上续训语义(``timesteps`` 是增量步数)与生效过的 PPO 超参。 - """ - hint: dict[str, Any] = { - "event": "resume_hint", - "model": str(model_path), - "timesteps": int(timesteps), - "timesteps_semantics": "additional", - "reason": str(reason), - "created_unix_s": time.time(), - "resume_args": ["--resume", "--model", str(model_path)], - } - if model is not None: - hint["ppo_hyperparams"] = _policy_hyperparams(model) - _write_json_atomic(run_dir / "resume.json", hint) - return hint - - -def _write_metadata(*, model_path: Path, args, wall_s: float, n_envs: int, - actual_timesteps: int, monitor_paths: list[str], - model=None, - extra: dict[str, Any] | None = None) -> dict[str, Any]: - """写模型旁挂元数据(含 sha256),训练前端/审计都读它。""" - metadata = _model_metadata(args=args, wall_s=wall_s, n_envs=n_envs, - actual_timesteps=actual_timesteps) - if model is not None: - metadata["ppo_hyperparams"] = _policy_hyperparams(model) - metadata["model_sha256"] = _hash_file(model_path) - metadata["monitor_files"] = list(monitor_paths) - metadata["reward_note"] = ( - "reward_profile=time 使用 HRLReward.time_only(P0.4 纯时间口径);" - "reward_profile=prompt 使用原始 §5.2 塑形。模型元数据已固化口径。") - if extra: - metadata.update(extra) - _write_json_atomic(model_path.with_suffix(".json"), metadata) - return metadata - - -def _prune_checkpoints(directory: Path, stem: str, keep: int) -> list[str]: - """只保留最近 ``keep`` 个 checkpoint(zip+json 同删),返回被删的 zip 路径。 - - 只匹配 ``_<步数>.zip``;滚动恢复点 ``_latest.zip`` 与临时文件 - ``.tmp-*.zip`` 都不匹配,因此永远不会被历史清理误删。 - """ - files = sorted((path for path in directory.glob(f"{stem}_[0-9]*.zip") - if path.stem.rsplit("_", 1)[-1].isdigit()), - key=lambda path: path.stat().st_mtime, reverse=True) - removed: list[str] = [] - for stale in files[max(1, int(keep)):]: - for candidate in (stale, stale.with_suffix(".json")): - if candidate.exists(): - candidate.unlink() - removed.append(str(stale)) - return removed - - -def _evaluate_env(model, *, problem: int, stage_index: int, - episodes: int, seed: int, profile: str, - reward_profile: str) -> dict[str, Any]: - from mcm26b.hrl.hierarchical_env import HierarchicalEnv - - stage = _stage_from_index(stage_index) - env = HierarchicalEnv(problem=problem, stage=stage, - fidelity=_profile_fidelity(profile), - max_episode_steps=300, real_budget_s=1800.0, - reward=_reward_from_profile(reward_profile)) - wins = 0 - rows = [] - if episodes <= 0: - env.close() - return {"episodes": 0, "successes": 0, "success_rate": None, "rows": []} - for episode in range(episodes): - obs, info = env.reset(seed=seed + episode) - done = False - steps = 0 - while not done: - action, _state = model.predict( - obs, action_masks=env.action_masks(), deterministic=True) - obs, _, terminated, truncated, info = env.step(int(action)) - done = bool(terminated or truncated) - steps += 1 - # 课程阶段的小场景只需证明全部频道 accounted;完整阶段至少应清掉 - # 场景最少的题面源数。这里不读取真值,只使用环境自身统计。 - success = bool( - info.get("accounted", 0) >= 20 - and info.get("cleared", 0) >= stage.sources_min - and not info.get("anomalies") - ) - wins += int(success) - rows.append({ - "episode": episode, - "seed": seed + episode, - "steps": steps, - "cleared": info.get("cleared", 0), - "accounted": info.get("accounted", 0), - "virtual_time_s": info.get("episode_virtual_cost_s"), - "stop_reason": info.get("stop_reason"), - "anomalies": info.get("anomalies"), - "success": success, - }) - env.close() - return { - "episodes": len(rows), - "successes": wins, - "success_rate": wins / len(rows) if rows else 0.0, - "rows": rows, - } - - -def _evaluate_manifest(model_path: Path, manifest_path: str, *, - limit: int) -> dict[str, Any]: - """可选:用 benchmark_hrl 的同一套真值隔离评测在固定 manifest 上跑已训模型。""" - scripts_dir = Path(__file__).resolve().parent - if str(scripts_dir) not in sys.path: - sys.path.insert(0, str(scripts_dir)) - import benchmark_hrl as bench # scripts/benchmark_hrl.py - - manifest = json.loads(Path(manifest_path).read_text(encoding="utf-8")) - scenes = bench.scenes_from_manifest(manifest) - if limit > 0: - scenes = scenes[:limit] - rows = [] - for scene in scenes: - run_dir = Path(model_path).parent / "eval-manifest" / scene.scene_id - result = bench.run_scene_variant( - scene, "hrl", config=ProblemConfig(), - hrl_model=str(model_path), run_dir=run_dir) - rows.append(result["row"]) - aggregate = bench._aggregate(rows) - return aggregate - - -def run_training(args) -> int: - import numpy as np - import torch - from sb3_contrib import MaskablePPO - from stable_baselines3.common.callbacks import BaseCallback - from stable_baselines3.common.utils import set_random_seed - - torch.set_num_threads(1) - set_random_seed(args.seed) - random.seed(args.seed) - np.random.seed(args.seed) - if torch.cuda.is_available(): - torch.cuda.manual_seed_all(args.seed) - - model_path = Path(args.model) - if model_path.exists() and not (args.resume or args.force): - print(f"模型已存在:{model_path};如需覆盖请加 --force,续训请加 --resume。", - file=sys.stderr) - return 2 - model_path.parent.mkdir(parents=True, exist_ok=True) - run_dir = model_path.parent - monitor_paths = [ - str(run_dir / f"high_curve_{model_path.stem}_env{rank}.monitor.csv") - for rank in range(args.envs) - ] - for path in monitor_paths: - Path(path).parent.mkdir(parents=True, exist_ok=True) - - vec_env = _build_vec_env(args, monitor_paths) - - if args.resume: - if not model_path.exists(): - print(f"--resume 指定的模型不存在:{model_path}", file=sys.stderr) - return 2 - model = MaskablePPO.load(str(model_path), env=vec_env, - device=args.device, - print_system_info=False) - elif args.init: - init_path = Path(args.init) - if not init_path.exists(): - print(f"--init 指定的模型不存在:{init_path}", file=sys.stderr) - return 2 - model = MaskablePPO.load(str(init_path), env=vec_env, - device=args.device, - print_system_info=False) - else: - model = MaskablePPO( - "MlpPolicy", - vec_env, - policy_kwargs={"net_arch": [128, 128]}, - n_steps=args.rollout_steps, - batch_size=args.batch_size, - n_epochs=args.n_epochs, - gamma=1.0, - gae_lambda=0.95, - learning_rate=3e-4, - clip_range=0.2, - ent_coef=0.005, - vf_coef=0.5, - max_grad_norm=0.5, - seed=args.seed, - device=args.device, - verbose=args.verbose, - ) - if args.init: - pass # 已在上面处理;此分支仅保持语义清晰 - - # resume/init 会恢复 checkpoint 内的 PPO 超参,命令行同名三项目前被忽略; - # 显式说出差异,避免"以为换了 n_steps 其实没换"。 - if args.resume or args.init: - effective = _policy_hyperparams(model) - requested = {"n_steps": int(args.rollout_steps), - "batch_size": int(args.batch_size), - "n_epochs": int(args.n_epochs)} - if {key: effective[key] for key in requested} != requested: - print(json.dumps({ - "event": "hyperparams_from_checkpoint", - "effective": {key: effective[key] for key in requested}, - "requested": requested, - "note": ("resume/init 沿用 checkpoint 内的 PPO 超参," - "命令行 rollout-steps/batch-size/n-epochs 被忽略")}, - ensure_ascii=False), file=sys.stderr, flush=True) - - # ------------------------------------------------------ 优雅暂停 / 停止 - # 主通道是控制文件(跨平台);信号是兜底:直接 kill 本进程时也走同一段收尾。 - stop_state: dict[str, Any] = {"requested": False, "signal": None} - previous_handlers: dict[int, Any] = {} - - def _request_stop(source: str) -> None: - if stop_state["requested"]: - return - stop_state["requested"] = True - stop_state["signal"] = source - print(json.dumps({"event": "stop_requested", "signal": source}), flush=True) - - def _on_stop_signal(signum, _frame): - _request_stop(signal.Signals(signum).name) - - for _signum in _stop_signals(): - try: - previous_handlers[_signum] = signal.signal(_signum, _on_stop_signal) - except (ValueError, OSError): # 非主线程/平台不支持:不阻塞训练 - pass - - class _ControlChannel(BaseCallback): - """把 :class:`_ControlPoll` 接到 SB3 的 step 回调上。 - - 为什么不用信号:Windows 没有 SIGSTOP,且 ``os.kill(SIGTERM)`` 会退化成 - ``TerminateProcess`` 硬杀,收尾分支根本不会执行。控制文件在 POSIX 与 - Windows 上都只是普通文件 IO,语义完全一致。 - - 暂停是**协作式**的:在 ``_on_step`` 内阻塞轮询,训练因此停在 step 边界, - 进程仍存活、显存仍占用,但不消耗算力;收到 stop 立刻转入收尾落盘。 - """ - - def __init__(self, path: Path, *, poll_every: int = 32, - poll_s: float = 0.2): - super().__init__() - self.poller = _ControlPoll(path, poll_every=poll_every, - poll_s=poll_s) - - def paused_seconds(self) -> float: - return self.poller.paused_total_s - - def _event(self, name: str) -> None: - print(json.dumps({"event": name, - "timesteps": int(self.model.num_timesteps)}), - flush=True) - - def _on_step(self) -> bool: - state = self.poller.poll() - if state.stop: - _request_stop("control_file") - return False - if state.paused: - stopped = self.poller.wait_while_paused( - lambda: self._event("paused"), - lambda: self._event("resumed")) - if stopped: - _request_stop("control_file") - return False - return not stop_state["requested"] - return True - - control_path = getattr(args, "control_file", None) - control_cb = _ControlChannel(Path(control_path)) if control_path else None - - class _GracefulStop(BaseCallback): - """收到停止请求后在最近一次 step 边界结束 rollout,让模型能落盘。""" - - def _on_step(self) -> bool: - if stop_state["requested"]: - print(json.dumps({"event": "graceful_stop", - "signal": stop_state["signal"], - "timesteps": int(self.model.num_timesteps)}), - flush=True) - return False - return True - - class _WallClockStop(BaseCallback): - """墙钟硬上限;暂停时间不计入,避免"挂起一小时回来就判超时"。""" - - def __init__(self, max_wall_s: float, paused_clock=None): - super().__init__() - self.max_wall_s = max_wall_s - self.start = time.monotonic() - self.paused_clock = paused_clock - - def paused_seconds(self) -> float: - return float(self.paused_clock()) if self.paused_clock else 0.0 - - def _on_step(self) -> bool: - elapsed = time.monotonic() - self.start - self.paused_seconds() - if elapsed >= self.max_wall_s: - print(json.dumps({"event": "wall_clock_stop", - "elapsed_s": elapsed})) - return False - return True - - class _ProgressJSON(BaseCallback): - """向训练前端输出单行 JSON 进度;不影响 SB3 自身 logger。 - - 前端首个 curve 点越早出现越好,因此开头几步按更小间隔发送(前 8 个 - 进度点逐步放大到 ``every_steps``),之后稳定在 ``every_steps``。 - 这样短程 smoke 也能看到完整曲线,长训不会刷屏。 - """ - - def __init__(self, every_steps: int): - super().__init__() - self.every_steps = max(1, int(every_steps)) - # init/resume 时计数器从上一阶段继续,前端要用增量算进度 - self.start = int(model.num_timesteps) - self.last_emit = self.start - self.emitted = 0 - - def _next_gap(self) -> int: - warmup = max(0.2, 1.0 - self.emitted / 8.0) - return max(1, min(self.every_steps, int(round(self.every_steps * warmup)))) - - def _on_step(self) -> bool: - current = int(self.model.num_timesteps) - if current - self.last_emit < self._next_gap(): - return True - self.last_emit = current - self.emitted += 1 - payload = _progress_payload(self.model, self.start) - print(json.dumps(payload, ensure_ascii=False, allow_nan=False), - flush=True) - return True - - started = time.monotonic() - checkpoints_dir = (Path(args.checkpoint_dir) if args.checkpoint_dir - else run_dir / "checkpoints") - checkpoint_stem = f"{model_path.stem}_ckpt" - - class _CheckpointJSON(BaseCallback): - """可续训落盘:滚动恢复点 + 周期 checkpoint + resume.json 指针。 - - - **滚动恢复点** ``_latest.zip``:每 ``recovery_every`` 个环境步 - 原子覆盖写一次,训练开始前也先写一份。它保证"急停"(SIGKILL / - ``taskkill /F``,没有任何 Python 清理机会)之后**最多只丢 - ``recovery_every`` 个环境步**,而且文件始终完整可加载。 - - **周期 checkpoint** ``_<步数>.zip``:每 ``every_steps`` 步留一份, - 只保留最近 ``keep`` 个,用于返祖对比与多档恢复。 - - 每次落盘都刷新 ``/resume.json``:无论怎么停,都有一份权威的 - "从哪继续"指针(含增量语义与生效过的 PPO 超参)。 - """ - - def __init__(self, every_steps: int, keep: int, recovery_every: int): - super().__init__() - self.every_steps = max(0, int(every_steps)) - self.keep = max(1, int(keep)) - self.recovery_every = max(0, int(recovery_every)) - self.last_saved = int(model.num_timesteps) - self.last_recovery = int(model.num_timesteps) - self.saved: list[str] = [] - self.latest_path = checkpoints_dir / f"{checkpoint_stem}_latest.zip" - - def write_recovery(self, reason: str) -> None: - """立刻写一份滚动恢复点;训练开始前调用即"起步基线"。 - - 用闭包里的 ``model`` 而不是 ``self.model``:``BaseCallback.model`` - 要等 ``learn()`` 时才被赋值,而起步基线恰恰在 ``learn()`` 之前写。 - """ - current = int(model.num_timesteps) - self.last_recovery = current - self._write_recovery(current, reason) - - def _on_step(self) -> bool: - current = int(model.num_timesteps) - if (self.recovery_every > 0 - and current - self.last_recovery >= self.recovery_every): - self.last_recovery = current - self._write_recovery(current, "interval") - if (self.every_steps > 0 - and current - self.last_saved >= self.every_steps): - self.last_saved = current - self._write_interval(current) - return True - - def _persist(self, target: Path, current: int, reason: str, - extra: dict[str, Any]) -> None: - """原子落盘 zip + 元数据,并刷新 resume.json 指针。""" - _save_model_atomic(model, target) - _write_metadata( - model_path=target, args=args, - wall_s=time.monotonic() - started, n_envs=args.envs, - actual_timesteps=current, monitor_paths=monitor_paths, - model=model, - extra={"checkpoint_timesteps": current, - "checkpoint_reason": reason, - "checkpoint_of": str(model_path), **extra}) - _write_resume_hint(run_dir=run_dir, model_path=target, - timesteps=current, reason=reason, - model=model) - - def _write_recovery(self, current: int, reason: str) -> None: - checkpoints_dir.mkdir(parents=True, exist_ok=True) - self._persist(self.latest_path, current, reason, - {"recovery": True}) - print(json.dumps({"event": "recovery_checkpoint", - "reason": reason, "timesteps": current, - "model": str(self.latest_path)}, - ensure_ascii=False), flush=True) - - def _write_interval(self, current: int) -> None: - checkpoints_dir.mkdir(parents=True, exist_ok=True) - target = checkpoints_dir / f"{checkpoint_stem}_{current:09d}.zip" - self._persist(target, current, "interval", {"checkpoint": True}) - removed = _prune_checkpoints(checkpoints_dir, checkpoint_stem, - self.keep) - self.saved.append(str(target)) - print(json.dumps({"event": "checkpoint", "timesteps": current, - "model": str(target), "pruned": removed}, - ensure_ascii=False), flush=True) - - progress_every = (args.progress_every if args.progress_every > 0 - else args.rollout_steps * args.envs) - checkpoint_cb = _CheckpointJSON(args.checkpoint_every, args.checkpoint_keep, - args.recovery_every) - if args.recovery_every > 0: - # 起步基线:训练还没跑就急停,也至少有一份可加载、可续训的产物 - checkpoint_cb.write_recovery("baseline") - # 顺序有语义:控制通道最先(暂停/停止要在本步立刻生效),进度次之, - # 墙钟上限要能读到控制通道累计的暂停秒数,checkpoint 放最后。 - callbacks: list[Any] = [] - if control_cb is not None: - callbacks.append(control_cb) - if args.progress_json: - callbacks.append(_ProgressJSON(progress_every)) - callbacks.append(_GracefulStop()) - callbacks.append(_WallClockStop( - args.max_wall_s, - paused_clock=(control_cb.paused_seconds if control_cb is not None - else None))) - callbacks.append(checkpoint_cb) - - actual_timesteps = int(model.num_timesteps) - try: - model.learn(total_timesteps=args.timesteps, - callback=callbacks if len(callbacks) > 1 else callbacks[0], - progress_bar=False, - reset_num_timesteps=not (args.resume or args.init)) - except BaseException as exc: # 训练失败也必须留下可续训产物,不静默 - failure = { - "event": "training_failed", - "error": f"{type(exc).__name__}: {exc}", - "model": str(model_path), - "timesteps": int(model.num_timesteps), - } - emergency = run_dir / f"{model_path.stem}_emergency.zip" - try: - _save_model_atomic(model, emergency) - _write_metadata(model_path=emergency, args=args, - wall_s=time.monotonic() - started, - n_envs=args.envs, - actual_timesteps=int(model.num_timesteps), - monitor_paths=monitor_paths, model=model, - extra={"emergency": True, - "error": failure["error"]}) - _write_resume_hint(run_dir=run_dir, model_path=emergency, - timesteps=int(model.num_timesteps), - reason="emergency", model=model) - failure["emergency_model"] = str(emergency) - except Exception as save_exc: # 落盘失败不能再掩盖原始异常 - failure["emergency_save_error"] = ( - f"{type(save_exc).__name__}: {save_exc}") - _write_json_atomic(run_dir / "training_failure.json", failure) - print(json.dumps(failure, ensure_ascii=False), file=sys.stderr, - flush=True) - raise - wall_s = time.monotonic() - started - actual_timesteps = int(model.num_timesteps) - stopped_by_signal = bool(stop_state["requested"]) - _save_model_atomic(model, model_path) - metadata = _write_metadata( - model_path=model_path, args=args, wall_s=wall_s, n_envs=args.envs, - actual_timesteps=actual_timesteps, monitor_paths=monitor_paths, - model=model, - extra={"stopped_by_signal": stopped_by_signal, - "stop_signal": stop_state["signal"], - "checkpoint_files": checkpoint_cb.saved, - "recovery_model": str(checkpoint_cb.latest_path)}) - # 最终模型也刷新一次 resume.json:优雅收尾后"从哪继续"指向最终模型 - _write_resume_hint(run_dir=run_dir, model_path=model_path, - timesteps=actual_timesteps, - reason=("stopped" if stopped_by_signal else "finished"), - model=model) - metadata_path = model_path.with_suffix(".json") - vec_env.close() - # 收尾阶段恢复默认处理器:再次 Ctrl+C / 停止可立即强杀,不再等待评估。 - for _signum, _handler in previous_handlers.items(): - try: - signal.signal(_signum, _handler) - except (ValueError, OSError): - pass - if stopped_by_signal: - print(json.dumps({"event": "saved_after_stop", - "model": str(model_path), - "timesteps": actual_timesteps}), flush=True) - - evaluation = _evaluate_env( - model, problem=args.problem, stage_index=args.stage, - episodes=args.eval_episodes, seed=args.seed + 1_000_000, - profile=args.config_profile, reward_profile=args.reward_profile) - manifest_eval = None - if args.eval_manifest: - try: - manifest_eval = _evaluate_manifest( - model_path, args.eval_manifest, limit=args.eval_manifest_limit) - except Exception as exc: - manifest_eval = {"error": f"{type(exc).__name__}: {exc}"} - metadata["evaluation"] = evaluation - metadata["eval_manifest"] = manifest_eval - metadata_path.write_text(json.dumps(metadata, ensure_ascii=False, indent=2), - encoding="utf-8") - print(json.dumps(metadata, ensure_ascii=False, indent=2)) - return 0 - - -def main(argv=None) -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--problem", type=int, choices=(3, 4), required=True) - parser.add_argument("--stage", type=int, choices=(1, 2, 3, 4), - default=4) - parser.add_argument("--timesteps", type=int, required=True) - parser.add_argument("--seed", type=int, default=320001) - parser.add_argument("--envs", type=int, default=1) - parser.add_argument("--vec-env", choices=("dummy", "subproc"), default="dummy") - parser.add_argument("--device", choices=("cpu", "cuda", "mps", "auto"), - default="auto") - parser.add_argument("--config-profile", - choices=("production", "coarse-pretrain"), - default="production") - parser.add_argument("--model", required=True) - parser.add_argument("--resume", action="store_true", - help="从 --model 续训(沿用 checkpoint 内的 PPO 超参)") - parser.add_argument("--init", default=None, - help="可选:Q3→Q4 或继续预训练权重路径") - parser.add_argument("--force", action="store_true") - parser.add_argument("--eval-manifest", default=None) - parser.add_argument("--eval-manifest-limit", type=int, default=0) - parser.add_argument("--eval-episodes", type=int, default=5) - parser.add_argument("--local-selector", choices=("geometry", "rl"), - default="geometry") - parser.add_argument("--local-model", default=None) - parser.add_argument("--rollout-steps", type=int, default=256) - parser.add_argument("--batch-size", type=int, default=256) - parser.add_argument("--n-epochs", type=int, default=10) - parser.add_argument("--max-wall-s", type=float, default=1200.0, - help="训练墙钟硬上限;默认 20 分钟") - parser.add_argument("--reward-profile", choices=("time", "prompt"), - default="time", - help="time=P0.4 纯时间口径;prompt=原始 §5.2 塑形对照") - parser.add_argument("--progress-json", action="store_true", - help="向训练前端输出单行 JSON 进度(UI 自动启用)") - parser.add_argument("--control-file", default=None, - help="训练前端控制文件(JSON:paused/stop);" - "跨平台暂停与优雅停止的主通道") - parser.add_argument("--progress-every", type=int, default=0, - help="JSON 进度间隔环境步数;0=每个 rollout") - parser.add_argument("--checkpoint-every", type=int, default=20000, - help="每 N 个环境步留一个历史 checkpoint;0=关闭(默认 20000)") - parser.add_argument("--recovery-every", type=int, default=2000, - help="每 N 个环境步原子覆盖写一份滚动恢复点 " - "<模型目录>/checkpoints/_latest.zip;" - "急停后最多丢 N 步。0=关闭(默认 2000)") - parser.add_argument("--checkpoint-keep", type=int, default=3, - help="checkpoint 保留最近 K 个(默认 3)") - parser.add_argument("--checkpoint-dir", default=None, - help="checkpoint 目录;默认 <模型目录>/checkpoints") - parser.add_argument("--verbose", type=int, default=1) - args = parser.parse_args(argv) - if args.timesteps <= 0 or args.envs <= 0: - parser.error("timesteps 与 envs 必须为正") - if args.envs * args.rollout_steps < 2: - parser.error("PPO rollout 至少需要 2 个样本") - if args.eval_episodes < 0: - parser.error("eval-episodes 不能为负") - if args.checkpoint_every < 0: - parser.error("checkpoint-every 不能为负") - if args.recovery_every < 0: - parser.error("recovery-every 不能为负") - if args.checkpoint_keep < 1: - parser.error("checkpoint-keep 至少为 1") - return run_training(args) - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/train_hrl_low.py b/scripts/train_hrl_low.py deleted file mode 100644 index a1f0291..0000000 --- a/scripts/train_hrl_low.py +++ /dev/null @@ -1,266 +0,0 @@ -"""低层 PPO 训练:8 方向到达任务(BC 直线专家热启动 + PPO 微调)。 - -产物: - output/hrl/hrl_low.zip / hrl_low.json PPO 模型(部署用) - output/hrl/bc_low_expert.npz / bc_low.pt 行为克隆数据与网络 - output/hrl/hrl_low_curve_env*.monitor.csv 每个环境独立学习曲线 - -评估口径:到达成功率 + 路径效率(直线距离/实际路径长,1 为完美直线)。 -这是独立导航实验:目前低层 PPO 仅供轨迹诊断,不影响正式 HTTP 任务。 - -示例: - uv run python scripts/train_hrl_low.py --timesteps 60000 - uv run python scripts/train_hrl_low.py --skip-bc # 纯 PPO 对照 -""" - -from __future__ import annotations - -import argparse -import hashlib -import json -import math -import time -from pathlib import Path - -from mcm26b.config import ProblemConfig -from mcm26b.hrl.constants import (FEATURE_VERSION, LOW_MAX_STEPS, - LOW_NUM_ACTIONS, LOW_OBS_DIM) -from mcm26b.hrl.low_level_env import LowLevelEnv - -HIDDEN = (64, 64) - - -def _bc_module(obs_dim: int, n_actions: int, hidden: tuple[int, ...]): - import torch - - class BCMlp(torch.nn.Module): - def __init__(self): - super().__init__() - layers = [] - prev = obs_dim - for width in hidden: - layers += [torch.nn.Linear(prev, width), torch.nn.Tanh()] - prev = width - layers.append(torch.nn.Linear(prev, n_actions)) - self.net = torch.nn.Sequential(*layers) - - def forward(self, x): - return self.net(x) - - return BCMlp - - -def collect(episodes: int, seed: int, config: ProblemConfig): - import numpy as np - env = LowLevelEnv(config=config, seed=seed) - observations, actions, episode_ids = [], [], [] - for episode in range(episodes): - obs, _info = env.reset(seed=seed + episode) - for _step in range(LOW_MAX_STEPS + 2): - observations.append(obs) - actions.append(env.expert_action()) - episode_ids.append(episode) - obs, _r, terminated, truncated, _info = env.step(env.expert_action()) - if terminated or truncated: - break - env.close() - return (np.asarray(observations, dtype=np.float32), - np.asarray(actions, dtype=np.int64), - np.asarray(episode_ids, dtype=np.int64)) - - -def bc_validation_mask(episode_ids, *, seed: int): - """按整局留出,避免同一轨迹相邻状态跨训练/验证集。""" - import numpy as np - unique = np.unique(episode_ids) - if len(unique) < 2: - raise ValueError("BC 至少需要 2 局才能按整局划分训练/验证集") - rng = np.random.default_rng(seed) - validation_ids = rng.permutation(unique)[:max(1, len(unique) // 10)] - return np.isin(episode_ids, validation_ids) - - -def train_bc(x, y, episode_ids, *, epochs: int, batch_size: int, lr: float, - device: str, seed: int): - import torch - BCMlp = _bc_module(LOW_OBS_DIM, LOW_NUM_ACTIONS, HIDDEN) - model = BCMlp().to(device) - optimizer = torch.optim.AdamW(model.parameters(), lr=lr) - valid = torch.as_tensor( - bc_validation_mask(episode_ids, seed=seed), device=device) - x_t = torch.as_tensor(x, device=device) - y_t = torch.as_tensor(y, device=device) - x_v, y_v, x_tr, y_tr = x_t[valid], y_t[valid], x_t[~valid], y_t[~valid] - loss_fn = torch.nn.CrossEntropyLoss() - for epoch in range(epochs): - order = torch.randperm(len(x_tr), device=device) - total = correct = 0.0 - for start in range(0, len(order), batch_size): - idx = order[start:start + batch_size] - logits = model(x_tr[idx]) - loss = loss_fn(logits, y_tr[idx]) - optimizer.zero_grad() - loss.backward() - optimizer.step() - total += float(loss.item()) * len(idx) - correct += int((logits.argmax(1) == y_tr[idx]).sum().item()) - if epoch == 0 or (epoch + 1) % 5 == 0: - with torch.no_grad(): - valid_acc = float((model(x_v).argmax(1) == y_v).float().mean().item()) - print(json.dumps({"event": "bc_epoch", "epoch": epoch + 1, - "loss": round(total / len(x_tr), 4), - "train_acc": round(correct / len(x_tr), 4), - "valid_acc": round(valid_acc, 4)}, - ensure_ascii=False)) - with torch.no_grad(): - valid_acc = float((model(x_v).argmax(1) == y_v).float().mean().item()) - return model, valid_acc - - -def copy_into_ppo(bc_model, device: str, env, *, seed: int, - n_steps: int = 512) -> object: - """把 BC 权重拷入 MaskablePPO(policy_net 两层 + action_net),前向校验。""" - import torch - from sb3_contrib import MaskablePPO - ppo = MaskablePPO("MlpPolicy", env, policy_kwargs={"net_arch": list(HIDDEN)}, - n_steps=n_steps, batch_size=128, n_epochs=6, - gamma=1.0, gae_lambda=0.95, learning_rate=3e-4, - clip_range=0.2, ent_coef=0.005, vf_coef=0.5, - max_grad_norm=0.5, seed=seed, device=device) - state = {key.removeprefix("net."): value - for key, value in bc_model.state_dict().items()} - policy_state = {key: value for key, value in state.items() - if key in ("0.weight", "0.bias", "2.weight", "2.bias")} - ppo.policy.mlp_extractor.policy_net.load_state_dict(policy_state) - ppo.policy.action_net.load_state_dict( - {"weight": state["4.weight"], "bias": state["4.bias"]}) - probe = torch.randn((8, LOW_OBS_DIM), device=device) - with torch.no_grad(): - copied = ppo.policy.action_net(ppo.policy.mlp_extractor.policy_net(probe)) - if not torch.allclose(bc_model(probe), copied, atol=1e-6): - raise RuntimeError("行为克隆与 PPO 前向映射不一致") - return ppo - - -def evaluate(model, *, episodes: int, seed: int, - config: ProblemConfig) -> dict: - """确定性策略评估:成功率与路径效率(对照直线)。""" - env = LowLevelEnv(config=config, seed=seed) - successes = 0 - efficiencies = [] - for episode in range(episodes): - obs, info = env.reset(seed=seed + episode) - start, goal = tuple(info["position"]), tuple(info["goal"]) - straight = math.dist(start, goal) - steps = 0 - for _ in range(LOW_MAX_STEPS + 2): - action, _state = model.predict(obs, deterministic=True) - obs, _r, terminated, truncated, info = env.step(int(action)) - steps += 1 - if terminated or truncated: - break - successes += int(terminated) - efficiencies.append(min(1.0, straight / - max(info["path_length_m"], 1e-9))) - env.close() - return {"episodes": episodes, - "success_rate": successes / episodes, - "mean_path_efficiency": sum(efficiencies) / len(efficiencies)} - - -def main(argv=None) -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--timesteps", type=int, default=60_000) - parser.add_argument("--seed", type=int, default=20260911) - parser.add_argument("--bc-episodes", type=int, default=600) - parser.add_argument("--bc-epochs", type=int, default=12) - parser.add_argument("--envs", type=int, default=4) - parser.add_argument("--rollout-steps", type=int, default=512, - help="每环境每次 PPO rollout 长度;短 smoke 可设 8") - parser.add_argument("--device", default="cpu") - parser.add_argument("--model", default="output/hrl/hrl_low.zip") - parser.add_argument("--eval-episodes", type=int, default=40) - parser.add_argument("--skip-bc", action="store_true", - help="跳过行为克隆(纯 PPO 对照实验用)") - parser.add_argument("--verbose", type=int, default=1) - args = parser.parse_args(argv) - if min(args.envs, args.timesteps, args.eval_episodes, - args.rollout_steps) <= 0: - parser.error("envs/timesteps/eval-episodes/rollout-steps 必须为正数") - if args.envs * args.rollout_steps < 2: - parser.error("PPO rollout 至少需要 2 个样本") - if not args.skip_bc and (args.bc_episodes < 2 or args.bc_epochs < 1): - parser.error("BC 至少需要 2 局和 1 个 epoch") - - import torch - torch.set_num_threads(1) - from sb3_contrib import MaskablePPO - from stable_baselines3.common.monitor import Monitor - from stable_baselines3.common.vec_env import DummyVecEnv - from stable_baselines3.common.utils import set_random_seed - set_random_seed(args.seed) - - model_path = Path(args.model) - model_path.parent.mkdir(parents=True, exist_ok=True) - curve_paths = [model_path.with_name( - f"{model_path.stem}_curve_env{rank}.monitor.csv") - for rank in range(args.envs)] - - def _factory(rank: int): - def _make(): - env = Monitor(LowLevelEnv(seed=args.seed + rank), - filename=str(curve_paths[rank])) - return env - return _make - - vec_env = DummyVecEnv([_factory(rank) for rank in range(args.envs)]) - started = time.monotonic() - bc_valid_acc = None - if args.skip_bc: - model = MaskablePPO("MlpPolicy", vec_env, - policy_kwargs={"net_arch": list(HIDDEN)}, - n_steps=args.rollout_steps, batch_size=128, n_epochs=6, - gamma=1.0, gae_lambda=0.95, learning_rate=3e-4, - clip_range=0.2, ent_coef=0.005, vf_coef=0.5, - max_grad_norm=0.5, seed=args.seed, - device=args.device, verbose=args.verbose) - else: - x, y, episode_ids = collect(args.bc_episodes, args.seed, ProblemConfig()) - bc_model, bc_valid_acc = train_bc( - x, y, episode_ids, epochs=args.bc_epochs, batch_size=256, - lr=3e-4, device=args.device, seed=args.seed) - model = copy_into_ppo(bc_model, args.device, vec_env, seed=args.seed, - n_steps=args.rollout_steps) - bc_dir = model_path.parent / "bc_low.pt" - torch.save(bc_model.state_dict(), str(bc_dir)) - print(json.dumps({"event": "bc_done", "samples": int(len(x))}, - ensure_ascii=False)) - model.learn(total_timesteps=args.timesteps, - progress_bar=args.verbose > 0) - elapsed_s = time.monotonic() - started - - model.save(str(model_path)) - eval_seed = args.seed + 1_000_000 - evaluation = evaluate(model, episodes=args.eval_episodes, seed=eval_seed, - config=ProblemConfig()) - report = { - "level": "low", "timesteps": args.timesteps, "seed": args.seed, - "device": args.device, "wall_seconds": round(elapsed_s, 1), - "model": str(model_path), "algorithm": "maskable_ppo", - "feature_version": FEATURE_VERSION, "bc_skipped": args.skip_bc, - "bc_valid_acc": bc_valid_acc, "evaluation_seed": eval_seed, - "monitor_files": [str(path) for path in curve_paths], - "training_role": "standalone_navigation_only", - "obs_dim": LOW_OBS_DIM, "act_dim": LOW_NUM_ACTIONS, - "model_sha256": hashlib.sha256(model_path.read_bytes()).hexdigest(), - **evaluation, - } - model_path.with_suffix(".json").write_text( - json.dumps(report, ensure_ascii=False, indent=2), encoding="utf-8") - print(json.dumps(report, ensure_ascii=False, indent=2)) - vec_env.close() - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/train_hrl_ui.py b/scripts/train_hrl_ui.py deleted file mode 100644 index bc0cbb5..0000000 --- a/scripts/train_hrl_ui.py +++ /dev/null @@ -1,5 +0,0 @@ -"""启动 HRL 模型训练前端(薄入口,便于加入支撑材料命令)。""" -from mcm26b.training_ui.server import run_training_ui - -if __name__ == "__main__": - raise SystemExit(run_training_ui()) diff --git a/scripts/train_rl.py b/scripts/train_rl.py deleted file mode 100644 index 521161a..0000000 --- a/scripts/train_rl.py +++ /dev/null @@ -1,195 +0,0 @@ -"""问题3/4 强化学习选点策略训练(PPO + CUDA)。 - -训练环境 mcm26b.rl.env.LocalizationEnv 与运行闭环共享 features 观测/候选 -布局。模型输出到 output/rl/q3_ppo.zip(问题3)或 q4_ppo.zip(问题4), -由 `mcm26b run --strategy rl` / `--q4-strategy rl` 加载。 - -示例: - uv sync --group rl --group dev - uv run python scripts/train_rl.py --problem 3 --timesteps 30000 - uv run python scripts/train_rl.py --problem 4 --timesteps 30000 - uv run mcm26b run --robot-id 2026001 --self-test --strategy rl - uv run mcm26b run --robot-id 2026001 --self-test --problem 4 --q4-strategy rl -""" - -from __future__ import annotations - -import argparse -import json -import time -from dataclasses import asdict -import hashlib -from pathlib import Path - -from stable_baselines3 import PPO -from sb3_contrib import MaskablePPO -from stable_baselines3.common.vec_env import DummyVecEnv - -from mcm26b.config import ProblemConfig -from mcm26b.rl.env import LocalizationEnv - - -def _make_env(problem: int, seed: int, config: ProblemConfig, - directional_probability: float): - def _factory(): - env = LocalizationEnv(config, problem=problem, - directional_probability=directional_probability, - real_budget_s=3600.0) - env.reset(seed=seed) - return env - return _factory - - -def evaluate(model, problem: int, *, episodes: int = 24, - directional_probability: float = 0.5, - config: ProblemConfig = ProblemConfig()) -> dict: - """独立场景评估:确定性策略的成功率、步数与平均回报。""" - env = LocalizationEnv(config, problem=problem, - directional_probability=directional_probability) - total_reward = 0.0 - successes = 0 - steps = [] - costs = [] - for episode in range(episodes): - obs, _info = env.reset(seed=1_000_000 + episode) - episode_reward = 0.0 - for step in range(env.max_episode_steps + 2): - kwargs = {'action_masks': env.action_masks()} if isinstance(model, MaskablePPO) else {} - action, _state = model.predict(obs, deterministic=True, **kwargs) - obs, reward, terminated, truncated, info = env.step(int(action)) - episode_reward += float(reward) - if terminated or truncated: - break - total_reward += episode_reward - cleared = bool(info.get("cleared")) - successes += int(cleared) - steps.append(step + 1) - costs.append(info['virtual_cost_s']) - env.close() - return { - "episodes": episodes, - "success_rate": successes / episodes, - "mean_steps": sum(steps) / episodes, - "mean_episode_reward": total_reward / episodes, - "successes": successes, - "mean_virtual_cost_s": sum(costs) / episodes, - "max_virtual_cost_s": max(costs), - } - - -def main(argv=None) -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--problem", type=int, choices=(3, 4), default=3, - help="训练问题:3=全向源选点,4=含定向遮挡梯子") - parser.add_argument("--timesteps", type=int, default=30000, - help="PPO 总环境步数") - parser.add_argument("--seed", type=int, default=20260911) - parser.add_argument("--envs", type=int, default=2, help="并行环境份数(CPU 侧)") - parser.add_argument("--directional-probability", type=float, default=None, - help="问题4训练场景中定向源比例(默认 1.0,先学遮挡分支)") - parser.add_argument("--device", default="auto", - help="auto=优先 CUDA;或 cuda/cpu") - parser.add_argument("--model", default=None, - help="模型输出路径(默认 output/rl/q_ppo.zip)") - parser.add_argument("--init", default=None, - help="初始模型路径(如 output/rl/q3_ppo_bc_init.zip;" - "加载后继续 PPO 微调)") - parser.add_argument("--eval-episodes", type=int, default=24) - parser.add_argument("--verbose", type=int, default=1) - parser.add_argument('--algorithm', choices=('ppo', 'maskable_ppo'), default='maskable_ppo') - parser.add_argument('--torch-threads', type=int, default=1) - args = parser.parse_args(argv) - directional_probability = (args.directional_probability - if args.directional_probability is not None - else (1.0 if args.problem == 4 else 0.0)) - if not 0.0 <= directional_probability <= 1.0: - parser.error("--directional-probability 须在 [0,1]") - - import torch - torch.set_num_threads(args.torch_threads) - if args.device == "auto": - device = "cuda" if torch.cuda.is_available() else "cpu" - else: - device = args.device - if device == "cuda" and not torch.cuda.is_available(): - parser.error("--device cuda 但当前环境检测不到 CUDA GPU") - print(json.dumps({ - "event": "train_start", "problem": args.problem, - "timesteps": args.timesteps, "device": device, - "directional_probability": directional_probability, - "torch": torch.__version__, - "gpu": torch.cuda.get_device_name(0) if device == "cuda" else None, - "cuda_available": torch.cuda.is_available(), - }, ensure_ascii=False)) - - config = ProblemConfig() - model_cls = MaskablePPO if args.algorithm == 'maskable_ppo' else PPO - vec_env = DummyVecEnv( - [_make_env(args.problem, args.seed + rank, config, - directional_probability) - for rank in range(max(1, args.envs))]) - if args.init: - metadata = json.loads(Path(args.init).with_suffix('.json').read_text(encoding='utf-8')) - if (metadata.get('algorithm', 'ppo') != args.algorithm - or metadata.get('feature_version') != 2): - parser.error('初始化模型的算法/特征版本与当前训练不符,请重训或提供v2初始化模型') - model = model_cls.load(args.init, env=vec_env, device=device) - else: - model = model_cls( - "MlpPolicy", vec_env, - policy_kwargs={"net_arch": [128, 128]}, - n_steps=512, - batch_size=128, - n_epochs=6, - gamma=1.0, - gae_lambda=0.95, - learning_rate=3e-4, - clip_range=0.2, - ent_coef=0.005, - vf_coef=0.5, - max_grad_norm=0.5, - seed=args.seed, - device=device, - verbose=args.verbose, - ) - - started = time.monotonic() - model.learn(total_timesteps=args.timesteps, - progress_bar=args.verbose > 0) - elapsed_s = time.monotonic() - started - - model_path = Path(args.model) if args.model \ - else Path("output/rl") / f"q{args.problem}_ppo.zip" - model_path.parent.mkdir(parents=True, exist_ok=True) - model.save(str(model_path)) - - evaluation = evaluate(model, args.problem, episodes=args.eval_episodes, - directional_probability=directional_probability, - config=config) - report = { - "problem": args.problem, - "timesteps": args.timesteps, - "seed": args.seed, - "device": device, - "directional_probability": directional_probability, - "wall_seconds": round(elapsed_s, 1), - "model": str(model_path), - "init": args.init, - "algorithm": args.algorithm, - "feature_version": 2, - "reward": 'negative_virtual_cost_div100_success20_failure100', - "gamma": 1.0, - "config": asdict(config), - "model_sha256": hashlib.sha256(model_path.read_bytes()).hexdigest(), - **evaluation, - } - report_path = model_path.with_suffix(".json") - report_path.write_text(json.dumps(report, ensure_ascii=False, indent=2), - encoding="utf-8") - print(json.dumps(report, ensure_ascii=False, indent=2)) - vec_env.close() - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/tune_hrl.py b/scripts/tune_hrl.py deleted file mode 100644 index b5c40eb..0000000 --- a/scripts/tune_hrl.py +++ /dev/null @@ -1,27 +0,0 @@ -"""HRL Optuna TPE 调参入口(P2 待实现)。 - -搜索空间按用户 Prompt §10,但只允许在不破坏覆盖证明/证书/预算的工程参数上搜索: -粒子数、重采样阈值、信息增益权重、移动成本权重、检测成本权重、候选点距离、 -覆盖网格间距、停止连续无信号次数、清除距离阈值。目标 = 平均定位清除时间 + -未清除惩罚,每个配置至少 5 个随机种子。 -""" -from __future__ import annotations - -import argparse - - -def main(argv=None) -> int: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("--problem", type=int, choices=(3, 4), default=3) - parser.add_argument("--trials", type=int, default=30) - parser.add_argument("--timesteps", type=int, default=2048) - parser.add_argument("--manifest", default="output/hrl/manifests/dev.json") - parser.add_argument("--output", default="output/hrl/p2-tuning") - parser.parse_args(argv) - raise NotImplementedError( - "P2 尚未实现:调参必须建立在 P1 smoke 与稳定基准之上," - "且不能搜索真实误差上限或破坏覆盖证明的网格参数。") - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/verify_q4_cover.py b/scripts/verify_q4_cover.py new file mode 100644 index 0000000..5e9d1ff --- /dev/null +++ b/scripts/verify_q4_cover.py @@ -0,0 +1,241 @@ +"""第四问覆盖证书与最小命中集搜索(CLI;核心实现见 mcm26b.guarantee.cover)。 + +第四问的定向源在"读点位于源的前向半平面内"时才可能被检出,因此 +"某频道在所有被访点都 no_signal ⟹ 该频道不存在源"的缺席证明,等价于要求 +被访点集合 S 满足 + + ∀ p ∈ Ω, ∀ h ∈ [0,360): ∃ c ∈ S, + |c − p| ≤ r_eff_min(1000) 且 (c − p)·u(h) ≥ 0 + +(题面规定朝向覆盖"两侧各 90 度,含边界",故取 ≥ 0)。现役 49 点方格的 +"单元对角 ≤ 1000"是**充分**条件但远非必要;本脚本用贪心击中集求等价覆盖的 +更小点集,并输出可复现证书。 + + uv run python scripts/verify_q4_cover.py # 校核 + 搜索 + 打印 + uv run python scripts/verify_q4_cover.py --spacing 200 --write-plan q4_mincover_v1 + uv run python scripts/verify_q4_cover.py --check-json my_points.json +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +from pathlib import Path + +from mcm26b.config import ProblemConfig +from mcm26b.guarantee import (CERTIFY_HEADINGS, CERTIFY_STEP_M, R_EFF_MIN_M, + CoverageCertificate, CoveragePlan, + candidate_lattice, coverage_masks, forward_targets, + greedy_cover, omega_positions, plan_names, + square_49_plan, verify_full_disk, + verify_forward_half_disk, verify_plan, write_plan) + +ROOT = Path(__file__).resolve().parents[1] +DEFAULT_PLAN_DIR = ROOT / "src/mcm26b/guarantee/plans" + + +def _report(points, kind: str, step_m: float, headings: int, + r_eff: float = R_EFF_MIN_M, + heading_margin_deg: float = 0.0) -> dict: + """按覆盖语义校核点集,返回证书字典。""" + if kind == "forward_half_disk": + certificate = verify_forward_half_disk(points, step_m, headings, + r_eff=r_eff, + heading_margin_deg=heading_margin_deg) + else: + certificate = verify_full_disk(points, step_m, r_eff) + return certificate.as_dict() + + +def prune_redundant(masks: list[int], chosen: list[int]) -> list[int]: + """贪心结果冗余剪枝:删掉任何"其余点已完全覆盖其目标"的点。""" + full = 0 + for index in chosen: + full |= masks[index] + pruned = list(chosen) + changed = True + while changed: + changed = False + for index in list(pruned): + rest = 0 + for other in pruned: + if other != index: + rest |= masks[other] + if rest == full: + pruned.remove(index) + changed = True + return pruned + + +def fine_prune(points, step_m: float, headings: int, r_eff: float, + heading_margin_deg: float): + """证书分辨率上的冗余剪枝:删掉任何点后校核仍 0 缺口才真删。 + + 粗网格(搜索用)上的冗余判据偏保守,会在证书分辨率下留下可删的点; + 本步每个候选删除都用**证书同一口径**复核,因此不削弱证书。 + """ + points = list(points) + improved = True + while improved: + improved = False + for index in range(len(points)): + trial = points[:index] + points[index + 1:] + certificate = verify_forward_half_disk( + trial, step_m, headings, r_eff=r_eff, + heading_margin_deg=heading_margin_deg) + if certificate.uncovered == 0: + points = trial + improved = True + print(f" 精细剪枝:删点后仍 0 缺口,剩 {len(points)} 点", flush=True) + break + return points + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument("--spacing", type=float, default=200.0, + help="贪心候选点网格间距(米)") + parser.add_argument("--radius", type=float, default=2850.0, + help="候选点所在圆盘半径(米)") + parser.add_argument("--target-step", type=float, default=CERTIFY_STEP_M, + help="搜索用采样位置步长(米)") + parser.add_argument("--headings", type=int, default=CERTIFY_HEADINGS, + help="搜索用采样朝向档数") + parser.add_argument("--verify-step", type=float, default=None, + help="证书校核位置步长(默认等于 --target-step)") + parser.add_argument("--verify-headings", type=int, default=None, + help="证书校核朝向档数(默认等于 --headings)") + parser.add_argument("--design-radius", type=float, default=None, + help="搜索时的设计距离(默认 1000;<1000 即留裕量)") + parser.add_argument("--heading-margin", type=float, default=0.0, + help="搜索时的前向角裕量(度)") + parser.add_argument("--verify-radius", type=float, default=None, + help="证书校核距离(默认 1000;<1000 即留裕量)") + parser.add_argument("--verify-heading-margin", type=float, default=0.0, + help="证书校核前向角裕量(度);应 ≥ 180/verify_headings/2") + parser.add_argument("--no-prune", action="store_true", help="关闭冗余剪枝") + parser.add_argument("--fine-prune", action="store_true", + help="在证书分辨率上再做一轮冗余剪枝(删点后仍 0 缺口才删)") + parser.add_argument("--coverage", choices=("forward_half_disk", "full_disk"), + default="forward_half_disk", help="覆盖语义") + parser.add_argument("--check-json", type=Path, default=None, + help="只校核给定点集([[x,y],...] 或 {\"points\":[...]})") + parser.add_argument("--write-plan", default=None, + help="把贪心最小集写成覆盖计划(名称,落 src/mcm26b/guarantee/plans/)") + parser.add_argument("--out", type=Path, default=None, help="证书 JSON 输出路径") + args = parser.parse_args() + + verify_step = (args.verify_step if args.verify_step is not None + else args.target_step) + verify_headings = (args.verify_headings if args.verify_headings is not None + else args.headings) + design_radius = (args.design_radius if args.design_radius is not None + else R_EFF_MIN_M) + verify_radius = (args.verify_radius if args.verify_radius is not None + else R_EFF_MIN_M) + + if args.check_json is not None: + payload = json.loads(args.check_json.read_text(encoding="utf-8")) + raw = payload.get("points") if isinstance(payload, dict) else payload + points = [tuple(map(float, p)) for p in raw] + report = _report(points, args.coverage, verify_step, verify_headings, + verify_radius, args.verify_heading_margin) + print(json.dumps(report, ensure_ascii=False, indent=2)) + return 0 if report["uncovered"] == 0 else 1 + + shipped = square_49_plan() + shipped_report = _report(shipped.points, "forward_half_disk", + verify_step, verify_headings, + verify_radius, args.verify_heading_margin) + print(f"目标空间:{shipped_report['targets']} 个 (p,h)" + f"(校核位置步长 {verify_step} m,朝向 {verify_headings} 档," + f"r_verify={verify_radius:.0f} m,角裕量 " + f"{args.verify_heading_margin}°)") + print(f"现役 {shipped.name}:{len(shipped.points)} 点," + f"缺口 {shipped_report['uncovered']}," + f"NN 巡回 {shipped_report['nn_tour_m'] / 1000:.1f} km" + f"({shipped_report['nn_tour_virtual_s']:.0f} s 移动)", flush=True) + + targets = forward_targets(args.target_step, args.headings) + candidates = candidate_lattice(args.spacing, args.radius) + print(f"候选点 {len(candidates)}({args.spacing} m 网格,半径 {args.radius} m);" + f"设计裕量 r_design={design_radius:.0f} m,前向角裕量 " + f"{args.heading_margin}°", flush=True) + masks = coverage_masks(targets, candidates, r_eff=design_radius, + heading_margin_deg=args.heading_margin) + chosen = greedy_cover(masks, len(targets)) + if not args.no_prune: + chosen = prune_redundant(masks, chosen) + best_points = [candidates[i] for i in chosen] + if args.fine_prune: + best_points = fine_prune(best_points, verify_step, verify_headings, + verify_radius, args.verify_heading_margin) + best_report = _report(best_points, "forward_half_disk", + verify_step, verify_headings, + verify_radius, args.verify_heading_margin) + print(f"设计裕量最小命中集:{len(best_points)} 点,缺口 {best_report['uncovered']}," + f"NN 巡回 {best_report['nn_tour_m'] / 1000:.1f} km" + f"({best_report['nn_tour_virtual_s']:.0f} s 移动)", flush=True) + + if best_report["uncovered"] != 0: + print("贪心结果未通过证书校核,拒绝生成计划。") + return 1 + + generator = {"script": "scripts/verify_q4_cover.py", + "spacing_m": args.spacing, "radius_m": args.radius, + "target_step_m": args.target_step, "headings": args.headings, + "design_r_eff_m": design_radius, + "heading_margin_deg": args.heading_margin, + "pruned": not args.no_prune, + "verify_step_m": verify_step, + "verify_headings": verify_headings, + "verify_r_eff_m": verify_radius, + "verify_heading_margin_deg": args.verify_heading_margin, + "code_sha256": hashlib.sha256( + Path(__file__).read_bytes()).hexdigest()} + certificate = CoverageCertificate( + kind=best_report["kind"], target_step_m=verify_step, + headings=verify_headings, r_eff_min_m=verify_radius, + targets=best_report["targets"], uncovered=best_report["uncovered"], + worst_hit_distance_m=best_report["worst_hit_distance_m"], + nn_tour_m=best_report["nn_tour_m"], + generator_sha256=generator["code_sha256"], + verify_heading_margin_deg=args.verify_heading_margin) + plan = CoveragePlan( + name=args.write_plan or "q4_mincover_draft", problem=4, + kind="certified", coverage="forward_half_disk", + note=(f"设计裕量最小命中集:{len(best_points)} 点," + f"r_design={design_radius:.0f} m / 前向角裕量 {args.heading_margin}°;" + f"证书按 {verify_step:.0f} m/{verify_headings} 档、r_verify=" + f"{verify_radius:.0f} m、角裕量 {args.verify_heading_margin}° " + f"校核缺口 0(同一证书口径复核,含精细剪枝);最坏命中 " + f"{best_report['worst_hit_distance_m']:.0f} m," + f"NN 巡回 {best_report['nn_tour_m'] / 1000:.1f} km"), + generator=generator, certificate=certificate, + points=tuple(best_points)) + payload = {"model": {"r_omega_m": 1800.0, "r_eff_min_m": 1000.0}, + "design": {"r_design_m": design_radius, + "heading_margin_deg": args.heading_margin}, + "verify": {"r_eff_m": verify_radius, + "heading_margin_deg": args.verify_heading_margin, + "step_m": verify_step, "headings": verify_headings}, + "shipped": shipped_report, "mincover": best_report} + if args.out is not None: + out = args.out if args.out.is_absolute() else ROOT / args.out + out.parent.mkdir(parents=True, exist_ok=True) + out.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8") + print(f"证书已写入 {out}") + if args.write_plan: + target = DEFAULT_PLAN_DIR / f"{args.write_plan}.json" + write_plan(plan, target) + verified = verify_plan(plan) + print(f"计划已写入 {target};运行期分辨率复核缺口 {verified.uncovered}") + print("已注册计划:" + ",".join(plan_names())) + _ = (ProblemConfig(), omega_positions) # 保持公开入口可发现性 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/verify_rl_practice.py b/scripts/verify_rl_practice.py deleted file mode 100644 index f29895b..0000000 --- a/scripts/verify_rl_practice.py +++ /dev/null @@ -1,123 +0,0 @@ -"""Offline audit of official RL practice runs (Q3/Q4); never connects to simulator. - -Checks the copied official .result.json/.jlog, our session.jsonl and summary.json: -package sha256, enter/exit, accepted timestamps inside official window, unique -request ids, clear-success channel count == official jammer_count, summary -consistency, and virtual time recomputation with integer microsecond accumulation. -""" -from __future__ import annotations - -import argparse -import hashlib -import json -import math -from datetime import datetime -from pathlib import Path - - -def save_json(path: Path, value: dict) -> None: - path.write_text(json.dumps(value, ensure_ascii=False, indent=2, - allow_nan=False) + "\n", encoding="utf-8") - - -def audit(folder: Path) -> dict: - records = [json.loads(line) for line in - (folder / "session.jsonl").read_text(encoding="utf-8").splitlines()] - events = [e for e in records if e.get("event") == "accepted"] - summary = json.loads((folder / "summary.json").read_text(encoding="utf-8")) - official_paths = list(folder.glob("*.result.json")) - if len(official_paths) != 1 or not events: - raise ValueError("Expected one official result and nonempty session evidence") - official = json.loads(official_paths[0].read_text(encoding="utf-8")) - package = official_paths[0].with_name( - official_paths[0].name.replace(".result.json", ".jlog")) - checks: dict = {} - - checks["official_problem_matches_summary"] = ( - official["problem_no"] in (3, 4) - and summary["strategy"] == ("rl" if official["problem_no"] == 3 else "rl_q4") - and 10 <= official["jammer_count"] <= 16 - and official["omnidirectional_jammer_count"] + official["directional_jammer_count"] - == official["jammer_count"]) - checks["official_package_sha256_matches"] = ( - hashlib.sha256(package.read_bytes()).hexdigest() == official["package_sha256"]) - checks["normal_enter_and_exit"] = ( - events[0]["path"] == "/enter" and events[-1]["path"] == "/exit" - and events[-1]["response"].get("exit_reason") == "user_exit") - start_ms = datetime.fromisoformat(official["window_started_at_utc"]).timestamp() * 1000 - end_ms = datetime.fromisoformat(official["ended_at_utc"]).timestamp() * 1000 - checks["responses_within_official_run_window"] = all( - start_ms <= e["response"]["real_timestamp_ms"] <= end_ms + 1 for e in events) - ids = [e["request"]["request_id"] for e in events] - checks["unique_accepted_request_ids"] = len(ids) == len(set(ids)) - clears = [e for e in events if e["path"] == "/clear"] - successes = [e for e in clears if e["response"].get("clear_result") == "success"] - cleared = sorted({e["request"]["channel"] for e in successes}) - checks["all_official_sources_cleared"] = len(cleared) == official["jammer_count"] - checks["summary_completed_and_consistent"] = ( - bool(summary["completed"]) - and sorted(summary["cleared_channels"]) == cleared - and summary["unresolved_channels"] == [] - and summary["anomalies"] == []) - - position, channel, virtual_us = (0.0, 0.0), 1, 0 - mismatches = 0 - for event in events: - request, response, path = event["request"], event["response"], event["path"] - distance, switches, action_s = 0.0, 0, 0 - if path in ("/measure", "/clear"): - target = (request["position"]["x"], request["position"]["y"]) - distance = math.dist(position, target) - position = target - if path == "/measure": - switches = int(channel != request["channel"]) - channel = request["channel"] - action_s = 5 - else: - action_s = 5 if response["clear_result"] == "success" else 3 - virtual_us += round(distance / 5 * 1_000_000) + (switches + action_s) * 1_000_000 - if round(response["virtual_time_s"] * 1_000_000) != virtual_us: - mismatches += 1 - checks["all_timestamps_match_microsecond_recomputation"] = mismatches == 0 - real_s = (events[-1]["response"]["real_timestamp_ms"] - - events[0]["response"]["real_timestamp_ms"]) / 1000 - checks["within_real_and_virtual_limits"] = ( - real_s < events[0]["response"]["remaining_real_duration_s"] - and virtual_us / 1_000_000 < events[0]["response"]["max_virtual_duration_s"]) - - report = { - "passed": all(checks.values()), - "source": "official_practice", - "strategy": summary["strategy"], - "problem": official["problem_no"], - "case_code": official["case_code"], - "official_jammer_count": official["jammer_count"], - "directional_jammer_count": official["directional_jammer_count"], - "cleared_channels": cleared, - "accepted_requests_including_enter_exit": len(events), - "measures": len([e for e in events if e["path"] == "/measure"]), - "clear_attempts": len(clears), - "clear_successes": len(successes), - "virtual_time_s": virtual_us / 1_000_000, - "real_elapsed_server_s": real_s, - "checks": checks, - "limits": "仅验证本官方演练案例;不触碰正式测试,不解读官方加密日志内容。", - } - save_json(folder / "verification.json", report) - manifest = {p.name: {"bytes": p.stat().st_size, - "sha256": hashlib.sha256(p.read_bytes()).hexdigest()} - for p in sorted(folder.iterdir()) if p.is_file() - and p.name != "manifest.json"} - save_json(folder / "manifest.json", manifest) - return report - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument("folder", type=Path) - args = parser.parse_args() - result = audit(args.folder) - print(json.dumps({"passed": result["passed"], "case_code": result["case_code"], - "problem": result["problem"], "checks": result["checks"]}, - ensure_ascii=False, indent=2)) - raise SystemExit(0 if result["passed"] else 1) diff --git a/src/mcm26b/belief/joint.py b/src/mcm26b/belief/joint.py new file mode 100644 index 0000000..5e09b6f --- /dev/null +++ b/src/mcm26b/belief/joint.py @@ -0,0 +1,388 @@ +"""位置×朝向联合可行集(第四问定向源)。 + +现状问题(docs/第三四问架构优化与运行提速方案.md §1.3 F3):第四问的失败**全部** +来自定向源(评测机两局:全向 17/17 清除,定向仅 2/6)。原因不是覆盖不足,而是 +策略只知道"源可能在某个空间区域",不知道"它朝着哪边"——于是选点只能靠固定 +45° 阶梯试探,一旦试探失败就退化到 ≤400 格 20 m 盲清。 + +本模块把"看不看得见"变成可推理的量:为已在 Ω 上维护的网格幸存集 +(:class:`~mcm26b.particles.ChannelParticles`)附加每格 24 档朝向可行性掩码, +得到 (位置 × 朝向) 联合可行集。观测语义严格对齐评测机 +``referee.simulator._observe``: + +- 距离 > r_eff → no_signal;定向且源→读点方向与朝向夹角 > 90° → no_signal; +- 距离 ≤ 5 m → near(**仍需可见**:3 m 处背向的定向源同样返回 no_signal); +- 其余 → direction(读数 = 源→读点方位 + 有界误差)。 + +更新规则(全部保守,只删"必然不可能"的格/档): + +=============== ============================================ ================== +观测 位置 朝向 +=============== ============================================ ================== +``direction``@s 距离 ≤ 1500、角向 |gap| ≤ δ_eff + 格裕量 必须**可能**覆盖 s +``near``@s 距离 ≤ 5 必须**可能**覆盖 s +``no_signal``@s **不删**(可能是朝向遮挡或距离不足) 必须**确定不**覆盖 s + (仅当整格必在 r_eff_min 内才约束朝向) +=============== ============================================ ================== + +阈值全部取保守侧,并计入**格内角裕量** +``asin(margin / max(dist − margin, 1))``(格内任一点相对格心方位偏差上界): + +- "必须可能覆盖":``gap ≤ 90° + 半档 + 查表舍入 + 格内角裕量``(宁可保留); +- "必须确定不覆盖":先删去 ``gap ≤ 90° − 半档 − 查表舍入 − 格内角裕量`` 的档, + 只保留确定看不见 s 的档(同样宁可保留)。 + +因此真源 (位置, 朝向) 永不被删——这是网格幸存集真源保留定理的二维推广。 +(2026-09-12 修正:no_signal 分支原先误用"确定覆盖"掩码做交集,等价于把 +规则反向;keep=True 分支也漏计了格内角裕量。两处都会删掉真源朝向档, +现由 ``tests/test_joint_belief.py`` 的随机观测序列保留性测试固化。) + +用途: +1. ``prob_detect``:该点能看见该频道任一可行 (位置, 朝向) 的概率质量, + 用于**可见性选点**(取代固定阶梯)——只影响选点顺序,不承担安全责任; +2. ``expected_posterior_radius``:一次测量后的期望后验 MEC 半径(D1 值函数); +3. ``is_absent``:联合集空 ⟹ 该频道不存在源(严格,与覆盖证明同一条件); +4. 位置边际仍由凸证书负责 20 m 清除判定,本模块不改变任何证书口径。 +""" + +from __future__ import annotations + +import math + +from ..config import ProblemConfig, Vec2 +from ..particles import ChannelParticles, _branch_radius_array +from ..protocol.rules import DIRECTION, NEAR, NO_SIGNAL + +HEADING_BINS = 24 # 15° 一档 +_BIN_HALF_DEG = 180.0 / HEADING_BINS # 7.5° +_FULL_MASK = (1 << HEADING_BINS) - 1 +_GRID_DEG = 3.0 # 角度查表分辨率 +_GRID_N = int(round(360.0 / _GRID_DEG)) + +try: # numpy 仅作可选加速后端(与 particles 一致) + import numpy as _np + from ..particles import _np as _particles_np + if _particles_np is None: # MCM26B_NO_NUMPY 或缺失:强制纯 Python + _np = None +except Exception: # pragma: no cover - 环境无 numpy + _np = None + + +def heading_gap(a_deg: float, b_deg: float) -> float: + """两个朝向角的最小夹角(度)。""" + return abs((a_deg - b_deg + 180.0) % 360.0 - 180.0) + + +def _cover_mask(bearing_deg: float, half_deg: float) -> int: + """与该方位夹角不超过 ``half_deg`` 的朝向档掩码。""" + mask = 0 + for k in range(HEADING_BINS): + if heading_gap(360.0 * k / HEADING_BINS, bearing_deg) <= half_deg: + mask |= 1 << k + return mask + + +# 查表:以 bearing 为轴、半角 90° 的可见半平面。 +# - COVER:**可能**覆盖该方位(含半档与查表舍入的保守侧); +# - SILENT:**确定**覆盖该方位(内缩半档与舍入)——离散对照表,供审计与 +# 文档比对;实际裁剪走 _cover_mask / _far_mask,因为还必须逐格计入 +# "格内角裕量"(格心到格内任一点的方位偏差上界),无法预先制表。 +_COVER_TABLE = tuple( + _cover_mask(_GRID_DEG * i, 90.0 + _BIN_HALF_DEG + _GRID_DEG / 2) + for i in range(_GRID_N)) +_SILENT_TABLE = tuple( + _cover_mask(_GRID_DEG * i, 90.0 - _BIN_HALF_DEG - _GRID_DEG / 2) + for i in range(_GRID_N)) + + +def _far_mask(bearing_deg: float, exclude_half_deg: float) -> int: + """与方位夹角**大于** ``exclude_half_deg`` 的朝向档掩码(no_signal 用)。 + + 与 :func:`_cover_mask` 互补:no_signal 只允许保留"确定看不见"的朝向档。 + """ + mask = 0 + for k in range(HEADING_BINS): + if heading_gap(360.0 * k / HEADING_BINS, bearing_deg) > exclude_half_deg: + mask |= 1 << k + return mask + +if _np is not None: # 12 位半字 popcount 查表(朝向掩码 24 位)与半平面查表数组 + _POP16 = _np.array([bin(value).count("1") for value in range(1 << 12)], + dtype=_np.int64) + _COVER_ARR = _np.array(_COVER_TABLE, dtype=_np.int64) +else: # pragma: no cover - 无 numpy 分支 + _POP16 = _COVER_ARR = None + + +def _popcount(mask: int) -> int: + return bin(mask).count("1") + + +def _table_index(bearing_deg: float) -> int: + return int(round((bearing_deg % 360.0) / _GRID_DEG)) % _GRID_N + + +class JointBelief: + """单频道 (位置 × 朝向) 联合可行集。""" + + def __init__(self, config: ProblemConfig = ProblemConfig()): + self.config = config + self.field = config.field + self.position = ChannelParticles(config) + self.masks: dict[int, int] = {} # 格索引 -> 朝向掩码(缺省为全档) + self._sample_cache: tuple[int, list[int]] | None = None + + # ------------------------------------------------------------ 查询 + def __len__(self) -> int: + return len(self.position) + + def is_absent(self) -> bool: + """联合集空 ⟹ 该频道不存在源(真源保留定理的二维推广)。""" + return not self.position.alive + + def _mask(self, index: int) -> int: + return self.masks.get(index, _FULL_MASK) + + def sample(self, size: int = 256) -> list[int]: + """均匀抽样幸存格(评分用;证书始终用完整集合)。""" + cached = self._sample_cache + if cached is not None and cached[0] == self.position.version: + return cached[1] + alive = sorted(self.position.alive) + if len(alive) > size: + step = len(alive) / size + alive = [alive[int(k * step) % len(alive)] for k in range(size)] + self._sample_cache = (self.position.version, alive) + return alive + + def _mask_popcount(self, index: int) -> int: + return _popcount(self._mask(index)) + + def expected_posterior_radius(self, reader: Vec2, size: int | None = None) -> float: + """一次测量后的期望后验 MEC 半径(米);D1 值函数。 + + 与 :meth:`ChannelParticles.expected_posterior_radius` 同族,差别只在 + no_signal 分支概率:定向源不仅会因距离 > r_eff 静默,还会因朝向遮挡 + 静默,因此 + + p_vis(p) = P(r_eff ≥ |p−q|) × cover_ratio(p, q) + + 其中 ``cover_ratio`` 是该格朝向掩码中"可能覆盖 q 方位"的档位占比。 + 分支半径语义: + + - direction(可见,非 near):读数为 q 处的方位 ±δ,后验收缩到该方位 + 楔形与当前可行集之交,半径取幸存子采样的质心最大距离; + - no_signal:定向源的静默**不删空间候选**,位置后验半径保持当前值; + - near:后验为 5m 盘。 + + 返回值只用于**选点排序**,不参与任何安全判定;证书仍由凸/网格口径给出。 + """ + pf = self.position + if not pf.alive: + return 0.0 + if size is None: + size = self.config.bayes.score_subsample + indices = self.sample(max(2, size)) + if not indices: + return 0.0 + stride = max(len(indices) // max(self.config.bayes.mc_representatives, 1), 1) + representatives = indices[::stride] + if _np is not None: + return self._epr_vector(reader, indices, representatives) + return self._epr_python(reader, indices, representatives) # pragma: no cover + + def _epr_vector(self, reader: Vec2, indices: list[int], + representatives: list[int]) -> float: + pf = self.position + points = _np.array([pf.cell_center(index) for index in indices], dtype=float) + masks = _np.array([self._mask(index) for index in indices], dtype=_np.int64) + reps = _np.array([pf.cell_center(index) for index in representatives], + dtype=float) + rep_masks = _np.array([self._mask(index) for index in representatives], + dtype=_np.int64) + dx, dy = points[:, 0] - reader[0], points[:, 1] - reader[1] + dist = _np.hypot(dx, dy) + bearing = _np.degrees(_np.arctan2(dy, dx)) + rdx, rdy = reps[:, 0] - reader[0], reps[:, 1] - reader[1] + rdist = _np.hypot(rdx, rdy) + rbearing = _np.degrees(_np.arctan2(rdy, rdx)) + cover = _COVER_ARR[_np.round(_np.mod(rbearing, 360.0) / _GRID_DEG) + .astype(_np.int64) % _GRID_N] + visible_mask = rep_masks & cover + bits = (_POP16[visible_mask & 0xFFF] + + _POP16[(visible_mask >> 12) & 0xFFF]) + cover_ratio = bits / float(HEADING_BINS) + p_silent_range = _np.clip((rdist - self.field.r_eff_min_m) + / (self.field.r_eff_max_m + - self.field.r_eff_min_m), 0.0, 1.0) + p_vis = (1.0 - p_silent_range) * cover_ratio + p_ns = 1.0 - p_vis + gaps = _np.abs((bearing[None, :] - rbearing[:, None] + 180.0) % 360.0 - 180.0) + in_wedge = ((gaps <= self.config.field.bearing_error_half_deg + + self.config.search.bearing_rounding_margin_deg + 1e-9) + & (dist[None, :] <= self.field.r_eff_max_m + pf.margin_m)) + eps_radius = pf.spacing_m / 2.0 + radii = [] + for row in in_wedge: + member = points[row] + radii.append(_branch_radius_array(member) + if len(member) else eps_radius) + radii = _np.array(radii, dtype=float) + current = pf.mec()[1] + near = rdist <= self.field.near_radius_m + pf.margin_m + values = _np.where(near, self.field.near_radius_m + pf.margin_m, + p_ns * current + p_vis * radii) + return float(values.mean()) + + def _epr_python(self, reader: Vec2, indices: list[int], + representatives: list[int]) -> float: # pragma: no cover + """纯 Python 回退(与向量版逐分支同语义,供无 numpy 环境与对拍)。""" + pf = self.position + points = [pf.cell_center(index) for index in indices] + masks = [self._mask(index) for index in indices] + eps_radius = pf.spacing_m / 2.0 + current = pf.mec()[1] + half_angle = (self.config.field.bearing_error_half_deg + + self.config.search.bearing_rounding_margin_deg) + total = 0.0 + for rep_index in representatives: + rx, ry = pf.cell_center(rep_index) + distance = math.hypot(rx - reader[0], ry - reader[1]) + if distance <= self.field.near_radius_m + pf.margin_m: + total += self.field.near_radius_m + pf.margin_m + continue + reading = math.degrees(math.atan2(ry - reader[1], rx - reader[0])) + cover = _COVER_TABLE[_table_index(reading)] + bits = _popcount(self._mask(rep_index) & cover) + ratio = bits / float(HEADING_BINS) + if distance <= self.field.r_eff_min_m: + p_range = 1.0 + elif distance >= self.field.r_eff_max_m: + p_range = 0.0 + else: + p_range = ((self.field.r_eff_max_m - distance) + / (self.field.r_eff_max_m - self.field.r_eff_min_m)) + p_vis = p_range * ratio + members = [] + for point, mask in zip(points, masks): + if math.dist(point, reader) > self.field.r_eff_max_m + pf.margin_m: + continue + bearing = math.degrees(math.atan2(point[1] - reader[1], + point[0] - reader[0])) + if heading_gap(bearing, reading) <= half_angle + 1e-9: + members.append(point) + if members: + mx = sum(p[0] for p in members) / len(members) + my = sum(p[1] for p in members) / len(members) + radius = max(math.hypot(p[0] - mx, p[1] - my) for p in members) + else: + radius = eps_radius + total += (1.0 - p_vis) * current + p_vis * radius + return total / max(len(representatives), 1) + + + def prob_detect(self, reader: Vec2, size: int = 256) -> float: + """在 ``reader`` 处能看见任一可行 (位置, 朝向) 的概率质量(启发式)。 + + r_eff ~ U[1000, 1500] 解析积分;朝向按可行档位占比计权。 + 只用于选点排序,不参与任何安全判定。 + """ + cells = self.sample(size) + if not cells: + return 0.0 + total = 0.0 + span = self.field.r_eff_max_m - self.field.r_eff_min_m + for index in cells: + gx, gy = self.position.cell_center(index) + distance = math.hypot(reader[0] - gx, reader[1] - gy) + if distance > self.field.r_eff_max_m: + continue + if distance <= self.field.r_eff_min_m: + p_range = 1.0 + else: + p_range = (self.field.r_eff_max_m - distance) / span + if p_range <= 0.0: + continue + bearing = math.degrees(math.atan2(reader[1] - gy, reader[0] - gx)) + cover = _COVER_TABLE[_table_index(bearing)] + bits = bin(self._mask(index) & cover).count("1") + if bits: + total += p_range * bits / HEADING_BINS + return total / len(cells) + + # ------------------------------------------------------------ 观测更新 + def _apply_heading(self, station: Vec2, keep: bool, + within_m: float | None = None) -> None: + """按可见性约束裁剪朝向档(保守:只删"必然不可能"的档)。 + + ``keep=True``(direction / near)⟹ 朝向必须**可能**覆盖 station: + 保留与方位夹角 ≤ 90° + 半档 + 查表舍入 + 格内角裕量的档。 + + ``keep=False``(no_signal 且整格必在 r_eff_min 内)⟹ 朝向必须 + **确定不覆盖** station:只保留与方位夹角 > 90° − 半档 − 查表舍入 + − 格内角裕量的档。 + + ``格内角裕量 = asin(margin / max(dist − margin, 1))``:格内任一点 + 相对格心的方位偏差上界。两个方向都必须计入它,否则会误删真源的 + 朝向档(keep=True 漏计)或保留必然可见的档(keep=False 漏计)。 + """ + margin_m = self.position.margin_m + doomed: list[int] = [] + for index in self.position.alive: + gx, gy = self.position.cell_center(index) + dx, dy = station[0] - gx, station[1] - gy + distance = math.hypot(dx, dy) + if within_m is not None and distance > within_m: + continue + bearing = math.degrees(math.atan2(dy, dx)) + if distance <= margin_m + 1.0: + # 格贴测点:格内方位可指向任意方向,任何一侧都不可据此裁剪 + continue + angular_margin = math.degrees( + math.asin(min(0.9999, margin_m / (distance - margin_m)))) + if keep: + updated = self._mask(index) & _cover_mask( + bearing, 90.0 + _BIN_HALF_DEG + _GRID_DEG / 2 + angular_margin) + else: + updated = self._mask(index) & _far_mask( + bearing, 90.0 - _BIN_HALF_DEG - _GRID_DEG / 2 - angular_margin) + if updated == 0: + doomed.append(index) + self.masks.pop(index, None) + elif updated != _FULL_MASK: + self.masks[index] = updated + if doomed: + self.position.discard(doomed) + + def apply(self, station: Vec2, result: str, + svd_deg: float | None = None) -> None: + """按读数更新联合可行集(保守,真源 (位置, 朝向) 永不被删)。""" + if result == DIRECTION: + self.position.apply_measure(station, DIRECTION, svd_deg, + directional=True) + self._apply_heading(station, keep=True) + elif result == NEAR: + # near 同样要求可见(评测机先判朝向再判距离) + self.position.apply_measure(station, NEAR, directional=True) + self._apply_heading(station, keep=True) + elif result == NO_SIGNAL: + # 距离阈值必须取**保守侧**:只有"整格都必然落在 r_eff_min 圆盘内" + # 时,no_signal 才一定由朝向遮挡解释。格心到格内任一点 ≤ margin, + # 故阈值取 r_eff_min − margin;取 + margin 会把 1000~1010m 的模糊带 + # 也当成"必须不覆盖",从而可能删掉真源的朝向档(破坏真源保留性)。 + self._apply_heading(station, keep=False, + within_m=max( + 0.0, self.field.r_eff_min_m + - self.position.margin_m)) + else: + raise ValueError(f"未知测向结果: {result!r}") + + # ------------------------------------------------------------ 诊断 + def summary(self) -> dict: + """联合集规模快照(写入策略 summary,供审计与论文复算)。""" + cells = self.sample(256) + bins = [bin(self._mask(index)).count("1") for index in cells] + return {"cells": len(self.position), + "sampled_mean_heading_bins": (round(sum(bins) / len(bins), 2) + if bins else 0.0), + "heading_bins_total": HEADING_BINS} diff --git a/src/mcm26b/cli.py b/src/mcm26b/cli.py index fab12d3..fb71207 100644 --- a/src/mcm26b/cli.py +++ b/src/mcm26b/cli.py @@ -30,7 +30,6 @@ from .protocol.log import SessionLog from .protocol.rules import EXIT_USER Q3_STRATEGIES = {"grid": OmnidirectionalLoop, "seven": SevenBatch, "bayes": BayesLoop} -Q4_STRATEGIES = {"directional": DirectionalExtension} def _load_referee(): @@ -207,6 +206,17 @@ def _run(args) -> int: search=replace(config.search, bearing_rounding_margin_deg=args.bearing_margin_deg, persistent_search=args.persistent)) + if args.persistent: + # 历史教训:一次官方演练在 persistent 复扫下把 98.84% 的虚拟时间 + # (346170 s)花在空复扫上。这里给出单轮上界,明确这是"扫到限时"模式。 + stations = 49 if args.problem == 4 else 7 + per_round = config.field.channel_max * stations * ( + config.cost.measure_s + config.cost.switch_s) + print(f"[警告] --persistent:找全后仍复扫未清除频道直到限时。" + f"单轮上界约 {per_round:.0f}s 虚拟时间" + f"({config.field.channel_max} 频道 × {stations} 站点 × " + f"{config.cost.measure_s + config.cost.switch_s:.0f}s)," + f"且会持续多轮;成绩口径请保持默认(关闭)。", file=sys.stderr) truth = None transport = None real_budget_s = None @@ -252,44 +262,13 @@ def _run(args) -> int: log = SessionLog(path=Path(args.log)) if args.log else SessionLog() client = SimulatorClient(args.robot_id, config=config, transport=transport, log=log) if args.problem == 4: - strategy = args.q4_strategy - loop_cls = Q4_STRATEGIES.get(strategy) + strategy = "directional" + loop_cls = DirectionalExtension else: strategy = args.strategy - loop_cls = Q3_STRATEGIES.get(strategy) - high_policy = None - low_policy = None + loop_cls = Q3_STRATEGIES[strategy] try: - if strategy == "rl": - # 惰性导入:默认运行闭环不加载 numpy/torch/stable-baselines3。 - from .planner.rl_loop import RLBayesLoop, RLDirectionalLoop - loop_cls = RLBayesLoop if args.problem == 3 else RLDirectionalLoop - elif strategy == "hrl": - # P1:高层 MaskablePPO 调度。缺少模型时显式报错,不降级伪装。 - if not args.hrl_model: - raise RuntimeError( - "--strategy hrl/--q4-strategy hrl 需要 --hrl-model;" - "无模型启发式请使用 benchmark_hrl.py 的 hrl_heuristic 变体。") - from .hrl.policy import HighLevelPolicy, LowLevelPolicy - from .planner.hrl_loop import HRLLoop - high_policy = HighLevelPolicy( - args.hrl_model, device=args.hrl_device, problem=args.problem) - if args.hrl_low_model: - low_policy = LowLevelPolicy(args.hrl_low_model, device=args.hrl_device) - loop_cls = HRLLoop - if loop_cls is None: - raise RuntimeError(f"未知策略: {strategy}") - if strategy == "rl": - summary = loop_cls(client, config, model_path=args.rl_model).run() - elif strategy == "hrl": - summary = loop_cls( - client, config, problem=args.problem, high_policy=high_policy, - low_policy=low_policy, trace_executor=args.trace_low).run() - else: - summary = loop_cls(client, config).run() - except RuntimeError as exc: - print(f"策略不可用: {exc}", file=sys.stderr) - return 2 + summary = loop_cls(client, config).run() finally: if judge is not None: _settle_local_judge(judge) @@ -301,10 +280,7 @@ def _run(args) -> int: def _finalize_run(args, summary, strategy, *, truth, judge, judge_session, real_budget_s) -> int: """补齐 summary 元信息、核对真值并输出;返回进程退出码。""" - if args.problem == 4: - summary["strategy"] = "rl_q4" if strategy == "rl" else strategy - else: - summary["strategy"] = strategy + summary["strategy"] = strategy if real_budget_s is not None: summary["self_test_real_budget_s"] = real_budget_s if args.summary_steps is not None and len(summary.get("steps", [])) > args.summary_steps: @@ -349,30 +325,10 @@ def main(argv=None) -> int: run.add_argument("--log", default=None, help="会话日志 JSONL 输出路径") run.add_argument("--problem", type=int, choices=(3, 4), default=3, help="问题3=全向源,问题4=混合定向源(默认 3)") - run.add_argument("--strategy", choices=tuple(Q3_STRATEGIES) + ("rl", "hrl"), - default="bayes", + run.add_argument("--strategy", choices=tuple(Q3_STRATEGIES), default="bayes", help="问题3策略:bayes=粒子滤波+信息增益+滚动调度(默认," "自建消融相对 seven 再降 19.5%%),seven=七点批量," - "grid=49点网格基线,rl=PPO 强化学习选点(需先训练模型)," - "hrl=高层 MaskablePPO 分层调度(需 --hrl-model);" - "仅 --problem 3 生效") - run.add_argument("--q4-strategy", choices=tuple(Q4_STRATEGIES) + ("rl", "hrl"), - default="directional", - help="问题4策略:directional=49点覆盖+遮挡梯子+后备清除(默认)," - "rl=PPO 强化学习选点(需先训练模型)," - "hrl=高层 MaskablePPO 分层调度(需 --hrl-model);仅 --problem 4 生效") - run.add_argument("--rl-model", default=None, - help="RL 模型路径(默认 output/rl/q3_ppo.zip 或 " - "output/rl/q4_ppo.zip;训练脚本 scripts/train_rl.py)") - run.add_argument("--hrl-model", default=None, - help="高层 HRL MaskablePPO 模型路径(--strategy hrl 时必填;" - "训练脚本 scripts/train_hrl_high.py)") - run.add_argument("--hrl-low-model", default=None, - help="可选低层 HRL 模型;当前只用于轨迹推演留痕,不改变协议终点") - run.add_argument("--hrl-device", choices=("auto", "cpu", "cuda", "mps"), - default="auto", help="HRL 模型推理设备") - run.add_argument("--trace-low", action="store_true", - help="开启低层到达推演留痕(本地虚拟轨迹,不增加协议耗时)") + "grid=49点网格基线;仅 --problem 3 生效") run.add_argument("--bearing-margin-deg", type=float, default=0.005, help="示向度舍入裕量(服务器保留两位小数;默认 0.005°)") run.add_argument("--real-budget-s", type=float, default=None, diff --git a/src/mcm26b/config.py b/src/mcm26b/config.py index 28b6a0f..c445367 100644 --- a/src/mcm26b/config.py +++ b/src/mcm26b/config.py @@ -91,6 +91,45 @@ class SearchConfig: max_blocked_probes: int = 4 # 定位单轮内被朝向遮挡的探点预算 # (首次选点+对跖复核+2 次环探;达限转后备清除) fallback_max_cells: int = 400 # 后备清除格数硬顶;超过则不盲扫(宽候选集继续定位) + # ---- 覆盖计划(保证层)[工程,2026-09-12 架构优化 P0-2 / S2 硬化] ---- + # 第四问发现点集: + # square49 旧的充分条件表(700m 方格,巡回 36.4km); + # q4_mincover_v1 75m/24 档贪心最小集(31 点,巡回 22.9km)——细网格复检 + # 在 25m/48 档有 125 个 (p,h) 缺口,是采样过拟合解; + # q4_mincover_v2 **设计裕量**最小集(31 点,r_design=965m、前向角裕量 5°, + # 搜索分辨率 50m/48 档 + 证书分辨率精细剪枝), + # 15m/72 档(325.6 万 (p,h))缺口 0,最坏命中 990m,巡回 23.9km。 + # 运行期按同一采样语义复核,未通过即拒绝启动。 + q4_coverage_plan: str = "q4_mincover_v2" + verify_coverage_plan: bool = True # 运行期抽样校验(进程内缓存一次) + # ---- 第四问定向源联合信念 [工程,2026-09-12 架构优化 P0-3] ---- + # 为已发现的定向频道维护 (位置 × 朝向) 联合可行集:用可见性概率选点, + # 取代固定 45° 阶梯探点;联合集空即给出缺席证明。安全性仍由凸/网格 + # 清除证书与覆盖证明负责,本开关只影响选点顺序。 + directional_joint_belief: bool = True + # ---- 第四问定向源探点值函数 [工程,2026-09-12 图论与 DP 方案 S3/D1] ---- + # 旧评分 ``prob_detect/(移动+6)`` 只问"这点看不看得见源",不问"测完剩多少 + # 不确定度",会反复选中同一个近处被遮挡点。D1 口径:先按可见概率过滤 + # (只保留 prob_detect ≥ ratio×最大值的候选),再最小化 + # E[后验 MEC 半径](q) + λ·(当前位置→q→MEC 圆心 的移动秒数 + 检测) + # 9 场景 core 配对(修正联合信念朝向规则之后): + # λ=0.05:后备 6.8 次 / T 9740 s(值函数主导,为信息多绕路) + # λ=5 :后备 4.3 次 / T 8604 s(移动项主导,可见性过滤 + 就近抵近) + # 仅移动项(nearest_visible):后备 4.3 次 / T 8602 s,墙钟最低 + # 相对旧 visibility 口径(后备 125.6 次、T 9225 s)三者都更好,且 λ 越大 + # 越优说明本题"看得见 + 少走路"比"信息量最大"更重要,故默认取极限口径。 + probe_score_mode: str = "nearest_visible" # visibility | expected_radius | nearest_visible + probe_lambda_move_s: float = 5.0 # expected_radius 口径下的移动折算 + # 可见概率过滤:只保留 prob_detect ≥ ratio×最大值的候选再比期望半径, + # 避免"期望上有点信息、实际必被朝向遮挡"的探点。 + probe_visibility_ratio: float = 0.7 + probe_exclude_blocked: bool = True # 已测过且被遮挡的探点不再重复选取 + approach_fractions: tuple = () # D1 抵近点插值比例(0=圆心);默认关闭 + # ---- 后备清除路径优化 [工程,2026-09-12 S4/D3] ---- + # 实测反例:后备清除在命中真源时立即结束,"整条走格路径最短"并不是正确 + # 目标——Or-opt 会把真源推到序列更后面。9 场景配对:最近邻 125.7 次失败 + # vs Or-opt 161.4 次(T 8676 → 8940 s)。默认关闭,保留代码与开关。 + fallback_optimize_tour: bool = False # ---- 持续搜索 [工程,2026-09-11 用户决策修订] ---- # 虚拟时间即评测成绩口径(表1:平均定位清除时间):找全证明达成后 # 立即 /exit,不复扫。复扫保险模式(防缺席证明假设偏差)保留,经 @@ -119,18 +158,45 @@ class BayesConfig: # radius=期望后验半径(直指证书) score_subsample: int = 800 # 期望幸存熵估计的粒子子采样规模 mc_representatives: int = 7 # 假设真值代表点数(均匀抽取幸存格) - lambda_move_s: float = 0.0105 # 选点评分中移动时间的折算系数(分值/秒); - # entropy 口径下信息项为 O(1) 对数值,λ须极小 + lambda_move_s: float = 0.05 # 选点评分中移动时间的折算系数(分值/秒); + # 2026-09-12 配对复跑:0.05 优于 0.0105(20 场均值 −2.8%), + # entropy 口径下信息项为 O(1) 对数值,λ须小型但不可过小 + # ---- 路线感知探点 [工程,2026-09-12 P2] ---- + # 旧评分只看 current->q + q->MEC,容易选到“信息增益略高但要多绕几百米” + # 的探点。开启后,在候选评分中加入 q 替换当前位置后对当前任务路线代价 + # 的增量;A/B 以冻结基准集配对验收。 + # 2026-09-12 冻结基准集复跑(18 场景):关闭 3193.1 s vs 开启 3210.3 s, + # 移动 12339.8 m vs 12446.8 m —— 权重 1e-3 的路线项未带来净收益,默认关闭。 + route_aware_probe: bool = False + route_aware_insert_weight: float = 0.001 # 路线代价增量的折算系数(小权重,仅微调) + route_aware_clear_weight: float = 0.0 # 额外 q->MEC 清除接近项(基础移动项已含) wide_rings: tuple = (1.0, 1.5, 2.0) # 无保证接收盘时的探索环(× PF MEC 半径) # ---- 站点与覆盖 [工程] ---- station_ring_radius_m: float = 1159.7 # 七点环半径;构造时检验全向覆盖解析上界 + # ---- 发现-定位融合巡回 [工程,2026-09-12 P0-1,实测无效,默认关闭] ---- + # 设想:站点扫频顺带取第二/第三条方位线,取代专用探点。 + # 实测(output/suite/q3-fuse-ab*,20 场景配对,2026-09-12): + # 仅追加站点方位线:3454.6s vs 3426.9s(+0.8%,检测 +10.8 次,位移仅 −188m); + # 追加 + 抑制专用探点:4989.0s vs 3426.9s(+45.6%,20/20 场景更慢)。 + # 原因:七站环上只有 2–3 个站能对同一源取得有效方位线,且站间交会角 + # 不足以保证 20m 证书,专用信息增益探点仍然必要;抑制探点只会白等巡回。 + # 代码保留以便复现与后续研究,成绩口径必须保持 False。 + fuse_localize_into_tour: bool = False # ---- 任务排序 [工程] ---- two_opt_enabled: bool = True # 开放路径 2-opt 改进(最近邻打底) two_opt_passes: int = 4 # 2-opt 最大改进轮数 + # ---- 精确任务序(Held-Karp,含换频状态)[工程,2026-09-12 S5/T1] ---- + # 任务表典型 6–12 项:|T| ≤ exact_order_limit 时用精确 DP(状态=已访问集合 + # × 结束时测向频道),换频代价精确计入;否则回退 NN + 2-opt。0 表示禁用。 + # 实测(18 场景):精确 DP 3203.2 s vs 2-opt 3193.1 s —— 逐位最优的"当前 + # 任务表"在滚动时域下反而略差(贪心排序的次优性起到探索作用),默认 0; + # 代码与对拍测试保留,可随时开启复核。 + exact_order_limit: int = 0 # ---- PF 清除证书 [工程] ---- grid_cert_enabled: bool = True # 允许用幸存集 MEC 颁发清除证书(凸证书之外) opportunistic_measure: bool = True # 已停靠位置顺路交会;仍逐频道计费 - opportunistic_radius_ratio: float = 0.65 # 预测后验半径至少减少35%才补测 + # 预测后验半径至少减少 (1−ratio) 才补测;0.5 优于 0.65(18 场景 3205.4 vs 3210.3 s) + opportunistic_radius_ratio: float = 0.5 @dataclass(frozen=True) diff --git a/src/mcm26b/guarantee/__init__.py b/src/mcm26b/guarantee/__init__.py new file mode 100644 index 0000000..a81a843 --- /dev/null +++ b/src/mcm26b/guarantee/__init__.py @@ -0,0 +1,23 @@ +"""保证层:覆盖计划(CoveragePlan)、证书与运行期校验。 + +对外只暴露覆盖计划与校验入口;`coverage` 包仍负责逐频道覆盖账本。 +""" + +from .cover import (CERTIFY_HEADINGS, CERTIFY_STEP_M, OMEGA_RADIUS_M, + R_EFF_MIN_M, CoverageCertificate, + CoveragePlan, PLAN_DIR, VERIFY_HEADINGS, VERIFY_STEP_M, + candidate_lattice, coverage_masks, forward_targets, + greedy_cover, load_plan, nn_tour_length, omega_positions, + plan_instance, plan_names, seven_plan, seven_points, + square_49_plan, verify_full_disk, verify_forward_half_disk, + verify_plan, write_plan) + +__all__ = [ + "CERTIFY_HEADINGS", "CERTIFY_STEP_M", "OMEGA_RADIUS_M", "R_EFF_MIN_M", + "CoverageCertificate", "CoveragePlan", + "PLAN_DIR", "VERIFY_HEADINGS", "VERIFY_STEP_M", "candidate_lattice", + "coverage_masks", "forward_targets", "greedy_cover", "load_plan", + "nn_tour_length", "omega_positions", "plan_instance", "plan_names", + "seven_plan", "seven_points", "square_49_plan", "verify_full_disk", + "verify_forward_half_disk", "verify_plan", "write_plan", +] diff --git a/src/mcm26b/guarantee/cover.py b/src/mcm26b/guarantee/cover.py new file mode 100644 index 0000000..d37756c --- /dev/null +++ b/src/mcm26b/guarantee/cover.py @@ -0,0 +1,428 @@ +"""保证层:可离线搜索、可在运行期校验的覆盖计划(CoveragePlan)。 + +两类覆盖语义(题面约束不同,绝不可混用): + +- ``full_disk``(第三问,全向源):在 s 处 no_signal 排除 B(s, r_eff_min), + 因此"全点皆 no_signal ⟹ 不存在源"要求 + ``∪ B(c, 1000) ⊇ Ω``。解析最优解是"原点 + 半径 r 的 6 等分环", + ``r`` 的可行区间由 ``validate_seven_coverage`` 给出(本模块提供数值复核)。 +- ``forward_half_disk``(第四问,定向源):源可能背向读点,no_signal 不再 + 排除整个圆盘,缺席证明要求 + ``∀(p,h) ∈ Ω×S¹, ∃c ∈ S: |c−p| ≤ 1000 ∧ (c−p)·u(h) ≥ 0``。 + 现役 700 m 方格 49 点是充分条件(单元对角 ≤ 1000),但远非必要; + 本模块用贪心击中集把点数压到 31,并在同一采样空间上校核。 + +设计原则(docs/第三四问架构优化与运行提速方案.md §2.3): +**保证 = 离线搜索 + 运行期校验**。点表以 JSON 落盘并携带证书(采样分辨率、 +缺口数、最坏命中距离、生成参数哈希),运行期用同一套采样语义重新校核, +未通过即拒绝启动。证书只能用于选点优化,不改变任何安全性证明。 +""" + +from __future__ import annotations + +import hashlib +import json +import math +from dataclasses import dataclass, field, fields +from functools import lru_cache +from pathlib import Path + +from ..config import Vec2 + +PLAN_DIR = Path(__file__).resolve().parent / "plans" +R_EFF_MIN_M = 1000.0 # [题面] 最小有效接收半径 +OMEGA_RADIUS_M = 1800.0 # [题面] 目标圆域半径 +SPEED_MPS = 5.0 # [题面] 用于把巡回长度折算成虚拟移动秒数 + +# 采样分辨率。**校核必须与证书同分辨率**:更粗的采样会放过"删掉一个关键点 +# 仍然看似覆盖"的点集,使校核退化为装饰(实测 100 m/12 档即漏判)。 +# 75 m / 24 档下一次全域校核约 1 s,且按计划名缓存,每进程只付一次。 +CERTIFY_STEP_M = 75.0 +CERTIFY_HEADINGS = 24 +VERIFY_STEP_M = CERTIFY_STEP_M +VERIFY_HEADINGS = CERTIFY_HEADINGS + + +@dataclass(frozen=True) +class CoverageCertificate: + """覆盖证书:采样语义 + 缺口 + 最坏命中距离。""" + + kind: str # "full_disk" | "forward_half_disk" + target_step_m: float + headings: int + r_eff_min_m: float + targets: int + uncovered: int + worst_hit_distance_m: float + nn_tour_m: float + generator_sha256: str = "" + # 证书硬化:校核时使用的前向角裕量(度)。与 r_eff_min_m 的设计裕量 + # 一起把"采样格覆盖"提升为"连续空间覆盖",见 verify_forward_half_disk。 + verify_heading_margin_deg: float = 0.0 + + @property + def valid(self) -> bool: + return self.uncovered == 0 and self.targets > 0 + + def as_dict(self) -> dict: + return {"kind": self.kind, "target_step_m": self.target_step_m, + "headings": self.headings, "r_eff_min_m": self.r_eff_min_m, + "targets": self.targets, "uncovered": self.uncovered, + "worst_hit_distance_m": round(self.worst_hit_distance_m, 3), + "nn_tour_m": round(self.nn_tour_m, 1), + "nn_tour_virtual_s": round(self.nn_tour_m / SPEED_MPS, 1), + "generator_sha256": self.generator_sha256, + "verify_heading_margin_deg": self.verify_heading_margin_deg} + + +@dataclass(frozen=True) +class CoveragePlan: + """一份覆盖计划:点集 + 语义 + 证书(可为解析证明)。""" + + name: str + problem: int + points: tuple[Vec2, ...] + kind: str # "analytic" | "certified" + coverage: str # "full_disk" | "forward_half_disk" + note: str = "" + certificate: CoverageCertificate | None = None + generator: dict = field(default_factory=dict) + + def __len__(self) -> int: + return len(self.points) + + def as_dict(self) -> dict: + return {"name": self.name, "problem": self.problem, "kind": self.kind, + "coverage": self.coverage, "note": self.note, + "generator": self.generator, + "certificate": (self.certificate.as_dict() + if self.certificate is not None else None), + "points": [[p[0], p[1]] for p in self.points]} + + +# --------------------------------------------------------------------- 采样 +def omega_positions(step_m: float) -> list[Vec2]: + """Ω 内均匀方格位置采样。""" + span = int(OMEGA_RADIUS_M / step_m) + 1 + return [(step_m * i, step_m * j) + for i in range(-span, span + 1) for j in range(-span, span + 1) + if (step_m * i) ** 2 + (step_m * j) ** 2 <= OMEGA_RADIUS_M ** 2] + + +def forward_targets(step_m: float, headings: int) -> list[tuple[float, float, float]]: + """(p, h) 目标采样:位置在 Ω 内,朝向均分整圆。""" + return [(x, y, 2.0 * math.pi * k / headings) + for (x, y) in omega_positions(step_m) for k in range(headings)] + + +def candidate_lattice(spacing_m: float, radius_m: float) -> list[Vec2]: + """半径 radius_m 圆盘内的方格候选点(离线搜索用)。""" + span = int(radius_m / spacing_m) + 1 + return [(spacing_m * i, spacing_m * j) + for i in range(-span, span + 1) for j in range(-span, span + 1) + if (spacing_m * i) ** 2 + (spacing_m * j) ** 2 <= radius_m ** 2] + + +def _bucket(points: list[Vec2], cell: float) -> dict[tuple[int, int], list[int]]: + table: dict[tuple[int, int], list[int]] = {} + for index, (x, y) in enumerate(points): + table.setdefault((int(x // cell), int(y // cell)), []).append(index) + return table + + +def coverage_masks(targets, candidates: list[Vec2], + r_eff: float = R_EFF_MIN_M, + heading_margin_deg: float = 0.0) -> list[int]: + """每个候选点覆盖的目标位掩码(Python 大整数,按位)。 + + 只在与候选点空间桶相邻的格内做距离/前向判定,避免 |T|·|C| 笛卡尔积。 + + ``r_eff`` / ``heading_margin_deg`` 是**设计裕量**:离线搜索时把"命中" + 定义得比物理要求更严(距离 ≤ r_eff、前向夹角 ≤ 90°−margin),使采样格 + 上的覆盖自动蕴含相邻未采样 (p,h) 也被覆盖(S2 证书硬化)。 + """ + table = _bucket(candidates, r_eff) + masks = [0] * len(candidates) + sin_margin = math.sin(math.radians(max(heading_margin_deg, 0.0))) + for t_index, (px, py, heading) in enumerate(targets): + ux, uy = math.cos(heading), math.sin(heading) + ci, cj = int(px // r_eff), int(py // r_eff) + bit = 1 << t_index + for di in (-1, 0, 1): + for dj in (-1, 0, 1): + for c_index in table.get((ci + di, cj + dj), ()): + cx, cy = candidates[c_index] + dx, dy = cx - px, cy - py + distance_sq = dx * dx + dy * dy + if distance_sq > r_eff * r_eff: + continue + if dx * ux + dy * uy < sin_margin * math.sqrt(distance_sq) - 1e-9: + continue + masks[c_index] |= bit + return masks + + +def greedy_cover(masks: list[int], n_targets: int) -> list[int]: + """贪心集合覆盖:每次取"新增覆盖目标数"最大的候选,返回索引表。""" + full = (1 << n_targets) - 1 + covered = 0 + chosen: list[int] = [] + remaining = list(range(len(masks))) + while covered != full and remaining: + best_index, best_gain = -1, 0 + for c_index in remaining: + gain = (masks[c_index] & ~covered).bit_count() + if gain > best_gain: + best_index, best_gain = c_index, gain + if best_index < 0: + break + chosen.append(best_index) + covered |= masks[best_index] + remaining.remove(best_index) + return chosen + + +def nn_tour_length(points: list[Vec2], start: Vec2 = (0.0, 0.0)) -> float: + """最近邻开放路径长度(巡回长度上界)。""" + remaining = list(points) + position = start + total = 0.0 + while remaining: + nxt = min(remaining, key=lambda q: (q[0] - position[0]) ** 2 + + (q[1] - position[1]) ** 2) + remaining.remove(nxt) + total += math.dist(position, nxt) + position = nxt + return total + + +# --------------------------------------------------------------------- 校验 +def _hit_distance(points: list[Vec2], position: Vec2, heading: float, + r_eff: float) -> float | None: + """最近的前向命中距离;没有任何前向命中点则返回 None。""" + ux, uy = math.cos(heading), math.sin(heading) + best = None + for (cx, cy) in points: + dx, dy = cx - position[0], cy - position[1] + if dx * dx + dy * dy > r_eff * r_eff: + continue + if dx * ux + dy * uy < -1e-9: + continue + distance = math.hypot(dx, dy) + if best is None or distance < best: + best = distance + return best + + +def _nearest_distance(points: list[Vec2], position: Vec2, + r_eff: float) -> float | None: + """最近距离(不要求前向);超过 r_eff 视作未命中。""" + best = None + for (cx, cy) in points: + distance = math.hypot(cx - position[0], cy - position[1]) + if distance <= r_eff and (best is None or distance < best): + best = distance + return best + + +def verify_forward_half_disk(points: list[Vec2], step_m: float = VERIFY_STEP_M, + headings: int = VERIFY_HEADINGS, + r_eff: float = R_EFF_MIN_M, + heading_margin_deg: float = 0.0) -> CoverageCertificate: + """第四问语义:∀(p,h) 存在前向半盘内的被访点。 + + ``heading_margin_deg`` 是**证书硬化**用的前向角裕量:把"命中"收紧为 + "前向夹角 ≤ 90° − margin"。与 ``r_eff`` 的设计裕量合用时,采样格上的 + 覆盖即可推出**连续空间**覆盖:真实 (p',h') 距采样格 ≤ step·√2/2、 + 方位差 ≤ 180/headings 度,只要 + + r_eff + step·√2/2 ≤ 1000 且 margin ≥ 180/headings/2 + + 就能保证 |c−p'| ≤ 1000 且 (c−p')·u(h') ≥ 0。这正是 S2 取代"粗采样 + 假通过"的方式。默认 0 表示按物理条件校核。 + """ + points = list(points) + targets = forward_targets(step_m, headings) + table = _bucket(points, r_eff) + missing, worst = 0, 0.0 + sin_margin = math.sin(math.radians(max(heading_margin_deg, 0.0))) + for (px, py, heading) in targets: + ux, uy = math.cos(heading), math.sin(heading) + ci, cj = int(px // r_eff), int(py // r_eff) + best = None + for di in (-1, 0, 1): + for dj in (-1, 0, 1): + for c_index in table.get((ci + di, cj + dj), ()): + cx, cy = points[c_index] + dx, dy = cx - px, cy - py + distance_sq = dx * dx + dy * dy + if distance_sq > r_eff * r_eff: + continue + if dx * ux + dy * uy < sin_margin * math.sqrt(distance_sq) - 1e-9: + continue + distance = math.sqrt(distance_sq) + if best is None or distance < best: + best = distance + if best is None: + missing += 1 + else: + worst = max(worst, best) + return CoverageCertificate("forward_half_disk", step_m, headings, r_eff, + len(targets), missing, worst, + nn_tour_length(points)) + + +def verify_full_disk(points: list[Vec2], step_m: float = VERIFY_STEP_M, + r_eff: float = R_EFF_MIN_M) -> CoverageCertificate: + """第三问语义:Ω 内每点都在某个被访点的 r_eff 圆盘内。""" + points = list(points) + positions = omega_positions(step_m) + table = _bucket(points, r_eff) + missing, worst = 0, 0.0 + for (px, py) in positions: + ci, cj = int(px // r_eff), int(py // r_eff) + best = None + for di in (-1, 0, 1): + for dj in (-1, 0, 1): + for c_index in table.get((ci + di, cj + dj), ()): + cx, cy = points[c_index] + distance = math.hypot(cx - px, cy - py) + if distance <= r_eff and (best is None or distance < best): + best = distance + if best is None: + missing += 1 + else: + worst = max(worst, best) + return CoverageCertificate("full_disk", step_m, 1, r_eff, len(positions), + missing, worst, nn_tour_length(points)) + + +def verify_plan(plan: CoveragePlan, step_m: float | None = None, + headings: int | None = None) -> CoverageCertificate: + """按计划声明的覆盖语义校核。 + + 默认使用**证书自带的采样分辨率**(离线 75 m / 24 档):更粗的运行期采样 + 会放过"删掉一个关键点仍看似覆盖"的点集,使校核失去意义。校核按计划名 + 缓存(``load_plan`` 的 lru_cache),每进程只付一次成本。 + """ + certificate = plan.certificate + if step_m is None: + step_m = certificate.target_step_m if certificate else VERIFY_STEP_M + if headings is None: + headings = (certificate.headings if certificate + else VERIFY_HEADINGS) + if plan.coverage == "forward_half_disk": + # 硬化证书:按证书自带的距离/角度设计裕量重新校核(旧证书默认 + # r_eff=1000、margin=0,与历史口径逐位一致)。 + return verify_forward_half_disk( + plan.points, step_m, headings, + r_eff=(certificate.r_eff_min_m if certificate else R_EFF_MIN_M), + heading_margin_deg=(certificate.verify_heading_margin_deg + if certificate else 0.0)) + return verify_full_disk(plan.points, step_m, certificate.r_eff_min_m + if certificate else R_EFF_MIN_M) + + +# --------------------------------------------------------------------- 计划 +def seven_points(ring_radius_m: float) -> list[Vec2]: + """解析七站:原点 + 环上 6 等分点。""" + return [(0.0, 0.0)] + [(ring_radius_m * math.cos(k * math.pi / 3), + ring_radius_m * math.sin(k * math.pi / 3)) + for k in range(6)] + + +def seven_plan(ring_radius_m: float) -> CoveragePlan: + """第三问解析计划(覆盖证明由 validate_seven_coverage 给出)。""" + return CoveragePlan( + name=f"seven-r{ring_radius_m:.1f}", problem=3, kind="analytic", + coverage="full_disk", + note=("解析证明 max(r/√3, sqrt(R²+r²−√3Rr)) < 1000;" + "r∈[1122.9, 1732] 时成立,巡检半径越小巡回越短"), + points=tuple(seven_points(ring_radius_m))) + + +def square_49_plan() -> CoveragePlan: + """第四问旧计划:700 m 方格 49 点(充分条件,保留作回退与对照)。""" + return CoveragePlan( + name="square49", problem=4, kind="certified", + coverage="forward_half_disk", + note="单元对角 700√2≈989.95≤1000 的充分条件;点数为最小命中集的 1.6 倍", + # 顺序与 coverage.coverage_points() 完全一致(y 由大到小),保持历史 + # 基线 grid49_immediate 的逐位可复现。 + points=tuple((700.0 * i, 700.0 * j) + for j in range(3, -4, -1) for i in range(-3, 4))) + + +def _load_plan_file(path: Path) -> CoveragePlan: + payload = json.loads(path.read_text(encoding="utf-8")) + raw_cert = payload.get("certificate") or {} + if raw_cert: + # as_dict() 含 nn_tour_virtual_s 等派生列:只取数据类实际字段。 + known = {field.name for field in fields(CoverageCertificate)} + certificate = CoverageCertificate( + **{key: value for key, value in raw_cert.items() if key in known}) + else: + certificate = None + return CoveragePlan( + name=payload["name"], problem=int(payload["problem"]), + kind=payload.get("kind", "certified"), + coverage=payload.get("coverage", "forward_half_disk"), + note=payload.get("note", ""), + certificate=certificate, + generator=payload.get("generator", {}), + points=tuple((float(x), float(y)) for x, y in payload["points"])) + + +@lru_cache(maxsize=None) +def load_plan(name: str, verify: bool = True) -> CoveragePlan: + """按名称加载覆盖计划;``verify`` 为真时做运行期抽样校验(进程内缓存)。""" + path = PLAN_DIR / f"{name}.json" + if not path.exists(): + raise FileNotFoundError(f"未找到覆盖计划 {name!r}({path})") + plan = _load_plan_file(path) + if verify and plan.kind == "certified": + certificate = verify_plan(plan) + if not certificate.valid: + raise ValueError( + f"覆盖计划 {name!r} 运行期校验失败:" + f"{certificate.uncovered}/{certificate.targets} 个 (p,h) 未被覆盖") + plan = CoveragePlan( + name=plan.name, problem=plan.problem, kind=plan.kind, + coverage=plan.coverage, note=plan.note, + generator=plan.generator, + certificate=CoverageCertificate( + kind=certificate.kind, target_step_m=certificate.target_step_m, + headings=certificate.headings, r_eff_min_m=certificate.r_eff_min_m, + targets=certificate.targets, uncovered=certificate.uncovered, + worst_hit_distance_m=certificate.worst_hit_distance_m, + nn_tour_m=certificate.nn_tour_m, + generator_sha256=(plan.certificate.generator_sha256 + if plan.certificate else "")), + points=plan.points) + return plan + + +def plan_instance(name: str, verify: bool = True) -> CoveragePlan: + """统一入口:支持内置计划名与磁盘上的证书计划。""" + if name == "square49": + return square_49_plan() + if name == "seven": + return seven_plan(1200.0) + return load_plan(name, verify) + + +def plan_names() -> list[str]: + """全部可加载的计划名(含内置)。""" + builtin = ["square49", "seven"] + return builtin + sorted(p.stem for p in PLAN_DIR.glob("*.json")) + + +def write_plan(plan: CoveragePlan, path: Path) -> None: + """落盘计划 + 证书(生成器用)。""" + path.parent.mkdir(parents=True, exist_ok=True) + payload = plan.as_dict() + payload["generator"] = dict(payload.get("generator") or {}) + payload["sha256"] = hashlib.sha256( + json.dumps(payload["points"]).encode("utf-8")).hexdigest() + path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", + encoding="utf-8") diff --git a/src/mcm26b/guarantee/plans/q4_mincover_v1.json b/src/mcm26b/guarantee/plans/q4_mincover_v1.json new file mode 100644 index 0000000..45a5654 --- /dev/null +++ b/src/mcm26b/guarantee/plans/q4_mincover_v1.json @@ -0,0 +1,143 @@ +{ + "name": "q4_mincover_v1", + "problem": 4, + "kind": "certified", + "coverage": "forward_half_disk", + "note": "贪心击中集等价覆盖:31 点 vs 现役 49 点,NN 巡回 22.9 km vs 36.4 km", + "generator": { + "script": "scripts/verify_q4_cover.py", + "spacing_m": 200.0, + "radius_m": 2850.0, + "target_step_m": 75.0, + "headings": 24, + "code_sha256": "dce9f0e189439bbea26f6bcbebf7e7f7bb99021a9035fca0c8d67bb67a3a529a" + }, + "certificate": null, + "points": [ + [ + -800.0, + 0.0 + ], + [ + 800.0, + 0.0 + ], + [ + 0.0, + -1000.0 + ], + [ + 0.0, + 1000.0 + ], + [ + -1200.0, + -1000.0 + ], + [ + -1000.0, + 1000.0 + ], + [ + 1000.0, + -1000.0 + ], + [ + 1000.0, + 1000.0 + ], + [ + 1800.0, + 0.0 + ], + [ + -1800.0, + 200.0 + ], + [ + -400.0, + -1800.0 + ], + [ + -200.0, + 1800.0 + ], + [ + 0.0, + 0.0 + ], + [ + 800.0, + -1800.0 + ], + [ + 1200.0, + 1600.0 + ], + [ + -1400.0, + 1400.0 + ], + [ + 1800.0, + -800.0 + ], + [ + -1800.0, + -800.0 + ], + [ + 1800.0, + 600.0 + ], + [ + -600.0, + -1000.0 + ], + [ + 400.0, + 1800.0 + ], + [ + -1400.0, + -1800.0 + ], + [ + -1200.0, + 800.0 + ], + [ + -1200.0, + 1800.0 + ], + [ + 400.0, + -800.0 + ], + [ + -200.0, + 400.0 + ], + [ + 600.0, + -1400.0 + ], + [ + -2200.0, + 600.0 + ], + [ + 1000.0, + -1600.0 + ], + [ + -2000.0, + -400.0 + ], + [ + -200.0, + -2200.0 + ] + ], + "sha256": "000e0c1c8642bbe9fb15ad854b22a5df03d4385f7834135a129062822442ccd1" +} diff --git a/src/mcm26b/guarantee/plans/q4_mincover_v2.json b/src/mcm26b/guarantee/plans/q4_mincover_v2.json new file mode 100644 index 0000000..49e019a --- /dev/null +++ b/src/mcm26b/guarantee/plans/q4_mincover_v2.json @@ -0,0 +1,162 @@ +{ + "name": "q4_mincover_v2", + "problem": 4, + "kind": "certified", + "coverage": "forward_half_disk", + "note": "设计裕量最小命中集:31 点,r_design=965 m / 前向角裕量 5.0°;证书按 15 m/72 档、r_verify=1000 m、角裕量 0.0° 校核缺口 0(同一证书口径复核,含精细剪枝);最坏命中 990 m,NN 巡回 23.9 km", + "generator": { + "script": "scripts/verify_q4_cover.py", + "spacing_m": 100.0, + "radius_m": 2850.0, + "target_step_m": 50.0, + "headings": 48, + "design_r_eff_m": 965.0, + "heading_margin_deg": 5.0, + "pruned": true, + "verify_step_m": 15.0, + "verify_headings": 72, + "verify_r_eff_m": 1000.0, + "verify_heading_margin_deg": 0.0, + "code_sha256": "adf4fe6e9853c47314fac2c630fc6846ea6922102c2e83b507e5d397434c0e1d" + }, + "certificate": { + "kind": "forward_half_disk", + "target_step_m": 15.0, + "headings": 72, + "r_eff_min_m": 1000.0, + "targets": 3256200, + "uncovered": 0, + "worst_hit_distance_m": 990.051, + "nn_tour_m": 23883.8, + "nn_tour_virtual_s": 4776.8, + "generator_sha256": "adf4fe6e9853c47314fac2c630fc6846ea6922102c2e83b507e5d397434c0e1d", + "verify_heading_margin_deg": 0.0 + }, + "points": [ + [ + -800.0, + -200.0 + ], + [ + 800.0, + 200.0 + ], + [ + -200.0, + 900.0 + ], + [ + 200.0, + -900.0 + ], + [ + -1200.0, + 700.0 + ], + [ + 1200.0, + -700.0 + ], + [ + 800.0, + 1200.0 + ], + [ + -1800.0, + -300.0 + ], + [ + 1800.0, + 300.0 + ], + [ + -400.0, + 1800.0 + ], + [ + 0.0, + 0.0 + ], + [ + 1400.0, + -1400.0 + ], + [ + -1500.0, + -1300.0 + ], + [ + 1500.0, + 1300.0 + ], + [ + -400.0, + -1800.0 + ], + [ + 400.0, + 1800.0 + ], + [ + -1800.0, + 400.0 + ], + [ + 1800.0, + -400.0 + ], + [ + -500.0, + 700.0 + ], + [ + -700.0, + -700.0 + ], + [ + 700.0, + 700.0 + ], + [ + 1300.0, + 1100.0 + ], + [ + -1300.0, + 1500.0 + ], + [ + 500.0, + -1800.0 + ], + [ + -900.0, + -2100.0 + ], + [ + 600.0, + 1900.0 + ], + [ + -2500.0, + 500.0 + ], + [ + 1900.0, + -900.0 + ], + [ + -1700.0, + -500.0 + ], + [ + -700.0, + -1200.0 + ], + [ + 900.0, + -700.0 + ] + ], + "sha256": "a7fc25beb70bc159bf3a9d309813677fb72277a78250374fcd8039e5699748fe" +} diff --git a/src/mcm26b/harness/__init__.py b/src/mcm26b/harness/__init__.py index 46e264e..2e972b9 100644 --- a/src/mcm26b/harness/__init__.py +++ b/src/mcm26b/harness/__init__.py @@ -11,8 +11,9 @@ from .playback import PlaybackTransport from .scenes import mixed_scene, random_omni_scene, referee_spec from .simulator import LocalSimulator +from .suites import SceneSpec, suite, suite_manifest from .transport import LocalSimTransport, ScriptedFaultTransport __all__ = ["LocalSimTransport", "LocalSimulator", "PlaybackTransport", - "ScriptedFaultTransport", "mixed_scene", "random_omni_scene", - "referee_spec"] + "ScriptedFaultTransport", "SceneSpec", "mixed_scene", + "random_omni_scene", "referee_spec", "suite", "suite_manifest"] diff --git a/src/mcm26b/harness/suites.py b/src/mcm26b/harness/suites.py new file mode 100644 index 0000000..0e2ba61 --- /dev/null +++ b/src/mcm26b/harness/suites.py @@ -0,0 +1,132 @@ +"""冻结基准集:第三/四问的固定场景清单与真值构造(测试端专用)。 + +存在意义(docs/第三四问架构优化与运行提速方案.md §1.4 B6 / §P1-3): +历史评估集是 20 个**单源全向**场景,使 `avg_locate_clear_time_s` 恒等于 +`virtual_time_s`,也无法支撑任何第四问结论。基准集必须覆盖题面声明的 +源数区间与定向源存在性,并且**版本化、可复现、不可随意增删**—— +任何"更快"的声明都要在同一份清单上做配对比较。 + +真值只在本模块与评测机之间流动;策略端只通过 Transport 看到响应。 +""" + +from __future__ import annotations + +import math +from dataclasses import dataclass + +from referee import Source + +from ..config import ProblemConfig +from .scenes import mixed_scene, random_omni_scene + +SUITE_VERSION = 1 + +# 第三问:沿用历史验证集的种子与源数(seeds 100–105 × 10/13/16) +Q3_SEEDS = (100, 101, 102, 103, 104, 105) +Q3_COUNTS = (10, 13, 16) +# 第四问:三种"定向占比"组成(少量 / 约半数 / 多数) +Q4_SEEDS = (200, 201, 202) +Q4_CONFIGS = ((10, 3), (13, 6), (16, 8)) +# 误差场种子偏移:与 benchmark_q3_bayes.py 同口径,保证逐点固定误差可复现 +ERROR_SEED_BASE = 20260910 + + +@dataclass(frozen=True) +class SceneSpec: + """一个冻结场景:标识、题号、源数、定向数与种子。""" + + scene_id: str + problem: int + kind: str # "random" | "boundary" + seed: int + error_seed: int + count: int + directional: int = 0 + + def as_dict(self) -> dict: + return {"scene_id": self.scene_id, "problem": self.problem, + "kind": self.kind, "seed": self.seed, + "error_seed": self.error_seed, "count": self.count, + "directional": self.directional} + + def sources(self, config: ProblemConfig | None = None) -> list[Source]: + """构造真值(仅测试端调用)。""" + config = config or ProblemConfig() + if self.kind == "random" and self.problem == 3: + return random_omni_scene(seed=self.seed, count=self.count, + config=config) + if self.kind == "random": + return mixed_scene(seed=self.seed, count=self.count, + directional=self.directional, config=config) + return _boundary_sources(self, config) + + +def _boundary_sources(spec: SceneSpec, config: ProblemConfig) -> list[Source]: + """圆周边界压力场景:源全部位于 Ω 边界、r_eff 取下界。 + + 第三问:全向,扇区接缝角度,检验七站覆盖的边界情形; + 第四问:全部定向且朝向**背离圆心**(最不利于发现),检验 + "朝外发射的边界源不漏"。 + """ + field = config.field + radius = field.omega_radius_m + sources: list[Source] = [] + for index in range(spec.count): + angle = math.pi / 6 + 2 * math.pi * index / spec.count + x, y = radius * math.cos(angle), radius * math.sin(angle) + directional = index < spec.directional + sources.append(Source( + channel=index + 1, x=x, y=y, r_eff_m=field.r_eff_min_m, + directional=directional, + heading_deg=(math.degrees(angle) % 360.0) if directional else 0.0)) + return sources + + +def core_scenes(problem: int) -> list[SceneSpec]: + """主体场景:覆盖题面源数区间与定向占比组成。""" + scenes: list[SceneSpec] = [] + if problem == 3: + for seed in Q3_SEEDS: + for count in Q3_COUNTS: + scenes.append(SceneSpec( + scene_id=f"q3-core-s{seed}-n{count}", problem=3, + kind="random", seed=seed, error_seed=ERROR_SEED_BASE + seed, + count=count)) + else: + for seed in Q4_SEEDS: + for count, directional in Q4_CONFIGS: + scenes.append(SceneSpec( + scene_id=f"q4-core-s{seed}-n{count}-d{directional}", + problem=4, kind="random", seed=seed, + error_seed=ERROR_SEED_BASE + seed, count=count, + directional=directional)) + return scenes + + +def boundary_scenes(problem: int) -> list[SceneSpec]: + """圆周边界压力场景(每问 2 场:10 源与 16 源)。""" + if problem == 3: + return [SceneSpec(f"q3-boundary-n{count}", 3, "boundary", 0, + ERROR_SEED_BASE, count) + for count in (10, 16)] + return [SceneSpec(f"q4-boundary-n{count}-d{directional}", 4, "boundary", 0, + ERROR_SEED_BASE, count, directional) + for count, directional in ((10, 5), (16, 8))] + + +def suite(name: str, problem: int) -> list[SceneSpec]: + """按名称取场景清单:core / boundary / all。""" + if name == "core": + return core_scenes(problem) + if name == "boundary": + return boundary_scenes(problem) + if name == "all": + return core_scenes(problem) + boundary_scenes(problem) + raise ValueError(f"未知基准集 {name!r}(可选 core/boundary/all)") + + +def suite_manifest(name: str, problem: int) -> dict: + """清单头:版本、问题、场景表(写入 manifest.json)。""" + scenes = suite(name, problem) + return {"suite_version": SUITE_VERSION, "suite": name, "problem": problem, + "scenes": [scene.as_dict() for scene in scenes]} diff --git a/src/mcm26b/hrl/__init__.py b/src/mcm26b/hrl/__init__.py deleted file mode 100644 index 4f33090..0000000 --- a/src/mcm26b/hrl/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -"""分层强化学习实验:整场子目标调度环境与独立的八方向到达实验。 - -与 :mod:`mcm26b.rl`(单步 PPO 选点)的差异:高层在整场 10–16 源的统一 -候选槽位上做调度决策(证书清除 / 信息增益定位 / 覆盖站扫频 / 后备清除), -当前运行闭环将子目标端点提交协议,八方向策略仅用于可选本地路径留痕, -不影响真实请求及虚拟计时。完整高层训练、CLI 与配对评估仍待接通; -优化架构及逐项验收见 docs/hrl-sol-execution.md。 - -信念(belief + 网格幸存集)、证书审批与后备清除复用 planner 基础设施; -每次改动仍须验证真源保留和真实全清,不能用内部状态自洽替代评测。 - -本包属于训练/推理侧组件,运行时对依赖保持惰性(stable-baselines3 / -sb3-contrib 仅在显式加载模型时导入)。 -""" diff --git a/src/mcm26b/hrl/constants.py b/src/mcm26b/hrl/constants.py deleted file mode 100644 index 17704ad..0000000 --- a/src/mcm26b/hrl/constants.py +++ /dev/null @@ -1,49 +0,0 @@ -"""HRL 观测/动作空间常量:模型接口的唯一字面量来源。 - -槽位布局(训练与推理共享,改动任一值都会使已训练模型失配,须同步重训): - - 0–19 clear 频道 c 的证书清除(槽位 = c-1,证书就绪才有效) - 20–39 locate 频道 c 的定位测量(信息增益选点或定向遮挡梯子探点) - 40–88 station 覆盖站(问题3:七点环 0–6 有效;问题4:49 点网格) - 89–108 fallback 频道 c 的后备网格清除(仅问题4,遮挡梯子耗尽后开放) - 109–119 保留(恒屏蔽) - -高层观测 = 全局 8 维 + 20 频道 × 14 维 + 120 槽位 × 8 维 = 1248 维; -低层观测 10 维、动作 Discrete(8)(8 方向,步长 ≤100 m)。 -""" - -FEATURE_VERSION = 4 -ACTION_LAYOUT_VERSION = 1 -REWARD_VERSION = 1 -CHANNEL_COUNT = 20 - -# ------------------------------------------------------------ 高层动作槽位 -CLEAR_SLOTS = CHANNEL_COUNT -LOCATE_SLOTS = CHANNEL_COUNT -STATION_SLOTS = 49 -FALLBACK_SLOTS = CHANNEL_COUNT -CLEAR_OFFSET = 0 -LOCATE_OFFSET = CLEAR_OFFSET + CLEAR_SLOTS -STATION_OFFSET = LOCATE_OFFSET + LOCATE_SLOTS -FALLBACK_OFFSET = STATION_OFFSET + STATION_SLOTS -N_CANDIDATES = 120 - -# ------------------------------------------------------------ 高层观测 -PER_CHANNEL_DIM = 14 -HIGH_GLOBAL_DIM = 8 -PER_CANDIDATE_DIM = 8 -HIGH_OBS_DIM = (HIGH_GLOBAL_DIM + CHANNEL_COUNT * PER_CHANNEL_DIM - + N_CANDIDATES * PER_CANDIDATE_DIM) # 1248 - -# ------------------------------------------------------------ 低层接口 -LOW_OBS_DIM = 10 -LOW_NUM_ACTIONS = 8 # 8 方向,45° 等分 -LOW_STEP_M = 100.0 # 每步最大步长 [题面 低层动作 50–100 m] -LOW_REACH_M = 20.0 # 到达阈值(与清除半径一致) -LOW_MAX_STEPS = 60 # 直径穿越 ~51 步上界 - -# ------------------------------------------------------------ 观测归一化 -POS_SCALE_M = 2000.0 # 位置/位移归一化尺度(Ω 半径 1800 m 外扩) -RADIUS_SCALE_M = 2000.0 -COST_SCALE_S = 600.0 # 槽位预计服务耗时归一化尺度 -MEASURE_COUNT_SCALE = 12.0 diff --git a/src/mcm26b/hrl/curriculum.py b/src/mcm26b/hrl/curriculum.py deleted file mode 100644 index 6649793..0000000 --- a/src/mcm26b/hrl/curriculum.py +++ /dev/null @@ -1,109 +0,0 @@ -"""课程学习与域随机化:训练场景按阶段由易到难(prompt §7)。 - -四阶段课程:1 源/5 频道/无噪声 → 3 源/10 频道/±0.5° → 8 源/16 频道/±1° -→ 10–16 源/20 频道/±1°(问题4 最后阶段按比例混入定向源)。域随机化 -覆盖源位置(Ω 圆域均匀)、频道(互异抽样)、有效接收半径、朝向与逐局 -误差种子 [prompt §7.2];机器狗初始位置固定 (0,0)——协议语义如此, -随机化它反而制造训练-部署差异(与 v1"训练部署特征错位"教训一致)。 - -真值只进入训练/评估场景生成,不进入任何观测;策略端仅见模拟器响应。 -""" - -from __future__ import annotations - -import dataclasses -import math -from dataclasses import dataclass -from random import Random - -from ..config import ProblemConfig - - -@dataclass(frozen=True) -class Stage: - """课程阶段参数:源数范围、频道上限、示向度噪声与定向源比例。""" - - name: str - sources_min: int - sources_max: int - channel_max: int # 频道 > channel_max 的频道保证无源 - bearing_error_half_deg: float - directional_ratio: float # 问题4 最后阶段定向源比例;问题3 恒 0 - recommended_timesteps: int - - -STAGES: tuple[Stage, ...] = ( - Stage("s1-single", 1, 1, 5, 0.0, 0.0, 60_000), - Stage("s2-few", 3, 3, 10, 0.5, 0.0, 80_000), - Stage("s3-many", 8, 8, 16, 1.0, 0.0, 100_000), - Stage("s4-full", 10, 16, 20, 1.0, 0.4, 140_000), -) - - -def stage_with_noise(config: ProblemConfig, stage: Stage) -> ProblemConfig: - """把阶段噪声写入 ProblemConfig(belief/PF 的保守裕量随之同步)。""" - field = dataclasses.replace( - config.field, bearing_error_half_deg=stage.bearing_error_half_deg) - return dataclasses.replace(config, field=field) - - -# 快速模式只减少选点评分的样本,不改变证明使用的幸存网格。29.3m 格距的 -# Voronoi 裕量约20.72m,已经超过20m清除半径,会使粒子证书永远不可达。 -# 默认使用生产配置;快速模式必须显式指定并在训练元数据记录。 -TRAINING_SCORE_SUBSAMPLE = 240 -TRAINING_MC_REPRESENTATIVES = 5 - - -def training_config(config: ProblemConfig, stage: Stage, *, - fidelity: str = "production") -> ProblemConfig: - """阶段噪声配置;fast只降低评分采样量,production与部署同参数。""" - if fidelity not in ("production", "fast"): - raise ValueError("fidelity 必须是 production 或 fast") - noisy = stage_with_noise(config, stage) - if fidelity == "production": - return noisy - bayes = dataclasses.replace( - noisy.bayes, - score_subsample=TRAINING_SCORE_SUBSAMPLE, - mc_representatives=TRAINING_MC_REPRESENTATIVES) - return dataclasses.replace(noisy, bayes=bayes) - - -def make_scene(rng: Random, config: ProblemConfig, problem: int, - stage: Stage, *, domain_randomization: bool = True - ) -> tuple[list, list[int]]: - """生成一局课程场景,返回 (referee.Source 列表, 已占用频道列表)。 - - 源位置在 Ω 圆域均匀分布、频道从 1..stage.channel_max 互异抽样、 - 有效接收半径 [1000,1500] 均匀 [题面];问题4 按 stage.directional_ratio - 混入定向源,朝向均匀。domain_randomization=False 时只用 rng 的确定 - 序列(仍随机但可整场复现),供评估固定场景对照。 - """ - from referee import Source - - field = config.field - count = rng.randint(stage.sources_min, stage.sources_max) - channels = rng.sample(range(field.channel_min, stage.channel_max + 1), count) - sources = [] - for channel in channels: - radius = field.omega_radius_m * math.sqrt(rng.random()) - angle = rng.uniform(0.0, 2.0 * math.pi) - r_eff = rng.uniform(field.r_eff_min_m, field.r_eff_max_m) - directional = (problem == 4 - and rng.random() < stage.directional_ratio) - heading = rng.uniform(0.0, 360.0) if directional else 0.0 - if not domain_randomization: - # 固定化退耦:半径/朝向取区间代表值,保留位置随机(评估用)。 - r_eff = field.r_eff_min_m - sources.append(Source(channel=channel, x=radius * math.cos(angle), - y=radius * math.sin(angle), r_eff_m=r_eff, - directional=directional, heading_deg=heading)) - return sources, channels - - -def training_spec(config: ProblemConfig, stage: Stage, *, - max_real_duration_s: float = 3600.0): - """带阶段噪声的 referee Spec(训练侧使用;正式对接以 /enter 为准)。""" - from ..harness import referee_spec - return referee_spec(stage_with_noise(config, stage), - max_real_duration_s=max_real_duration_s) diff --git a/src/mcm26b/hrl/executor.py b/src/mcm26b/hrl/executor.py deleted file mode 100644 index 96f6dbe..0000000 --- a/src/mcm26b/hrl/executor.py +++ /dev/null @@ -1,113 +0,0 @@ -"""低层到达执行器与观测:8 方向步进(prompt §4.2),训练/部署同源。 - -低层只负责"怎么去":给定当前位置与子目标,输出离散 8 方向步进序列。 -步长每步 ≤ ``LOW_STEP_M``,近目标时缩短步长;到达阈值 ``LOW_REACH_M`` -与清除半径一致。推演完全本地,不与模拟器交互、不产生虚拟耗时——协议 -语义下移动耗时 = 两次动作位置间的直线距离 ÷ 速度,仅由终点决定。 - -本模块仅供独立导航实验和轨迹诊断;当前 HTTP 执行路径仍直接服务高层 -目标,不能据此声称低层 PPO 改善正式任务耗时。policy=None 使用解析 -直线控制器;PPO 推演超时不会免费跳到目标。 -""" - -from __future__ import annotations - -import math - -import numpy as np - -from ..config import Vec2 -from .constants import (LOW_MAX_STEPS, LOW_NUM_ACTIONS, - LOW_REACH_M, LOW_STEP_M, POS_SCALE_M) - -__all__ = ["build_low_observation", "LowLevelExecutor", "action_bearing", - "navigation_transition"] - - -def action_bearing(action: int) -> float: - """离散方向 -> 弧度方位(0 = +x,逆时针 45° 等分)。""" - return float(action) * 2.0 * math.pi / LOW_NUM_ACTIONS - - -def navigation_transition(position: Vec2, goal: Vec2, action: int, *, - step_m: float = LOW_STEP_M) -> tuple[Vec2, float]: - """训练与轨迹推演共享的运动学;返回位置和实际位移长度。 - - 方向仍由策略决定,近目标时仅缩短步长,不把位置吸附到目标。 - 这是无障碍平面导航实验;不引入观测不可见的绝对位置裁剪。 - """ - if not 0 <= int(action) < LOW_NUM_ACTIONS: - raise ValueError("低层动作必须是 0..7") - if not math.isfinite(step_m) or step_m <= 0: - raise ValueError("step_m 必须是有限正数") - distance = min(float(step_m), math.dist(position, goal)) - bearing = action_bearing(int(action)) - next_position = (position[0] + distance * math.cos(bearing), - position[1] + distance * math.sin(bearing)) - return next_position, math.dist(position, next_position) - - -def build_low_observation(position: Vec2, goal: Vec2, prev_action: int | None, - steps: int) -> np.ndarray: - """低层观测(shape=(LOW_OBS_DIM,),训练/推理逐位一致)。""" - dx, dy = goal[0] - position[0], goal[1] - position[1] - distance = math.hypot(dx, dy) - bearing = math.atan2(dy, dx) - prev_sin = prev_cos = 0.0 - if prev_action is not None: - prev_bearing = action_bearing(prev_action) - prev_sin, prev_cos = math.sin(prev_bearing), math.cos(prev_bearing) - return np.asarray([ - dx / POS_SCALE_M, - dy / POS_SCALE_M, - distance / POS_SCALE_M, - math.sin(bearing), - math.cos(bearing), - steps / LOW_MAX_STEPS, - prev_sin, - prev_cos, - min(distance / LOW_STEP_M, 3.0) / 3.0, - 1.0, - ], dtype=np.float32) - - -class LowLevelExecutor: - """子目标到达推演:低层 PPO 或直线控制器(policy=None)。""" - - def __init__(self, policy=None, *, step_m: float = LOW_STEP_M, - reach_m: float = LOW_REACH_M, max_steps: int = LOW_MAX_STEPS): - self.policy = policy - self.step_m = float(step_m) - self.reach_m = float(reach_m) - self.max_steps = int(max_steps) - self.last_roll_info: dict = {} - - def roll(self, start: Vec2, goal: Vec2) -> list[Vec2]: - """返回真实推演途经点;last_roll_info 如实记录到达/截断。""" - goal = (float(goal[0]), float(goal[1])) - if self.policy is None: - self.last_roll_info = {"reached": True, "truncated": False, - "final_distance_m": 0.0, - "path_length_m": math.dist(start, goal)} - return [goal] - position = (float(start[0]), float(start[1])) - waypoints: list[Vec2] = [] - prev_action: int | None = None - path_length = 0.0 - for steps in range(self.max_steps): - if math.dist(position, goal) <= self.reach_m: - break - observation = build_low_observation(position, goal, prev_action, - steps) - action = int(self.policy.select(observation)) - position, moved = navigation_transition(position, goal, action, - step_m=self.step_m) - path_length += moved - waypoints.append(position) - prev_action = action - distance = math.dist(position, goal) - self.last_roll_info = {"reached": distance <= self.reach_m, - "truncated": distance > self.reach_m, - "final_distance_m": distance, - "path_length_m": path_length} - return waypoints diff --git a/src/mcm26b/hrl/hierarchical_env.py b/src/mcm26b/hrl/hierarchical_env.py deleted file mode 100644 index 92d35bb..0000000 --- a/src/mcm26b/hrl/hierarchical_env.py +++ /dev/null @@ -1,260 +0,0 @@ -"""高层 PPO 训练环境:整场 10–16 源的发现-定位-清除调度(prompt §2/§5.2)。 - -与 v2 :class:`~mcm26b.rl.env.LocalizationEnv`(单源 ≤16 步子任务)的本质 -差异:本环境的每一步是一次完整的高层调度决策(候选槽位选择 + 任务执行), -环境语义与运行闭环 :class:`~mcm26b.planner.hrl_loop.HRLLoop` 共用同一 -混入层(hrl.scheduler),训练-部署观测逐位同源。 - -奖励(prompt §5.2 的可折算实现,权重见 :class:`HRLReward`): - r = -Δ虚拟耗时/20 + 100·清除 + 5·新发现 + 0.5·Σ熵减 - 2·冗余检测 -终止:全部频道清除/证明缺席(+50);截断仍有未决频道(-100);异常(-100)。 -主口径是虚拟耗时——与题目目标函数(最小化平均定位清除时间/虚拟总时间) -一致,清除/发现/熵减是塑形项(消融实验逐项验证其必要性)。 - -真值只在 reset 布景时使用,绝不进入观测;感知读数全部来自 -referee.LocalSimulator(与官方 HTTP 模拟器同协议语义)。 -""" - -from __future__ import annotations - -from dataclasses import dataclass -from random import Random - -import gymnasium as gym -import numpy as np -from gymnasium import spaces - -from ..belief import ChannelStatus -from ..config import ProblemConfig -from ..hrl.curriculum import STAGES, Stage, make_scene, training_config -from ..hrl.constants import HIGH_OBS_DIM, N_CANDIDATES -from ..planner.hrl_loop import HRLLoop -from ..protocol.client import SimulatorClient -from ..protocol.log import SessionLog - -__all__ = ["HRLReward", "HierarchicalEnv"] - - -@dataclass -class HRLReward: - """高层奖励权重。 - - 默认保留 prompt §5.2 的可解释塑形,便于对照实验;P0.4 建议的 - 纯时间口径可通过 :meth:`time_only` 显式启用,训练脚本默认使用它。 - """ - - time_scale: float = 20.0 # r -= Δ虚拟耗时 / time_scale - clear: float = 100.0 # 每清除一个源 - detect: float = 5.0 # 每新发现一个频道有信号 - info_weight: float = 0.5 # 粒子云熵减(log 幸存格数)内在奖励 - redundant: float = 2.0 # 同频道同点重复检测惩罚 - invalid: float = 2.0 # 掩码外动作(无掩码消融路径) - terminal_accounted: float = 50.0 # 全部频道清除/证毕的收尾奖励 - terminal_unresolved: float = 100.0 # 截断/停机时仍有未决频道的惩罚 - failure: float = 100.0 # 协议/守恒性异常惩罚 - - @classmethod - def time_only(cls) -> "HRLReward": - """P0.4 纯时间目标:只惩罚已发生虚拟时间,去掉塑形项。 - - 终止奖/罚是固定常数,不逐源叠加;失败罚按虚拟时限/时间尺度 - 设定为足以覆盖一整局时间成本。 - """ - return cls( - time_scale=100.0, - clear=0.0, - detect=0.0, - info_weight=0.0, - redundant=0.0, - invalid=2.0, - terminal_accounted=30.0, - terminal_unresolved=300.0, - failure=3600.0, - ) - - -class HierarchicalEnv(gym.Env): - """整场分层调度 Gymnasium 环境(问题3/4,课程参数化)。 - - stage=None 时使用 STAGES 末阶段(完整任务口径);课程训练按阶段 - 传入。domain_randomization=False 保留随机位置但固定半径代表值, - 供配对评估。 - """ - - metadata = {"render_modes": []} - - def __init__(self, config: ProblemConfig | None = None, *, - problem: int = 3, stage: Stage | None = None, - max_episode_steps: int = 300, - domain_randomization: bool = True, - reward: HRLReward | None = None, - real_budget_s: float = 3600.0, - error_seed: int | None = None, - fidelity: str = "production"): - super().__init__() - if problem not in (3, 4): - raise ValueError("problem 必须是 3 或 4") - self.base_config = config or ProblemConfig() - self.problem = int(problem) - self.stage = stage or STAGES[-1] - self.max_episode_steps = int(max_episode_steps) - self.domain_randomization = bool(domain_randomization) - self.reward = reward or HRLReward() - self.real_budget_s = float(real_budget_s) - self.error_seed = error_seed - self.fidelity = fidelity - # 默认与部署同精度;fast仅减少评分采样,保留证书网格精度。 - self.train_config = training_config(self.base_config, self.stage, - fidelity=fidelity) - self.observation_space = spaces.Box(low=-12.0, high=12.0, - shape=(HIGH_OBS_DIM,), - dtype=np.float32) - self.action_space = spaces.Discrete(N_CANDIDATES) - - self._scene_rng = Random() - self._loop: HRLLoop | None = None - self._client: SimulatorClient | None = None - self._steps = 0 - self._terminated = False - self._truncated = False - self._start_virtual_s = 0.0 - self._current_candidates: list = [] - self._failure_reason: str | None = None - self._last_outcome = None - - # ------------------------------------------------------------ 场景 - def _make_episode(self) -> None: - from ..harness import LocalSimTransport - from referee import LocalSimulator - - sources, _channels = make_scene( - self._scene_rng, self.train_config, self.problem, self.stage, - domain_randomization=self.domain_randomization) - self._simulator = LocalSimulator( - sources, robot_id="hrl-train", - spec=self._training_spec(), - error_seed=(self.error_seed if self.error_seed is not None - else self._scene_rng.randint(0, 2 ** 31 - 1)), - stress_mode=True) - self._client = SimulatorClient( - "hrl-train", config=self.train_config, - transport=LocalSimTransport(self._simulator), log=SessionLog()) - self._client.enter() - self._loop = HRLLoop(self._client, self.train_config, - problem=self.problem) - - def _training_spec(self): - from ..hrl.curriculum import training_spec - return training_spec(self.train_config, self.stage, - max_real_duration_s=self.real_budget_s) - - # ------------------------------------------------------------ Gym API - def reset(self, *, seed: int | None = None, options: dict | None = None): - super().reset(seed=seed) - if seed is not None: - self._scene_rng = Random(seed) - self._steps = 0 - self._terminated = False - self._truncated = False - self._failure_reason = None - self._make_episode() - self._start_virtual_s = self._client.state.virtual_time_s - self._current_candidates = self._loop.build_candidates() - observation = self._loop.hrl_observation(self._current_candidates) - return observation, self._info() - - def action_masks(self) -> np.ndarray: - """MaskablePPO 动作掩码接口(与观测同源的候选槽位有效性)。""" - return self._loop.hrl_action_mask(self._current_candidates) - - def _info(self) -> dict: - loop = self._loop - belief = loop.belief - cleared = len(loop.cleared) - absent = sum(1 for ch in belief.channels.values() - if ch.status is ChannelStatus.ABSENT) - return { - "steps": self._steps, - "cleared": cleared, - "absent_proven": absent, - "accounted": cleared + absent, - "virtual_time_s": self._client.state.virtual_time_s, - "episode_virtual_cost_s": (self._client.state.virtual_time_s - - self._start_virtual_s), - "stop_reason": loop.stop_reason, - "failure_reason": self._failure_reason, - "anomalies": list(loop.anomalies), - } - - def step(self, action): - if self._terminated or self._truncated: - raise RuntimeError("step() 需要在 terminated/truncated 后先 reset()") - loop = self._loop - self._steps += 1 - try: - outcome = loop.hrl_step(action, candidates=self._current_candidates) - except Exception as exc: # 协议/守恒性异常:与 v2 环境同口径收尾 - self._failure_reason = type(exc).__name__ + ': ' + str(exc) - observation = np.zeros((HIGH_OBS_DIM,), dtype=np.float32) - self._terminated = True - return (observation, -self.reward.failure, True, False, - self._info()) - self._last_outcome = outcome - - if outcome.invalid: - reward = -self.reward.invalid - else: - reward = self._reward_from(outcome) - - # 终止判定:停机原因/全部证毕;或候选耗尽时走运行闭环 run() 的 - # 同款安全网(覆盖缺席标记 + 阻塞定位清除),安全网的虚拟耗时 - # 计入本步奖励(归因给促成该局面的决策序列)。 - terminated = loop.stop_reason is not None or loop._all_accounted() - if not terminated: - self._current_candidates = loop.build_candidates() - if not self._current_candidates: - virtual_before = self._client.state.virtual_time_s - loop._mark_absent_after_coverage() - loop._resolve_detected() - reward -= (self._client.state.virtual_time_s - virtual_before) \ - / self.reward.time_scale - self._current_candidates = [] - terminated = True - else: - self._current_candidates = [] - - if terminated: - reward += (self.reward.terminal_accounted - if loop._all_accounted() - else -self.reward.terminal_unresolved) - truncated = False - if not terminated and self._steps >= self.max_episode_steps: - truncated = True - if not loop._all_accounted(): - reward -= self.reward.terminal_unresolved - self._terminated = terminated - self._truncated = truncated - if terminated or truncated: - observation = np.zeros((HIGH_OBS_DIM,), dtype=np.float32) - else: - self._current_candidates = loop.build_candidates() - observation = loop.hrl_observation(self._current_candidates) - return observation, float(reward), terminated, truncated, self._info() - - def _reward_from(self, outcome) -> float: - reward = -outcome.delta_virtual_s / self.reward.time_scale - reward += self.reward.clear * len(outcome.clear_success) - reward += self.reward.detect * len(outcome.new_detections) - reward += self.reward.info_weight * sum(outcome.info_gains.values()) - if outcome.redundant: - reward -= self.reward.redundant - return reward - - def close(self): - client = getattr(self, "_client", None) - if client is not None and client.state.entered \ - and not client.state.exited: - try: - client.exit() - except Exception: - pass diff --git a/src/mcm26b/hrl/low_level_env.py b/src/mcm26b/hrl/low_level_env.py deleted file mode 100644 index c8788da..0000000 --- a/src/mcm26b/hrl/low_level_env.py +++ /dev/null @@ -1,158 +0,0 @@ -"""低层 PPO 训练环境:随机起点-子目标的 8 方向到达任务(prompt §4.2/§5.1)。 - -奖励为实际位移耗时惩罚、转向惩罚与到达奖励。步长上限 100m,近目标 -缩短步长,避免固定步长振荡。此环境仅用于独立导航实验;正式 HTTP -路径尚不执行低层 PPO 的途经点,不能将导航成绩当成正式任务收益。 - -策略端只见相对位姿观测,真值(子目标坐标)经相对向量进入观测, -与部署执行器完全同源(build_low_observation)。 -""" - -from __future__ import annotations - -import math -from random import Random - -import gymnasium as gym -import numpy as np -from gymnasium import spaces - -from ..config import ProblemConfig -from .constants import (LOW_MAX_STEPS, LOW_NUM_ACTIONS, LOW_OBS_DIM, - LOW_REACH_M, LOW_STEP_M) -from .executor import (action_bearing, build_low_observation, - navigation_transition) - -__all__ = ["LowLevelEnv"] - - -class LowLevelEnv(gym.Env): - """低层到达任务:观测 10 维,动作 Discrete(8),逐步计费。""" - - metadata = {"render_modes": []} - - def __init__(self, config: ProblemConfig | None = None, *, - seed: int | None = None, - step_m: float = LOW_STEP_M, reach_m: float = LOW_REACH_M, - max_steps: int = LOW_MAX_STEPS, - min_distance_m: float = 300.0, - turn_penalty: float = 0.05, reach_bonus: float = 2.0, - step_cost_scale: float = 100.0, - truncation_penalty: float = 2.0): - super().__init__() - self.config = config or ProblemConfig() - self.step_m = float(step_m) - self.reach_m = float(reach_m) - self.max_steps = int(max_steps) - self.min_distance_m = float(min_distance_m) - self.turn_penalty = float(turn_penalty) - self.reach_bonus = float(reach_bonus) - self.step_cost_scale = float(step_cost_scale) - self.truncation_penalty = float(truncation_penalty) - self.observation_space = spaces.Box(low=-np.inf, high=np.inf, - shape=(LOW_OBS_DIM,), - dtype=np.float32) - self.action_space = spaces.Discrete(LOW_NUM_ACTIONS) - self._rng = Random(seed) - self._position = (0.0, 0.0) - self._goal = (0.0, 0.0) - self._steps = 0 - self._prev_action: int | None = None - self._terminated = False - self._truncated = False - self._path_length_m = 0.0 - self._virtual_time_s = 0.0 - self._straight_m = 0.0 - - # ------------------------------------------------------------ Gym API - def reset(self, *, seed: int | None = None, options: dict | None = None): - super().reset(seed=seed) - if seed is not None: - self._rng = Random(seed) - radius = self.config.field.omega_radius_m - self._position = self._sample_point(radius) - for _ in range(100): - self._goal = self._sample_point(radius) - if math.dist(self._position, self._goal) >= self.min_distance_m: - break - self._steps = 0 - self._prev_action = None - self._terminated = False - self._truncated = False - self._path_length_m = 0.0 - self._virtual_time_s = 0.0 - self._straight_m = math.dist(self._position, self._goal) - return self._observe(), self._info() - - def action_masks(self) -> np.ndarray: - """无障碍低层八个方向均可用,兼容 MaskablePPO。""" - return np.ones(LOW_NUM_ACTIONS, dtype=bool) - - def _sample_point(self, radius: float) -> tuple[float, float]: - angle = self._rng.uniform(0.0, 2.0 * math.pi) - distance = radius * math.sqrt(self._rng.random()) - return (distance * math.cos(angle), distance * math.sin(angle)) - - def step(self, action): - if self._terminated or self._truncated: - raise RuntimeError("step() 需要在 terminated/truncated 后先 reset()") - action = int(action) - if self._prev_action is not None: - turn = abs((action_bearing(action) - - action_bearing(self._prev_action) + math.pi) - % (2.0 * math.pi) - math.pi) / math.pi - else: - turn = 0.0 - self._position, moved = navigation_transition( - self._position, self._goal, action, step_m=self.step_m) - self._prev_action = action - self._steps += 1 - - step_cost_s = moved / self.config.cost.speed_mps - self._path_length_m += moved - self._virtual_time_s += step_cost_s - reward = -step_cost_s / self.step_cost_scale - reward -= self.turn_penalty * turn - distance = math.dist(self._position, self._goal) - terminated = distance <= self.reach_m - truncated = False - if terminated: - reward += self.reach_bonus - elif self._steps >= self.max_steps: - truncated = True - reward -= self.truncation_penalty - self._terminated = terminated - self._truncated = truncated - info = self._info() - info["final_distance_m"] = distance - info["step_distance_m"] = moved - info["step_virtual_time_s"] = step_cost_s - return self._observe(), float(reward), terminated, truncated, info - - def _observe(self) -> np.ndarray: - return build_low_observation(self._position, self._goal, - self._prev_action, self._steps) - - def _info(self) -> dict: - return { - "position": self._position, - "goal": self._goal, - "steps": self._steps, - "distance_m": math.dist(self._position, self._goal), - "straight_m": self._straight_m, - "path_length_m": self._path_length_m, - "virtual_time_s": self._virtual_time_s, - } - - # ------------------------------------------------------------ 专家(BC) - def expert_action(self) -> int: - """直线专家:选择方位最接近子目标方向的离散方向(BC 标签)。""" - bearing = math.atan2(self._goal[1] - self._position[1], - self._goal[0] - self._position[0]) - best, best_gap = 0, float("inf") - for action in range(LOW_NUM_ACTIONS): - gap = abs((action_bearing(action) - bearing + math.pi) - % (2.0 * math.pi) - math.pi) - if gap < best_gap: - best, best_gap = action, gap - return best diff --git a/src/mcm26b/hrl/policy.py b/src/mcm26b/hrl/policy.py deleted file mode 100644 index 4b71cbd..0000000 --- a/src/mcm26b/hrl/policy.py +++ /dev/null @@ -1,135 +0,0 @@ -"""HRL 策略加载与推理(运行时接入 planner 的唯一入口,模式同 rl.policy)。 - -模型文件由 scripts/train_hrl_low.py / train_hrl_high.py 生成,并伴随同名 -JSON 元数据(feature_version/algorithm/problem/维度);加载时校验,失配 -即拒绝运行,杜绝静默错位。stable-baselines3 / torch 均为惰性导入。 -""" - -from __future__ import annotations - -import json -from pathlib import Path - -import numpy as np - -from .constants import (ACTION_LAYOUT_VERSION, FEATURE_VERSION, - HIGH_OBS_DIM, LOW_NUM_ACTIONS, LOW_OBS_DIM, - N_CANDIDATES, REWARD_VERSION) - -__all__ = ["HighLevelPolicy", "LowLevelPolicy", - "default_high_model_path", "default_low_model_path"] - - -def _resolve_device(device: str) -> str: - if device != "auto": - return device - try: - import torch - return "cuda" if torch.cuda.is_available() else "cpu" - except ImportError: - return "cpu" - - -def _load_maskable(model_path: Path, device: str, *, - obs_dim: int, act_dim: int, problem: int): - if not model_path.is_file(): - raise RuntimeError( - f"未找到 HRL 模型 {model_path}。请先训练:\n" - f" uv sync --group rl --group dev\n" - f" uv run python scripts/train_hrl_high.py --problem {problem}") - try: - from sb3_contrib import MaskablePPO - except ImportError as exc: - raise RuntimeError( - "缺少 RL 运行依赖(sb3-contrib)。请执行 `uv sync --group rl` " - "后重试。") from exc - meta_path = model_path.with_suffix('.json') - metadata = json.loads(meta_path.read_text(encoding='utf-8')) \ - if meta_path.exists() else {} - # 高层模型必须携带完整语义元数据;缺字段不能默认兼容,防止旧槽位/ - # 旧奖励语义模型被静默加载。低层导航模型只校验基础特征版本。 - strict = act_dim == N_CANDIDATES - if strict: - required = ("feature_version", "action_layout_version", - "reward_version", "algorithm", "problem", - "obs_dim", "act_dim") - missing = [key for key in required if key not in metadata] - if missing: - raise RuntimeError( - f"HRL 高层模型元数据缺少字段 {missing};请用当前 " - f"scripts/train_hrl_high.py 重训。") - if metadata.get("feature_version") != FEATURE_VERSION: - raise RuntimeError( - f"HRL 模型特征版本失配: 期望 {FEATURE_VERSION}," - f"实际 {metadata.get('feature_version')}。请用当前版本重训。") - if metadata.get("action_layout_version") != ACTION_LAYOUT_VERSION: - raise RuntimeError( - f"HRL 模型动作布局版本失配: 期望 {ACTION_LAYOUT_VERSION}," - f"实际 {metadata.get('action_layout_version')}。请重训。") - if metadata.get("reward_version") != REWARD_VERSION: - raise RuntimeError( - f"HRL 模型奖励版本失配: 期望 {REWARD_VERSION}," - f"实际 {metadata.get('reward_version')}。请重训。") - else: - if metadata.get("feature_version") != FEATURE_VERSION: - raise RuntimeError( - f"低层模型特征版本失配: 期望 {FEATURE_VERSION}," - f"实际 {metadata.get('feature_version')}。请重训。") - if metadata.get("algorithm") != "maskable_ppo": - raise RuntimeError("HRL 模型必须是 maskable_ppo 训练产物") - if problem is not None and metadata.get("problem") not in (None, problem): - raise RuntimeError("模型训练问题编号与当前第三/四问不匹配") - model = MaskablePPO.load(str(model_path), device=device) - try: - loaded_obs = model.observation_space.shape[0] - loaded_act = model.action_space.n - except Exception as exc: - raise RuntimeError(f"模型空间与 HRL 接口不兼容: {model_path}") from exc - if loaded_obs != obs_dim or loaded_act != act_dim: - raise RuntimeError( - f"模型接口失配: 期望 obs={obs_dim}/act={act_dim}," - f"实际 obs={loaded_obs}/act={loaded_act}。请重训。") - return model - - -class HighLevelPolicy: - """高层子目标调度策略:观测+掩码 -> 槽位编号(确定性 argmax)。""" - - def __init__(self, model_path: str | Path, *, device: str = "auto", - problem: int | None = None): - self.device = _resolve_device(device) - self.path = Path(model_path) - self.model = _load_maskable(self.path, self.device, obs_dim=HIGH_OBS_DIM, - act_dim=N_CANDIDATES, problem=problem) - meta_path = self.path.with_suffix('.json') - self.metadata = json.loads(meta_path.read_text(encoding='utf-8')) \ - if meta_path.exists() else {} - - def select(self, observation: np.ndarray, action_masks: np.ndarray) -> int: - action, _state = self.model.predict( - observation, action_masks=action_masks, deterministic=True) - return int(action) - - -class LowLevelPolicy: - """低层到达策略:相对位姿观测 -> 8 方向(确定性 argmax)。""" - - def __init__(self, model_path: str | Path, *, device: str = "auto"): - self.device = _resolve_device(device) - self.path = Path(model_path) - self.model = _load_maskable(self.path, self.device, obs_dim=LOW_OBS_DIM, - act_dim=LOW_NUM_ACTIONS, problem=None) - - def select(self, observation: np.ndarray) -> int: - action, _state = self.model.predict(observation, deterministic=True) - return int(action) - - -def default_high_model_path(problem: int) -> Path: - if problem not in (3, 4): - raise ValueError("problem 必须是 3 或 4") - return Path("output/hrl") / f"q{problem}_hrl_high.zip" - - -def default_low_model_path() -> Path: - return Path("output/hrl") / "hrl_low.zip" diff --git a/src/mcm26b/hrl/scheduler.py b/src/mcm26b/hrl/scheduler.py deleted file mode 100644 index d03a081..0000000 --- a/src/mcm26b/hrl/scheduler.py +++ /dev/null @@ -1,495 +0,0 @@ -"""高层调度核心:候选槽位构建、观测、动作掩码与任务执行。 - -本模块是 :class:`~mcm26b.planner.hrl_loop.HRLLoop`(运行闭环)与 -:class:`~mcm26b.hrl.hierarchical_env.HierarchicalEnv`(训练环境)共用的 -混入层,保证训练-部署特征逐位同源(v1"训练部署特征错位"审核教训)。 - -宿主须为 :class:`~mcm26b.planner.bayes_loop.BayesLoop` 派生闭环,提供 -client/belief/particles/ledger/_record_measure 等感知与执行原语;本层只做 -三件事—— - -1. 把整场调度决策离散化为固定槽位(constants.N_CANDIDATES): - clear(20) + locate(20) + station(49) + fallback(20) + 保留(11); -2. 由可见观测(belief + 网格幸存集 + 覆盖账本)构造观测与动作掩码, - 绝不读取源真值; -3. 执行选中候选并报告事实(虚拟耗时增量、新发现、熵减、清除结果), - 奖励折算由训练环境负责。 - -Q4 定向源语义:no_signal 不能删除空间候选(可能是朝向遮挡),故问题4 的 -幸存集只按 direction/near 更新;遮挡证据走 blocked_probes 梯子与后备清除 -槽位,与 DirectionalExtension 的保守口径一致。 -""" - -from __future__ import annotations - -import math -from dataclasses import dataclass, field -from typing import NamedTuple - -import numpy as np - -from ..belief import ChannelStatus -from ..config import Vec2 -from ..protocol.rules import CLEAR_SUCCESS, DIRECTION, NEAR, NO_SIGNAL -from ..protocol.timing import move_time -from .constants import (CHANNEL_COUNT, CLEAR_OFFSET, COST_SCALE_S, - FALLBACK_OFFSET, HIGH_GLOBAL_DIM, HIGH_OBS_DIM, - LOCATE_OFFSET, MEASURE_COUNT_SCALE, N_CANDIDATES, - PER_CANDIDATE_DIM, PER_CHANNEL_DIM, POS_SCALE_M, - RADIUS_SCALE_M, STATION_OFFSET) -from ..planner import fallback_clear_cells, safe_disk_radius - -__all__ = ["Candidate", "StepOutcome", "HRLControllerMixin", "point_key"] - - -def point_key(point: Vec2) -> tuple[int, int]: - """候选点去重键:0.5m 网格取整(与 bayes_loop 同口径)。""" - return (int(round(point[0] * 2)), int(round(point[1] * 2))) - - -class Candidate(NamedTuple): - """一个高层候选子目标。slot 为固定槽位编号,供动作掩码与特征定位。""" - - slot: int - kind: str # "clear" | "locate" | "probe" | "station" | "fallback" - position: Vec2 - channel: int | None = None - station_index: int | None = None - service_s: float = 0.0 # 预计服务耗时(含换频,不含移动) - targets: int = 1 # station: 待测频道数;fallback: 格数;其余 1 - - -@dataclass -class StepOutcome: - """一次高层决策-执行的客观结果(奖励折算由训练环境负责)。""" - - action: int - kind: str | None = None - channel: int | None = None - invalid: bool = False # 掩码外动作(无掩码消融路径):未与模拟器交互 - delta_virtual_s: float = 0.0 - new_detections: tuple[int, ...] = () - info_gains: dict[int, float] = field(default_factory=dict) # 频道 -> 熵减(log) - clear_success: tuple[int, ...] = () - redundant: bool = False - position_reached: Vec2 | None = None - - -class HRLControllerMixin: - """高层调度混入:依赖宿主(HRLLoop)提供 BayesLoop 感知与执行原语。 - - 宿主须在 ``__init__`` 初始化:``_obs_mec_cache={}``、 - ``_station_pending_map={}``、``_initial_alive={channel: len(pf)}`` - (观测侧缓存与归一化基准;证书相关计算仍用 pf.mec() 精确值)。 - """ - - problem: int - # 由宿主 BayesLoop.__init__ 初始化;此处声明让 pylint 可见该诊断计数。 - no_shrink_measures: int = 0 - - # ------------------------------------------------------------ 候选构建 - def build_candidates(self) -> list[Candidate]: - """构建当前全部有效候选(固定槽位;训练/推理/heuristic 专家同源)。 - - 副作用:缓存每频道证书(``self._cert_cache``)与站点待测集 - (``self._station_pending_map``)供观测构建复用;调用方须在本 - 函数之后、任何状态变更之前构建观测。 - """ - config = self.config - detected = self.belief.channels_by_status(ChannelStatus.DETECTED) - by_slot: dict[int, Candidate] = {} - cert_cache: dict[int, object] = {} - station_map: dict[int, list[int]] = {} - - # --- clear 槽位:证书就绪且未因失败等待补测 - for channel in detected: - cert = self._best_certificate(channel) - cert_cache[channel] = cert - if cert is not None and cert.certified \ - and channel not in self._clear_failed: - by_slot[CLEAR_OFFSET + channel - 1] = Candidate( - CLEAR_OFFSET + channel - 1, "clear", tuple(cert.center), - channel=channel, - service_s=config.cost.clear_success_s, targets=1) - - # --- locate / probe 槽位:未就绪清除的已发现频道 - for channel in detected: - if CLEAR_OFFSET + channel - 1 in by_slot: - continue - region = self.belief.candidate_set(channel) - if region is None: - continue - blocked = self.blocked_probes.get(channel, []) \ - if self.problem == 4 else [] - if blocked: - point = self._hrl_probe_point(region, channel) - kind = "probe" - else: - point = self._select_point(channel) - kind = "locate" - if point is None: - continue - by_slot[LOCATE_OFFSET + channel - 1] = Candidate( - LOCATE_OFFSET + channel - 1, kind, tuple(point), channel=channel, - service_s=config.cost.measure_s + config.cost.switch_s, targets=1) - - # --- station 槽位:尚有 UNKNOWN 待测频道的覆盖站 - for index, point in enumerate(self.ledger.points): - pending = self._station_pending(index) - station_map[index] = pending - if not pending: - continue - switches = len(pending) - (1 if self.client.state.channel in pending else 0) - by_slot[STATION_OFFSET + index] = Candidate( - STATION_OFFSET + index, "station", tuple(point), - station_index=index, - service_s=(config.cost.measure_s * len(pending) - + config.cost.switch_s * max(switches, 0)), - targets=len(pending)) - - # --- fallback 槽位(仅问题4):遮挡梯子耗尽且格数在预算内 - if self.problem == 4: - for channel in detected: - blocked = self.blocked_probes.get(channel, []) - if len(blocked) < config.search.max_blocked_probes: - continue - region = self.belief.candidate_set(channel) - if region is None: - continue - cells = fallback_clear_cells(region.polygon, config) - if not cells or len(cells) > config.search.fallback_max_cells: - continue - by_slot[FALLBACK_OFFSET + channel - 1] = Candidate( - FALLBACK_OFFSET + channel - 1, "fallback", - tuple(region.mec()[0]), channel=channel, - service_s=config.cost.clear_fail_s * len(cells), - targets=len(cells)) - - self._cert_cache = cert_cache - self._station_pending_map = station_map - self._last_candidates = list(by_slot.values()) - return self._last_candidates - - def candidate_by_slot(self, candidates: list[Candidate], - action: int) -> Candidate | None: - for cand in candidates: - if cand.slot == int(action): - return cand - return None - - # ------------------------------------------------------------ 动作掩码 - def hrl_action_mask(self, candidates: list[Candidate]) -> np.ndarray: - """槽位有效性掩码:无候选槽位恒屏蔽(训练/推理共用)。""" - mask = np.zeros(N_CANDIDATES, dtype=bool) - for cand in candidates: - mask[cand.slot] = True - return mask - - # ------------------------------------------------------------ 观测 - def _hrl_obs_mec(self, channel: int) -> tuple[Vec2, float]: - """观测用 MEC:幸存子采样上的最小包围圆,按 pf.version 缓存。 - - 仅作策略观测特征(近似 MEU/σ),证书相关计算一律用 pf.mec() - 精确值——两者分开缓存,互不影响。 - """ - pf = self.particles[channel] - cached = self._obs_mec_cache.get(channel) - if cached is not None and cached[0] == pf.version: - return cached[1], cached[2] - points = pf.subsample(600) - if not points: - return (0.0, 0.0), 0.0 - from ..geometry.localization import smallest_enclosing_circle - center, radius = smallest_enclosing_circle(points) - self._obs_mec_cache[channel] = (pf.version, center, radius) - return center, radius - - def _hrl_channel_status_index(self, channel: int) -> int: - """六状态编码:UNKNOWN/DETECTED/TRACKING/LOCATED/CLEARED/ABSENT。""" - status = self.belief.channels[channel].status - if status is ChannelStatus.UNKNOWN: - return 0 - if status is ChannelStatus.CLEARED: - return 4 - if status is ChannelStatus.ABSENT: - return 5 - cert = getattr(self, "_cert_cache", {}).get(channel) - if cert is not None and getattr(cert, "certified", False): - return 3 - _, radius = self._hrl_obs_mec(channel) - return 1 if radius > 500.0 else 2 - - def hrl_observation(self, candidates: list[Candidate]) -> np.ndarray: - """构造高层观测(shape=(HIGH_OBS_DIM,),训练/推理逐位一致)。""" - config = self.config - field_cfg = config.field - position = self.client.state.position - belief = self.belief - - detected_count = len(belief.channels_by_status(ChannelStatus.DETECTED)) - accounted = sum(1 for ch in belief.channels.values() - if ch.status in (ChannelStatus.CLEARED, - ChannelStatus.ABSENT)) - cleared = len(self.cleared) - glob = [ - position[0] / POS_SCALE_M, - position[1] / POS_SCALE_M, - min(self.client.state.virtual_time_s, field_cfg.max_virtual_duration_s) - / field_cfg.max_virtual_duration_s, - cleared / 16.0, - accounted / CHANNEL_COUNT, - (self.client.state.channel - field_cfg.channel_min) - / max(field_cfg.channel_max - field_cfg.channel_min, 1), - float(self.problem == 4), - detected_count / 16.0, - ] - assert len(glob) == HIGH_GLOBAL_DIM - - pending_station = np.zeros(CHANNEL_COUNT + 1, dtype=bool) - for channels in getattr(self, "_station_pending_map", {}).values(): - for channel in channels: - pending_station[channel] = True - - channel_features: list[float] = [] - for channel in range(field_cfg.channel_min, field_cfg.channel_max + 1): - ch = belief.channels[channel] - status6 = [0.0] * 6 - status6[self._hrl_channel_status_index(channel)] = 1.0 - pf = self.particles[channel] - mec_visible = ch.status is ChannelStatus.DETECTED - if mec_visible: - center, radius = self._hrl_obs_mec(channel) - else: - center, radius = (0.0, 0.0), 0.0 - initial = max(self._initial_alive.get(channel, 1), 1) - channel_features.extend([ - *status6, - center[0] / POS_SCALE_M, - center[1] / POS_SCALE_M, - radius / RADIUS_SCALE_M, - math.log(len(pf) + 1) / math.log(initial + 1) - if initial > 1 else 0.0, - min(len(ch.measurements), MEASURE_COUNT_SCALE * 2) - / MEASURE_COUNT_SCALE / 2, - math.hypot(center[0] - position[0], center[1] - position[1]) - / POS_SCALE_M if mec_visible else 0.0, - len(self.blocked_probes.get(channel, [])) - / max(config.search.max_blocked_probes, 1) - if self.problem == 4 else 0.0, - 1.0 if (ch.status is ChannelStatus.UNKNOWN - and pending_station[channel]) else 0.0, - ]) - assert len(channel_features) == CHANNEL_COUNT * PER_CHANNEL_DIM - - by_slot = {cand.slot: cand for cand in candidates} - candidate_features: list[float] = [] - for slot in range(N_CANDIDATES): - cand = by_slot.get(slot) - if cand is None: - candidate_features.extend([0.0] * PER_CANDIDATE_DIM) - continue - dx, dy = cand.position[0] - position[0], cand.position[1] - position[1] - move_s = move_time(position, cand.position, config.cost) - candidate_features.extend([ - 1.0 if cand.kind == "clear" else 0.0, - 1.0 if cand.kind in ("locate", "probe") else 0.0, - 1.0 if cand.kind == "station" else 0.0, - 1.0 if cand.kind == "fallback" else 0.0, - dx / POS_SCALE_M, - dy / POS_SCALE_M, - min((move_s + cand.service_s) / COST_SCALE_S, 2.0), - min(cand.targets / 16.0, 1.0), - ]) - assert len(candidate_features) == N_CANDIDATES * PER_CANDIDATE_DIM - - observation = np.asarray(glob + channel_features + candidate_features, - dtype=np.float32) - assert observation.shape == (HIGH_OBS_DIM,) - return observation - - # ------------------------------------------------------------ 启发式专家 - def heuristic_action(self, candidates: list[Candidate]) -> int: - """把 BayesLoop 任务排序映射为槽位(BC 专家 + 无策略降级路径)。 - - 任务表与排序完全复用 :meth:`BayesLoop._build_tasks` / - :meth:`BayesLoop._order_tasks`;映射失败(如 Q4 梯子任务不在 - 任务表中)退化为最近有效候选。 - """ - by_slot = {cand.slot: cand for cand in candidates} - if not by_slot: - raise RuntimeError("heuristic_action:当前无可用候选") - try: - order = self._order_tasks(self._build_tasks()) - first = order[0] - if first.kind == "clear" and first.channel is not None: - slot = CLEAR_OFFSET + first.channel - 1 - elif first.kind == "locate" and first.channel is not None: - slot = LOCATE_OFFSET + first.channel - 1 - else: - slot = STATION_OFFSET + (first.station_index or 0) - if slot in by_slot: - return slot - except Exception: - pass - position = self.client.state.position - return min(by_slot, key=lambda s: ( - math.dist(position, by_slot[s].position), s)) - - # ------------------------------------------------------------ 决策执行 - def hrl_step(self, action: int, - candidates: list[Candidate] | None = None) -> StepOutcome: - """执行一次高层决策;candidates 为空则现场构建(训练环境逐位同源)。""" - action = int(action) - self._reset_step_recording() - old_virtual = self.client.state.virtual_time_s - if candidates is None: - candidates = self.build_candidates() - cand = self.candidate_by_slot(candidates, action) - if cand is None: - return StepOutcome(action=action, invalid=True) - if self.stop_reason is not None: - return StepOutcome(action=action, kind=cand.kind, - channel=cand.channel, invalid=True) - - if cand.kind == "station": - self._execute_station(cand.station_index) - elif cand.kind in ("locate", "probe"): - self._hrl_execute_locate(cand) - elif cand.kind == "clear": - self._hrl_execute_clear(cand) - elif cand.kind == "fallback": - self._hrl_execute_fallback(cand) - else: # pragma: no cover - 布局守卫 - raise ValueError(f"未知候选类型: {cand.kind}") - - outcome = StepOutcome(action=action, kind=cand.kind, - channel=cand.channel, - position_reached=tuple(self.client.state.position)) - outcome.delta_virtual_s = self.client.state.virtual_time_s - old_virtual - new_detections: list[int] = [] - info_gains: dict[int, float] = {} - redundant = False - for event in self._step_events: - if event["was_unknown"] and event["result"] in (DIRECTION, NEAR): - new_detections.append(event["channel"]) - gain = math.log10(event["pf_before"] + 1) - math.log10(event["pf_after"] + 1) - info_gains[event["channel"]] = (info_gains.get(event["channel"], 0.0) - + min(max(gain, 0.0), 2.0)) - redundant = redundant or event["redundant"] - outcome.new_detections = tuple(new_detections) - outcome.info_gains = info_gains - outcome.redundant = redundant - outcome.clear_success = tuple(self._step_clears) - self._step_clears = [] - return outcome - - # ------------------------------------------------------------ 执行原语 - def _hrl_execute_locate(self, cand: Candidate) -> None: - """定位测量(含 Q4 梯子探点):记录证据,不自动清除(高层决策)。""" - config = self.config - channel = cand.channel - pf = self.particles[channel] - before = len(pf) - outcome = self.client.measure(cand.position, channel) - self._record_measure(channel, cand.position, outcome) - self._may_clear.add(channel) - if self.problem == 4: - if outcome.result == NO_SIGNAL: - if channel not in self.directional_observed: - region = self.belief.candidate_set(channel) - safe = safe_disk_radius(region, config) if region else -1.0 - if safe >= 0 and math.dist(cand.position, region.mec()[0]) <= safe: - self.directional_observed.append(channel) - self.blocked_probes.setdefault(channel, []).append(cand.position) - else: - self.blocked_probes.pop(channel, None) - if len(pf) == before: - self._stall[channel] = self._stall.get(channel, 0) + 1 - self.no_shrink_measures += 1 - else: - self._stall[channel] = 0 - - def _hrl_execute_clear(self, cand: Candidate) -> None: - """证书清除:证书失效(不应被掩码允许)时静默跳过。""" - cert = self._best_certificate(cand.channel) - if cert is None or not cert.certified: - self._anomaly("hrl_clear_without_certificate", cand.channel) - return - if self._attempt_clear(cand.channel, cert.center, cert): - self._clear_failed.discard(cand.channel) - self._stall.pop(cand.channel, None) - else: - self._clear_failed.add(cand.channel) - self._may_clear.discard(cand.channel) - - def _hrl_execute_fallback(self, cand: Candidate) -> None: - """Q4 后备网格清除(与 DirectionalExtension._fallback_clear 同口径)。""" - channel = cand.channel - region = self.belief.candidate_set(channel) - if region is None: - return - config, session = self.config, self.config.session - cells = fallback_clear_cells(region.polygon, config) - entry = {"channel": channel, "cells": len(cells)} - self.fallback_log.append(entry) - if len(cells) > config.search.fallback_max_cells: - entry["outcome"] = "skipped_cell_cap" - return - remaining = self.client.real_remaining_s - if remaining is not None and len(cells) * session.real_rtt_p95_s \ - + session.reserve_exit_s > remaining: - entry["outcome"] = "skipped_budget" - return - remaining_cells = list(cells) - attempts = 0 - while remaining_cells: - if self._virtual_cap_reached(): - entry["outcome"] = "skipped_virtual_budget" - entry["attempts"] = attempts - return - cell = min(remaining_cells, key=lambda c: ( - math.dist(self.client.state.position, c), c)) - remaining_cells.remove(cell) - attempts += 1 - outcome = self.client.clear(cell, channel) - if outcome.result == CLEAR_SUCCESS: - self.belief.mark_cleared(channel) - self.cleared.append(channel) - self._step_clears.append(channel) - self.blocked_probes.pop(channel, None) - entry["outcome"] = "cleared" - entry["attempts"] = attempts - return - entry["outcome"] = "exhausted" - entry["attempts"] = attempts - self._anomaly("hrl_fallback_exhausted", channel, cells=len(cells)) - - def _hrl_probe_point(self, region, channel: int) -> Vec2: - """定向遮挡梯子探点(与 DirectionalExtension._next_probe 同口径)。""" - from ..planner import select_measurement_point - blocked = self.blocked_probes.get(channel, []) - center, radius = region.mec() - if not blocked: - return select_measurement_point(region, self.client.state.position, - self.config).position - safe = safe_disk_radius(region, self.config) - first = blocked[0] - if len(blocked) == 1 and safe >= 0: - dx, dy = center[0] - first[0], center[1] - first[1] - norm = math.hypot(dx, dy) - if norm <= 1e-9: - return (center[0] + safe, center[1]) - scale = min(1.0, safe / norm) - return (center[0] + dx * scale, center[1] + dy * scale) - base = math.atan2(first[1] - center[1], first[0] - center[0]) - azimuth = base + math.radians(45.0 * (len(blocked) - 1)) - return (center[0] + radius * math.cos(azimuth), - center[1] + radius * math.sin(azimuth)) - - # ------------------------------------------------------------ 事件捕获 - def _reset_step_recording(self) -> None: - self._step_events = [] - self._step_clears = [] - - def _record_event(self, **event) -> None: - self._step_events.append(event) diff --git a/src/mcm26b/particles.py b/src/mcm26b/particles.py index 49ca95e..87b2aec 100644 --- a/src/mcm26b/particles.py +++ b/src/mcm26b/particles.py @@ -28,6 +28,7 @@ m = sqrt(2)/2·h 是格心到格内任一点的最大距离。所有 kill 判定 from __future__ import annotations import math +import os from .config import ProblemConfig, Vec2 from .geometry.localization import smallest_enclosing_circle @@ -37,12 +38,38 @@ _ANG_EPS_DEG = 1e-9 # 角向 kill 比较的浮点余量 _DIST_EPS_M = 1e-9 _COARSE_FACTOR = 4 # 粗格每边聚合的细格数 +try: # numpy 仅作**可选**加速后端;缺失时全部回退纯 Python + import numpy as _np +except Exception: # pragma: no cover - 环境无 numpy 时走纯 Python 分支 + _np = None +if os.environ.get("MCM26B_NO_NUMPY"): # 强制纯 Python:对拍与回退验证用 + _np = None + def angular_gap(a_deg: float, b_deg: float) -> float: """两个方位角(度)的最小夹角。""" return abs((a_deg - b_deg + 180.0) % 360.0 - 180.0) +def as_sample_array(samples): + """把 [(x,y), ...] 采样转成 (n,2) float64 数组;numpy 缺失时原样返回。 + + 评分为 O(代表点 × 子采样) 的向量运算,是单局 CPU 的主要开销 + (实测占 72%)。调用方在每次选点前转换一次,评分函数按类型分派, + 两条实现(numpy / 纯 Python)语义逐位对齐,见 tests/test_particles.py。 + """ + if _np is None or isinstance(samples, _np.ndarray) or len(samples) == 0: + return samples + return _np.asarray(samples, dtype=float) + + +def _branch_radius_array(members) -> float: + """分支后验半径的数组版:到质心的最大距离。""" + centroid = members.mean(axis=0) + return float(_np.max(_np.hypot(members[:, 0] - centroid[0], + members[:, 1] - centroid[1]))) + + class ChannelParticles: """单个频道的网格幸存集。 @@ -95,6 +122,10 @@ class ChannelParticles: return (self.x0 + (i + 0.5) * self.spacing_m, self.x0 + (j + 0.5) * self.spacing_m) + def discard(self, indices: list[int]) -> None: + """公开删除入口:联合信念把"朝向不可能"的格一并删除时使用。""" + self._discard(indices) + def _discard(self, indices: list[int]) -> None: if not indices: return @@ -171,9 +202,17 @@ class ChannelParticles: self._discard(doomed) def apply_measure(self, station: Vec2, result: str, - svd_deg: float | None = None) -> None: - """按读数更新幸存集。真源保留性由 Voronoi 裕量保证(模块注释)。""" + svd_deg: float | None = None, *, + directional: bool = False) -> None: + """按读数更新幸存集。真源保留性由 Voronoi 裕量保证(模块注释)。 + + ``directional=True``(第四问):no_signal **不删空间候选**——定向源 + 的静默还可能来自朝向遮挡,单独删空间候选会误删真源;朝向维度由 + :class:`~mcm26b.belief.joint.JointBelief` 维护。 + """ if result == NO_SIGNAL: + if directional: + return # no_signal ⟹ dist > r_eff >= 1000:整格落入 B(s, 1000−m) 的删。 self._kill_disk(station, self.r_eff_min_m - self.margin_m) elif result == NEAR: @@ -263,8 +302,59 @@ class ChannelParticles: """按索引序均匀抽取的子采样(索引序≈空间序,代表点空间铺开)。""" return self.alive_points(limit=size) - def expected_survival(self, point: Vec2, subsample: list[Vec2], - representatives: list[Vec2]) -> float: + # ---------------------------------------------------- 向量化评分(可选) + def _expected_survival_vector(self, point: Vec2, sub, representatives) -> float: + """``expected_survival`` 的向量化实现(与纯 Python 版逐分支同语义)。""" + count = len(sub) + eps = 1.0 / count + dx, dy = sub[:, 0] - point[0], sub[:, 1] - point[1] + dist = _np.hypot(dx, dy) + within = int(_np.count_nonzero( + dist <= self.r_eff_min_m - self.margin_m + _DIST_EPS_M)) + log_keep_ns = math.log(max(1.0 - within / count, eps)) + bearing = _np.degrees(_np.arctan2(dy, dx)) + in_range = dist <= self.r_eff_max_m + self.margin_m + rdx, rdy = representatives[:, 0] - point[0], representatives[:, 1] - point[1] + rdist = _np.hypot(rdx, rdy) + rbearing = _np.degrees(_np.arctan2(rdy, rdx)) + gaps = _np.abs((bearing[None, :] - rbearing[:, None] + 180.0) % 360.0 - 180.0) + survivors = _np.count_nonzero( + (gaps <= self.half_angle_deg + _ANG_EPS_DEG) & in_range[None, :], axis=1) + p_ns = _np.clip((rdist - self.r_eff_min_m) + / (self.r_eff_max_m - self.r_eff_min_m), 0.0, 1.0) + keep_dir = _np.maximum(survivors / count, eps) + values = p_ns * log_keep_ns + (1.0 - p_ns) * _np.log(keep_dir) + near = rdist <= self.near_radius_m + self.margin_m + values = _np.where(near, math.log(eps), values) + return float(values.mean()) + + def _expected_posterior_radius_vector(self, point: Vec2, sub, + representatives) -> float: + """``expected_posterior_radius`` 的向量化实现。""" + eps_radius = self.spacing_m / 2.0 + dx, dy = sub[:, 0] - point[0], sub[:, 1] - point[1] + dist = _np.hypot(dx, dy) + bearing = _np.degrees(_np.arctan2(dy, dx)) + keep_ns = dist > self.r_eff_min_m - self.margin_m + r_ns = (_branch_radius_array(sub[keep_ns]) if keep_ns.any() + else eps_radius) + rdx, rdy = representatives[:, 0] - point[0], representatives[:, 1] - point[1] + rdist = _np.hypot(rdx, rdy) + rbearing = _np.degrees(_np.arctan2(rdy, rdx)) + gaps = _np.abs((bearing[None, :] - rbearing[:, None] + 180.0) % 360.0 - 180.0) + dir_mask = ((gaps <= self.half_angle_deg + _ANG_EPS_DEG) + & (dist[None, :] <= self.r_eff_max_m + self.margin_m)) + r_dir = _np.array([_branch_radius_array(sub[row]) if row.any() + else eps_radius for row in dir_mask]) + p_ns = _np.clip((rdist - self.r_eff_min_m) + / (self.r_eff_max_m - self.r_eff_min_m), 0.0, 1.0) + near = rdist <= self.near_radius_m + self.margin_m + values = _np.where(near, self.near_radius_m + self.margin_m, + p_ns * r_ns + (1.0 - p_ns) * r_dir) + return float(values.mean()) + + def expected_survival(self, point: Vec2, subsample, + representatives) -> float: """E[log 幸存占比]:越小该测点的期望信息增益越大。 r_eff 不确定性解析积分:dist∈(1000,1500] 时按 r_eff~U(1000,1500) @@ -273,8 +363,11 @@ class ChannelParticles: - direction 分支:以代表点方位为期望读数,角域 ∩ B(point,1500+m) 内幸存; - near 分支(dist <= 5+m):可行集收缩到 5m 盘,幸存占比趋近 0。 """ - if not self.alive or not subsample: + if not self.alive or len(subsample) == 0 or len(representatives) == 0: return 0.0 + if _np is not None and isinstance(subsample, _np.ndarray) \ + and isinstance(representatives, _np.ndarray): + return self._expected_survival_vector(point, subsample, representatives) eps = 1.0 / len(subsample) keep_ns = max(1.0 - self.fraction_within(subsample, point, self.r_eff_min_m - self.margin_m), @@ -302,24 +395,28 @@ class ChannelParticles: total += p_ns * log_keep_ns + (1.0 - p_ns) * math.log(keep_dir) return total / max(len(representatives), 1) - def fraction_within(self, samples: list[Vec2], point: Vec2, - radius_m: float) -> float: - if not samples: + def fraction_within(self, samples, point: Vec2, radius_m: float) -> float: + if len(samples) == 0: return 0.0 reach = radius_m + _DIST_EPS_M + if _np is not None and isinstance(samples, _np.ndarray): + distance = _np.hypot(samples[:, 0] - point[0], samples[:, 1] - point[1]) + return float(_np.count_nonzero(distance <= reach)) / len(samples) count = sum(1 for p in samples if math.dist(p, point) <= reach) return count / len(samples) - def _branch_radius(self, members: list[Vec2]) -> float: + def _branch_radius(self, members) -> float: """分支后验的半径代理:幸存子采样到其质心的最大距离(O(n),免 Welzl)。""" - if not members: + if len(members) == 0: return 0.0 + if _np is not None and isinstance(members, _np.ndarray): + return _branch_radius_array(members) mx = sum(p[0] for p in members) / len(members) my = sum(p[1] for p in members) / len(members) return max(math.hypot(p[0] - mx, p[1] - my) for p in members) - def expected_posterior_radius(self, point: Vec2, subsample: list[Vec2], - representatives: list[Vec2]) -> float: + def expected_posterior_radius(self, point: Vec2, subsample, + representatives) -> float: """一次测量后期望后验半径(米):选点主指标,直指清除证书阈值。 对每个代表假设(真值候选)按 r_eff~U(1000,1500) 解析积分 @@ -328,8 +425,12 @@ class ChannelParticles: 与几何版 worst-posterior 同族,但作用于含负观测的非凸幸存集, 且以期望代替最坏(代表点覆盖幸存集主轴)。 """ - if not self.alive or not subsample: + if not self.alive or len(subsample) == 0 or len(representatives) == 0: return 0.0 + if _np is not None and isinstance(subsample, _np.ndarray) \ + and isinstance(representatives, _np.ndarray): + return self._expected_posterior_radius_vector( + point, subsample, representatives) eps_radius = self.spacing_m / 2.0 total = 0.0 for rep in representatives: diff --git a/src/mcm26b/planner/__init__.py b/src/mcm26b/planner/__init__.py index 2b3b20e..000f818 100644 --- a/src/mcm26b/planner/__init__.py +++ b/src/mcm26b/planner/__init__.py @@ -36,14 +36,17 @@ from dataclasses import dataclass from ..belief import (BeliefState, CandidateRegion, ChannelStatus, InconsistentBelief, clip_halfplane) +from ..belief.joint import JointBelief from ..config import ProblemConfig, Vec2 from ..coverage import CoverageLedger from ..evaluation import recompute_virtual_time, summarize +from ..guarantee import plan_instance, seven_plan, square_49_plan from ..protocol.client import (DeadlineExceeded, ProtocolError, SimulatorClient) from ..protocol.rules import CLEAR_SUCCESS, DIRECTION, NEAR, NO_SIGNAL from ..protocol.timing import move_time from ..protocol.transport import TransportError +from ..routing import improve_open_path def bearing_deg(a: Vec2, b: Vec2) -> float: @@ -211,10 +214,18 @@ class OmnidirectionalLoop: self.client = client self.config = config self.belief = BeliefState(config) - self.ledger = CoverageLedger(config) + # 覆盖计划是"可离线搜索、可在运行期校验"的一等对象;基类默认保持 + # 历史 49 点表(grid49_immediate 基线口径不变),各问题策略自行覆盖。 + self.coverage_plan = square_49_plan() + self.ledger = CoverageLedger(config, points=list(self.coverage_plan.points)) self.cleared: list[int] = [] self.anomalies: list[dict] = [] self.stop_reason: str | None = None + # 逐频道缺席证据来源(pf_empty / coverage),供审计与论文逐条追溯。 + self.absence_evidence: dict[int, str] = {} + # "同一 0.5m 测点 × 同一频道"的重复检测计数:历史上一次官方演练 + # 有 98.84% 的虚拟时间耗在空复扫上,本计数是该问题的回归指标。 + self.redundant_rescan_measures = 0 # 首次达成"每频道均已清除或证明不存在"的虚拟时刻(找全证明)。 self.accounted_virtual_time_s: float | None = None # 证书有效但 /clear 失败后必须先补测再重试,避免在同一证书上 @@ -267,14 +278,27 @@ class OmnidirectionalLoop: return summary # ------------------------------------------------------------ 预算与证明 + def _min_virtual_reserve(self) -> float: + """单动作耗时上界的保守估计,用于虚拟安全余量。 + + 上界 = 2 × 最远站点距离 / 速度 + 检测 + 换频(机器人不会跑到覆盖 + 计划包围区之外执行任务)。配置值通常更宽松;本函数保证即使配置被 + 调小,余量也足以完成最后一个动作而不触及 100 小时上限。 + """ + reach = max((math.dist((0.0, 0.0), point) for point in self.ledger.points), + default=0.0) + action_bound = (2.0 * reach / self.config.cost.speed_mps + + self.config.cost.measure_s + self.config.cost.switch_s) + return max(self.config.search.virtual_reserve_s, action_bound) + def _virtual_cap_reached(self) -> bool: """虚拟安全余量不足:置 stop_reason 并返回 True,调用方立即收尾。 - 余量须大于单次动作耗时上界(网格最远移动 ~1200s + 检测 5s), - search.virtual_reserve_s=10000s [工程] 提供充分裕度,避免触及 + 余量须大于单次动作耗时上界(见 :meth:`_min_virtual_reserve`), + `search.virtual_reserve_s=10000s` [工程] 提供充分裕度,避免触及 附件2 §4.5 的 100 小时上限被模拟器强制结束。 """ - if (self.client.state.virtual_time_s + self.config.search.virtual_reserve_s + if (self.client.state.virtual_time_s + self._min_virtual_reserve() < self.config.field.max_virtual_duration_s): return False self.stop_reason = "virtual_time_cap" @@ -466,6 +490,7 @@ class OmnidirectionalLoop: if belief.status is ChannelStatus.UNKNOWN \ and self.ledger.coverage_complete(channel): self.belief.mark_absent(channel) + self.absence_evidence[channel] = "coverage" def _resolve_detected(self) -> None: """覆盖完成后,对仍未清除的 DETECTED 频道做第二轮定位。 @@ -503,8 +528,19 @@ class OmnidirectionalLoop: completed = (self._abort_detail is None and (len(self.cleared) >= self.config.field.source_count_max or not unresolved)) + # 完成依据必须显式区分"数量上界"与"逐频道缺席/清除证明", + # 否则论文与审计会把 16 源截断误读为逐频道证明。 + if self._abort_detail is not None: + completion_basis = "incomplete" + elif len(self.cleared) >= self.config.field.source_count_max: + completion_basis = "count_cap" + elif not unresolved: + completion_basis = "per_channel_proof" + else: + completion_basis = "incomplete" summary = { "completed": completed, + "completion_basis": completion_basis, "stop_reason": self.stop_reason, "exit_reason": "exit_unreachable" if info is None else info.reason, "virtual_time_s": virtual_time_s, @@ -512,9 +548,19 @@ class OmnidirectionalLoop: if self.accounted_virtual_time_s is not None else None), "persistent_search": self.config.search.persistent_search, + "virtual_reserve_s": round(self._min_virtual_reserve(), 3), + "coverage_plan": self.coverage_plan.name, + "coverage_points": len(self.coverage_plan.points), + "coverage_plan_points": [[p[0], p[1]] for p in self.coverage_plan.points], + "coverage_plan_certificate": ( + self.coverage_plan.certificate.as_dict() + if self.coverage_plan.certificate is not None else None), "cleared_channels": cleared, "absent_channels": absent, "unresolved_channels": unresolved, + "absence_evidence": {str(channel): self.absence_evidence[channel] + for channel in sorted(absent)}, + "redundant_rescan_measures": self.redundant_rescan_measures, "measures": stats["measures"], "clears": stats["clears"], "clear_success": stats["cleared"], @@ -597,9 +643,18 @@ class DirectionalExtension(OmnidirectionalLoop): def __init__(self, client: SimulatorClient, config: ProblemConfig = ProblemConfig()): super().__init__(client, config) + # P0-2:第四问切换到同一保证下的最小命中集(默认 q4_mincover_v1)。 + self.coverage_plan = plan_instance(config.search.q4_coverage_plan, + verify=config.search.verify_coverage_plan) + self.ledger = CoverageLedger(config, points=list(self.coverage_plan.points)) self.directional_observed: list[int] = [] # 观测到定向性的频道 self.blocked_probes: dict[int, list[Vec2]] = {} self.fallback_log: list[dict] = [] # 后备清除逐次留痕 + # P0-3:(位置 × 朝向) 联合可行集,仅在频道首次被看见时惰性建立, + # 使其初始化与更新成本只落在"确实存在定向源"的频道上。 + self.joint: dict[int, JointBelief] = {} + self.joint_absent_channels: list[int] = [] + self.visibility_probes = 0 # 由联合信念选出的探点数 def _coverage_phase(self) -> None: """49站的定向覆盖证明不变;每站先串行扫频,再就近服务已发现源。 @@ -619,7 +674,7 @@ class DirectionalExtension(OmnidirectionalLoop): return outcome = self.client.measure(point, channel) self.ledger.mark_measured(channel, index) - self.belief.update_measure(channel, point, outcome.result, outcome.svd_deg) + self._observe(channel, point, outcome.result, outcome.svd_deg) if outcome.result == NEAR: cert = clear_certificate( self.belief.candidate_set(channel), channel, self.config) @@ -666,8 +721,7 @@ class DirectionalExtension(OmnidirectionalLoop): within_range = (math.dist(point, region.mec()[0]) <= safe_disk_radius(region, self.config)) outcome = self.client.measure(point, channel) - self.belief.update_measure(channel, point, outcome.result, - outcome.svd_deg) + self._observe(channel, point, outcome.result, outcome.svd_deg) self._may_clear.add(channel) if outcome.result == NO_SIGNAL: if within_range and channel not in self.directional_observed: @@ -688,6 +742,139 @@ class DirectionalExtension(OmnidirectionalLoop): self._may_clear.discard(channel) return self._fallback_clear(channel, region) + def _observe(self, channel: int, point: Vec2, result: str, + svd_deg: float | None) -> None: + """同步更新凸候选集与 (位置 × 朝向) 联合可行集。 + + 联合集只在频道首次被看见(direction/near)时建立:从未被看见的 + 频道由覆盖证明负责缺席,不需要朝向维度。联合集一旦为空,直接给出 + 该频道的缺席证明(严格,与覆盖证明同一条件),可提前停止对其检测。 + """ + self.belief.update_measure(channel, point, result, svd_deg) + if not self.config.search.directional_joint_belief: + return + joint = self.joint.get(channel) + if joint is None: + if result not in (DIRECTION, NEAR): + return + joint = JointBelief(self.config) + self.joint[channel] = joint + joint.apply(point, result, svd_deg) + if joint.is_absent() and self.belief.channels[channel].status \ + is not ChannelStatus.CLEARED: + self.belief.mark_absent(channel) + self.absence_evidence[channel] = "joint_empty" + if channel not in self.joint_absent_channels: + self.joint_absent_channels.append(channel) + + def _probe_candidates(self, region: CandidateRegion, channel: int) -> list[Vec2]: + """可见性选点的候选点族:保证接收点 + 对跖点 + 环探 + **抵近点**。 + + D1 关键结构性改动:旧点族全部围绕 MEC 圆心固定环采样,远距离不收敛时 + 没有"主动靠近"这一动作,只能退化到 20m 网格盲清。现在补上 + ``center + α·(当前位置 − center)``(α∈approach_fractions,α=0 即圆心) + 的抵近序列,使策略可以在保持可见的前提下逐次逼近真源,最终以正常 + 角域证书或 near 收尾。 + """ + center, radius = region.mec() + position = self.client.state.position + candidates = [select_measurement_point( + region, position, self.config).position] + safe = safe_disk_radius(region, self.config) + blocked = self.blocked_probes.get(channel, []) + if blocked and safe >= 0: + dx, dy = center[0] - blocked[0][0], center[1] - blocked[0][1] + norm = math.hypot(dx, dy) + if norm > 1e-9: + scale = min(1.0, safe / norm) + candidates.append((center[0] + dx * scale, center[1] + dy * scale)) + # 抵近点:从 MEC 圆心到当前点的插值序列(含圆心本身)。 + for fraction in self.config.search.approach_fractions: + candidates.append((center[0] + (position[0] - center[0]) * fraction, + center[1] + (position[1] - center[1]) * fraction)) + for factor in (0.5, 1.0, 1.5): + ring = max(radius * factor, 2.0 * self.config.field.near_radius_m) + for step in range(8): + angle = math.pi * step / 4.0 + candidates.append((center[0] + ring * math.cos(angle), + center[1] + ring * math.sin(angle))) + unique: list[Vec2] = [] + seen: set[tuple[int, int]] = set() + blocked_keys = {(int(round(point[0] * 2)), int(round(point[1] * 2))) + for point in blocked} \ + if self.config.search.probe_exclude_blocked else set() + for point in candidates: + key = (int(round(point[0] * 2)), int(round(point[1] * 2))) + if key in seen or key in blocked_keys: + continue # 已测过且被遮挡的点:再测不会有任何新信息 + seen.add(key) + unique.append(point) + return unique + + def _visibility_probe(self, region: CandidateRegion, channel: int) -> Vec2 | None: + """按联合信念选探点;联合信念不可用时返回 None(退回梯子)。 + + 三种口径(只影响选点顺序,不承担任何安全责任): + + - ``nearest_visible``(默认):先按可见概率过滤(只保留 + ``prob_detect ≥ ratio × max`` 的候选,避免选中"实际必然被朝向遮挡"的 + 点),再取 ``当前位置→q→MEC 圆心`` 移动最省者。9 场景 core 实测: + 后备盲清 125.7 → 4.3 次/局、T 9225 → 8602 s、墙钟最低。 + - ``expected_radius``:在同样过滤后最小化 + ``E[后验 MEC 半径](q) + λ·移动``。λ=5 时与上面几乎同分(8604 s), + λ 很小时(0.05)值函数主导,为信息多绕路(9740 s)——本题 + "看得见且少走路"比"单步信息量最大"更重要。 + - ``visibility``(旧口径):最大化 ``prob_detect/(移动+6)``,会反复选中 + 同一个近处被遮挡点(实测 9225 s、后备 125.6 次)。 + """ + joint = self.joint.get(channel) + if joint is None or joint.is_absent(): + return None + position = self.client.state.position + service_s = self.config.cost.measure_s + self.config.cost.switch_s + candidates = self._probe_candidates(region, channel) + if not candidates: + return None + mode = self.config.search.probe_score_mode + if mode == "visibility": + best_point, best_score = None, None + for point in candidates: + probability = joint.prob_detect(point) + if probability <= 0.0: + continue + score = -(probability / (move_time(position, point, self.config.cost) + + service_s)) + if best_score is None or score < best_score: + best_point, best_score = point, score + if best_point is not None: + self.visibility_probes += 1 + return best_point + scored = [(joint.prob_detect(point), point) for point in candidates] + peak = max(probability for probability, _ in scored) + ratio = self.config.search.probe_visibility_ratio + keep = [point for probability, point in scored + if probability >= ratio * peak] or [point for _, point in scored] + center = region.mec()[0] + weight = self.config.search.probe_lambda_move_s + + def approach_cost(point: Vec2) -> float: + return (move_time(position, point, self.config.cost) + + move_time(point, center, self.config.cost) + service_s) + + if mode == "nearest_visible": + # λ 很大时值函数项对 argmin 已无影响:直接取"可见候选中移动最省", + # 省掉每个候选一次期望后验半径计算(单局墙钟 −3 s)。 + best = min(keep, key=lambda point: (approach_cost(point), point)) + self.visibility_probes += 1 + return best + best = min(keep, key=lambda point: ( + joint.expected_posterior_radius(point) + weight * approach_cost(point), + point)) + self.visibility_probes += 1 + return best + + + def _next_probe(self, region: CandidateRegion, channel: int) -> Vec2: """定向遮挡下的探点升级梯子 [工程]。 @@ -699,6 +886,9 @@ class DirectionalExtension(OmnidirectionalLoop): 切点,固定步进环探可以全部漏过。梯子只提高提前命中概率, 不构成接收或命中保证;完备性完全由后备清除兜底。 """ + visibility = self._visibility_probe(region, channel) + if visibility is not None: + return visibility blocked = self.blocked_probes.get(channel, []) center, radius = region.mec() if not blocked: @@ -743,14 +933,12 @@ class DirectionalExtension(OmnidirectionalLoop): entry["outcome"] = "skipped_budget" return False attempts = 0 - remaining_cells = list(cells) - while remaining_cells: + order = self._fallback_order(cells) + for cell in order: if self._virtual_cap_reached(): entry["outcome"] = "skipped_virtual_budget" entry["attempts"] = attempts return False - cell = min(remaining_cells, key=lambda c: (math.dist(self.client.state.position, c), c)) - remaining_cells.remove(cell) attempts += 1 outcome = self.client.clear(cell, channel) if outcome.result == CLEAR_SUCCESS: @@ -767,6 +955,28 @@ class DirectionalExtension(OmnidirectionalLoop): cells=len(cells)) return False + def _fallback_order(self, cells: list[Vec2]) -> list[Vec2]: + """后备清除的走格顺序:最近邻打底 + 2-opt(可选 Or-opt)改进。 + + 旧实现每步重新 ``min(remaining, key=dist)``,等价于最近邻开放路径 + (典型为最优的 1.2–1.3 倍)且每次重扫 O(k²)。这里一次性求解改进序 + (D3),把格间移动压到接近最优;格数不变,故完备性不变。 + """ + if not cells: + return [] + if not self.config.search.fallback_optimize_tour or len(cells) < 4: + position = self.client.state.position + remaining = list(cells) + order: list[Vec2] = [] + while remaining: + nxt = min(remaining, key=lambda c: (math.dist(position, c), c)) + remaining.remove(nxt) + order.append(nxt) + position = nxt + return order + return improve_open_path([tuple(c) for c in cells], + self.client.state.position) + # ------------------------------------------------------------ 收尾 def _summary(self, info) -> dict: report = super()._summary(info) @@ -775,6 +985,10 @@ class DirectionalExtension(OmnidirectionalLoop): # 后备 /clear 请求计入总请求口径,仅统计检测次数会低估现实耗时。 report["fallback_clear_attempts"] = sum( entry.get("attempts", 0) for entry in self.fallback_log) + report["visibility_probes"] = self.visibility_probes + report["joint_absent_channels"] = list(self.joint_absent_channels) + report["joint_final"] = {str(channel): belief.summary() + for channel, belief in sorted(self.joint.items())} return report diff --git a/src/mcm26b/planner/bayes_loop.py b/src/mcm26b/planner/bayes_loop.py index 831d7fd..4a15678 100644 --- a/src/mcm26b/planner/bayes_loop.py +++ b/src/mcm26b/planner/bayes_loop.py @@ -24,13 +24,14 @@ from dataclasses import dataclass from ..belief import CandidateRegion, ChannelStatus from ..config import ProblemConfig, Vec2 from ..coverage import CoverageLedger -from ..particles import ChannelParticles +from ..particles import ChannelParticles, as_sample_array from ..protocol.client import SimulatorClient from ..protocol.rules import DIRECTION, NEAR, NO_SIGNAL from ..protocol.timing import move_time from . import (ClearCertificate, OmnidirectionalLoop, clear_certificate, candidate_points, safe_disk_radius, select_measurement_point) -from .seven import seven_points, validate_seven_coverage +from .seven import validate_seven_coverage +from ..guarantee import seven_plan @dataclass(frozen=True) @@ -57,8 +58,9 @@ class BayesLoop(OmnidirectionalLoop): config: ProblemConfig = ProblemConfig()): super().__init__(client, config) validate_seven_coverage(config.bayes.station_ring_radius_m, config) + self.coverage_plan = seven_plan(config.bayes.station_ring_radius_m) self.ledger = CoverageLedger( - config, points=seven_points(config.bayes.station_ring_radius_m)) + config, points=list(self.coverage_plan.points)) self.particles = {channel: ChannelParticles(config) for channel in self.belief.channels} self._measured_points: dict[int, set[tuple[int, int]]] = {} @@ -86,6 +88,7 @@ class BayesLoop(OmnidirectionalLoop): tasks = self._build_tasks() if not tasks: return False + tasks = self._refine_locate_tasks(tasks) order = self._order_tasks(tasks) self._execute_task(order[0]) return True @@ -145,6 +148,39 @@ class BayesLoop(OmnidirectionalLoop): pending.append(channel) return pending + def _fused_channels_at(self, index: int) -> list[int]: + """本站要测的频道 = 未发现(UNKNOWN) + 已发现但尚未定证(DETECTED)。 + + P0-1:把定位并入覆盖巡回。站点三角化可行性(方案 §1.3 F11): + 99.28% 的源位置有 ≥2 个站在 r_eff_max=1500m 内,最佳交会角中位 + 122.9°、5 分位 58.5°,因此"顺路取第二条方位线"对绝大多数源成立。 + 已有证书、已在同一 0.5m 测点测过、或该点必 no_signal 的频道跳过。 + + 实测结论(2026-09-12,`output/suite/q3-fuse-ab*`):本机制**不划算**。 + 七站环上通常只有 2–3 个站能对该源取得有效方位线,交会角也不足以 + 直接换到 20m 证书,专用信息增益探点仍然必要;仅在站点顺带测量等于 + 平白多花约 11 次检测(+0.8%),若同时抑制专用探点则 +45.6%(20/20 + 场景更慢)。默认关闭,保留代码以便复现与后续研究。 + """ + point = self.ledger.points[index] + channels = self._station_pending(index) + selected = set(channels) + if not self.config.bayes.fuse_localize_into_tour: + return channels + for channel in self.belief.channels_by_status(ChannelStatus.DETECTED): + if channel in selected or self.ledger.measured_at(channel, index): + continue + if _point_key(point) in self._measured_points.get(channel, set()): + continue + cert = self._best_certificate(channel) + if cert is not None and cert.certified: + continue # 已有证书:交给清除任务,不再多测 + if self._skip_station_channel(channel, index, point): + continue # 幸存集都在 1500m 外:该点必 no_signal + channels.append(channel) + selected.add(channel) + return channels + def _skip_station_channel(self, channel: int, index: int, point: Vec2) -> bool: """跳测规则(按 pf.version 缓存;幸存集单调收缩,判定单调)。""" pf = self.particles[channel] @@ -160,7 +196,7 @@ class BayesLoop(OmnidirectionalLoop): def _build_tasks(self) -> list[Task]: tasks: list[Task] = [] for index, point in enumerate(self.ledger.points): - pending = self._station_pending(index) + pending = self._fused_channels_at(index) if not pending: continue switches = len(pending) - (1 if self.client.state.channel in pending else 0) @@ -176,6 +212,8 @@ class BayesLoop(OmnidirectionalLoop): self.config.cost.clear_success_s, channel=channel)) continue + if self._defer_to_station(channel): + continue # 下一条方位线可由"本就要去的站点"顺路提供 point = self._select_point(channel) if point is None: continue @@ -184,19 +222,155 @@ class BayesLoop(OmnidirectionalLoop): channel=channel)) return tasks + def _defer_to_station(self, channel: int) -> bool: + """该频道能否由"本就要去的站点"提供下一条方位线。 + + P0-1 的关键:仅仅在站点顺带测量是不够的(那只是多做一次检测), + 必须同时**抑制专用探点任务**,否则滚动排序仍会优先飞向更近的探点。 + 判据要求该站本来就有 UNKNOWN 频道待测(覆盖巡回必须去),因此不会 + 为了等一条方位线而制造新的绕行,也不会出现"无任务可做"的死锁: + 站点扫完后 ``_station_pending`` 为空,探点任务自然恢复。 + """ + if not self.config.bayes.fuse_localize_into_tour: + return False + for index, point in enumerate(self.ledger.points): + if not self._station_pending(index): + continue + if self.ledger.measured_at(channel, index): + continue + if _point_key(point) in self._measured_points.get(channel, set()): + continue + if self._skip_station_channel(channel, index, point): + continue + return True + return False + # ------------------------------------------------------------ 任务排序 def _order_tasks(self, tasks: list[Task]) -> list[Task]: - """开放路径排序:最近邻打底,2-opt 改进(终点自由,不回起点)。""" + """开放路径排序:小任务表用精确 DP,否则最近邻 + 2-opt。 + + Held-Karp(S5/T1)把"已访问集合 × 结束时测向频道"并入状态,因此换频 + 代价是精确的,而不是 :meth:`_path_cost` 里"按频道排序"的贪心近似。 + """ if len(tasks) <= 2: ordered = sorted(tasks, key=lambda t: ( move_time(self.client.state.position, t.position, self.config.cost), t.kind, t.channel or 0)) return min((ordered, ordered[::-1]), key=self._path_cost) + limit = self.config.bayes.exact_order_limit + if 0 < limit and len(tasks) <= limit: + exact = self._exact_order(tasks) + if exact is not None: + return exact order = self._nearest_order(tasks) if not self.config.bayes.two_opt_enabled: return order return self._two_opt(order) + def _service_and_exit(self, task: Task, + channel: int) -> tuple[float, int]: + """任务在进入频道 ``channel`` 时的固有耗时与离开后的测向频道。""" + cost = self.config.cost + if task.kind == "locate": + return (cost.measure_s + (cost.switch_s if channel != task.channel else 0.0), + task.channel) + if task.kind == "station" and task.station_channels: + pending = sorted(task.station_channels, + key=lambda c: (c != channel, c)) + switches = len(pending) - (1 if channel in pending else 0) + return (cost.measure_s * len(pending) + cost.switch_s * switches, + pending[-1]) + return task.service_s, channel + + def _exact_order(self, tasks: list[Task]) -> list[Task] | None: + """Held-Karp 精确开放路径(起点固定、终点自由,含换频状态)。 + + 状态 ``(mask, c)`` = 已访问任务集 mask、离开最后一个任务后测向频道为 c; + 频道取值域只需 {当前频道} ∪ {locate 频道} ∪ {station 离开频道}。 + 规模 ``2^n·n·|C|``;n 超过 :attr:`BayesConfig.exact_order_limit` 时由 + 调用方回退启发式。返回 ``None`` 表示状态过大(防御性)。 + """ + n = len(tasks) + if n <= 1: + return list(tasks) + start = self.client.state.position + init = self.client.state.channel + channels = {init} + for task in tasks: + if task.kind == "locate": + channels.add(task.channel) + elif task.kind == "station" and task.station_channels: + # 离开频道 = 按"当前频道优先"排序后的最后一个:通常是最大值; + # 进入频道恰为最大值时退化为次大值,故两者都要进状态空间。 + ordered = sorted(task.station_channels) + channels.add(ordered[-1]) + if len(ordered) > 1: + channels.add(ordered[-2]) + channels = sorted(channels) + width = len(channels) + if width * (1 << n) * n > 4_000_000: + return None + index_of = {channel: i for i, channel in enumerate(channels)} + c_init = index_of[init] + service: list[list[float]] = [] + exits: list[list[int]] = [] + for task in tasks: + row_service, row_exit = [], [] + for channel in channels: + value, exit_channel = self._service_and_exit(task, channel) + row_service.append(value) + row_exit.append(index_of[exit_channel]) + service.append(row_service) + exits.append(row_exit) + move = [[move_time(tasks[i].position, tasks[j].position, self.config.cost) + for j in range(n)] for i in range(n)] + from_start = [move_time(start, task.position, self.config.cost) + for task in tasks] + inf = float("inf") + # dp[(mask, ci)] = 最小代价;parent[(mask, ci)] = (上一 mask, 上一 ci) + dp: dict[tuple[int, int], float] = {} + last_task: dict[tuple[int, int], int] = {} + parent: dict[tuple[int, int], tuple[int, int] | None] = {} + for k in range(n): + key = (1 << k, exits[k][c_init]) + value = from_start[k] + service[k][c_init] + if value < dp.get(key, inf): + dp[key] = value + last_task[key] = k + parent[key] = None + for mask in range(1, 1 << n): + for ci in range(width): + state = (mask, ci) + cost = dp.get(state) + if cost is None: + continue + for k in range(n): + if (mask >> k) & 1: + continue + nxt = (mask | (1 << k), exits[k][ci]) + value = cost + move[last_task[state]][k] + service[k][ci] + if value < dp.get(nxt, inf) - 1e-12: + dp[nxt] = value + last_task[nxt] = k + parent[nxt] = state + full = (1 << n) - 1 + best_key, best_cost = None, inf + for ci in range(width): + state = (full, ci) + if state in dp and dp[state] < best_cost: + best_key, best_cost = state, dp[state] + if best_key is None: + return None + order: list[Task] = [] + key: tuple[int, int] | None = best_key + while key is not None: + order.append(tasks[last_task[key]]) + key = parent[key] + order.reverse() + return order + + + def _nearest_order(self, tasks: list[Task]) -> list[Task]: remaining = list(tasks) order = [] @@ -263,18 +437,26 @@ class BayesLoop(OmnidirectionalLoop): self._execute_locate(task.channel, task.position) def _execute_station(self, index: int) -> None: - """单站批量扫频:只测待测频道(跳测规则已过滤),扫完即返回重排。""" + """单站批量扫频:只测待测频道(跳测规则已过滤),扫完即返回重排。 + + P0-1:本站同时测量"已发现未定证"频道,使第二/第三条方位线在巡回 + 途中顺路取得;证书一旦成立即就地清除,不额外绕行。 + """ point = self.ledger.points[index] - pending = self._station_pending(index) + pending = self._fused_channels_at(index) unknown = [c for c, b in self.belief.channels.items() if b.status is ChannelStatus.UNKNOWN] - self.skipped_measures += len(unknown) - len(pending) + self.skipped_measures += len(unknown) - len( + [c for c in pending if self.belief.channels[c].status + is ChannelStatus.UNKNOWN]) # 当前频道优先,减少换频;同站 near 直接清除不打断扫频 pending.sort(key=lambda c: (c != self.client.state.channel, c)) for channel in pending: if self.stop_reason is not None or self._count_limit_reached() \ or self._virtual_cap_reached(): return + detected_before = (self.belief.channels[channel].status + is ChannelStatus.DETECTED) outcome = self.client.measure(point, channel) self.ledger.mark_measured(channel, index) self._record_measure(channel, point, outcome) @@ -291,6 +473,25 @@ class BayesLoop(OmnidirectionalLoop): self._may_clear.discard(channel) else: self._anomaly("near_without_certificate", channel, position=point) + continue + if not detected_before: + continue + if outcome.result == NO_SIGNAL: + # 该频道已被发现:保证接收盘内不可能 no_signal,属守恒性异常 + region = self.belief.candidate_set(channel) + safe = (safe_disk_radius(region, self.config) + if region is not None else -1.0) + if safe >= 0 and math.dist(point, region.mec()[0]) <= safe: + self._anomaly("no_signal_in_safe_disk", channel, + position=point) + continue + cert = self._best_certificate(channel) + if cert is not None and cert.certified: + if self._attempt_clear(channel, cert.center, cert): + self._clear_failed.discard(channel) + else: + self._clear_failed.add(channel) + self._may_clear.discard(channel) def _execute_locate(self, channel: int, point: Vec2) -> None: """单步定位测量:执行后立即重排(滚动时域),收敛则顺路清除。""" @@ -325,7 +526,13 @@ class BayesLoop(OmnidirectionalLoop): """belief(凸证书)与 PF(幸存集)同步更新;PF 空即证缺席。""" self.belief.update_measure(channel, position, outcome.result, outcome.svd_deg) - self._measured_points.setdefault(channel, set()).add(_point_key(position)) + # 同一 0.5m 测点 × 同一频道的重复检测:历史上一次官方演练有 98.84% + # 的虚拟时间耗在空复扫上,本计数是该问题的回归指标。 + key = _point_key(position) + seen = self._measured_points.setdefault(channel, set()) + if key in seen: + self.redundant_rescan_measures += 1 + seen.add(key) self._clear_failed.discard(channel) # 新证据落地:允许再次尝试清除 belief = self.belief.channels[channel] if belief.status in (ChannelStatus.CLEARED, ChannelStatus.ABSENT): @@ -335,10 +542,30 @@ class BayesLoop(OmnidirectionalLoop): if not pf: if belief.status is ChannelStatus.UNKNOWN: self.belief.mark_absent(channel) + self.absence_evidence[channel] = "pf_empty" if channel not in self.pf_absent_channels: self.pf_absent_channels.append(channel) else: self._anomaly("pf_empty_while_detected", channel, position=position) + self._apply_count_bound() + + def _apply_count_bound(self) -> None: + """存在证据达到题面源数上界时,其余 UNKNOWN 可由计数直接判缺席。 + + 依据 [题面]:每频道至多一个源、全局限定 10..16 个源。一旦 + DETECTED/CLEARED 的不同频道数达到 16,任何尚未出现有效信号的 + 频道都不可能是源,无须等 7 站覆盖账本跑完。该判定与位置无关, + 是严格的计数证明;evidence 与 coverage/pf_empty 分开留痕。 + """ + present = [channel for channel, belief in self.belief.channels.items() + if belief.status in (ChannelStatus.DETECTED, + ChannelStatus.CLEARED)] + if len(present) < self.config.field.source_count_max: + return + for channel, belief in self.belief.channels.items(): + if belief.status is ChannelStatus.UNKNOWN: + belief.status = ChannelStatus.ABSENT + self.absence_evidence[channel] = "count_bound" def _best_certificate(self, channel: int) -> ClearCertificate | None: """凸证书优先;负观测挖洞使 PF 幸存集更紧时用网格证书补位。""" @@ -369,8 +596,13 @@ class BayesLoop(OmnidirectionalLoop): return ClearCertificate(cert.channel, target, cert.radius_m+shift, cert.limit_m, True) # ------------------------------------------------------------ 信息增益选点 - def _select_point(self, channel: int) -> Vec2 | None: - """定位测量点:期望 log 幸存占比 + λ·移动时间 最小的候选。""" + def _probe_context(self, channel: int): + """构造某频道下一次定位测量的候选集与信息增益评分函数。 + + 返回 ``(candidates, info_score, mec_center, current_position)``; + 候选为空返回 ``None``。``_select_point`` 与路线感知精修共用此逻辑, + 保证两者只差“移动代价如何折算”。 + """ bayes, search = self.config.bayes, self.config.search pf = self.particles[channel] if not pf: @@ -378,6 +610,7 @@ class BayesLoop(OmnidirectionalLoop): region = self.belief.candidate_set(channel) center, radius = pf.mec() measured = self._measured_points.get(channel, set()) + position = self.client.state.position candidates: list[Vec2] = [] safe = safe_disk_radius(region, self.config) if region is not None else -1.0 if region is not None and safe >= 0: @@ -387,15 +620,19 @@ class BayesLoop(OmnidirectionalLoop): search.candidate_angles) # 以实际来向生成对称交会候选,避免固定全局角度网格的旋转偏差。 geometric_center = region.mec()[0] - base_angle = math.atan2(self.client.state.position[1]-geometric_center[1], - self.client.state.position[0]-geometric_center[0]) + base_angle = math.atan2(position[1] - geometric_center[1], + position[0] - geometric_center[0]) for fraction in search.candidate_rings: if fraction <= 0: continue for offset in (-math.pi/3, -math.pi/6, 0, math.pi/6, math.pi/3): angle = base_angle + offset - candidates.append((geometric_center[0]+safe*fraction*math.cos(angle), - geometric_center[1]+safe*fraction*math.sin(angle))) + candidates.append((geometric_center[0] + safe * fraction * math.cos(angle), + geometric_center[1] + safe * fraction * math.sin(angle))) + # 已停靠位置若本身在安全接收盘内,是零移动的合法测点;显式加入 + # 可避免为了固定角度环而白白横移。 + if math.dist(position, geometric_center) <= safe + 1e-9: + candidates.append(tuple(position)) else: # 宽候选集:PF MEC 探索环(负观测挖洞后幸存集的包围圆) for fraction in bayes.wide_rings: @@ -403,27 +640,93 @@ class BayesLoop(OmnidirectionalLoop): candidates.extend(candidate_points(center, ring, (1.0,), search.candidate_angles)) candidates.append(tuple(center)) - candidates = [c for c in candidates if _point_key(c) not in measured] + candidates.append(tuple(position)) + candidates = [tuple(c) for c in candidates + if _point_key(c) not in measured] if not candidates: return None - subsample = pf.subsample(bayes.score_subsample) + # 采样一次转成数组(numpy 可用时),使候选评分走向量路径; + # numpy 缺失时 as_sample_array 原样返回列表,语义不变。 + subsample = as_sample_array(pf.subsample(bayes.score_subsample)) stride = max(len(subsample) // bayes.mc_representatives, 1) - representatives = [subsample[k] - for k in range(0, len(subsample), stride)] - position = self.client.state.position + representatives = subsample[::stride] + + def info_score(q: Vec2) -> float: + if bayes.score_mode == "entropy": + return pf.expected_survival(q, subsample, representatives) + return pf.expected_posterior_radius(q, subsample, representatives) + + return candidates, info_score, center, position + + def _select_point(self, channel: int) -> Vec2 | None: + """定位测量点:期望 log 幸存占比 + λ·移动时间 最小的候选。""" + context = self._probe_context(channel) + if context is None: + return None + candidates, info_score, center, position = context + bayes = self.config.bayes def score(q: Vec2) -> float: # 一次定位后仍需接近源才能清除;仅计到检测点的移动会偏好绕行。 move = bayes.lambda_move_s * (move_time(position, q, self.config.cost) + move_time(q, center, self.config.cost)) - if bayes.score_mode == "entropy": - return (pf.expected_survival(q, subsample, representatives) - + move) - return (pf.expected_posterior_radius(q, subsample, representatives) - + move) + return info_score(q) + move return min(candidates, key=lambda q: (score(q), _point_key(q))) + def _refine_locate_tasks(self, tasks: list[Task]) -> list[Task]: + """路线感知精修定位任务点(P2,2026-09-12)。 + + 旧评分只比较 ``current->q + q->MEC``,是局部代理;滚动 2-opt 的真实 + 代价还包含 ``q->next_task``。这里对每个 locate 任务在候选点上计算 + “替换该任务后整条当前路线代价的增量”,再与信息增益、MEC 接近项合并 + 选点。只改变选点启发式,不改变覆盖/清除证明。 + """ + bayes = self.config.bayes + if not bayes.route_aware_probe: + return tasks + locate_indices = [index for index, task in enumerate(tasks) + if task.kind == "locate"] + if not locate_indices: + return tasks + base_order = self._order_tasks(tasks) + base_cost = self._path_cost(base_order) + refined = list(tasks) + for task_index in locate_indices: + task = tasks[task_index] + context = self._probe_context(task.channel) + if context is None: + continue + candidates, info_score, center, position = context + try: + order_index = next(index for index, item in enumerate(base_order) + if item is task) + except StopIteration: # pragma: no cover - 同对象应始终存在 + order_index = next(index for index, item in enumerate(base_order) + if item.kind == "locate" + and item.channel == task.channel) + best_score: float | None = None + best_point: Vec2 | None = None + for point in candidates: + trial_order = list(base_order) + trial_order[order_index] = Task( + "locate", tuple(point), task.service_s, channel=task.channel) + route_delta = self._path_cost(trial_order) - base_cost + move_proxy = bayes.lambda_move_s * ( + move_time(position, point, self.config.cost) + + move_time(point, center, self.config.cost)) + clear_near = move_time(point, center, self.config.cost) + value = (info_score(point) + + move_proxy + + bayes.route_aware_insert_weight * route_delta + + bayes.route_aware_clear_weight * clear_near) + if best_score is None or value < best_score: + best_score, best_point = value, tuple(point) + if best_point is not None: + refined[task_index] = Task( + "locate", best_point, task.service_s, channel=task.channel) + return refined + # ------------------------------------------------------------ 安全网与复扫 def _localize_and_clear(self, channel: int) -> bool: """阻塞式定位子循环(resolve 阶段安全网):PF 选点,失败退凸选点。""" diff --git a/src/mcm26b/planner/hrl_loop.py b/src/mcm26b/planner/hrl_loop.py deleted file mode 100644 index 6918301..0000000 --- a/src/mcm26b/planner/hrl_loop.py +++ /dev/null @@ -1,172 +0,0 @@ -"""P7 分层强化学习闭环(``--strategy hrl`` / ``--q4-strategy hrl``)。 - -边界与保守性声明(与 rl_loop.py 同口径): -- 高层只在固定候选槽位上做调度决策(证书清除 / 信息增益定位 / 覆盖站 / - Q4 梯子探点与后备清除),候选几何全部由既有规则生成; -- 感知(belief + 网格幸存集)、清除证书、跳测规则、异常留痕完全继承 - :class:`BayesLoop`,不触碰真源保留定理的前提; -- 问题3 的幸存集按全部读数更新(no_signal 删盘);问题4 定向源的 - no_signal 不能排除朝向遮挡,幸存集只按 direction/near 更新,遮挡 - 证据走 blocked_probes 梯子与后备清除槽位(DirectionalExtension 口径); -- 高层策略缺失时经 :meth:`heuristic_action` 降级为 BayesLoop 任务排序, - 闭环仍然完备可运行。 - -问题4 发现覆盖使用 49 点网格(七点环的覆盖证明只对全向源成立)。 -""" - -from __future__ import annotations - -from ..belief import ChannelStatus -from ..config import ProblemConfig, Vec2 -from ..coverage import CoverageLedger, coverage_points -from ..hrl.scheduler import HRLControllerMixin, point_key -from ..protocol.rules import NO_SIGNAL -from .bayes_loop import BayesLoop - - -class HRLLoop(HRLControllerMixin, BayesLoop): - """分层闭环:BayesLoop 感知/证书 + 高层槽位调度(问题3/4 共用)。""" - - def __init__(self, client, config: ProblemConfig = ProblemConfig(), *, - problem: int = 3, high_policy=None, low_policy=None, - trace_executor: bool = False): - super().__init__(client, config) - if problem not in (3, 4): - raise ValueError("problem 必须是 3 或 4") - self.problem = int(problem) - self.high_policy = high_policy - self.low_policy = low_policy - self.trace_executor = bool(trace_executor) - self.executor_trace: list[dict] = [] - self.hrl_decisions: list[dict] = [] - self._step_events: list[dict] = [] - self._step_clears: list[int] = [] - self._cert_cache: dict = {} - self._last_candidates: list = [] - self._obs_mec_cache: dict = {} - self._station_pending_map: dict = {} - # 观测里幸存格数的归一化基准(初始全集),使特征对训练/部署的 - # 网格密度差不变。 - self._initial_alive = {channel: len(pf) - for channel, pf in self.particles.items()} - if problem == 4: - self.directional_observed: list[int] = [] - self.blocked_probes: dict[int, list[Vec2]] = {} - self.fallback_log: list[dict] = [] - # 49 点网格:七点环覆盖证明只对全向源成立 [口径见模块注释] - self.ledger = CoverageLedger(config, points=coverage_points(config)) - - # ------------------------------------------------------------ 主循环 - def _coverage_phase(self) -> None: - """统一任务循环:每步构建候选,由高层策略(或启发式降级)选槽执行。""" - while self.stop_reason is None: - if self._count_limit_reached() or self._virtual_cap_reached(): - return - # 顺路观测会改变信念、证书和候选;必须发生在本轮快照之前。 - if self.high_policy is None and self.problem == 3 \ - and self.config.bayes.opportunistic_measure: - self._measure_at_stop() - if self.stop_reason is not None or self._count_limit_reached() \ - or self._virtual_cap_reached(): - return - candidates = self.build_candidates() - if not candidates: - return - if self.high_policy is not None: - observation = self.hrl_observation(candidates) - mask = self.hrl_action_mask(candidates) - action = self.high_policy.select(observation, mask) - else: - # 降级路径:BayesLoop 任务排序(无 RL 依赖时闭环仍完备) - action = self.heuristic_action(candidates) - if self.candidate_by_slot(candidates, action) is None: - # 非法策略输出不能造成零耗时无限循环;事实记入异常再安全调度。 - self._anomaly("hrl_invalid_policy_action", 0, action=int(action)) - action = self.heuristic_action(candidates) - cand = self.candidate_by_slot(candidates, action) - if cand is not None: - self._log_low_level(cand) - self.hrl_decisions.append({ - "action": int(action), "kind": cand.kind, - "channel": cand.channel, - "virtual_time_s": self.client.state.virtual_time_s}) - self.hrl_step(action, candidates=candidates) - - # ------------------------------------------------------------ 感知记录 - def _record_measure(self, channel: int, position: Vec2, outcome) -> None: - """BayesLoop._record_measure 的事件捕获版;问题4 no_signal 不删格。 - - Q4 语义:no_signal 可能是朝向遮挡 [观测推理],删除幸存格会破坏 - 真源保留,因此问题4 幸存集只按 direction/near 更新;缺席证明 - 交由 49 点网格覆盖账本(继承的 _mark_absent_after_coverage)。 - """ - key = point_key(position) - redundant = key in self._measured_points.get(channel, set()) - belief = self.belief.channels[channel] - was_unknown = belief.status is ChannelStatus.UNKNOWN - pf = self.particles[channel] - before = len(pf) - self.belief.update_measure(channel, position, outcome.result, - outcome.svd_deg) - self._measured_points.setdefault(channel, set()).add(key) - self._clear_failed.discard(channel) - belief = self.belief.channels[channel] - if belief.status not in (ChannelStatus.CLEARED, ChannelStatus.ABSENT): - if not (self.problem == 4 and outcome.result == NO_SIGNAL): - pf.apply_measure(position, outcome.result, outcome.svd_deg) - if not pf: - if belief.status is ChannelStatus.UNKNOWN: - self.belief.mark_absent(channel) - if channel not in self.pf_absent_channels: - self.pf_absent_channels.append(channel) - else: - self._anomaly("pf_empty_while_detected", channel, - position=position) - self._record_event(channel=channel, result=outcome.result, - pf_before=before, pf_after=len(pf), - redundant=redundant, was_unknown=was_unknown) - - def _attempt_clear(self, channel: int, target: Vec2, cert) -> bool: - success = super()._attempt_clear(channel, target, cert) - if success and hasattr(self, "blocked_probes"): - self.blocked_probes.pop(channel, None) - if success: - self._step_clears.append(channel) - return success - - # ------------------------------------------------------------ 低层执行留痕 - def _log_low_level(self, cand) -> None: - """低层到达推演留痕(本地步进,不与模拟器交互,不产生虚拟耗时)。""" - if not self.trace_executor: - return - from ..hrl.executor import LowLevelExecutor - executor = getattr(self, "_executor", None) - if executor is None: - executor = self._executor = LowLevelExecutor(self.low_policy) - waypoints = executor.roll(self.client.state.position, cand.position) - if self.low_policy is not None: - self.executor_trace.append({ - "kind": cand.kind, "channel": cand.channel, - "goal": [round(v, 2) for v in cand.position], - "waypoints": [[round(v, 2) for v in p] for p in waypoints], - "navigation": dict(executor.last_roll_info), - }) - - # ------------------------------------------------------------ 收尾 - def _summary(self, info) -> dict: - report = super()._summary(info) - report["strategy"] = "hrl_q4" if self.problem == 4 else "hrl" - report["hrl_problem"] = self.problem - kinds: dict[str, int] = {} - for decision in self.hrl_decisions: - kinds[decision["kind"]] = kinds.get(decision["kind"], 0) + 1 - report["hrl_action_kinds"] = kinds - report["hrl_decisions"] = self.hrl_decisions - report["hrl_executor_trace"] = self.executor_trace - if self.problem == 4: - report["directional_observed_channels"] = \ - list(self.directional_observed) - report["fallback_clears"] = self.fallback_log - report["fallback_clear_attempts"] = sum( - entry.get("attempts", 0) for entry in self.fallback_log) - return report diff --git a/src/mcm26b/planner/rl_loop.py b/src/mcm26b/planner/rl_loop.py deleted file mode 100644 index c687204..0000000 --- a/src/mcm26b/planner/rl_loop.py +++ /dev/null @@ -1,94 +0,0 @@ -"""P6b 强化学习闭环接入:PPO 学习"下一检测点"选择(问题3/4)。 - -边界与保守性声明: -- RL 只替换测量点排序(在既有几何候选集内做 argmax),不生成新的 - 空间候选、不修改覆盖证明、不修改清除证书; -- 问题3:继承 :class:`BayesLoop`(七点覆盖 + 粒子滤波 + 滚动任务调度), - 仅 :meth:`_select_point` 改由 PPO 输出候选编号; -- 问题4:继承 :class:`DirectionalExtension`(49 点定向覆盖 + 对跖/环探 + - 20m 有限圆盘覆盖后备清除),仅 :meth:`_next_probe` 改由 PPO 输出; - 遮挡计数、定向观测与后备清除兜底完全保留; -- 训练环境与运行特征同源(mcm26b.rl.features),模型加载时校验 - 观测/动作维度,不匹配即拒绝运行,避免静默错位。 - -默认模型位置:output/rl/q3_ppo.zip、output/rl/q4_ppo.zip。 -""" - -from __future__ import annotations - -from pathlib import Path - -from ..config import ProblemConfig, Vec2 -from ..rl.policy import PointSelectionPolicy, default_model_path -from . import DirectionalExtension -from .bayes_loop import BayesLoop - - -class RLBayesLoop(BayesLoop): - """问题3:贝叶斯闭环骨架 + PPO 定位选点(--strategy rl)。""" - - def __init__(self, client, config: ProblemConfig = ProblemConfig(), *, - model_path: str | Path | None = None, device: str = "auto"): - super().__init__(client, config) - self.rl_model_path = Path(model_path) if model_path else default_model_path(3) - self.rl_policy = PointSelectionPolicy(self.rl_model_path, device=device) - self.rl_probe_actions: list[dict] = [] - - def _select_point(self, channel: int) -> Vec2 | None: - region = self.belief.candidate_set(channel) - if region is None: - return None - point, action = self.rl_policy.select( - region, self.client.state.position, channel, self.config, - problem=3, blocked=[], belief=self.belief.channels[channel], - virtual_time_s=self.client.state.virtual_time_s, - receiver_channel=self.client.state.channel) - self.rl_probe_actions.append({ - "channel": channel, "action": int(action), - "position": [round(point[0], 3), round(point[1], 3)], - "virtual_time_s": self.client.state.virtual_time_s, - }) - return point - - def _summary(self, info) -> dict: - report = super()._summary(info) - report["strategy"] = "rl" - report["rl_model"] = str(self.rl_model_path) - report["rl_device"] = self.rl_policy.device - report["rl_probe_actions"] = self.rl_probe_actions - return report - - -class RLDirectionalLoop(DirectionalExtension): - """问题4:定向闭环骨架 + PPO 遮挡梯子选点(--q4-strategy rl)。""" - - def __init__(self, client, config: ProblemConfig = ProblemConfig(), *, - model_path: str | Path | None = None, device: str = "auto"): - super().__init__(client, config) - self.rl_model_path = Path(model_path) if model_path else default_model_path(4) - self.rl_policy = PointSelectionPolicy(self.rl_model_path, device=device) - self.rl_probe_actions: list[dict] = [] - - def _next_probe(self, region, channel: int) -> Vec2: - blocked = self.blocked_probes.get(channel, []) - point, action = self.rl_policy.select( - region, self.client.state.position, channel, self.config, - problem=4, blocked=blocked, - belief=self.belief.channels[channel], - virtual_time_s=self.client.state.virtual_time_s, - receiver_channel=self.client.state.channel) - self.rl_probe_actions.append({ - "channel": channel, "action": int(action), - "position": [round(point[0], 3), round(point[1], 3)], - "blocked_count": len(blocked), - "virtual_time_s": self.client.state.virtual_time_s, - }) - return point - - def _summary(self, info) -> dict: - report = super()._summary(info) - report["strategy"] = "rl_q4" - report["rl_model"] = str(self.rl_model_path) - report["rl_device"] = self.rl_policy.device - report["rl_probe_actions"] = self.rl_probe_actions - return report diff --git a/src/mcm26b/planner/seven.py b/src/mcm26b/planner/seven.py index 8b2d652..2bd2803 100644 --- a/src/mcm26b/planner/seven.py +++ b/src/mcm26b/planner/seven.py @@ -20,6 +20,7 @@ import math from ..belief import ChannelStatus from ..config import ProblemConfig from ..coverage import CoverageLedger +from ..guarantee import seven_plan from ..protocol.rules import NEAR from . import OmnidirectionalLoop, clear_certificate @@ -55,7 +56,9 @@ class SevenImmediate(OmnidirectionalLoop): ring_radius_m: float = RING_RADIUS_M): super().__init__(client, config) validate_seven_coverage(ring_radius_m, config) - self.ledger = CoverageLedger(config=config, points=seven_points(ring_radius_m)) + self.coverage_plan = seven_plan(ring_radius_m) + self.ledger = CoverageLedger(config=config, + points=list(self.coverage_plan.points)) class SevenBatch(SevenImmediate): diff --git a/src/mcm26b/process_control.py b/src/mcm26b/process_control.py deleted file mode 100644 index 2de7e51..0000000 --- a/src/mcm26b/process_control.py +++ /dev/null @@ -1,175 +0,0 @@ -"""跨平台子进程控制:启动隔离、协作式暂停/停止、必要时强杀整棵进程树。 - -训练前端要在 POSIX 与 Windows 上表现一致,而两边的进程模型差别正好卡在 -「停止训练」这条路径上: - -- ``os.killpg`` / ``os.getpgid`` **只存在于 POSIX**;Windows 上访问它们会抛 - ``AttributeError``。旧实现只捕获 ``ProcessLookupError`` / ``PermissionError``, - 于是 ``POST /api/train/stop`` 在 Windows 上直接 500,训练进程照跑——表现就是 - 「点停止没反应」。 -- ``subprocess.Popen(start_new_session=True)`` 在 Windows 上被**静默忽略**: - CPython 的 Windows ``_execute_child`` 形参名就是 ``unused_start_new_session``, - 要隔离进程组只能传 ``CREATE_NEW_PROCESS_GROUP``。 -- POSIX 的 SIGTERM 在 Windows 上经 ``os.kill`` 会退化成 ``TerminateProcess``: - 硬杀,训练脚本里"收到信号后保存模型"的处理器根本不会执行。 - -所以「优雅暂停 / 优雅停止」不依赖信号量语义,而是走一个**控制文件**:前端原子 -写 JSON,训练脚本每步轮询。两端都只是普通文件 IO,Windows 与 POSIX 行为一致; -信号与强杀退居兜底,只在训练进程不响应控制文件时使用。 -""" - -from __future__ import annotations - -import json -import os -import signal -import subprocess -import time -from dataclasses import dataclass -from pathlib import Path -from typing import Any - -__all__ = [ - "IS_WINDOWS", "ControlState", "spawn_kwargs", "write_control", - "read_control", "write_json_atomic", "terminate_process_tree", -] - -# 运行期常量而非"导入期分支":调用方(含测试)可以 monkeypatch 它来模拟 Windows -IS_WINDOWS = os.name == "nt" - -# 只有 Windows 定义 CREATE_NEW_PROCESS_GROUP;POSIX 上取 0 表示不使用 creationflags -_CREATE_NEW_PROCESS_GROUP = getattr(subprocess, "CREATE_NEW_PROCESS_GROUP", 0) - -# 发出「停止」到强杀之间留给训练脚本收尾(保存模型 + 写元数据)的秒数 -DEFAULT_GRACE_S = 15.0 - - -def spawn_kwargs() -> dict[str, Any]: - """返回 ``Popen`` 的平台相关参数:让训练进程独立于前端进程组。 - - POSIX 用 ``setsid``(``start_new_session``);Windows 上用 - ``CREATE_NEW_PROCESS_GROUP``,否则前端所在控制台的 Ctrl+C 会连带打到训练进程。 - """ - if IS_WINDOWS: - if _CREATE_NEW_PROCESS_GROUP: - return {"creationflags": _CREATE_NEW_PROCESS_GROUP} - return {} - return {"start_new_session": True} - - -@dataclass(frozen=True) -class ControlState: - """控制文件的一次快照;缺失或损坏时字段全为默认(即"无指令")。""" - - paused: bool = False - stop: bool = False - seq: int = 0 - ts: float = 0.0 - - -def write_control(path: Path, *, paused: bool = False, stop: bool = False, - seq: int | None = None) -> ControlState: - """原子写控制文件(同目录临时文件 + ``os.replace``)。 - - 训练侧随时可能来读,必须避免读到写了一半的 JSON。``os.replace`` 在 - Windows 与 POSIX 上都是原子的(同目录、同卷)。 - """ - path = Path(path) - path.parent.mkdir(parents=True, exist_ok=True) - state = ControlState( - paused=bool(paused), - stop=bool(stop), - seq=int(seq) if seq is not None else time.time_ns(), - ts=time.time(), - ) - payload = {"paused": state.paused, "stop": state.stop, - "seq": state.seq, "ts": state.ts} - tmp = path.with_name(f".{path.name}.{os.getpid()}.tmp") - tmp.write_text(json.dumps(payload, ensure_ascii=False), encoding="utf-8") - os.replace(tmp, path) - return state - - -def read_control(path: Path) -> ControlState: - """读控制文件;缺失 / 半截 / 损坏一律当作"无指令",绝不让训练崩在控制面上。""" - try: - raw = Path(path).read_text(encoding="utf-8") - payload = json.loads(raw) - except (OSError, ValueError, UnicodeDecodeError): - return ControlState() - if not isinstance(payload, dict): - return ControlState() - return ControlState( - paused=bool(payload.get("paused", False)), - stop=bool(payload.get("stop", False)), - seq=int(payload.get("seq") or 0), - ts=float(payload.get("ts") or 0.0), - ) - - -def write_json_atomic(path: Path, payload: Any) -> None: - """原子写 JSON 文件(同目录临时文件 + ``os.replace``)。 - - 用于"急停恢复"相关的标记文件(``resume.json`` / ``forced_stop.json`` 等): - 读取方随时可能来读,必须避免看到写了一半的内容。 - """ - path = Path(path) - path.parent.mkdir(parents=True, exist_ok=True) - tmp = path.with_name(f".{path.name}.{os.getpid()}.tmp") - tmp.write_text(json.dumps(payload, ensure_ascii=False, indent=2), - encoding="utf-8") - os.replace(tmp, path) - - -def terminate_process_tree(process: subprocess.Popen | None, *, - grace_s: float = DEFAULT_GRACE_S, - poll_s: float = 0.2) -> bool: - """等待 ``grace_s`` 让协作式停止生效,超时则强杀整棵进程树。 - - 返回**是否动用了强杀**:``False`` 表示进程在宽限期内自行退出(模型有机会 - 落盘),``True`` 表示进程被强杀、最后一段产物可能缺失。调用方应先通过控制 - 文件请求停止,再调用本函数;本函数不负责写控制文件。 - """ - if process is None: - return False - if process.poll() is not None: - return False - deadline = time.monotonic() + max(0.0, grace_s) - while time.monotonic() < deadline: - if process.poll() is not None: - return False - time.sleep(min(poll_s, max(0.0, deadline - time.monotonic()))) - if process.poll() is not None: - return False - _hard_kill_tree(process) - try: - process.wait(timeout=10.0) - except subprocess.TimeoutExpired: - pass - return True - - -def _hard_kill_tree(process: subprocess.Popen) -> None: - """强杀进程树:POSIX 走进程组 SIGKILL,Windows 走 ``taskkill /T``。 - - 这里所有 POSIX 专属调用都走 ``getattr`` 探测,Windows 上拿不到分支就退回 - ``Popen.kill()``——不会再出现 ``module 'os' has no attribute 'killpg'``。 - """ - if IS_WINDOWS: - try: - subprocess.run(["taskkill", "/F", "/T", "/PID", str(process.pid)], - capture_output=True, check=False) - return - except OSError: - process.kill() - return - killpg = getattr(os, "killpg", None) - getpgid = getattr(os, "getpgid", None) - sigkill = getattr(signal, "SIGKILL", None) - if killpg is not None and getpgid is not None and sigkill is not None: - try: - killpg(getpgid(process.pid), sigkill) - return - except (ProcessLookupError, PermissionError, OSError): - pass - process.kill() diff --git a/src/mcm26b/rl/__init__.py b/src/mcm26b/rl/__init__.py deleted file mode 100644 index b5a1480..0000000 --- a/src/mcm26b/rl/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -"""问题3/4 强化学习扩展(可选依赖组 ``rl``)。 - -- features.py:观测/候选动作的纯几何接口(numpy),训练与运行共享; -- env.py:单源定位 Gymnasium 训练环境(依赖 referee,仅训练侧加载); -- policy.py:PPO 模型加载与确定性推理(惰性加载 torch/sb3)。 - -运行闭环默认不导入 torch/stable-baselines3;只有 CLI 显式选择 -``--strategy rl``(问题3)或 ``--q4-strategy rl``(问题4)时, -``planner.rl_loop`` 才构造 :class:`policy.PointSelectionPolicy`。 -""" - -from .features import candidate_actions, build_observation - -__all__ = ["candidate_actions", "build_observation"] diff --git a/src/mcm26b/rl/_constants.py b/src/mcm26b/rl/_constants.py deleted file mode 100644 index 970a425..0000000 --- a/src/mcm26b/rl/_constants.py +++ /dev/null @@ -1,11 +0,0 @@ -"""RL 观测/动作空间常量:模型接口的唯一字面量来源。 - -布局说明见 features.py;这些数字由训练脚本写入模型接口, -改动其中任一值都会使已训练模型失配,须同步重训。 -""" - -GLOBAL_DIM = 41 -PER_ACTION_DIM = 6 -NUM_ACTIONS = 60 -LADDER_SLOTS = 8 -OBS_DIM = GLOBAL_DIM + NUM_ACTIONS * PER_ACTION_DIM # 401 diff --git a/src/mcm26b/rl/env.py b/src/mcm26b/rl/env.py deleted file mode 100644 index dfd5c27..0000000 --- a/src/mcm26b/rl/env.py +++ /dev/null @@ -1,331 +0,0 @@ -"""问题3/4 的强化学习训练环境:单源"测向—定位—清除"子任务。 - -环境与自建评测机 referee 共享同一边界(内存回环,与真实 HTTP 同协议), -观测只来自 :class:`mcm26b.belief.BeliefState` 与协议响应;真值仅在 reset -时用于布设课程场景,不进入观测。策略端看到的接口与闭环运行时一致。 - -问题抽象:机器狗已获得某频道首次 direction 读数,需要在一组几何可行候选 -检测点中选择下一个测点,目标是尽快把候选集最小包围圆压到 20m 清除证书 -阈值并清除成功。问题4额外引入定向源遮挡:保证接收盘内出现 no_signal 是 -"朝向遮挡"的观测证据,环境记录 blocked 序列并开放环探候选。 - -该环境是训练侧组件(依赖 referee + gymnasium),运行时代码不导入本模块; -导入依赖由可选组 ``[dependency-groups] rl`` 提供。 -""" - -from __future__ import annotations - -import math -from random import Random - -import gymnasium as gym -import numpy as np -from gymnasium import spaces - -from ..belief import BeliefState -from ..config import ProblemConfig -from ..planner import clear_certificate, fallback_clear_cells, safe_disk_radius -from ..protocol.client import SimulatorClient -from ..protocol.log import SessionLog -from ..protocol.rules import CLEAR_SUCCESS, DIRECTION, NO_SIGNAL -from .features import NUM_ACTIONS, OBS_DIM, action_mask, build_observation, candidate_actions - - -class LocalizationEnv(gym.Env): - """单源定位清除 Gymnasium 环境。 - - problem=3:全向源;problem=4:定向/全向混合(定向概率 0.5,训练分布 - 比题面更稠密以覆盖遮挡分支;正式策略仍由闭环的后备清除兜底)。 - """ - - metadata = {"render_modes": []} - - def __init__(self, config: ProblemConfig | None = None, *, - problem: int = 3, max_episode_steps: int = 16, - directional_probability: float = 0.5, - real_budget_s: float = 3600.0, - error_seed: int | None = None, - handoff_probability: float = 0.35, boundary_probability: float = 0.2): - super().__init__() - if problem not in (3, 4): - raise ValueError("problem 必须是 3 或 4") - self.config = config or ProblemConfig() - self.problem = int(problem) - self.max_episode_steps = int(max_episode_steps) - self.directional_probability = float(directional_probability) - self.real_budget_s = float(real_budget_s) - self.error_seed = error_seed - self.handoff_probability = handoff_probability - self.boundary_probability = boundary_probability - self.observation_space = spaces.Box(low=-10.0, high=10.0, - shape=(OBS_DIM,), dtype=np.float32) - self.action_space = spaces.Discrete(NUM_ACTIONS) - - # 惰性导入:本模块只属于训练/评估侧,运行闭环不加载 referee。 - from referee import LocalSimulator as _RefereeLocalSimulator - from referee import Source - from ..harness import LocalSimTransport, referee_spec - self._source_cls = Source - self._local_simulator_cls = _RefereeLocalSimulator - self._local_sim_transport_cls = LocalSimTransport - self._referee_spec = referee_spec - - self._scene_rng = Random() - self._simulator = None - self._client = None - self._source = None - self._belief: BeliefState | None = None - self._channel: int = 1 - self._blocked: list = [] - self._directional_observed = False - self._clear_failed = False - self._steps = 0 - self._terminated = False - self._truncated = False - self._measured_points: set = set() - self._fallback_attempts = 0 - - # ------------------------------------------------------------------ 场景 - def _make_source_and_probe(self): - """用真值布设一个"首次测向必为 direction"的课程场景(真值不进观测)。""" - rng = self._scene_rng - field = self.config.field - channel = rng.randint(field.channel_min, field.channel_max) - radius = field.omega_radius_m * math.sqrt(rng.random()) - edge = rng.random() < self.boundary_probability - if edge: - radius = field.omega_radius_m * rng.uniform(0.98, 1.0) - angle = rng.uniform(0.0, 2 * math.pi) - x, y = radius * math.cos(angle), radius * math.sin(angle) - r_eff = rng.uniform(field.r_eff_min_m, field.r_eff_max_m) - if edge: - r_eff = field.r_eff_min_m - directional = self.problem == 4 and rng.random() < self.directional_probability - heading = rng.uniform(0.0, 360.0) if directional else 0.0 - - # 首次检测点:距离 [300, min(1450, r_eff-20)] 内随机,定向源取朝向 - # ±89.9°(接近但不跨越90°边界,保证direction)。机器狗可到Ω外 [题面]。 - max_distance = max(310.0, min(1450.0, r_eff - 20.0)) - max_distance = max(max_distance, 310.0) - probe_distance = rng.uniform(300.0, max_distance) - probe_bearing = (heading + rng.uniform(-89.9, 89.9) - if directional else rng.uniform(0.0, 360.0)) - probe_radians = math.radians(probe_bearing) - probe = (x + probe_distance * math.cos(probe_radians), - y + probe_distance * math.sin(probe_radians)) - source = self._source_cls(channel=channel, x=x, y=y, r_eff_m=r_eff, - directional=directional, heading_deg=heading) - return source, probe - - def _make_episode(self) -> bool: - """重建模拟器并完成首次测向;返回 False 表示连续未得到 direction。""" - for _ in range(20): - self._source, probe = self._make_source_and_probe() - self._simulator = self._local_simulator_cls( - [self._source], robot_id="rl-train", - spec=self._referee_spec( - self.config, max_real_duration_s=self.real_budget_s), - error_seed=(self.error_seed if self.error_seed is not None - else self._scene_rng.randint(0, 2 ** 31 - 1)), - stress_mode=True) - self._client = SimulatorClient( - "rl-train", config=self.config, - transport=self._local_sim_transport_cls(self._simulator), - log=SessionLog()) - self._client.enter() - outcome = self._client.measure(probe, self._source.channel) - if outcome.result == DIRECTION: - self._channel = self._source.channel - self._belief = BeliefState(self.config) - self._belief.update_measure(self._channel, probe, outcome.result, - outcome.svd_deg) - self._blocked = [] - self._directional_observed = False - self._clear_failed = False - self._measured_points = {self._point_key(probe)} - self._fallback_attempts = 0 - # 运行中可能先服务其他频道后再定位本源;模拟这种位置/频道交接。 - if self._scene_rng.random() < self.handoff_probability: - angle = self._scene_rng.uniform(0, 2*math.pi) - reach = self.config.field.omega_radius_m * math.sqrt(self._scene_rng.random()) - other = (self.config.field.channel_min - if self._channel != self.config.field.channel_min - else self.config.field.channel_max) - self._client.measure((reach*math.cos(angle), reach*math.sin(angle)), other) - self._start_virtual_s = self._client.state.virtual_time_s - return True - # near / no_signal 首测属于概率为零的边界或课程构造失败,换场景。 - continue - return False - - # ------------------------------------------------------------------ Gym API - @staticmethod - def _point_key(point) -> tuple[int, int]: - return (int(round(point[0] * 2)), int(round(point[1] * 2))) - - def reset(self, *, seed: int | None = None, options: dict | None = None): - super().reset(seed=seed) - self.close() - if seed is not None: - self._scene_rng = Random(seed) - self._steps = 0 - self._localize_steps = 0 - self._failure_reason = None - self._terminated = False - self._truncated = False - if not self._make_episode(): - raise RuntimeError("连续 20 次无法构造 direction 首测场景") - observation = self._observe() - return observation, self._info() - - def _observe(self) -> np.ndarray: - region = self._belief.candidate_set(self._channel) - if region is None: - raise RuntimeError("首次测向后信念状态缺失候选集") - return build_observation( - region, self._client.state.position, self._channel, self.config, - self.problem, self._blocked, self._belief.channels[self._channel], - virtual_time_s=self._client.state.virtual_time_s, - receiver_channel=self._client.state.channel) - - def action_masks(self): - return action_mask(self._belief.candidate_set(self._channel), self._client.state.position, - self.config, self.problem, self._blocked, - self._belief.channels[self._channel]) - - def _info(self) -> dict: - source = self._source - return { - "channel": self._channel, - "source": {"x": source.x, "y": source.y, "r_eff_m": source.r_eff_m, - "directional": source.directional, - "heading_deg": source.heading_deg}, - "steps": self._steps, - "blocked_count": len(self._blocked), - "directional_observed": self._directional_observed, - "fallback_attempts": self._fallback_attempts, - "virtual_cost_s": self._client.state.virtual_time_s - self._start_virtual_s, - "failure_reason": self._failure_reason, - } - - def step(self, action): - if self._terminated or self._truncated: - raise RuntimeError("step() 需要在 terminated/truncated 后先 reset()") - if not 0 <= int(action) < NUM_ACTIONS: - raise ValueError(f"动作 {action} 超出 Discrete({NUM_ACTIONS})") - action = int(action) - self._steps += 1 - region = self._belief.candidate_set(self._channel) - if region is None: - return self._finish(observation=self._observe(), reward=-20.0, - terminated=True, truncated=False) - - # 达到清除证书且上次清除失败已被新测量重置:先自动清除(闭环语义)。 - cert = clear_certificate(region, self._channel, self.config) - if cert.certified and not self._clear_failed: - return self._try_clear(cert, observation=self._observe()) - - old_virtual = self._client.state.virtual_time_s - candidates = candidate_actions(region, self._client.state.position, - self.config, self._blocked) - point = candidates[action] - try: - outcome = self._client.measure(point, self._channel) - self._belief.update_measure(self._channel, point, outcome.result, - outcome.svd_deg) - except Exception as exc: - self._failure_reason = type(exc).__name__ + ': ' + str(exc) - return self._finish(observation=self._observe(), reward=-100.0, - terminated=True, truncated=False) - - cost_s = self._client.state.virtual_time_s - old_virtual - reward = -cost_s / 100.0 - self._measured_points.add(self._point_key(point)) - new_region = self._belief.candidate_set(self._channel) - if outcome.result == NO_SIGNAL and self.problem == 4: - center = region.mec()[0] - safe = safe_disk_radius(region, self.config) - if safe >= 0 and math.dist(point, center) <= safe + 1e-6: - if not self._directional_observed: - self._directional_observed = True - self._blocked.append(point) - else: - self._blocked = [] - self._localize_steps += 1 - - self._clear_failed = False - cert = clear_certificate(new_region, self._channel, self.config) \ - if new_region is not None else None - observation = self._observe() - if cert is not None and cert.certified: - return self._try_clear(cert, observation=observation, - reward=reward) - if self.problem == 4 and (len(self._blocked) >= self.config.search.max_blocked_probes - or self._localize_steps >= self.config.search.max_localize_steps): - return self._fallback_clear(observation=observation, reward=reward) - if self._steps >= self.max_episode_steps: - return self._finish(observation=observation, reward=reward - 100.0, - terminated=False, truncated=True) - return observation, reward, False, False, self._info() - - def _fallback_clear(self, *, observation, reward: float): - """问题4后备清除语义:遮挡梯子用尽后按 20m 网格覆盖逐格 /clear。 - - 与 DirectionalExtension._fallback_clear 同口径;训练环境借此让策略 - 学到"梯子耗尽的代价",运行闭环仍由原后备清除函数执行。 - """ - region = self._belief.candidate_set(self._channel) - cells = fallback_clear_cells(region.polygon, self.config) - self._fallback_attempts = 0 - if len(cells) > self.config.search.fallback_max_cells: - return self._finish(observation=observation, reward=reward - 100.0, - terminated=False, truncated=True) - attempts = 0 - while cells: - cell = min(cells, key=lambda c: ( - math.dist(self._client.state.position, c), c)) - cells.remove(cell) - attempts += 1 - old_virtual = self._client.state.virtual_time_s - outcome = self._client.clear(cell, self._channel) - reward += -(self._client.state.virtual_time_s - old_virtual) / 100.0 - if outcome.result == CLEAR_SUCCESS: - self._belief.mark_cleared(self._channel) - reward += 20.0 - self._fallback_attempts = attempts - return self._finish(observation=observation, reward=reward, - terminated=True, truncated=False) - self._fallback_attempts = attempts - return self._finish(observation=observation, reward=reward - 100.0, - terminated=True, truncated=False) - - def _try_clear(self, cert, *, observation, reward: float = 0.0): - old_virtual = self._client.state.virtual_time_s - outcome = self._client.clear(cert.center, self._channel) - cost_s = self._client.state.virtual_time_s - old_virtual - reward += -cost_s / 100.0 - if outcome.result == CLEAR_SUCCESS: - self._belief.mark_cleared(self._channel) - reward += 20.0 - return self._finish(observation=observation, reward=reward, - terminated=True, truncated=False) - self._clear_failed = True - reward -= 1.0 - if self._steps >= self.max_episode_steps: - return self._finish(observation=observation, reward=reward, - terminated=False, truncated=True) - return observation, reward, False, False, self._info() - - def _finish(self, *, observation, reward, terminated, truncated): - self._terminated = bool(terminated) - self._truncated = bool(truncated) - info = self._info() - info["cleared"] = (self._belief.channels[self._channel].status.value - == "cleared") - self.close() - return observation, float(reward), self._terminated, self._truncated, info - - def close(self): - if (self._client is not None and self._client.state.entered - and not self._client.state.exited): - self._client.exit() diff --git a/src/mcm26b/rl/features.py b/src/mcm26b/rl/features.py deleted file mode 100644 index e30ed18..0000000 --- a/src/mcm26b/rl/features.py +++ /dev/null @@ -1,209 +0,0 @@ -"""RL 状态特征与候选动作生成(问题3/4 共用,运行时与训练环境同源)。 - -设计目标:把"下一检测点去哪"这一连续决策转化为固定顺序的离散动作, -让 PPO 策略在 GPU 上学习,同时不触碰闭环的保守性证明。候选集合始终由 -既有几何规则生成(保证接收盘、对称交会、定向遮挡梯子),RL 只负责在 -这些物理可行候选中排序;证书、覆盖证明与后备清除仍由 planner 层负责。 - -观测维度与候选编号一旦训练即成为模型接口,不得随意重排: -- 全局特征 41 维(含频道 one-hot 20 维); -- 每个候选 6 维(相对位移、移动耗时、到 MEC 圆心距离、方位、保证接收标记), - 共 60 × 6 = 360 维; -- 总观测 401 维。 -""" - -from __future__ import annotations - -import math - -import numpy as np - -from ..config import ProblemConfig, Vec2 -from ..planner import safe_disk_radius -from ._constants import GLOBAL_DIM, LADDER_SLOTS, NUM_ACTIONS, OBS_DIM, PER_ACTION_DIM - -__all__ = [ - "GLOBAL_DIM", - "LADDER_SLOTS", - "NUM_ACTIONS", - "OBS_DIM", - "PER_ACTION_DIM", - "candidate_actions", - "build_observation", - "empty_observation", - "action_mask", -] - - -# 候选编号布局(训练/推理共享): -# 0 保证接收盘圆心(或宽候选集 MEC 圆心) -# 1..36 保证接收盘 3 环 × 12 方向 -# 37..51 相对"机器人->MEC 圆心"来向的对称交会候选 3 环 × 5 偏角 -# 52..59 定向遮挡环探梯子 8 个方向(问题3也保留,作为宽环探索) -_RING_RATIOS = (0.4, 0.75, 1.0) -_RING_ANGLES = 12 -_GEO_OFFSETS = (-math.pi / 3, -math.pi / 6, 0.0, math.pi / 6, math.pi / 3) - - -def _probe_radius(region_radius_m: float, safe_m: float) -> float: - """环候选的基准半径:有保证接收盘用盘半径,否则退化为 MEC 半径。""" - if safe_m >= 0.0: - return safe_m - return max(region_radius_m, 10.0) - - -def candidate_actions(region, position: Vec2, config: ProblemConfig, - blocked: list[Vec2] | None = None) -> list[Vec2]: - """生成固定顺序的 60 个候选检测点。 - - 参数 region 为 belief.CandidateRegion(任意凸候选集);blocked 是 - 定向遮挡记录(问题4),问题3 传空列表即可。返回顺序与模型训练时一致。 - """ - center, radius = region.mec() - safe = safe_disk_radius(region, config) - base_radius = _probe_radius(radius, safe) - # 半径恰为0时也保留固定编号,重复位置由action_mask屏蔽。 - points = [tuple(center)] - for fraction in _RING_RATIOS: - for k in range(_RING_ANGLES): - angle = (k + 0.5) * 2 * math.pi / _RING_ANGLES - points.append((center[0] + base_radius*fraction*math.cos(angle), - center[1] + base_radius*fraction*math.sin(angle))) - assert len(points) == 37 - - base_angle = math.atan2(position[1] - center[1], - position[0] - center[0]) - for fraction in _RING_RATIOS: - for offset in _GEO_OFFSETS: - angle = base_angle + offset - points.append((center[0] + base_radius * fraction * math.cos(angle), - center[1] + base_radius * fraction * math.sin(angle))) - - blocked = list(blocked or []) - first = blocked[0] if blocked else None - anchor = 0.0 - if first is not None: - anchor = math.atan2(first[1] - center[1], first[0] - center[0]) - ladder_radius = max(radius, 20.0) - for slot in range(LADDER_SLOTS): - angle = anchor + slot * math.pi / 4 - points.append((center[0] + ladder_radius * math.cos(angle), - center[1] + ladder_radius * math.sin(angle))) - assert len(points) == NUM_ACTIONS - return points - - -def action_mask(region, position: Vec2, config: ProblemConfig, problem: int, - blocked=None, belief=None) -> np.ndarray: - """只依据可见观测屏蔽同地重测、重复候选、越界点。 - - Q3有距离保证盘时屏蔽盘外探点;Q4允许盘外探点,但绝不把距离保证 - 当作朝向保证。训练与推理共用此函数,不读取源位置或朝向。 - """ - def key(p): - return (round(p[0]*2), round(p[1]*2)) - visited = {key(r['position']) for r in getattr(belief, 'measurements', [])} - seen = set() - center, _ = region.mec() - safe = safe_disk_radius(region, config) - result = [] - for p in candidate_actions(region, position, config, blocked): - tag = key(p) - valid = (tag not in visited and tag not in seen - and all(math.isfinite(v) and abs(v) <= config.field.coord_abs_limit_m for v in p) - and (problem != 3 or safe < 0 or math.dist(p, center) <= safe + 1e-6)) - result.append(valid) - if valid: - seen.add(tag) - if not any(result): - # 退化几何无新候选时保留一个合法动作,由步数/预算边界收尾。 - result[0] = True - return np.asarray(result, dtype=bool) - - -def _last_measurement_features(belief) -> tuple[tuple[float, float, float], - tuple[float, float]]: - """末次读数的 one-hot + 方向角 sin/cos(无读数取零)。""" - readings = getattr(belief, "measurements", None) or [] - if not readings: - return (1.0, 0.0, 0.0), (0.0, 0.0) - last = readings[-1] - result = last.get("result") - no_signal = 1.0 if result == "no_signal" else 0.0 - direction = 1.0 if result == "direction" else 0.0 - near = 1.0 if result == "near" else 0.0 - svd = last.get("svd_deg") - if direction and svd is not None: - radians = math.radians(float(svd)) - return (no_signal, direction, near), (math.sin(radians), math.cos(radians)) - return (no_signal, direction, near), (0.0, 0.0) - - -def build_observation(region, position: Vec2, channel: int, config: ProblemConfig, - problem: int, blocked: list[Vec2] | None = None, - belief=None, virtual_time_s: float = 0.0, - receiver_channel: int | None = None) -> np.ndarray: - """构造 PPO 观测向量(shape=(401,),与训练环境逐位一致)。""" - field, search = config.field, config.search - center, radius = region.mec() - safe = safe_disk_radius(region, config) - readings, svd_pair = _last_measurement_features(belief) - xs = [p[0] for p in region.polygon] - ys = [p[1] for p in region.polygon] - - global_features = [ - position[0] / 2000.0, - position[1] / 2000.0, - ((channel if receiver_channel is None else receiver_channel) - field.channel_min) - / max(field.channel_max - field.channel_min, 1), - center[0] / 2000.0, - center[1] / 2000.0, - radius / 2000.0, - max(-1.0, min(1.0, safe / 1000.0)), - min(len(getattr(belief, "measurements", []) if belief is not None else []), - 12) / 12.0, - min(float(virtual_time_s or 0.0), field.max_virtual_duration_s) - / field.max_virtual_duration_s, - # 证书信息由运行时的 clear_certificate 判定传入;训练环境用 region.mec - # 的保守近似:radius + slack <= 20 - margin 即可清除。 - 1.0 if radius + region.slack_m <= field.clear_radius_m - search.clear_margin_m else 0.0, - float(problem == 4), - min(len(blocked or []) / max(search.max_blocked_probes, 1), 1.0), - (blocked[0][0] / 2000.0) if blocked else 0.0, - (blocked[0][1] / 2000.0) if blocked else 0.0, - readings[0], - readings[1], - readings[2], - svd_pair[0], - svd_pair[1], - (max(xs) - min(xs)) / 4000.0, - (max(ys) - min(ys)) / 4000.0, - ] - one_hot = np.zeros(field.channel_max - field.channel_min + 1, dtype=np.float32) - one_hot[int(channel) - field.channel_min] = 1.0 - global_features.extend(one_hot.tolist()) - assert len(global_features) == GLOBAL_DIM - - action_features: list[float] = [] - for point in candidate_actions(region, position, config, blocked): - dx, dy = point[0] - position[0], point[1] - position[1] - distance = math.hypot(dx, dy) - action_features.extend([ - dx / 2000.0, - dy / 2000.0, - min(distance / (config.cost.speed_mps * 1500.0), 2.0), # 移动耗时 / 1500s - math.hypot(point[0] - center[0], point[1] - center[1]) / 2000.0, - (math.degrees(math.atan2(dy, dx)) % 360.0) / 360.0, - 1.0 if safe >= 0 and math.hypot(point[0] - center[0], - point[1] - center[1]) <= safe + 1e-6 else 0.0, - ]) - assert len(action_features) == NUM_ACTIONS * PER_ACTION_DIM - - observation = np.asarray(global_features + action_features, dtype=np.float32) - assert observation.shape == (OBS_DIM,) - return observation - - -def empty_observation() -> np.ndarray: - """依赖缺失时的零观测(仅用于错误提示路径,不进入训练数据)。""" - return np.zeros(OBS_DIM, dtype=np.float32) diff --git a/src/mcm26b/rl/policy.py b/src/mcm26b/rl/policy.py deleted file mode 100644 index 5a5ca97..0000000 --- a/src/mcm26b/rl/policy.py +++ /dev/null @@ -1,95 +0,0 @@ -"""RL 选点策略加载与推理(运行时接入 planner 的唯一入口)。 - -运行闭环对依赖保持惰性:只有显式选择 ``--strategy rl`` / ``--q4-strategy rl`` -时才导入 stable_baselines3/torch。模型文件由 scripts/train_rl.py 生成, -观测/动作布局与训练环境共享 features 模块。 -""" - -from __future__ import annotations - -from pathlib import Path -import json - -from ..config import ProblemConfig, Vec2 -from ._constants import NUM_ACTIONS, OBS_DIM -from .features import action_mask, build_observation, candidate_actions - - -class PointSelectionPolicy: - """加载 PPO 模型,把当前候选集映射到 60 个候选检测点之一。""" - - def __init__(self, model_path: str | Path, *, device: str = "auto"): - path = Path(model_path) - if not path.is_file(): - raise RuntimeError( - f"未找到 RL 模型 {path}。请先安装 rl 依赖组并训练:\n" - f" uv sync --group rl --group dev\n" - f" uv run python scripts/train_rl.py --problem 3 --timesteps 120000\n" - f" uv run python scripts/train_rl.py --problem 4 --timesteps 40000") - try: - from stable_baselines3 import PPO - except ImportError as exc: - raise RuntimeError( - "缺少 RL 运行依赖(stable-baselines3)。请执行 " - "`uv sync --group rl` 后重试。") from exc - if device == "auto": - try: - import torch - device = "cuda" if torch.cuda.is_available() else "cpu" - except ImportError: - device = "cpu" - self.device = device - meta_path = path.with_suffix('.json') - self.metadata = (json.loads(meta_path.read_text(encoding='utf-8')) - if meta_path.exists() else {}) - self.feature_version = self.metadata.get('feature_version', 1) - if self.feature_version not in (1, 2): - raise RuntimeError('不支持的RL特征版本') - self.masked = self.metadata.get('algorithm') == 'maskable_ppo' - if self.masked: - from sb3_contrib import MaskablePPO - if self.metadata.get('feature_version') != 2: - raise RuntimeError('动作屏蔽模型的特征版本不匹配') - loader = MaskablePPO - else: - loader = PPO - self.model = loader.load(str(path), device=device) - if not self.masked and type(self.model.policy).__module__.startswith('sb3_contrib'): - raise RuntimeError('动作屏蔽模型缺少匹配的JSON元数据,不能按普通PPO推理') - try: - obs_dim = self.model.observation_space.shape[0] - action_dim = self.model.action_space.n - except Exception as exc: - raise RuntimeError(f"模型空间与 RL 接口不兼容: {path}") from exc - if obs_dim != OBS_DIM or action_dim != NUM_ACTIONS: - raise RuntimeError( - f"模型接口失配: 期望 obs={OBS_DIM}/act={NUM_ACTIONS}," - f"实际 obs={obs_dim}/act={action_dim}。请用当前版本重新训练。") - self.path = path - - def select(self, region, position: Vec2, channel: int, - config: ProblemConfig, problem: int, - blocked: list[Vec2] | None = None, belief=None, - virtual_time_s: float = 0.0, - receiver_channel: int | None = None) -> tuple[Vec2, int]: - """返回 (检测点, 候选编号);确定性 argmax(评估/比赛口径)。""" - if self.metadata.get('problem', problem) != problem: - raise RuntimeError('模型训练问题编号与当前第三/四问不匹配') - observation = build_observation( - region, position, channel, config, problem, blocked, belief, - virtual_time_s=virtual_time_s, - receiver_channel=receiver_channel if self.feature_version >= 2 else None) - kwargs = ({'action_masks': action_mask(region, position, config, problem, - blocked, belief)} - if self.masked else {}) - action, _state = self.model.predict(observation, deterministic=True, **kwargs) - action = int(action) - candidates = candidate_actions(region, position, config, blocked) - return candidates[action], action - - -def default_model_path(problem: int) -> Path: - """各问题的默认模型位置(训练脚本输出口径)。""" - if problem not in (3, 4): - raise ValueError("problem 必须是 3 或 4") - return Path("output/rl") / f"q{problem}_ppo.zip" diff --git a/src/mcm26b/routing.py b/src/mcm26b/routing.py new file mode 100644 index 0000000..8351146 --- /dev/null +++ b/src/mcm26b/routing.py @@ -0,0 +1,254 @@ +"""图论/动态规划工具箱:开放路径排序、下界与路由度量(S1/S5)。 + +设计原则(docs/第三四问图论与动态规划优化方案.md §1、§3.2、§3.4): + +- **开放路径**(起点固定为原点、终点自由)是本题的真实图问题:一次作业回合 + = 依次停靠若干作业点,代价 = Σ 移动时间 + Σ 动作耗时; +- 小规模(n ≤ ``EXACT_LIMIT``)直接用 Held-Karp 精确 DP,规模更大时用 + 最近邻打底 + 2-opt / Or-opt 改进,并始终给出 **MST 下界**用于在线后悔值审计; +- 所有函数只做"排序与度量",不承担任何安全责任,也不改变覆盖/清除语义。 + +约定:边权为**欧氏距离**(米);时间折算由调用方按 ``speed_mps`` 处理。 +2-opt / Or-opt 用 O(1) 增量代价评估,使 n ≈ 10² 量级仍可在毫秒内完成。 +""" + +from __future__ import annotations + +import math + +from .config import Vec2 + +EXACT_LIMIT = 13 # Held-Karp 状态数 2^n·n:n=13 → 106 496,纯 Python 可接受 +OR_OPT_LIMIT = 60 # 作业点数超过此值时跳过高阶 Or-opt(见 improve_open_path) + + +def path_length(order: list[Vec2], start: Vec2 = (0.0, 0.0)) -> float: + """开放路径长度(起点 start,终点自由)。""" + total = 0.0 + position = start + for point in order: + total += math.dist(position, point) + position = point + return total + + +def nearest_neighbor_order(points: list[Vec2], + start: Vec2 = (0.0, 0.0)) -> list[Vec2]: + """最近邻开放路径(O(n²),启发式上界)。""" + remaining = list(points) + order: list[Vec2] = [] + position = start + while remaining: + nxt = min(remaining, key=lambda q: math.dist(position, q)) + remaining.remove(nxt) + order.append(nxt) + position = nxt + return order + + +def two_opt_open(order: list[Vec2], start: Vec2 = (0.0, 0.0), + max_passes: int = 8) -> list[Vec2]: + """开放路径 2-opt(终点自由:只反转内部片段,不做首尾相接)。 + + 增量代价 O(1):反转 [i..j] 只影响 (prev, i) 与 (j, next) 两条边。 + """ + best = list(order) + n = len(best) + if n < 3: + return best + for _ in range(max_passes): + improved = False + for i in range(n - 1): + prev = best[i - 1] if i > 0 else start + pi = best[i] + d_prev_i = math.dist(prev, pi) + for j in range(i + 1, n): + pj = best[j] + nxt = best[j + 1] if j + 1 < n else None + d_prev_j = math.dist(prev, pj) + removed = d_prev_i + added = d_prev_j + if nxt is not None: + removed += math.dist(pj, nxt) + added += math.dist(pi, nxt) + if added < removed - 1e-9: + best[i:j + 1] = best[i:j + 1][::-1] + improved = True + pi = best[i] + d_prev_i = math.dist(prev, pi) + if not improved: + break + return best + + +def or_opt_open(order: list[Vec2], start: Vec2 = (0.0, 0.0), + max_passes: int = 4, max_segment: int = 3) -> list[Vec2]: + """Or-opt:把长度 ≤ max_segment 的片段搬家(开放路径,增量代价 O(1))。""" + best = list(order) + n = len(best) + if n < 4: + return best + for _ in range(max_passes): + improved = False + for length in range(1, min(max_segment, n - 1) + 1): + for i in range(0, n - length + 1): + segment = best[i:i + length] + rest = best[:i] + best[i + length:] + for j in range(len(rest) + 1): + if j == i: + continue + candidate = rest[:j] + segment + rest[j:] + if _segment_move_gain(best, i, length, j, start) > 1e-9: + best = candidate + improved = True + break + if improved: + break + if improved: + break + if not improved: + break + return best + + +def _segment_move_gain(order: list[Vec2], i: int, length: int, j: int, + start: Vec2) -> float: + """把 order[i:i+length] 插到去掉该段后的第 j 位所省下的长度(正=更省)。""" + rest = order[:i] + order[i + length:] + segment = order[i:i + length] + + def length_of(seq: list[Vec2]) -> float: + return path_length(seq, start) + + return length_of(order) - length_of(rest[:j] + segment + rest[j:]) + + +def improve_open_path(points: list[Vec2], start: Vec2 = (0.0, 0.0), + max_passes: int = 8) -> list[Vec2]: + """最近邻 + 2-opt + Or-opt 的开放路径改进(大规模兜底)。 + + Or-opt 的搬移评估是 O(n³),作业点数超过 :data:`OR_OPT_LIMIT` 时只做 + O(n²) 的 2-opt(度量口径下 Or-opt 的相对收益远小于其墙钟代价)。 + """ + order = nearest_neighbor_order(points, start) + order = two_opt_open(order, start, max_passes) + if len(order) > OR_OPT_LIMIT: + return order + return or_opt_open(order, start, max_passes) + + +def held_karp_open(points: list[Vec2], start: Vec2 = (0.0, 0.0)) -> list[Vec2]: + """Held-Karp 精确开放路径(起点固定、终点自由)。 + + 状态 ``dp[mask][j]`` = 访问集合 mask、当前停在 j 的最小长度; + 规模 2^n·n,仅用于 n ≤ :data:`EXACT_LIMIT`。返回最优访问顺序。 + """ + n = len(points) + if n == 0: + return [] + if n == 1: + return list(points) + dist = [[math.dist(points[i], points[j]) for j in range(n)] for i in range(n)] + from_start = [math.dist(start, points[j]) for j in range(n)] + full = (1 << n) - 1 + inf = float("inf") + dp: list[list[float]] = [[inf] * n for _ in range(1 << n)] + parent: list[list[int]] = [[-1] * n for _ in range(1 << n)] + for j in range(n): + dp[1 << j][j] = from_start[j] + for mask in range(1 << n): + row = dp[mask] + for j in range(n): + current = row[j] + if current == inf or not (mask >> j) & 1: + continue + rest = full ^ mask + while rest: + bit = rest & -rest + k = bit.bit_length() - 1 + rest ^= bit + candidate = current + dist[j][k] + nxt = mask | bit + if candidate < dp[nxt][k]: + dp[nxt][k] = candidate + parent[nxt][k] = j + best_end = min(range(n), key=lambda j: dp[full][j]) + order: list[Vec2] = [] + mask, j = full, best_end + while j != -1: + order.append(points[j]) + previous = parent[mask][j] + mask ^= 1 << j + j = previous + order.reverse() + return order + + +def optimal_open_path(points: list[Vec2], start: Vec2 = (0.0, 0.0), + exact_limit: int = EXACT_LIMIT) -> list[Vec2]: + """离线最优(或近优)开放路径:小规模精确,大规模 2-opt + Or-opt。""" + unique = _dedupe(points) + if len(unique) <= exact_limit: + return held_karp_open(unique, start) + return improve_open_path(unique, start) + + +def mst_weight(points: list[Vec2], start: Vec2 | None = (0.0, 0.0)) -> float: + """最小生成树权重(Prim,O(n²));含 start 时给出开放路径最优值的下界。 + + 开放路径删除其最后一条边即得一条生成树,故 MST 权重 ≤ 最优路径长度。 + """ + nodes = ([start] if start is not None else []) + list(points) + n = len(nodes) + if n <= 1: + return 0.0 + in_tree = [False] * n + best = [float("inf")] * n + best[0] = 0.0 + total = 0.0 + for _ in range(n): + u, u_cost = -1, float("inf") + for i in range(n): + if not in_tree[i] and best[i] < u_cost: + u, u_cost = i, best[i] + if u < 0: + break + in_tree[u] = True + total += u_cost + ux, uy = nodes[u] + for v in range(n): + if in_tree[v]: + continue + distance = math.hypot(nodes[v][0] - ux, nodes[v][1] - uy) + if distance < best[v]: + best[v] = distance + return total + + +def _dedupe(points, cell_m: float = 0.5) -> list[Vec2]: + """按 ``cell_m`` 网格去重(同一物理点只算一次作业)。""" + seen: set[tuple[int, int]] = set() + unique: list[Vec2] = [] + for point in points: + key = (int(round(point[0] / cell_m)), int(round(point[1] / cell_m))) + if key in seen: + continue + seen.add(key) + unique.append((float(point[0]), float(point[1]))) + return unique + + +def route_metrics(service_points, actual_move_m: float, + speed_mps: float = 5.0) -> dict: + """路由度量:离线最优开放回路、MST 下界与相对 gap(S1 必报列)。""" + unique = _dedupe(service_points) + offline = path_length(optimal_open_path(unique)) if unique else 0.0 + lower = mst_weight(unique) + gap = ((actual_move_m - offline) / actual_move_m) if actual_move_m > 0 else 0.0 + return { + "distinct_service_points": len(unique), + "offline_opt_open_path_m": round(offline, 1), + "offline_opt_open_path_s": round(offline / speed_mps, 1), + "route_lower_bound_s": round(lower / speed_mps, 1), + "route_gap_vs_offline": round(gap, 4), + } diff --git a/src/mcm26b/training_ui/__init__.py b/src/mcm26b/training_ui/__init__.py deleted file mode 100644 index ea762b2..0000000 --- a/src/mcm26b/training_ui/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -"""模型训练前端:本地回环 Web UI + 训练子进程监控。 - -启动: - python -m mcm26b.training_ui --ui-port 8036 -或: - python scripts/train_hrl_ui.py --ui-port 8036 - -子命令: - python -m mcm26b.training_ui --print-schema # 配置契约 - python -m mcm26b.training_ui --print-preview # 离线示例快照 -""" -from .server import TrainingUI, TrainingJob, run_training_ui -from .schema import config_schema - -__all__ = ["TrainingUI", "TrainingJob", "run_training_ui", "config_schema"] diff --git a/src/mcm26b/training_ui/__main__.py b/src/mcm26b/training_ui/__main__.py deleted file mode 100644 index 2a16926..0000000 --- a/src/mcm26b/training_ui/__main__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .server import run_training_ui - -if __name__ == "__main__": - raise SystemExit(run_training_ui()) diff --git a/src/mcm26b/training_ui/analysis.py b/src/mcm26b/training_ui/analysis.py deleted file mode 100644 index a48ff28..0000000 --- a/src/mcm26b/training_ui/analysis.py +++ /dev/null @@ -1,397 +0,0 @@ -"""训练快照的纯函数派生:曲线统计、收敛判读、进程视图。 - -从 ``server.py`` 拆出来的两个理由: - -1. 断开 ``demo`` ↔ ``server`` 的循环导入——离线预览(``demo.py``)只想复用 - 这两个纯函数,没必要反向 import 整个 HTTP 服务器模块; -2. 让"数值判读"可以脱离 HTTP 与子进程单独测试。 - -本模块只依赖标准库,不做任何 IO、不持有任何状态。 -""" - -from __future__ import annotations - -import math -import re -import subprocess -import time -from typing import Any - -__all__ = ["MAX_LOG_LINES", "MAX_METRICS", "finite_float", - "summarize_convergence", "describe_process", "process_pid"] - -MAX_LOG_LINES = 4000 -MAX_METRICS = 5000 - -_NUM_RE = re.compile(r"^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$") - - -def finite_float(value: Any) -> float | None: - """把任意输入转成有限浮点数;NaN / ±inf / 非数字一律返回 None。 - - 旧实现用 ``value != value`` 判 NaN,pylint 报 ``comparison-with-itself``; - 这里用 ``math.isfinite`` 表达同一语义,意图更直白。 - """ - if value is None or isinstance(value, bool): - return None - if isinstance(value, (int, float)): - value = float(value) - if not math.isfinite(value): - return None - return value - text = str(value).strip() - if not _NUM_RE.match(text): - return None - try: - return float(text) - except ValueError: - return None - - -def _series(metrics: list[dict[str, Any]], key: str) -> list[tuple[float, float]]: - points: list[tuple[float, float]] = [] - for point in metrics: - value = finite_float(point.get(key)) - steps = finite_float(point.get("timesteps")) or finite_float( - point.get("total_timesteps")) - if value is None: - continue - points.append((steps if steps is not None else float(len(points) + 1), value)) - return points - - -def _last_value(points: list[tuple[float, float]]) -> float | None: - return points[-1][1] if points else None - - -def _spread(points: list[tuple[float, float]], window: int = 10 - ) -> tuple[float, float] | None: - """最近 window 个点的 (极差, 起点绝对值),用于判断"是否还在动"。""" - sample = points[-window:] - if len(sample) < 3: - return None - ys = [item[1] for item in sample] - return max(ys) - min(ys), abs(ys[0]) - - -def _cv(points: list[tuple[float, float]], window: int = 10) -> float | None: - """最近 window 个点的变异系数(标准差/|均值|),越小越平稳。""" - sample = [item[1] for item in points[-window:]] - if len(sample) < 3: - return None - mean = sum(sample) / len(sample) - if abs(mean) < 1e-12: - return None - var = sum((value - mean) ** 2 for value in sample) / len(sample) - return (var ** 0.5) / abs(mean) - - -def _slope(points: list[tuple[float, float]], window: int = 8) -> float | None: - sample = points[-window:] - if len(sample) < 3: - return None - xs = [item[0] for item in sample] - ys = [item[1] for item in sample] - n = len(xs) - mean_x = sum(xs) / n - mean_y = sum(ys) / n - denom = sum((x - mean_x) ** 2 for x in xs) - if abs(denom) < 1e-12: - return None - return sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / denom - - -def _rate_per_1k(reward_points: list[tuple[float, float]], - window: int = 8) -> float | None: - """最近 window 个点的奖励增益换算成"每 1000 环境步",便于读趋势。""" - slope = _slope(reward_points, window) - if slope is None: - return None - return slope * 1000.0 - - -def _fmt_num(value: float | None, digits: int = 4) -> str: - if value is None: - return "—" - if value != 0 and abs(value) < 1e-3: - return f"{value:.3e}" - return f"{value:.{digits}g}" - - -def _flatness(points: list[tuple[float, float]], window: int = 10 - ) -> tuple[float, float] | None: - """窗口内"趋势位移 / 逐点噪声"比值:<1 表示看不出系统性变化。 - - 判定收敛时只看斜率绝对值会把"很慢但持续的提升"误判为平台;这里把窗口 - 对半切,用两半均值之差当趋势位移,用相邻点平均绝对差当噪声尺度。返回 - (比值, 噪声尺度),两者都小才是真的"又平又稳"。 - """ - sample = points[-window:] - if len(sample) < 4: - return None - ys = [item[1] for item in sample] - half = len(ys) // 2 - shift = abs(sum(ys[half:]) / len(ys[half:]) - sum(ys[:half]) / len(ys[:half])) - noise = sum(abs(b - a) for a, b in zip(ys, ys[1:])) / (len(ys) - 1) - if noise <= 0: - return (0.0, 0.0) if shift <= 0 else (float("inf"), 0.0) - return shift / noise, noise - - -def summarize_convergence(metrics: list[dict[str, Any]], - monitor: list[dict[str, Any]]) -> dict[str, Any]: - """给前端返回可解释的收敛状态与各参数最近值。 - - 这是**启发式判读**,不替代正式学习曲线分析:只依据最近窗口的斜率、 - 极差与变异系数给出"平坦/上升/未上升"的分类,并把同一组数字交给前端 - 展示,便于人工复核。 - """ - reward_points = _series(metrics, "ep_rew_mean") - if not reward_points and monitor: - reward_points = [(float(index), float(row.get("r", 0.0))) - for index, row in enumerate(monitor) - if finite_float(row.get("r")) is not None] - kl_points = _series(metrics, "approx_kl") - ev_points = _series(metrics, "explained_variance") - vf_points = _series(metrics, "value_loss") - pg_points = _series(metrics, "policy_gradient_loss") - entropy_points = _series(metrics, "entropy_loss") - fps_points = _series(metrics, "fps") - - reward_slope = _slope(reward_points) - reward_rate = _rate_per_1k(reward_points) - spread = _spread(reward_points) - cv = _cv(reward_points) - latest_kl = _last_value(kl_points) - latest_ev = _last_value(ev_points) - latest_vf = _last_value(vf_points) - latest_pg = _last_value(pg_points) - latest_entropy = _last_value(entropy_points) - latest_fps = _last_value(fps_points) - latest_timesteps = metrics[-1].get("timesteps") if metrics else None - if latest_timesteps is None and metrics: - latest_timesteps = metrics[-1].get("total_timesteps") - latest_reward = _last_value(reward_points) - latest_len = _last_value(_series(metrics, "ep_len_mean")) - latest_updates = _last_value(_series(metrics, "n_updates")) - window = min(10, max(3, len(reward_points))) - reward_window = [round(value, 6) for _, value in reward_points[-window:]] - best_reward = max((value for _, value in reward_points), default=None) - - notes: list[str] = [] - if not metrics and not monitor: - status, tone = "等待首个 rollout", "gray" - notes.append("训练进程启动后先输出环境初始化与首个 rollout 的进度行。") - elif not metrics: - status, tone = "已收到回合奖励,等待进度行", "warn" - notes.append("Monitor CSV 已有回合记录,但尚未收到 --progress-json 进度行;" - "首个 rollout 结束后会出现完整指标。") - elif len(metrics) < 3: - status, tone = "预热阶段", "warn" - notes.append("已收到初始指标,需要更多 rollout 才能判断趋势。") - else: - tone, status = "ok", "收敛趋势良好" - # 平台判据(三条同时成立):对半窗口看不出位移、窗口内波动小、 - # 逐点噪声本身也小。慢速但持续的提升会因第一条被排除。 - flat = _flatness(reward_points) - plateau = False - if flat is not None and cv is not None and latest_reward is not None: - flat_ratio, flat_noise = flat - scale = max(abs(latest_reward), 1e-9) - plateau = (flat_ratio <= 1.0 and cv <= 0.15 - and flat_noise <= 0.02 * scale - and (spread is None or spread[1] < 1e-12 - or spread[0] <= 0.15 * spread[1])) - if latest_kl is not None and latest_kl > 0.05: - status, tone = "KL 偏大,策略更新可能过猛", "bad" - notes.append(f"approx_kl={latest_kl:.4f} > 0.05") - elif latest_ev is not None and latest_ev < 0.0: - status, tone = "价值函数尚未拟合", "warn" - notes.append(f"explained_variance={latest_ev:.3f} < 0") - elif reward_slope is not None and reward_slope < 0: - status, tone = "奖励未形成上升趋势", "warn" - notes.append(f"最近 {window} 点奖励斜率为负({_fmt_num(reward_slope)}/step)") - elif plateau: - status, tone = "已趋于平稳(疑似收敛)", "ok" - notes.append("窗口内对半位移小于逐点噪声,且波动很小" - f"(变异系数 {_fmt_num(cv, 3)})") - else: - notes.append(f"最近 {window} 点奖励斜率为正({_fmt_num(reward_slope)}/step)") - if latest_kl is not None and latest_kl <= 0.02: - notes.append(f"approx_kl={latest_kl:.4f} 较稳定") - if latest_ev is not None: - notes.append(f"explained_variance={latest_ev:.3f}") - if cv is not None: - notes.append(f"奖励变异系数={_fmt_num(cv, 3)}") - if latest_entropy is not None and abs(latest_entropy) < 1e-3: - notes.append("策略熵接近 0,探索可能过早停止") - return { - "status": status, - "tone": tone, - "notes": notes, - "window": window, - "latest_timesteps": latest_timesteps, - "reward_slope": reward_slope, - "reward_rate_per_1k": reward_rate, - "reward_cv": cv, - "reward_spread": spread[0] if spread else None, - "reward_window": reward_window, - "best_reward": best_reward, - "latest_reward": latest_reward, - "latest_ep_len": latest_len, - "latest_updates": latest_updates, - "latest_kl": latest_kl, - "latest_explained_variance": latest_ev, - "latest_value_loss": latest_vf, - "latest_policy_loss": latest_pg, - "latest_entropy_loss": latest_entropy, - "latest_fps": latest_fps, - "reward_points": len(reward_points), - } - - -# 快照状态 -> 界面展示用的进程语义(阶段名称、色调、是否终态) -_STATUS_VIEW = { - "created": ("已创建", "gray", False, "命令已构造,等待 spawn"), - "running": ("运行中", "ok", False, "子进程持有控制台输出与独立进程组"), - "paused": ("已暂停", "warn", False, "进程存活但停在 step 边界;点「继续」从暂停处恢复"), - "stopping": ("停止中", "warn", False, "已请求优雅停止,等待子进程保存并退出"), - "stopped": ("已手动停止", "warn", True, "收到停止请求后退出;脚本会在 step 边界保存模型与元数据"), - "exited": ("正常结束", "ok", True, "退出码 0:训练与评估流程走完"), - "failed": ("异常结束", "bad", True, "非零退出码或启动失败,见日志尾部"), -} - -_PHASES = [ - ("created", "构造命令"), - ("spawn", "启动子进程"), - ("rollout", "采集 rollout"), - ("update", "PPO 更新"), - ("evaluate", "评估 / 保存"), - ("done", "收敛归档"), -] - -# 状态 -> 当前所处的阶段节点;节点之前为已完成,之后为未开始。 -_STATUS_PHASE = { - "created": "created", - "running": "update", - "paused": "update", - "stopping": "update", - "stopped": "done", - "exited": "done", - "failed": "done", -} - - -def process_pid(process: subprocess.Popen | None) -> int | None: - """已退出进程的 pid 访问会抛 OSError;这里统一吞掉,只用于展示。""" - if process is None: - return None - try: - return int(process.pid) - except (OSError, ValueError): - return None - - -def describe_process(snapshot: dict[str, Any]) -> dict[str, Any]: - """把 snapshot 派生为界面直接可渲染的进程对象。 - - 包含:状态语义词、进度(步/百分比)、墙钟与剩余时间估计、最近吞吐、 - 进程时间线节点。数字都取自 snapshot,前端不再重复累加,避免两个刷新 - 频率不同的计数器互相打架。 - """ - status = str(snapshot.get("status") or "created") - label, tone, terminal, hint = _STATUS_VIEW.get( - status, (status, "gray", False, "")) - config = snapshot.get("config") or {} - order = [key for key, _ in _PHASES] - current = _STATUS_PHASE.get(status, "created") - timeline = [] - for key, title in _PHASES: - index = order.index(key) - if index < order.index(current): - state = "done" - elif index == order.index(current): - state = "active" - else: - state = "pending" - timeline.append({"key": key, "label": title, "state": state}) - - metrics = snapshot.get("metrics") or [] - latest: dict[str, Any] = metrics[-1] if metrics else {} - convergence = snapshot.get("convergence") or {} - total_steps = finite_float(config.get("timesteps")) or 0.0 - # SB3 表格行可能没有 steps 字段,因此进度取"所有进度点的最大步数", - # 而不是只看最后一个点——否则末行恰好缺字段时进度会回退到 0。 - done_steps = 0.0 - for point in metrics: - value = (finite_float(point.get("timesteps")) - or finite_float(point.get("total_timesteps"))) - if value is not None and value > done_steps: - done_steps = value - if done_steps == 0.0: - done_steps = finite_float(convergence.get("latest_timesteps")) or 0.0 - # init/resume(课程迁移)时 num_timesteps 从上一阶段继续,进度必须按本次 - # 增量算;start_timesteps 由训练脚本的进度 JSON 提供,缺省按 0 处理。 - start_steps = 0.0 - for point in metrics: - value = finite_float(point.get("start_timesteps")) - if value is not None: - start_steps = value - break - trained_steps = max(0.0, done_steps - start_steps) - percent = (100.0 * trained_steps / total_steps) if total_steps > 0 else None - if percent is not None: - percent = max(0.0, min(100.0, percent)) - elapsed = float(snapshot.get("elapsed_s") or 0.0) - rate = _latest_rate(metrics) - remaining: float | None = None - eta_ts: float | None = None - if rate and rate > 0 and total_steps > 0 and trained_steps < total_steps: - remaining = (total_steps - trained_steps) / rate - eta_ts = float(snapshot.get("finished_at") or time.time()) + remaining - if not terminal and remaining is None: - cap = finite_float(config.get("max_wall_s")) or 0.0 - if cap > 0: - remaining = max(0.0, cap - elapsed) - return { - "label": label, - "tone": tone, - "terminal": terminal, - "hint": hint, - "phase": current, - "timeline": timeline, - "percent": percent, - "done_steps": done_steps, - "start_steps": start_steps, - "trained_steps": trained_steps, - "total_steps": total_steps, - "elapsed_s": round(elapsed, 3), - "rate_per_s": rate, - "remaining_s": remaining, - "eta_epoch_s": eta_ts, - "log_total": snapshot.get("log_total"), - "log_capacity": MAX_LOG_LINES, - "metric_total": snapshot.get("metric_total"), - "latest": latest, - } - - -def _latest_rate(metrics: list[dict[str, Any]], window: int = 6) -> float | None: - """最近若干个**带 fps 的**进度点的平均吞吐(步/秒),用于剩余时间估计。 - - progress JSON 行不含 fps,只有 SB3 表格行有;若只看最后 window 个点, - 恰好落在若干 JSON 行之间时会得到 None,剩余时间就会退化成墙钟上限的 - 粗糙估计。这里向前扫描直到拿到至少 1 个 fps(最多看 3*window 个点)。 - """ - if not metrics: - return None - usable: list[float] = [] - for point in reversed(metrics[-window * 3:]): - value = finite_float(point.get("fps")) - if value and value > 0: - usable.append(value) - if len(usable) >= window: - break - if not usable: - return None - return sum(usable) / len(usable) diff --git a/src/mcm26b/training_ui/demo.py b/src/mcm26b/training_ui/demo.py deleted file mode 100644 index 914777d..0000000 --- a/src/mcm26b/training_ui/demo.py +++ /dev/null @@ -1,223 +0,0 @@ -"""训练前端示例快照:把一段"看起来像真的" PPO 训练曲线合成为合法快照。 - -用途有两个,都不涉及真实训练: -1. ``GET /api/train/state?preview=1`` 让界面在没有训练进程时也能验证渲染 - (曲线、指标卡、进程时间线、日志着色、逐回合表); -2. 单元测试可以断言前端的收敛判读分支(上升/平坦/KL 过猛)各有稳定输入。 - -曲线是解析函数 + 固定种子的确定性噪声,不含任何真实评测数据。 -""" - -from __future__ import annotations - -import math -import random -import time -from typing import Any - -from .analysis import describe_process, summarize_convergence - -__all__ = ["DEMO_CONFIG", "DEMO_SCENARIOS", "demo_metrics", "demo_monitor", - "demo_log_lines", "demo_snapshot"] - -DEMO_SCENARIOS = ("rising", "plateau", "kl-spike") - -DEMO_CONFIG: dict[str, Any] = { - "problem": 3, "stage": 2, "timesteps": 12000, "seed": 320001, - "envs": 4, "vec_env": "subproc", "device": "mps", - "config_profile": "production", "reward_profile": "time", - "model": "output/hrl/ui/demo/q3.zip", "init": None, "resume": False, - "eval_episodes": 2, "rollout_steps": 256, "batch_size": 256, - "n_epochs": 10, "max_wall_s": 1200.0, "local_selector": "geometry", - "local_model": None, "verbose": 1, -} - -DEMO_COMMAND = [ - "python", "scripts/train_hrl_high.py", "--problem", "3", "--stage", "2", - "--timesteps", "12000", "--seed", "320001", "--envs", "4", - "--vec-env", "subproc", "--device", "mps", "--config-profile", "production", - "--reward-profile", "time", "--model", "output/hrl/ui/demo/q3.zip", - "--eval-episodes", "2", "--rollout-steps", "256", "--batch-size", "256", - "--n-epochs", "10", "--max-wall-s", "1200.0", "--local-selector", - "geometry", "--progress-json", "--verbose", "1", -] - -DEMO_STEPS = 48 - - -def _finite(value: float) -> float | None: - if not math.isfinite(value): - return None - return round(value, 8) - - -def demo_metrics(count: int = DEMO_STEPS, steps: int = 12000, *, - seed: int = 7, scenario: str = "rising", - total_steps: int | None = None, fps: float = 420.0 - ) -> list[dict[str, Any]]: - """合成 count 个进度点,横轴覆盖到 ``total_steps`` 的 ``count/DEMO_STEPS``。 - - 场景(用于验证收敛判读的各个分支,不含真实数据): - rising 奖励对数饱和上升、KL 正常 → "收敛趋势良好" - plateau 奖励已进入平台期 → "已趋于平稳(疑似收敛)" - kl-spike 末段近似 KL 冲高 → "KL 偏大,策略更新可能过猛" - """ - if scenario not in DEMO_SCENARIOS: - raise ValueError(f"未知示例场景: {scenario}") - total = int(total_steps if total_steps is not None else steps) - rng = random.Random(seed) - points: list[dict[str, Any]] = [] - per = total / DEMO_STEPS - ceiling = 42.0 - span = min(1.0, max(1e-6, count / float(DEMO_STEPS))) - for index in range(1, count + 1): - t = (index / float(DEMO_STEPS)) / span # 折到整段训练的进度比例 - steps_now = int(round(index * per)) - if scenario == "plateau": - reward = 41.5 + rng.uniform(-0.35, 0.35) - value_loss_curve = 3.6 + rng.uniform(-0.2, 0.2) - approx_kl = max(0.001, 0.004 + rng.uniform(-0.001, 0.001)) - explained = min(0.95, 0.88 + rng.uniform(-0.02, 0.02)) - elif scenario == "kl-spike": - reward = ceiling * (1.0 - math.exp(-3.1 * t)) + rng.uniform(-1.2, 1.2) - value_loss_curve = 62.0 * math.exp(-2.4 * t) + 3.4 - base_kl = 0.031 * math.exp(-1.7 * t) - approx_kl = base_kl + (0.075 if t > 0.8 else 0.0) + rng.uniform(-0.003, 0.003) - explained = -0.09 + 1.05 * (1.0 - math.exp(-2.2 * t)) - else: - noise = rng.uniform(-1.4, 1.4) * (1.0 - 0.6 * t) - reward = ceiling * (1.0 - math.exp(-3.1 * t)) + noise - value_loss_curve = 62.0 * math.exp(-2.4 * t) + 3.4 - approx_kl = 0.031 * math.exp(-1.7 * t) - explained = -0.09 + 1.05 * (1.0 - math.exp(-2.2 * t)) - value_loss = value_loss_curve + rng.uniform(-0.5, 0.5) - policy_loss = -0.021 + 0.006 * math.sin(index / 4.0) + rng.uniform(-0.002, 0.002) - entropy = 1.35 - 0.55 * (t if scenario != "plateau" else 0.9) \ - + rng.uniform(-0.02, 0.02) - points.append({ - "timesteps": steps_now, - "n_updates": index * 12, - "ep_rew_mean": _finite(reward), - "ep_len_mean": _finite(24.0 + 21.0 * t + rng.uniform(-1.5, 1.5)), - "value_loss": _finite(value_loss), - "policy_gradient_loss": _finite(policy_loss), - "approx_kl": _finite(max(0.0008, approx_kl + rng.uniform(-0.002, 0.002))), - "entropy_loss": _finite(entropy), - "explained_variance": _finite(min(0.97, explained - + rng.uniform(-0.03, 0.03))), - # 吞吐尽量接近真实量级(envs=4 时约 400+ 步/秒),否则剩余时间 - # 估计会给出荒谬的 ETA - "fps": _finite(max(30.0, fps * (0.92 + 0.16 * t) - + rng.uniform(-12.0, 12.0))), - }) - return points - - -def demo_monitor(count: int = 60, seed: int = 11) -> list[dict[str, Any]]: - rng = random.Random(seed) - rows = [] - clock = 0.0 - for index in range(count): - t = index / max(1, count - 1) - clock += rng.uniform(4.0, 14.0) - rows.append({ - "r": _finite(38.0 * (1.0 - math.exp(-3.0 * t)) + rng.uniform(-3.0, 3.0)), - "l": float(rng.randint(28, 74)), - "t": round(clock, 4), - }) - return rows - - -def demo_log_lines() -> list[str]: - """一段包含各类着色分支的日志:SB3 表格、进度 JSON、警告与收尾。""" - lines = [ - "=== 训练前端离线预览:以下为示例快照,非真实训练输出 ===", - "使用设备: mps", - "创建 4 个 DummyVecEnv/SubprocVecEnv 环境 (stage=2, problem=3)", - "Monitor CSV: output/hrl/ui/demo/high_curve_q3_env0.monitor.csv", - "-----------------------------", - "| rollout/ | |", - "| ep_len_mean | 31.4 |", - "| ep_rew_mean | 12.83 |", - "| time/ | |", - "| fps | 412 |", - "| total_timesteps | 512 |", - "-----------------------------", - ] - for index in range(1, 9): - t = index / 8.0 - lines.append( - '{"event": "progress", "timesteps": %d, "n_updates": %d, ' - '"ep_rew_mean": %.3f, "ep_len_mean": %.2f, "value_loss": %.4f, ' - '"policy_gradient_loss": %.5f, "approx_kl": %.5f, ' - '"entropy_loss": %.4f, "explained_variance": %.4f, "fps": %.1f}' - % (index * 1500, index * 12, 42.0 * (1 - math.exp(-3.1 * t)), - 24 + 21 * t, 62.0 * math.exp(-2.4 * t) + 3.4, -0.021 + 0.006 * t, - 0.031 * math.exp(-1.7 * t), 1.35 - 0.55 * t, - -0.09 + 1.05 * (1 - math.exp(-2.2 * t)), 390 + 70 * t) - ) - lines += [ - "UserWarning: 示例警告行,用于验证警告着色", - "确定性评估:2/2 成功,accounted=20,无异常", - "模型已保存: output/hrl/ui/demo/q3.zip", - "元数据已写入: output/hrl/ui/demo/q3.json", - ] - return lines - - -def demo_snapshot(*, log_tail: int = 400, scenario: str = "rising", - done_ratio: float = 0.62, fps: float = 420.0) -> dict[str, Any]: - """合成一次"跑到中途"的快照(键与 TrainingJob.snapshot 一致)。 - - ``done_ratio`` 控制已完成的步数比例,用来让预览更接近真实运行中状态 - (而不是刚好 100%);``scenario`` 选择收敛判读分支;``fps`` 决定剩余 - 时间估计的吞吐量级。 - """ - now = time.time() - ratio = min(1.0, max(0.05, float(done_ratio))) - metrics = demo_metrics(count=max(6, int(round(DEMO_STEPS * ratio))), - total_steps=int(DEMO_CONFIG["timesteps"]), - scenario=scenario, fps=fps) - monitor = demo_monitor(count=max(6, int(round(60 * ratio)))) - config = dict(DEMO_CONFIG) - lines = demo_log_lines() - logs = (lines * 12)[-max(1, int(log_tail)):] - status = "running" - payload: dict[str, Any] = { - "job_id": "job-preview", - "status": status, - "pid": 42424, - "created_at": now - 186.0, - "started_at": now - 184.0, - "finished_at": None, - "elapsed_s": 184.0, - "returncode": None, - "error": None, - "forced_kill": False, - "command": list(DEMO_COMMAND), - "model": str(config["model"]), - "config": config, - "log_lines": logs, - "log_total": len(logs) * 3, - "metrics": metrics, - "metric_offset": 0, - "metric_end": len(metrics), - "metric_total": len(metrics), - "monitor": monitor, - "recovery": { - "can_resume": True, - "model": str(config["model"]), - "timesteps": int(DEMO_STEPS * ratio * 12), - "reason": "recovery", - "updated_unix_s": now - 24.0, - "source": "resume.json", - "hint_file": str(config["model"]).rsplit("/", 1)[0] + "/resume.json", - "candidates": 3, - "preview": True, - }, - "preview": True, - "preview_scenario": scenario, - } - payload["convergence"] = summarize_convergence(metrics, monitor) - payload["process"] = describe_process(payload) - return payload diff --git a/src/mcm26b/training_ui/schema.py b/src/mcm26b/training_ui/schema.py deleted file mode 100644 index 05940e7..0000000 --- a/src/mcm26b/training_ui/schema.py +++ /dev/null @@ -1,328 +0,0 @@ -"""训练前端配置契约:字段元数据、分组、预设与指标字典。 - -为什么单独成模块:前端表单的取值域、单位、分组与后端 ``TrainConfig`` 的 -校验规则必须来自同一处,否则界面会允许后端拒绝的输入(或反之)。这里只 -声明"可展示"的元数据,真正的合法性判定仍由 :class:`TrainConfig.validate` -单点负责——前端只做提前提示,不复制规则。 - -指标字典 ``METRIC_CATALOG`` 同样是唯一出处:``server.summarize_convergence`` -用它取数,``/api/train/schema`` 把它交给前端画图,避免两边各写一份键名。 -""" - -from __future__ import annotations - -from typing import Any - -__all__ = [ - "CONFIG_FIELDS", "CONFIG_GROUPS", "PRESETS", "METRIC_CATALOG", - "config_schema", "preset_payloads", "metric_keys", -] - -# 字段元数据: -# kind number|integer|text|select|bool -# 其余键 前端直接使用(label/unit/group/choices/min/max/step/help/advanced) -CONFIG_FIELDS: list[dict[str, Any]] = [ - # ---------------------------------------------------------- 环境与课程 - { - "key": "problem", "kind": "select", "group": "env", - "label": "问题", "default": 3, "choices": [ - {"value": 3, "label": "问题 3(全向源)"}, - {"value": 4, "label": "问题 4(含定向源)"}, - ], - "help": "决定场景源类型与末段课程配置。", - }, - { - "key": "stage", "kind": "select", "group": "env", - "label": "课程阶段", "default": 1, "choices": [ - {"value": 1, "label": "1 · 单源 / 5 频道 / 无噪"}, - {"value": 2, "label": "2 · 3 源 / 10 频道 / ±0.5°"}, - {"value": 3, "label": "3 · 8 源 / 16 频道 / ±1°"}, - {"value": 4, "label": "4 · 10–16 源 / 20 频道 / ±1°"}, - ], - "help": "课程递进;跨阶段续训用下方 --init 迁移权重。", - }, - { - "key": "config_profile", "kind": "select", "group": "env", - "label": "配置档", "default": "production", "choices": [ - {"value": "production", "label": "production(生产保真)"}, - {"value": "coarse-pretrain", "label": "coarse-pretrain(快速粗训)"}, - ], - "help": "coarse-pretrain 显式映射为 fast 评分配置并写入模型元数据。", - }, - { - "key": "reward_profile", "kind": "select", "group": "env", - "label": "奖励口径", "default": "time", "choices": [ - {"value": "time", "label": "time(P0.4 纯时间目标)"}, - {"value": "prompt", "label": "prompt(§5.2 原始塑形)"}, - ], - "help": "对照实验用;口径固化进模型元数据,不静默替换。", - }, - { - "key": "seed", "kind": "integer", "group": "env", - "label": "随机种子", "default": 320001, "min": 0, "max": 2_147_483_647, - "help": "不同种子用于多次重复训练与方差估计。", - }, - # ---------------------------------------------------------- PPO 超参 - { - "key": "rollout_steps", "kind": "integer", "group": "ppo", - "label": "采样步数 n_steps", "default": 128, "min": 1, "max": 100_000, - "help": "每次更新前每个环境采集的步数;近似一个 rollout 的宽度。", - }, - { - "key": "batch_size", "kind": "integer", "group": "ppo", - "label": "批大小 batch_size", "default": 128, "min": 1, "max": 100_000, - "help": "建议 batch_size ≤ n_steps × envs。", - }, - { - "key": "n_epochs", "kind": "integer", "group": "ppo", - "label": "更新轮数 n_epochs", "default": 3, "min": 1, "max": 100, - "help": "每批数据的 SGD 轮数;过大易使 KL 飙升。", - }, - # ---------------------------------------------------------- 运行环境 - { - "key": "envs", "kind": "integer", "group": "runtime", - "label": "并行环境数", "default": 1, "min": 1, "max": 32, - "help": "SubprocVecEnv 下每个 worker 一个进程与 Monitor 文件。", - }, - { - "key": "vec_env", "kind": "select", "group": "runtime", - "label": "向量化方式", "default": "dummy", "choices": [ - {"value": "dummy", "label": "dummy(单进程,调试友好)"}, - {"value": "subproc", "label": "subproc(多进程,吞吐优先)"}, - ], - "help": "envs>1 且追求吞吐时选 subproc。", - }, - { - "key": "device", "kind": "select", "group": "runtime", - "label": "计算设备", "default": "auto", "choices": [ - {"value": "auto", "label": "auto(自动选择)"}, - {"value": "cpu", "label": "cpu"}, - {"value": "cuda", "label": "cuda(NVIDIA)"}, - {"value": "mps", "label": "mps(Apple 芯片)"}, - ], - "help": "CPU 路径最稳;GPU 需与 torch 构建匹配。", - }, - { - "key": "local_selector", "kind": "select", "group": "runtime", - "label": "低层执行器", "default": "geometry", "choices": [ - {"value": "geometry", "label": "geometry(几何选点,默认)"}, - {"value": "rl", "label": "rl(低层 PPO,接口预留)"}, - ], - "help": "rl 仅记录元数据,当前 HTTP 执行路径仍由高层宏动作终点决定。", - }, - # ---------------------------------------------------------- 训练规模 - { - "key": "timesteps", "kind": "integer", "group": "scale", - "label": "总步数 timesteps", "default": 2048, "min": 1, - "max": 10_000_000, "help": "本次训练的环境步总数(续训时为增量步数)。", - }, - { - "key": "max_wall_s", "kind": "number", "group": "scale", - "label": "墙钟上限 (s)", "default": 1200.0, "min": 0.1, "max": 7200.0, - "step": 30, "help": "硬上限:到点由回调主动停止并保存模型。", - }, - { - "key": "eval_episodes", "kind": "integer", "group": "scale", - "label": "评估回合数", "default": 2, "min": 0, "max": 1000, - "help": "训练结束后确定性评估;0 表示跳过。", - }, - { - "key": "verbose", "kind": "select", "group": "scale", - "label": "SB3 日志级别", "default": 1, "choices": [ - {"value": 0, "label": "0 · 静默(只留 JSON 进度)"}, - {"value": 1, "label": "1 · 表格(默认)"}, - {"value": 2, "label": "2 · 调试"}, - ], - "help": "前端已解析 SB3 表格,默认 1 便于对照原始输出。", - }, - # ---------------------------------------------------------- 模型路径 - { - "key": "model", "kind": "text", "group": "paths", - "label": "模型输出路径", "default": "output/hrl/ui/q3.zip", - "help": "相对仓库根;同目录会写入 .json 元数据与 Monitor CSV。", - }, - { - "key": "init", "kind": "text", "group": "paths", "optional": True, - "label": "初始权重 --init", "default": None, - "help": "留空=从零;填上一阶段 .zip 即课程迁移。PPO 超参与步数计数沿用" - "该模型(timesteps 按增量理解,进度条按增量显示)。", - }, - { - "key": "local_model", "kind": "text", "group": "paths", "optional": True, - "label": "低层模型 --local-model", "default": None, - "advanced": True, - "help": "仅 local_selector=rl 时有意义。", - }, - { - "key": "resume", "kind": "bool", "group": "paths", - "label": "续训 --resume", "default": False, - "help": "从模型输出路径已有 .zip 继续,timesteps 按增量理解。", - }, - { - "key": "force", "kind": "bool", "group": "paths", - "label": "覆盖已有模型 --force", "default": False, - "help": "输出路径已存在时必须勾选,否则训练脚本会拒绝覆盖。与续训互斥。", - }, - # ---------------------------------------------------------- 恢复与落盘 - { - "key": "recovery_every", "kind": "integer", "group": "recovery", - "label": "滚动恢复点间隔 --recovery-every", "default": 2000, - "help": "每 N 个环境步原子覆盖写 /_latest.zip," - "训练开始前先写起步基线;急停(强杀)后最多丢 N 步。0=关闭。", - }, - { - "key": "checkpoint_every", "kind": "integer", "group": "recovery", - "label": "历史 checkpoint 间隔 --checkpoint-every", "default": 20000, - "help": "每 N 个环境步另留一份 _<步数>.zip 供返祖对比;" - "0=只保留滚动恢复点。", - }, - { - "key": "checkpoint_keep", "kind": "integer", "group": "recovery", - "label": "历史 checkpoint 保留数 --checkpoint-keep", "default": 3, - "help": "只保留最近 K 个历史 checkpoint;滚动恢复点与起步基线不受影响。", - }, -] - -CONFIG_GROUPS: list[dict[str, str]] = [ - {"key": "env", "label": "环境与课程", "hint": "题目、课程阶段与奖励口径"}, - {"key": "ppo", "label": "PPO 超参数", "hint": "采样宽度与更新强度"}, - {"key": "runtime", "label": "运行环境", "hint": "并行、设备与低层执行器"}, - {"key": "scale", "label": "训练规模", "hint": "步数、墙钟上限与评估"}, - {"key": "recovery", "label": "恢复与落盘", "hint": "急停恢复点与历史 checkpoint"}, - {"key": "paths", "label": "模型与迁移", "hint": "产物路径、续训与课程迁移"}, -] - -# 预设 = 只覆盖差异字段;后端 from_payload 会补齐其余默认值。 -PRESETS: list[dict[str, Any]] = [ - { - "key": "smoke", - "label": "冒烟(约 1 分钟)", - "note": "64 步、CPU、无评估——只验证链路与界面。", - "payload": { - "problem": 3, "stage": 1, "timesteps": 64, "seed": 1, - "envs": 1, "vec_env": "dummy", "device": "cpu", - "config_profile": "coarse-pretrain", "reward_profile": "time", - "model": "output/hrl/ui/smoke/q3.zip", "eval_episodes": 0, - "rollout_steps": 32, "batch_size": 32, "n_epochs": 2, - "max_wall_s": 180.0, "verbose": 1, "force": True, - }, - }, - { - "key": "local-check", - "label": "本地验证(约 10 分钟)", - "note": "stage 1 单源课程 2048 步 + 2 回合评估。", - "payload": { - "problem": 3, "stage": 1, "timesteps": 2048, "seed": 320001, - "envs": 1, "vec_env": "dummy", "device": "auto", - "config_profile": "production", "reward_profile": "time", - "model": "output/hrl/ui/local/q3.zip", "eval_episodes": 2, - "rollout_steps": 128, "batch_size": 128, "n_epochs": 3, - "max_wall_s": 900.0, "verbose": 1, "force": True, - }, - }, - { - "key": "q3-main", - "label": "Q3 主训练", - "note": "stage 3 八源课程,4 进程并行;建议在训练机上跑。", - "payload": { - "problem": 3, "stage": 3, "timesteps": 200000, "seed": 320001, - "envs": 4, "vec_env": "subproc", "device": "auto", - "config_profile": "production", "reward_profile": "time", - "model": "output/hrl/ui/q3-main/q3.zip", "eval_episodes": 5, - "rollout_steps": 256, "batch_size": 256, "n_epochs": 10, - "max_wall_s": 7200.0, "verbose": 1, - }, - }, - { - "key": "q4-transfer", - "label": "Q4 课程迁移", - "note": "从 Q3 权重迁移到问题 4 末段课程(含定向源)。", - "payload": { - "problem": 4, "stage": 4, "timesteps": 120000, "seed": 420001, - "envs": 4, "vec_env": "subproc", "device": "auto", - "config_profile": "production", "reward_profile": "time", - "model": "output/hrl/ui/q4-main/q4.zip", - "init": "output/hrl/ui/q3-main/q3.zip", "eval_episodes": 5, - "rollout_steps": 256, "batch_size": 256, "n_epochs": 10, - "max_wall_s": 7200.0, "verbose": 1, - }, - }, -] - -# 指标字典:键来自训练脚本 --progress-json 的单行 JSON(短名)与 SB3 表格 -# (归一化去前缀)。前端按此顺序绘图,收敛判据在 server.summarize_convergence。 -METRIC_CATALOG: list[dict[str, Any]] = [ - { - "key": "ep_rew_mean", "label": "平均回合奖励", "role": "primary", - "color": "#4f8cff", "format": "number", "better": "up", - "help": "最近若干回合的平均回报;主要收敛判据。", - }, - { - "key": "ep_len_mean", "label": "平均回合长度", "role": "secondary", - "color": "#38bdf8", "format": "number", "better": "neutral", - "help": "回合步数;与奖励同时上升通常代表策略更完整而非更快。", - }, - { - "key": "approx_kl", "label": "近似 KL", "role": "stability", - "color": "#f59e0b", "format": "sci", "better": "down", - "help": "策略更新幅度;> 0.05 视为更新过猛。", - }, - { - "key": "explained_variance", "label": "解释方差", "role": "stability", - "color": "#34d399", "format": "number", "better": "up", - "help": "价值函数拟合优度;< 0 表示还不如均值预测。", - }, - { - "key": "value_loss", "label": "价值损失", "role": "stability", - "color": "#f87171", "format": "sci", "better": "down", - "help": "critic 拟合误差。", - }, - { - "key": "policy_gradient_loss", "label": "策略梯度损失", "role": "stability", - "color": "#c084fc", "format": "sci", "better": "neutral", - "help": "actor 的代理损失;量级小且符号可变属正常。", - }, - { - "key": "entropy_loss", "label": "策略熵", "role": "exploration", - "color": "#fbbf24", "format": "number", "better": "neutral", - "help": "探索度;若长期贴近 0 说明策略过早确定。", - }, - { - "key": "n_updates", "label": "更新次数", "role": "throughput", - "color": "#93a1bd", "format": "integer", "better": "up", - "help": "已完成的 PPO 更新轮数。", - }, - { - "key": "fps", "label": "吞吐 FPS", "role": "throughput", - "color": "#22d3ee", "format": "number", "better": "up", - "help": "每秒环境步数,反映硬件与并行配置是否吃满。", - }, -] - -_METRIC_BY_KEY = {item["key"]: item for item in METRIC_CATALOG} - - -def metric_keys() -> list[str]: - return [item["key"] for item in METRIC_CATALOG] - - -def metric_meta(key: str) -> dict[str, Any]: - return _METRIC_BY_KEY.get(key, {"key": key, "label": key, "role": "other", - "color": "#93a1bd", "format": "number", - "better": "neutral", "help": ""}) - - -def config_schema() -> dict[str, Any]: - """返回给前端的完整配置契约(字段 + 分组 + 预设 + 指标字典)。""" - return { - "fields": CONFIG_FIELDS, - "groups": CONFIG_GROUPS, - "presets": [{"key": item["key"], "label": item["label"], - "note": item["note"], "payload": dict(item["payload"])} - for item in PRESETS], - "metrics": METRIC_CATALOG, - } - - -def preset_payloads() -> dict[str, dict[str, Any]]: - return {item["key"]: dict(item["payload"]) for item in PRESETS} diff --git a/src/mcm26b/training_ui/server.py b/src/mcm26b/training_ui/server.py deleted file mode 100644 index eb956d2..0000000 --- a/src/mcm26b/training_ui/server.py +++ /dev/null @@ -1,977 +0,0 @@ -"""训练前端服务器:在评测前端同一套「本地回环 HTTP + 静态白名单」模式上, -额外托管一个受控的训练子进程,并把 stdout/JSON 进度流做成轮询 API。 - -设计边界: -- 只监听 127.0.0.1,只允许白名单静态文件; -- 只允许一个训练任务,命令由服务端用参数列表构造,不经过 shell; -- 支持启动/暂停/继续/停止/状态查询;暂停与停止通过**控制文件**下发, - POSIX 与 Windows 行为一致(详见 :mod:`mcm26b.process_control`); -- 训练进程通过 ``--progress-json`` 输出单行 JSON 进度,服务端同时兼容 - Stable-Baselines3 的表格输出和 Monitor CSV。 - -界面契约(供 ``static/`` 使用): -- ``GET /api/train/schema`` 字段/分组/预设/指标字典(``schema.py`` 单一出处) -- ``GET /api/train/state`` 快照;``after_metric=N`` 只回增量指标 -- ``POST /api/train/start`` 以部分字段启动(其余取默认值) -- ``POST /api/train/pause`` 请求训练进程在 step 边界挂起 -- ``POST /api/train/resume`` 解除挂起 -- ``POST /api/train/stop`` 请求优雅停止,超时后强杀进程树 -""" - -from __future__ import annotations - -import dataclasses -import json -import os -import re -import subprocess -import sys -import threading -import time -from collections import deque -from dataclasses import dataclass -from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer -from pathlib import Path -from typing import Any -from urllib.parse import parse_qs, urlsplit - -from ..process_control import (DEFAULT_GRACE_S, spawn_kwargs, - terminate_process_tree, write_control, - write_json_atomic) -from .analysis import (MAX_LOG_LINES, MAX_METRICS, describe_process, finite_float, - process_pid, summarize_convergence) -from .demo import DEMO_SCENARIOS, demo_snapshot -from .schema import config_schema - -__all__ = ["TrainingJob", "TrainingUI", "run_training_ui", "build_command", - "summarize_convergence", "describe_process", "discover_recovery"] - -STATIC_DIR = Path(__file__).resolve().parent / "static" -REPO_ROOT = Path(__file__).resolve().parents[3] -TRAIN_SCRIPT = REPO_ROOT / "scripts" / "train_hrl_high.py" -# 控制文件集中放在 output/ 下(已 gitignore),job 之间互不干扰 -CONTROL_DIR = REPO_ROOT / "output" / "hrl" / "ui" / "control" -# 从发出停止请求到强杀之间留给训练脚本收尾的秒数 -STOP_GRACE_S = DEFAULT_GRACE_S -STATIC_FILES = { - "/": ("index.html", "text/html; charset=utf-8"), - "/index.html": ("index.html", "text/html; charset=utf-8"), - "/app.js": ("app.js", "application/javascript; charset=utf-8"), - "/charts.js": ("charts.js", "application/javascript; charset=utf-8"), - "/style.css": ("style.css", "text/css; charset=utf-8"), -} - -_SB3_SECTIONS = ("rollout/", "time/", "train/", "system/") -# 路径/字符串参数只拒绝控制字符(含 \r\n\t 与 DEL),不做 shell 元字符过滤: -# 命令走参数列表、不经过 shell,这里只是防日志与命令行被注入控制序列。 -# 注意必须用单反斜杠转义——写成 r"...\\x00" 会变成"字面反斜杠到反斜杠"的 -# 字符类,从而把所有含 `\` 或看起来像路径分隔的输入误判为非法。 -_SAFE_ARG_RE = re.compile(r"^[^\x00-\x1f\x7f]{1,512}$") - - -def _normalize_metric(key: str) -> str: - """把 SB3 的 ``rollout/ep_rew_mean`` 与进度 JSON 的 ``ep_rew_mean`` - 归一化到同一短名,便于前端绘制。""" - key = key.strip().replace(" ", "_") - if "/" in key: - key = key.rsplit("/", 1)[-1] - return key - - -@dataclass(frozen=True) -class TrainConfig: - problem: int = 3 - stage: int = 1 - timesteps: int = 2048 - seed: int = 320001 - envs: int = 1 - vec_env: str = "dummy" - device: str = "auto" - config_profile: str = "production" - reward_profile: str = "time" - model: str = "output/hrl/ui/q3.zip" - init: str | None = None - resume: bool = False - force: bool = False - eval_episodes: int = 2 - rollout_steps: int = 128 - batch_size: int = 128 - n_epochs: int = 3 - max_wall_s: float = 1200.0 - local_selector: str = "geometry" - local_model: str | None = None - # 落盘/恢复:默认值与 scripts/train_hrl_high.py 保持一致 - checkpoint_every: int = 20000 - checkpoint_keep: int = 3 - recovery_every: int = 2000 - verbose: int = 1 - - @classmethod - def from_payload(cls, payload: dict[str, Any]) -> "TrainConfig": - if not isinstance(payload, dict): - raise ValueError("请求体必须是 JSON 对象") - defaults = cls() - data: dict[str, Any] = {} - # 用 dataclasses.fields 而不是 cls.__dataclass_fields__:后者是内部 - # 实现细节,pylint 看不到它,也无法保证未来版本仍存在。 - for field in dataclasses.fields(cls): - if field.name in payload and payload[field.name] is not None: - data[field.name] = payload[field.name] - cfg = cls(**{**defaults.__dict__, **data}) - cfg.validate() - return cfg - - def validate(self) -> None: - if self.problem not in (3, 4): - raise ValueError("problem 必须是 3 或 4") - if self.stage not in (1, 2, 3, 4): - raise ValueError("stage 必须在 1..4") - if not 1 <= int(self.timesteps) <= 10_000_000: - raise ValueError("timesteps 必须在 1..10,000,000") - if bool(self.resume) and bool(self.force): - raise ValueError("--resume 与 --force 互斥:续训不可能同时覆盖") - if not 1 <= int(self.envs) <= 32: - raise ValueError("envs 必须在 1..32") - if self.vec_env not in ("dummy", "subproc"): - raise ValueError("vec_env 必须是 dummy 或 subproc") - if self.device not in ("auto", "cpu", "cuda", "mps"): - raise ValueError("device 必须是 auto/cpu/cuda/mps") - if self.config_profile not in ("production", "coarse-pretrain"): - raise ValueError("config_profile 非法") - if self.reward_profile not in ("time", "prompt"): - raise ValueError("reward_profile 非法") - if self.local_selector not in ("geometry", "rl"): - raise ValueError("local_selector 非法") - if not 1 <= int(self.rollout_steps) <= int(self.timesteps): - raise ValueError("rollout_steps 必须在 1..timesteps") - if not 1 <= int(self.n_epochs) <= 100: - raise ValueError("n_epochs 必须在 1..100") - if not 0.0 < float(self.max_wall_s) <= 7200.0: - raise ValueError("max_wall_s 必须在 0..7200 秒") - if int(self.eval_episodes) < 0: - raise ValueError("eval_episodes 不能为负") - if not 0 <= int(self.checkpoint_every) <= 10_000_000: - raise ValueError("checkpoint_every 必须在 0..10,000,000") - if not 1 <= int(self.checkpoint_keep) <= 100: - raise ValueError("checkpoint_keep 必须在 1..100") - if not 0 <= int(self.recovery_every) <= 10_000_000: - raise ValueError("recovery_every 必须在 0..10,000,000") - for label, value in (("model", self.model), ("init", self.init), - ("local_model", self.local_model)): - if value is None: - continue - if not isinstance(value, str) or not _SAFE_ARG_RE.match(value): - raise ValueError(f"{label} 路径含非法字符") - - @property - def model_path(self) -> Path: - return (REPO_ROOT / self.model).resolve() if not Path(self.model).is_absolute() \ - else Path(self.model).resolve() - - def command(self) -> list[str]: - return build_command(self) - - -def _int_query(params: dict[str, list[str]], name: str, default: int | None, - low: int, high: int, *, optional: bool = False) -> int | None: - """解析整数查询参数;越界或非整数一律报错,不用静默钳制掩盖调用错误。""" - if name not in params: - return None if optional else default - raw = (params[name] or [""])[0].strip() - if raw == "": - return None if optional else default - try: - value = int(raw) - except ValueError: - raise ValueError(f"{name} 必须是整数") from None - if not low <= value <= high: - raise ValueError(f"{name} 必须在 {low}..{high}") - return value - - -def build_command(config: TrainConfig) -> list[str]: - if not TRAIN_SCRIPT.is_file(): - raise FileNotFoundError(f"训练脚本不存在: {TRAIN_SCRIPT}") - cmd = [ - sys.executable, str(TRAIN_SCRIPT), - "--problem", str(config.problem), - "--stage", str(config.stage), - "--timesteps", str(config.timesteps), - "--seed", str(config.seed), - "--envs", str(config.envs), - "--vec-env", config.vec_env, - "--device", config.device, - "--config-profile", config.config_profile, - "--reward-profile", config.reward_profile, - "--model", str(config.model_path), - "--eval-episodes", str(config.eval_episodes), - "--rollout-steps", str(config.rollout_steps), - "--batch-size", str(config.batch_size), - "--n-epochs", str(config.n_epochs), - "--max-wall-s", str(config.max_wall_s), - "--local-selector", config.local_selector, - "--checkpoint-every", str(config.checkpoint_every), - "--checkpoint-keep", str(config.checkpoint_keep), - "--recovery-every", str(config.recovery_every), - "--progress-json", - "--verbose", str(config.verbose), - ] - if config.resume: - cmd.append("--resume") - if config.force: - cmd.append("--force") - if config.init: - cmd.extend(["--init", str((REPO_ROOT / config.init).resolve() - if not Path(config.init).is_absolute() - else config.init)]) - if config.local_model: - cmd.extend(["--local-model", str(config.local_model)]) - return cmd - - -def discover_recovery(run_dir: Path, model_path: Path) -> dict[str, Any]: - """找出"现在就能继续训练"的那份产物。 - - 优先级: - 1. ``/resume.json``——训练脚本写的权威指针(校验目标文件真实存在); - 2. 否则按 mtime 取最新:最终模型 / 滚动恢复点 / 历史 checkpoint / 异常兜底。 - - 只认**已完整落盘**的文件:模型的 zip 与 json 都是原子替换写的,所以不会 - 出现"文件在、但打不开"的半截快照。 - """ - run_dir = Path(run_dir) - model_path = Path(model_path) - hint_file = run_dir / "resume.json" - hint = _read_json_file(hint_file) - - candidates: list[tuple[float, str, str]] = [] - - def _consider(path: Path, reason: str) -> None: - try: - stat = path.stat() - except OSError: - return - if stat.st_size > 0: - candidates.append((stat.st_mtime, str(path), reason)) - - _consider(model_path, "final_model") - ckpt_dir = run_dir / "checkpoints" - if ckpt_dir.is_dir(): - _consider(ckpt_dir / f"{model_path.stem}_ckpt_latest.zip", "recovery") - for path in ckpt_dir.glob(f"{model_path.stem}_ckpt_[0-9]*.zip"): - if path.stem.rsplit("_", 1)[-1].isdigit(): - _consider(path, "checkpoint") - _consider(run_dir / f"{model_path.stem}_emergency.zip", "emergency") - - state: dict[str, Any] = { - "can_resume": False, "model": None, "timesteps": None, - "reason": "none", "updated_unix_s": None, "source": "none", - "hint_file": str(hint_file), "candidates": len(candidates), - } - if hint and hint.get("model") and Path(str(hint["model"])).is_file(): - state.update({ - "model": str(hint["model"]), - "timesteps": _int_or_none(hint.get("timesteps")), - "reason": str(hint.get("reason") or "resume_hint"), - "updated_unix_s": _float_or_none(hint.get("created_unix_s")), - "source": "resume.json", - }) - elif candidates: - mtime, path, reason = max(candidates, key=lambda item: item[0]) - state.update({ - "model": path, "reason": reason, - "updated_unix_s": mtime, "source": "scan", - }) - if state["model"]: - state["can_resume"] = Path(str(state["model"])).is_file() - return state - - -def _read_json_file(path: Path) -> dict[str, Any] | None: - """读 JSON 文件;缺失或损坏返回 None(恢复指针不是关键路径,不能因此崩)。""" - try: - payload = json.loads(Path(path).read_text(encoding="utf-8")) - except (OSError, ValueError, UnicodeDecodeError): - return None - return payload if isinstance(payload, dict) else None - - -def _int_or_none(value: Any) -> int | None: - try: - return int(value) - except (TypeError, ValueError): - return None - - -def _float_or_none(value: Any) -> float | None: - try: - return float(value) - except (TypeError, ValueError): - return None - - -class TrainingJob: - """单个训练子进程的生命周期、日志和指标缓存。 - - ``control_dir`` 是控制文件的落地目录;默认与模型同目录,服务端则统一放到 - ``output/hrl/ui/control``(已被 gitignore)。 - """ - - def __init__(self, config: TrainConfig, control_dir: Path | None = None): - self.config = config - self.job_id = f"job-{int(time.time() * 1000)}" - self.control_path = (Path(control_dir) if control_dir is not None - else config.model_path.parent) / \ - f"{self.job_id}.control.json" - # 控制文件是暂停/停止的唯一可靠通道:Windows 上没有 SIGSTOP, - # 且 os.kill(SIGTERM) 会退化成硬杀,信号无法承载"优雅收尾"语义。 - self.command = config.command() + ["--control-file", str(self.control_path)] - self.created_at = time.time() - self.started_at: float | None = None - self.finished_at: float | None = None - self.returncode: int | None = None - # created/running/paused/stopping/stopped/exited/failed - self.status = "created" - self.error: str | None = None - self.forced_kill = False # 停止请求超时后是否动用了强杀 - self.process: subprocess.Popen | None = None - self.logs: deque[str] = deque(maxlen=MAX_LOG_LINES) - self.metrics: deque[dict[str, Any]] = deque(maxlen=MAX_METRICS) - self.monitor: list[dict[str, Any]] = [] - self._lock = threading.RLock() - self._reader: threading.Thread | None = None - self._stopper: threading.Thread | None = None - self._table_sections: list[tuple[str, dict[str, Any]]] = [] - self._table_steps: float | None = None # 当前表的 total_timesteps - self._pending_table: dict[str, Any] | None = None # 未见刻度的半张表 - self._last_table_steps: float | None = None # 上一张表已知刻度(截断兜底) - self._last_json_steps: float | None = None # 最近一条 progress JSON 的步数 - self._last_monitor_sig: tuple[int, int] | None = None - - # ------------------------------------------------------------ lifecycle - def start(self) -> None: - with self._lock: - if self.process is not None and self.process.poll() is None: - raise RuntimeError("已有训练任务在运行") - # 先落一份"不暂停、不停止"的初始控制文件,训练脚本首步就能读到; - # 否则脚本要等到第一次轮询才区分"文件缺失"与"无指令"。 - write_control(self.control_path, paused=False, stop=False) - env = os.environ.copy() - env["PYTHONUNBUFFERED"] = "1" - env["HRL_UI_JOB_ID"] = self.job_id - self.process = subprocess.Popen( # pylint: disable=consider-using-with - self.command, - cwd=str(REPO_ROOT), - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - text=True, - bufsize=1, - env=env, - **spawn_kwargs(), - ) - self.started_at = time.time() - self.status = "running" - self._reader = threading.Thread( - target=self._read_loop, name=f"{self.job_id}-reader", daemon=True) - self._reader.start() - - def pause(self) -> bool: - """请求训练进程在下一个 step 边界挂起(跨平台:控制文件)。""" - with self._lock: - process = self.process - if process is None or process.poll() is not None: - return False - if self.status not in ("running", "paused"): - return False - write_control(self.control_path, paused=True, stop=False) - self.status = "paused" - return True - - def resume(self) -> bool: - """解除挂起;训练从暂停的那个 step 继续。""" - with self._lock: - process = self.process - if process is None or process.poll() is not None: - return False - if self.status not in ("paused", "running"): - return False - write_control(self.control_path, paused=False, stop=False) - self.status = "running" - return True - - def stop(self) -> bool: - """请求优雅停止;超时后由看门狗强杀整棵进程树。 - - 控制文件先于信号:Windows 上 SIGTERM 等价于 TerminateProcess,训练 - 脚本"保存模型 + 写元数据"的收尾分支不会执行;控制文件则两个平台都能 - 命中同一段协作式收尾。强杀放到独立线程,避免 HTTP 请求被 grace 等待卡住。 - """ - with self._lock: - process = self.process - if process is None or process.poll() is not None: - return False - write_control(self.control_path, paused=False, stop=True) - self.status = "stopping" - if self._stopper is None or not self._stopper.is_alive(): - self._stopper = threading.Thread( - target=self._stop_watchdog, args=(process,), - name=f"{self.job_id}-stopper", daemon=True) - self._stopper.start() - return True - - def _stop_watchdog(self, process: subprocess.Popen) -> None: - """等 grace 让协作式停止生效,超时强杀并记下恢复点。""" - forced = terminate_process_tree(process, grace_s=STOP_GRACE_S) - with self._lock: - self.forced_kill = forced - if forced and not self.error: - self.error = (f"训练进程未在 {STOP_GRACE_S:.0f}s 内响应停止请求," - f"已强制结束进程树") - if forced: - self._write_forced_stop(process.pid) - - def _write_forced_stop(self, pid: int) -> None: - """强杀后落一份 `<模型目录>/forced_stop.json`,写明"从哪继续"。 - - 强杀没有给训练脚本任何收尾机会,所以这里由前端补上审计与恢复指引: - 磁盘上仍有原子落盘的滚动恢复点 / 历史 checkpoint,``recovery.model`` - 就是可直接 ``--resume`` 的目标。 - """ - run_dir = self.config.model_path.parent - try: - recovery = discover_recovery(run_dir, self.config.model_path) - write_json_atomic(run_dir / "forced_stop.json", { - "event": "forced_stop", - "job_id": self.job_id, - "pid": int(pid), - "created_unix_s": time.time(), - "reason": "grace_timeout", - "grace_s": STOP_GRACE_S, - "recovery": recovery, - "note": ("训练进程未响应控制文件,已强杀整棵进程树;" - "把 recovery.model 作为 --resume 目标即可继续" - "(timesteps 为追加步数)"), - }) - except OSError as exc: # 标记文件写不了也不能影响停止流程 - with self._lock: - if not self.error: - self.error = f"强杀后写恢复标记失败:{exc}" - - def wait_for_exit(self, timeout: float | None = None) -> bool: - """等待停止流程收尾(优雅退出或强杀);供前端进程退出前调用。 - - 训练子进程在独立进程组里,前端先退出并不会带走它。若不在这里等, - 前端一退出,子进程会成为孤儿——虽然控制文件仍会让它自行收尾,但 - 日志与退出码就没人接了。 - """ - thread = self._stopper - if thread is not None: - thread.join(timeout) - process = self.process - return process is None or process.poll() is not None - - def _read_loop(self) -> None: - process = self.process - assert process is not None and process.stdout is not None - try: - for raw in process.stdout: - line = raw.rstrip("\n") - self._on_line(line) - process.wait() - except Exception as exc: # pragma: no cover - 子进程读取异常 - with self._lock: - self.error = f"{type(exc).__name__}: {exc}" - finally: - with self._lock: - self.finished_at = time.time() - if self.returncode is None: - self.returncode = process.poll() - if self.status == "stopping": - self.status = "stopped" - elif self.returncode == 0: - self.status = "exited" - else: - self.status = "failed" - self._flush_table() - # 最后半张表(Ctrl+C / 崩溃时没打印 total_timesteps)按末尾 - # 已知刻度兜底提交,宁可标注来源也不丢最后一段曲线 - self._flush_pending_with_fallback() - - def _on_line(self, line: str) -> None: - with self._lock: - self.logs.append(line) - self._sync_control_events(line) - self._parse_progress_json(line) - self._parse_sb3_table(line) - self._refresh_monitor() - - def _sync_control_events(self, line: str) -> None: - """用训练脚本的回显校正前端状态。 - - 正常情况下状态由前端自己设置;但外部直接改控制文件、或脚本比前端更早 - 感知到指令时,以脚本回显的 ``paused`` / ``resumed`` / ``stop_requested`` - 为准更真实。 - """ - stripped = line.strip() - if not stripped.startswith("{") or '"event"' not in stripped: - return - try: - payload = json.loads(stripped) - except ValueError: - return - if not isinstance(payload, dict): - return - event = payload.get("event") - if event not in ("paused", "resumed", "stop_requested"): - return - with self._lock: - if event == "paused" and self.status == "running": - self.status = "paused" - elif event == "resumed" and self.status == "paused": - self.status = "running" - elif event == "stop_requested" and self.status in ("running", "paused"): - self.status = "stopping" - - # ------------------------------------------------------------ parsers - def _parse_progress_json(self, line: str) -> None: - stripped = line.strip() - if not stripped.startswith("{") or "progress" not in stripped: - return - try: - payload = json.loads(stripped) - except ValueError: - return - if not isinstance(payload, dict) or payload.get("event") != "progress": - return - point = {_normalize_metric(str(key)): value - for key, value in payload.items() if key != "event"} - steps = finite_float(point.get("timesteps")) - if steps is None: - steps = finite_float(point.get("total_timesteps")) - if steps is not None: - with self._lock: - self._last_json_steps = steps - self._append_metric(point) - - def _parse_sb3_table(self, line: str) -> None: - """兼容 SB3 verbose=1 的 ``| key | value |`` 表格。 - - SB3 每张表按 rollout/ → time/ → train/ → system/ 分段,``total_timesteps`` - 出现在 time/ 段——也就是要等同一张表的 rollout/ 行先读进来之后才拿到 - 横轴。因此不能在段头立刻提交:那会把还没有刻度的 rollout/ 行丢掉,或 - 把它们算到上一张表的刻度上。 - - 规则: - - 每次"回到 rollout/ 段"视为新一张表开始,先把上一张已封闭的表提交; - - 表格分隔线表示本表结束,此时才允许用上一张表的刻度兜底(截断表); - - 从未封闭过的半张表一直挂到进程结束才兜底提交,避免用旧刻度冒充。 - """ - if not line.startswith("|"): - if line.startswith("-"): - self._flush_table() - return - cells = [cell.strip() for cell in line.split("|")] - if len(cells) < 4: - return - raw_key, raw_value = cells[1], cells[2] - if raw_key in _SB3_SECTIONS: - if cells[0] != "": - return - with self._lock: - if raw_key == _SB3_SECTIONS[0] and self._table_sections: - self._flush_table() - if not self._table_sections or self._table_sections[-1][0] != raw_key: - self._table_sections.append((raw_key, {})) - return - key = _normalize_metric(raw_key) - value = finite_float(raw_value) - if not key or value is None: - return - with self._lock: - if not self._table_sections: - self._table_sections.append((_SB3_SECTIONS[0], {})) - self._table_sections[-1][1][key] = value - if key == "total_timesteps": - self._table_steps = value - - def _flush_table(self) -> None: - """提交缓存中的 SB3 表。 - - 刻度优先级:本表的 ``total_timesteps`` > 上一张表的已知刻度(仅在遇到 - 分隔线即"确认整表结束"时才允许兜底,见 ``_on_line``)。完全没有刻度 - 就丢弃——伪造横轴会在曲线上画出重复的幽灵点。与 JSON 进度行同一步数时 - 跳过表格版本(JSON 字段更全),表格只用于补 clip_fraction/learning_rate。 - """ - with self._lock: - sections = self._table_sections - steps = self._table_steps - self._table_sections = [] - self._table_steps = None - last_json = self._last_json_steps - if not sections: - return - table: dict[str, Any] = {} - for _name, items in sections: - table.update(items) - if steps is None: - steps = finite_float(table.get("total_timesteps")) - if steps is None: - # 半张表:交给调用方决定是否已确认结束(终止时按末尾兜底提交) - with self._lock: - self._pending_table = table - return - with self._lock: - self._last_table_steps = steps - if last_json is not None: - tolerance = max(1.0, 0.25 * steps / max(1.0, self.config.rollout_steps)) - if abs(steps - last_json) <= tolerance: - return - if "timesteps" not in table: - table["timesteps"] = steps - self._append_metric(table) - - def _flush_pending_with_fallback(self) -> None: - """进程结束时提交最后半张表:用上一次已知刻度兜底,避免丢数据。""" - with self._lock: - pending = self._pending_table - self._pending_table = None - steps = self._last_table_steps - if not pending or steps is None: - return - if "timesteps" not in pending: - pending = {**pending, "timesteps": steps} - self._append_metric(pending) - - def _append_metric(self, point: dict[str, Any]) -> None: - clean: dict[str, Any] = {} - for key, value in point.items(): - number = finite_float(value) - clean[key] = number if number is not None else value - # 补齐 timesteps:progress JSON 优先,SB3 表用 total_timesteps。 - if "timesteps" not in clean and "total_timesteps" in clean: - clean["timesteps"] = clean["total_timesteps"] - with self._lock: - if self.metrics and clean == self.metrics[-1]: - return - self.metrics.append(clean) - - def _refresh_monitor(self) -> None: - """训练脚本写入的 Monitor CSV:作为逐 episode 奖励的备用来源。""" - parent = self.config.model_path.parent - files = sorted(parent.glob("high_curve_*_env*.monitor.csv")) \ - if parent.is_dir() else [] - if not files: - return - signature = (len(files), max(path.stat().st_mtime_ns for path in files)) - if signature == self._last_monitor_sig: - return - rows: list[dict[str, Any]] = [] - for path in files: - try: - lines = path.read_text(encoding="utf-8", errors="replace").splitlines() - except OSError: - continue - header: list[str] | None = None - for line in lines: - if line.startswith("#") or not line.strip(): - continue - if header is None: - header = [item.strip() for item in line.split(",")] - continue - values = line.split(",") - if len(values) < len(header): - continue - row = {} - valid = True - for key, raw in zip(header, values): - number = finite_float(raw) - if number is None: - valid = False - break - row[key] = number - if valid: - rows.append(row) - with self._lock: - self.monitor = rows[-MAX_METRICS:] - self._last_monitor_sig = signature - - # ------------------------------------------------------------ snapshot - def snapshot(self, *, log_tail: int = 400, metric_limit: int = 2000, - after_metric: int | None = None) -> dict[str, Any]: - with self._lock: - now = self.finished_at or time.time() - elapsed = (now - self.started_at) if self.started_at else 0.0 - logs = list(self.logs)[-max(1, int(log_tail)):] - total = len(self.metrics) - if after_metric is None: - metrics = list(self.metrics)[-max(1, int(metric_limit)):] - offset = total - len(metrics) - else: - start = max(0, min(int(after_metric), total)) - metrics = list(self.metrics)[start:] - offset = start - # metric_end 是本批点在序列中的绝对末端下标:服务端 deque 满 5000 - # 后会丢弃最老的点,客户端只有拿到这个值才能区分"续接"与"服务端 - # 已滑动窗口",否则同一批点会被重复追加。 - metric_end = offset + len(metrics) - monitor = self.monitor[-max(1, int(metric_limit)):] - config = dict(self.config.__dict__) - command = list(self.command) - model_path = str(self.config.model_path) - payload = { - "job_id": self.job_id, - "status": self.status, - "pid": process_pid(self.process), - "created_at": self.created_at, - "started_at": self.started_at, - "finished_at": self.finished_at, - "elapsed_s": round(elapsed, 3), - "returncode": self.returncode, - "error": self.error, - "forced_kill": self.forced_kill, - "command": command, - "model": model_path, - "config": config, - "log_lines": logs, - "log_total": len(self.logs), - "metrics": metrics, - "metric_offset": offset, - "metric_end": metric_end, - "metric_total": total, - "monitor": monitor, - } - payload["convergence"] = summarize_convergence(metrics, monitor) - payload["process"] = describe_process(payload) - # 恢复指针在锁外做文件扫描:即使训练被强杀,这里也能给出可续训的产物 - payload["recovery"] = discover_recovery( - self.config.model_path.parent, self.config.model_path) - return payload - - -class TrainingUI: - """训练前端管理器:持有唯一 TrainingJob 与 HTTP 服务器。""" - - def __init__(self, ui_port: int = 8036): - self.ui_port = int(ui_port) - self.job: TrainingJob | None = None - self._lock = threading.RLock() - try: - self.httpd = ThreadingHTTPServer(("127.0.0.1", self.ui_port), _UIHandler) - except OSError as exc: - raise OSError( - f"无法在 127.0.0.1:{self.ui_port} 启动训练前端({exc});" - f"换一个 --ui-port 或先结束占用该端口的进程") from exc - self.httpd.daemon_threads = True - self.httpd.training_ui = self - self._serving = False - - # ------------------------------------------------------------ API - def start(self, payload: dict[str, Any]) -> dict[str, Any]: - config = TrainConfig.from_payload(payload) - with self._lock: - if self.job is not None and self.job.status in ( - "created", "running", "paused", "stopping"): - raise RuntimeError("已有训练任务在运行,请先停止") - self.job = TrainingJob(config, control_dir=CONTROL_DIR) - try: - self.job.start() - except Exception: - self.job.status = "failed" - self.job.error = "训练进程启动失败" - raise - # 与 snapshot() 同形:HTTP 层直接把返回值当响应体,不再二次拆包 - return {"job": self.job.snapshot(log_tail=1)} - - def pause(self) -> bool: - with self._lock: - return bool(self.job and self.job.pause()) - - def resume(self) -> bool: - with self._lock: - return bool(self.job and self.job.resume()) - - def stop(self) -> bool: - with self._lock: - return bool(self.job and self.job.stop()) - - def snapshot(self, *, log_tail: int, metric_limit: int, - after_metric: int | None = None) -> dict[str, Any]: - with self._lock: - if self.job is None: - return {"job": None, "message": "尚未启动训练"} - return {"job": self.job.snapshot(log_tail=log_tail, - metric_limit=metric_limit, - after_metric=after_metric)} - - @property - def is_serving(self) -> bool: - return self._serving - - def serve_forever(self) -> None: - self._serving = True - try: - self.httpd.serve_forever() - finally: - self._serving = False - - def shutdown(self) -> None: - job = self.job - if job is not None and job.stop(): - # 留出收尾落盘的时间,避免前端先退出把训练子进程留成孤儿 - job.wait_for_exit(timeout=STOP_GRACE_S + 5.0) - if self._serving: - self.httpd.shutdown() - self.httpd.server_close() - - -class _UIHandler(BaseHTTPRequestHandler): - protocol_version = "HTTP/1.1" - server_version = "MCM26B-Training-UI/1.0" - - def log_message(self, format, *args): # noqa: A002 # pylint: disable=redefined-builtin - """覆写 stdlib 签名以吞掉访问日志;参数名沿用 ``format`` 不能改。""" - - @property - def ui(self) -> TrainingUI: - return self.server.training_ui # type: ignore[attr-defined] - - def do_GET(self): - parts = urlsplit(self.path) - if parts.path in STATIC_FILES: - self._serve_static(parts.path) - elif parts.path == "/api/train/schema": - self._send_json(200, config_schema()) - elif parts.path == "/api/train/state": - params = parse_qs(parts.query) - if (params.get("preview") or ["0"])[0] in ("1", "true", "yes"): - # 离线预览:返回合成快照,不触碰任何训练进程 - scenario = (params.get("scenario") or ["rising"])[0] - if scenario not in DEMO_SCENARIOS: - self._send_json(400, {"error": f"未知预览场景 {scenario}"}) - return - self._send_json(200, {"job": demo_snapshot(log_tail=400, - scenario=scenario)}) - return - try: - log_tail = _int_query(params, "log_tail", 400, 1, MAX_LOG_LINES) - metric_limit = _int_query(params, "metric_limit", 2000, 1, - MAX_METRICS) - after = _int_query(params, "after_metric", None, 0, - MAX_METRICS * 2, optional=True) - except ValueError as exc: - self._send_json(400, {"error": str(exc)}) - return - self._send_json(200, self.ui.snapshot( - log_tail=log_tail, metric_limit=metric_limit, - after_metric=after)) - else: - self._send_json(404, {"error": f"未知路径 {parts.path}"}) - - def do_POST(self): - parts = urlsplit(self.path) - payload = self._read_json() - if payload is None: - self._send_json(400, {"error": "请求体必须是合法 JSON"}) - return - if not isinstance(payload, dict): - self._send_json(400, {"error": "请求体必须是 JSON 对象"}) - return - try: - if parts.path == "/api/train/start": - self._send_json(200, self.ui.start(payload)) - elif parts.path == "/api/train/pause": - self._send_json(200, {"paused": self.ui.pause()}) - elif parts.path == "/api/train/resume": - self._send_json(200, {"resumed": self.ui.resume()}) - elif parts.path == "/api/train/stop": - self._send_json(200, {"stopped": self.ui.stop()}) - else: - self._send_json(404, {"error": f"未知路径 {parts.path}"}) - except (ValueError, RuntimeError, FileNotFoundError, - PermissionError) as exc: - self._send_json(409, {"error": str(exc)}) - except OSError as exc: - self._send_json(409, {"error": f"操作系统错误:{exc}"}) - except Exception as exc: # pragma: no cover - 兜底,避免连接被静默中断 - self._send_json(500, {"error": f"服务端内部错误:{type(exc).__name__}: {exc}"}) - - def _serve_static(self, path: str) -> None: - filename, content_type = STATIC_FILES[path] - data = (STATIC_DIR / filename).read_bytes() - self.send_response(200) - self.send_header("Content-Type", content_type) - self.send_header("Content-Length", str(len(data))) - self.send_header("Cache-Control", "no-store") - self.end_headers() - self.wfile.write(data) - - def _read_json(self) -> dict[str, Any] | None: - try: - length = int(self.headers.get("Content-Length") or 0) - except ValueError: - return None - if length <= 0 or length > 1_000_000: - return {} - data = self.rfile.read(length) - try: - return json.loads(data.decode("utf-8")) - except (ValueError, UnicodeDecodeError): - return None - - def _send_json(self, status: int, payload: dict[str, Any]) -> None: - data = json.dumps(payload, ensure_ascii=False, allow_nan=False).encode("utf-8") - self.send_response(status) - self.send_header("Content-Type", "application/json; charset=utf-8") - self.send_header("Content-Length", str(len(data))) - self.send_header("Cache-Control", "no-store") - self.end_headers() - self.wfile.write(data) - - -def run_training_ui(argv=None) -> int: - import argparse - - parser = argparse.ArgumentParser(description="HRL 模型训练前端(本地回环)") - parser.add_argument("--ui-port", type=int, default=8036) - parser.add_argument("--no-browser", action="store_true") - parser.add_argument("--print-schema", action="store_true", - help="打印配置契约(字段/分组/预设/指标)后退出") - parser.add_argument("--print-preview", action="store_true", - help="打印离线示例快照 JSON 后退出") - args = parser.parse_args(argv) - if args.print_schema: - print(json.dumps(config_schema(), ensure_ascii=False, indent=2)) - return 0 - if args.print_preview: - print(json.dumps({"job": demo_snapshot(log_tail=200)}, - ensure_ascii=False, indent=2)) - return 0 - try: - ui = TrainingUI(ui_port=args.ui_port) - except OSError as exc: - print(f"[训练前端] {exc}", file=sys.stderr) - return 2 - url = f"http://127.0.0.1:{args.ui_port}/" - # flush=True:界面常用 `> log 2>&1 &` 方式后台启动,不刷新会看不到启动横幅 - print(f"训练前端已启动:{url}", flush=True) - print(f" 配置契约:{url}api/train/schema", flush=True) - print(f" 状态快照:{url}api/train/state", flush=True) - print(f" 离线预览:{url}api/train/state?preview=1", flush=True) - print(" 界面只监听 127.0.0.1;Ctrl+C 退出并停止训练子进程。", flush=True) - if not args.no_browser: - try: - import webbrowser - webbrowser.open(url) - except Exception: - pass - try: - ui.serve_forever() - except KeyboardInterrupt: - pass - finally: - ui.shutdown() - return 0 - - -if __name__ == "__main__": # pragma: no cover - raise SystemExit(run_training_ui()) diff --git a/src/mcm26b/training_ui/static/app.js b/src/mcm26b/training_ui/static/app.js deleted file mode 100644 index 9b27cf9..0000000 --- a/src/mcm26b/training_ui/static/app.js +++ /dev/null @@ -1,841 +0,0 @@ -/* 训练前端主逻辑:纯原生 JS,无外部依赖。 - 职责分工: - - 表单由 /api/train/schema 的字段元数据生成,不在前端复制校验规则; - - 训练数值全部取自 /api/train/state 快照(服务端已算好进度、吞吐、 - 收敛判读),前端只做格式化与渲染,避免两套算法对不上; - - 指标增量拉取(after_metric 游标),日志按尾部行数拉取。 */ -"use strict"; - -const $ = (id) => document.getElementById(id); -const REFRESH_MS = 1500; -// 与服务端 MAX_METRICS 对齐:本地缓存上限,避免长时间训练把内存吃满 -const METRIC_LIMIT = 5000; - -const state = { - schema: null, - preview: false, // 离线预览:不再启动进程,只渲染示例快照 - polling: false, - saving: false, // 配置表单是否处于"训练中"锁定态 - metrics: [], // 本地累积的进度点(按 timesteps 递增) - metricCache: [], // metrics 的同一个数组(显式持有,避免 slice/concat 时丢引用) - metricNext: 0, // 本地已吃到的下一个下标(= 服务端下次应返回的 offset) - metricTotal: 0, // 服务端累计进度点总数(增量拉取的游标) - chartKey: "ep_rew_mean", - jobKey: null, // job_id 变化时清空本地缓存 - lastLogSignature: "", - lastStatus: null, // 最近一次快照的状态:决定暂停按钮是"暂停"还是"继续" - lastJob: null, // 最近一次快照:恢复按钮需要读 job.recovery -}; - -// ---------------------------------------------------------------- 工具 -function escapeHtml(value) { - return String(value == null ? "" : value) - .replace(/[&<>"']/g, (c) => ({ "&": "&", "<": "<", ">": ">", - '"': """, "'": "'" }[c])); -} -function fmtNumber(value, digits) { - if (value === null || value === undefined || value === "" || Number.isNaN(Number(value))) return "—"; - const num = Number(value); - const abs = Math.abs(num); - if (abs !== 0 && (abs < 1e-3 || abs >= 1e5)) return num.toExponential(2); - const d = digits === undefined ? (abs >= 100 ? 1 : abs >= 1 ? 2 : 4) : digits; - return num.toFixed(d); -} -function fmtInt(value) { - if (value === null || value === undefined || Number.isNaN(Number(value))) return "—"; - return Math.round(Number(value)).toLocaleString("en-US"); -} -function fmtDuration(seconds) { - if (seconds === null || seconds === undefined || !isFinite(seconds) || seconds < 0) return "—"; - const s = Math.round(seconds); - const h = Math.floor(s / 3600), m = Math.floor((s % 3600) / 60), sec = s % 60; - if (h > 0) return `${h}h${String(m).padStart(2, "0")}m`; - if (m > 0) return `${m}m${String(sec).padStart(2, "0")}s`; - return `${sec}s`; -} -function fmtClock(epochSeconds) { - if (!epochSeconds) return "—"; - const d = new Date(epochSeconds * 1000); - return `${String(d.getHours()).padStart(2, "0")}:${String(d.getMinutes()).padStart(2, "0")}:${String(d.getSeconds()).padStart(2, "0")}`; -} -function chip(id, label, value, tone) { - const el = $(id); - if (!el) return; - el.className = `chip ${tone || "gray"}`; - el.innerHTML = `${label}${escapeHtml(value)}`; -} -function setText(id, text) { const el = $(id); if (el) el.textContent = text; } - -// ---------------------------------------------------------------- 启动 -async function boot() { - try { - const res = await fetch("/api/train/schema"); - if (!res.ok) throw new Error(`HTTP ${res.status}`); - state.schema = await res.json(); - } catch (err) { - state.schema = { fields: [], groups: [], presets: [], metrics: [] }; - showBanner("bad", `无法读取配置契约(${err.message}):请确认已通过 python -m mcm26b.training_ui 启动前端。`); - } - buildForm(); - await poll(); - bindChartInteractions(); - setInterval(poll, REFRESH_MS); -} - -function showBanner(tone, html) { - const el = $("banner"); - if (!html) { el.classList.add("hidden"); el.innerHTML = ""; return; } - el.className = `banner ${tone || ""}`; - el.innerHTML = html; - el.classList.remove("hidden"); -} - -// ---------------------------------------------------------------- 表单 -function buildForm() { - const presets = $("presets"); - presets.innerHTML = ""; - for (const preset of state.schema.presets || []) { - const btn = document.createElement("button"); - btn.type = "button"; - btn.className = "preset"; - btn.innerHTML = `${escapeHtml(preset.label)}${escapeHtml(preset.note || "")}`; - btn.onclick = () => { applyValues(preset.payload); $("form-error").textContent = ""; }; - presets.appendChild(btn); - } - - const wrap = $("form-groups"); - wrap.innerHTML = ""; - for (const group of state.schema.groups || []) { - const box = document.createElement("fieldset"); - box.className = "group"; - const fields = (state.schema.fields || []).filter((f) => f.group === group.key); - box.innerHTML = `${escapeHtml(group.label)}` + - `

${escapeHtml(group.hint || "")}

`; - for (const field of fields) box.appendChild(buildField(field)); - wrap.appendChild(box); - } - applyValues({}); -} - -function buildField(field) { - const row = document.createElement("div"); - row.className = "field"; - row.id = `field-${field.key}`; - const label = document.createElement("label"); - label.className = "flabel"; - label.innerHTML = `${escapeHtml(field.label)}` + - (field.unit ? `${escapeHtml(field.unit)}` : ""); - let control; - if (field.kind === "select") { - control = document.createElement("select"); - for (const choice of field.choices || []) { - const option = document.createElement("option"); - option.value = String(choice.value); - option.textContent = choice.label; - control.appendChild(option); - } - } else if (field.kind === "bool") { - control = document.createElement("input"); - control.type = "checkbox"; - row.classList.add("check"); - } else { - control = document.createElement("input"); - control.type = field.kind === "text" ? "text" : "number"; - if (field.kind === "number") control.step = field.step || "any"; - if (field.min !== undefined) control.min = field.min; - if (field.max !== undefined) control.max = field.max; - } - control.id = `cfg-${field.key}`; - control.dataset.key = field.key; - control.addEventListener("input", () => { row.classList.add("dirty"); row.classList.remove("invalid"); }); - row.appendChild(label); - row.appendChild(control); - if (field.help) { - const help = document.createElement("span"); - help.className = "fhelp"; - help.textContent = field.help; - row.appendChild(help); - } - return row; -} - -function setControl(field, value) { - const control = $(`cfg-${field.key}`); - if (!control) return; - if (field.kind === "bool") { control.checked = Boolean(value); return; } - if (value === null || value === undefined) { control.value = ""; return; } - control.value = String(value); -} - -function applyValues(values) { - for (const field of state.schema.fields || []) { - const has = Object.prototype.hasOwnProperty.call(values, field.key); - setControl(field, has ? values[field.key] : field.default); - const row = $(`field-${field.key}`); - if (row) row.classList.remove("dirty", "invalid"); - } -} - -function collectValues() { - const out = {}; - for (const field of state.schema.fields || []) { - const control = $(`cfg-${field.key}`); - if (!control) continue; - if (field.kind === "bool") { out[field.key] = control.checked; continue; } - const raw = String(control.value || "").trim(); - if (raw === "") { out[field.key] = null; continue; } - if (field.kind === "integer") out[field.key] = Number.parseInt(raw, 10); - else if (field.kind === "number") out[field.key] = Number.parseFloat(raw); - else if (field.kind === "select") { - const choices = field.choices || []; - const match = choices.find((c) => String(c.value) === raw); - out[field.key] = match ? match.value : raw; - } else out[field.key] = raw; - } - return out; -} - -/* 与后端 validate() 对齐的前置提示:只做提示,不阻止提交后端的权威判定 */ -function validateLocally(values) { - const problems = []; - for (const field of state.schema.fields || []) { - const value = values[field.key]; - if (value === null || value === undefined) continue; - if (field.kind === "integer" || field.kind === "number") { - if (!isFinite(value)) { problems.push(`${field.label} 不是有效数字`); markInvalid(field.key, true); continue; } - if (field.min !== undefined && value < field.min) { problems.push(`${field.label} 不能小于 ${field.min}`); markInvalid(field.key, true); continue; } - if (field.max !== undefined && value > field.max) { problems.push(`${field.label} 不能大于 ${field.max}`); markInvalid(field.key, true); continue; } - markInvalid(field.key, false); - } - } - if (values.rollout_steps && values.timesteps && values.rollout_steps > values.timesteps) { - problems.push("采样步数 n_steps 不能大于总步数 timesteps"); - markInvalid("rollout_steps", true); - } - if (values.batch_size && values.rollout_steps && values.envs - && values.batch_size > values.rollout_steps * values.envs) { - problems.push("批大小 batch_size 大于 n_steps × envs,PPO 每轮数据不足以分批"); - markInvalid("batch_size", true); - } - return problems; -} - -function markInvalid(key, bad) { - const row = $(`field-${key}`); - if (row) row.classList.toggle("invalid", Boolean(bad)); -} - -// ---------------------------------------------------------------- 轮询 -async function poll() { - if (state.polling) return; - if (state.preview) return; - state.polling = true; - try { - const query = new URLSearchParams({ - log_tail: $("log-tail").value || "400", - metric_limit: String(METRIC_LIMIT), - }); - if (state.metricTotal > 0) query.set("after_metric", String(state.metricTotal)); - const res = await fetch(`/api/train/state?${query.toString()}`); - const payload = await res.json(); - if (!res.ok) throw new Error(payload.error || `HTTP ${res.status}`); - chip("chip-conn", "连接", "已连接", "ok"); - render(payload.job); - } catch (err) { - chip("chip-conn", "连接", "断开", "bad"); - } finally { - state.polling = false; - } -} - -/* 合并一次快照返回的进度点。服务端用 metric_offset 给出这批点的绝对起点, - 客户端只需与"本地已吃到的下一个下标"(metricNext)对账: - - offset === metricNext:正常续接(增量拉取),concat; - - offset > metricNext:本地缓存与这批点之间缺了若干点(例如页面刷新后 - 服务端窗口已前移),保留本地旧点会让曲线出现空洞,因此整体替换; - - offset < metricNext:本地缓存比服务端更新(服务端重启/计数回退), - 忽略这批过期点,不动本地缓存。 - 判据是"绝对下标"而不是长度:游标是服务端总数,本地可能被裁剪得更短, - 拿长度比较会把同一批点重复追加(本函数注释即为此 bug 的回归说明)。 - 下标必须显式转 Number:JSON 里若出现字符串形式的数字,JS 的 >= 会退化成 - 字典序比较("14" >= "014" 为 false),静默走错分支。 */ -function absorbMetrics(job) { - const incoming = Array.isArray(job.metrics) ? job.metrics : []; - const rawOffset = Number(job.metric_offset); - const offset = Number.isFinite(rawOffset) ? rawOffset : null; - const cache = state.metricCache || []; - if (incoming.length && offset !== null) { - if (!cache.length || offset > state.metricNext) { - // 首批,或与本地之间有缺口(服务端窗口前移):整体替换,避免曲线断档 - state.metricCache = incoming.slice(); - state.metricNext = offset + incoming.length; - } else if (offset === state.metricNext) { - state.metricCache = cache.concat(incoming); - state.metricNext = offset + incoming.length; - } else { - return; // 过期批次:本地已有更新的点,直接忽略 - } - } - if (state.metricCache.length > METRIC_LIMIT) { - state.metricCache = state.metricCache.slice(state.metricCache.length - METRIC_LIMIT); - } - state.metrics = state.metricCache; - const total = Number(job.metric_total); - if (Number.isFinite(total)) state.metricTotal = total; -} - -// ---------------------------------------------------------------- 渲染 -function render(job) { - if (!job) { - state.lastJob = null; - renderIdle(); - return; - } - state.lastJob = job; - if (job.job_id !== state.jobKey) { - state.jobKey = job.job_id; - state.metrics = []; - state.metricTotal = 0; - state.lastLogSignature = ""; - } - absorbMetrics(job); - - renderProcess(job); - renderConvergence(job); - renderCharts(); - renderLog(job); - renderEpisodes(job); - renderBanner(job); - renderRecovery(job); - renderJobLine(job); -} - -function renderIdle() { - chip("chip-process", "进程", "未启动", "gray"); - chip("chip-progress", "进度", "—", "gray"); - chip("chip-elapsed", "墙钟", "—", "gray"); - chip("chip-device", "设备", "—", "gray"); - setText("process-hint", "启动任务后显示子进程与步进进度"); - setText("steps-done", "0"); setText("steps-total", "0"); - setText("progress-percent", "0.0%"); - $("bar-fill").style.width = "0%"; - setText("eta", "—"); setText("eta-clock", "—"); setText("metric-total", "0"); - for (const id of ["stat-pid", "stat-fps", "stat-elapsed", "stat-rc"]) setText(id, "—"); - setText("stat-logs", "0"); - $("timeline").innerHTML = ""; - setText("command-preview", ""); - state.lastStatus = null; - const pauseBtn = $("btn-pause"); - pauseBtn.disabled = true; - pauseBtn.textContent = "暂停训练"; - chip("chip-converge", "判读", "等待数据", "gray"); - $("converge-notes").innerHTML = ""; - $("metric-grid").innerHTML = '

尚未启动训练,暂无参数。

'; - setFormLocked(false); -} - -function renderJobLine(job) { - const cfg = job.config || {}; - const parts = [ - `任务 ${job.job_id}`, `问题 ${cfg.problem}`, `阶段 ${cfg.stage}`, - `口径 ${cfg.reward_profile}/${cfg.config_profile}`, - `seed ${cfg.seed}`, `envs ${cfg.envs}·${cfg.vec_env}`, - ]; - setText("job-line", parts.join(" · ")); - chip("chip-device", "设备", `${cfg.device || "?"}`, "cyan"); -} - -function renderProcess(job) { - const process = job.process || {}; - const tone = process.tone || "gray"; - chip("chip-process", "进程", process.label || job.status, tone); - chip("chip-elapsed", "墙钟", fmtDuration(process.elapsed_s), tone === "gray" ? "gray" : "cyan"); - - const percent = process.percent; - setText("chip-progress-value", ""); - chip("chip-progress", "进度", - percent === null || percent === undefined ? "—" : `${percent.toFixed(1)}%`, - percent !== null && percent >= 100 ? "ok" : "cyan"); - setText("steps-done", fmtInt(process.trained_steps ?? process.done_steps)); - setText("steps-total", fmtInt(process.total_steps)); - setText("progress-percent", percent === null || percent === undefined ? "—" : `${percent.toFixed(2)}%`); - const fill = $("bar-fill"); - fill.style.width = `${percent === null || percent === undefined ? 0 : percent}%`; - fill.className = "bar-fill" + (tone === "bad" ? " bad" : tone === "warn" ? " warn" : tone === "ok" && percent >= 100 ? " ok" : ""); - setText("process-hint", process.hint || ""); - setText("eta", fmtDuration(process.remaining_s)); - setText("eta-clock", fmtClock(process.eta_epoch_s)); - setText("metric-total", fmtInt(process.metric_total)); - - setText("stat-pid", process.terminal ? "已退出" : (job.pid ? `PID ${job.pid}` : "—")); - setText("stat-pgid", process.terminal ? "已回收" : "独立会话"); - const fps = state.metrics.length ? lastFinite(state.metrics, "fps") : null; - setText("stat-fps", fps === null ? "—" : fmtNumber(fps, 1)); - setText("stat-elapsed", fmtDuration(process.elapsed_s)); - const rc = $("stat-rc"); - rc.textContent = job.returncode === null || job.returncode === undefined ? "—" : String(job.returncode); - rc.className = "v" + (job.returncode === 0 ? " ok" : job.returncode ? " bad" : ""); - setText("stat-logs", `${fmtInt(process.log_total)} / ${fmtInt(process.log_capacity)}`); - - renderTimeline(process); - setText("command-preview", job.command ? `$ ${job.command.join(" ")}` : ""); - state.lastStatus = job.status; - setFormLocked(job.status === "running" || job.status === "created" - || job.status === "paused" || job.status === "stopping"); - $("btn-stop").disabled = !(job.status === "running" || job.status === "created" - || job.status === "paused"); - const pauseBtn = $("btn-pause"); - pauseBtn.disabled = !(job.status === "running" || job.status === "paused"); - pauseBtn.textContent = job.status === "paused" ? "继续训练" : "暂停训练"; -} - -function renderTimeline(process) { - const wrap = $("timeline"); - const nodes = process.timeline || []; - if (!nodes.length) { wrap.innerHTML = ""; return; } - const active = nodes.findIndex((n) => n.state === "active"); - if (wrap.dataset.signature !== nodes.map((n) => n.label).join("|")) { - wrap.innerHTML = ""; - nodes.forEach((node, index) => { - if (index > 0) { - const link = document.createElement("span"); - link.className = "link"; - link.dataset.link = String(index); - wrap.appendChild(link); - } - const el = document.createElement("span"); - el.className = "node"; - el.dataset.node = node.key; - el.innerHTML = `${escapeHtml(node.label)}`; - wrap.appendChild(el); - }); - wrap.dataset.signature = nodes.map((n) => n.label).join("|"); - } - nodes.forEach((node, index) => { - const el = wrap.querySelector(`[data-node="${node.key}"]`); - if (!el) return; - let cls = "node"; - if (node.state === "done") cls += " done"; - else if (node.state === "active") cls += " active"; - if (node.state === "active" && process.tone === "bad") cls += " failed"; - el.className = cls; - const link = wrap.querySelector(`[data-link="${index}"]`); - if (link) link.className = "link" + (index <= active ? " done" : ""); - }); -} - -function setFormLocked(locked) { - state.saving = locked; - for (const field of state.schema.fields || []) { - const control = $(`cfg-${field.key}`); - if (control) control.disabled = locked; - } - $("btn-start").disabled = locked; - $("btn-start").textContent = locked ? "训练中…" : "开始训练"; -} - -function renderBanner(job) { - const process = job.process || {}; - if (state.preview) { - showBanner("warn", "离线预览模式:正在渲染示例快照,不会启动训练进程。点「刷新」可返回实时轮询。"); - return; - } - if (job.status === "failed") { - showBanner("bad", `训练异常结束(退出码 ${job.returncode === null ? "?" : job.returncode}):${escapeHtml(job.error || "见日志尾部")}。`); - } else if (job.status === "paused") { - showBanner("warn", "训练已暂停:进程与显存仍在,但停在 step 边界不再推进。点「继续训练」从暂停处恢复,或点「停止训练」保存当前模型后退出。"); - } else if (job.status === "stopped") { - showBanner("warn", job.forced_kill - ? "停止请求超时,已强制结束进程树;最后一段模型可能未保存,请检查 checkpoint 目录。" - : "已按请求停止训练(控制文件协作式停止),脚本已在 step 边界保存当前模型与元数据。"); - } else if (job.status === "exited") { - showBanner("ok", "训练与评估流程正常结束,模型与元数据已写入输出目录。"); - } else if (process.remaining_s !== null && process.remaining_s !== undefined - && process.eta_epoch_s === null && job.status === "running") { - showBanner("warn", `尚未产出可估算吞吐的进度点,剩余时间按墙钟上限回退估计:${fmtDuration(process.remaining_s)}。`); - } else { - showBanner("", ""); - } -} - -// ---------------------------------------------------------------- 恢复 -function renderRecovery(job) { - const recovery = job.recovery || {}; - const box = $("recovery-box"); - if (!box) return; - if (!recovery.model || recovery.reason === "none") { - box.classList.add("hidden"); - return; - } - box.classList.remove("hidden"); - const steps = recovery.timesteps === null || recovery.timesteps === undefined - ? "步数未知" : `${fmtInt(recovery.timesteps)} 步`; - const when = recovery.updated_unix_s ? fmtClock(recovery.updated_unix_s) : "—"; - setText("recovery-text", - `可恢复产物:${steps} · 来源 ${recovery.reason || "?"} · 更新 ${when} · ${recovery.model}`); - const button = $("btn-recover"); - // 离线预览里的恢复信息是合成的,不允许真的去续训 - button.disabled = !recovery.can_resume || Boolean(state.preview); -} - -// ---------------------------------------------------------------- 收敛 -function renderConvergence(job) { - const convergence = job.convergence || {}; - chip("chip-converge", "判读", convergence.status || "等待数据", convergence.tone || "gray"); - const notes = convergence.notes || []; - $("converge-notes").innerHTML = notes.length - ? notes.map((note) => `
  • ${escapeHtml(note)}
  • `).join("") - : "
  • 暂无判读说明。
  • "; - - const grid = $("metric-grid"); - grid.innerHTML = ""; - const catalog = state.schema.metrics || []; - for (const metric of catalog) { - const points = seriesOf(metric.key); - const values = points.map((p) => p[1]); - const value = values.length ? values[values.length - 1] : null; - const prev = values.length > 1 ? values[values.length - 2] : null; - const delta = value !== null && prev !== null ? value - prev : null; - const card = document.createElement("div"); - card.className = "metric-card"; - const alert = isAlert(metric.key, value); - if (alert) card.classList.add("alert"); - const trendClass = delta === null || Math.abs(delta) < 1e-12 ? "flat" - : delta > 0 ? "up" : "down"; - const arrow = delta === null || Math.abs(delta) < 1e-12 ? "→" : delta > 0 ? "▲" : "▼"; - card.innerHTML = - `
    ${escapeHtml(metric.label)}` + - `${escapeHtml(fmtValue(metric, value))}
    ` + - `` + - `
    ${arrow} ${escapeHtml(delta === null ? "—" : fmtValue(metric, delta))}` + - `${points.length} 点
    `; - if (alert) card.title = alert; - grid.appendChild(card); - const canvas = card.querySelector("canvas"); - if (canvas && values.length >= 2) { - window.Charts.sparkline(canvas, values.slice(-120), { color: metric.color }); - } - } -} - -function isAlert(key, value) { - if (value === null || value === undefined) return null; - if (key === "approx_kl" && value > 0.05) return "近似 KL 超过 0.05:策略更新幅度过大"; - if (key === "explained_variance" && value < 0) return "解释方差为负:价值函数尚未拟合"; - if (key === "entropy_loss" && Math.abs(value) < 1e-3) return "策略熵接近 0:探索可能过早停止"; - return null; -} - -function fmtValue(metric, value) { - if (value === null || value === undefined || !isFinite(value)) return "—"; - if (metric.format === "integer") return fmtInt(value); - return fmtNumber(value); -} - -function seriesOf(key) { - const points = []; - for (const row of state.metrics) { - const value = Number(row[key]); - if (!isFinite(value)) continue; - const x = Number(row.timesteps ?? row.total_timesteps ?? points.length + 1); - points.push([isFinite(x) ? x : points.length + 1, value]); - } - return points; -} -function lastFinite(rows, key) { - for (let i = rows.length - 1; i >= 0; i--) { - const value = Number(rows[i][key]); - if (isFinite(value)) return value; - } - return null; -} - -// ---------------------------------------------------------------- 图表 -function renderCharts() { - const catalog = state.schema.metrics || []; - const tabs = $("chart-tabs"); - if (tabs.dataset.signature !== catalog.map((m) => m.key).join("|")) { - tabs.innerHTML = ""; - for (const metric of catalog) { - const btn = document.createElement("button"); - btn.type = "button"; - btn.className = "chart-tab"; - btn.dataset.key = metric.key; - btn.textContent = metric.label; - btn.onclick = () => { state.chartKey = metric.key; renderCharts(); }; - tabs.appendChild(btn); - } - tabs.dataset.signature = catalog.map((m) => m.key).join("|"); - } - for (const btn of tabs.querySelectorAll(".chart-tab")) { - btn.classList.toggle("active", btn.dataset.key === state.chartKey); - } - - const windowSize = Number($("chart-window").value || 0); - const primary = catalog.find((m) => m.role === "primary") || { key: "ep_rew_mean", label: "奖励", color: "#4f8cff" }; - const rewardPoints = slice(seriesOf(primary.key), windowSize); - const layout = window.Charts.line($("chart-reward"), { - series: [{ name: primary.label, points: rewardPoints, color: primary.color, fill: true }], - xFormat: (v) => `${fmtInt(v)}步`, - emptyText: "等待首个 rollout 的 ep_rew_mean……", - }); - setText("chart-title", primary.label); - setText("chart-sub", describeSeries(rewardPoints, primary)); - - const metric = catalog.find((m) => m.key === state.chartKey) || primary; - const metricPoints = slice(seriesOf(metric.key), windowSize); - const refs = []; - if (metric.key === "approx_kl") refs.push({ value: 0.05, color: "#f87171", label: "过猛阈值 0.05" }); - if (metric.key === "explained_variance") refs.push({ value: 0, color: "#93a1bd", label: "0(不如均值预测)" }); - const layout2 = window.Charts.line($("chart-metric"), { - series: [{ name: metric.label, points: metricPoints, color: metric.color, fill: true }], - refs: refs, - xFormat: (v) => `${fmtInt(v)}步`, - emptyText: `等待 ${metric.key} 数据……`, - }); - setText("chart2-title", metric.label); - setText("chart2-sub", describeSeries(metricPoints, metric)); - state.layouts = { reward: layout, metric: layout2, metricKey: metric.key, primary: primary }; -} - -function slice(points, size) { - if (!size || points.length <= size) return points; - return points.slice(points.length - size); -} - -function describeSeries(points, metric) { - if (!points.length) return "(无数据)"; - if (points.length === 1) return `仅 1 点 · 最新 ${fmtValue(metric, points[0][1])}`; - const first = points[0], last = points[points.length - 1]; - const delta = last[1] - first[1]; - const sign = delta > 0 ? "+" : ""; - return `${points.length} 点 · 窗口内 ${sign}${fmtValue(metric, delta)} · ` + - `最新 ${fmtValue(metric, last[1])} @ ${fmtInt(last[0])} 步`; -} - -function bindChartInteractions() { - for (const id of ["chart-reward", "chart-metric"]) { - const canvas = $(id); - if (!canvas) continue; - const overlay = document.createElement("canvas"); - overlay.className = "chart-overlay"; - overlay.style.width = "100%"; overlay.style.height = "100%"; - if (canvas.parentElement) { - canvas.parentElement.style.position = "relative"; - canvas.parentElement.appendChild(overlay); - } - const move = (event) => { - const show = $("chart-cursor").checked; - const rect = canvas.getBoundingClientRect(); - const which = id === "chart-reward" ? "reward" : "metric"; - const layout = state.layouts && state.layouts[which]; - const ctx = overlay.getContext("2d"); - const dpr = window.devicePixelRatio || 1; - if (overlay.width !== Math.round(rect.width * dpr) || overlay.height !== Math.round(rect.height * dpr)) { - overlay.width = Math.round(rect.width * dpr); - overlay.height = Math.round(rect.height * dpr); - } - ctx.setTransform(dpr, 0, 0, dpr, 0, 0); - ctx.clearRect(0, 0, rect.width, rect.height); - if (!layout || !show || !isFinite(layout.bounds.x0)) return; - window.Charts.drawCursor(overlay, layout, { - mouse: { x: event.clientX - rect.left, y: event.clientY - rect.top }, - xFormat: (v) => `${fmtInt(v)}步`, - }); - }; - canvas.addEventListener("mousemove", move); - canvas.addEventListener("mouseleave", () => { - const ctx = overlay.getContext("2d"); - ctx.clearRect(0, 0, overlay.width, overlay.height); - }); - } - $("chart-window").addEventListener("change", renderCharts); - $("chart-cursor").addEventListener("change", renderCharts); -} - -// ---------------------------------------------------------------- 日志 -function renderLog(job) { - const lines = job.log_lines || []; - const filter = ($("log-filter").value || "").trim().toLowerCase(); - const showJson = $("log-json").checked; - const errorsOnly = $("log-errors-only").checked; - const view = $("log-view"); - const signature = `${lines.length}|${job.log_total}|${filter}|${showJson}|${errorsOnly}|${lines[lines.length - 1] || ""}`; - if (signature === state.lastLogSignature) return; - state.lastLogSignature = signature; - - const follow = $("log-follow").checked; - const atBottom = view.scrollTop + view.clientHeight >= view.scrollHeight - 24; - const keep = follow || atBottom; - - const html = []; - let shown = 0; - for (let i = 0; i < lines.length; i++) { - const raw = lines[i]; - const lower = raw.toLowerCase(); - if (filter && !lower.includes(filter)) continue; - if (errorsOnly && !/error|traceback|failed|exception|错误|失败/.test(lower)) continue; - if (!showJson && raw.trim().startsWith("{") && raw.includes('"event"')) continue; - shown++; - const cls = classify(raw); - html.push(`${highlight(raw, filter)}`); - } - view.innerHTML = html.length ? html.join("") : '(无匹配日志行)'; - if (keep) view.scrollTop = view.scrollHeight; - setText("log-shown", `显示 ${shown} / 共 ${fmtInt(job.log_total)} 行`); - setText("log-meta", `stdout/stderr 合并捕获 · 服务端保留最近 ${fmtInt(job.process ? job.process.log_capacity : 4000)} 行`); -} - -function classify(line) { - const text = line.toLowerCase(); - if (/error|traceback|exception|failed|错误|失败/.test(text)) return "err"; - if (/warn|deprecat|警告/.test(text)) return "warn"; - if (line.trim().startsWith("{")) return "json"; - if (/^\s*[-=]{3,}|已保存|success|complete|评估|metadata/.test(text)) return "meta"; - if (!line.trim()) return "dim"; - return ""; -} - -function highlight(line, filter) { - const escaped = escapeHtml(line); - if (!filter) return escaped; - try { - return escaped.replace(new RegExp(`(${filter.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")})`, "gi"), - "$1"); - } catch (err) { return escaped; } -} - -// ---------------------------------------------------------------- 逐回合 -function renderEpisodes(job) { - const rows = job.monitor || []; - const tbody = $("episode-table").querySelector("tbody"); - const tail = rows.slice(-200).reverse(); - tbody.innerHTML = tail.map((row, index) => { - const seq = rows.length - index; - return `${seq}${fmtNumber(row.r)}` + - `${fmtNumber(row.l, 0)}${fmtNumber(row.t, 3)}`; - }).join("") || '尚无逐回合记录(Monitor CSV 随训练写入)'; -} - -// ---------------------------------------------------------------- 交互 -async function submitPayload(payload) { - const err = $("form-error"); - err.textContent = ""; - if (state.saving) return false; // 训练中表单锁定,续训按钮同样不许重复提交 - if (payload.resume && !payload.model) { - err.textContent = "续训需要填写模型输出路径"; - return false; - } - const res = await fetch("/api/train/start", { - method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify(payload), - }); - const body = await res.json().catch(() => ({})); - if (!res.ok) { - err.textContent = body.error || `启动失败(HTTP ${res.status})`; - return false; - } - state.preview = false; - state.jobKey = null; - state.metrics = []; - state.metricCache = []; - state.metricNext = 0; - state.metricTotal = 0; - await poll(); - return true; -} - -$("config-form").addEventListener("submit", async (event) => { - event.preventDefault(); - if (state.saving) return; - const err = $("form-error"); - err.textContent = ""; - const values = collectValues(); - const problems = validateLocally(values); - if (problems.length) { err.textContent = problems[0]; return; } - const payload = {}; - for (const [key, value] of Object.entries(values)) { - if (value !== null) payload[key] = value; - } - await submitPayload(payload); -}); - -$("btn-recover").addEventListener("click", async () => { - const recovery = (state.lastJob && state.lastJob.recovery) || {}; - if (!recovery.can_resume || !recovery.model) return; - if (!confirm(`用最近的可恢复产物续训?\n${recovery.model}\n` - + "当前表单里的 timesteps 会作为**追加**步数。")) return; - // 同步回表单,用户随后可微调步数再手动点「开始训练」 - const modelField = $("cfg-model"); - if (modelField) modelField.value = recovery.model; - const resumeField = $("cfg-resume"); - if (resumeField) resumeField.checked = true; - const values = collectValues(); - values.model = recovery.model; - values.resume = true; - values.force = false; // --resume 与 --force 互斥 - await submitPayload(values); -}); - -$("btn-pause").addEventListener("click", async () => { - const resuming = state.lastStatus === "paused"; - const res = await fetch(resuming ? "/api/train/resume" : "/api/train/pause", { - method: "POST", headers: { "Content-Type": "application/json" }, body: "{}", - }); - const body = await res.json().catch(() => ({})); - if (!res.ok) { - showBanner("bad", `${resuming ? "继续" : "暂停"}失败:${escapeHtml(body.error || res.status)}`); - } else if (!resuming && body.paused === false) { - showBanner("warn", "当前没有可暂停的训练进程(可能已结束)。"); - } - await poll(); -}); - -$("btn-stop").addEventListener("click", async () => { - if (!confirm("确认停止当前训练?\n将通过控制文件请求优雅停止,脚本先保存当前模型与元数据再退出;" - + "若超时未响应则强制结束进程树。")) return; - const res = await fetch("/api/train/stop", { - method: "POST", headers: { "Content-Type": "application/json" }, body: "{}", - }); - const body = await res.json().catch(() => ({})); - if (!res.ok) showBanner("bad", `停止失败:${escapeHtml(body.error || res.status)}`); - await poll(); -}); - -$("btn-refresh").addEventListener("click", async () => { - state.preview = false; - showBanner("", ""); - await poll(); -}); - -$("btn-preview").addEventListener("click", async () => { - try { - const scenario = $("preview-scenario") ? $("preview-scenario").value : "rising"; - const res = await fetch(`/api/train/state?preview=1&scenario=${encodeURIComponent(scenario)}&log_tail=400`); - const payload = await res.json(); - if (!payload.job) throw new Error(payload.error || "服务端未返回示例快照"); - state.preview = true; - state.jobKey = null; - state.metrics = []; - state.metricCache = []; - state.metricNext = 0; - state.metricTotal = 0; - render(payload.job); - } catch (err) { - showBanner("bad", `离线预览不可用:${escapeHtml(err.message)}`); - } -}); - -$("btn-reset").addEventListener("click", () => { - applyValues({}); - $("form-error").textContent = ""; -}); - -for (const id of ["log-filter", "log-json", "log-errors-only", "log-tail"]) { - $(id).addEventListener("input", () => { - state.lastLogSignature = ""; - poll(); - }); -} - -boot(); diff --git a/src/mcm26b/training_ui/static/charts.js b/src/mcm26b/training_ui/static/charts.js deleted file mode 100644 index e34a8ce..0000000 --- a/src/mcm26b/training_ui/static/charts.js +++ /dev/null @@ -1,255 +0,0 @@ -/* 训练前端图表:原生 canvas 折线图,无外部依赖(离线可用,与评测前端同风格)。 - 只做三件事:坐标轴自适应、多序列折线、悬停读数;不引入缩放/图例等交互, - 因为训练曲线每 2 秒整体重绘一次,重量级图表库在这里只会增加风险。 - - 对外接口(挂到 globalThis.Charts): - Charts.fit(canvas) 按 DPR 调整画布像素 - Charts.line(canvas, {series, refs, ...}) 折线图 - Charts.sparkline(canvas, values, opts) 指标卡片内的小趋势线 - 数据约定:series = [{ points: [[x, y], ...], color, width, fill }] */ -(function (global) { - "use strict"; - - var AXIS = "#2a3550", GRID = "rgba(42,53,80,.55)", DIM = "#93a1bd", TEXT = "#e6ecf8"; - var FONT = '11px ui-monospace, SFMono-Regular, Menlo, monospace'; - - function fit(canvas) { - var dpr = global.devicePixelRatio || 1; - var rect = canvas.getBoundingClientRect ? canvas.getBoundingClientRect() : null; - var cssWidth = (rect && rect.width) || canvas.clientWidth || canvas.width || 640; - var cssHeight = (rect && rect.height) || canvas.clientHeight || canvas.height || 200; - var w = Math.max(160, Math.round(cssWidth * dpr)); - var h = Math.max(80, Math.round(cssHeight * dpr)); - if (canvas.width !== w || canvas.height !== h) { canvas.width = w; canvas.height = h; } - var ctx = canvas.getContext("2d"); - ctx.setTransform(dpr, 0, 0, dpr, 0, 0); - return { ctx: ctx, w: w / dpr, h: h / dpr }; - } - - /* 第 0 层:数值格式(科学计数法只用于真正小而大的量级) */ - function fmt(value) { - if (value === null || value === undefined || Number.isNaN(value)) return "—"; - var abs = Math.abs(value); - if (abs !== 0 && (abs < 1e-3 || abs >= 1e5)) return value.toExponential(2); - if (abs >= 100) return value.toFixed(1); - if (abs >= 1) return value.toFixed(2); - if (abs >= 0.01) return value.toFixed(3); - return value.toFixed(4); - } - - function niceTicks(min, max, count) { - if (!isFinite(min) || !isFinite(max)) return [0, 1]; - if (min === max) { var pad = Math.abs(min) > 1e-9 ? Math.abs(min) * 0.1 : 0.5; - min -= pad; max += pad; } - var span = max - min; - var raw = span / Math.max(1, count); - var mag = Math.pow(10, Math.floor(Math.log10(raw))); - var norm = raw / mag; - var step = (norm <= 1 ? 1 : norm <= 2 ? 2 : norm <= 5 ? 5 : 10) * mag; - var start = Math.ceil(min / step) * step; - var ticks = []; - for (var v = start; v <= max + step * 1e-6 && ticks.length < 40; v += step) { - ticks.push(Math.abs(v) < step * 1e-9 ? 0 : v); - } - if (!ticks.length) ticks = [min, max]; - return ticks; - } - - function bounds(series) { - var xs = [], ys = []; - for (var i = 0; i < series.length; i++) { - var pts = series[i].points || []; - for (var j = 0; j < pts.length; j++) { - var p = pts[j]; - if (!p || !isFinite(p[0]) || !isFinite(p[1])) continue; - xs.push(p[0]); ys.push(p[1]); - } - } - if (!xs.length) return null; - var x0 = Math.min.apply(null, xs), x1 = Math.max.apply(null, xs); - var y0 = Math.min.apply(null, ys), y1 = Math.max.apply(null, ys); - if (x0 === x1) { x0 -= 0.5; x1 += 0.5; } - if (y0 === y1) { var pad = Math.abs(y0) > 1e-9 ? Math.abs(y0) * 0.08 : 0.5; - y0 -= pad; y1 += pad; } - return { x0: x0, x1: x1, y0: y0, y1: y1 }; - } - - /* ------------------------------------------------------------ 折线图 */ - function line(canvas, options) { - var opts = options || {}; - var axes = fit(canvas), ctx = axes.ctx, W = axes.w, H = axes.h; - var padL = opts.padLeft || 62, padR = 14, padT = 10, padB = 24; - ctx.clearRect(0, 0, W, H); - - var series = (opts.series || []).filter(function (s) { - return s && s.points && s.points.length; - }); - var box = bounds(series); - if (!box) { - ctx.fillStyle = DIM; ctx.font = FONT; - ctx.fillText(opts.emptyText || "等待数据……", padL, H / 2); - return null; - } - var yTicks = niceTicks(box.y0, box.y1, 4); - var yMin = Math.min(box.y0, yTicks[0]), yMax = Math.max(box.y1, yTicks[yTicks.length - 1]); - var plotW = Math.max(10, W - padL - padR), plotH = Math.max(10, H - padT - padB); - var sx = function (x) { return padL + (x - box.x0) / (box.x1 - box.x0) * plotW; }; - var sy = function (y) { return padT + (1 - (y - yMin) / (yMax - yMin)) * plotH; }; - - // 网格与刻度 - ctx.font = FONT; ctx.lineWidth = 1; - for (var i = 0; i < yTicks.length; i++) { - var y = sy(yTicks[i]); - ctx.strokeStyle = GRID; ctx.beginPath(); - ctx.moveTo(padL, y + 0.5); ctx.lineTo(padL + plotW, y + 0.5); ctx.stroke(); - ctx.fillStyle = DIM; ctx.textAlign = "right"; - ctx.fillText(fmt(yTicks[i]), padL - 6, y + 3.5); - } - ctx.textAlign = "center"; - for (var t = 0; t <= 4; t++) { - var xv = box.x0 + (box.x1 - box.x0) * (t / 4); - var x = sx(xv); - ctx.fillStyle = DIM; - ctx.fillText(opts.xFormat ? opts.xFormat(xv) : fmt(xv), x, H - 7); - } - ctx.textAlign = "left"; - ctx.strokeStyle = AXIS; ctx.beginPath(); - ctx.moveTo(padL + 0.5, padT); ctx.lineTo(padL + 0.5, padT + plotH); - ctx.lineTo(padL + plotW, padT + plotH); ctx.stroke(); - - // 参考线(例如 KL 的 0.05 阈值、解释方差的 0) - var refs = opts.refs || []; - for (var r = 0; r < refs.length; r++) { - var ref = refs[r]; - if (ref.value === undefined || ref.value < yMin || ref.value > yMax) continue; - var ry = sy(ref.value); - ctx.save(); - ctx.setLineDash([4, 4]); ctx.strokeStyle = ref.color || "#f59e0b"; - ctx.beginPath(); ctx.moveTo(padL, ry); ctx.lineTo(padL + plotW, ry); ctx.stroke(); - ctx.restore(); - if (ref.label) { - ctx.fillStyle = ref.color || "#f59e0b"; ctx.font = FONT; - ctx.fillText(ref.label, padL + 6, ry - 4); - } - } - - // 序列 - for (var s = 0; s < series.length; s++) { - var item = series[s]; - var pts = item.points; - ctx.strokeStyle = item.color || "#4f8cff"; - ctx.lineWidth = item.width || 1.6; - ctx.lineJoin = "round"; - ctx.beginPath(); - for (var k = 0; k < pts.length; k++) { - var px = sx(pts[k][0]), py = sy(pts[k][1]); - if (k === 0) ctx.moveTo(px, py); else ctx.lineTo(px, py); - } - ctx.stroke(); - if (item.fill && pts.length > 1) { - ctx.save(); - ctx.globalAlpha = 0.12; ctx.fillStyle = item.color || "#4f8cff"; - ctx.lineTo(sx(pts[pts.length - 1][0]), padT + plotH); - ctx.lineTo(sx(pts[0][0]), padT + plotH); - ctx.closePath(); ctx.fill(); ctx.restore(); - } - // 末点高亮:一眼看到最新值 - var last = pts[pts.length - 1]; - ctx.fillStyle = item.color || "#4f8cff"; - ctx.beginPath(); ctx.arc(sx(last[0]), sy(last[1]), 2.6, 0, Math.PI * 2); ctx.fill(); - } - - return { bounds: box, sx: sx, sy: sy, padL: padL, padT: padT, - plotW: plotW, plotH: plotH, yMin: yMin, yMax: yMax, series: series }; - } - - /* 悬停读数:把鼠标 x 映射到最接近的数据点,返回一次绘制的覆盖层信息 */ - function drawCursor(canvas, layout, options) { - var opts = options || {}; - if (!layout || !layout.series || !layout.series.length) return; - var axes = fit(canvas), ctx = axes.ctx; - var mouse = opts.mouse; - if (!mouse || mouse.x < layout.padL || mouse.x > layout.padL + layout.plotW) return; - var target = layout.bounds.x0 + - (mouse.x - layout.padL) / layout.plotW * (layout.bounds.x1 - layout.bounds.x0); - var lines = [], snapX = target; - for (var s = 0; s < layout.series.length; s++) { - var pts = layout.series[s].points; - if (!pts.length) continue; - // 数据已按 x 递增,二分定位最近点 - var lo = 0, hi = pts.length - 1, best = pts[hi]; - while (lo <= hi) { - var mid = (lo + hi) >> 1; - if (pts[mid][0] === target) { best = pts[mid]; break; } - if (pts[mid][0] < target) { best = pts[mid]; lo = mid + 1; } - else { hi = mid - 1; } - } - var next = pts[Math.min(pts.length - 1, lo)]; - if (next && Math.abs(next[0] - target) < Math.abs(best[0] - target)) best = next; - snapX = best[0]; - lines.push({ label: layout.series[s].name || "", color: layout.series[s].color, - value: best[1] }); - } - var cx = layout.sx(snapX); - ctx.save(); - ctx.setLineDash([3, 3]); ctx.strokeStyle = "rgba(230,236,248,.35)"; - ctx.beginPath(); ctx.moveTo(cx, layout.padT); - ctx.lineTo(cx, layout.padT + layout.plotH); ctx.stroke(); - ctx.restore(); - for (var i = 0; i < lines.length; i++) { - var item = lines[i]; - var cy = layout.sy(item.value); - ctx.fillStyle = item.color || "#4f8cff"; - ctx.beginPath(); ctx.arc(cx, cy, 3.2, 0, Math.PI * 2); ctx.fill(); - ctx.strokeStyle = "rgba(11,15,26,.9)"; ctx.lineWidth = 1.4; ctx.stroke(); - } - var text = (opts.xFormat ? opts.xFormat(snapX) : fmt(snapX)) + " · " + - lines.map(function (item) { return (item.label ? item.label + " " : "") + fmt(item.value); }) - .join(" "); - ctx.font = FONT; - var tw = ctx.measureText(text).width + 14; - var bx = Math.min(cx + 8, layout.padL + layout.plotW - tw); - bx = Math.max(layout.padL + 2, bx); - var by = layout.padT + 4; - ctx.fillStyle = "rgba(23,30,46,.94)"; ctx.strokeStyle = AXIS; - ctx.beginPath(); - if (ctx.roundRect) { ctx.roundRect(bx, by, tw, 20, 6); ctx.fill(); ctx.stroke(); } - else { ctx.fillRect(bx, by, tw, 20); ctx.strokeRect(bx, by, tw, 20); } - ctx.fillStyle = TEXT; ctx.textAlign = "left"; - ctx.fillText(text, bx + 7, by + 14); - } - - /* ------------------------------------------------------------ 迷你趋势线 */ - function sparkline(canvas, values, options) { - var opts = options || {}; - var axes = fit(canvas), ctx = axes.ctx, W = axes.w, H = axes.h; - ctx.clearRect(0, 0, W, H); - var clean = (values || []).filter(function (v) { return isFinite(v); }); - if (clean.length < 2) { - ctx.strokeStyle = GRID; ctx.beginPath(); - ctx.moveTo(0, H - 1.5); ctx.lineTo(W, H - 1.5); ctx.stroke(); - return; - } - var lo = Math.min.apply(null, clean), hi = Math.max.apply(null, clean); - if (lo === hi) { lo -= 0.5; hi += 0.5; } - var pad = 2; - var X = function (i) { return (i / (clean.length - 1)) * W; }; - var Y = function (v) { return H - pad - (v - lo) / (hi - lo) * (H - pad * 2); }; - ctx.strokeStyle = opts.color || "#4f8cff"; ctx.lineWidth = 1.4; - ctx.beginPath(); - for (var i = 0; i < clean.length; i++) { - if (i === 0) ctx.moveTo(X(i), Y(clean[i])); else ctx.lineTo(X(i), Y(clean[i])); - } - ctx.stroke(); - if (opts.fill !== false) { - ctx.save(); ctx.globalAlpha = 0.14; ctx.fillStyle = opts.color || "#4f8cff"; - ctx.lineTo(W, H); ctx.lineTo(0, H); ctx.closePath(); ctx.fill(); ctx.restore(); - } - var lastX = X(clean.length - 1), lastY = Y(clean[clean.length - 1]); - ctx.fillStyle = opts.color || "#4f8cff"; - ctx.beginPath(); ctx.arc(lastX - 1.5, lastY, 2.2, 0, Math.PI * 2); ctx.fill(); - } - - global.Charts = { fit: fit, line: line, drawCursor: drawCursor, - sparkline: sparkline, fmt: fmt }; -})(typeof globalThis !== "undefined" ? globalThis : this); diff --git a/src/mcm26b/training_ui/static/index.html b/src/mcm26b/training_ui/static/index.html deleted file mode 100644 index c1a93ac..0000000 --- a/src/mcm26b/training_ui/static/index.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - -模型训练前端 · CUMCM 2026 B HRL - - - -
    -
    -

    模型训练前端 HRL 高层 MaskablePPO

    -

    尚未启动训练任务

    -
    -
    - 进程未启动 - 进度— - 墙钟— - 设备— - 连接探测中 -
    -
    - - - - - -
    -
    - -
    - - - - - -
    -
    -

    执行进度与进程

    - 启动任务后显示子进程与步进进度 -
    - -
    -
    -
    - 0 / 0 环境步 - 0.0% -
    -
    -
    - 剩余估计 — - 预计结束 — - 进度点 0 -
    -
    -
    -
    子进程 PID—
    -
    进程组 / 会话独立
    -
    吞吐 FPS—
    -
    已用墙钟—
    -
    退出码—
    -
    日志行数0
    -
    -
    - -
    -

    -
    - - -
    -
    -

    训练配置

    - 字段与后端 TrainConfig 同源;留空字段取默认值 -
    -
    -
    -
    -
    - - - -
    -
    -
    - - -
    -
    -

    参数收敛状态

    - 判据为最近窗口的斜率与波动,仅供人工复核 -
    -
    - 判读等待数据 -
      -
      -
      - -
      -
      - - -
      -
      -
      -
      平均回合奖励
      - -
      -
      -
      近似 KL
      - -
      -
      -
      - - -
      -
      -

      实时运行日志

      - stdout/stderr 合并捕获 -
      -
      - - - - - - -
      -
      (暂无输出)
      -
      - - -
      -
      -

      逐回合记录

      - 来自训练脚本写入的 Monitor CSV(每回合奖励/长度/时刻) -
      -
      - - - -
      #奖励 r长度 l时刻 t (s)
      -
      -
      -
      - -
      - 本地回环训练前端:与评测前端共用「白名单静态资源 + JSON 轮询 API」模式; - 命令由服务端以参数列表构造(不经过 shell),停止时向独立进程组发送 SIGTERM。 -
      - - - - - diff --git a/src/mcm26b/training_ui/static/style.css b/src/mcm26b/training_ui/static/style.css deleted file mode 100644 index 185d01d..0000000 --- a/src/mcm26b/training_ui/static/style.css +++ /dev/null @@ -1,230 +0,0 @@ -/* 训练前端样式:沿用评测前端(referee/static/style.css)的暗色变量与圆角面板 - 语言,保证两个界面像同一套系统的两个页面;本页信息密度更高: - 进度条、进程时间线、参数卡片网格、曲线与日志终端。 */ - -:root { - --bg: #0f1420; --panel: #171e2e; --panel2: #1d2740; --line: #2a3550; - --text: #e6ecf8; --dim: #93a1bd; --accent: #4f8cff; --ok: #34d399; - --warn: #f59e0b; --bad: #f87171; --cyan: #38bdf8; --gray: #6b7280; - --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; -} -* { box-sizing: border-box; } -body { - margin: 0; background: var(--bg); color: var(--text); - font: 14px/1.5 "PingFang SC", "Microsoft YaHei", system-ui, sans-serif; -} -code, .mono { background: var(--panel2); padding: 1px 6px; border-radius: 4px; color: var(--cyan); font-family: var(--mono); font-size: 12px; } -main { max-width: 1240px; margin: 0 auto; padding: 16px 22px 48px; } -footer { color: var(--dim); font-size: 12px; text-align: center; padding: 14px 22px; border-top: 1px solid var(--line); } -.hidden { display: none !important; } -.hint { color: var(--dim); font-size: 12px; } -h2 { font-size: 15px; margin: 0; } - -/* ------------------------------------------------------------ 顶栏 */ -.topbar { - position: sticky; top: 0; z-index: 20; - display: flex; align-items: center; gap: 18px; flex-wrap: wrap; - padding: 12px 22px; border-bottom: 1px solid var(--line); - background: rgba(23,30,46,.96); backdrop-filter: blur(6px); -} -.brand h1 { font-size: 17px; margin: 0; } -.brand .sub { font-size: 12px; color: var(--dim); font-weight: normal; margin-left: 8px; } -.brand .tagline { margin: 3px 0 0; color: var(--dim); font-size: 12px; font-family: var(--mono); } -.topstatus { display: flex; gap: 8px; flex-wrap: wrap; margin-left: auto; } -.topactions { display: flex; gap: 8px; } - -.chip { - background: var(--panel2); border: 1px solid var(--line); border-radius: 999px; - padding: 3px 12px; font-size: 12px; color: var(--dim); white-space: nowrap; -} -.chip b { color: var(--text); font-weight: 600; margin-left: 4px; } -.chip.gray b { color: var(--gray); } -.chip.ok b { color: var(--ok); } -.chip.warn b { color: var(--warn); } -.chip.bad b { color: var(--bad); } -.chip.cyan b { color: var(--cyan); } - -button, .button { - background: var(--panel2); color: var(--text); border: 1px solid var(--line); - border-radius: 6px; padding: 7px 14px; font-size: 13px; cursor: pointer; -} -button:hover:enabled, .button:hover { border-color: var(--accent); } -button:disabled { opacity: .45; cursor: not-allowed; } -button.primary { background: var(--accent); border-color: var(--accent); color: #fff; } -button.primary:hover:enabled { filter: brightness(1.08); } -button.danger { background: transparent; border-color: var(--bad); color: var(--bad); } -button.danger:hover:enabled { background: rgba(248,113,113,.12); } - -.banner { - border: 1px solid var(--bad); border-left: 4px solid var(--bad); - background: rgba(248,113,113,.08); border-radius: 8px; - padding: 10px 14px; margin: 14px 0 0; font-size: 13px; -} -.banner.ok { border-color: var(--ok); border-left-color: var(--ok); background: rgba(52,211,153,.08); } -.banner.warn { border-color: var(--warn); border-left-color: var(--warn); background: rgba(245,158,11,.08); } -.banner b { font-family: var(--mono); } - -/* 恢复条:显示最近一份完整落盘的产物,并提供一键续训 */ -.recovery { - display: flex; align-items: center; justify-content: space-between; gap: 12px; - border: 1px solid var(--cyan, #22d3ee); border-left: 4px solid var(--cyan, #22d3ee); - background: rgba(34,211,238,.07); border-radius: 8px; - padding: 8px 12px; margin: 10px 0 0; font-size: 13px; -} -.recovery .hint { overflow-wrap: anywhere; } - -/* ------------------------------------------------------------ 面板 */ -.panel { - border: 1px solid var(--line); border-radius: 12px; background: var(--panel); - padding: 14px 16px; margin-top: 16px; -} -.panel-head { display: flex; align-items: baseline; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; } -.panel-head h2 { color: var(--text); } -.panel-head h2::before { - content: ""; display: inline-block; width: 3px; height: 13px; margin-right: 8px; - background: var(--accent); border-radius: 2px; vertical-align: -1px; -} - -/* ------------------------------------------------------------ 进度 */ -.progress-row { display: flex; gap: 20px; align-items: stretch; flex-wrap: wrap; } -.progress-main { flex: 1 1 380px; min-width: 320px; } -.progress-labels { display: flex; justify-content: space-between; font-size: 13px; margin-bottom: 6px; } -.progress-labels b { font-family: var(--mono); font-size: 15px; } -.bar { height: 12px; border-radius: 999px; background: #0b0f1a; border: 1px solid var(--line); overflow: hidden; } -.bar-fill { - height: 100%; width: 0%; border-radius: 999px; - background: linear-gradient(90deg, #2f6fe0, var(--accent) 60%, var(--cyan)); - transition: width .3s ease; -} -.bar-fill.warn { background: linear-gradient(90deg, #b45309, var(--warn)); } -.bar-fill.bad { background: linear-gradient(90deg, #b91c1c, var(--bad)); } -.bar-fill.ok { background: linear-gradient(90deg, #059669, var(--ok)); } -.progress-foot { display: flex; gap: 18px; margin-top: 7px; flex-wrap: wrap; } - -.stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(132px, 1fr)); gap: 8px; flex: 1 1 420px; } -.stat { - border: 1px solid var(--line); border-radius: 8px; background: var(--panel2); - padding: 7px 10px; display: flex; flex-direction: column; gap: 2px; -} -.stat .k { color: var(--dim); font-size: 11px; } -.stat .v { font-family: var(--mono); font-size: 15px; } -.stat .v.ok { color: var(--ok); } -.stat .v.warn { color: var(--warn); } -.stat .v.bad { color: var(--bad); } - -.timeline { display: flex; align-items: center; gap: 0; margin-top: 16px; flex-wrap: wrap; } -.node { display: flex; align-items: center; gap: 8px; } -.node .dot { - width: 12px; height: 12px; border-radius: 50%; border: 2px solid var(--line); - background: var(--panel2); flex: none; -} -.node .txt { font-size: 12px; color: var(--dim); } -.node.done .dot { border-color: var(--ok); background: var(--ok); } -.node.done .txt { color: var(--text); } -.node.active .dot { border-color: var(--accent); background: var(--accent); box-shadow: 0 0 0 4px rgba(79,140,255,.18); } -.node.active .txt { color: var(--accent); font-weight: 600; } -.node.failed .dot { border-color: var(--bad); background: var(--bad); } -.node.failed .txt { color: var(--bad); } -.link { width: 34px; height: 2px; background: var(--line); flex: none; margin: 0 8px; } -.link.done { background: var(--ok); } -#command-preview { margin: 12px 0 0; font-family: var(--mono); word-break: break-all; line-height: 1.7; } - -/* ------------------------------------------------------------ 表单 */ -.presets { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; } -.preset { - border: 1px solid var(--line); border-radius: 8px; background: var(--panel2); - padding: 7px 12px; font-size: 12px; cursor: pointer; color: var(--text); -} -.preset:hover { border-color: var(--accent); } -.preset .note { display: block; color: var(--dim); font-size: 11px; margin-top: 2px; } -.form-groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(268px, 1fr)); gap: 14px; } -fieldset.group { border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px 12px; margin: 0; background: #141b29; } -fieldset.group legend { color: var(--dim); font-size: 12px; padding: 0 6px; } -fieldset.group .ghint { color: var(--dim); font-size: 11px; margin: 0 0 8px; } -.field { display: flex; flex-direction: column; gap: 4px; margin-bottom: 10px; } -.field .flabel { font-size: 12px; color: var(--dim); display: flex; gap: 6px; align-items: baseline; } -.field .flabel .unit { color: var(--gray); font-size: 11px; } -.field input[type="text"], .field input[type="number"], .field select { - background: var(--panel2); border: 1px solid var(--line); color: var(--text); - border-radius: 6px; padding: 6px 9px; font-size: 13px; width: 100%; - font-family: var(--mono); -} -.field input:focus, .field select:focus, .log-toolbar input:focus { outline: none; border-color: var(--accent); } -.field .fhelp { font-size: 11px; color: var(--gray); } -.field.check { flex-direction: row; align-items: center; gap: 8px; } -.field.check input { width: auto; } -.field.dirty input, .field.dirty select { border-color: rgba(79,140,255,.65); } -.field.invalid input, .field.invalid select { border-color: var(--bad); } -.form-foot { display: flex; align-items: center; gap: 12px; margin-top: 14px; flex-wrap: wrap; } -.form-error { color: var(--bad); font-size: 12px; } - -/* ------------------------------------------------------------ 收敛 */ -.converge-head { display: flex; gap: 14px; align-items: flex-start; flex-wrap: wrap; margin-bottom: 12px; } -.notes { margin: 0; padding-left: 18px; color: var(--dim); font-size: 12px; max-width: 760px; } -.notes li { margin: 2px 0; } -.metric-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(186px, 1fr)); gap: 10px; } -.metric-card { - border: 1px solid var(--line); border-radius: 10px; background: var(--panel2); - padding: 9px 11px; display: flex; flex-direction: column; gap: 5px; -} -.metric-card .mhead { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; } -.metric-card .mname { font-size: 12px; color: var(--dim); } -.metric-card .mvalue { font-family: var(--mono); font-size: 17px; } -.metric-card .mfoot { display: flex; justify-content: space-between; font-size: 11px; color: var(--gray); gap: 6px; } -.metric-card canvas { width: 100%; height: 40px; display: block; } -.trend.up { color: var(--ok); } .trend.down { color: var(--warn); } -.trend.flat { color: var(--dim); } .trend.none { color: var(--gray); } -.metric-card.alert { border-color: rgba(248,113,113,.55); } -.metric-card.alert .mvalue { color: var(--bad); } - -/* ------------------------------------------------------------ 图表 */ -.chart-toolbar { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin: 16px 0 8px; } -.chart-tabs { display: flex; gap: 6px; flex-wrap: wrap; } -.chart-tab { - border: 1px solid var(--line); background: var(--transparent, transparent); - color: var(--dim); border-radius: 999px; padding: 4px 12px; font-size: 12px; -} -.chart-tab.active { border-color: var(--accent); color: var(--text); background: var(--panel2); } -label.inline { font-size: 12px; color: var(--dim); display: flex; gap: 6px; align-items: center; } -label.inline input[type="checkbox"] { width: auto; } -label.inline select, .log-toolbar select { - background: var(--panel2); color: var(--text); border: 1px solid var(--line); - border-radius: 6px; padding: 4px 8px; font-size: 12px; -} -.chart-stack { display: flex; flex-direction: column; gap: 14px; } -.chart-figure { margin: 0; border: 1px solid var(--line); border-radius: 10px; background: #0b0f1a; padding: 10px 12px 4px; } -.chart-figure figcaption { display: flex; gap: 10px; align-items: baseline; font-size: 12px; margin-bottom: 6px; } -.chart-figure figcaption b { color: var(--text); font-size: 13px; } -.chart-figure canvas { width: 100%; display: block; } - -/* ------------------------------------------------------------ 日志 */ -.log-toolbar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 8px; } -.log-toolbar input[type="search"] { - background: var(--panel2); border: 1px solid var(--line); color: var(--text); - border-radius: 6px; padding: 6px 10px; font-size: 12px; min-width: 240px; -} -.log-view { - margin: 0; background: #0b0f1a; border: 1px solid var(--line); border-radius: 10px; - padding: 10px 12px; height: 320px; overflow: auto; font-family: var(--mono); - font-size: 12px; line-height: 1.55; white-space: pre-wrap; word-break: break-word; -} -.log-view .l { display: block; } -.log-view .l.err { color: var(--bad); } -.log-view .l.warn { color: var(--warn); } -.log-view .l.json { color: var(--cyan); } -.log-view .l.meta { color: var(--ok); } -.log-view .l.dim { color: var(--gray); } -.log-view mark { background: rgba(245,158,11,.28); color: inherit; border-radius: 2px; } - -/* ------------------------------------------------------------ 表格 */ -.table-wrap { border: 1px solid var(--line); border-radius: 10px; overflow: auto; max-height: 300px; } -table { width: 100%; border-collapse: collapse; font-size: 12px; } -th, td { text-align: left; padding: 6px 10px; border-bottom: 1px solid var(--line); white-space: nowrap; } -th { position: sticky; top: 0; background: var(--panel2); color: var(--dim); font-weight: 500; } -td { font-family: var(--mono); } -tbody tr:hover { background: rgba(79,140,255,.06); } - -@media (max-width: 760px) { - .topstatus { margin-left: 0; } - .progress-row { gap: 12px; } -} diff --git a/tests/js/training_ui_harness.cjs b/tests/js/training_ui_harness.cjs deleted file mode 100644 index 0b773e0..0000000 --- a/tests/js/training_ui_harness.cjs +++ /dev/null @@ -1,285 +0,0 @@ -/* 训练前端 JS 逻辑回归(由 pytest 经 node 调起,见 tests/test_training_ui_js.py)。 - 以 DOM 桩加载发布的 charts.js / app.js 原文,用服务端真实生成的示例快照 - (services/demo.py 的 demo_snapshot JSON)驱动渲染,断言: - 1) 表单由 schema 生成、字段数与后端契约一致; - 2) 指标卡/曲线/日志/逐回合表都拿到数据并渲染,无异常抛出; - 3) 三种收敛场景的判读文案正确落到顶部 chip; - 4) 增量指标游标合并不丢点也不重点(曾是该前端的典型 bug); - 5) charts.js 的刻度与格式函数在极端输入下不抛异常。 - 曾回归出两个"加载即白屏"隐患:job.process 缺失时直接取下标、以及游标 - 与 metric_limit 同时生效时重复追加同批进度点。本文件防其复发。 */ -"use strict"; -const fs = require("fs"); -const path = require("path"); - -const REPO = process.env.REPO; -if (!REPO) throw new Error("REPO env required"); -const STATIC = path.join(REPO, "src", "mcm26b", "training_ui", "static"); -const DEMO = process.env.DEMO_STATE; -if (!DEMO) throw new Error("DEMO_STATE env required"); - -const scenarios = JSON.parse(fs.readFileSync(DEMO, "utf8")); -const schema = JSON.parse(fs.readFileSync(process.env.SCHEMA, "utf8")); - -// ---------------------------------------------------------------- DOM 桩 -/* className 是唯一真源:代码里会直接赋值 className(见 chip()),也会用 - classList.add/toggle;如果 classList 自带一个独立 Set,两者就会不同步, - 测试会误报。这里让 classList 每次读写都落回 className。 */ -function makeClassList(el) { - const read = () => String(el.className || "").split(/\s+/).filter(Boolean); - const write = (list) => { el.className = [...new Set(list)].join(" "); }; - return { - add: (...c) => write(read().concat(c)), - remove: (...c) => write(read().filter((x) => !c.includes(x))), - toggle: (c, force) => { - const on = force === undefined ? !read().includes(c) : !!force; - write(on ? read().concat(c) : read().filter((x) => x !== c)); - return on; - }, - contains: (c) => read().includes(c), - }; -} -const ctxStub = new Proxy({}, { - get(t, prop) { - if (!(prop in t)) { - t[prop] = typeof prop === "string" && - /^(arc|beginPath|closePath|fill|stroke|moveTo|lineTo|fillText|strokeText|strokeRect|fillRect|clearRect|setLineDash|setTransform|save|restore|roundRect|measureText|scale|translate)$/.test(prop) - ? (prop === "measureText" ? () => ({ width: 40 }) : () => {}) - : function () {}; - } - return t[prop]; - }, - set(t, prop, v) { t[prop] = v; return true; }, -}); -const allElements = []; -/* querySelectorAll 桩:支持 app.js 实际用到的选择器 - [data-node="x"] / [data-link="n"] → 时间线节点与连接线 - .chart-tab → 曲线页签(用于切换 active) - tbody → 逐回合表体 - 子元素按 tag 记账,因此 page.querySelector("tbody") 每次返回同一个对象。 */ -function matchesSelector(el, sel) { - const attr = /^\[data-([a-z]+)="?([^"\]]*)"?\]$/.exec(sel); - if (attr) return el.dataset && String(el.dataset[attr[1]]) === attr[2]; - if (sel.startsWith(".")) return String(el.className || "").split(/\s+/).includes(sel.slice(1)); - if (el.tag === sel) return true; - const byTag = el.byTag && el.byTag[sel]; - return Boolean(byTag); -} -function makeEl(id, tag) { - const el = { - id, tag: tag || id, textContent: "", innerHTML: "", value: "", checked: true, - disabled: false, className: "", - files: [], width: 600, height: 240, style: {}, handlers: {}, children: [], - byTag: {}, dataset: {}, scrollTop: 0, scrollHeight: 100, clientHeight: 100, - get classList() { return makeClassList(this); }, - addEventListener(type, fn) { (this.handlers[type] ||= []).push(fn); }, - removeEventListener() {}, click() {}, matches() { return false; }, - appendChild(child) { this.children.push(child); return child; }, - removeChild(child) { this.children = this.children.filter((c) => c !== child); }, - setAttribute() {}, focus() {}, - querySelector(sel) { return this.querySelectorAll(sel)[0] || this.childFor(sel); }, - // 表单里的静态子元素(如 )不在 children 里,按需惰性创建并缓存 - childFor(sel) { - if (!this.byTag[sel]) this.byTag[sel] = makeEl(`${id}:${sel}`, sel); - return this.byTag[sel]; - }, - querySelectorAll(sel) { - const found = []; - const walk = (node) => { - for (const child of node.children || []) { - if (matchesSelector(child, sel)) found.push(child); - walk(child); - } - }; - walk(this); - return found; - }, - getContext() { return ctxStub; }, - getBoundingClientRect() { return { left: 0, top: 0, width: 600, height: 240 }; }, - }; - allElements.push(el); - return el; -} -const els = new Map(); -const $get = (id) => { if (!els.has(id)) els.set(id, makeEl(id)); return els.get(id); }; -// 几个会被读取初值的控件(否则 value 为空字符串,Number("") === 0) -for (const [id, value] of [["log-tail", "400"], ["chart-window", "120"]]) $get(id).value = value; -$get("chart-cursor").checked = true; -$get("log-follow").checked = true; -$get("log-json").checked = true; -$get("log-errors-only").checked = false; // 只保留"显示进度 JSON"这一项过滤 -$get("preview-scenario").value = "rising"; - -globalThis.requestAnimationFrame = (cb) => { cb(0); return 1; }; -globalThis.cancelAnimationFrame = () => {}; -globalThis.performance = { now: () => Date.now() }; -globalThis.setInterval = () => 0; -globalThis.location = { port: "8036" }; -globalThis.confirm = () => true; -globalThis.alert = () => {}; -globalThis.addEventListener = () => {}; -globalThis.devicePixelRatio = 2; -globalThis.window = globalThis; -globalThis.document = { - getElementById: $get, - createElement: (tag) => makeEl(tag), - addEventListener() {}, -}; -// 元素挂载计数:断言"指标卡确实被创建"而不是静默空转 -let createdCount = 0; -const realCreate = globalThis.document.createElement; -globalThis.document.createElement = (tag) => { createdCount++; return realCreate(tag); }; - -globalThis.fetch = async (url) => { - const json = async () => { - if (url.startsWith("/api/train/schema")) return schema; - if (url.includes("state")) { - const match = /scenario=([a-z-]+)/.exec(url); - const key = match ? match[1] : "rising"; - return { job: scenarios[key] }; - } - throw new Error("unexpected fetch " + url); - }; - return { ok: true, status: 200, json }; -}; - -// ---------------------------------------------------------------- 装载发布代码 -const chartsSrc = fs.readFileSync(path.join(STATIC, "charts.js"), "utf8"); -const appSrc = fs.readFileSync(path.join(STATIC, "app.js"), "utf8"); -new Function(chartsSrc)(); -const appApi = new Function( - appSrc + "\n;return { seriesOf, classify, highlight, absorbMetrics, state, render, fmtNumber, fmtDuration };" -)(); -// app.js 末尾会自动 boot(),这里等它把 schema/首次快照渲染完 -const flush = async () => { for (let i = 0; i < 40; i++) await new Promise((r) => setImmediate(r)); }; -function assert(cond, message) { if (!cond) throw new Error(message); } -function stripTags(html) { return String(html).replace(/<[^>]*>/g, ""); } - -(async () => { - await flush(); - - // 1) schema 驱动表单 - const groups = $get("form-groups").children; - assert(groups.length === schema.groups.length, - `表单分组数应为 ${schema.groups.length},实际 ${groups.length}`); - const cfgField = $get("cfg-timesteps"); - assert(cfgField && String(cfgField.value) === String(schema.fields.find((f) => f.key === "timesteps").default), - `默认值未写入表单: ${cfgField && cfgField.value}`); - assert($get("presets").children.length === schema.presets.length, "预设按钮数不匹配"); - - // 2) 首帧(rising 场景)渲染 - const state = appApi.state; - assert(state.metrics.length > 0, "首次快照后本地进度点为空"); - const chips = $get("chip-converge").innerHTML; - assert(chips.includes(scenarios.rising.convergence.status), - `收敛 chip 未渲染: ${chips}`); - assert($get("stat-pid").textContent === "PID 42424", `PID 未渲染: ${$get("stat-pid").textContent}`); - assert($get("metric-grid").children.length === schema.metrics.length, - `指标卡数量应为 ${schema.metrics.length},实际 ${$get("metric-grid").children.length}`); - assert($get("chart-tabs").children.length === schema.metrics.length, - "曲线页签数量与指标字典不一致"); - assert(stripTags($get("log-view").innerHTML).includes("progress"), - "日志区没有渲染进度行"); - assert($get("episode-table").querySelector("tbody") !== null, "逐回合表缺少 tbody"); - const tbody = $get("episode-table").querySelector("tbody"); - assert(tbody.innerHTML.includes(""), - `逐回合表未渲染任何行: monitor=${(scenarios.rising.monitor || []).length}`); - assert(Number($get("steps-total").textContent.replace(/,/g, "")) === scenarios.rising.config.timesteps, - `总步数渲染异常: ${$get("steps-total").textContent}`); - - // 3) 三种收敛场景切到对应 chip - const tones = { rising: "ok", plateau: "ok", "kl-spike": "bad" }; - for (const key of Object.keys(scenarios)) { - const rendered = appApi.render(scenarios[key]); - void rendered; - const html = $get("chip-converge").innerHTML; - assert(html.includes(scenarios[key].convergence.status), - `场景 ${key} 的判读未落到 chip: ${html}`); - assert($get("chip-converge").classList.contains(tones[key]), - `场景 ${key} 的色调应为 ${tones[key]}`); - } - assert(String($get("chart2-title").textContent).length > 0, "第二张曲线标题为空"); - - // 4) 增量游标合并:续接 / 有缺口 / 过期批次 三条分支 - const job = JSON.parse(JSON.stringify(scenarios.rising)); - const total = job.metrics.length; - const reset = () => { - appApi.state.metrics = []; - appApi.state.metricCache = []; - appApi.state.metricNext = 0; - appApi.state.metricTotal = 0; - }; - const feed = (metrics, offset) => appApi.absorbMetrics( - { ...job, metrics, metric_offset: offset, metric_total: total }); - const stamp = (i) => job.metrics[i].timesteps; - - reset(); - feed(job.metrics.slice(0, 10), 0); - assert(appApi.state.metrics.length === 10, `首批应 10 点,实际 ${appApi.state.metrics.length}`); - feed(job.metrics.slice(10, 14), 10); - assert(appApi.state.metrics.length === 14, `续接后应 14 点,实际 ${appApi.state.metrics.length}`); - assert(appApi.state.metricNext === 14, `metricNext 应为 14,实际 ${appApi.state.metricNext}`); - feed([], 14); - assert(appApi.state.metrics.length === 14, `无新点不得改变长度,实际 ${appApi.state.metrics.length}`); - - // 有缺口(服务端窗口前移):整体替换,避免曲线出现空洞 - feed(job.metrics.slice(20, 30), 20); - assert(appApi.state.metrics.length === 10, `有缺口时应替换为 10 点,实际 ${appApi.state.metrics.length}`); - assert(appApi.state.metrics[0].timesteps === stamp(20), "替换后起点错位"); - assert(appApi.state.metricNext === 30, `游标未随替换更新: ${appApi.state.metricNext}`); - - // 过期批次(服务端计数回退):忽略,本地不动 - feed(job.metrics.slice(0, 5), 0); - assert(appApi.state.metrics.length === 10, `过期批次应被忽略,实际 ${appApi.state.metrics.length}`); - assert(appApi.state.metrics[0].timesteps === stamp(20), "过期批次污染了本地缓存"); - - // 字符串形式的 offset:必须按数值比较,不得退化成字典序 - reset(); - feed(job.metrics.slice(0, 10), "0"); - feed(job.metrics.slice(10, 14), "10"); - assert(appApi.state.metrics.length === 14, - `字符串 offset 应正常续接为 14 点,实际 ${appApi.state.metrics.length}`); - - // 缺失 offset(旧版服务端):退化为按到达顺序追加,不得丢点 - reset(); - appApi.absorbMetrics({ ...job, metrics: job.metrics.slice(0, 6) }); - assert(appApi.state.metrics.length === 6, `缺 offset 时首批应 6 点,实际 ${appApi.state.metrics.length}`); - - // 5) 日志分类与高亮 - assert(appApi.classify("Traceback (most recent call last):") === "err", "Traceback 未归入错误行"); - assert(appApi.classify("UserWarning: x") === "warn", "警告未归入 warn"); - assert(appApi.classify('{"event": "progress"}') === "json", "进度 JSON 未归入 json"); - assert(appApi.highlight("abc", "b").includes("b"), "过滤高亮未生效"); - const marked = appApi.highlight("