From 2529f3875e4724dab5b43d298d76b6e0d4a6ef99 Mon Sep 17 00:00:00 2001 From: Zeng Qingcheng <60593302+NeoZng@users.noreply.github.com> Date: Mon, 24 Aug 2026 01:25:15 +0800 Subject: [PATCH 1/2] refactor: establish LaTeX robot algorithm handbook --- .github/workflows/build-pdf.yml | 37 ++++ .gitignore | 15 ++ CONTRIBUTING.md | 51 ++++++ MIGRATION_PLAN.md | 91 ++++++++++ Makefile | 14 ++ README.md | 65 ++++++- RULES_SOURCES.md | 40 +++++ book/README.md | 10 ++ book/appendices/app_a_notation.tex | 14 ++ book/appendices/app_b_legacy_map.tex | 29 ++++ book/appendices/app_c_experiment_contract.tex | 22 +++ book/chapters/ch01_closed_loop_hardware.tex | 144 ++++++++++++++++ book/chapters/ch02_reproducible_toolchain.tex | 92 ++++++++++ book/chapters/ch03_ai_agent_workflow.tex | 99 +++++++++++ .../chapters/ch04_linear_algebra_geometry.tex | 64 +++++++ .../chapters/ch05_probability_uncertainty.tex | 60 +++++++ book/chapters/ch06_optimization_dynamics.tex | 70 ++++++++ book/chapters/ch07_image_formation.tex | 25 +++ book/chapters/ch08_convolution_features.tex | 25 +++ .../ch09_machine_learning_classification.tex | 26 +++ .../ch10_detection_segmentation_temporal.tex | 26 +++ .../ch11_data_evaluation_deployment.tex | 22 +++ book/chapters/ch12_camera_geometry_pnp.tex | 26 +++ book/chapters/ch13_multiview_ba.tex | 20 +++ .../ch14_state_estimation_tracking.tex | 26 +++ book/chapters/ch15_lidar_fusion.tex | 22 +++ book/chapters/ch16_slam_world_model.tex | 22 +++ .../ch17_modeling_identification_feedback.tex | 26 +++ book/chapters/ch18_lqr_lqg.tex | 35 ++++ book/chapters/ch19_path_planning.tex | 26 +++ .../chapters/ch20_trajectory_optimization.tex | 22 +++ book/chapters/ch21_mpc_nonlinear_control.tex | 26 +++ .../ch22_auto_aim_nonlinear_estimation.tex | 27 +++ book/chapters/ch23_behavior_architecture.tex | 26 +++ book/chapters/ch24_dp_mdp_rl.tex | 26 +++ .../ch25_multi_robot_coordination.tex | 22 +++ .../chapters/ch26_vlm_hybrid_intelligence.tex | 26 +++ book/chapters/ch27_system_integration.tex | 26 +++ book/chapters/ch28_auto_aim_case.tex | 25 +++ book/chapters/ch29_sentry_case.tex | 25 +++ book/chapters/ch30_radar_case.tex | 29 ++++ book/chapters/ch31_season_2025_2026.tex | 108 ++++++++++++ book/config/commands.tex | 70 ++++++++ book/config/preamble.tex | 81 +++++++++ book/frontmatter/notation.tex | 25 +++ book/frontmatter/preface.tex | 19 ++ book/frontmatter/roadmap.tex | 35 ++++ book/latexmkrc | 5 + book/main.tex | 81 +++++++++ book/references.bib | 163 ++++++++++++++++++ 50 files changed, 2107 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/build-pdf.yml create mode 100644 .gitignore create mode 100644 CONTRIBUTING.md create mode 100644 MIGRATION_PLAN.md create mode 100644 Makefile mode change 100755 => 100644 README.md create mode 100644 RULES_SOURCES.md create mode 100644 book/README.md create mode 100644 book/appendices/app_a_notation.tex create mode 100644 book/appendices/app_b_legacy_map.tex create mode 100644 book/appendices/app_c_experiment_contract.tex create mode 100644 book/chapters/ch01_closed_loop_hardware.tex create mode 100644 book/chapters/ch02_reproducible_toolchain.tex create mode 100644 book/chapters/ch03_ai_agent_workflow.tex create mode 100644 book/chapters/ch04_linear_algebra_geometry.tex create mode 100644 book/chapters/ch05_probability_uncertainty.tex create mode 100644 book/chapters/ch06_optimization_dynamics.tex create mode 100644 book/chapters/ch07_image_formation.tex create mode 100644 book/chapters/ch08_convolution_features.tex create mode 100644 book/chapters/ch09_machine_learning_classification.tex create mode 100644 book/chapters/ch10_detection_segmentation_temporal.tex create mode 100644 book/chapters/ch11_data_evaluation_deployment.tex create mode 100644 book/chapters/ch12_camera_geometry_pnp.tex create mode 100644 book/chapters/ch13_multiview_ba.tex create mode 100644 book/chapters/ch14_state_estimation_tracking.tex create mode 100644 book/chapters/ch15_lidar_fusion.tex create mode 100644 book/chapters/ch16_slam_world_model.tex create mode 100644 book/chapters/ch17_modeling_identification_feedback.tex create mode 100644 book/chapters/ch18_lqr_lqg.tex create mode 100644 book/chapters/ch19_path_planning.tex create mode 100644 book/chapters/ch20_trajectory_optimization.tex create mode 100644 book/chapters/ch21_mpc_nonlinear_control.tex create mode 100644 book/chapters/ch22_auto_aim_nonlinear_estimation.tex create mode 100644 book/chapters/ch23_behavior_architecture.tex create mode 100644 book/chapters/ch24_dp_mdp_rl.tex create mode 100644 book/chapters/ch25_multi_robot_coordination.tex create mode 100644 book/chapters/ch26_vlm_hybrid_intelligence.tex create mode 100644 book/chapters/ch27_system_integration.tex create mode 100644 book/chapters/ch28_auto_aim_case.tex create mode 100644 book/chapters/ch29_sentry_case.tex create mode 100644 book/chapters/ch30_radar_case.tex create mode 100644 book/chapters/ch31_season_2025_2026.tex create mode 100644 book/config/commands.tex create mode 100644 book/config/preamble.tex create mode 100644 book/frontmatter/notation.tex create mode 100644 book/frontmatter/preface.tex create mode 100644 book/frontmatter/roadmap.tex create mode 100644 book/latexmkrc create mode 100644 book/main.tex create mode 100644 book/references.bib diff --git a/.github/workflows/build-pdf.yml b/.github/workflows/build-pdf.yml new file mode 100644 index 0000000..6f2e82d --- /dev/null +++ b/.github/workflows/build-pdf.yml @@ -0,0 +1,37 @@ +name: Build handbook PDF + +on: + pull_request: + paths: + - "book/**" + - "Makefile" + - ".github/workflows/build-pdf.yml" + push: + branches: + - main + - "refactor/**" + paths: + - "book/**" + - "Makefile" + - ".github/workflows/build-pdf.yml" + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Compile with XeLaTeX + uses: xu-cheng/latex-action@v3 + with: + root_file: main.tex + working_directory: book + latexmk_use_xelatex: true + args: -interaction=nonstopmode -halt-on-error -file-line-error + + - name: Upload PDF + uses: actions/upload-artifact@v4 + with: + name: robomaster-algorithm-handbook + path: book/main.pdf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1de0375 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +book/build/ +book/*.aux +book/*.bbl +book/*.bcf +book/*.blg +book/*.fdb_latexmk +book/*.fls +book/*.log +book/*.out +book/*.run.xml +book/*.toc +book/*.xdv +output/ +tmp/ + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..734491f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,51 @@ +# 协作与写作规范 + +## 章节契约 + +每章至少包含以下元素: + +1. 学习目标; +2. 前置知识与输入/输出变量; +3. 概念提出的动机,而非只给名词和结论; +4. 关键公式、符号定义、适用条件与失效情形; +5. 一个可复现实验或工程检查项; +6. 与下一章的承接段落; +7. 可核验的一手资料或权威教材引用。 + +## 内容取舍 + +- 不按年代罗列算法,也不追求覆盖所有模型。 +- 一个方法进入核心正文,必须回答:它解决什么变量关系、后续章节是否依赖、RoboMaster 工程中何时使用、失败边界是什么。 +- 过时但有历史或教学价值的内容放入“历史注”或附录,不占据主线。 +- 赛季规则必须标注赛季、版本号和发布日期;规则变化时,案例与通用原理分开修改。 + +## 公式与术语 + +- 符号首次出现时定义维度、坐标系、单位和时间索引。 +- 随机变量、观测值、估计值和控制目标使用一致记号。 +- 区分图像滤波、状态估计器、闭环控制器和轨迹优化器,不用“滤波”概括一切平滑操作。 +- 每个近似都说明来源,例如小角度、局部线性化、高斯噪声、静态场景或同步量测。 + +## 代码与实验 + +- 示例应尽量短小,但必须可构建、可测试、可复现。 +- 记录依赖版本、随机种子、数据来源、运行命令和预期输出。 +- 性能结论同时报告精度、延迟、吞吐、内存/显存和硬件平台。 +- 不提交训练权重、超大数据或无来源图片;使用下载脚本或发布附件。 + +## AI 与 agent coding + +AI 工具可以用于检索候选资料、生成脚手架、重构代码、补充测试和语言润色,但不能替代以下责任: + +- 作者必须打开并核对实际来源,禁止引用不存在的论文、规则或 API; +- 对代码改动先检查仓库,再给出范围明确的计划,最后执行构建与测试; +- 对数学推导逐步检查定义、等式变换与假设,不以模型输出作为证明; +- 对赛季策略区分官方事实、工程经验和待验证假设; +- PR 中说明 AI 参与了哪些环节,以及人工执行了哪些验证。 + +推荐工作循环: + +```text +问题定义 → 上下文检索 → 变更计划 → 小步修改 → 自动验证 → 人工审查 → 记录证据 +``` + diff --git a/MIGRATION_PLAN.md b/MIGRATION_PLAN.md new file mode 100644 index 0000000..a0e7846 --- /dev/null +++ b/MIGRATION_PLAN.md @@ -0,0 +1,91 @@ +# LaTeX 重构与内容迁移计划 + +## 1. 迁移边界 + +本次重构不是把 8,650 行 Markdown 逐字转成 TeX。旧稿同时混合了赛事介绍、软件安装、硬件选型、模型综述、算法推导、代码片段和个人经验;若机械转换,只会把原有的结构问题搬到 PDF 中。 + +第一阶段采用“双轨制” : + +- `main` 上的旧稿保持不变,确保历史链接与内容仍可访问; +- 重构分支新增 `book/`,先固定知识依赖、排版规范和编译链; +- 每一段旧内容必须经过“保留、压缩、重写、移入附录、删除”判定后,才能进入新版; +- 旧图片不整体复制。只有在新版正文中承担明确论证作用、来源和授权可核验的图片才迁移。 + +## 2. 仓库审计结果 + +| 项目 | 当前规模 | 对迁移的影响 | +|---|---:|---| +| 主 Markdown | 8,650 行,约 874 KB | GitHub/编辑器渲染困难,章节耦合严重 | +| 仓库文件 | 481 个 | 大量资源缺乏按章节归档 | +| 总体积 | 约 139 MB | 不宜继续无筛选累积图片 | +| 图片引用 | 386 处,385 个唯一路径 | 需要来源、授权、尺寸与引用位置复核 | +| GIF | 23 个,约 51 MB | PDF 不支持动画;需关键帧、序列图或外部链接 | +| Windows 反斜杠路径 | 154 处 | Linux/LaTeX 构建不能原样复用 | + +## 3. 旧章节迁移矩阵 + +| 旧稿范围 | 旧主题 | 新位置 | 决策 | +|---|---|---|---| +| 0--1 | 前言、摘要 | 前言、阅读指南、第 1 章 | 重写;删除宣传与时效性描述 | +| 2 | 各兵种中的视觉 | 第 27--31 章 | 按 2025/2026 官方规则重写,旧机制仅作历史注 | +| 3 | Ubuntu、IDE、Git、ROS、工具 | 第 2--3 章 | 从安装截图改为 OS、构建、版本控制、通信、可复现原理与 agent 工作流 | +| 4 | 相机、平台、IMU、雷达、通信 | 第 1 章 | 保留主题,重写物理原理、时序、误差模型与选型依据 | +| 5.0--5.1 | CV 常识、OpenCV API | 第 7--8 章与实验 | 大幅压缩 API 罗列,围绕图像形成、卷积、特征点和可验证实验组织 | +| 5.2 | 神经网络与目标检测模型史 | 第 9--11 章 | 大幅删减;用统一任务形式、数据闭环、代表性架构和部署决策取代模型/损失 zoo | +| 5.3 | 各类滤波器与预测 | 第 7、14、22 章 | 拆分:图像滤波归图像形成;贝叶斯估计归状态估计;运动预测归非线性自瞄 | +| 5.4 | 目标跟踪 | 第 14、22 章 | 用状态、量测、关联和不确定性统一重写,并接入自瞄闭环 | +| 5.5.1--5.5.3 | 阈值、不变性、HOG/GIST/LBP 等 | 第 8 章或历史附录 | 只保留后续任务真正依赖的内容,其余不再作为核心路线 | +| 5.5.4--5.5.7 | 特征点、描述子、匹配、RANSAC、ORB | 第 8、13、16 章 | 保留并改写,明确其在多视图几何和 SLAM 前端中的作用 | +| 5.6 | 三维视觉基础 | 第 12--15 章 | 系统重写坐标、成像、标定、PnP、三角化、BA、雷达与跨传感器外参 | +| 5.7 | SLAM 初探 | 第 16 章 | 扩展为前端、后端、因子图、回环、地图与工程评测 | +| 5.8--5.9 | 路径规划、自主决策 | 第 19--26 章 | 从概览升级为核心内容,补齐轨迹优化、MPC、行为架构、DP/RL/VLM 与多机协同 | +| 6 | 自瞄、大符、雷达等应用 | 第 22、27--31 章 | 以端到端误差链和赛季约束为线索重写,不复用过时代码配置 | +| 7 | 成员知识与学习路线 | 阅读指南、各章实验与第 27 章 | 重写为分层项目、验收标准和可复现实验 | +| 8 | 经历、问答与感想 | 前言或历史资料 | 仅保留对学习仍有价值且可验证的部分 | + +## 4. 新版知识依赖 + +新版采用“先底层、后高层,先估计、后决策”的顺序: + +1. 先理解传感器如何产生带噪、带延迟、异步的数据,以及程序如何在计算平台上运行; +2. 再学习图像和机器学习,使读者能把原始像素变成二维语义量测; +3. 通过多视图几何、激光雷达和状态估计,把量测变成三维状态与地图; +4. 通过状态空间、LQR/LQG、路径与轨迹规划、MPC 和非线性优化,把状态变成受约束控制输入; +5. 再学习行为决策、动态规划/强化学习、多机器人协同和受约束的 VLM 高层规划; +6. 在 31 章的最终目录中,用自瞄、哨兵和雷达站案例重新闭合感知、决策、规划、控制,并显式分析延迟、带宽、失效与裁判系统约束。 + +## 5. 图片迁移规则 + +- 静态图优先重绘为 TikZ、矢量图或可复现绘图脚本;照片类资料保留原图并记录来源。 +- GIF 选择 3--6 个有因果意义的关键帧;如动画本身必要,PDF 中放关键帧与可长期访问的链接。 +- 不因“已有图片”而保留一段知识;先决定论证,再决定图片。 +- 统一使用正斜杠、ASCII 文件名和稳定的 `\label{}`。 +- 未确定版权的网络图片不得进入正式发布版。 + +## 6. 分阶段交付 + +### Phase A:工程骨架 + +- 中文书稿模板、分章目录、术语和交叉引用规范; +- `latexmk`/Makefile 本地构建; +- GitHub Actions 构建与 PDF artifact; +- 首批基础章节与旧稿迁移矩阵。 + +### Phase B:感知主线 + +- 图像形成、必要的传统视觉、ML/CV 任务统一表述; +- 关键点、多视图几何、LiDAR/IMU、融合与 SLAM; +- 配套最小实验与统一数据接口。 + +### Phase C:闭环主线 + +- 状态估计、LQR/LQG、MPC、非线性自瞄; +- 路径/轨迹规划、行为树、动态规划、RL 与 VLM 启发式; +- 感知不确定性如何进入规划与控制。 + +### Phase D:赛季案例与发布 + +- 基于 2025/2026 官方规则重写雷达、哨兵、自瞄和协同案例; +- 完整实验、作业、验收 rubric; +- 图片授权、引用、术语、公式和构建的最终审计; +- 发布 PDF 与版本化勘误。 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..09152b7 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +.PHONY: pdf clean watch + +BOOK_DIR := book +BUILD_DIR := build + +pdf: + cd $(BOOK_DIR) && latexmk -xelatex -interaction=nonstopmode -halt-on-error -file-line-error -outdir=$(BUILD_DIR) main.tex + +watch: + cd $(BOOK_DIR) && latexmk -pvc -xelatex -interaction=nonstopmode -file-line-error -outdir=$(BUILD_DIR) main.tex + +clean: + cd $(BOOK_DIR) && latexmk -C -outdir=$(BUILD_DIR) main.tex + diff --git a/README.md b/README.md old mode 100755 new mode 100644 index 5b3ad93..8eb16af --- a/README.md +++ b/README.md @@ -1,4 +1,61 @@ -# Vision Tutorials -本文档是计算机视觉和RoboMaster入门手册和opencv基础api的练习代码仓库。 -若您在阅读中有问题,可以通过email联系我。 -欢迎pr与issue \ No newline at end of file +# RoboMaster 机器人算法教程(LaTeX 重构版) + +本分支将原来的单文件计算机视觉教程重构为一套面向 RoboMaster 算法组的系统教材。新版不再以“目标检测模型百科”为主线,而是围绕机器人闭环建立知识结构: + +> 硬件与工具 → 数学与建模 → 2D 感知 → 3D 感知与 SLAM → 控制 → 规划与决策 → 系统集成 → 赛季案例 + +原始长篇 Markdown 暂时保留,作为历史资料与迁移来源;新内容统一位于 [`book/`](book/) 中。 + +## 构建 PDF + +推荐使用 TeX Live 2024 或更新版本,并确保安装 XeLaTeX、latexmk 与 biber。 + +```bash +make pdf +``` + +生成文件位于 `book/build/main.pdf`。清理中间产物: + +```bash +make clean +``` + +也可以直接进入 `book/`: + +```bash +latexmk -xelatex -interaction=nonstopmode -halt-on-error -outdir=build main.tex +``` + +每次提交涉及书稿源文件时,GitHub Actions 会执行同样的构建并上传 PDF artifact。 + +## 当前阶段 + +- 已建立可编译的中文 LaTeX 书稿、分章结构、参考文献与 CI。 +- 已写入系统总览、硬件原理、工程工具链和数学建模的首轮正文。 +- 其余章节先固定学习目标、前置依赖和承转关系,再逐章迁移与重写。 +- 2025/2026 赛季案例只采用官方规则中可核验的内容;未正式发布或仍可能修订的条目会明确标注版本和证据等级。 + +详细的删改与迁移矩阵见 [`MIGRATION_PLAN.md`](MIGRATION_PLAN.md),协作规范见 [`CONTRIBUTING.md`](CONTRIBUTING.md)。 + +## 目录约定 + +```text +book/ +├── main.tex # 唯一书稿入口 +├── config/ # 样式与命令 +├── frontmatter/ # 前言与阅读指南 +├── chapters/ # 每章一个 tex 文件 +├── appendices/ # 附录 +├── assets/ # 新版筛选后的静态插图 +└── references.bib # 可追溯参考文献 +``` + +## 内容原则 + +1. 以机器人任务中的变量、接口、误差和闭环为组织中心。 +2. 首次出现的符号必须定义,结论必须说明适用前提。 +3. 传统图像处理只保留后续几何、标定、特征匹配和工程调试真正需要的部分。 +4. 目标检测只讲统一问题形式、数据与指标、代表性架构和部署决策,不再罗列过时模型族。 +5. 将图像滤波、状态估计和控制器严格区分,再通过概率模型和状态空间统一起来。 +6. AI/agent 工具用于加速检索、编码、测试与复盘,但生成结果必须经过来源核验、构建测试和人工审查。 + diff --git a/RULES_SOURCES.md b/RULES_SOURCES.md new file mode 100644 index 0000000..e7e54f1 --- /dev/null +++ b/RULES_SOURCES.md @@ -0,0 +1,40 @@ +# RoboMaster 规则证据登记 + +本文件记录教材引用的赛季资料快照。它不是规则摘要的替代品;比赛实现必须回到官方原文核对。 + +核查截止日期:2026-08-24。 + +## 证据等级 + +1. 比赛规则、机器人制作规范、裁判系统通信协议:规范性事实。 +2. 官方完整形态考核、规则测评与裁判系统考核:资格或评分要求,不自动等同于赛场机制。 +3. 正式规则中的“未来规则规划”:方向性信号,不是当前强制条款。 +4. 社区开源项目与论坛经验:工程案例,不作为规则证据。 + +## 版本快照 + +| 赛季资料 | 当前核查版本 | 日期 | 官方入口 | +|---|---:|---:|---| +| RMUC 2025 比赛规则 | V2.1.0 | 2025-08-02 | [2025 比赛规范发布公告](https://www.robomaster.com/zh-CN/resource/pages/announcement/1768) | +| RMUC 2025 裁判系统通信协议 | V1.9.0 | 2025-07-03 | 同上方官方索引 | +| RMUC 2026 比赛规则 | V2.2.0 | 2026-08-07 | [2026 官方资料索引](https://bbs.robomaster.com/wiki/20204847/809871?source=7) | +| RMUC 2026 机器人制作规范 | V2.0.0 | 2026-06-26 | [2026 官方资料索引](https://bbs.robomaster.com/wiki/20204847/809871?source=7) | +| RMUC 2026 裁判系统通信协议 | V2.0.0 | 2026-06-26 | [通信协议索引](https://bbs.robomaster.com/wiki/20204847/811363?source=7) | +| RMUC 2026 全国总决赛参赛手册 | V2.1.0 | 2026-07-16 | [2026 官方资料索引](https://bbs.robomaster.com/wiki/20204847/809871?source=7) | + +RMUC 2026 比赛规则 V2.2.0 的官方文件名为 `RoboMaster 2026 机甲大师超级对抗赛比赛规则手册V2.2.0(20260807).pdf`,可从[官方 PDF](https://hz-rm-bbs-web-prod.oss-cn-hangzhou.aliyuncs.com/e354d2750e17485e8f67e5b5a9d1a2891786094242879/RoboMaster%202026%20机甲大师超级对抗赛比赛规则手册V2.2.0(20260807).pdf)下载,官方 MD5 为 `d4808d8f91575d89e2fe4f7ba2f4fb3f`。V2.2.0 相对 V2.1.0 只新增 R55;2026 全国赛的主要机制变化来自 V2.0.0,教材写作时必须同时记录“首次引入版本”和“当前核查版本”。 + +## 官方考核入口 + +- [规则测评](https://bbs.robomaster.com/wiki/20204847/812042?source=7) +- [裁判系统考核](https://bbs.robomaster.com/wiki/20204847/812043?source=7) +- [完整形态考核](https://bbs.robomaster.com/wiki/20204847/812045?source=7) +- [完整形态考核细则](https://bbs.robomaster.com/wiki/20204847/812048?source=7) + +## 更新流程 + +1. 下载官方文件,记录赛事、语言、版本、发布日期、下载地址与哈希。 +2. 对上一教材快照做逐条差异检查,先形成候选表,再人工回到原文核验。 +3. 将规则事实、官方评分项、工程推导与研究前瞻分列,不混写。 +4. 更新 `book/references.bib`、第 31 章、受影响的案例章和规则配置测试。 +5. 重新构建 PDF,并在提交说明中列出新增、修改和失效条款。 diff --git a/book/README.md b/book/README.md new file mode 100644 index 0000000..da95e28 --- /dev/null +++ b/book/README.md @@ -0,0 +1,10 @@ +# Book source + +`main.tex` is the only full-book entry point. Build from this directory with: + +```bash +latexmk -xelatex -interaction=nonstopmode -halt-on-error -file-line-error -outdir=build main.tex +``` + +The template intentionally uses `listings` instead of `minted`, so the build does not require `--shell-escape`. New figures should use ASCII filenames and must have a source/license record before publication. + diff --git a/book/appendices/app_a_notation.tex b/book/appendices/app_a_notation.tex new file mode 100644 index 0000000..98c7948 --- /dev/null +++ b/book/appendices/app_a_notation.tex @@ -0,0 +1,14 @@ +\chapter{符号、单位与接口检查表} +\label{app:notation} + +本附录将在正文稳定后生成完整符号索引。当前提交先固定最容易造成系统性错误的检查项: + +\begin{enumerate} + \item 每个向量注明坐标系;每个变换明确方向,例如 $\mat{T}_{AB}$ 将 $B$ 系坐标表示到 $A$ 系; + \item 角度内部统一使用 rad,距离使用 m,时间使用 s;边界协议若采用 degree/mm/ms 必须显式转换; + \item 区分传感器采样时间、消息到达时间、处理结束时间和执行器生效时间; + \item 区分真实状态 $\vect{x}$、估计 $\hat{\vect{x}}$、量测 $\vect{y}$、参考 $\vect{r}$ 与控制输入 $\vect{u}$; + \item 协方差必须对应明确误差定义和局部参数化,不能跨坐标系直接复制; + \item 所有矩阵乘法在实现中用维度、frame type 或单元测试约束。 +\end{enumerate} + diff --git a/book/appendices/app_b_legacy_map.tex b/book/appendices/app_b_legacy_map.tex new file mode 100644 index 0000000..6bf771b --- /dev/null +++ b/book/appendices/app_b_legacy_map.tex @@ -0,0 +1,29 @@ +\chapter{旧稿迁移索引} +\label{app:legacy-map} + +旧稿暂时保留在仓库根目录。本附录只作为导航,不把旧结论视为新版事实来源。 + +\begin{longtable}{p{0.22\textwidth}p{0.30\textwidth}p{0.38\textwidth}} +\toprule +旧稿主题 & 新版章节 & 迁移状态 \\ +\midrule +\endfirsthead +\toprule +旧稿主题 & 新版章节 & 迁移状态 \\ +\midrule +\endhead +软件与开发工具 & 第 2--3 章 & 原理重写;旧软件版本和危险操作不迁移 \\ +相机/IMU/雷达/通信 & 第 1、7、15 章 & 重写物理与误差模型;旧产品清单仅作历史资料 \\ +目标检测与模型史 & 第 9--11 章 & 压缩为任务、数据、指标、代表性结构与部署 \\ +传统滤波 & 第 7--8 章 & 仅保留采样、卷积、抗混叠和必要图像操作 \\ +状态估计与跟踪 & 第 14 章 & 从 Bayes/KF/EKF 与关联重新推导 \\ +特征点与匹配 & 第 8、12--13 章 & 保留主题并严格连接多视图几何 \\ +三维视觉与 SLAM & 第 12--16 章 & 重写坐标、可观性、因子图、融合和评测 \\ +路径/控制/决策概览 & 第 17--26 章 & 从原来的简短概览扩展为全书主干 \\ +装甲/大符/雷达应用 & 第 22、28--31 章 & 按 2025/2026 官方规则和端到端指标重写 \\ +个人经历与 Q\&A & 前言或历史档案 & 只保留对学习仍有长期价值的部分 \\ +\bottomrule +\end{longtable} + +详细的文件级处置与图片策略见仓库根目录的 \texttt{MIGRATION\_PLAN.md}。 + diff --git a/book/appendices/app_c_experiment_contract.tex b/book/appendices/app_c_experiment_contract.tex new file mode 100644 index 0000000..72f6a9c --- /dev/null +++ b/book/appendices/app_c_experiment_contract.tex @@ -0,0 +1,22 @@ +\chapter{实验、规则与复现契约} +\label{app:experiment-contract} + +每个实验或赛季案例至少记录: + +\begin{longtable}{p{0.23\textwidth}p{0.67\textwidth}} +\toprule +项目 & 要求 \\ +\midrule +问题与假设 & 状态、量测、动作、约束、噪声和适用场景 \\ +数据 & 来源、许可、版本、切分、采集设备和时间 \\ +代码 & commit SHA、配置、依赖、随机种子和模型 hash \\ +硬件 & CPU/GPU/NPU、功耗模式、传感器和固件版本 \\ +指标 & 算法精度、系统成功率、P50/P99 延迟、资源与失败率 \\ +消融 & 一次改变一个因素,并解释不能独立改变的耦合项 \\ +规则 & 赛事、文件名、版本、发布日期、条款位置和访问日期 \\ +AI 使用 & AI 参与环节、人工核验来源、执行测试和未解决风险 \\ +\bottomrule +\end{longtable} + +只有“输入、代码、环境和评价”四者同时可追溯,实验才足以支撑教材结论。 + diff --git a/book/chapters/ch01_closed_loop_hardware.tex b/book/chapters/ch01_closed_loop_hardware.tex new file mode 100644 index 0000000..6c006db --- /dev/null +++ b/book/chapters/ch01_closed_loop_hardware.tex @@ -0,0 +1,144 @@ +\chapter{机器人如何闭环:平台、硬件与信号链} +\label{ch:closed-loop-hardware} +\chapterstatus{首轮正文} + +\begin{learningobjectives} +读完本章后,读者应能够: +\begin{itemize} + \item 把一个 RoboMaster 功能拆成物理过程、传感、估计、决策、规划、控制和执行; + \item 解释相机、IMU、激光雷达、编码器和计算平台的基本工作原理,而非只记产品参数; + \item 建立端到端延迟、采样、带宽、坐标系和单位预算; + \item 为每类传感器和执行器写出可被软件检查的接口契约。 +\end{itemize} +\end{learningobjectives} + +\begin{prerequisites} +本章不要求预先掌握计算机视觉或控制理论。产物是一份 \texttt{Sensor/Actuator Contract}:记录每个数据源的物理量、单位、坐标系、采样时刻、到达时刻、噪声与失效标志。它将成为后续所有实验的共同输入。 +\end{prerequisites} + +\section{从视觉模块到闭环机器人算法} + +一张图像上的检测框并不直接产生比赛收益。以自动瞄准为例,真实链路至少包含:目标反射光进入镜头,相机曝光与读出,图像传输到计算平台,检测与位姿解算,目标状态估计,弹道与延迟预测,云台参考生成,电机闭环执行,以及弹丸飞行。任何一段出现时间、坐标或模型错误,最终都会表现为脱靶。 + +用离散状态空间表示机器人及环境: +\begin{align} + \vect{x}_{k+1} &= f_k(\vect{x}_k,\vect{u}_k,\vect{w}_k), \\ + \vect{y}_k &= h_k(\vect{x}_k,\vect{v}_k). +\end{align} +其中 $\vect{x}_k\in\R^n$ 是不可被直接完整读取的状态,$\vect{u}_k\in\R^m$ 是控制输入,$\vect{y}_k\in\R^p$ 是量测;$\vect{w}_k$ 与 $\vect{v}_k$ 分别表示过程扰动和量测噪声。感知的作用不是“识别物体”这一句,而是从历史信息构造可用于决策的后验: +\begin{equation} + p(\vect{x}_k\mid \vect{y}_{0:k},\vect{u}_{0:k-1}). +\end{equation} +规划与控制再根据任务、约束和该后验选择动作。由此可以看到,二维视觉只是量测生成的一部分;雷达站、哨兵和多机器人系统更依赖三维状态、地图、通信与决策。 + +\section{相机:从光子到像素} + +\subsection{镜头与成像几何} + +在针孔模型下,三维点 $\vect{p}_C=[X,Y,Z]\trans$ 在相机坐标系中的归一化像平面坐标为 $x=X/Z$、$y=Y/Z$。忽略畸变时,像素坐标满足 +\begin{equation} + \begin{bmatrix}u\\v\\1\end{bmatrix} + = + \begin{bmatrix} + f_x & 0 & c_x\\ + 0 & f_y & c_y\\ + 0 & 0 & 1 + \end{bmatrix} + \begin{bmatrix}X/Z\\Y/Z\\1\end{bmatrix}. +\end{equation} +$f_x,f_y$ 是以像素计的焦距,$(c_x,c_y)$ 是主点。对小视场局部扰动,单像素对应的角分辨率近似为 +\begin{equation} + \delta\theta_x \approx \frac{1}{f_x}. +\end{equation} +因此,“分辨率更高”不必然意味着远距离角度估计更准;镜头焦距、像元尺寸、调焦质量、标定误差和运动模糊共同决定有效分辨率。 + +水平视场角可近似写为 +\begin{equation} + \mathrm{FOV}_x = 2\arctan\!\left(\frac{W_s}{2f}\right), +\end{equation} +其中 $W_s$ 为传感器有效宽度,$f$ 为物理焦距。增大焦距提高远处目标的像素占比,却减少搜索视野;这是真实的系统权衡,而不是单独比较相机型号可以解决的问题。 + +\subsection{曝光、噪声与快门} + +曝光时间 $T_e$ 决定传感器在一次成像中积累光子的时间。若图像角速度为 $\omega$,在局部近似下运动模糊长度约为 +\begin{equation} + \ell_{\mathrm{blur}} \approx f_x\,|\omega|\,T_e \quad \text{pixels}. +\end{equation} +缩短曝光能减少模糊,却降低光子数并恶化信噪比;提高模拟增益只能放大已有信号与噪声,不能创造信息。一个简化的像素噪声模型为 +\begin{equation} + \sigma_I^2 \approx \sigma_{\mathrm{read}}^2 + g^2 N_{\mathrm{photon}}, +\end{equation} +其中 $\sigma_{\mathrm{read}}^2$ 表示读出噪声,光子计数近似服从 Poisson 分布,$g$ 是增益映射。后续所谓“图像增强”不能恢复采样时已经因饱和、欠曝或模糊而丢失的信息。 + +全局快门在同一时间窗曝光整帧;滚动快门按行错时曝光。高速云台或快速运动目标下,滚动快门会把时间差混入几何形状。若后续 PnP 仍假设所有像素同一时刻采样,就会产生系统性位姿偏差,而非可由随机滤波消除的噪声。 + +\section{IMU、编码器与激光雷达} + +\subsection{IMU 不是姿态传感器} + +陀螺仪测量角速度,比力计测量的是非重力加速度在机体系中的表示。常用连续模型为 +\begin{align} + \vect{\omega}_m &= \vect{\omega}+\vect{b}_g+\vect{n}_g,\\ + \vect{a}_m &= \mat{R}_{WB}\trans(\vect{a}_W-\vect{g}_W)+\vect{b}_a+\vect{n}_a, +\end{align} +其中 $\vect{b}_g,\vect{b}_a$ 是缓慢漂移的 bias,$\vect{n}_g,\vect{n}_a$ 是噪声。姿态是对角速度积分并结合重力、视觉或其他外部约束估计得到的;把 IMU 驱动返回的 Euler 角当作无延迟真值,会掩盖内部滤波和坐标约定。 + +编码器类似地只报告轴或关节的离散位置量测。传动间隙、弹性、安装偏置和时间戳误差意味着“电机角度”等于“机构末端状态”通常只是近似。 + +\subsection{激光雷达与测距误差} + +脉冲 ToF 激光雷达通过往返时间 $\Delta t$ 估计距离: +\begin{equation} + d=\frac{c\Delta t}{2}, +\end{equation} +其中 $c$ 是光速。实际误差还受计时分辨率、反射率、入射角、多径、扫描运动和时间同步影响。旋转式雷达的一帧点云并非同一时刻采样;高速运动时必须根据每个点的采样时刻去畸变,否则点云配准和地图会系统性扭曲。 + +\section{计算平台:吞吐不是唯一指标} + +CPU 擅长复杂控制流、低延迟串行任务和系统调度;GPU 通过大量并行线程提高规则张量计算吞吐;NPU 通常以更受限的算子集合换取功耗效率。对计算量 $F$、访存量 $B$ 的任务,一个粗略下界为 +\begin{equation} + T_{\mathrm{compute}} \gtrsim + \max\!\left(\frac{F}{P_{\mathrm{peak}}},\frac{B}{\mathrm{BW}_{\mathrm{memory}}}\right) + +T_{\mathrm{launch}}+T_{\mathrm{copy}}. +\end{equation} +这解释了为什么只看 TOPS 或 FLOPS 会误导选型:小 batch 的机器人在线推理可能受核启动、内存复制和同步支配。应在目标分辨率、真实预处理和相同功耗模式下报告 P50/P99 延迟、吞吐、内存、温度与降频情况。 + +\section{总线、时间戳与端到端延迟} + +定义物理事件发生于 $t_0$,传感器采样完成于 $t_s$,消息到达算法进程于 $t_m$,计算完成于 $t_p$,执行器开始产生期望作用于 $t_a$。端到端延迟为 +\begin{equation} + \tau_{\mathrm{e2e}}=t_a-t_0 + =\tau_{\mathrm{sense}}+\tau_{\mathrm{transport}}+\tau_{\mathrm{queue}}+ + \tau_{\mathrm{compute}}+\tau_{\mathrm{actuate}}. +\end{equation} +平均延迟不足以描述系统;抖动 $\operatorname{Var}(\tau_{\mathrm{e2e}})$ 会直接影响预测误差。软件必须区分“测量发生时间”和“消息收到时间”。CAN、串口、USB 和以太网的带宽、仲裁、帧化和错误恢复机制不同,但算法接口都应保存采样时刻并监控数据年龄。 + +\begin{engineeringcheck} +让机器人或录制系统对同一物理事件在相机、IMU、雷达、算法日志和控制器中打点。报告每段延迟的 P50/P95/P99、丢帧率和时间戳来源。若无法测量执行器生效时间,必须把这一项明确列为未辨识参数,而不是并入“算法延迟”。 +\end{engineeringcheck} + +\section{接口契约} + +每种量测至少应记录下列字段: + +\begin{longtable}{p{0.22\textwidth}p{0.68\textwidth}} +\toprule +字段 & 必须回答的问题 \\ +\midrule +物理量与单位 & 是像素、弧度、米、米每秒,还是无量纲分数? \\ +坐标系 & 原点、轴向、手性和相对于其他坐标系的外参是什么? \\ +采样时间 & 时间戳在哪个时钟域产生,精度和同步误差多大? \\ +有效性 & 饱和、遮挡、CRC 错误、过期或模型 OOD 如何标识? \\ +不确定性 & 有协方差、区间、经验校准曲线,还是只有未校准 score? \\ +更新语义 & 固定频率、事件触发、允许乱序,还是只保留最新值? \\ +\bottomrule +\end{longtable} + +\begin{failuremode} +常见错误是把模块返回值的“数值类型”当作“语义契约”。例如三个浮点数既可能表示相机系位置,也可能表示云台 yaw/pitch 与距离;没有坐标系、单位和时间,任何融合或控制结果都不可复现。 +\end{failuremode} + +\begin{chaptertransition} +本章得到了一组带明确物理语义的数据和延迟约束。下一章解决这些数据如何在 Linux 进程、构建系统、消息中间件和测试框架中可靠流动,使后续算法实验可以回放、比较和复现。 +\end{chaptertransition} + diff --git a/book/chapters/ch02_reproducible_toolchain.tex b/book/chapters/ch02_reproducible_toolchain.tex new file mode 100644 index 0000000..9d8bcc9 --- /dev/null +++ b/book/chapters/ch02_reproducible_toolchain.tex @@ -0,0 +1,92 @@ +\chapter{计算机系统与可复现工具链} +\label{ch:toolchain} +\chapterstatus{首轮正文} + +\begin{learningobjectives} +\begin{itemize} + \item 理解进程、线程、内存、文件、设备和网络如何承载机器人算法; + \item 用 CMake、Git、容器和 CI 固定“源代码到可执行结果”的路径; + \item 为 ROS~2 或自研消息总线选择合理的队列、可靠性和时间语义; + \item 建立录制回放、单元测试、性能分析和故障注入的最小闭环。 +\end{itemize} +\end{learningobjectives} + +\begin{prerequisites} +前置产物是第~\ref{ch:closed-loop-hardware}~章中的传感器/执行器契约。本章产物是一个能读取录制数据、发布带时间戳量测、运行算法、记录输出并在 CI 中复现的最小工程。 +\end{prerequisites} + +\section{操作系统不是安装步骤} + +Linux 的价值不在于“视觉算法通常在 Ubuntu 上运行”,而在于它提供了一套可组合的资源抽象:文件描述符统一文件、设备、管道与 socket;虚拟内存隔离进程;线程共享地址空间;调度器决定计算何时真正获得 CPU;驱动和内核队列决定传感器数据何时对用户态可见。 + +设相机以平均速率 $\lambda$ 产生帧,算法平均服务时间为 $S$。单服务器稳定的必要条件是利用率 +\begin{equation} + \rho=\lambda\E[S] < 1. +\end{equation} +只要长期 $\rho\ge 1$,增加队列长度只能延迟溢出,不能消除积压。对在线控制,保留“最新帧”往往比无界 FIFO 更合理;对离线评测,则必须完整保序。队列策略属于算法语义,不能留给中间件默认值偶然决定。 + +\section{编译、链接与依赖边界} + +C++ 源文件经过预处理、编译、汇编和链接形成可执行文件。头文件决定编译依赖,库的 ABI 决定二进制兼容,运行时动态链接器再解析共享库。许多“换一台机器就不能运行”的问题,本质是编译器、CUDA、OpenCV、C++ ABI 或动态库搜索路径没有进入版本化描述。 + +一个可维护的 CMake target 应显式声明: + +\begin{lstlisting}[language={}] +add_library(tracker src/tracker.cpp) +target_include_directories(tracker PUBLIC include) +target_link_libraries(tracker PUBLIC Eigen3::Eigen) +target_compile_features(tracker PUBLIC cxx_std_20) + +add_executable(replay apps/replay.cpp) +target_link_libraries(replay PRIVATE tracker) +\end{lstlisting} + +这里 \texttt{PUBLIC}/\texttt{PRIVATE} 描述依赖是否传播,比全局修改 include path 和 linker flag 更接近真实模块边界。完整依赖通过 lockfile、容器镜像 digest 或可复现安装脚本固定,而不是依赖某位队员电脑中的隐含状态。 + +\section{版本控制是实验因果链} + +Git commit 不只用于“备份代码”,而是把源代码状态映射到可复现实验结果的标识。建议每次实验至少记录:commit SHA、配置文件、数据版本、随机种子、模型权重校验和、构建环境和硬件平台。分支承载未合并的假设,PR 承载证据和审查,tag 对应可发布版本。 + +避免把大模型权重和原始数据直接塞入普通 Git 历史。它们应由数据/模型仓库、对象存储或 release artifact 管理,并在清单中记录不可变哈希。否则一次误提交会永久膨胀所有克隆。 + +\section{ROS~2 与消息语义} + +ROS~2 基于 DDS 提供发布订阅、服务和 action,但“使用 ROS~2”并不会自动解决实时性。需要针对数据性质选择 QoS: + +\begin{itemize} + \item 高频传感数据通常更关心新鲜度,可使用小 depth 和 best effort; + \item 低频配置、状态切换和任务指令更关心可靠到达; + \item 坐标变换必须区分静态外参与随时间变化的位姿; + \item callback group、executor 和锁决定回调是否并发以及是否产生优先级反转; + \item 零拷贝、loaned message 或进程内通信只有在实际 profiling 证明复制是瓶颈时才值得引入。 +\end{itemize} + +无论使用 ROS~2 还是自研框架,消息都不应把接收时刻冒充采样时刻。跨计算机通信还需明确时钟同步方法、最大偏差与失锁检测。 + +\section{回放、测试与性能分析} + +机器人算法常见的不可复现来源是:只能连接实机运行、数据依赖现场时序、模块共享全局状态、参数通过临时命令修改。应把在线系统拆成纯算法核与 I/O 适配层,使同一算法核可以消费实时传感器或录制数据。 + +最小验证金字塔包括: + +\begin{enumerate} + \item \term{单元测试}:坐标变换、单位换算、边界条件和小型数值函数; + \item \term{性质测试}:旋转矩阵正交性、变换逆的一致性、序列化往返不变; + \item \term{回放测试}:固定 bag/视频输入产生版本化指标; + \item \term{SIL/HIL}:软件在环与硬件在环验证真实时序和接口; + \item \term{故障注入}:丢帧、乱序、延迟、外参偏差、传感器冻结和异常重启。 +\end{enumerate} + +性能分析必须区分平均吞吐与尾延迟。记录时间线时,至少把采集、拷贝、预处理、推理、后处理、融合与发布分段;只测一个总 FPS 无法定位瓶颈,也无法判断控制是否使用过期量测。 + +\begin{engineeringcheck} +选择一段固定录制数据,连续运行同一 commit 三次。验证输出哈希或关键指标是否稳定;记录 P50/P95/P99 延迟与最大队列深度;人为插入 100 ms 延迟、10\% 丢帧和一次时间戳回退,确认系统能检测并降级。 +\end{engineeringcheck} + +\begin{failuremode} +“在我的电脑上能跑”通常不是部署成功的证据。若构建依赖、参数、数据、时钟和硬件状态中任何一项未记录,问题就不能被另一名队员或未来的自己复现。 +\end{failuremode} + +\begin{chaptertransition} +工具链把一次算法运行变成可追溯实验。下一章讨论如何让 AI 和编码 agent 参与这条因果链:它们可以加速检索和实现,但必须受规格、证据、测试与审查约束。 +\end{chaptertransition} diff --git a/book/chapters/ch03_ai_agent_workflow.tex b/book/chapters/ch03_ai_agent_workflow.tex new file mode 100644 index 0000000..0dec834 --- /dev/null +++ b/book/chapters/ch03_ai_agent_workflow.tex @@ -0,0 +1,99 @@ +\chapter{AI 时代的学习与 agent coding} +\label{ch:ai-agent} +\chapterstatus{首轮正文} + +\begin{learningobjectives} +\begin{itemize} + \item 把 AI 工具放入“提出假设--实现--验证--复盘”的工程闭环; + \item 区分官方事实、文献结论、工程经验、模型推断与未验证设想; + \item 设计范围明确、可测试、可审查的 agent coding 任务; + \item 识别生成式工具在数学证明、引用、接口和安全操作上的典型失效。 +\end{itemize} +\end{learningobjectives} + +\begin{prerequisites} +前置知识是第~\ref{ch:toolchain}~章的版本控制、自动构建和回放测试。本章产物是一份任务规格、一组自动测试和一份包含证据链接的审查记录。 +\end{prerequisites} + +\section{学习目标从记忆 API 转为建立可检验模型} + +当 API 用法和代码模板可以被即时检索时,学习的稀缺能力转向三件事: + +\begin{enumerate} + \item 把模糊需求形式化为变量、假设、约束和评价指标; + \item 判断资料的证据等级与适用边界; + \item 设计能否证错误误实现的实验,而不是只观察“程序运行了”。 +\end{enumerate} + +例如“用 Kalman filter 让轨迹更稳”不是合格规格。更精确的问题应说明状态 $\vect{x}$、量测 $\vect{y}$、采样时刻、动力学、噪声假设、丢测处理,以及用 NIS/NEES、预测误差还是最终命中率评估。只有这样,agent 才能生成可被反驳的实现。 + +\section{证据分层} + +建议在笔记、issue 和正文草稿中显式标注证据类型: + +\begin{longtable}{p{0.18\textwidth}p{0.30\textwidth}p{0.42\textwidth}} +\toprule +等级 & 典型来源 & 使用方式 \\ +\midrule +E1 & 官方规则、标准、源代码、原始论文 & 可支撑精确事实,但仍需记录版本和上下文 \\ +E2 & 权威教材、官方教程、作者技术报告 & 用于解释和归纳,必要时回溯 E1 \\ +E3 & 可复现实验、队内日志和 benchmark & 支撑特定平台结论,不能无条件外推 \\ +E4 & 论坛、博客、经验总结 & 作为线索或工程假设,需要独立核验 \\ +E5 & AI 生成、口头传闻、未运行代码 & 只能作为待验证候选,不进入事实性结论 \\ +\bottomrule +\end{longtable} + +对 2025/2026 赛季规则尤其要记录文档名、版本、发布日期和适用赛事。预告、征求意见稿与正式规则不能混用;由规则推导出的策略应明确标为推断。 + +\section{agent coding 的闭环} + +一个可靠的 agent 任务应遵循以下顺序: + +\begin{enumerate} + \item \term{定义完成条件}:指定允许修改的文件、接口兼容性、测试和性能上限; + \item \term{先读上下文}:检查仓库结构、构建方式、现有约定和未提交改动; + \item \term{先计划后修改}:把大任务拆成可独立验证的小步; + \item \term{最小变更}:避免顺手重构无关模块,不覆盖用户已有修改; + \item \term{自动验证}:执行格式化、静态检查、单元测试、回放和 benchmark; + \item \term{人工审查}:检查坐标、单位、时间、边界条件、权限与破坏性操作; + \item \term{记录证据}:提交信息和 PR 说明包含实验、失败与剩余风险。 +\end{enumerate} + +任务规格可以采用下列模板: + +\begin{lstlisting}[language={}] +Goal: Add timestamp-aware camera/IMU synchronization. +Inputs: camera frame, IMU samples, both in monotonic clock domain. +Output: synchronized packet with age and validity fields. +Constraints: no unbounded queue; no API break outside sync module. +Tests: exact match, interpolation, out-of-order, dropout, clock rollback. +Metrics: P99 latency < 2 ms on the reference log. +Forbidden: changing sensor timestamps to message receive time. +\end{lstlisting} + +\section{三类高风险输出} + +\subsection{数学推导} + +语言模型可能生成形式连贯但前提缺失的推导。审查时应逐行检查:变量是否定义、等式是否真的成立、Jacobian 的线性化点是否一致、矩阵维度是否匹配、近似项是否有量级依据。数值仿真只能发现反例或提供证据,不能替代需要普遍成立的证明。 + +\subsection{引用与规则} + +模型可能混淆论文标题、年份、规则赛季或不存在的 API。任何引用进入正文前必须打开原始资料;网页结论记录访问日期,规则结论记录版本。若没有一手来源,正文应写“尚未核验”,而不是用更肯定的语气掩盖不确定性。 + +\subsection{能运行但语义错误的代码} + +最危险的错误通常不会导致编译失败,例如把度当弧度、把 $\mat{T}_{AB}$ 写成 $\mat{T}_{BA}$、用消息到达时刻代替采样时刻、在队列积压时仍按固定 $\Delta t$ 预测。测试必须针对物理不变量和边界场景,而不只是 happy path。 + +\begin{aiverify} +让 agent 实现一个相机--IMU 时间同步器,同时要求生成性质测试。人工再注入四类错误:单位错、坐标变换方向错、时间戳乱序、队列无限增长。若测试不能捕获,优先改进规格和测试,而不是继续扩展功能。 +\end{aiverify} + +\section{AI 在本书中的横向位置} + +后续每章都将包含一个 \term{AI-assisted, but verified} 模块:在图像章节中用 agent 生成实验脚手架;在 SLAM 章节中让它检查 Jacobian 和数据集接口;在控制章节中生成离散化与单元测试;在赛季案例中帮助建立 rule-to-capability matrix。VLM/LLM 用于高层规划时,还必须经过结构化动作空间、安全监督器和传统规划/控制器验证,不能直接输出执行器命令。 + +\begin{chaptertransition} +前三章建立了物理信号、软件执行和人机协作的共同底座。下一部分进入数学语言:坐标与刚体几何描述“量在哪里”,概率描述“我们知道多少”,优化与动力学描述“如何根据模型选择状态和动作”。 +\end{chaptertransition} + diff --git a/book/chapters/ch04_linear_algebra_geometry.tex b/book/chapters/ch04_linear_algebra_geometry.tex new file mode 100644 index 0000000..805513b --- /dev/null +++ b/book/chapters/ch04_linear_algebra_geometry.tex @@ -0,0 +1,64 @@ +\chapter{线性代数、坐标系与刚体几何} +\label{ch:geometry} +\chapterstatus{主干草案} + +\begin{learningobjectives} +\begin{itemize} + \item 区分几何对象与它在特定坐标系中的数值表示; + \item 使用 $\SO(3)$、$\SE(3)$ 表示旋转与刚体变换; + \item 理解局部扰动、Jacobian 和协方差换系为何是后续估计与优化的共同语言。 +\end{itemize} +\end{learningobjectives} + +\begin{prerequisites} +前置为基础线性代数。本章产物是一套带 frame 语义的坐标变换测试:复合、求逆和闭环变换应满足数值一致性。 +\end{prerequisites} + +\section{对象、基与坐标表示} + +物理空间中的向量不因更换坐标系而改变,但其坐标会改变。若 $\vect{p}_B$ 是同一点在 $B$ 系中的坐标,$\mat{R}_{AB}$ 将 $B$ 系向量表示到 $A$ 系,则 +\begin{equation} + \vect{p}_A=\mat{R}_{AB}\vect{p}_B, + \qquad + \mat{R}_{AB}\in\SO(3), +\end{equation} +且 $\mat{R}\trans\mat{R}=\mat{I}$、$\det\mat{R}=1$。刚体变换写成 +\begin{equation} + \mat{T}_{AB}= + \begin{bmatrix} + \mat{R}_{AB} & \vect{t}_{AB}\\ + \vect{0}\trans & 1 + \end{bmatrix}\in\SE(3), +\end{equation} +并满足 $\mat{T}_{AC}=\mat{T}_{AB}\mat{T}_{BC}$。下标顺序一旦含糊,后续标定、PnP、SLAM 和控制都会出现“数值看似合理、方向整体错误”的问题。 + +\section{局部扰动与 Jacobian} + +旋转不构成普通向量空间,不能在全局无条件相加。优化时通常在当前估计附近引入切空间扰动 $\delta\vect{\phi}\in\R^3$: +\begin{equation} + \mat{R}'=\mat{R}\exp(\delta\vect{\phi}^{\wedge}), +\end{equation} +其中 $(\cdot)^{\wedge}$ 把三维向量映射为反对称矩阵。若输出 $\vect{z}=g(\vect{x})$,局部一阶扰动为 +\begin{equation} + \delta\vect{z}\approx \mat{J}_g\delta\vect{x}, + \qquad + \mat{J}_g=\left.\frac{\partial g}{\partial \vect{x}}\right|_{\bar{\vect{x}}}. +\end{equation} +同一 Jacobian 同时用于反向传播、误差传播、EKF、bundle adjustment、系统线性化和优化控制。 + +\section{协方差的坐标变换} + +若小扰动协方差为 $\mat{P}_x$,经过局部线性映射 $g$ 后,输出协方差的一阶近似为 +\begin{equation} + \mat{P}_z\approx \mat{J}_g\mat{P}_x\mat{J}_g\trans. +\end{equation} +这不是“误差条加减”的经验规则,而是线性变换下二阶矩的直接结果。后续将用它回答:像素定位误差怎样传播到 PnP 位姿、位姿误差怎样影响弹道交会点、地图坐标系中的不确定性怎样进入规划安全边界。 + +\begin{failuremode} +Euler 角适合人机界面,但不适合作为所有内部旋转运算的默认变量。它存在参数化奇异和顺序依赖;同时对 Euler 角直接取均值、相减或传播协方差通常没有坐标无关意义。 +\end{failuremode} + +\begin{chaptertransition} +几何给出了状态的结构,却没有说明量测为何不确定。下一章引入概率分布、条件信息和统计估计,使 score、残差与协方差具有可检验的语义。 +\end{chaptertransition} + diff --git a/book/chapters/ch05_probability_uncertainty.tex b/book/chapters/ch05_probability_uncertainty.tex new file mode 100644 index 0000000..193d713 --- /dev/null +++ b/book/chapters/ch05_probability_uncertainty.tex @@ -0,0 +1,60 @@ +\chapter{概率、统计与不确定性} +\label{ch:probability} +\chapterstatus{主干草案} + +\begin{learningobjectives} +\begin{itemize} + \item 使用条件概率区分先验、似然和后验; + \item 从最大似然与 MAP 推导常见损失,而非把 loss 当作模型清单; + \item 区分随机噪声、系统偏差、模型不确定性和未校准 score; + \item 为检测、跟踪、SLAM 与决策选择可检验的不确定性指标。 +\end{itemize} +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:geometry}~章的向量与协方差。本章产物是对一组真实量测残差的分布诊断,而不是先验假设“噪声一定高斯”。 +\end{prerequisites} + +\section{Bayes 规则对应信息更新} + +对状态 $\vect{x}$ 与量测 $\vect{y}$,Bayes 规则为 +\begin{equation} + p(\vect{x}\mid\vect{y})= + \frac{p(\vect{y}\mid\vect{x})p(\vect{x})}{p(\vect{y})}. +\end{equation} +$p(\vect{x})$ 是观测前的先验,$p(\vect{y}\mid\vect{x})$ 是传感模型给出的似然,后验 $p(\vect{x}\mid\vect{y})$ 是观测后可用于决策的信息。检测网络输出的置信分数只有经过定义与校准,才能被解释为某种概率;它不能直接替代位姿协方差或目标存在概率。 + +\section{从似然到最小二乘} + +若量测模型为 +\begin{equation} + \vect{y}=h(\vect{x})+\vect{v}, + \qquad \vect{v}\sim\mathcal{N}(\vect{0},\mat{R}), +\end{equation} +则负对数似然在忽略常数后为 +\begin{equation} + -\log p(\vect{y}\mid\vect{x}) + =\frac{1}{2}\left\|\vect{y}-h(\vect{x})\right\|_{\mat{R}^{-1}}^2. +\end{equation} +因此加权最小二乘不是凭经验选择的损失,它来自高斯量测假设;权重 $\mat{R}^{-1}$ 表示量测精度。若残差含严重离群点或多峰结构,单一高斯和二次损失会失效,应使用鲁棒核、混合模型或显式数据关联。 + +\section{校准与可用的不确定性} + +分类模型的 calibration 关心“声称概率为 $q$ 的样本中,真实正确比例是否约为 $q$”;状态估计则可用归一化创新平方 NIS 与归一化估计误差平方 NEES 检查协方差是否与残差尺度一致。它们回答的不是同一个问题。 + +应至少区分: +\begin{itemize} + \item 传感器随机噪声,可通过重复采样估计; + \item bias、外参误差、时钟偏差等系统误差,平均更多数据也不会自动消失; + \item 场景外输入和模型失配导致的 epistemic uncertainty; + \item 目标行为本身的多模态未来,即 aleatoric uncertainty。 +\end{itemize} + +\begin{engineeringcheck} +采集静止与运动两类数据,分别画出残差直方图、自相关和随温度/曝光/距离变化的条件统计。若残差有偏、重尾或强时间相关,就不要把固定零均值白噪声模型写成事实。 +\end{engineeringcheck} + +\begin{chaptertransition} +概率把误差写成可计算的目标,下一章将这些目标转化为数值优化问题,并引入动力学离散化。它们共同支撑网络训练、几何估计、LQR、MPC 与非线性自瞄。 +\end{chaptertransition} + diff --git a/book/chapters/ch06_optimization_dynamics.tex b/book/chapters/ch06_optimization_dynamics.tex new file mode 100644 index 0000000..5e9493a --- /dev/null +++ b/book/chapters/ch06_optimization_dynamics.tex @@ -0,0 +1,70 @@ +\chapter{数值优化、动力学与离散化} +\label{ch:optimization-dynamics} +\chapterstatus{主干草案} + +\begin{learningobjectives} +\begin{itemize} + \item 从残差模型推导 Gauss--Newton 更新; + \item 理解约束优化、QP 和 KKT 条件在机器人算法中的位置; + \item 区分连续动力学、数值积分器和离散控制模型; + \item 检查 Jacobian、条件数、步长和离散化误差。 +\end{itemize} +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:geometry}--\ref{ch:probability}~章。本章产物是两个可复现实验:非线性重投影最小二乘,以及同一连续系统在不同步长和积分器下的离散响应。 +\end{prerequisites} + +\section{非线性最小二乘} + +考虑目标函数 +\begin{equation} + F(\vect{x})=\frac{1}{2}\sum_i \|\vect{r}_i(\vect{x})\|^2. +\end{equation} +在当前点 $\vect{x}$ 对残差一阶展开 +\begin{equation} + \vect{r}(\vect{x}+\delta\vect{x}) + \approx \vect{r}(\vect{x})+\mat{J}\delta\vect{x}. +\end{equation} +最小化局部二次模型得到正规方程 +\begin{equation} + \mat{J}\trans\mat{J}\,\delta\vect{x} + =-\mat{J}\trans\vect{r}. +\end{equation} +这就是 Gauss--Newton 步。若 $\mat{J}\trans\mat{J}$ 病态,更新会对噪声极敏感;Levenberg--Marquardt 添加阻尼,但不能凭空恢复不可观测方向。后续 PnP、标定、BA 与非线性弹道求解都应报告初始化、残差尺度与退化条件。 + +\section{约束与二次规划} + +机器人控制常见线性二次规划为 +\begin{align} + \min_{\vect{z}}\quad &\frac{1}{2}\vect{z}\trans\mat{H}\vect{z}+\vect{g}\trans\vect{z},\\ + \text{s.t.}\quad &\mat{A}\vect{z}=\vect{b},\qquad + \mat{C}\vect{z}\le \vect{d}. +\end{align} +当 $\mat{H}\succeq0$ 时问题是凸的,局部最优即全局最优。LQR、线性 MPC、轨迹平滑和任务分配中的许多子问题都能落入这一形式。约束是否可行、变量是否正确缩放、求解时间是否满足周期,比“调用了哪个 solver”更重要。 + +\section{连续模型与离散模型} + +连续系统 +\begin{equation} + \dot{\vect{x}}(t)=f(\vect{x}(t),\vect{u}(t)) +\end{equation} +需要通过积分器或解析离散化得到数字算法中的 $\vect{x}_{k+1}=f_d(\vect{x}_k,\vect{u}_k)$。对线性时不变系统 +\begin{equation} + \dot{\vect{x}}=\mat{A}_c\vect{x}+\mat{B}_c\vect{u}, +\end{equation} +在零阶保持输入下,精确离散矩阵为 +\begin{align} + \mat{A}_d &= \exp(\mat{A}_c\Delta t),\\ + \mat{B}_d &= \int_0^{\Delta t}\exp(\mat{A}_c\tau)\mat{B}_c\,d\tau. +\end{align} +前向 Euler 的 $\mat{A}_d\approx\mat{I}+\mat{A}_c\Delta t$ 只是低阶近似,步长过大时甚至会把稳定连续系统变成不稳定离散系统。后续设计 LQR/MPC 时必须使用与实际控制周期、输入保持和延迟一致的离散模型。 + +\begin{aiverify} +要求 agent 同时实现解析 Jacobian、自动微分 Jacobian 与有限差分 Jacobian,并随机生成状态比较三者。有限差分只能作为数值检查;步长过大有截断误差,过小有浮点消减误差,因此不能把一次接近视为解析式已被证明。 +\end{aiverify} + +\begin{chaptertransition} +数学底座完成后,下一部分从传感器产生的二维数字图像出发。卷积将同时作为经典线性算子与现代 CNN 的结构动机,特征点则继续成为多视图几何和 SLAM 的量测来源。 +\end{chaptertransition} + diff --git a/book/chapters/ch07_image_formation.tex b/book/chapters/ch07_image_formation.tex new file mode 100644 index 0000000..7d078a4 --- /dev/null +++ b/book/chapters/ch07_image_formation.tex @@ -0,0 +1,25 @@ +\chapter{图像如何形成:光学、曝光与数字表示} +\label{ch:image-formation} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +理解辐照度到像素值之间的采样、量化、颜色与 ISP 链路;能够分析欠曝、饱和、运动模糊、aliasing 和 gamma 对后续算法的影响。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:closed-loop-hardware}、\ref{ch:optimization-dynamics}~章。实验产物是一组固定场景下改变曝光、增益、帧率与运动速度的数据及定量误差曲线。 +\end{prerequisites} + +\plannedsection{从连续光场到离散数组}{建立曝光积分、空间采样和量化模型,明确图像不是场景的无损副本。} +\plannedsection{颜色、Bayer 阵列与 ISP}{只讲白平衡、去马赛克、gamma 和自动曝光中会改变算法统计分布的环节。} +\plannedsection{采样定理与 aliasing}{从频谱复制推导抗混叠动机;图像金字塔仅在尺度变化确有需要时出现。} +\plannedsection{卷积作为成像与处理算子}{将点扩散函数、模糊和离散卷积联系起来,为下一章建立物理动机。} + +\begin{failuremode} +在 JPEG/sRGB 图像上直接把像素差解释为光强差通常不成立,因为 gamma、ISP 与压缩已经改变了线性关系。 +\end{failuremode} + +\begin{chaptertransition} +图像形成解释了局部像素为何相关以及信息怎样丢失。下一章从卷积和局部结构出发,只保留对特征匹配、多视图与 CNN 真正必要的经典视觉。 +\end{chaptertransition} + diff --git a/book/chapters/ch08_convolution_features.tex b/book/chapters/ch08_convolution_features.tex new file mode 100644 index 0000000..06b493e --- /dev/null +++ b/book/chapters/ch08_convolution_features.tex @@ -0,0 +1,25 @@ +\chapter{卷积、局部结构、特征点与鲁棒匹配} +\label{ch:features} +\chapterstatus{结构已定,旧稿重点迁移章} + +\begin{learningobjectives} +从线性移不变算子推导离散卷积;理解梯度、structure tensor、Harris/FAST/ORB;完成描述子匹配与 RANSAC 几何验证。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:geometry}、\ref{ch:image-formation}~章。实验产物是“特征检测--匹配--RANSAC 单应/基础矩阵估计”的可回放 pipeline。 +\end{prerequisites} + +\plannedsection{线性移不变系统与卷积}{从叠加和位移等变性得到卷积,而非从滤镜清单开始。} +\plannedsection{梯度与 structure tensor}{解释边、平坦区与角点的局部可辨识性。} +\plannedsection{Harris、FAST 与 ORB}{比较稳定性、速度和尺度/旋转处理;SIFT/SURF 作为参考而非长篇模型史。} +\plannedsection{描述子、匹配与几何验证}{KNN ratio、cross-check、RANSAC/USAC 的假设、采样次数和退化。} + +\begin{engineeringcheck} +在视角、曝光、运动模糊和重复纹理四类变化下,分别报告关键点重复率、匹配 precision、inlier ratio 与重投影误差。仅展示一张“匹配连线图”不能证明算法可靠。 +\end{engineeringcheck} + +\begin{chaptertransition} +局部特征提供了人工设计的表示和 correspondences。下一章从经验风险最小化出发,说明表示如何由数据学习,并用图像分类建立最小训练闭环。 +\end{chaptertransition} + diff --git a/book/chapters/ch09_machine_learning_classification.tex b/book/chapters/ch09_machine_learning_classification.tex new file mode 100644 index 0000000..c9845ce --- /dev/null +++ b/book/chapters/ch09_machine_learning_classification.tex @@ -0,0 +1,26 @@ +\chapter{机器学习基础与图像分类} +\label{ch:ml-classification} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +理解训练/验证/测试划分、经验风险、泛化、反向传播、正则化与校准;从局部连接和权值共享理解 CNN,而非背网络名称。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:probability}--\ref{ch:features}~章。实验从线性分类器逐步增加到小型 CNN,并保持数据划分和指标不变。 +\end{prerequisites} + +\plannedsection{监督学习的问题形式}{定义数据分布、假设空间、损失、经验风险和分布外误差。} +\plannedsection{梯度、反向传播与优化}{将计算图的链式法则连接到第~\ref{ch:optimization-dynamics}~章的 Jacobian。} +\plannedsection{CNN 的归纳偏置}{局部连接、共享权重、等变性、感受野与下采样。} +\plannedsection{泛化、正则化与数据增强}{区分训练技巧和真实不变性假设,避免数据泄漏。} +\plannedsection{误差分析与概率校准}{confusion matrix、可靠性图和失败样本分层。} + +\begin{aiverify} +让 agent 生成训练脚本后,要求自动检查 train/val/test 是否共享原始视频片段、增强是否污染标签、模型选择是否偷看测试集。训练 loss 下降不是数据管线正确的证据。 +\end{aiverify} + +\begin{chaptertransition} +分类把整幅图像映射为语义标签。下一章引入空间定位和像素级结构,但保持统一视角:检测、语义分割和实例分割只是监督对象与输出空间不同。 +\end{chaptertransition} + diff --git a/book/chapters/ch10_detection_segmentation_temporal.tex b/book/chapters/ch10_detection_segmentation_temporal.tex new file mode 100644 index 0000000..ffd3afc --- /dev/null +++ b/book/chapters/ch10_detection_segmentation_temporal.tex @@ -0,0 +1,26 @@ +\chapter{检测、分割与时序感知} +\label{ch:semantic-perception} +\chapterstatus{结构已定,目标检测大幅压缩章} + +\begin{learningobjectives} +统一描述分类、目标检测、关键点、语义/实例/panoptic 分割;理解匹配、IoU、NMS 和 tracking-by-detection 接口;能够按任务和硬件选择现代基线。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:ml-classification}~章。本章只使用少量代表性结构说明共同原理,不再展开 R-CNN/YOLO 版本史、anchor-free 模型清单或 loss zoo。 +\end{prerequisites} + +\plannedsection{输出空间决定任务}{box、keypoint、semantic mask、instance mask 和 track identity 的变量及指标。} +\plannedsection{定位、匹配与集合预测}{IoU、正负样本/assignment、NMS 与 end-to-end set prediction 的共同问题。} +\plannedsection{分割与实例表示}{dense prediction、多尺度特征、mask quality 和边界误差。} +\plannedsection{关键点检测}{装甲板、能量机关和姿态任务中,关键点为何常比通用 box 更适合后续几何。} +\plannedsection{时序接口}{检测结果必须带采样时间、坐标、类别分布和 measurement uncertainty,再交给第~\ref{ch:state-estimation}~章。} + +\begin{failuremode} +检测 score 高不等于三维位姿准确。下游误差常由角点系统偏移、遮挡下的几何退化、时间延迟和错误关联主导,而 mAP 无法完整反映这些量。 +\end{failuremode} + +\begin{chaptertransition} +模型结构只解决功能的一部分。下一章把数据、指标、部署、尾延迟和失败样本回流组成工程闭环,防止“离线精度最好”成为唯一选型原则。 +\end{chaptertransition} + diff --git a/book/chapters/ch11_data_evaluation_deployment.tex b/book/chapters/ch11_data_evaluation_deployment.tex new file mode 100644 index 0000000..925bb4f --- /dev/null +++ b/book/chapters/ch11_data_evaluation_deployment.tex @@ -0,0 +1,22 @@ +\chapter{数据工程、评测与边缘部署} +\label{ch:data-deployment} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +建立数据版本、标注 QA、切分策略、分布漂移、系统指标与边缘部署基准;能够把错误样本重新送回数据闭环。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:toolchain}、\ref{ch:semantic-perception}~章。产物是固定 commit、数据 manifest、模型 hash 和目标硬件 P50/P99 benchmark。 +\end{prerequisites} + +\plannedsection{数据集不是文件夹}{场景覆盖、采集策略、版本、标注协议和泄漏控制。} +\plannedsection{指标必须对应决策}{precision/recall、mAP、mask metric、calibration,以及位姿/跟踪/命中率等下游指标。} +\plannedsection{导出、量化与算子支持}{ONNX/推理后端、精度漂移、动态 shape、预处理一致性。} +\plannedsection{端侧性能}{吞吐、P50/P99、内存、功耗、温度、降频和队列年龄。} +\plannedsection{失败样本回流}{按物理原因而非只按类别整理 hard case,建立回归集。} + +\begin{chaptertransition} +到此为止,二维感知能产生有时间戳的语义量测。下一部分使用相机几何、多视图、状态估计与雷达,把二维量测提升为三维状态和地图。 +\end{chaptertransition} + diff --git a/book/chapters/ch12_camera_geometry_pnp.tex b/book/chapters/ch12_camera_geometry_pnp.tex new file mode 100644 index 0000000..030eec3 --- /dev/null +++ b/book/chapters/ch12_camera_geometry_pnp.tex @@ -0,0 +1,26 @@ +\chapter{相机几何、标定与 PnP} +\label{ch:camera-pnp} +\chapterstatus{结构已定,旧稿重点迁移章} + +\begin{learningobjectives} +推导投影模型与畸变;理解内参、外参和手眼标定;使用 PnP 从 2D--3D correspondence 求位姿,并分析退化与误差传播。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:geometry}、\ref{ch:optimization-dynamics}、\ref{ch:features}~章。实验完成一次可复现标定和一组带重投影误差、条件数与协方差的 PnP 解算。 +\end{prerequisites} + +\plannedsection{中心投影与畸变}{从三维射线到像素;径向/切向畸变及模型边界。} +\plannedsection{内参标定}{可观测参数、标定板姿态覆盖、重投影误差与交叉验证。} +\plannedsection{外参与手眼标定}{坐标链、$AX=XB$ 类问题、同步与机构挠性。} +\plannedsection{PnP 与退化}{平面目标、多解、初始化、RANSAC 和近共线点的病态性。} +\plannedsection{像素误差到位姿误差}{利用 Jacobian 传播协方差,连接下游跟踪和瞄准。} + +\begin{failuremode} +标定的平均重投影误差很小,不保证远距离或视场边缘准确。若采样姿态缺乏覆盖,某些参数会高度相关,优化仍可能返回数值解却不具备可辨识性。 +\end{failuremode} + +\begin{chaptertransition} +PnP 使用已知三维结构从单帧恢复位姿。下一章放松这一条件,用多视图对应关系恢复相机运动和未知三维点,并通过 bundle adjustment 联合优化。 +\end{chaptertransition} + diff --git a/book/chapters/ch13_multiview_ba.tex b/book/chapters/ch13_multiview_ba.tex new file mode 100644 index 0000000..7dce500 --- /dev/null +++ b/book/chapters/ch13_multiview_ba.tex @@ -0,0 +1,20 @@ +\chapter{多视图几何与 Bundle Adjustment} +\label{ch:multiview} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +理解极线几何、基础/本质矩阵、三角化、尺度与 gauge freedom;从重投影残差推导小型 bundle adjustment。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:features}、\ref{ch:camera-pnp}~章。产物是双目/多目三角化和小型 BA,需报告基线、视差、条件数与失败场景。主要参考多视图几何教材\cite{hartley2004multiple}。 +\end{prerequisites} + +\plannedsection{极线约束}{从同一三维点的两条投影射线推导 ${\vect{x}'}\trans\mat{F}\vect{x}=0$。} +\plannedsection{相对位姿与尺度}{本质矩阵分解、cheirality 检查和单目尺度不可观。} +\plannedsection{三角化}{代数误差与几何重投影误差、低视差退化。} +\plannedsection{Bundle Adjustment}{相机位姿和路标点的稀疏非线性最小二乘、鲁棒核与 gauge fixing。} + +\begin{chaptertransition} +多视图提供跨帧几何约束,但真实在线系统还要递归处理噪声、漏检和目标身份。下一章以 Bayesian filtering 与数据关联统一动态目标估计。 +\end{chaptertransition} diff --git a/book/chapters/ch14_state_estimation_tracking.tex b/book/chapters/ch14_state_estimation_tracking.tex new file mode 100644 index 0000000..2522867 --- /dev/null +++ b/book/chapters/ch14_state_estimation_tracking.tex @@ -0,0 +1,26 @@ +\chapter{递归状态估计、目标跟踪与数据关联} +\label{ch:state-estimation} +\chapterstatus{结构已定,必须保留的“滤波”主线} + +\begin{learningobjectives} +从 Bayes filter 推导 KF/EKF 的预测与校正;理解 gating、assignment、漏检和多模型;用 NIS/NEES 检查一致性。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:probability}、\ref{ch:optimization-dynamics}、\ref{ch:semantic-perception}、\ref{ch:camera-pnp}~章。实验覆盖直行、转弯、装甲切换和小陀螺等模型失配情形。 +\end{prerequisites} + +\plannedsection{Bayes filter}{预测积分与量测更新;区分状态随机性和 belief。} +\plannedsection{Kalman filter}{线性高斯条件下的最小均方误差估计及 Riccati 递推。} +\plannedsection{EKF 与局部线性化}{Jacobian、线性化点和一致性问题;UKF/IMM 作为进阶。} +\plannedsection{数据关联}{Mahalanobis gating、Hungarian、JPDA 的适用范围和身份切换。} +\plannedsection{预测面向任务}{评价一段 horizon 后的空间误差,而非只追求当前轨迹平滑。} + +\begin{failuremode} +本章的 filter 是动态状态估计器,不应与第~\ref{ch:image-formation}~章中的图像低通滤波混为一谈。把所有平滑方法放入同一“滤波器大全”会掩盖状态、量测和动力学假设。 +\end{failuremode} + +\begin{chaptertransition} +状态估计给出了融合量测的概率框架。下一章加入深度、双目和激光雷达,并处理跨传感器外参、异步采样和点云运动畸变。 +\end{chaptertransition} + diff --git a/book/chapters/ch15_lidar_fusion.tex b/book/chapters/ch15_lidar_fusion.tex new file mode 100644 index 0000000..4d3d968 --- /dev/null +++ b/book/chapters/ch15_lidar_fusion.tex @@ -0,0 +1,22 @@ +\chapter{深度、激光雷达、点云与多传感器融合} +\label{ch:lidar-fusion} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +理解双目/深度/ToF 测距误差;掌握点云几何、ICP/NDT 与占据表示;完成相机--雷达外参与时间校准。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:closed-loop-hardware}、\ref{ch:geometry}、\ref{ch:state-estimation}~章。实验产物是带时间戳和外参版本的融合局部地图。 +\end{prerequisites} + +\plannedsection{不同深度来源}{双目视差 $Z=fb/d$ 的误差放大、主动深度和 ToF 的材料/多径问题。} +\plannedsection{点云与邻域几何}{法向、体素、近邻与数据结构,只讲后续配准和建图所需内容。} +\plannedsection{ICP 与 NDT}{对应关系、局部最优、初始化和退化环境。} +\plannedsection{外参与时间校准}{空间变换与时间偏差联合影响,避免只做静态棋盘外参。} +\plannedsection{融合架构}{松/紧耦合、raw measurement 与 track-level fusion 的信息损失。} + +\begin{chaptertransition} +多传感器融合产生连续的 ego pose、目标轨迹和局部几何。下一章把这些约束组织为 VO/VIO/SLAM 后端和统一 WorldState,正式结束感知栈。 +\end{chaptertransition} + diff --git a/book/chapters/ch16_slam_world_model.tex b/book/chapters/ch16_slam_world_model.tex new file mode 100644 index 0000000..a2fe04b --- /dev/null +++ b/book/chapters/ch16_slam_world_model.tex @@ -0,0 +1,22 @@ +\chapter{VO、VIO、SLAM 与统一世界状态} +\label{ch:slam-world} +\chapterstatus{结构已定,感知栈收束章} + +\begin{learningobjectives} +理解 SLAM 前端、后端、回环、地图与 gauge freedom;掌握因子图和 IMU 预积分的角色;定义供决策与规划使用的 WorldState。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:multiview}--\ref{ch:lidar-fusion}~章。实验在固定 bag 上报告 ATE/RPE、跟踪丢失、资源占用,并故意破坏外参或时间同步分析漂移。推荐参考\cite{barfoot2017state,dellaert2017factor}。 +\end{prerequisites} + +\plannedsection{前端与后端}{特征/直接法、里程计约束、非线性图优化和滑动窗口。} +\plannedsection{IMU 预积分与可观性}{重力、bias、尺度、全局位置/yaw gauge 及传感器组合差异。} +\plannedsection{回环与地图}{place recognition、几何验证、位姿图、栅格/稀疏/稠密/语义地图。} +\plannedsection{统一 WorldState}{\texttt{ego pose, tracks, map, covariance, timestamp, validity} 的接口和版本。} +\plannedsection{评测与失效恢复}{ATE/RPE 之外,重定位时间、地图一致性、CPU/GPU、内存和最坏延迟。} + +\begin{chaptertransition} +感知部分最终输出的不是“框、点云或轨迹各一份”,而是具有共同时间和坐标语义的 WorldState。下一部分从被控对象模型开始,把这一状态变成可执行动作。 +\end{chaptertransition} + diff --git a/book/chapters/ch17_modeling_identification_feedback.tex b/book/chapters/ch17_modeling_identification_feedback.tex new file mode 100644 index 0000000..b0d45bc --- /dev/null +++ b/book/chapters/ch17_modeling_identification_feedback.tex @@ -0,0 +1,26 @@ +\chapter{被控对象建模、系统辨识与反馈} +\label{ch:modeling-feedback} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +从机构与执行器得到运动学/动力学模型;理解线性化、可控性、可观性、系统辨识、PID 与前馈;建立模型误差和延迟的验收方法。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:optimization-dynamics}、\ref{ch:slam-world}~章。产物是云台或底盘的一组输入--输出实验、辨识模型、残差诊断和闭环 baseline。 +\end{prerequisites} + +\plannedsection{从物理对象到状态空间}{选择状态、输入、输出和扰动;单位、坐标和 actuator dynamics。} +\plannedsection{工作点线性化}{从非线性 $\dot{\vect{x}}=f(\vect{x},\vect{u})$ 得到局部 $\mat{A},\mat{B}$,说明有效邻域。} +\plannedsection{可控性与可观性}{区分“存在控制/观测序列”和数值条件良好。} +\plannedsection{系统辨识}{激励设计、ARX/state-space、训练/验证数据与残差白化。} +\plannedsection{PID、前馈与 anti-windup}{从误差动力学解释比例/积分/微分;输入饱和和积分累积。} + +\begin{failuremode} +用闭环运行数据直接做辨识时,输入与噪声常相关;若忽略控制器和闭环结构,得到的模型可能在离线拟合上很好,却不具备可用于新控制器设计的因果意义。 +\end{failuremode} + +\begin{chaptertransition} +本章得到局部线性模型与 baseline 控制器。下一章把“跟踪误差小、控制量不过大”写成二次型最优控制问题,并通过 Riccati 方程得到 LQR/LQG。 +\end{chaptertransition} + diff --git a/book/chapters/ch18_lqr_lqg.tex b/book/chapters/ch18_lqr_lqg.tex new file mode 100644 index 0000000..9088d0e --- /dev/null +++ b/book/chapters/ch18_lqr_lqg.tex @@ -0,0 +1,35 @@ +\chapter{LQR 与 LQG:局部最优反馈} +\label{ch:lqr} +\chapterstatus{结构已定,核心推导待展开} + +\begin{learningobjectives} +从有限时域二次代价推导 Riccati 递推;理解无限时域 LQR、tracking augmentation、Kalman 对偶与分离原理的条件。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:probability}、\ref{ch:optimization-dynamics}、\ref{ch:state-estimation}、\ref{ch:modeling-feedback}~章。实验比较 PID、LQR 与 LQG 在噪声、延迟和模型失配下的表现。 +\end{prerequisites} + +对离散线性系统 +\begin{equation} + \vect{x}_{k+1}=\mat{A}\vect{x}_k+\mat{B}\vect{u}_k, +\end{equation} +有限时域代价为 +\begin{equation} + J=\vect{x}_N\trans\mat{Q}_N\vect{x}_N+ + \sum_{k=0}^{N-1} + \left(\vect{x}_k\trans\mat{Q}\vect{x}_k+ + \vect{u}_k\trans\mat{R}\vect{u}_k\right). +\end{equation} +后续将从 Bellman recursion 假设价值函数 $V_k(\vect{x})=\vect{x}\trans\mat{P}_k\vect{x}$,逐步推导最优线性反馈 $\vect{u}_k=-\mat{K}_k\vect{x}_k$ 和 Riccati 递推,而不是只给软件接口。 + +\plannedsection{有限时域 LQR 推导}{完成平方、Riccati backward recursion 和反馈增益。} +\plannedsection{无限时域与稳定性}{stabilizability/detectability、DARE 和闭环极点。} +\plannedsection{参考跟踪与积分扩维}{稳态前馈、误差坐标和积分状态。} +\plannedsection{LQG 与分离原理}{线性高斯、无约束条件下估计器与控制器分离;模型失配时的边界。} +\plannedsection{权重如何选择}{从量纲、允许误差和输入尺度出发归一化,不把 $Q,R$ 调参神秘化。} + +\begin{chaptertransition} +LQR 给出了局部反馈和 value function 的第一个解析例子。接下来先解决全局几何可达性:如何在地图中找到避障路径;随后再加入时间、动力学与约束。 +\end{chaptertransition} + diff --git a/book/chapters/ch19_path_planning.tex b/book/chapters/ch19_path_planning.tex new file mode 100644 index 0000000..fcdfc45 --- /dev/null +++ b/book/chapters/ch19_path_planning.tex @@ -0,0 +1,26 @@ +\chapter{配置空间、代价地图与路径规划} +\label{ch:path-planning} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +从机器人几何构造配置空间与 cost map;理解 Dijkstra/A*/D*、admissible heuristic、采样规划和动态重规划的适用范围。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:geometry}、\ref{ch:slam-world}~章。实验在同一地图和动态障碍序列上比较路径代价、搜索节点数、重规划时间与碰撞率。路径规划基础可参考\cite{lavalle2006planning}。 +\end{prerequisites} + +\plannedsection{工作空间与配置空间}{障碍膨胀不是任意 dilation,而是机器人形状与障碍的 Minkowski sum。} +\plannedsection{图搜索与动态规划}{Dijkstra、A* 的最优性条件,heuristic 的 admissibility/consistency。} +\plannedsection{增量搜索}{地图变化下 D*/D* Lite 如何重用搜索信息。} +\plannedsection{采样方法}{PRM/RRT/RRT* 的概率完备性、窄通道和有限时间表现。} +\plannedsection{动态障碍与时空规划}{时间作为状态维度、预测不确定性和安全余量。} + +\begin{failuremode} +把机器人质点化后在占据栅格中找到的路径,可能让车体、云台或机构与障碍碰撞。cost map 必须与机器人 footprint、定位误差和制动距离共同定义。 +\end{failuremode} + +\begin{chaptertransition} +路径只描述几何曲线,不包含何时到达、速度、加速度和动力学可行性。下一章对路径做时间参数化,并直接优化满足约束的轨迹。 +\end{chaptertransition} + diff --git a/book/chapters/ch20_trajectory_optimization.tex b/book/chapters/ch20_trajectory_optimization.tex new file mode 100644 index 0000000..11f8bc5 --- /dev/null +++ b/book/chapters/ch20_trajectory_optimization.tex @@ -0,0 +1,22 @@ +\chapter{轨迹生成、时间参数化与轨迹优化} +\label{ch:trajectory} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +区分 path 与 trajectory;使用多项式/样条生成连续参考;理解 direct shooting、multiple shooting、collocation 与约束优化。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:optimization-dynamics}、\ref{ch:modeling-feedback}、\ref{ch:path-planning}~章。产物是一条满足速度、加速度、曲率和输入约束的时标轨迹。 +\end{prerequisites} + +\plannedsection{平滑与时间参数化}{连续性阶次对应执行器速度/加速度/jerk;不能只对 waypoint 插值。} +\plannedsection{最小 snap/jerk 与 QP}{从多项式系数和边界条件构造凸二次问题。} +\plannedsection{Direct shooting}{控制序列作为变量,动力学通过 rollout 满足;梯度敏感性。} +\plannedsection{Multiple shooting 与 collocation}{增加状态变量换取稀疏结构与更稳定的初值。} +\plannedsection{动态障碍与不确定性}{chance constraint、tube/robust idea 作为进阶,避免把预测轨迹当真值。} + +\begin{chaptertransition} +轨迹优化能离线或局部生成受约束参考,但模型和环境会变化。下一章采用 receding horizon 在线重复求解,把状态反馈与显式约束统一到 MPC。 +\end{chaptertransition} + diff --git a/book/chapters/ch21_mpc_nonlinear_control.tex b/book/chapters/ch21_mpc_nonlinear_control.tex new file mode 100644 index 0000000..2ebceb0 --- /dev/null +++ b/book/chapters/ch21_mpc_nonlinear_control.tex @@ -0,0 +1,26 @@ +\chapter{MPC 与非线性约束控制} +\label{ch:mpc} +\chapterstatus{结构已定,核心推导待展开} + +\begin{learningobjectives} +推导线性 MPC 的 condensed/sparse QP;理解 receding horizon、terminal cost/set、recursive feasibility;认识 iLQR/SQP/NMPC 的局部性与实时权衡。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:lqr}、\ref{ch:trajectory}~章。实验在相同模型上比较 LQR、线性 MPC 和 NMPC 的跟踪误差、约束违反和求解时间。推荐参考\cite{rawlings2017model}。 +\end{prerequisites} + +\plannedsection{有限时域最优控制}{状态/输入序列、动力学约束和 stage/terminal cost。} +\plannedsection{线性 MPC 转为 QP}{消元形式与稀疏形式、warm start、active constraints。} +\plannedsection{稳定性与可行性}{terminal ingredients、soft constraint 与不可行恢复。} +\plannedsection{iLQR、SQP 与 NMPC}{局部二次化、rollout、line search 和 realtime iteration。} +\plannedsection{工程周期}{求解 deadline、上次可行解 fallback、模型更新和 actuator saturation。} + +\begin{failuremode} +MPC 输出的第一步控制只有在求解结果可行且未过期时才应执行。若求解器偶发超时却没有 fallback,平均算时达标仍可能导致真实系统失控。 +\end{failuremode} + +\begin{chaptertransition} +前述章节给出了估计动态目标、求解受约束轨迹与反馈执行的工具。下一章以自瞄为主线,把 PnP、关联、多模型预测、延迟、弹道根求解和云台约束压缩成一个完整高速闭环。 +\end{chaptertransition} + diff --git a/book/chapters/ch22_auto_aim_nonlinear_estimation.tex b/book/chapters/ch22_auto_aim_nonlinear_estimation.tex new file mode 100644 index 0000000..b1054f9 --- /dev/null +++ b/book/chapters/ch22_auto_aim_nonlinear_estimation.tex @@ -0,0 +1,27 @@ +\chapter{非线性估计与数值求解:以自瞄为主线} +\label{ch:auto-aim-method} +\chapterstatus{结构已定,旧稿重点迁移章} + +\begin{learningobjectives} +建立 detection--PnP--track--predict--ballistic solve--command 全链路;理解切甲、多模型、延迟补偿、弹道阻力、飞行时间隐式方程与不确定性传播。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:semantic-perception}、\ref{ch:camera-pnp}、\ref{ch:state-estimation}、\ref{ch:modeling-feedback}--\ref{ch:mpc}~章。产物是可注入延迟和模型偏差的闭环仿真,而非孤立检测 demo。 +\end{prerequisites} + +\plannedsection{量测模型}{关键点/box 到 PnP 位姿,装甲板与车体中心的隐变量关系。} +\plannedsection{目标动力学与切甲}{CV/CA/CTRV/旋转刚体模型、多 hypothesis 和可见性。} +\plannedsection{延迟与交会条件}{目标在 $t+\tau_{\mathrm{system}}+\tau_{\mathrm{flight}}$ 的状态;飞行时间依赖瞄准解本身。} +\plannedsection{弹道模型与根求解}{真空抛体、线性/二次阻力数值积分、shooting/root finding 及多解。} +\plannedsection{云台与发射约束}{角速度/加速度、死区、开火判据和命中概率。} +\plannedsection{误差拆账}{像素、外参、状态预测、弹速、延迟和控制误差对落点的敏感度。} + +\begin{engineeringcheck} +固定目标轨迹,逐项只改变一种误差源并报告落点误差;再组合真实误差检查非线性交互。若只报告最终命中率,就无法判断下一单位研发时间应投入感知、预测还是控制。 +\end{engineeringcheck} + +\begin{chaptertransition} +自瞄是局部、快速、目标明确的闭环。赛场自主还需要选择“现在做什么”。下一部分先建立可解释的行为架构,再沿 Bellman 原理进入动态规划、RL、多机器人博弈和受约束 VLM 规划。 +\end{chaptertransition} + diff --git a/book/chapters/ch23_behavior_architecture.tex b/book/chapters/ch23_behavior_architecture.tex new file mode 100644 index 0000000..53fb1af --- /dev/null +++ b/book/chapters/ch23_behavior_architecture.tex @@ -0,0 +1,26 @@ +\chapter{行为划分:FSM、行为树、Utility 与安全监督} +\label{ch:behavior} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +区分有限状态机、层级状态机、行为树、utility selector 和监督器;处理迟滞、抢占、超时、死锁、fallback 与安全状态。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:slam-world}、\ref{ch:path-planning}--\ref{ch:auto-aim-method}~章。实验实现巡逻、追击、补给、撤退和故障停车,并支持事件回放。 +\end{prerequisites} + +\plannedsection{行为不是分类标签}{“当前模式”必须包含 guard、entry/exit action、超时与恢复语义。} +\plannedsection{FSM 与层级状态机}{显式转移、状态爆炸、迟滞和测试覆盖。} +\plannedsection{行为树}{sequence/selector/decorator、reactive tick 与共享 blackboard。} +\plannedsection{Utility 与仲裁}{多目标打分、尺度、迟滞、资源冲突和可解释性。} +\plannedsection{安全监督与 fallback}{独立于任务策略的速度、区域、通信和硬件健康约束。} + +\begin{failuremode} +“决策树”通常指监督分类模型,而“行为树”是任务执行结构;二者不能混用。更不能把大量 if-else 自动称为行为树而忽略 tick、抢占与恢复语义。 +\end{failuremode} + +\begin{chaptertransition} +规则/行为结构提供可解释 baseline,但无法自动解决长期收益和部分可观测性。下一章从最短路的 Bellman principle 推到 MDP/POMDP,再讨论强化学习真正改变了哪一步。 +\end{chaptertransition} + diff --git a/book/chapters/ch24_dp_mdp_rl.tex b/book/chapters/ch24_dp_mdp_rl.tex new file mode 100644 index 0000000..11b2cb6 --- /dev/null +++ b/book/chapters/ch24_dp_mdp_rl.tex @@ -0,0 +1,26 @@ +\chapter{动态规划、MDP/POMDP 与强化学习规划} +\label{ch:dp-rl} +\chapterstatus{结构已定,核心推导待展开} + +\begin{learningobjectives} +从 Bellman optimality 推导 value/policy iteration;理解 MDP 与 POMDP 的状态、动作、转移、观测和 reward;区分 model-based planning 与 model-free RL。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:probability}、\ref{ch:path-planning}、\ref{ch:behavior}~章。实验先在简化赛场建立精确 DP baseline,再与 RL 比较样本效率、域外泛化和安全约束。基础参考\cite{sutton2018reinforcement,bertsekas2017dynamic}。 +\end{prerequisites} + +\plannedsection{Bellman principle}{从最短路的 cost-to-go 到有限时域动态规划。} +\plannedsection{MDP}{状态充分性、Markov 性、策略、占用分布和价值函数。} +\plannedsection{POMDP 与 belief}{观测不等于状态,belief update 与近似规划。} +\plannedsection{强化学习}{policy/value/model learning 各自替代未知的哪一部分;offline/online 数据边界。} +\plannedsection{安全与 sim-to-real}{约束、shield、domain randomization、offline validation 和人工接管。} + +\begin{failuremode} +把规则计分直接写成 reward 不保证得到可部署策略。部分奖励会引入 specification gaming;训练分布覆盖不足时,高仿真回报也不能证明真实对抗中的安全和泛化。 +\end{failuremode} + +\begin{chaptertransition} +单机器人 MDP 忽略了队友通信和对手策略。下一章把 assignment、网络信息和博弈结构加入状态与决策,形成雷达站--哨兵--英雄等多机器人协同问题。 +\end{chaptertransition} + diff --git a/book/chapters/ch25_multi_robot_coordination.tex b/book/chapters/ch25_multi_robot_coordination.tex new file mode 100644 index 0000000..f411853 --- /dev/null +++ b/book/chapters/ch25_multi_robot_coordination.tex @@ -0,0 +1,22 @@ +\chapter{多机器人协同、任务分配与博弈} +\label{ch:multi-robot} +\chapterstatus{结构已定,待规则核查后写实} + +\begin{learningobjectives} +理解集中/分布式协同、任务分配、通信图、信息时效、对手建模和基本博弈结构;设计丢包、延迟和错误目标身份下的降级机制。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:slam-world}、\ref{ch:behavior}--\ref{ch:dp-rl}~章。实验模拟雷达站、哨兵和其他机器人共享敌方 tracks 与意图,报告任务收益和通信鲁棒性。 +\end{prerequisites} + +\plannedsection{任务分配}{二分图 matching、auction、动态 reassignment 与资源约束。} +\plannedsection{通信图与一致性}{带宽、延迟、丢包、消息过期和去中心化信息。} +\plannedsection{共享世界状态}{track identity、数据来源、协方差与重复信息,避免 double counting。} +\plannedsection{对手建模与博弈}{零和/一般和、best response、有限理性与不确定对手。} +\plannedsection{规则约束}{裁判系统允许的通信和自动化边界按赛季版本维护。} + +\begin{chaptertransition} +多机器人决策空间很大,VLM/LLM 可以帮助解释规则和提出候选高层计划,但其输出没有动力学与安全保证。下一章明确它们只能进入受约束、可验证的混合架构。 +\end{chaptertransition} + diff --git a/book/chapters/ch26_vlm_hybrid_intelligence.tex b/book/chapters/ch26_vlm_hybrid_intelligence.tex new file mode 100644 index 0000000..869b67e --- /dev/null +++ b/book/chapters/ch26_vlm_hybrid_intelligence.tex @@ -0,0 +1,26 @@ +\chapter{VLM/LLM 启发式规划与混合智能} +\label{ch:vlm} +\chapterstatus{结构已定,待写实} + +\begin{learningobjectives} +理解 foundation model 在语义理解、检索与候选计划生成上的价值;使用 schema、工具调用、计划验证、监督器和 fallback 限制其不确定输出。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:ai-agent}、\ref{ch:behavior}--\ref{ch:multi-robot}~章。实验要求 VLM 只生成有限高层动作序列,再由规则、行为树和规划器验证。 +\end{prerequisites} + +\plannedsection{能力与边界}{语义先验、开放词汇、长时程常识与不可预测 latency/hallucination。} +\plannedsection{结构化动作空间}{JSON/schema、有限 skill library、前置/后置条件和资源预算。} +\plannedsection{检索与工具调用}{读取当前 WorldState、规则版本和地图,而非依赖参数记忆。} +\plannedsection{计划验证与监控}{符号约束、仿真 rollout、MPC 可行性、安全 supervisor 和超时。} +\plannedsection{评测}{任务成功率之外,幻觉率、非法动作率、超时、恢复和分布漂移。} + +\begin{aiverify} +构造对抗测试:缺失规则、相互矛盾的自然语言提示、过期 WorldState 和工具超时。系统必须拒绝非法动作并回退到可验证策略,而不是让模型用更流畅的语言掩盖缺失信息。 +\end{aiverify} + +\begin{chaptertransition} +到此已经具备感知、控制、规划和高层决策方法。下一章定义这些模块之间的唯一接口、生命周期与验证阶梯,防止每个赛题重新拼接一套无法回放的系统。 +\end{chaptertransition} + diff --git a/book/chapters/ch27_system_integration.tex b/book/chapters/ch27_system_integration.tex new file mode 100644 index 0000000..d7a39d3 --- /dev/null +++ b/book/chapters/ch27_system_integration.tex @@ -0,0 +1,26 @@ +\chapter{感知--决策--规划--控制的接口、集成与验证} +\label{ch:integration} +\chapterstatus{结构已定,全书收束主干} + +\begin{learningobjectives} +定义 Measurement、WorldState、Intent、Trajectory 与 Command 的数据契约;建立 replay、SIL、HIL、fault injection 和系统级误差/延迟预算。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:closed-loop-hardware}--\ref{ch:vlm}~章。本章产物是一套与具体赛题解耦的全栈接口和验收矩阵。 +\end{prerequisites} + +\plannedsection{五层数据契约}{\texttt{Measurement -> WorldState -> Intent -> Trajectory -> Command};字段、坐标、时间、不确定性和 validity。} +\plannedsection{生命周期与运行状态}{初始化、标定加载、健康检查、激活、降级、恢复与安全停止。} +\plannedsection{端到端预算}{误差、延迟、算力、带宽、功耗与故障概率如何分配到模块。} +\plannedsection{验证阶梯}{unit/property test、record replay、SIL、HIL、靶场、对抗测试。} +\plannedsection{可观测性与日志}{每项系统指标能追溯到中间变量和软件版本。} + +\begin{engineeringcheck} +固定一个录制场景,从原始量测完整重放到控制命令;对每层保存输入/输出 hash、时间和坐标 metadata。任何模块都不得依赖现场无法记录的隐藏全局状态。 +\end{engineeringcheck} + +\begin{chaptertransition} +后三个案例不再各自讲一套孤立算法,而是复用同一接口:自瞄强调高速局部闭环,哨兵强调移动自主,雷达站强调全局态势与通信;最后映射到 2025/2026 规则。 +\end{chaptertransition} + diff --git a/book/chapters/ch28_auto_aim_case.tex b/book/chapters/ch28_auto_aim_case.tex new file mode 100644 index 0000000..4b89efb --- /dev/null +++ b/book/chapters/ch28_auto_aim_case.tex @@ -0,0 +1,25 @@ +\chapter{自瞄端到端案例} +\label{ch:auto-aim-case} +\chapterstatus{案例框架已定;已接入 2026 V2.2.0 规则快照} + +\begin{learningobjectives} +把相机/曝光、关键点、PnP、关联、状态估计、弹道、云台控制和开火逻辑组合成可拆账的实战系统。 +\end{learningobjectives} + +\begin{prerequisites} +直接复用第~\ref{ch:auto-aim-method}、\ref{ch:integration}~章。案例必须报告命中率随距离、相对速度、旋转状态、曝光、延迟和弹速变化的条件曲线。 +\end{prerequisites} + +\plannedsection{需求与观测}{以 2026 移动旋转装甲、英雄部署和飞镖末端移动靶为验收场景;把正式规则事实与训练场参数分开配置。} +\plannedsection{baseline 架构}{关键点或精简检测器、PnP、EKF/多模型、弹道求根、云台参考。} +\plannedsection{系统辨识}{相机--枪管外参、云台响应、弹速、发射延迟和空气阻力。} +\plannedsection{评测与消融}{像素、位姿、预测、弹道、控制逐层误差以及最终命中率。} +\plannedsection{失败与回退}{漏检、切甲、目标交叉、时间戳异常、超时和手动接管。} + +\begin{engineeringcheck} +2026 英雄部署会切断视频流但保留受限数据、小地图与 UI,第 31 章给出了条款位置。回放实验应主动切断图像,验证估计器是否只凭部署前状态、地图先验与合法数据维持有效期,并在不确定性越界时禁止发射,而不是用隐藏真值“补图传”。 +\end{engineeringcheck} + +\begin{chaptertransition} +自瞄围绕单个目标形成高速局部回路。哨兵案例进一步需要定位建图、动态避障、任务行为和补给/撤退等长时程自主。 +\end{chaptertransition} diff --git a/book/chapters/ch29_sentry_case.tex b/book/chapters/ch29_sentry_case.tex new file mode 100644 index 0000000..b2ff7e0 --- /dev/null +++ b/book/chapters/ch29_sentry_case.tex @@ -0,0 +1,25 @@ +\chapter{哨兵自主案例} +\label{ch:sentry-case} +\chapterstatus{案例框架已定;已接入 2026 V2.2.0 规则快照} + +\begin{learningobjectives} +把定位、语义地图、动态目标、全局/局部规划、行为决策、自瞄与安全监督组合为可回放哨兵系统。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:slam-world}、\ref{ch:path-planning}--\ref{ch:integration}~章。产物是多场景仿真/回放 benchmark 与实机 HIL 计划。 +\end{prerequisites} + +\plannedsection{规则到能力矩阵}{自动/半自动形态、人工干预成本、进攻/防御/移动姿态、切换冷却与持续时间按规则版本配置。} +\plannedsection{定位与语义地图}{可通行域、战略区域、动态障碍、重定位和地图版本。} +\plannedsection{全局与局部规划}{重规划周期、制动距离、对手预测和 fallback。} +\plannedsection{行为与资源}{巡逻、交战、补给、撤退、功率/弹量/血量与多目标 utility。} +\plannedsection{验证}{任务成功率、人工干预、碰撞、最坏延迟、定位丢失恢复和规则违反次数。} + +\begin{engineeringcheck} +对同一回放分别运行自动与半自动配置;将地图标记、买弹、复活、回血、换姿态等人工动作记为带成本事件。报告完成任务所需成本、姿态切换次数、失定位恢复时间和安全监督触发次数,不能只报告导航成功率。 +\end{engineeringcheck} + +\begin{chaptertransition} +哨兵以自身传感和地图完成局部自主;雷达站案例把视角提升到全场态势、跨视角关联与队友通信,并与多机器人决策连接。 +\end{chaptertransition} diff --git a/book/chapters/ch30_radar_case.tex b/book/chapters/ch30_radar_case.tex new file mode 100644 index 0000000..0f82b79 --- /dev/null +++ b/book/chapters/ch30_radar_case.tex @@ -0,0 +1,29 @@ +\chapter{雷达站与全队态势融合案例} +\label{ch:radar-case} +\chapterstatus{案例框架已定;已接入 2026 V2.2.0 规则与通信协议快照} + +\begin{learningobjectives} +区分 RoboMaster“雷达站”这一赛场角色与具体雷达传感器;完成全场标定、多视角/多传感目标定位、跨视角关联、轨迹融合和队友广播。 +\end{learningobjectives} + +\begin{prerequisites} +前置为第~\ref{ch:camera-pnp}--\ref{ch:slam-world}、\ref{ch:multi-robot}、\ref{ch:integration}~章。实验报告定位误差、刷新率、identity switch、覆盖率、通信年龄和丢包鲁棒性。 +\end{prerequisites} + +\plannedsection{观测拓扑}{固定/移动相机、激光雷达或其他当季允许传感器的覆盖与遮挡。} +\plannedsection{全场标定与定位}{场地坐标、相机/雷达外参、地面约束和标定漂移监控。} +\plannedsection{多视角数据关联}{类别、位置、运动和外观信息;重复信息与 identity consistency。} +\plannedsection{轨迹融合与态势}{track-level/raw fusion、可见性、敌我状态和不确定性。} +\plannedsection{通信与策略接口}{按 2026 协议拆分小地图、10\,Hz 雷达无线链路、2-GFSK 信息波/干扰波、空中反制与失联 fallback。} + +\begin{engineeringcheck} +建立三条独立回放管线:传感观测到 track、RF 采样到协议字段、两者到全队态势与策略。分别注入标定漂移、identity switch、CRC 错误、密钥错误、乱序和断链,确认任一管线失败时不会污染其余状态。 +\end{engineeringcheck} + +\begin{failuremode} +名称中含“雷达”不意味着系统必须使用毫米波雷达。传感器选择应由场地覆盖、精度、遮挡、规则、成本和部署条件决定,并在正文中明确“赛场角色”与“物理传感器”。 +\end{failuremode} + +\begin{chaptertransition} +最后一章按规则版本把自瞄、哨兵、雷达站和全队协同的能力需求汇总为可维护矩阵,形成从规则到系统、从实验到赛场的 capstone。 +\end{chaptertransition} diff --git a/book/chapters/ch31_season_2025_2026.tex b/book/chapters/ch31_season_2025_2026.tex new file mode 100644 index 0000000..052ffd8 --- /dev/null +++ b/book/chapters/ch31_season_2025_2026.tex @@ -0,0 +1,108 @@ +\chapter{2025/2026 赛季能力矩阵与综合设计} +\label{ch:season} +\chapterstatus{首轮规则核查完成;快照截至 2026-08-24} + +\begin{learningobjectives} +将正式规则映射为观测量、决策变量、规划约束、控制接口、系统指标和 fallback;区分规则事实、工程推导与前瞻研究,形成可随规则版本更新的 capstone。 +\end{learningobjectives} + +\begin{prerequisites} +前置为全书各章。每个赛季条目必须记录赛事、规则文件、版本号、发布日期和原文位置;不得把社区方案、技术评审得分项或未来规则规划写成当前赛场强制条款。 +\end{prerequisites} + +\section{证据等级与版本锁定} + +本章使用四级证据:正式比赛规则、制作规范和通信协议属于\term{规范性事实};官方考核细则属于\term{资格或评分要求};正式规则附录中的未来规划属于\term{方向性信号};社区开源方案只属于\term{工程案例}。后三级不能反向改写第一层。 + +\begin{longtable}{p{0.18\textwidth}p{0.18\textwidth}p{0.19\textwidth}p{0.34\textwidth}} +\caption{本版教材使用的规则快照}\label{tab:season-snapshot}\\ +\toprule +资料 & 最新核查版本 & 日期 & 教材中的用途 \\ +\midrule +\endfirsthead +\toprule +资料 & 最新核查版本 & 日期 & 教材中的用途 \\ +\midrule +\endhead +RMUC 2025 比赛规则 & V2.1.0 & 2025-08-02 & 历史基线,不用早期版本代替赛季终版\cite{rmuc2025_rules} \\ +RMUC 2026 比赛规则 & V2.2.0 & 2026-08-07 & 当前规则快照;官方 MD5 为 \texttt{d4808d8f91575d89e2fe4f7ba2f4fb3f}\cite{rmuc2026_rules_v220} \\ +RMUC 2026 制作规范 & V2.0.0 & 2026-06-26 & 无线设备、结构、安全和客户端边界\cite{rmuc2026_resource} \\ +RMUC 2026 通信协议 & V2.0.0 & 2026-06-26 & 链路、频率、带宽、数据格式与客户端接口\cite{rmuc2026_protocol_v200} \\ +\bottomrule +\end{longtable} + +V2.2.0 的修改日志(文内 p.~2)表明,相对 V2.1.0 只新增空中机器人判罚条例;具体是第 7.2.2.3 节 R55(文内 p.~141):从 2.4\,m 高度水平直视时,空中机器人激光检测模块必须完整露出,违规最高按模块离线处理。因此 2026 的主要机制变化应追溯到 V2.0.0,而不能把 V2.2.0 的发布日期误写成所有机制的引入日期。 + +\section{从 2025 到 2026:规则事实到算法能力} + +\begin{longtable}{p{0.12\textwidth}p{0.34\textwidth}p{0.25\textwidth}p{0.19\textwidth}} +\caption{赛季变化与课程能力映射;第二列为规则事实,第三列为工程推导}\label{tab:season-capability}\\ +\toprule +子系统 & 经核验的规则变化 & 推导出的算法能力 & 对应章节 \\ +\midrule +\endfirsthead +\toprule +子系统 & 经核验的规则变化 & 推导出的算法能力 & 对应章节 \\ +\midrule +\endhead +工程 & 2025 第 3.2 节(pp.~29--30)为取矿/兑矿;2026 第 3.2 节(pp.~25--26)转为能量单元与科技核心装配。 & 6D 位姿、手眼标定、视觉伺服、接触状态估计与任务状态机。 & 第~\ref{ch:camera-pnp}、\ref{ch:multiview}、\ref{ch:behavior}~章 \\ +雷达站 & 2025 第 3.7 节(p.~34)面向对方地面单位;2026 第 3.7、5.6.6 节(p.~31、pp.~117--121)扩展至双方地面与空中单位,并加入空中反制与 2-GFSK 信息波/干扰波。 & 多传感多目标融合、敌我身份与置信度、独立 RF/DSP 管线、资源约束下的信息价值。 & 第~\ref{ch:lidar-fusion}、\ref{ch:multi-robot}、\ref{ch:radar-case}~章 \\ +哨兵 & 2025 第 3.5 节(pp.~32--34)仅全自动;2026 第 3.5、5.6.4 节(pp.~29--30、114--115)允许自动/半自动,并引入不同干预成本和进攻/防御/移动姿态。 & 可解释状态机或行为树、资源预算、姿态切换规划、人机协同与故障恢复。 & 第~\ref{ch:behavior}、\ref{ch:dp-rl}、\ref{ch:sentry-case}~章 \\ +英雄 & 2026 第 5.6.1 节(pp.~111--112)规定部署时底盘断电且视频流关闭,但受限数据、小地图和 UI 仍可用;完整形态考核另设盲图传自动瞄准任务。 & 地图先验、无图传状态估计、弹道/外参在线校正和部署状态监督。 & 第~\ref{ch:state-estimation}、\ref{ch:auto-aim-method}、\ref{ch:auto-aim-case}~章 \\ +空中 & 2026 第 3.4、5.6.3 节及 R48--R55(pp.~28--29、112--114、140--141)改变弹丸/经验/热量机制,并加入雷达激光反制与飞行安全约束。 & 安全飞控、受约束轨迹、激光指向、健康监控和可证明的规则保护层。 & 第~\ref{ch:trajectory}、\ref{ch:mpc}、\ref{ch:integration}~章 \\ +飞镖 & 2026 第 5.6.5 节(pp.~115--117)增加末端移动目标:检测到发射 1.2\,s 后启动,并在 600\,ms 内到达新位置。 & 事件时间戳、目标运动预测、制导/弹道、时延补偿与概率落点。 & 第~\ref{ch:state-estimation}、\ref{ch:auto-aim-method}~章 \\ +地形 & 2025 已有高地/公路隧道与起伏路;2026 第 5.5.3.5 节(pp.~108--109)进一步把隧道纳入地形跨越的顺序检测与计时机制。 & 鲁棒定位、可通行性/代价地图、局部规划、越障状态机和失定位降级。 & 第~\ref{ch:slam-world}、\ref{ch:path-planning}、\ref{ch:sentry-case}~章 \\ +\bottomrule +\end{longtable} + +表~\ref{tab:season-capability} 中“规则变化”来自官方现行规则和考核资料\cite{rmuc2026_rules_v220,rmuc2026_assessment_full,rmuc2026_assessment_details};“算法能力”是教材的工程推导,不代表官方指定实现。 + +\section{裁判系统不是高速控制总线} + +2026 协议将通信划分为常规串口、图传和雷达无线链路。常规串口帧使用 \texttt{SOF=0xA5}、CRC8 与 CRC16;第 1.1 节(pp.~4--5)给出的正常环境参考值约为 130\,ms、丢包率小于 1\%,恶劣环境约为 200\,ms、丢包率约 3\%\cite{rmuc2026_protocol_v200}。 + +\begin{longtable}{p{0.29\textwidth}p{0.27\textwidth}p{0.34\textwidth}} +\caption{裁判系统协议边界与系统含义}\label{tab:referee-boundary}\\ +\toprule +接口 & 协议上限 & 系统含义 \\ +\midrule +\endfirsthead +\toprule +接口 & 协议上限 & 系统含义 \\ +\midrule +\endhead +裁判位姿 \texttt{0x0203};哨兵地面车位置 \texttt{0x020B} & 均为 1\,Hz & 只能作为低频全局信息,不能闭合姿态或底盘内环 \\ +雷达到小地图 \texttt{0x0305};路径显示 \texttt{0x0307} & 分别不高于 5\,Hz、1\,Hz & 发布层与估计/规划层解耦;旧包必须过期 \\ +机器人交互 \texttt{0x0301} & 内容不超过 112\,B,总上行不超过 30\,Hz;接收端和带宽受限 & 先做消息优先级、压缩、限流和超时设计 \\ +自定义客户端与视频 & 数据接口为 50/75\,Hz;视频为 1080p60 HEVC/H.265,无重传 & 接收端处理序号、丢包、乱序和时间戳,不以 UI 到达时间当观测时间 \\ +雷达无线 \texttt{0x0A01--0x0A06} & 10\,Hz & RF 解调、态势融合和策略消费应为三个可独立回放的阶段 \\ +\bottomrule +\end{longtable} + +这些限制分别见协议表 1-5(pp.~6--8)、表 1-25(pp.~23--24)、表 1-41/1-42(pp.~37--38)、表 1-44 至表 1-49(pp.~39--43)和第 2 章(p.~44 起)。 + +由此得到两层架构:本体传感器、时钟同步和高速估计承担内环;裁判系统与队友信息进入低频全局态势层,并携带时间戳、来源、有效期和不确定性。任何控制器都不得把低频裁判位姿当成无延迟真值。自定义客户端同样必须处理 Protobuf/MQTT、无重传视频/数据、丢包、乱序、超时与回放;赛场网络拓扑不能假设机器人之间存在任意 Wi-Fi 或 ROS~2 直连。 + +\begin{engineeringcheck} +对每条外部消息记录 \texttt{source\_time}、\texttt{receive\_time}、序号、有效期和坐标系;在 0--300\,ms 人工延迟、0--5\% 随机丢包、乱序与断链条件下回放。验收项不是“还能收到包”,而是系统是否按时降级且控制内环保持安全。 +\end{engineeringcheck} + +\section{2026 官方考核如何变成实验} + +规则测评检验版本化读规能力,裁判系统考核覆盖模块、联网、界面和现场排障;完整形态考核包含移动旋转装甲跟踪射击、英雄盲图传部署射击、工程装配、哨兵导航/定位可视化/自瞄/姿态与越障、空中飞行射击与回收、飞镖动态靶、雷达识别/RF/反制以及自定义客户端交互\cite{rmuc2026_rule_quiz,rmuc2026_referee_assessment,rmuc2026_assessment_full,rmuc2026_assessment_details}。 + +这些条目用于设计可复现实验,而不是抄成题库。每个实验都要给出输入录制、坐标与时间契约、基线、指标、故障注入、SIL/HIL 阶梯及规则版本。建议优先级如下: + +\begin{enumerate} + \item \textbf{P0:}裁判通信鲁棒性、基础跟踪与弹道、SLAM 定位导航、哨兵决策/规划/控制、工程 6D 装配; + \item \textbf{P1:}雷达多目标融合与 RF/DSP、空中反制、飞镖预测、自定义客户端 HMI; + \item \textbf{P2:}RL 与 VLM 启发式决策。二者是研究扩展,不是 2026 明文指定方案。 +\end{enumerate} + +\begin{aiverify} +可以让 agent 比较两版官方 PDF 并生成候选差异表,但人工必须核对文件版本、发布日期、哈希与原文位置。规则数字进入代码时应生成带版本号的配置和单元测试;网页、PDF 与论坛说明冲突时,以明确适用赛事和版本的正式文件为准,并保留冲突记录。 +\end{aiverify} + +\begin{chaptertransition} +本章不是全书终点,而是版本化维护入口:稳定理论按勘误更新,赛季事实按官方版本更新,工程结论按新的回放与比赛数据更新。完整 capstone 必须提交设计、代码、数据、指标、失败分析和 AI 使用记录,闭合感知--决策--规划--控制。 +\end{chaptertransition} diff --git a/book/config/commands.tex b/book/config/commands.tex new file mode 100644 index 0000000..1dcd5d2 --- /dev/null +++ b/book/config/commands.tex @@ -0,0 +1,70 @@ +\newcommand{\term}[1]{\textbf{#1}} +\newcommand{\vect}[1]{\bm{#1}} +\newcommand{\mat}[1]{\bm{#1}} +\newcommand{\trans}{^{\mathsf T}} +\newcommand{\inv}{^{-1}} +\newcommand{\E}{\mathbb{E}} +\newcommand{\R}{\mathbb{R}} +\newcommand{\SE}{\mathrm{SE}} +\newcommand{\SO}{\mathrm{SO}} +\newcommand{\diag}{\operatorname{diag}} +\newcommand{\argmin}{\operatorname*{arg\,min}} +\newcommand{\argmax}{\operatorname*{arg\,max}} + +\newtcolorbox{learningobjectives}{ + breakable, + colback=rmlight, + colframe=rmblue, + title={本章学习目标}, + fonttitle=\bfseries +} + +\newtcolorbox{prerequisites}{ + breakable, + colback=white, + colframe=rmcyan, + title={前置知识与本章产物}, + fonttitle=\bfseries +} + +\newtcolorbox{failuremode}{ + breakable, + colback=rmred!4, + colframe=rmred, + title={Failure mode}, + fonttitle=\bfseries +} + +\newtcolorbox{aiverify}{ + breakable, + colback=rmgold!6, + colframe=rmgold, + title={AI-assisted, but verified}, + fonttitle=\bfseries +} + +\newtcolorbox{chaptertransition}{ + breakable, + colback=rmcyan!4, + colframe=rmcyan, + title={承上启下}, + fonttitle=\bfseries +} + +\newtcolorbox{engineeringcheck}{ + breakable, + colback=rmblue!3, + colframe=rmblue!75, + title={工程检查}, + fonttitle=\bfseries +} + +\newcommand{\chapterstatus}[1]{% + \begin{flushright}\small\color{rmgray}内容状态:#1\end{flushright}% +} + +\newcommand{\plannedsection}[2]{% + \section{#1} + \textcolor{rmgray}{\textbf{写作要点:}#2} +} + diff --git a/book/config/preamble.tex b/book/config/preamble.tex new file mode 100644 index 0000000..023a189 --- /dev/null +++ b/book/config/preamble.tex @@ -0,0 +1,81 @@ +\usepackage[a4paper,top=25mm,bottom=25mm,left=27mm,right=27mm,headheight=15pt]{geometry} +\usepackage{amsmath,amssymb,mathtools,bm} +\usepackage{graphicx} +\usepackage{booktabs,longtable,tabularx,array,multirow} +\usepackage{enumitem} +\usepackage{xcolor} +\usepackage{listings} +\usepackage[most]{tcolorbox} +\usepackage{fancyhdr} +\usepackage{microtype} +\usepackage{caption} +\usepackage{subcaption} +\usepackage{url} +\usepackage{csquotes} +\usepackage{hyperref} +\usepackage[nameinlink,noabbrev]{cleveref} + +\newif\ifusebiblatex +\IfFileExists{biblatex.sty}{% + \usepackage[backend=biber,style=numeric,sorting=none,maxbibnames=99]{biblatex} + \addbibresource{references.bib} + \usebiblatextrue +}{% + \usebiblatexfalse +} +\graphicspath{{assets/}{../Image_base/}} + +\definecolor{rmblue}{HTML}{174A7E} +\definecolor{rmcyan}{HTML}{2E86AB} +\definecolor{rmred}{HTML}{B33A3A} +\definecolor{rmgold}{HTML}{B88416} +\definecolor{rmlight}{HTML}{F3F7FA} +\definecolor{rmgray}{HTML}{566573} +\definecolor{codebg}{HTML}{F7F7F7} + +\hypersetup{ + colorlinks=true, + linkcolor=rmblue, + citecolor=rmred, + urlcolor=rmcyan, + pdftitle={RoboMaster 机器人算法教程:感知、决策、规划与控制}, + pdfauthor={NeoZng 与开源贡献者}, + bookmarksopen=true +} + +\setlist[itemize]{leftmargin=2em,itemsep=0.3em,topsep=0.4em} +\setlist[enumerate]{leftmargin=2.2em,itemsep=0.3em,topsep=0.4em} +\setlength{\parindent}{2em} +\setlength{\parskip}{0.15em} +\renewcommand{\arraystretch}{1.25} + +\pagestyle{fancy} +\fancyhf{} +\fancyhead[LE]{\small\leftmark} +\fancyhead[RO]{\small\rightmark} +\fancyfoot[C]{\thepage} +\renewcommand{\headrulewidth}{0.4pt} + +\lstdefinestyle{rmcode}{ + backgroundcolor=\color{codebg}, + basicstyle=\ttfamily\small, + keywordstyle=\color{rmblue}\bfseries, + commentstyle=\color{rmgray}, + stringstyle=\color{rmred}, + numbers=left, + numberstyle=\scriptsize\color{rmgray}, + frame=single, + rulecolor=\color{rmgray!35}, + breaklines=true, + showstringspaces=false, + tabsize=2, + columns=fullflexible +} +\lstset{style=rmcode} + +\captionsetup{font=small,labelfont=bf} +\crefname{chapter}{第}{章} +\crefname{section}{第}{节} +\crefname{figure}{图}{图} +\crefname{table}{表}{表} +\crefname{equation}{式}{式} diff --git a/book/frontmatter/notation.tex b/book/frontmatter/notation.tex new file mode 100644 index 0000000..7d013be --- /dev/null +++ b/book/frontmatter/notation.tex @@ -0,0 +1,25 @@ +\chapter*{统一记号、坐标系与时间约定} +\addcontentsline{toc}{chapter}{统一记号、坐标系与时间约定} + +\begin{longtable}{p{0.20\textwidth}p{0.70\textwidth}} +\toprule +记号 & 含义 \\ +\midrule +\endfirsthead +\toprule +记号 & 含义 \\ +\midrule +\endhead +$\vect{x}_k$ & 离散时刻 $k$ 的真实状态;维度和坐标系由所在章节定义 \\ +$\hat{\vect{x}}_k$ & 基于截至时刻 $k$ 的信息得到的状态估计 \\ +$\vect{y}_k$ & 传感器量测,而不是无条件可信的世界状态 \\ +$\vect{u}_k$ & 控制输入;需注明是电流、力矩、速度还是位置目标 \\ +$\mat{R}_{AB}$ & 将 $B$ 坐标系向量表示到 $A$ 坐标系的旋转矩阵 \\ +$\mat{T}_{AB}\in\SE(3)$ & 从坐标系 $B$ 到坐标系 $A$ 的刚体变换 \\ +$\mat{P}_k$ & 状态估计误差协方差,而非经验“置信度分数” \\ +$t_s,t_m,t_p,t_a$ & 采样、消息到达、算法处理和执行器生效时间 \\ +\bottomrule +\end{longtable} + +默认使用 SI 单位,角度计算使用弧度。接口若使用毫米、度或裁判系统离散量,必须在边界显式转换。任何跨模块消息至少包含测量时间戳、坐标系、单位、有效性与不确定性描述。 + diff --git a/book/frontmatter/preface.tex b/book/frontmatter/preface.tex new file mode 100644 index 0000000..65375f2 --- /dev/null +++ b/book/frontmatter/preface.tex @@ -0,0 +1,19 @@ +\chapter*{前言:从“视觉组教程”到机器人算法教材} +\addcontentsline{toc}{chapter}{前言:从“视觉组教程”到机器人算法教材} + +旧版教程诞生于装甲板检测占据视觉组主要研发资源的时期。它记录了当时完整而真实的学习路径,也因此积累了大量目标检测模型、损失函数、图像滤波和工程技巧。然而,机器人算法的目标不是在离线数据集上得到一个框或一张掩膜,而是在传感器、算力、通信、执行器和赛事规则共同约束下,持续估计环境并产生可执行决策。 + +新版以闭环系统为主线。设机器人真实状态为 $\vect{x}_k$,传感器产生量测 $\vect{y}_k$,算法估计状态 $\hat{\vect{x}}_k$,决策与规划生成参考 $\vect{r}_k$,控制器输出指令 $\vect{u}_k$: +\begin{align} + \vect{x}_{k+1} &= f(\vect{x}_k,\vect{u}_k,\vect{w}_k), \\ + \vect{y}_k &= h(\vect{x}_k)+\vect{v}_k, \\ + \hat{\vect{x}}_k &= \mathcal{E}(\vect{y}_{0:k},\vect{u}_{0:k-1}), \\ + \vect{r}_k &= \mathcal{P}(\hat{\vect{x}}_k,\mathcal{M}_k), \\ + \vect{u}_k &= \mathcal{C}(\hat{\vect{x}}_k,\vect{r}_k). +\end{align} +这里 $\vect{w}_k$ 和 $\vect{v}_k$ 分别表示过程扰动与量测噪声,$\mathcal{M}_k$ 表示地图、任务和规则等上下文。全书每一部分都对应这条链上的一个映射,并最终在自瞄、哨兵与雷达站案例中重新闭合。 + +这也改变了内容取舍。传统图像处理只保留理解数字图像、卷积、特征点和多视图几何所必需的内容;目标检测从模型史缩减为任务形式、数据闭环、指标、现代基线与部署;Kalman 滤波等动态状态估计则被保留并加强,因为它们承担的是“从带噪量测恢复动态状态”的核心工作,而非简单平滑图像。 + +本稿仍处于结构重构阶段。稳定的数学和工程原理与易变化的赛季规则分开维护;涉及 2025/2026 赛季的事实将注明规则版本、发布日期和来源。旧稿不会立即删除,而是作为迁移证据保留,直到新版相应章节达到可替代的质量。 + diff --git a/book/frontmatter/roadmap.tex b/book/frontmatter/roadmap.tex new file mode 100644 index 0000000..a85e78c --- /dev/null +++ b/book/frontmatter/roadmap.tex @@ -0,0 +1,35 @@ +\chapter*{阅读路线与章节依赖} +\addcontentsline{toc}{chapter}{阅读路线与章节依赖} + +全书不是按算法出现年代排列,而是按“上一章产物成为下一章输入”的方式组织。 + +\begin{longtable}{p{0.16\textwidth}p{0.35\textwidth}p{0.39\textwidth}} +\toprule +路线 & 建议章节 & 结束时应具备的能力 \\ +\midrule +\endfirsthead +\toprule +路线 & 建议章节 & 结束时应具备的能力 \\ +\midrule +\endhead +全栈路线 & 1--31 章顺序阅读 & 从硬件信号链出发,设计并验证感知--决策--规划--控制闭环 \\ +感知路线 & 1--16、27、30--31 章 & 形成带时间戳、坐标系和协方差的统一世界状态,而非只输出检测结果 \\ +规划控制路线 & 1--6、14、16--27、29--31 章 & 从状态空间、LQR/LQG 到 MPC、行为决策与多机器人协同 \\ +自瞄路线 & 1--14、17--18、21--22、27--28 章 & 贯通标定、PnP、跟踪、延迟补偿、弹道求根和云台控制 \\ +\bottomrule +\end{longtable} + +五条概念桥贯穿全书: + +\begin{enumerate} + \item \term{信号链桥}:物理量 $\rightarrow$ 传感器 $\rightarrow$ 采样和时间戳 $\rightarrow$ 软件消息; + \item \term{卷积桥}:线性移不变算子与局部结构 $\rightarrow$ 梯度和特征点 $\rightarrow$ CNN 的局部连接与权值共享; + \item \term{估计桥}:检测输出是量测 $\rightarrow$ Bayesian estimation 和数据关联 $\rightarrow$ 目标轨迹、位姿与地图; + \item \term{最优性桥}:最小二乘和 QP $\rightarrow$ LQR 的局部最优反馈 $\rightarrow$ 轨迹优化与 MPC; + \item \term{Bellman 桥}:最短路和动态规划 $\rightarrow$ MDP/POMDP $\rightarrow$ 强化学习与受约束的 VLM 高层规划。 +\end{enumerate} + +\begin{failuremode} +章节依赖不是阅读建议而已。例如,没有统一的时间戳、外参和协方差定义,所谓“雷达与视觉融合”无法形成可检验的估计问题;没有动力学和约束,路径点也不能直接作为执行器命令。 +\end{failuremode} + diff --git a/book/latexmkrc b/book/latexmkrc new file mode 100644 index 0000000..b7844a9 --- /dev/null +++ b/book/latexmkrc @@ -0,0 +1,5 @@ +$pdf_mode = 5; +$xelatex = 'xelatex -interaction=nonstopmode -halt-on-error -file-line-error %O %S'; +$bibtex = 'biber %O %B'; +$max_repeat = 5; + diff --git a/book/main.tex b/book/main.tex new file mode 100644 index 0000000..f3c4f4b --- /dev/null +++ b/book/main.tex @@ -0,0 +1,81 @@ +\documentclass[UTF8,zihao=-4,openany,fontset=fandol]{ctexbook} + +\input{config/preamble} +\input{config/commands} + +\title{RoboMaster 机器人算法教程\\[0.5em]\large 感知、决策、规划与控制} +\author{NeoZng 与开源贡献者} +\date{重构草案 \today} + +\begin{document} + +\frontmatter +\maketitle +\input{frontmatter/preface} +\input{frontmatter/roadmap} +\input{frontmatter/notation} +\tableofcontents + +\mainmatter + +\part{平台、硬件与工程工具} +\input{chapters/ch01_closed_loop_hardware} +\input{chapters/ch02_reproducible_toolchain} +\input{chapters/ch03_ai_agent_workflow} + +\part{数学、数值与动态系统底座} +\input{chapters/ch04_linear_algebra_geometry} +\input{chapters/ch05_probability_uncertainty} +\input{chapters/ch06_optimization_dynamics} + +\part{从数字图像到现代视觉识别} +\input{chapters/ch07_image_formation} +\input{chapters/ch08_convolution_features} +\input{chapters/ch09_machine_learning_classification} +\input{chapters/ch10_detection_segmentation_temporal} +\input{chapters/ch11_data_evaluation_deployment} + +\part{三维感知、融合与 SLAM} +\input{chapters/ch12_camera_geometry_pnp} +\input{chapters/ch13_multiview_ba} +\input{chapters/ch14_state_estimation_tracking} +\input{chapters/ch15_lidar_fusion} +\input{chapters/ch16_slam_world_model} + +\part{运动规划与控制} +\input{chapters/ch17_modeling_identification_feedback} +\input{chapters/ch18_lqr_lqg} +\input{chapters/ch19_path_planning} +\input{chapters/ch20_trajectory_optimization} +\input{chapters/ch21_mpc_nonlinear_control} +\input{chapters/ch22_auto_aim_nonlinear_estimation} + +\part{自主决策与学习规划} +\input{chapters/ch23_behavior_architecture} +\input{chapters/ch24_dp_mdp_rl} +\input{chapters/ch25_multi_robot_coordination} +\input{chapters/ch26_vlm_hybrid_intelligence} + +\part{系统集成与赛季案例} +\input{chapters/ch27_system_integration} +\input{chapters/ch28_auto_aim_case} +\input{chapters/ch29_sentry_case} +\input{chapters/ch30_radar_case} +\input{chapters/ch31_season_2025_2026} + +\appendix +\input{appendices/app_a_notation} +\input{appendices/app_b_legacy_map} +\input{appendices/app_c_experiment_contract} + +\backmatter +\ifusebiblatex + \printbibliography[heading=bibintoc,title={参考文献}] +\else + \chapter*{参考文献} + \addcontentsline{toc}{chapter}{参考文献} + 当前精简 TeX 环境未安装 \texttt{biblatex};正式构建与 CI 将从 + \texttt{references.bib} 生成参考文献。 +\fi + +\end{document} diff --git a/book/references.bib b/book/references.bib new file mode 100644 index 0000000..05604cf --- /dev/null +++ b/book/references.bib @@ -0,0 +1,163 @@ +@book{szeliski2022computer, + author = {Szeliski, Richard}, + title = {Computer Vision: Algorithms and Applications}, + edition = {2}, + publisher = {Springer}, + year = {2022}, + doi = {10.1007/978-3-030-34372-9} +} + +@book{hartley2004multiple, + author = {Hartley, Richard and Zisserman, Andrew}, + title = {Multiple View Geometry in Computer Vision}, + edition = {2}, + publisher = {Cambridge University Press}, + year = {2004}, + doi = {10.1017/CBO9780511811685} +} + +@book{barfoot2017state, + author = {Barfoot, Timothy D.}, + title = {State Estimation for Robotics}, + publisher = {Cambridge University Press}, + year = {2017}, + doi = {10.1017/9781316671528} +} + +@article{dellaert2017factor, + author = {Dellaert, Frank and Kaess, Michael}, + title = {Factor Graphs for Robot Perception}, + journal = {Foundations and Trends in Robotics}, + volume = {6}, + number = {1--2}, + pages = {1--139}, + year = {2017}, + doi = {10.1561/2300000043} +} + +@book{lavalle2006planning, + author = {LaValle, Steven M.}, + title = {Planning Algorithms}, + publisher = {Cambridge University Press}, + year = {2006}, + url = {https://lavalle.pl/planning/} +} + +@book{rawlings2017model, + author = {Rawlings, James B. and Mayne, David Q. and Diehl, Moritz M.}, + title = {Model Predictive Control: Theory, Computation, and Design}, + edition = {2}, + publisher = {Nob Hill Publishing}, + year = {2017} +} + +@book{sutton2018reinforcement, + author = {Sutton, Richard S. and Barto, Andrew G.}, + title = {Reinforcement Learning: An Introduction}, + edition = {2}, + publisher = {MIT Press}, + year = {2018}, + url = {http://incompleteideas.net/book/the-book-2nd.html} +} + +@book{bertsekas2017dynamic, + author = {Bertsekas, Dimitri P.}, + title = {Dynamic Programming and Optimal Control}, + edition = {4}, + publisher = {Athena Scientific}, + year = {2017} +} + +@online{robomaster_rules_portal, + author = {{RoboMaster}}, + title = {RoboMaster 官方赛事与规则资料入口}, + url = {https://www.robomaster.com/zh-CN/robo/rm}, + urldate = {2026-08-24} +} + +@online{rmuc2025_rules, + author = {{RoboMaster}}, + title = {RoboMaster 2025 机甲大师超级对抗赛比赛规范发布公告}, + date = {2024-10-21}, + url = {https://www.robomaster.com/zh-CN/resource/pages/announcement/1768}, + urldate = {2026-08-24}, + note = {官方页面列出截至 2025-08-02 的规则手册 V2.1.0} +} + +@online{rmuc2025_engine, + author = {{RoboMaster}}, + title = {RoboMaster 2025 赛事引擎与规则机制更新}, + url = {https://www.robomaster.com/zh-CN/products/components/detail/6145}, + urldate = {2026-08-24} +} + +@online{rmuc2026_resource, + author = {{RoboMaster}}, + title = {RoboMaster 2026 机甲大师超级对抗赛官方资料索引}, + url = {https://bbs.robomaster.com/wiki/20204847/809871?source=7}, + urldate = {2026-08-24}, + note = {索引列出比赛规则、机器人制作规范与参赛手册等现行版本} +} + +@online{rmuc2026_rules_v220, + author = {{RoboMaster}}, + title = {RoboMaster 2026 机甲大师超级对抗赛比赛规则手册 V2.2.0}, + date = {2026-08-07}, + url = {https://bbs.robomaster.com/wiki/20204847/809871?source=7}, + urldate = {2026-08-24}, + note = {官方文件 MD5: d4808d8f91575d89e2fe4f7ba2f4fb3f} +} + +@online{rmuc2026_protocol_v200, + author = {{RoboMaster}}, + title = {RoboMaster 2026 机甲大师超级对抗赛裁判系统通信协议 V2.0.0}, + date = {2026-06-26}, + url = {https://bbs.robomaster.com/wiki/20204847/811363?source=7}, + urldate = {2026-08-24} +} + +@online{rmuc2026_field, + author = {{RoboMaster}}, + title = {RoboMaster 2026 超级对抗赛场地图纸}, + date = {2026}, + url = {https://bbs.robomaster.com/article/814728?source=4}, + urldate = {2026-08-24}, + note = {官方页面注明图纸基于比赛规则手册 V2.0.0} +} + +@online{rmuc2026_assessment, + author = {{RoboMaster}}, + title = {RoboMaster 2026 赛季进度与完整形态考核指南}, + date = {2026-03-11}, + url = {https://bbs.robomaster.com/article/1667244?source=1}, + urldate = {2026-08-24} +} + +@online{rmuc2026_rule_quiz, + author = {{RoboMaster}}, + title = {RoboMaster 2026 赛季规则测评}, + date = {2025-12-24}, + url = {https://bbs.robomaster.com/wiki/20204847/812042?source=7}, + urldate = {2026-08-24} +} + +@online{rmuc2026_referee_assessment, + author = {{RoboMaster}}, + title = {RoboMaster 2026 赛季裁判系统考核}, + url = {https://bbs.robomaster.com/wiki/20204847/812043?source=7}, + urldate = {2026-08-24} +} + +@online{rmuc2026_assessment_full, + author = {{RoboMaster}}, + title = {RoboMaster 2026 赛季完整形态考核}, + url = {https://bbs.robomaster.com/wiki/20204847/812045?source=7}, + urldate = {2026-08-24} +} + +@online{rmuc2026_assessment_details, + author = {{RoboMaster}}, + title = {RoboMaster 2026 赛季完整形态考核细则}, + url = {https://bbs.robomaster.com/wiki/20204847/812048?source=7}, + urldate = {2026-08-24} +} From 1b7166abdbd7d7a066569a1a023d4d4613009eb8 Mon Sep 17 00:00:00 2001 From: Zeng Qingcheng <60593302+NeoZng@users.noreply.github.com> Date: Mon, 24 Aug 2026 01:34:49 +0800 Subject: [PATCH 2/2] fix: improve PDF line breaking --- book/chapters/ch27_system_integration.tex | 3 +-- book/chapters/ch31_season_2025_2026.tex | 6 +++--- book/config/preamble.tex | 2 +- book/references.bib | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/book/chapters/ch27_system_integration.tex b/book/chapters/ch27_system_integration.tex index d7a39d3..5cfcabc 100644 --- a/book/chapters/ch27_system_integration.tex +++ b/book/chapters/ch27_system_integration.tex @@ -10,7 +10,7 @@ \chapter{感知--决策--规划--控制的接口、集成与验证} 前置为第~\ref{ch:closed-loop-hardware}--\ref{ch:vlm}~章。本章产物是一套与具体赛题解耦的全栈接口和验收矩阵。 \end{prerequisites} -\plannedsection{五层数据契约}{\texttt{Measurement -> WorldState -> Intent -> Trajectory -> Command};字段、坐标、时间、不确定性和 validity。} +\plannedsection{五层数据契约}{\texttt{Measurement} $\rightarrow$ \texttt{WorldState} $\rightarrow$ \texttt{Intent} $\rightarrow$ \texttt{Trajectory} $\rightarrow$ \texttt{Command};字段、坐标、时间、不确定性和 validity。} \plannedsection{生命周期与运行状态}{初始化、标定加载、健康检查、激活、降级、恢复与安全停止。} \plannedsection{端到端预算}{误差、延迟、算力、带宽、功耗与故障概率如何分配到模块。} \plannedsection{验证阶梯}{unit/property test、record replay、SIL、HIL、靶场、对抗测试。} @@ -23,4 +23,3 @@ \chapter{感知--决策--规划--控制的接口、集成与验证} \begin{chaptertransition} 后三个案例不再各自讲一套孤立算法,而是复用同一接口:自瞄强调高速局部闭环,哨兵强调移动自主,雷达站强调全局态势与通信;最后映射到 2025/2026 规则。 \end{chaptertransition} - diff --git a/book/chapters/ch31_season_2025_2026.tex b/book/chapters/ch31_season_2025_2026.tex index 052ffd8..e672582 100644 --- a/book/chapters/ch31_season_2025_2026.tex +++ b/book/chapters/ch31_season_2025_2026.tex @@ -25,7 +25,7 @@ \section{证据等级与版本锁定} \midrule \endhead RMUC 2025 比赛规则 & V2.1.0 & 2025-08-02 & 历史基线,不用早期版本代替赛季终版\cite{rmuc2025_rules} \\ -RMUC 2026 比赛规则 & V2.2.0 & 2026-08-07 & 当前规则快照;官方 MD5 为 \texttt{d4808d8f91575d89e2fe4f7ba2f4fb3f}\cite{rmuc2026_rules_v220} \\ +RMUC 2026 比赛规则 & V2.2.0 & 2026-08-07 & 当前规则快照;官方 MD5 为 \nolinkurl{d4808d8f91575d89e2fe4f7ba2f4fb3f}\cite{rmuc2026_rules_v220} \\ RMUC 2026 制作规范 & V2.0.0 & 2026-06-26 & 无线设备、结构、安全和客户端边界\cite{rmuc2026_resource} \\ RMUC 2026 通信协议 & V2.0.0 & 2026-06-26 & 链路、频率、带宽、数据格式与客户端接口\cite{rmuc2026_protocol_v200} \\ \bottomrule @@ -35,7 +35,7 @@ \section{证据等级与版本锁定} \section{从 2025 到 2026:规则事实到算法能力} -\begin{longtable}{p{0.12\textwidth}p{0.34\textwidth}p{0.25\textwidth}p{0.19\textwidth}} +\begin{longtable}{p{0.11\textwidth}p{0.34\textwidth}p{0.25\textwidth}p{0.19\textwidth}} \caption{赛季变化与课程能力映射;第二列为规则事实,第三列为工程推导}\label{tab:season-capability}\\ \toprule 子系统 & 经核验的规则变化 & 推导出的算法能力 & 对应章节 \\ @@ -59,7 +59,7 @@ \section{从 2025 到 2026:规则事实到算法能力} \section{裁判系统不是高速控制总线} -2026 协议将通信划分为常规串口、图传和雷达无线链路。常规串口帧使用 \texttt{SOF=0xA5}、CRC8 与 CRC16;第 1.1 节(pp.~4--5)给出的正常环境参考值约为 130\,ms、丢包率小于 1\%,恶劣环境约为 200\,ms、丢包率约 3\%\cite{rmuc2026_protocol_v200}。 +2026 协议将通信划分为常规串口、图传和雷达无线链路。常规串口帧以 \texttt{SOF=0xA5} 开始,并分别使用 CRC8 与 CRC16 校验。第 1.1 节(pp.~4--5)给出的正常环境参考值约为 130\,ms、丢包率小于 1\%;恶劣环境约为 200\,ms、丢包率约 3\%\cite{rmuc2026_protocol_v200}。 \begin{longtable}{p{0.29\textwidth}p{0.27\textwidth}p{0.34\textwidth}} \caption{裁判系统协议边界与系统含义}\label{tab:referee-boundary}\\ diff --git a/book/config/preamble.tex b/book/config/preamble.tex index 023a189..372605c 100644 --- a/book/config/preamble.tex +++ b/book/config/preamble.tex @@ -10,7 +10,7 @@ \usepackage{microtype} \usepackage{caption} \usepackage{subcaption} -\usepackage{url} +\usepackage{xurl} \usepackage{csquotes} \usepackage{hyperref} \usepackage[nameinlink,noabbrev]{cleveref} diff --git a/book/references.bib b/book/references.bib index 05604cf..4550d10 100644 --- a/book/references.bib +++ b/book/references.bib @@ -105,7 +105,7 @@ @online{rmuc2026_rules_v220 date = {2026-08-07}, url = {https://bbs.robomaster.com/wiki/20204847/809871?source=7}, urldate = {2026-08-24}, - note = {官方文件 MD5: d4808d8f91575d89e2fe4f7ba2f4fb3f} + note = {官方文件哈希见教材规则证据登记} } @online{rmuc2026_protocol_v200,