44 lines
2.7 KiB
Markdown
44 lines
2.7 KiB
Markdown
# Trạng thái `recovery_core`
|
||
|
||
Nội dung PLAN.md cũ đã được gỡ. Hai lý do:
|
||
|
||
1. **Đánh số phase trùng nhưng khác nghĩa.** Nó dùng "Phase 1/2/3" cho các mốc riêng của gói, trùng
|
||
số với Phase 1–5 của `Test/NAV_REFACTOR_PLAN.md` — cùng một con số chỉ hai thứ khác hẳn nhau,
|
||
trong hai file cùng nằm dưới `Test/`, là bẫy đọc nhầm.
|
||
2. **Tick sai.** Nó đánh `[x]` cho `RecoveryConfig::validate`, `RecoveryConfig::fromNodeHandle`,
|
||
`MockBehavior` và `interface_contract_test.cpp` — grep cả ba symbol ra 0 hit, và `test/` khi đó
|
||
chỉ có đúng một file. Một checklist nói dối còn tệ hơn không có checklist.
|
||
|
||
## Nguồn chuẩn hiện tại
|
||
|
||
| Cần gì | Đọc ở đâu |
|
||
|---|---|
|
||
| Contract, họ output, bất biến an toàn | [`README.md`](README.md) |
|
||
| Quyết định thiết kế và lý do | [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) |
|
||
| Quy tắc bắt buộc khi viết plugin họ vận tốc | [`docs/SAFETY.md`](docs/SAFETY.md) |
|
||
| Cách thêm behavior mới | [`docs/PLUGIN_GUIDE.md`](docs/PLUGIN_GUIDE.md) |
|
||
| Bối cảnh trong cuộc refactor navigation runtime | `Test/NAV_REFACTOR_PLAN.md`, PHASE 3 |
|
||
|
||
## Đã xong
|
||
|
||
- Contract: `bool configure(name, ctx, nh)` / `bool start(goal, now)` / `update(now)` / `cancel()`;
|
||
`outputKind()` khai họ output; toàn bộ state của base là `private`.
|
||
- `RecoveryContext` chỉ chứa **cổng** (`PoseProvider`, `CollisionChecker`, `PlanProvider`), không
|
||
chứa con trỏ tới dữ liệu động.
|
||
- `RecoveryGoal` dùng `std::optional` + `trigger`; bỏ quy ước sentinel "0 = dùng default".
|
||
- `RecoveryRegistry` nạp theo YAML qua Boost.DLL, giữ factory sống đúng vòng đời.
|
||
- `adapters/`: `CostmapPoseProvider`, `CostmapCollisionChecker`.
|
||
- Bộ mặc định 4 plugin / 5 instance: `wait`, `conservative_reset`, `rotate`, `aggressive_reset`,
|
||
`back_up`. `regen_path_recovery` bị xoá, không thay thế.
|
||
- 9 bộ test GTest đăng ký với ctest, chạy trên cây config riêng của gói.
|
||
|
||
## Chưa xong
|
||
|
||
- **Họ `kPath` chưa có behavior nào.** Contract đã sẵn sàng (`PlanProvider` + `outputKind()` trả
|
||
`kPath`), nhưng một behavior sinh đường thoát thật cần thông tin từ global planner — nằm ngoài
|
||
phạm vi gói này.
|
||
- **`ClearCostmapRecovery` chưa có test tự động.** Nó cần `Costmap2DROBOT` thật (TF + chuỗi layer),
|
||
không dựng được bằng fake của `nav_test_harness`. Hiện chỉ được kiểm bằng đọc code; test tích hợp
|
||
thuộc Phase 5 (kịch bản chạy trên sim).
|
||
- **Chưa chạy trên robot thật.** Bật từng behavior một, không bật cả bộ cùng lúc.
|