# FSAE-E 循跡控制 (TC) 系統開發與驗證計畫

這份筆記旨在規劃一套循跡控制系統 (Traction Control System, TC) 的開發與驗證流程，主要參考 Pengcheng Ji 的碩士論文（UTAS, 2020）中所提出的方法。

https://repositorio-aberto.up.pt/bitstream/10216/152698/2/640636.pdf

---

## 1. 作法 (Methodology) - 核心技術理論

本計畫的 TC 系統是基於**滑移率控制 (Slip Ratio Control)**。核心作法是**限制馬達輸出扭矩**，使驅動輪的滑移率維持在一個「最佳抓地力」的目標區間。

參考論文的關鍵技術包含：

* **控制架構：**
    * **高階控制器 (High-Level)：** 計算「目標滑移率」，並根據當前滑移率，決定需要介入多少 (例如：使用 PID 控制器)。
    * **低階控制器 (Low-Level)：** 負責執行高階控制器的扭矩指令。
* **馬達控制 (Motor Control)：**
    * **永磁同步馬達 (PMSM)** 為控制目標。
    * 採用**直接轉矩控制 (DTC)** 或其他向量控制技術，以實現「精確且快速」的扭矩響應。
    * 研究 **MTPA (最大轉矩電流比)** 和**弱磁控制**，以確保馬達在全速域都能高效輸出。
* **車輛建模 (Modelling)：**
    * **輪胎模型：** 使用 **Magic Formula (MF)** 來描述滑移率與摩擦力之間的非線性關係（這是 TC 演算法的靈魂）。
    * **車輛模型：** 至少使用**四分之一車輛模型**來模擬縱向動態。

**[!] 關鍵前提：** 此方法最佳適用於「後輪獨立馬達獨立驅動」的架構。
此 TC 只能進行「總扭矩」限制，無法處理左/右輪的獨立打滑。

---

## 2. 階段 (Phases) - 開發流程

將整個開發案切分為四大階段：

### 階段一：硬體盤點與參數確認
* [ ] **參數蒐集 (必要)：**
    * 車輛參數：車重、軸距、重心高。
    * 輪胎參數：(最難但最重要) 透過實驗取得 Magic Formula 的係數，或至少取得輪胎靜摩擦係數。
* [ ] **感測器確認：** 具備 4 顆輪速感測器 (Wheel Speed Sensors)、IMU (G值/偏航速率)。

### 階段二：模擬 (Simulation)
* [ ] **環境建立：** 在 MATLAB/SIMULINK 中重現論文的模擬環境。
* [ ] **模型建立：** 建立自己的馬達、控制器和車輛模型。
* [ ] **參數替換：** 將**階段一**蒐集到的「自家車輛參數」輸入模型。
* [ ] **演算法開發：** 在 SIMULINK 中設計你的高低階 TC 控制器。
* [ ] **模擬驗證：** 跑模擬，確認 TC 演算法能有效將滑移率控制在目標值。

### 階段三：實作 (Implementation)
* [ ] **程式碼轉換：** 將 SIMULINK 模型轉換為 C/C++ 程式碼 (例如使用 Embedded Coder)，或手動編寫。
* [ ] **控制器整合：** 將 TC 演算法燒錄至 VCU (車輛控制器)。
* [ ] **CAN Bus 設定：** 確保 VCU 能高頻 (建議 100Hz+) 讀取 4 顆輪速、油門踏板，並能即時「覆蓋」駕駛的扭矩請求，向馬達控制器 (Inverter) 發送「限制後的扭矩指令」。
* [ ] **數據紀錄 (Logging) 設定：** 確保**階段三：驗證流程**所需的所有數據都能被即時紀錄。

### 階段四：驗證與調校 (Validation & Tuning)
* [ ] 參照下方的「驗證流程」進行 A/B Test。
* [ ] **調校 (Tuning)：** * **目標滑移率：** 調整你的 `Target_Slip_Ratio` (例如 10%? 15%?)，找到最佳平衡點。
    * **PID 調校：** 調整 TC 控制器的 Kp, Ki, Kd 值，改善 TC 介入的「體感」。
        * 太「粗暴 (Harsh)」：介入太快，車輛會頓挫。
        * 太「軟弱 (Soft)」：介入太慢，輪胎仍在空轉，TC 沒效果。

---

## 3. 驗證流程 (Validation Process)

驗證的核心是 **A/B Test**：在相同條件下，比較 **TC 開啟 (ON)** vs **TC 關閉 (OFF)**。

### 3.1 用數據說話 (Data Logging)

**[目標]** 證明 TC 確實「介入」，並且「有效控制」了滑移率。

**[必錄數據 (100Hz+)]**
* `TCS_Active` (布林值): TC 是否正在介入 (1=介入, 0=待機)
* `Slip_Ratio_RL`, `Slip_Ratio_RR`: (計算值) 左/右後輪滑移率
* `Target_Slip_Ratio`: (演算法目標值)
* `Requested_Torque`: (來自油門) 駕駛想要的扭矩
* `Commanded_Torque`: (TC 輸出) 演算法「實際」發給馬達的扭矩
* `Wheel_Speed_FL`, `FR`, `RL`, `RR`: 四輪輪速
* `Longitudinal_G`: (來自 IMU) 縱向 G 值 (加速度)
* `Yaw_Rate`: (來自 IMU) 偏航速率 (打轉速度)

**[測試情境]**

1.  **直線起步 (0-60kph 加速測試)**
    * **TC OFF (對照組)：**
        * 會看到：`Slip_Ratio` 瞬間飆升、`Wheel_Speed_RR` 遠高於 `Wheel_Speed_FR`、`Commanded_Torque` = `Requested_Torque`。
    * **TC ON (實驗組)：**
        * **必須看到：** `TCS_Active` 變為 1 -> `Commanded_Torque` **<** `Requested_Torque` -> `Slip_Ratio` 被抑制在 `Target_Slip_Ratio` 附近。
        * **成功指標：** 0-60kph 加速時間**更短**，`Longitudinal_G` 曲線更飽滿。

2.  **出彎 (Corner Exit) 測試**
    * **TC OFF (對照組)：**
        * 會看到：出彎補油 -> 失去抓地力，輪速飆高 -> `Yaw_Rate` 劇烈變化 -> 車輛打轉 (Spin)。
    * **TC ON (實驗組)：**
        * **必須看到：** `TCS_Active` 啟動 -> 輸出扭矩被限制 -> `Yaw_Rate` 保持平穩 -> 車輛穩定出彎。

### 3.2 眼見為憑 (Video Recording)

**[目標]** 直觀展示 TC 效果，並輔助數據分析。

* **[必拍角度 1] GoPro 對準「驅動輪」用慢速攝影：**
    * **TC OFF：** 輪胎瘋狂空轉。
    * **TC ON：** 輪胎仍會滑移（這是必要的），但被控制住，車輛明顯在「前進」而非「原地刨」。
* **[必拍角度 2] GoPro 對準「駕駛與儀表板」：**
    * 確認車輛行駛方向。
    * 確認儀表板上的「TC 啟動燈」是否如預期閃爍。
* **[必拍角度 3] 車外側錄：**
    * **TC OFF：** 車尾劇烈擺動 (Fishtail)。
    * **TC ON：** 車身動態穩定。

### 3.3 [進階] 空拍機鳥瞰 (Drone View)

**[目標]** 驗證 TC 對「側向滑移 (Sideslip)」的 **間接** 的幫助。

* **TC OFF：** 空拍機將拍到車輛（尤其在出彎時）的「指向」和「行進軌跡」不一致，車尾向外甩，即「側滑角」過大。
* **TC ON：** 空拍機將拍到 TC 透過防止「縱向空轉」，進而**成功抑制**了「側向滑移」的發生。車輛軌跡非常乾淨，車身指向與行進方向一致。