Initial commit

This commit is contained in:
2026-07-13 09:25:40 +07:00
parent c08ff54676
commit bccfb156d7
1938 changed files with 641646 additions and 0 deletions

View File

@@ -0,0 +1,981 @@
# HƯỚNG DẪN TUNING NAVIGATION - COMPLETE GUIDE
**Document:** Robot Navigation Tuning System - Comprehensive Guide
**Last Updated:** 2026-02-01
**Version:** 2.0 (Updated with Adaptive Pure Pursuit)
**Status:** Manual Tuning + Parameter Documentation
---
## 📋 MỤC LỤC
1. [Tổng Quan Hệ Thống](#tổng-quan-hệ-thống)
2. [Quick Start - Workflow Cơ Bản](#quick-start)
3. [Parameter Reference](#parameter-reference)
4. [Troubleshooting Scenarios](#troubleshooting-scenarios)
5. [Advanced Tuning Techniques](#advanced-tuning)
6. [Best Practices](#best-practices)
---
## 🎯 TỔNG QUAN HỆ THỐNG
### Loại Tuning Hiện Tại: **MANUAL TUNING** ✅
**Tính năng đã có:**
- ✅ Manual parameter adjustment UI
- ✅ Single test execution
- ✅ Batch testing (nhiều scenarios)
- ✅ Configuration comparison
- ✅ Real-time visualization
- ✅ Metrics calculation và scoring
-**NEW:** Adaptive Pure Pursuit (distance + curvature based)
-**NEW:** 3-Phase Final Approach Controller
-**NEW:** Comprehensive parameter documentation
**Tính năng chưa có (Future):**
- ❌ Automated optimization (Bayesian, Grid Search)
- ❌ Auto-tuning algorithms
- ❌ AI-based parameter suggestion
---
## 🚀 QUICK START
### Workflow 1: First-Time Setup (15 phút)
```
┌─────────────────────────────────────┐
│ 1. Load Default Configuration │
│ - Access: /navigation/tuning │
│ - Select "Balanced Default" │
│ Time: 2 phút │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ 2. Baseline Test │
│ - Scenario: "Straight Line 10m" │
│ - Click "Start Test" │
│ - Observe visualization │
│ Time: 3 phút │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ 3. Review Metrics │
│ Overall Score: ____/100 │
│ - CTE RMS: ____m │
│ - Heading Error: ____° │
│ - Jerk: ____m/s³ │
│ Time: 5 phút │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ 4. Decision Tree │
│ Score > 80 → Test more scenarios│
│ Score 60-80 → Manual tuning │
│ Score < 60 → Check hardware │
│ Time: 5 phút │
└─────────────────────────────────────┘
```
**Kết quả mong đợi:** Hiểu được performance baseline của robot
---
### Workflow 2: Multi-Scenario Validation (20 phút)
```
1. Setup Batch Test
Scenarios:
☑ Straight Line 10m
☑ Circle 2m Radius
☑ Circle 0.5m Radius (challenging)
2. Run & Monitor (15 phút)
- Auto run từng scenario
- Track progress bar
- View real-time plots
3. Compare Results (5 phút)
Scenario Score CTE RMS Decision
───────────────── ───── ─────── ────────
Straight Line 85 0.05m ✓ Pass
Circle 2m 78 0.08m ⚠ Tune
Circle 0.5m 65 0.12m ✗ Need work
```
---
## 📚 PARAMETER REFERENCE
### Pure Pursuit Configuration
#### **Basic Lookahead Parameters**
##### `LookaheadMin` (meters)
**Default:** 0.3m
**Meaning:** Điểm gần nhất phía trước mà robot hướng đến
**↑ Tăng (0.4-0.6m):**
- ✓ Smoother tracking trên đường thẳng
- ✓ Ít reactive, predictive hơn
- ✗ Có thể cắt góc trên curves
- ✗ Kém chính xác ở low speed
**↓ Giảm (0.2-0.25m):**
- ✓ Tracking curves chặt hơn
- ✓ Chính xác hơn ở low speed
- ✗ Jittery/oscillation nhiều hơn
- ✗ Nhạy với noise
**Tuning Tips:**
- Warehouse AGV: 0.4-0.5m (smooth)
- Tight spaces: 0.25-0.3m (precision)
- Start: 0.3m (balanced)
**UI Location:** `Pure Pursuit Tab > Basic Lookahead > LookaheadMin`
---
##### `Kdd` (seconds)
**Default:** 1.0s
**Formula:** `lookahead = LookaheadMin + Kdd × |velocity|`
**↑ Tăng (1.2-1.5s):**
- ✓ Look xa hơn ở high speed → smoother
- ✓ Tốt cho fast robots (>1.5 m/s)
- ✗ Có thể quá predictive (overshoot)
**↓ Giảm (0.7-0.9s):**
- ✓ Reactive control hơn
- ✓ Tốt cho slow robots
- ✗ Jittery ở high speed
**Tuning Tips:**
- Check formula: At 1.0m/s → lookahead = 0.3 + 1.0×1.0 = 1.3m
- Slow robot (<0.5 m/s): Kdd = 0.8-1.0
- Fast robot (>1.5 m/s): Kdd = 1.2-1.5
**UI Location:** `Pure Pursuit Tab > Basic Lookahead > Kdd`
---
##### `LookaheadMax` (meters)
**Default:** 2.0m
**Meaning:** Upper limit cho lookahead distance
**↑ Tăng (2.5-3.0m):**
- ✓ Very smooth ở high speed
- ✓ Tốt cho long straight paths
- ✗ Cắt góc aggressive
- ✗ Phản ứng chậm với path changes
**↓ Giảm (1.5-1.8m):**
- ✓ Tighter path following
- ✓ Tốt cho complex paths
- ✗ Kém smooth ở high speed
**Tuning Tips:**
- Must be: `LookaheadMax > LookaheadMin + Kdd × MaxVelocity`
- Example: MaxVel=1.5m/s → need ≥ 0.3+1.0×1.5 = 1.8m
**UI Location:** `Pure Pursuit Tab > Basic Lookahead > LookaheadMax`
---
#### **Adaptive Lookahead Parameters** (NEW in v2.0)
##### `GoalRegionDistance` (meters)
**Default:** 1.5m
**Meaning:** Bắt đầu giảm lookahead khi trong khoảng này từ goal
**How it works:**
```
Distance > 1.5m: lookahead = 100% (normal)
Distance = 1.0m: lookahead = 83%
Distance = 0.5m: lookahead = 67%
Distance = 0.0m: lookahead = 50%
```
**↑ Tăng (2.0-3.0m):**
- ✓ Earlier precision mode
- ✓ Smoother deceleration
- ✗ Slower overall
**↓ Giảm (0.8-1.2m):**
- ✓ Faster approach
- ✗ Abrupt gần goal
**Tuning Tips:**
- Fast robot: Tăng (need more brake distance)
- Short paths: 1.0-1.5m
- Long paths: 2.0-2.5m
**UI Location:** `Pure Pursuit Tab > Adaptive > GoalRegionDistance`
---
##### `KCurvature`
**Default:** 2.0
**Formula:** `curvatureFactor = 1 / (1 + KCurvature × curvature)`
**How it works:**
```
Straight path (k=0): curvatureFactor = 1.0 (100% lookahead)
Gentle curve (k=0.5): curvatureFactor = 0.67 (67% lookahead)
Sharp curve (k=1.0): curvatureFactor = 0.33 (33% lookahead)
```
**↑ Tăng (3.0-5.0):**
- ✓ Tighter tracking trên curves
- ✓ Ít cắt góc
- ✗ Có thể quá reactive
- ✗ Oscillation trên curves
**↓ Giảm (1.0-1.5):**
- ✓ Smoother trên curves
- ✗ Cắt góc nhiều hơn
- ✗ Kém precise
**Tuning Tips:**
- Warehouse (gentle curves): 1.5-2.0
- Tight spaces (sharp curves): 3.0-4.0
- If cutting corners: Tăng KCurvature
**UI Location:** `Pure Pursuit Tab > Adaptive > KCurvature`
---
#### **Final Approach Parameters**
##### `FinalApproachThreshold` (meters)
**Default:** 0.2m
**Meaning:** Khoảng cách activate final approach mode
**Behavior:**
- Distance > 0.2m: Normal Pure Pursuit tracking
- Distance ≤ 0.2m: Switch to 3-phase final approach controller
**3 Phases:**
1. **Phase 1:** Approach position (distance > 3cm)
2. **Phase 2:** Align heading (position OK, heading error > 3°)
3. **Phase 3:** Goal reached (both OK)
**↑ Tăng (0.3-0.5m):**
- ✓ Earlier slow down → smoother
- ✗ Takes longer
**↓ Giảm (0.1-0.15m):**
- ✓ Faster approach
- ✗ Abrupt/jerky
**Tuning Tips:**
- Should be: `> PositionTolerance × 3`
- High precision: 0.3-0.5m
- Speed priority: 0.15-0.2m
**UI Location:** `Pure Pursuit Tab > Final Approach > Threshold`
---
##### `PositionTolerance` (meters)
**Default:** 0.03m (3cm)
**Meaning:** Robot cần ở gần goal bao nhiêu
**↑ Tăng (0.05-0.08m):**
- ✓ Faster goal reaching
- ✗ Lower precision
**↓ Giảm (0.01-0.02m):**
- ✓ Higher precision
- ✗ May never reach (nếu localization error lớn)
**Critical Constraint:**
```
PositionTolerance >= 2 × Localization_RMS_Error
```
**Tuning Tips:**
- Typical localization: 1-2cm → use 0.03-0.05m
- High precision app: 0.02m (if localization allows)
- Cannot be < localization capability
**UI Location:** `Pure Pursuit Tab > Final Approach > PositionTolerance`
---
##### `HeadingTolerance` (degrees)
**Default:** 3.0°
**Meaning:** Robot heading phải align trong khoảng này
**Phase 2 Behavior:**
- Position đạt → Stop linear motion
- Rotate in-place để align heading
- Khi heading error < 3° → Done
**↑ Tăng (5-10°):**
- ✓ Faster completion
- ✗ Robot may face wrong direction
**↓ Giảm (1-2°):**
- ✓ Very precise alignment
- ✗ Takes much longer
- ✗ May oscillate
**Tuning Tips:**
- Docking/charging: 2-3° (precision critical)
- General navigation: 5-8°
- No heading requirement: 10-15° (fast)
**UI Location:** `Pure Pursuit Tab > Final Approach > HeadingTolerance`
---
### Navigation Limits
##### `MaxLinearVelocity` (m/s)
**Default:** 1.5 m/s
**Meaning:** Top speed during navigation
**Safety Check:**
```
Braking distance = v² / (2 × deceleration)
At 1.5 m/s, 0.5 m/s² decel → 2.25m braking distance
```
**Tuning Tips:**
- MUST match motor controller limits
- Warehouse AGV: 1.0-1.5 m/s
- Outdoor: 2.0-3.0 m/s
- Crowded areas: 0.5-0.8 m/s
**UI Location:** `Navigation Limits Tab > MaxLinearVelocity`
---
## 🛠️ TROUBLESHOOTING SCENARIOS
### Scenario 1: Robot Oscillates (Dao động)
**Triệu chứng:**
- ✗ Robot swing qua lại
- ✗ Angular velocity thay đổi liên tục
- ✗ Path không smooth
- **Metrics:** High velocity StdDev, high jerk
**Root Causes & Solutions:**
| Cause | Parameter | Action | Priority |
|-------|-----------|--------|----------|
| Lookahead quá ngắn | `LookaheadMin` | 0.3 → 0.4m | ⭐⭐⭐ |
| Curvature sensitivity cao | `KCurvature` | 2.0 → 1.5 | ⭐⭐ |
| Angular gain lớn | `MaxAngularVelocity` | 1.5 → 1.2 rad/s | ⭐⭐ |
| Signal noise | `AlphaFilter` | 0.3 → 0.2 | ⭐ |
| PID Kd thấp | `MovePidConfig.Kd` | +0.1-0.2 | ⭐⭐ |
**Step-by-Step Fix:**
```
1. Tăng LookaheadMin: 0.3 → 0.4m
└─> Test → Still oscillate?
2. Giảm KCurvature: 2.0 → 1.5
└─> Test → Still oscillate?
3. Giảm MaxAngularVelocity: 1.5 → 1.2 rad/s
└─> Test → Still oscillate?
4. Increase damping: MovePidConfig.Kd +0.1
```
**Expected Improvement:**
- Velocity StdDev: 0.3 → 0.15 m/s
- Max Jerk: 6.0 → 3.5 m/s³
- Overall Score: +10-15 points
---
### Scenario 2: Robot Cuts Corners (Cắt góc)
**Triệu chứng:**
- ✗ Robot không follow đường cong chặt
- ✗ Cross-track error lớn trên curves
- ✗ Shortcut qua góc
- **Metrics:** CTE RMS > 0.10m, Path Length Ratio < 1.0
**Root Causes & Solutions:**
| Cause | Parameter | Action | Priority |
|-------|-----------|--------|----------|
| Lookahead quá dài | `LookaheadMax` | 2.0 → 1.5m | ⭐⭐⭐ |
| Không adapt curvature | `KCurvature` | 2.0 → 3.0-4.0 | ⭐⭐⭐ |
| Lookahead time lớn | `MaxLookaheadTimeRatio` | 2.0 → 1.5s | ⭐⭐ |
**Step-by-Step Fix:**
```
1. Tăng KCurvature: 2.0 → 3.0
└─> Test on sharp curve
2. Vẫn cut? → Giảm LookaheadMax: 2.0 → 1.8m
└─> Check CTE RMS improvement
3. Fine-tune: MaxLookaheadTimeRatio: 2.0 → 1.7s
```
**Test Case:**
- Circle 0.5m Radius (challenging)
- Goal: CTE RMS < 0.08m
---
### Scenario 3: Poor Goal Precision
**Triệu chứng:**
- ✗ Robot không dừng đúng vị trí
- ✗ Heading sai khi đến goal
- ✗ Overshoot hoặc undershoot
- **Metrics:** Final position error > 5cm, heading error > 5°
**Diagnosis:**
```
Check Phase Logs:
FA-P1: DTG=0.085m, AErr=8.3°, LV=0.15, AV=0.12
^^^^^ Heading error cao
FA-P2: HErr=2.1°, AV=0.08 (Aligning heading)
^^^^^ Good alignment
FA-P3: Goal reached! DTG=0.02m, HErr=1.5°
^^^^^ Position OK
```
**Root Causes & Solutions:**
| Cause | Parameter | Action | Priority |
|-------|-----------|--------|----------|
| Position tolerance lớn | `PositionTolerance` | 0.03 → 0.02m | ⭐⭐⭐ |
| Final approach xa | `FinalApproachThreshold` | 0.2 → 0.15m | ⭐⭐ |
| Angular gain thấp | `FinalKdAngular` | 2.0 → 2.5-3.0 | ⭐⭐⭐ |
| Goal region lớn | `GoalRegionDistance` | 1.5 → 1.0m | ⭐ |
**Special Case: Heading Issues**
```
If position OK but heading wrong:
1. Check CalculateGoalHeading() logic
2. Tăng FinalKdAngular: 2.0 → 3.0
3. Giảm HeadingTolerance: 3° → 2° (stricter)
4. Increase FinalApproachMaxAngularVel: 0.3 → 0.4 rad/s (faster rotation)
```
---
### Scenario 4: High Speed Instability
**Triệu chứng:**
- ✗ Không stable ở tốc độ cao
- ✗ Overshoot nhiều
- ✗ Hard braking
- **Metrics:** High jerk ở cuối path, position overshoot
**Root Causes & Solutions:**
| Cause | Parameter | Action | Priority |
|-------|-----------|--------|----------|
| Lookahead không đủ xa | `LookaheadMax` | 2.0 → 2.5-3.0m | ⭐⭐⭐ |
| Kdd quá nhỏ | `Kdd` | 1.0 → 1.2-1.5s | ⭐⭐⭐ |
| Goal region ngắn | `GoalRegionDistance` | 1.5 → 2.0-2.5m | ⭐⭐⭐ |
**Formula Check:**
```
Braking Distance = v² / (2 × decel)
At 1.5 m/s, 0.5 m/s² → 2.25m
GoalRegionDistance should be ≥ Braking Distance
→ Set GoalRegionDistance = 2.5m (safety margin)
```
---
## 🎓 ADVANCED TUNING
### Tuning Hierarchy (Làm theo thứ tự này)
**Priority 1: Basic Lookahead**
```
1. LookaheadMin → Base stability
2. KCurvature → Curve handling
3. Kdd → Velocity scaling
4. LookaheadMax → High-speed limit
```
**Priority 2: Final Approach**
```
1. PositionTolerance → Must match localization
2. FinalApproachThreshold → When to slow down
3. FinalKdAngular → Heading control gain
4. HeadingTolerance → Strictness
```
**Priority 3: Adaptive Features**
```
1. GoalRegionDistance → Brake distance
2. KCurvature → Curve tightness
3. Time ratios → Preview distance
```
---
### Parameter Interactions (Quan trọng!)
#### Interaction 1: LookaheadMin ↔ KCurvature
```
Combination Result When to Use
───────────────────── ───────────────── ──────────────
High LookaheadMin + Cut corners ✗ Avoid
Low KCurvature severely
Low LookaheadMin + May oscillate ⚠ Careful
High KCurvature on curves
Medium LookaheadMin + Balanced ✓ Recommended
Medium KCurvature (0.3-0.4m, 2.0)
```
#### Interaction 2: MaxLinearVelocity ↔ GoalRegionDistance
```
Speed Goal Region Result
─────── ───────────── ───────────────────────────
1.5 m/s 1.0m ✗ Insufficient brake distance
1.5 m/s 2.5m ✓ Safe, smooth approach
0.5 m/s 2.5m ⚠ Too early slow down
```
**Formula:**
```csharp
GoalRegionDistance MaxLinearVelocity² / (2 × deceleration)
```
---
### Preset Configurations (Quick Start)
#### **Preset 1: Warehouse Standard**
```json
{
"Name": "Warehouse Standard",
"Description": "Smooth, wide corridors, medium speed",
"PurePursuitConfig": {
"LookaheadMin": 0.4,
"Kdd": 1.0,
"LookaheadMax": 2.0,
"KCurvature": 1.5,
"MaxAngularVelocity": 1.2,
"FinalApproachThreshold": 0.2,
"PositionTolerance": 0.04,
"HeadingTolerance": 5.0,
"GoalRegionDistance": 1.5
},
"NavigationConfig": {
"MaxLinearVelocity": 1.2
}
}
```
**Use case:** Kho hàng rộng, ít chướng ngại
---
#### **Preset 2: Tight Precision**
```json
{
"Name": "Tight Precision",
"Description": "Narrow spaces, docking, high precision",
"PurePursuitConfig": {
"LookaheadMin": 0.25,
"Kdd": 0.8,
"LookaheadMax": 1.5,
"KCurvature": 3.0,
"MaxAngularVelocity": 1.0,
"FinalApproachThreshold": 0.3,
"PositionTolerance": 0.02,
"HeadingTolerance": 2.0,
"GoalRegionDistance": 1.0
},
"NavigationConfig": {
"MaxLinearVelocity": 0.8
}
}
```
**Use case:** Docking, charging, tight spaces
---
#### **Preset 3: High Speed**
```json
{
"Name": "High Speed",
"Description": "Fast navigation, long straight paths",
"PurePursuitConfig": {
"LookaheadMin": 0.5,
"Kdd": 1.5,
"LookaheadMax": 3.0,
"KCurvature": 2.0,
"MaxAngularVelocity": 2.0,
"FinalApproachThreshold": 0.15,
"PositionTolerance": 0.05,
"HeadingTolerance": 8.0,
"GoalRegionDistance": 2.5
},
"NavigationConfig": {
"MaxLinearVelocity": 2.0
}
}
```
**Use case:** Outdoor, tốc độ cao, đường thẳng dài
---
## 📊 COMPARISON WORKFLOW
### How to Compare Two Configurations
**Step 1: Setup Comparison**
```
UI: Configuration Comparison Tab
├─ Config A: "Balanced Default"
├─ Config B: "Tuned_v1"
└─ Scenario: "Circle 2m Radius"
Click: "Run Comparison"
```
**Step 2: Monitor Execution**
```
Progress:
[████████████░░░░░░░░] 60% (Config A Complete)
Real-time Plot:
- Blue line: Config A trajectory
- Red line: Config B trajectory
- Green line: Reference path
```
**Step 3: Review Results**
```
Metric Config A Config B Improvement
─────────────────── ────────── ────────── ───────────
Overall Score 72 84 +12 ✓
CTE RMS (m) 0.095 0.062 -35% ✓
Heading Error (°) 4.2 2.8 -33% ✓
Max Jerk (m/s³) 5.8 3.9 -33% ✓
Completion Time (s) 12.5 11.8 -6% ✓
```
**Decision:**
- All metrics improved → ✓ Config B is better, save it
- Mixed results → Need further tuning
- Worse results → Revert, try different approach
---
## ⚠️ BEST PRACTICES & SAFETY
### 1. Tuning Safety
**Safety Monitoring (Auto Abort):**
```
Test sẽ stop nếu:
- Cross-track error > 0.5m
- Heading error > 45°
- Sustained tracking error > 3s
- Velocity exceeds motor limits
```
**Before Tuning:**
- ✓ Check hardware health
- ✓ Verify sensor calibration
- ✓ Test in safe environment
- ✓ Have emergency stop ready
### 2. Parameter Validation
**Automatic Constraints:**
```csharp
// System validates these automatically:
LookaheadMax > LookaheadMin
GoodTrackingBlend < PoorTrackingBlend
MaxLinearVelocity <= Motor_Max_Velocity
PositionTolerance >= 2 × Localization_Error
```
**If validation fails:**
- Red border on parameter field
- Tooltip shows violation
- Cannot save until fixed
### 3. Incremental Changes
**Rule of Thumb:**
```
Change 1-2 parameters per iteration
Max change: ±30% of current value
Test after each change
```
**Example:**
```
❌ Bad:
LookaheadMin: 0.3 → 0.6 (+100%)
Kdd: 1.0 → 1.5 (+50%)
KCurvature: 2.0 → 4.0 (+100%)
→ Too many changes, can't isolate effect
✓ Good:
LookaheadMin: 0.3 → 0.35 (+17%)
Test → Evaluate → Next change
```
### 4. Documentation
**Every Configuration Should Have:**
```json
{
"Name": "Tuned_2026-02-01_v3",
"Description": "Increased KCurvature to 3.0 to reduce corner cutting on tight curves. Improved CTE RMS from 0.095m to 0.062m on Circle 2m scenario.",
"CreatedBy": "User Name",
"BaseConfig": "Balanced Default",
"TestResults": [
{
"Scenario": "Circle 2m",
"Score": 84,
"CTE_RMS": 0.062
}
]
}
```
### 5. Multi-Scenario Validation
**Minimum Test Matrix:**
```
Scenario Min Score Critical Metrics
─────────────────── ───────── ────────────────────
Straight Line 10m > 80 CTE RMS < 0.05m
Circle 2m Radius > 75 CTE RMS < 0.08m
Circle 0.5m Radius > 65 CTE RMS < 0.12m
```
**Full Validation (Before Deployment):**
- All 3 scenarios > thresholds
- No safety violations
- Smooth trajectories (visual check)
- Repeatable results (run 3 times)
---
## 📖 WORKFLOW EXAMPLES
### Example 1: Fix Oscillation Issue
**Initial State:**
```
Scenario: Straight Line 10m
Score: 68/100
Issues:
- Velocity StdDev: 0.32 m/s (high)
- Max Jerk: 6.2 m/s³ (high)
- Visual: Robot swings left-right
```
**Iteration 1:**
```
Change: LookaheadMin: 0.3 → 0.4m
Reason: Increase preview distance
Result:
Score: 68 → 75 (+7)
Velocity StdDev: 0.32 → 0.22 (-31%)
Still some oscillation → Continue
```
**Iteration 2:**
```
Change: KCurvature: 2.0 → 1.5
Reason: Less aggressive on curves
Result:
Score: 75 → 79 (+4)
Max Jerk: 6.2 → 4.5 (-27%)
Better but not perfect → Continue
```
**Iteration 3:**
```
Change: MovePidConfig.Kd: 0.6 → 0.8
Reason: Add damping
Result:
Score: 79 → 83 (+4)
Velocity StdDev: 0.22 → 0.15 (-32%)
Visual: Smooth tracking ✓
PASS! Save as "Smooth_v1"
```
**Total Time:** 25 phút (3 iterations × ~8 phút/iteration)
---
### Example 2: Improve Goal Precision
**Initial State:**
```
Scenario: Docking Test
Issues:
- Final position error: 8cm (target: <3cm)
- Final heading error: 6° (target: <3°)
```
**Analysis:**
```
Phase Logs:
FA-P1: DTG=0.18m, AErr=12°, LV=0.20
└─> Slow approach OK
FA-P2: HErr=6.2°, AV=0.15
└─> Heading alignment too slow
FA-P3: Not reached (timeout)
```
**Iteration 1:**
```
Change: FinalKdAngular: 2.0 → 3.0
Reason: Faster heading correction
Result:
Final heading error: 6° → 3.5°
Better but still over target
```
**Iteration 2:**
```
Changes:
- HeadingTolerance: 3° → 2° (stricter)
- FinalApproachMaxAngularVel: 0.3 → 0.4 (faster rotation)
Result:
Final heading error: 3.5° → 2.1° ✓
Final position: 8cm → 2.5cm ✓
PASS!
```
---
## 🔮 FUTURE FEATURES
### Planned: Automated Optimization (Phase 3)
**Status:** Not yet implemented
**Algorithms Under Consideration:**
- Bayesian Optimization (most promising)
- Grid Search (exhaustive but slow)
- Genetic Algorithm (for multi-objective)
**Estimated Workflow:**
```
1. Select parameters to optimize
☑ LookaheadMin, Kdd, KCurvature
☐ (Lock other parameters)
2. Define objective function
Minimize: 0.6×CTE_RMS + 0.2×Jerk + 0.2×Time
3. Set constraints
LookaheadMin: [0.2, 0.6]
Kdd: [0.7, 1.5]
...
4. Run optimization (30-60 phút)
Progress: [████░░░░] 50% (25/50 iterations)
5. Review best parameters
Best Score: 87 (iteration 38)
6. Validate on test scenarios
```
**Timeline:** Q2 2026 (planned)
---
## ❓ FAQ
**Q: Nên tune bao nhiêu parameters cùng lúc?**
A: 1-2 parameters per iteration. Tune theo nhóm (Pure Pursuit → PID → Velocity).
**Q: Làm sao biết tuning có hiệu quả?**
A: Use Comparison tool. Overall Score tăng ≥5 điểm + visual improvement.
**Q: Robot vẫn oscillate sau khi tăng LookaheadMin?**
A: Try giảm KCurvature hoặc tăng PID Kd (damping).
**Q: Goal precision kém dù đã giảm PositionTolerance?**
A: Check localization error. PositionTolerance không thể < 2× localization RMS error.
**Q: Cần test bao nhiêu scenarios?**
A: Minimum 3 (Straight, Circle 2m, Circle 0.5m). Recommend 5+ for robustness.
**Q: Làm sao load preset vào UI?**
A: Configuration dropdown → Select preset name → Click "Load".
**Q: Configuration comparison cho kết quả khác nhau mỗi lần?**
A: Check randomness in test scenario. Some scenarios có stochastic elements. Run multiple times và average.
**Q: Tôi có thể export configuration không?**
A: Yes, click "Export JSON" button. File có thể import vào hệ thống khác.
---
## 📚 RELATED DOCUMENTATION
- **Parameter XML Docs:** Hover over any parameter in code to see inline documentation
- **Architecture:** `# ROBOT TUNING SYSTEM - COMPLETE ARCHITE.md`
- **Database Schema:** `# DATABASE SCHEMA & API SPECIFICATIONS.md`
- **Implementation Progress:** `IMPLEMENTATION_PROGRESS.md`
- **Algorithm Details:** `PurePursuitSimplified.cs` (inline comments)
---
## 📊 METRICS REFERENCE
### Tracking Accuracy Metrics
**CTE RMS (Cross-Track Error):**
- Measure: Khoảng cách vuông góc từ robot đến path
- Unit: meters
- Target: < 0.08m (good), < 0.05m (excellent)
**Heading Error RMS:**
- Measure: Sai số góc giữa robot heading và path tangent
- Unit: degrees
- Target: < 5° (good), < 3° (excellent)
**Goal Position Error:**
- Measure: Khoảng cách từ final position đến goal
- Unit: meters
- Target: < 0.05m (good), < 0.03m (excellent)
### Smoothness Metrics
**Max Jerk:**
- Measure: Tốc độ thay đổi acceleration lớn nhất
- Unit: m/s³
- Target: < 5.0 (good), < 3.0 (excellent)
**Velocity StdDev:**
- Measure: Độ ổn định của velocity
- Unit: m/s
- Target: < 0.2 (good), < 0.1 (excellent)
### Efficiency Metrics
**Path Length Ratio:**
- Measure: Actual path length / Reference path length
- Target: 1.0-1.05 (good), 1.0-1.02 (excellent)
**Completion Time:**
- Measure: Thời gian hoàn thành so với expected
- Depends on: MaxLinearVelocity, path complexity
---
**Document Version:** 2.0
**Last Updated:** 2026-02-01
**Changelog:**
- v2.0 (2026-02-01): Added Adaptive PP parameters, 3-phase final approach, comprehensive parameter docs
- v1.0 (2026-01-27): Initial manual tuning workflow