created
This commit is contained in:
230
doc/implementation_plan.md
Normal file
230
doc/implementation_plan.md
Normal file
@@ -0,0 +1,230 @@
|
||||
# Kế hoạch Implementation Navigation System
|
||||
|
||||
## Phân tích Kiến trúc Hiện tại
|
||||
|
||||
### ✅ Đã có sẵn:
|
||||
|
||||
1. **Interface Layer:**
|
||||
- `move_base_core::BaseNavigation` - Interface chính
|
||||
- `move_base::MoveBase` - Implementation
|
||||
|
||||
2. **Core Components:**
|
||||
- `nav_core::BaseGlobalPlanner` - Interface cho global planner
|
||||
- `nav_core::BaseLocalPlanner` - Interface cho local planner
|
||||
- `nav_core::RecoveryBehavior` - Interface cho recovery behaviors
|
||||
- Plugin system với `boost::dll` để load dynamic plugins
|
||||
|
||||
3. **Costmap System:**
|
||||
- `costmap_2d::Costmap2DROBOT` - Global và local costmap
|
||||
- Costmap layers (static, obstacle, inflation, etc.)
|
||||
|
||||
4. **Supporting Libraries:**
|
||||
- `tf3` - Transform system
|
||||
- `robot_time` - Time management
|
||||
- `geometry_msgs` - Message types
|
||||
- `nav_2d_msgs`, `nav_2d_utils` - 2D navigation utilities
|
||||
|
||||
### ❌ Cần bổ sung/hoàn thiện:
|
||||
|
||||
1. **User Controller Plugin System:**
|
||||
- Factory để tạo User Controller từ plugin
|
||||
- Interface cho User Controller
|
||||
- Integration với BaseNavigation
|
||||
|
||||
2. **Data Sources Integration:**
|
||||
- Pnkx Loc interface
|
||||
- Odometry Source interface
|
||||
- Sensor Transform management
|
||||
- Map Server interface
|
||||
- Laser Sensor Sources interface
|
||||
|
||||
3. **Base Controller:**
|
||||
- Diff drive controller
|
||||
- Steer drive controller
|
||||
- Velocity command execution
|
||||
|
||||
4. **Hoàn thiện MoveBase:**
|
||||
- Control loop implementation
|
||||
- State machine management
|
||||
- Recovery behavior execution
|
||||
|
||||
## Kế hoạch Implementation
|
||||
|
||||
### Phase 1: Data Sources & Interfaces (Ưu tiên cao)
|
||||
|
||||
#### 1.1 Odometry Source Interface
|
||||
**File:** `src/Navigations/Cores/move_base_core/include/move_base_core/odometry_source.h`
|
||||
```cpp
|
||||
class IOdometrySource {
|
||||
virtual geometry_msgs::PoseStamped getCurrentPose() = 0;
|
||||
virtual geometry_msgs::Twist getCurrentVelocity() = 0;
|
||||
virtual bool isAvailable() = 0;
|
||||
};
|
||||
```
|
||||
|
||||
#### 1.2 Localization Source Interface (Pnkx Loc)
|
||||
**File:** `src/Navigations/Cores/move_base_core/include/move_base_core/localization_source.h`
|
||||
```cpp
|
||||
class ILocalizationSource {
|
||||
virtual geometry_msgs::PoseStamped getRobotPose() = 0;
|
||||
virtual std::string getGlobalFrame() = 0;
|
||||
virtual bool isLocalized() = 0;
|
||||
};
|
||||
```
|
||||
|
||||
#### 1.3 Map Provider Interface
|
||||
**File:** `src/Navigations/Cores/move_base_core/include/move_base_core/map_provider.h`
|
||||
```cpp
|
||||
class IMapProvider {
|
||||
virtual nav_msgs::OccupancyGrid getMap() = 0;
|
||||
virtual bool isMapAvailable() = 0;
|
||||
};
|
||||
```
|
||||
|
||||
#### 1.4 Sensor Data Interface
|
||||
**File:** `src/Navigations/Cores/move_base_core/include/move_base_core/sensor_source.h`
|
||||
```cpp
|
||||
class ISensorSource {
|
||||
virtual sensor_msgs::LaserScan getLatestScan() = 0;
|
||||
virtual bool hasNewData() = 0;
|
||||
};
|
||||
```
|
||||
|
||||
### Phase 2: Base Controller (Ưu tiên cao)
|
||||
|
||||
#### 2.1 Base Controller Interface
|
||||
**File:** `src/Navigations/Cores/move_base_core/include/move_base_core/base_controller.h`
|
||||
```cpp
|
||||
class IBaseController {
|
||||
virtual bool setVelocity(const geometry_msgs::Twist& cmd_vel) = 0;
|
||||
virtual bool stop() = 0;
|
||||
virtual geometry_msgs::Twist getCurrentVelocity() = 0;
|
||||
};
|
||||
```
|
||||
|
||||
#### 2.2 Diff Drive Controller
|
||||
**File:** `src/Navigations/Packages/base_controllers/include/base_controllers/diff_drive_controller.h`
|
||||
- Implement IBaseController
|
||||
- Convert Twist to wheel velocities
|
||||
- Handle kinematics cho differential drive
|
||||
|
||||
#### 2.3 Steer Drive Controller
|
||||
**File:** `src/Navigations/Packages/base_controllers/include/base_controllers/steer_drive_controller.h`
|
||||
- Implement IBaseController
|
||||
- Convert Twist to steering angles và wheel velocities
|
||||
- Handle kinematics cho bicycle/steering model
|
||||
|
||||
### Phase 3: User Controller Plugin System (Ưu tiên trung bình)
|
||||
|
||||
#### 3.1 User Controller Interface
|
||||
**File:** `src/Navigations/Cores/move_base_core/include/move_base_core/user_controller.h`
|
||||
```cpp
|
||||
class IUserController {
|
||||
virtual void onGoalReceived(const geometry_msgs::PoseStamped& goal) = 0;
|
||||
virtual void onNavigationStateChanged(move_base_core::State state) = 0;
|
||||
virtual void onFeedback(const NavFeedback& feedback) = 0;
|
||||
};
|
||||
```
|
||||
|
||||
#### 3.2 User Controller Factory
|
||||
**File:** `src/Navigations/Cores/move_base_core/src/user_controller_factory.cpp`
|
||||
- Load plugin từ config
|
||||
- Create instance với boost::dll
|
||||
- Manage lifecycle
|
||||
|
||||
### Phase 4: Control Loop & State Machine (Ưu tiên cao)
|
||||
|
||||
#### 4.1 Control Loop Implementation
|
||||
**File:** `src/Navigations/Packages/move_base/src/move_base_control_loop.cpp`
|
||||
- Main control loop thread
|
||||
- Planner thread management
|
||||
- Controller execution
|
||||
- Frequency control
|
||||
|
||||
#### 4.2 State Machine
|
||||
**File:** `src/Navigations/Packages/move_base/src/move_base_state_machine.cpp`
|
||||
- State transitions
|
||||
- Recovery behavior triggers
|
||||
- Goal management
|
||||
|
||||
### Phase 5: Integration & Testing (Ưu tiên trung bình)
|
||||
|
||||
#### 5.1 Integration Layer
|
||||
- Connect tất cả components
|
||||
- Data flow management
|
||||
- Error handling
|
||||
|
||||
#### 5.2 Testing
|
||||
- Unit tests
|
||||
- Integration tests
|
||||
- Simulation tests
|
||||
|
||||
## Cấu trúc Thư mục Đề xuất
|
||||
|
||||
```
|
||||
src/Navigations/
|
||||
├── Cores/
|
||||
│ ├── move_base_core/ ✅ Đã có
|
||||
│ │ ├── interfaces/
|
||||
│ │ │ ├── odometry_source.h ⚠️ Cần tạo
|
||||
│ │ │ ├── localization_source.h ⚠️ Cần tạo
|
||||
│ │ │ ├── map_provider.h ⚠️ Cần tạo
|
||||
│ │ │ ├── sensor_source.h ⚠️ Cần tạo
|
||||
│ │ │ ├── base_controller.h ⚠️ Cần tạo
|
||||
│ │ │ └── user_controller.h ⚠️ Cần tạo
|
||||
│ │ └── src/
|
||||
│ │ └── user_controller_factory.cpp ⚠️ Cần tạo
|
||||
│ ├── nav_core/ ✅ Đã có
|
||||
│ └── nav_core2/ ✅ Đã có
|
||||
│
|
||||
├── Packages/
|
||||
│ ├── move_base/ ✅ Đã có (cần hoàn thiện)
|
||||
│ │ └── src/
|
||||
│ │ ├── move_base_control_loop.cpp ⚠️ Cần tạo
|
||||
│ │ └── move_base_state_machine.cpp ⚠️ Cần tạo
|
||||
│ │
|
||||
│ └── base_controllers/ ⚠️ Cần tạo
|
||||
│ ├── include/
|
||||
│ │ └── base_controllers/
|
||||
│ │ ├── diff_drive_controller.h
|
||||
│ │ └── steer_drive_controller.h
|
||||
│ └── src/
|
||||
│ ├── diff_drive_controller.cpp
|
||||
│ └── steer_drive_controller.cpp
|
||||
│
|
||||
└── Libraries/
|
||||
└── (các libraries hiện có) ✅
|
||||
```
|
||||
|
||||
## Thứ tự Implementation
|
||||
|
||||
### Sprint 1: Foundation (1-2 tuần)
|
||||
1. ✅ Tạo interfaces cho data sources
|
||||
2. ✅ Tạo base controller interface
|
||||
3. ✅ Implement diff drive controller cơ bản
|
||||
|
||||
### Sprint 2: Integration (1-2 tuần)
|
||||
1. ✅ Integrate data sources vào MoveBase
|
||||
2. ✅ Implement control loop
|
||||
3. ✅ Connect base controller
|
||||
|
||||
### Sprint 3: Plugin System (1 tuần)
|
||||
1. ✅ User controller plugin system
|
||||
2. ✅ Factory pattern implementation
|
||||
|
||||
### Sprint 4: State Machine & Recovery (1 tuần)
|
||||
1. ✅ State machine implementation
|
||||
2. ✅ Recovery behavior integration
|
||||
|
||||
### Sprint 5: Testing & Polish (1 tuần)
|
||||
1. ✅ Unit tests
|
||||
2. ✅ Integration tests
|
||||
3. ✅ Documentation
|
||||
|
||||
## Notes
|
||||
|
||||
- Tất cả interfaces nên follow pattern của `BaseNavigation`
|
||||
- Sử dụng `boost::dll` cho plugin system (đã có sẵn)
|
||||
- Thread safety: sử dụng `boost::mutex` và `boost::recursive_mutex`
|
||||
- Error handling: throw exceptions, return bool cho simple operations
|
||||
|
||||
Reference in New Issue
Block a user