robot-notes — 機器人知識筆記
一份從硬體寫到調度的機器人筆記,涵蓋輪式 AMR、移動操作(車 + 機械手臂)、四足與人形四種形態。
- 在講什麼 — 一台機器人從馬達、感測器、韌體,一路到導航、多車交管與模擬驗證,每一層各自要解什麼問題、為什麼是這個設計。
- 怎麼組織 — 拆成共通核心與形態分支兩塊。判準是一句話:把形態換掉,這篇還成不成立? FOC 換相、編碼器解碼、SLAM、costmap 這些換成四足照樣成立,放核心;差速運動學、手臂 IK、雙足平衡只對特定形態成立,放分支。
- 寫給誰 — 想把機器人從頭搞懂的人,尤其是寫軟體、但對硬體不熟的那種。名詞第一次出現就當場翻譯。
- 規模 — 60+ 篇主題文件、190+ 張手繪示意圖,全部繁體中文,每篇都從「這東西要解決什麼根本問題」推起。
- 完整度不均 — 輪式 AMR(送餐機器人、物流搬運車)是最早展開、覆蓋最完整的一條線;移動操作與四足剛起頭;人形還沒寫。進度見 PLAN.md。
這份筆記在講什麼
中間四層是資料實際流過的路徑:調度層決定「哪台車去做哪件事、誰先走」,上位機想「我在哪、怎麼過去」,下位機把速度指令變成馬達轉動,硬體是真正會動的東西。層與層之間的介面很窄——調度給的是任務與路權,上位機給下位機的是一組 (v, ω),下位機回報 odometry。介面窄是刻意的:每一層都能單獨替換、單獨測試。
左右兩側則是貫穿每一層的橫切主題。模擬(50)不是另外一層,而是把整條堆疊搬進電腦裡跑;法規(60)與資安(70)則是每一層都會被要求交出證據的東西。
一台機器人拆開來看
上面那張圖是邏輯分層,這張是實體零件。同一台車的兩種看法:軟體工程師習慣看左邊那種,但真正會撞到牆、會沒電、會過熱的是這一堆東西。
機器人怎麼運作
完全沒碰過硬體的話,先建立這個直覺再往下讀。
一台送餐機器人,其實就是一台會自己走路的小推車,裡面有兩顆腦分工:
- 上位機(high-level)是一台跑 Linux 的小電腦,負責「想」——我在地圖哪裡、怎麼走到 5 號桌、前面有人要不要繞。
- 下位機(low-level)是一顆 MCU(常見 STM32),負責「動」——即時控制兩顆馬達的轉速、回報走了多遠、撞到就立刻停。
兩顆腦用一條線(UART/CAN)講話:上位機每幾十毫秒丟一個速度指令,下位機照做、再回報實際狀態。這個迴圈一直跑,車就動起來了。
四個全文反覆出現的核心詞:
| 詞 | 一句話 |
|---|---|
| MCU | 微控制器,一顆專做即時控制的小晶片(這裡是 STM32) |
| (v, ω) | 速度指令:v = 前進速度,ω(omega)= 轉彎的角速度 |
| encoder(編碼器) | 裝在馬達上、量「輪子轉了多少」的感測器 |
| odometry(里程定位) | 用輪子轉動量推算「我移動到哪了」,會慢慢累積誤差 |
懂這四個詞,就能順順讀下去了。
從哪裡開始讀
| 你的情況 | 建議路線 |
|---|---|
| 完全沒碰過硬體 | 上面「機器人怎麼運作」→ 系統架構 → 底盤 → 感測器,卡名詞就查 術語表 |
| 想先看全貌 | 系統架構 |
| 軟體背景、想補硬體 | 底盤 → 馬達/FOC → 感測器 |
| 做下位機韌體 | 下位機運動控制 → 編碼器 → 通訊匯流排 |
| 做導航 | SLAM → 定位 → 路徑規劃 |
| 要選 Nav2 的 planner / controller | Nav2 外掛演算法 — 十四個外掛的數學與選型判準 |
| 做多車調度 / 路網交管 | 路網模型與交通管制 → 室內 AMR 路網選型 → OpenRMF → VDA5050 |
| 想做 AI 模擬(進階) | 先走完上面硬體/導航,再讀 Physical AI 總覽 |
| 要準備上線合規 | 法規與認證總覽 → 資安總覽 |
| 想比較不同形態 | 形態分支總覽 — 一張表看輪式 / 移動操作 / 四足 / 人形在自由度、支撐面、控制核心、法規上差在哪 |
| 想知道力矩怎麼算(動力學) | 機器人動力學 — 運動學什麼時候不夠用、M/C/N 三項從哪長出來、模型怎麼進控制器 |
| 做叉車 / 搬運車的控制器 | 回授控制:PID、LQR 與 MPPI — 哪一層該用 PID、哪一層該用 LQR,三條控制律都從第一性原理推起,後半整章落到叉車 |
| 要在搬運車上裝手臂 | 手臂運動學 → 底盤與手臂的耦合 |
| 想搞懂四足為什麼難 | 足式的根本分岔 → 步態與致動 |
進階小節(如數位電路 §15 半導體物理、定位 §28 地標 PnP)初讀可跳過,需要時再回來。 看不懂的名詞 → 查 術語表,開頭有一節「基礎詞」放讀任何一篇之前該知道的。
文件索引
00-overview 系統全貌
- 系統架構 — 上位機/下位機分層、資料流、硬體選型、軟體架構、研發路線
10-core 共通核心 — 換了形態,這幾層還在
- 共通核心總覽 — 判準(把形態換掉這篇還成不成立)、三個層次、四個分岔點
10-core/10-hardware 硬體
底盤與傳動不在這裡——它只對輪式成立,放在形態分支。這就是「共通核心 vs 形態分支」判準的第一個實例。
- 馬達與 FOC 控制 — FOC、定子/轉子、有刷/無刷、功率橋、閘極驅動
- 編碼器 — 霍爾、增量式 A/B 相、四倍頻、STM32 硬體讀取
- 感測器 — 2D LiDAR、深度相機、IMU,以及各自的盲區
- LiDAR 完整解析 — 測距原理(dToF/相位/FMCW)、905 vs 1550nm、掃描機構、2D vs 3D;附 2025–2026 產品盤點與選型
- 通訊匯流排 — CAN 與 RS485 的分工,STM32F4 串接
- 數位電路 — 推挽 vs open-drain、上拉電阻、wired-AND
- 電源與安全 — 電壓法規、急停鏈、ramp/過流/堵轉保護
10-core/20-firmware 韌體
- 下位機運動控制 — 運動學解算 vs PID、odometry 積分、控制週期
- 上下位機通訊協議 — 從三個根本痛點推出 framing/CRC16/心跳逾時/序號
- 主板模擬:Renode — 為何要模擬主板、STM32 全系統模擬、確定性測試進 CI
- STM32F4 上的 REST API + TLS 1.2 — lwIP + mbedTLS 堆疊、RAM/CPU 瓶頸、硬體 crypto
10-core/30-navigation 導航
- SLAM 建圖 — 2D SLAM 流程、scan matching、loop closure、pose graph
- 3D LiDAR SLAM 建圖 — 點雲配準(ICP/NDT/LOAM)、LIO 融 IMU、FAST-LIO 系譜;附 ROS2 可用套件盤點
- 定位 — AMCL 粒子濾波、odometry、AprilTag 地標定位
- 座標轉換與 TF — 為何分 map/odom、齊次變換、tf2 樹、REP-103/105
- 路徑規劃與軌跡(Nav2) — 三層架構、costmap 膨脹、Hybrid-A*、DWB/MPPI/RPP、行為樹
- Nav2 外掛演算法 — 五個 planner、五個 controller、三個 smoother 與 AMCL 逐一拆開:每個的數學核心是什麼、哪幾個參數真的會進到式子裡。含 Hybrid-A* 雙啟發式為何取 max、純追蹤 κ=2y/L² 的推導、Graceful 的閉式控制律、Simple Smoother 就是那個目標函數的梯度下降、AMCL 兩種量測模型的參數落差
- 路徑平滑與軌跡生成 — 從「折線轉角曲率無限大」推起:G0–G3 連續性階梯、Bézier 完整推導(凸包與碰撞檢查)、B-spline 的局部支撐與內建 C²、clothoid、速度規劃(梯形 vs S 曲線、彎道速度上限),以及 Open-RMF 兩個 waypoint 之間為什麼是三次
20-forms 形態分支 — 換了形態,這幾層就得換
- 形態分支總覽 — 四種形態在自由度、支撐面、運動學、控制核心、狀態估計、法規上的分岔點對照
- 輪式 AMR — 為什麼輪式的問題最「乾淨」(支撐面固定 + 平面運動 + 接觸不切換)
- 底盤與傳動 — 兩輪差速、萬向輪、輪轂馬達、行星減速機
- 移動操作:搬運車 + 機械手臂 — 兩者相加才長出來的三件事
- 四足 — 讓輪式問題乾淨的三個前提被同時打掉
40-fleet 多機調度
路網與交管(先讀這兩篇)
- 路網模型與交通管制 — 三條技術路線的第一性原理比較:空間怎麼表示、衝突怎麼定義、卡死怎麼解;前導線公式推導、柵格化的理由、環形鎖偵測
- 室內 AMR 路網規劃選型 — 叉車/搬運車/送貨機器人的物理差異如何決定路網;單一廠牌 vs 多廠牌混場的兩條決策路徑與切換門檻
跨車隊協調
- OpenRMF:跨車隊調度 — 為何疊在車隊之上、時空排程協商、怎麼寫 fleet adapter
- VDA5050 協定 — 為何標準化(N×M→N+M)、order/state、released/horizon、完整 order JSON 範例
- Fleet 深入:API/圖資/座標/避塞車 — RMF 三層 API、LIF 圖資匯入、座標對齊、rmf_traffic 避塞車原語
- 目的點重複預定 — 悲觀鎖 vs 樂觀+序列化、banker’s algorithm、死結與飢餓防護
- 私有系統案例:任意起點大迴轉 — 速度方向放錯層的真實案例、RMF 拓樸 vs Nav2 運動規劃的責任邊界
- 實作小抄:adapter + 派任務 — VDA5050 fleet adapter 骨架 + REST 派任務的最小 pseudo-code
底層通訊
- ROS 2 的 DDS — DDS 是什麼、去中心化、QoS / ROS_DOMAIN_ID / RMW,為何多容器要處理多播
- RMF 多容器部署 — adapter/core 各一 docker、DDS 跨容器、最小 docker-compose
- MQTT over TLS(EMQX) — 三層(加密/認證/授權)、mTLS client 憑證、ACL、cipher 選擇
- 機器人的廣域連線 — 廠區 private 5G、公網 5G+VPN、衛星 Direct-to-Device(3GPP NTN)、6G NTN
50-physical-ai Physical AI(進階)
術語密度較高,建議先讀完 00/10/30。
- Physical AI 總覽 — Physical AI、World Model、NVIDIA 堆疊、sim-to-real
- 感測器資料與 3D Gaussian 重建 — 真實感測資料如何重建成模擬場景
- 用 Isaac Sim + Isaac Lab 模擬 AMR — URDF→USD、ROS2 橋接、RL 訓練、合成資料
- 用 Gazebo + ROS2 模擬 AMR — gz sim 版本對應、diff_drive、Nav2 閉迴路;含 Classic 世界遷移的機械清單與踩到的真 bug
- 在 Gazebo 倉庫用 slam_toolbox 建圖 — 可重跑教學:加 gpu_lidar 與里程計、Docker、ros_gz_bridge、tf 樹三段、繞倉庫建圖
- gpu_lidar 怎麼運作(讀原始碼) — 為何用 GPU render 深度而非逐 ray 求交、cubemap 兩趟、為何「不算真 ray tracing」
- SDF 3D 模型檔:從零開始 — mesh / visual / collision / inertial、SDF 資料夾結構、差速搬運車範例
- 建 AMR 模擬世界:模型與場景哪裡來 — 資產來源盤點(2026-08-05 實查):Gazebo Fuel 的實際數量與缺口、AWS RoboMaker 服務終止後那批 world 的現況、Isaac SimReady 與雲端 asset root、rmf_demos 場景、研究用室內資料集、通用素材;以及「拿到資產不等於能用」要補多少工
- Sim-to-real — reality gap、domain randomization、上車檢查清單
- 用 Claude 完成 Physical AI 模擬 — 方法論:Claude 當膠水層與迭代引擎
- 專案探討:Gazebo 叉車搬運(RMF+VDA5050) — capstone:URDF 設計、物理參數、第一性原理 worklist(M0–M7)
55-vlm-llm VLM & LLM
- LLM 與 VLM 給機器人 — token 化、自注意力在解什麼、VLM 怎麼把影像變 token、VLA 與開放詞彙感知對機器人的意義
- 在 NVIDIA GB10(DGX Spark)上架本地 LLM — 為何 LLM 推論是記憶體頻寬 bound、統一記憶體的取捨、量化、GB10 規格查證與軟體堆疊
60-compliance 法規與認證
- 法規與認證總覽 — 合規地圖:一台機器人要過哪些關
- 電池認證法規 — UL 2271 vs UL 2580、為何選 LFP + 金屬外殼、配套標準
- 半導體 fab AMR 規範 — SEMI S2/S8/E84、AMHS、潔淨室/ESD、ISO 3691-4 對照
- PwC、SEMI E187 與 ISO 3691 認證角色 — 顧問/評估 vs 官方檢測發證的分界
70-security 資安
- 機器人通訊安全(總覽) — 五個通訊面的威脅與手段、加密+認證+授權三件套、誠實現況
- SROS2 / DDS-Security — ROS2 節點間預設明文這個洞怎麼補:認證、加密、授權一次到位
- OTA 韌體簽章 — 守「裝什麼」:上位機軟體與 MCU 韌體兩種 OTA,簽章驗證的核心
- Secure boot — 守「跑什麼」:即使 Flash 被用別的方式改過,開機時也擋下來
90-foundations 數學與力學基礎
- 高斯分布:第一性原理 — 從最大熵/CLT 推出高斯,用四條性質統一理解 Gaussian blur、Kalman/EKF、GP、GMM、3DGS
- 機器人動力學 — 從 F=ma 推到 M(θ)θ̈+C(θ,θ̇)θ̇+N(θ)=τ:Newton vs Lagrange、慣性張量、三條結構性質、Newton-Euler 遞迴、非完整約束,以及 computed torque 與 PD+重力補償為什麼穩
- 回授控制:PID、LQR 與 MPPI — 內模原理為什麼逼出 I 項、代價為什麼是 xᵀQx+uᵀRu、u=−Kx 與 Riccati 方程怎麼推出來、LQR 保證什麼又在哪裡失效;取樣式 MPC(MPPI)如何用 Gibbs 變分原理繞過「代價必須是二次型」,以及 Nav2 的實際參數;後半落到叉車:舵輪運動學、四層迴路分工、後輪轉向的右半平面零點、載重的增益排程
參考論文
- Nav2 導航全棧 survey 導讀 — Nav2 維護者親寫的 ROS2 導航全棧 survey,附章節對照;CC BY 4.0 全文 PDF 收錄
這個 repo 怎麼寫的
- 寫作慣例與 lessons learned — 每篇的工作流(研究查證 → 第一性原理寫 → 配 SVG → 去 AI 味 → 專家/學生審查)與一路踩過的雷
- GitHub Actions × gz sim playbook — 沒有 GPU 也能驗證/視覺化 gz sim 模型
- PLAN.md — 分輪整理計畫與進度
- CONTEXT.md — 術語表(ubiquitous language)
- 舊版 28 章對照表 — 早期單檔整理的 §N 現在各自搬到哪個檔
歷史原始整理文件保留在 docs/_legacy/(內容已拆分到上述主題檔)。