robot-notes /關於/術語表
CONTEXT — 術語表(Ubiquitous Language)
本筆記共用的詞彙與一句話定義,寫文件、命名、討論時優先用這裡的詞。格式:術語 — 定義。
基礎詞(讀任何一篇之前)
這幾個詞在全書反覆出現,而且多半不會在每一篇重新解釋。
- MCU(微控制器)— 一顆把 CPU、記憶體、周邊 I/O 做在同一片晶片上的小電腦,直接接馬達驅動器與感測器。本書多半指 STM32。相對於「上位機」(跑 Linux 的工控電腦或 SBC)。
- 上位機 / 下位機 — 上位機想(地圖、路徑、任務排程,跑 ROS 2),下位機動(即時控制馬達、讀感測器,跑 MCU 韌體)。兩者的分工是全書最常回頭引用的一條線。
- GPIO — MCU 上可以用程式設成輸入或輸出的通用接腳。
- UART / SPI / I²C — MCU 與周邊之間最常見的三種序列通訊介面。UART 兩線非同步(常配 RS485 拉長距離)、SPI 快但線多、I²C 兩線可掛多裝置。
- PWM(脈寬調變)— 用「開關開多久」的時間比例調出等效電壓。開關只能全開全關,連續可變的電壓從時間軸上來。占空比 = 一個週期裡「開」佔的比例。
- PID — 最常見的回授控制器:比例(現在差多少)+ 積分(累積差了多久)+ 微分(差距變化多快)。
- RTOS — 即時作業系統。保證某些工作在確定的時間內被執行,韌體用它切多工。
- MOSFET — 電壓控制的大電流開關,是功率電路的基本元件。只工作在全開/全關兩態。
- topic / node(ROS 2)— node 是一個獨立執行的程式單位,topic 是它們之間的具名廣播頻道(pub/sub)。
- URDF / SDF — 描述機器人長什麼樣、關節怎麼接的 XML 格式。URDF 偏 ROS,SDF 偏 Gazebo。
- mTLS — 雙向 TLS。一般 TLS 只有伺服器出示憑證,mTLS 兩邊都要,所以伺服器也能確認來的是誰。
- HSM — 硬體安全模組,把私鑰鎖在專用硬體裡、只給簽章結果不給鑰匙。
系統分層
- 上位機(High-level)— 跑 ROS2/Linux,負責 SLAM、定位、路徑規劃、避障的高運算層。
- 下位機(Low-level)— 跑 STM32 韌體,負責馬達閉迴路、odometry、急停等硬即時功能。
- AMR — Autonomous Mobile Robot,自主移動機器人;送餐機器人是室內 AMR。
機構與動力
- 差速驅動(Differential Drive)— 兩個獨立驅動輪 + 萬向輪,靠左右輪速差轉向。
- 輪轂馬達(Hub Motor)— 馬達整合在輪子裡的形式。
- 支撐三角形(stability triangle)— 三輪平衡重式叉車只有三個接地點,合成重心必須留在它們圍成的三角形內。是三角形不是矩形:後方只有一個接地點,往後兩角的方向餘裕比往正側面小得多。
- 傾覆條件 — 轉彎時側向慣性力對傾覆軸的力矩
m·a·h超過重力的抵抗力矩m·g·d就翻(h= 重心高度,d= 重心到傾覆軸的水平距離)。質量m兩邊約掉——決定翻不翻的是幾何不是載重。代入a = v²/R得轉彎速度上限v_max = √(g·d·R/h):舉高讓h變兩倍,容許速度降到1/√2。這條式子劃的是控制器不該進入的區域,不是控制器該去穩住的區域。 - BLDC — 無刷直流馬達。
- FOC — 磁場導向控制,現代無刷馬達的主流控制法。
- 行星減速機 — 用行星齒輪組放大扭矩、降低轉速的減速機構。
感測與定位
- Encoder(編碼器)— 量輪子轉動量的感測器,odometry 與速度環的回授來源。
- Odometry(里程定位)— 用輪子轉動量推算位移,相對定位、誤差只增不減。
- IMU — 慣性量測單元,量姿態/角速度,與 odometry 融合。
- 2D LiDAR — 平面雷射掃描,SLAM 建圖與定位主力。
- SLAM — 同時定位與建圖。
- AMCL — 已知地圖下用 LiDAR 即時匹配的粒子濾波定位。
- 地標定位 — 用相機看已知地標(如 AprilTag)反推自己的絕對位姿。
- AprilTag — 機器人視覺常用的基準標記(fiducial marker),非 QR code。
導航(Nav2 / TF)
- Nav2 — ROS2 的導航軟體堆疊(規劃 + 控制 + 行為樹)。
- costmap(代價地圖)— 把空間切格、每格帶代價;分 static/obstacle/inflation 層。
- inflation(膨脹層)— 在障礙周圍鋪漸層代價,讓有體積的車保持距離。
- Hybrid-A* — 考慮車輛運動學(最小轉彎半徑、可否倒車)的全域規劃器;以 Dubins/Reeds-Shepp 為展開的運動模型與啟發式。Nav2 實作為
nav2_smac_planner(Smac Hybrid-A*)。 - Dubins 曲線 — 只能前進、最小轉彎半徑下兩 pose 間的最短路徑,6 種「弧-直-弧」候選。Avoid: 講成含倒車。
- Reeds-Shepp 曲線 — 允許倒車的最短 pose-to-pose 路徑,46 種候選、含換向點(cusp);目標在後方時比 Dubins 短。
- MPPI / DWB / RPP — Nav2 的三種區域控制器(取樣最佳化 / 動態視窗 / 純追蹤)。MPPI 的數學見「回授控制」節。
- tf2 — ROS2 維護座標系關係的樹狀變換系統。
- base_link — 剛性固定在車身上、跟著車一起走的參考座標系;差速車通常設在兩驅動輪的軸心中點。路徑點與位姿預設都是描述這個點,不是車頭。
- 行為樹(Behavior Tree)— Nav2 用來編排規劃→跟隨→恢復的可組合結構。
路徑平滑與軌跡
- 曲率(Curvature)
κ— 單位弧長內方向轉了多少,κ = dθ/ds。折線轉角處κ → ∞,所以走不了。 - 路徑(Path) vs 軌跡(Trajectory)— 路徑
p(s)只有形狀(參數是弧長);軌跡q(t)多了時間。兩者由時間參數化s(t)連起來。 - G0 / G1 / G2 / G3 — 幾何連續性階梯:位置 / 切線方向 / 曲率 / 曲率變化率。對應到「車頭方向不跳 / 轉向角不跳 / 轉向角速度不跳」。
- Cⁿ vs Gⁿ — 參數連續(導數相等)vs 幾何連續(只要求方向一致)。
Cⁿ ⇒ Gⁿ,工程上在意的是 G。 - Bézier 曲線 — 由
n+1個控制點與 Bernstein 基底定義的多項式曲線;端點切線由相鄰控制點差分直接給出。 - Bernstein 基底 —
Bᵢⁿ(t) = C(n,i) tⁱ (1−t)ⁿ⁻ⁱ;非負且和為 1,故曲線是控制點的凸組合。 - 凸包性質 — Bézier/B-spline 曲線必落在控制點凸包內;碰撞檢查便宜的根源(凸包不撞 ⇒ 曲線不撞)。
- de Casteljau — 用反覆線性內插求值,順帶把曲線切成兩段;細分後凸包更貼近曲線,用於遞迴碰撞檢查。
- B-spline — 由節點向量(knot vector)與 Cox–de Boor 遞推定義;
p次在單重節點自動C^{p−1}連續。 - 局部支撐(Local support)—
Nᵢ,ₚ(u)只在有限區間非零 → 移動一個控制點只影響p+1個區段。Bézier 沒有這個性質。 - NURBS — 有理 B-spline(控制點帶權重);能精確表示圓錐曲線,多項式做不到。
- Hermite 樣條 — 由兩端「位置 + 切向量」決定的多項式;三次 Hermite 與三次 Bézier 是同一條曲線,
P₁ = p₀ + m₀/3。 - Clothoid(迴旋曲線 / Euler spiral)— 曲率沿弧長線性變化
κ(s) = κ₀ + c·s,等速行駛時轉向角速度為常數;位置需 Fresnel 積分,無初等封閉解。 - Jerk(加加速度)— 加速度的時間導數。梯形速度曲線的 jerk 無限大;S 曲線(jerk-limited)把加速度也做成連續。
- 側向加速度上限 —
a_lat = v²κ ≤ a_lat,max⟹v(s) ≤ √(a_lat,max / κ(s)),「彎道要減速」的第一性原理。
通訊與電路
- CAN — 內建協議(訊框/CRC/仲裁)的差分匯流排,馬達/BMS 多節點即時控制主場。
- RS485 — 只定義電氣層的差分匯流排,協議自定(常用 Modbus RTU)。
- Open-drain(開漏)— 只能拉低、靠上拉電阻補高的數位輸出形式。
- STO — Safe Torque Off,驅動器內建的安全轉矩關斷輸入。
命名約定:散文一律寫 Open-RMF(官方品牌);套件名 / repo / apt 套件保留
open-rmf原文。
路網與交管
- 拓樸路網(Topological graph)— 人為在地圖上畫的節點 + 有向邊,車只准沿邊走;多車場域的主流空間表示。
- 自由空間(Free space)— 以佔據柵格描述可走區域,車可走任何未被佔據的格子(Nav2 costmap 的模型)。
- 道路級路網 — 疊在節點路網之上的粗圖(交叉口 junction + 道路多邊形 road),專供快速估距用。
- 前導線(Leadline)— 車沿路徑往前預約的距離 = 制動距離 + 延遲位移 + 車身長度 + 餘裕;純空間交管的核心參數。
- 滾動視窗佔用 — 只預約前方一小段、隨車前進往前推的空間預約法;不預測時間,故對 ETA 誤差不敏感。
- 時空排程(Spacetime scheduling)— 以「帶時間戳的軌跡」定義佔用,衝突 = 兩條軌跡在時空中相交(rmf_traffic 的模型)。
- Token(佔用權)— 一塊空間的通行權憑證。動態 token 由兩車路徑交疊自動產生;固定 token 是人工劃定的會車區,帶入場名額。
- 掃掠面積(Swept area)— 車體輪廓沿整條路徑掃過的區域;交管的碰撞判斷對象。
- 車體 mask — 柵格化的車體輪廓圖;空車與載貨(叉車)需分別建立。
- 對頂死鎖(Pairwise deadlock)— 兩車面對面,雙方都必須進入對方要用的空間才能通過。
- 環形鎖(Chain lock)— A 等 B、B 等 C、C 等 A 的等待環;在等待圖(wait-for graph) 上做 DFS 找環偵測。
- 迴避點(Avoid spot)— 供讓路車暫停的預先佈設點位;容量不足時死鎖偵測會無出口。
- MAPF — Multi-Agent Path Finding,一次為全體車輛規劃互不衝突路徑的集中式方法。
調度
- Open-RMF — 開源多機隊調度框架(Open Robotics Middleware Framework)。
- VDA5050 — AGV/AMR 與上位調度系統之間的標準通訊協定。
- fleet adapter — 把某家車隊接進 RMF 的轉接層(翻譯 RMF 指令 ↔ 車隊 API)。
- released / horizon — VDA5050 order 中「已授權可走」vs「已規劃未授權」的分段。
- blockingType — VDA5050 action 是否擋行駛/並行(NONE/SOFT/HARD)。
- factsheet — VDA5050 車輛能力宣告(尺寸/載重/支援動作)。
Physical AI
- Physical AI — 讓自主系統在真實物理世界感知、推理、行動的 AI。
- World Foundation Model (WFM) — 能模擬物理世界、生成訓練資料的大型基礎模型。
- Digital Twin(數位分身)— 真實場景的虛擬複本,用來產生訓練資料。
- Sim-to-real — 把模擬中訓練的模型遷移到真實機器。
- Reality gap(現實落差)— 模擬與真實世界的差異總和(物理參數、感測噪聲、延遲、摩擦、外觀);落差越大,模擬訓練的策略越容易在實車失靈。
- Policy(策略)— 機器人的「腦」:吃感測器輸入、吐動作指令的函式,常用神經網路。
- Domain Randomization(領域隨機化)— 訓練時隨機抖動模擬參數,逼策略對變化不敏感、提升真實世界泛化。
- System Identification(系統辨識)— 在真實機上量出物理參數回填模擬,讓模擬一開始就更接近真實。
- Domain Adaptation(領域適應)— 主動對齊模擬與真實的特徵分佈(常用影像翻譯,如 CycleGAN/RetinaGAN)。
- 3D Gaussian Splatting(3DGS,高斯潑濺)— 用帶色 3D 高斯點重建真實場景做照片級渲染,real-to-sim 縮外觀落差主流。
- Zero-shot transfer(零樣本遷移)— 模擬訓練完直接上車、不用真實資料微調。
- SRCC(Sim-to-Real Correlation Coefficient)— 模擬與真實效能指標的相關係數,衡量「模擬能否準確預測真實表現」。
- Isaac Sim / Isaac Lab — NVIDIA 的機器人模擬框架 / 學習框架。
- Cosmos — NVIDIA 的 WFM 實作(WFM 是概念、Cosmos 是產品)。
- NuRec — NVIDIA Omniverse 的神經重建(從真實感測資料重建 3D 場景)。
- DiffDrive / TricycleSteering — gz 的差速 / 三輪(單驅動轉向輪)驅動 plugin。
- DetachableJoint — gz 動態建立/分離兩 model 間固定關節(叉車取放用)。
- Gazebo Fuel — Gazebo 生態的公開模型與世界資料庫;
gz sim可用 Fuel URI 直接<include>,不必先下載。 - SimReady 資產 — Omniverse 的資產品質標準:內嵌物理屬性與語意標註,不只是好看的 mesh。價值在於 collision / inertial / 語意都已補好。
- Asset root — Isaac 官方資產的雲端根路徑;可只抓單一 USD 檔核對 prim 路徑,不必下載整包 asset pack。
- prim — OpenUSD 場景樹上的節點。寫物理參數 override 前要先核對 prim 路徑,路徑錯了 override 會靜默失效而模擬照跑。
- Gymnasium — RL 環境的介面契約(reset/step/reward);給的是任務不是幾何,場景仍來自底下的模擬器。Isaac Lab 的 env 相容此 API。
- OmniGraph Action Graph — Isaac Sim 的視覺化節點式運算圖,ROS 2 的 publish/subscribe 與驅動鏈都在這裡串。
/cmd_vel的路徑是 Subscribe Twist → Differential Controller → Articulation Controller。 - Articulation(關節體)— 由多個剛體與關節組成、被當成一整組解算的機構;差速底盤的兩個輪子即以此表示。
- render 分水嶺 — 免費 CI runner 沒有 GPU,「需不需要 render」把驗證分成可靠與不可靠兩區。視覺化 ≠ render:把位姿軌跡畫成俯視路徑圖,能把視覺產出救回可靠區。
動力學
- 動力學(dynamics)— 力矩與運動之間的雙向關係。逆動力學:給運動求力矩(控制前饋、可行性檢查);正動力學:給力矩求加速度(模擬器每一步在算的)。兩個方向用同一條方程。
- 廣義座標(generalized coordinates)— 能完全描述機構姿勢的最小一組座標;開鏈手臂就是 n 個關節角。不是簡寫,是完整約束把 6n 維砍剩的全部。
- Lagrangian —
L = T − V(動能減位能)。對它套固定微分程序就得到運動方程;理想約束力不做虛功,所以關節內力從頭到尾不出現。 - 慣性張量(inertia tensor)ℐ — 3×3 對稱矩陣,回答「這塊質量分布繞各方向轉多費力」;元素是離軸距離平方的加權積分,所以同一物體不同軸答案不同。
- 慣量矩陣(inertia matrix)M(θ) — n×n、對稱正定、隨構型變;
½θ̇ᵀM(θ)θ̇是全機動能。M = ΣJᵢᵀMᵢJᵢ,由每根連桿的 Jacobian 組出來。 - C 項(離心 + Coriolis(科氏))— 「慣量隨構型變」在方程裡的倒影:M 是常數矩陣則 C ≡ 0。速度平方項是離心、交叉項是 Coriolis;與慣量變化率組合後能量淨貢獻為零(Ṁ−2C 反對稱)——注意單獨看 θ̇ᵀCθ̇ 一般不為零,別寫成「C 不做功」。
- N(θ)(重力項)—
∂V/∂θ,只跟幾何與質量有關、不含速度,是三項裡最容易補償準的。 - 完整 / 非完整約束(holonomic / nonholonomic)— 速度約束
A(q)q̇ = 0積得回位置方程h(q)=0是完整(構型空間真的變小);積不回是非完整(限制瞬時速度、不限制可達位置)。輪子不側滑是非完整的代表。 - computed torque(計算力矩)— 用模型把 C、N 抵銷、用 M 把期望加速度換成力矩,閉迴路化成線性誤差方程
ë + Kvė + Kpe = 0。代價:模型要即時算、要算得準。 - 重力補償 —
τ = Kvė + Kpe + N(θ):PD 之外只前饋重力。定點調節全域穩定,靠的是速度相依項能量淨貢獻為零(Ṁ−2C 反對稱)這條性質。 - RNEA(recursive Newton-Euler algorithm)— O(n) 逆動力學:向外一趟累積速度加速度、向內一趟回收力與力矩。與 Lagrange 閉式是同一組物理的兩種計算安排。
- 慣性參數線性性 — 以(質量、一階矩 m·c、對連桿原點的慣性張量)這組參數化,方程可寫成
Y(θ,θ̇,θ̈)π,對 π 線性;對「質心位置」本身不是線性(以 m·c 乘積進方程)。參數辨識因此是線性回歸(實際只能解出 base parameters 組合),adaptive control(自適應控制)靠它在線修參數。
回授控制(PID / LQR)
- 開環 / 閉環 — 開環算好指令送出去不看結果,要求「輸入到輸出的映射完全已知且不變」;閉環量測誤差持續修正。回授的價值不是更準,是不需要準;代價是只能修已發生的偏差,必然落後。
- 前饋(feedforward)— 對「已知會發生的事」預先補償(路徑曲率要求的轉向角、重力、液壓死區)。與回授分工:前饋處理已知,回授處理未知,不互相取代。
- 內模原理(Internal Model Principle)— 要讓某類訊號的穩態誤差歸零,迴路內部必須包含產生那類訊號的模型。常值擾動的模型是一個積分器 → 這是 PID 的 I 項存在的根本理由,也說明追斜坡輸入需要兩個積分器。
- windup / anti-windup — 輸出飽和期間積分項仍在累加,退飽和後長時間過衝。三種解法:條件積分(飽和就停止累加)、積分限幅、反算(back-calculation)
İ = K_i e + (u_sat − u)/T_t——不飽和時第二項自動消失,同一段程式碼兼顧兩種情況。 - 追蹤時間常數
T_t— 反算式 anti-windup 裡決定「退飽和要花多久」的參數。取小則積分被拉回得快但放大飽和量測的雜訊,取大則退飽和慢、windup 症狀還在;常見起手值與積分時間K_p/K_i同數量級。 - 微分踢(derivative kick)— 目標值階躍時
de/dt出現脈衝。解法是只對量測值微分,不對誤差微分。另配濾波微分K_d s/(1+s/N)壓住高頻噪聲放大。 - 狀態(state)x — 知道此刻的 x 與此後的輸入,就足以決定未來全部行為的最小一組變數;之前發生過什麼不必知道。
- 狀態空間
ẋ = Ax + Bu— A 是沒有輸入時狀態怎麼自己演化(特徵值 = 系統極點),B 是控制輸入能推的方向。非線性系統的 A、B 由 Jacobian 在工作點取一階 Taylor 展開得到,只在工作點附近有效。 - 拉氏轉換(Laplace transform)— 把微分方程換成代數方程的工具。當黑箱用時只要記兩條:微分一次 = 乘上
s,積分一次 = 除以s。於是θ̇ = −(v/L)δ轉換後成了sΘ = −(v/L)Δ,解微分方程變成移項。 - 轉移函數 — 輸出與輸入在拉氏域的比值,把「這個系統對輸入怎麼反應」壓成一個分式。分母的根叫極點,決定反應衰不衰減;分子的根叫零點,決定反應的形狀。
- Kalman 不等式(回歸差條件)— 訊號繞迴路一圈的「回歸差」絕對值在所有頻率上都不小於 1。Kalman 1964 解反最佳控制問題(給定控制律,問哪些代價函數會讓它最佳)時得到的結果,也是 LQR 裕度保證的來源。
- 頻寬(bandwidth)— 控制迴路「跟得上多快的變化」的上限。越高對擾動反應越快,但不是想調多高就多高:有 RHP 零點時存在硬性物理上限(見「非最小相位」)。
- LQR(Linear Quadratic Regulator,線性二次調節器)— 線性系統配二次代價
J = ∫(xᵀQx + uᵀRu)dt的最佳控制器。解出來的控制律u = −Kx不是假設的結構,是推導的結果。 - Q / R — Q 半正定,對角元素是各狀態誤差的權重;R 必須嚴格正定,否則某方向控制免費、增益發散。兩者的絕對值無意義,只有
Q/R比值決定 K。起手用 Bryson 法則:q_ii = 1/(x_i,max)²、r_jj = 1/(u_j,max)²,把量綱不同的量正規化成「用掉多少額度」。 - value function V(x) — 從當前狀態出發、剩下要付的最小總代價。LQR 裡
V(x) = xᵀPx,而且它同時就是證明閉迴路穩定的 Lyapunov 函數:V̇ = −(xᵀQx + uᵀRu),下降速率剛好等於當下正在付的代價。 - Riccati 方程 — 解出 P 的代數方程。連續(CARE):
AᵀP + PA − PBR⁻¹BᵀP + Q = 0,K = R⁻¹BᵀP;離散(DARE):K = (R + B_dᵀPB_d)⁻¹B_dᵀPA_d。實機跑離散版。LQR 貴在離線解 P,線上只是幾次乘加。 - 可控 / 可穩 / 可檢測(controllable / stabilizable / detectable)— 可控性矩陣
[B AB … A^{n-1}B]滿秩即可控(只算到 n−1 次方是因為 Cayley–Hamilton)。LQR 實際只需要可穩(不可控的方向本身穩定)加上(A, Q^{1/2})可檢測(代價看得到所有不穩定方向)。 - LQI / servo LQR — 標準 LQR 沒有積分器,持續的常值擾動(坡度)會留下穩態偏差。把積分器擴增進狀態向量後解 LQR,積分增益就由 Riccati 一起算出來,而不是調出來。
- LQR 的裕度保證 — 單輸入時增益裕度 (1/2, ∞)、相位裕度 ≥ 60°,出自 Kalman 1964 的回歸差條件(見「Kalman 不等式」)。失效條件很多:只對線性模型成立、假設全狀態可量測、輸入不飽和;一旦串上估測器變成 LQG,裕度保證完全消失(Doyle 1978)。不可當作實車的安全論證。
- 非最小相位 / 右半平面零點 — 階躍輸入後輸出先往錯的方向走再折回。後輪轉向車以後軸為參考點時
Y_R/Δ = v(Ls−v)/(Ls²),零點在s = v/L,前進時落在右半平面。代價是閉迴路頻寬被限制在v/L的量級——任何控制器都繞不過去。倒車時v < 0,零點移到左半平面,限制消失。 - 增益排程(gain scheduling)— 以排程變數(叉車上是速度與載重)建網格,每個工作點離線解一次 Riccati 存成查表,線上查表加內插。兩個條件:排程變數要變得比系統動態慢、相鄰格點的 K 要平滑(全表共用同一組 Q、R)。
- 二次規劃(QP,quadratic programming)— 代價是二次的、限制式是線性的最佳化問題,有成熟的求解器。MPC 每個控制週期線上解的就是它;求解時間不是定值,即時系統要為最壞情況預留或設迭代上限。
- 終端不變集 Ω — 有約束的 MPC 要保證穩定性,除了用 LQR 的
P當終端代價,還需要一個終端約束x_N ∈ Ω:在那個集合裡無約束的 LQR 律本身就可行且穩定。只講終端代價是漏了一半。 - MPC(Model Predictive Control,模型預測控制)— 每週期對未來 N 步解一個帶約束的最佳化問題,只執行第一步再滾動重解。LQR 是它的特例(拿掉約束、N → ∞);而 MPC 的終端代價裡那個 P 通常直接用 LQR 的 Riccati 解——LQR 沒被取代,它變成 MPC 的零件。
- 舵輪(steered drive wheel)/ tricycle 運動學 — 驅動與轉向同一顆輪。控制輸入是
(v, δ)而非差速車的(v, ω):ω = v·tanδ/L,ω 與 v 相乘綁死,v = 0 時方向盤打死車也不轉(差速車可以原地旋轉)。曲率κ = tanδ/L與速度無關。 - 橫向誤差 / 航向誤差(e_y / e_θ)— 路徑追蹤的兩個誤差。關鍵在
B = [0, v/L]ᵀ的那個零:方向盤不會立刻改變橫向位置,得先改航向再積成位移。兩者強耦合,所以不能拆成兩個獨立 PID——它們會在同一個致動器上互相抵銷。
Nav2 外掛演算法
- navigation function / 波前傳播 — NavFn 的做法:從目標格用 Dijkstra 往外灌一個位能場,再從起點沿梯度下降滑出路徑(不是回溯 parent)。位能用二次核而非距離算,是為了讓場更平滑、滑出來的路徑不鋸齒。
- any-angle / line-of-sight — Theta* 的核心:展開節點時檢查「從 grandparent 能不能直接看到它」,可以就跳過中間節點。於是路徑不再被綁在格線的 45° 倍數上。Nav2 用的是 Lazy Theta*-P 變體(每造訪才檢查一次,且對象是 grandparent)。
- 運動基元 / control set — 把「車做得到的一小段動作」離散成有限集合,搜尋就在這些動作上進行。Hybrid-A* 線上用最小轉彎半徑生基元;State Lattice 離線算好一整套存檔,所以
minimum_turning_radius不是它的執行期參數。 - 啟發式的可採納性(admissible)— A* 的啟發式只要不高估真實代價就可採納。把原問題放寬掉一個約束,其最優解必為下界——Hybrid-A* 的兩個啟發式分別放寬運動學(
h_obstacle)與障礙物(h_distance),兩個下界取 max 仍是下界但更緊,展開的節點更少。 - 動態視窗(dynamic window)— DWB 的取樣範圍:從當前速度出發、受加減速能力限制,一個週期內能達到的速度集合。在其中用網格取樣,每個樣本假設維持定值往前模擬
sim_time——所以 DWB 的候選軌跡都是圓弧,表達不了「先左再右」。 - 純追蹤(Pure Pursuit)/ lookahead — 在路徑上取一個
L遠的點,開一段圓弧碰到它:κ = 2y/L²(y是該點在車體座標的橫向座標)。推導是「過原點且與車體 x 軸相切的圓,圓心必在 y 軸上」。完全不需要模型、不知道障礙物,所以極快也只能跟線。 - 調節(regulation,RPP)— 疊在純追蹤上的四層降速:自適應 lookahead、曲率調節、障礙鄰近調節、終點漸近調節。四層都只改
v不改κ,路徑形狀完全由那條幾何式決定。其中障礙鄰近調節是從 costmap 值反推距離(膨脹層代價函數的反函數),因此與膨脹層參數綁死。 - 離散拉普拉斯算子(smoother)—
y_{i+1} + y_{i−1} − 2y_i,把每個點往相鄰兩點的中點拉。Simple Smoother 的更新式就是「錨定項 + 這一項」,它是一階長度能量Σ‖y_{i+1}−y_i‖²的精確梯度下降。 - 長度能量 vs 曲率能量(smoother)— 兩者容易混,而且對應不同的 smoother。一階長度能量的梯度是三點拉普拉斯
(1,−2,1),對應 Simple Smoother;二階曲率能量Σ‖y_{i−1}−2y_i+y_{i+1}‖²的梯度是五點重調和算子(1,−4,6,−4,1),對應 Constrained Smoother。效果上都會磨掉鋸齒,但它們最小化的是不同的東西。Simple Smoother 不看 costmap、也會破壞運動學可行性,只能配 2D 規劃器。 - Savitzky-Golay 濾波 — 在滑動視窗內做最小平方多項式擬合,取中心值。
window=7, poly=3的係數是(−2,3,6,7,6,3,−2)/21。關鍵性質:三次以下的形狀完全保留,只濾掉更高頻的成分——所以路徑真實的彎不會像移動平均那樣被削平(移動平均對y=−x²/8會把頂點壓低 0.5)。 - KLD-sampling — AMCL 的「Adaptive」:用粒子在 kd-tree 裡佔的非空格子數
k決定這輪要幾顆粒子。粒子擠成一團就少用、散得開就多用。式子裡那個立方括號是卡方分位數的 Wilson–Hilferty 近似。 - 綁架恢復(augmented MCL)— 維護平均權重的快慢兩個滑動平均,以
max(0, 1 − w_fast/w_slow)的機率注入隨機粒子。短期權重突然掉到遠低於長期,代表「看到的跟我以為的位置對不上」。正常時兩者相等,機率為 0。 - likelihood field vs beam model — AMCL 的兩種雷射模型,讀的參數不一樣:beam 是教科書的四項混合(
z_hit/z_short/z_max/z_rand),likelihood field 只有z_hit與z_rand兩項。照教科書調z_short卻用著 likelihood field,那個參數不會被讀到——這是讀原始碼才看得見的落差。
取樣式 MPC(MPPI)
- MPPI(Model Predictive Path Integral)— 取樣式的 MPC:每週期以上一輪的控制序列為均值撒 K 條高斯噪聲、各自前向模擬算代價、用 softmax 加權平均成新序列。全程沒有對代價求導,所以代價可以是查表、布林、if-else——這是它能吃 costmap 的全部原因。Nav2 的預設路線控制器。
- KL 散度
D_KL(q‖p) = E_q[log(q/p)]— 衡量兩個分布差多少。恆非負,只有 q = p 時為零;MPPI 那條推導只用到這一條性質。 - Gibbs 變分原理 — 要最小化「期望代價 + λ·KL(q‖p)」時,最優分布必然是
q* ∝ exp(−S/λ)·p。推導只用到 KL 散度非負:把泛函湊成λ·KL(q‖q*) − λ log Z即可。指數權重不是設計選擇,是推導結果,地位等同 LQR 的u = −Kx。前提:q對p絕對連續、Z有限。 - 有效樣本數塌陷 — 「最優分布存在」不等於「有限樣本估得準」。代價的動態範圍太大時
e^{−S/λ}會集中在極少數樣本上,名目撒一千條、實際有效的剩個位數,輸出就變成那幾條的抖動。這是 MPPI「不需要可微」這個優點的真正代價所在。 - 自由能(free energy)— 上述最小值
−λ log E_p[e^{−S/λ}]。不同文獻的定義可能差一個−λ因子(熱力學 vs 資訊論慣例),不影響q*的形式。 - 重要性取樣(importance sampling)—
q*因為含一個算不出來的歸一化常數Z而無法直接取樣;改從高斯提議分布取樣再用密度比加權,Z在分子分母對消。這正是 softmax 權重w_k = e^{−S_k/λ} / Σ_j e^{−S_j/λ}的來源。 - 溫度 λ(Nav2 參數名
temperature,預設 0.3)— 決定「多相信最好的那一條取樣」。λ→0 退化成 argmin(只信一條、會抖),λ→∞ 退化成均勻平均(等於沒在控制)。 - critic(Nav2)— 可插拔的代價函數,對一批軌跡評分再加總。
nav2_mppi_controller有 11 個(ObstaclesCritic、CostCritic、PathAlignCritic、GoalCritic、PreferForwardCritic、TwirlingCritic…)。因為不需要可微,所以可以讓使用者自己加。 - 預測時域(MPPI)—
time_steps × model_dt,Nav2 預設 56 × 0.05 s = 2.8 秒;每週期前向模擬 1000 × 56 = 56,000 個位姿,這是它只有 125 Hz 而 RPP 有 >4000 Hz 的原因。
足式(四足 / 人形)
- 浮動基座(floating base)— 把軀幹當成在空間中自由漂浮的剛體,腿掛在它下面。廣義座標是
q = (基座 6 DOF, 關節 n 個)。 - 欠致動(underactuated)— 可控輸入(n 個關節)少於系統自由度(6 + n),永遠差 6 個,而且差的正好是想控的軀幹位姿。
- 接觸集合(contact set)— 當下哪幾隻腳踩在地上。四足有 2⁴ = 16 種,每一種對應一組不同的動力學方程式。16 是組合上限,實際步態只走訪一小部分,但踩空/打滑會把系統丟進沒預期的那幾種。
- roll / pitch / yaw — 繞 x / y / z 的轉動,名字排列與軸序一一對應。在 REP-103 的 x 前 / y 左 / z 上右手系裡,正 roll 是左側抬起、正 pitch 是車頭往下、正 yaw 是向左轉——pitch 反直覺,是慣例衝突最常翻車的地方。輪式車 roll/pitch 幾乎恆為 0,足式六個自由度全在動。
- 混合系統(hybrid system)— 連續動力學 + 離散切換。切換時刻由狀態自己觸發(腳高降到 0),不是外部給的。
- ZMP(Zero Moment Point,零力矩點)— 地面反作用力等效作用點。保證腳掌不繞邊緣翻轉,不保證不跌倒;飛行相無從定義。名詞本身是 1970–72 才創的,1969 原始論文沒用這個詞。
- Capture point —
ξ = x + ẋ√(z₀/g),踩上去能讓重心速度漸近收斂到零的落腳點。定高倒單擺的通解是A·e^{ωt} + B·e^{−ωt},而A = ½[(x−p) + ẋ/ω]——所以 ξ 不是湊出來的,它就是「現在帶了多少發散成分」。踩在 ξ 上等於把A設成零。機制是消掉發散模態,不是「動能被抬升重心的位能吃光」(重心高度固定,沒有位能可吃)。ZMP 由當下的位形與加速度決定,不告訴你下一刻會到哪;capture point 的式子裡速度是主角。(嚴格說完整多體 ZMP 的角動量項含速度的二次式,但「不編碼往哪裡去」這件事不變。)注意ξ = p是不穩定平衡,要逐週期重算。 - Duty factor — 一隻腳在一個步態週期裡觸地的時間比例。n 組等間隔錯開時,恆有至少 k 組著地 ⟺
d ≥ k/n。walk 是 n=4、k=3 → 0.75;trot 是 n=2、k=1 → 0.5;雙足同 0.5。飛行相是 k=1 的特例。兩個必要的但書:「等間隔」不能省(相位 0/.1/.2/.3、d=0.3 仍有飛行相);結論要寫「至少 k 組」而非「恆為 k 組」(d=0.9 時四腳在 3 與 4 之間切換)。- 0.5 也是
k/n,只是 n=2 而且套在「一對腳」上:對稱步態的定義就是同一對左右腳差半週期,所以d ≥ 0.5保證每一對隨時有腳著地 → 全身不騰空。這是成立的幾何定理。 - ⚠ 但它只是充分條件,反過來不成立。
d < 0.5不保證有騰空相——前對的空檔可被後對填掉。反例 amble:至少一肢 duty factor < 50%、diagonality 落在 5–45% 或 55–95%(刻意避開 trot 的 50%),無全身騰空相。我曾把這條寫成充要,2026-08-05 修正。
- 0.5 也是
- QDD(quasi-direct drive,準直驅)— 高扭矩密度馬達 + 低減速比(約 1:3~1:10)。可反向驅動,所以衝擊能被馬達轉動吸收、力控不必外加感測器。對比工業手臂的諧波減速機常見 1:50 以上。
- proprioceptive 力控 — 用馬達電流與位置推得關節扭矩,再用
τ = JᵀF反推腳底受力,不裝力感測器。 - SEA(series elastic actuator,串聯彈性致動器)— 輸出端加實體彈簧量測力並吸收衝擊,代價是頻寬。與 QDD 是「衝擊被誰吸收」的兩種答案。
- teacher-student 特權學習 — 先用只有模擬知道的資訊訓練 teacher,再讓只吃本體感覺的 student 模仿。可查證的是 Lee 2020 → Miki 2022 這一支,別套用到其他論文。
- ISO/CD 25785-1 — 制定中的「動態穩定工業移動機器人」安全標準,範疇是「需主動控制才能維持平衡、斷電即可能失穩」。目前沒有任何已發布的 ISO 標準涵蓋足式,ISO 3691-4 明訂排除主動穩定機器人。
法規與認證
- UL 2271 — 輕型電動載具(LEV)電池安全標準(低壓、輕載)。
- UL 2580 — 電動車/工業車輛電池安全標準(較高壓、工業級;含熱擴散測試)。適用範圍明文排除 LEV 並指向 UL 2271,所以兩者不可互換不是慣例而是標準寫死的。
- EESA(electrical energy storage assembly,電能儲存組件)— UL 2580 的正式名詞,指電池包、「電池包 + 電化學電容」的組合,以及構成它們的模組。UL 2271 不用這個詞,別寫成「兩張都是 EESA 層級」。
- 認證四角色 — 標準制定/推動者、顧問/輔導/評估者、檢測實驗室(能力依 ISO/IEC 17025)、驗證/發證機構(公正性依 ISO/IEC 17065)。送測分界把「自己準備」與「第三方判定」切開;顧問報告 ≠ 證書。
- ISO/IEC 17025 / 17065 — 不是機器人標準,是「認驗證制度如何可信」的底層規則:前者管實驗室能力,後者管驗證機構的公正性與證書管理。
- LFP (LiFePO4) — 磷酸鋰鐵電池;熱失控門檻高、不釋氧,本質安全優於三元鋰 NMC。
- UN 38.3 — 鋰電池運輸強制測試。
- SEMI — Semiconductor Equipment and Materials International,半導體設備標準組織。
- SEMI S2 — 半導體設備環安衛(EHS)安全準則。
- SEMI E84 — 自動搬運交接(handoff)平行 I/O 介面(AMR ↔ load port 交接 FOUP)。
- FOUP — Front Opening Unified Pod,晶圓盒。OHT — 天車(Overhead Hoist Transport)。
Flagged ambiguities(待釐清)
- 「主板控制」目前指 STM32 下位機;若後續納入 Arduino 平台,需在 firmware 章節區分。