862 lines
23 KiB
Markdown
862 lines
23 KiB
Markdown
# VDA 5050 Integration Guide / Hướng dẫn Tích hợp VDA 5050
|
|
|
|
## 📋 Overview / Tổng quan
|
|
|
|
VDA 5050 là tiêu chuẩn quốc tế cho giao tiếp giữa Fleet Management System và AGV/AMR. Tài liệu này mô tả cách RobotNet10 triển khai tiêu chuẩn này.
|
|
|
|
## 🎯 Why VDA 5050? / Tại sao VDA 5050?
|
|
|
|
### Lợi ích / Benefits
|
|
|
|
1. **Interoperability** - Khả năng tương tác
|
|
- Robot của RobotNet10 có thể hoạt động với Fleet Manager của hãng khác
|
|
- FleetManager của RobotNet10 có thể quản lý robot của hãng khác
|
|
|
|
2. **Standardization** - Chuẩn hóa
|
|
- Định nghĩa rõ ràng message formats
|
|
- Behavior được mô tả chi tiết
|
|
- Giảm thiểu hiểu lầm trong implementation
|
|
|
|
3. **Industry Adoption** - Được công nghiệp chấp nhận
|
|
- Nhiều nhà sản xuất robot hỗ trợ
|
|
- Nhiều Fleet Management System hỗ trợ
|
|
- Community support và tài liệu phong phú
|
|
|
|
## 🆕 What's New in VDA 5050 2.1.0 / Tính năng Mới trong 2.1.0
|
|
|
|
### Key Features / Tính năng Chính
|
|
|
|
1. **Corridors (Hành lang di chuyển)**
|
|
- Cho phép robot di chuyển trong các hành lang xác định
|
|
- Tăng tính linh hoạt trong navigation
|
|
- Tránh chướng ngại vật một cách tự động
|
|
- Đặc biệt hữu ích cho các robot có mức độ tự động hóa cao
|
|
|
|
2. **Map Distribution & Management (Phân phối và Quản lý Bản đồ)**
|
|
- Chuẩn hóa quy trình cập nhật và quản lý bản đồ
|
|
- Tải, kích hoạt và quản lý bản đồ điều hướng trên robot
|
|
- Hỗ trợ map versioning và updates
|
|
|
|
3. **Improved Documentation (Tài liệu Cải thiện)**
|
|
- Hình minh họa được cập nhật, dễ hiểu hơn
|
|
- Loại bỏ các điểm không rõ ràng
|
|
- Phát hành hoàn toàn bằng tiếng Anh (Single Point of Truth)
|
|
|
|
4. **Backward Compatibility (Tương thích Ngược)**
|
|
- Tương thích với version 2.0.0
|
|
- Các hệ thống hiện có có thể nâng cấp mà không gặp vấn đề
|
|
|
|
### Implementation Notes / Ghi chú Triển khai
|
|
|
|
**For RobotNet10**:
|
|
- RobotNet10 sẽ implement VDA 5050 2.1.0 với đầy đủ tính năng mới
|
|
- Corridors sẽ được tích hợp vào TrafficControl module để tăng tính linh hoạt navigation
|
|
- Map Distribution & Management sẽ được tích hợp với MapEditor module
|
|
- Tương thích ngược đảm bảo có thể làm việc với robot/hệ thống v2.0.0
|
|
|
|
**Note**: Chi tiết implementation của Corridors và Map Distribution sẽ được cập nhật trong các module documentation khi triển khai.
|
|
|
|
## 📚 VDA 5050 Standard Overview / Tổng quan Tiêu chuẩn
|
|
|
|
### Version Information
|
|
- **Current Implementation**: VDA 5050 Version 2.1.0
|
|
- **Release Date**: January 2025
|
|
- **Standard Body**: VDA (Verband der Automobilindustrie)
|
|
- **Backward Compatibility**: Compatible with version 2.0.0
|
|
- **Language**: English (first fully English release)
|
|
|
|
### Key Concepts
|
|
|
|
**AGV (Automated Guided Vehicle) / AMR (Autonomous Mobile Robot)**
|
|
- Robot di động tự động
|
|
- Nhận lệnh từ Master Control (Fleet Manager)
|
|
- Báo cáo trạng thái về Master Control
|
|
|
|
**Master Control (Fleet Manager)**
|
|
- Hệ thống điều phối robot
|
|
- Gửi orders đến robot
|
|
- Nhận state từ robot
|
|
|
|
**Order**
|
|
- Nhiệm vụ được gửi đến robot
|
|
- Bao gồm nodes (điểm đến) và edges (đường đi)
|
|
- Có thể chứa actions (hành động tại các node)
|
|
|
|
**State**
|
|
- Trạng thái hiện tại của robot
|
|
- Được gửi định kỳ và khi có thay đổi
|
|
- Bao gồm vị trí, battery, errors, etc.
|
|
|
|
## 🔄 Message Types / Các Loại Message
|
|
|
|
### 1. Order (Master Control → AGV)
|
|
|
|
**Purpose**: Gửi nhiệm vụ đến robot
|
|
|
|
**Direction**: FleetManager → RobotApp
|
|
|
|
**Topic**: `uagv/v2/{manufacturer}/{serialNumber}/order`
|
|
|
|
**Structure**:
|
|
```json
|
|
{
|
|
"headerId": 0,
|
|
"timestamp": "2025-11-12T10:30:00Z",
|
|
"version": "2.1.0",
|
|
"manufacturer": "RobotNet10",
|
|
"serialNumber": "ROBOT001",
|
|
"orderId": "ORDER-12345",
|
|
"orderUpdateId": 0,
|
|
"nodes": [
|
|
{
|
|
"nodeId": "node1",
|
|
"sequenceId": 0,
|
|
"released": true,
|
|
"nodeDescription": "Pick location",
|
|
"nodePosition": {
|
|
"x": 10.5,
|
|
"y": 20.3,
|
|
"theta": 0.0,
|
|
"allowedDeviationXY": 0.5,
|
|
"allowedDeviationTheta": 0.1,
|
|
"mapId": "factory_floor_1",
|
|
"mapDescription": "Factory Floor 1"
|
|
},
|
|
"actions": [
|
|
{
|
|
"actionType": "pick",
|
|
"actionId": "action1",
|
|
"actionDescription": "Pick pallet",
|
|
"blockingType": "HARD",
|
|
"actionParameters": [
|
|
{
|
|
"key": "stationType",
|
|
"value": "floor"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"nodeId": "node2",
|
|
"sequenceId": 2,
|
|
"released": true,
|
|
"nodePosition": {
|
|
"x": 50.0,
|
|
"y": 30.0,
|
|
"theta": 1.57,
|
|
"mapId": "factory_floor_1"
|
|
},
|
|
"actions": [
|
|
{
|
|
"actionType": "drop",
|
|
"actionId": "action2",
|
|
"blockingType": "HARD"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"edges": [
|
|
{
|
|
"edgeId": "edge1",
|
|
"sequenceId": 1,
|
|
"released": true,
|
|
"startNodeId": "node1",
|
|
"endNodeId": "node2",
|
|
"maxSpeed": 1.5,
|
|
"maxHeight": 2.0,
|
|
"minHeight": 0.0,
|
|
"orientation": 0.0,
|
|
"direction": "forward",
|
|
"rotationAllowed": true,
|
|
"maxRotationSpeed": 0.5,
|
|
"trajectory": {
|
|
"degree": 1,
|
|
"knotVector": [0, 1],
|
|
"controlPoints": [
|
|
{"x": 10.5, "y": 20.3, "weight": 1.0},
|
|
{"x": 50.0, "y": 30.0, "weight": 1.0}
|
|
]
|
|
},
|
|
"actions": []
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
**Key Fields**:
|
|
- `orderId`: Unique order identifier
|
|
- `orderUpdateId`: Increments when order is updated
|
|
- `nodes`: Array of waypoints
|
|
- `edges`: Array of paths between nodes
|
|
- `sequenceId`: Determines execution order (even for nodes, odd for edges)
|
|
|
|
### 2. InstantActions (Master Control → AGV)
|
|
|
|
**Purpose**: Gửi lệnh ngay lập tức (stop, pause, etc.)
|
|
|
|
**Direction**: FleetManager → RobotApp
|
|
|
|
**Topic**: `uagv/v2/{manufacturer}/{serialNumber}/instantActions`
|
|
|
|
**Structure**:
|
|
```json
|
|
{
|
|
"headerId": 1,
|
|
"timestamp": "2025-11-12T10:31:00Z",
|
|
"version": "2.1.0",
|
|
"manufacturer": "RobotNet10",
|
|
"serialNumber": "ROBOT001",
|
|
"instantActions": [
|
|
{
|
|
"actionType": "stopPause",
|
|
"actionId": "instant1",
|
|
"actionDescription": "Emergency pause",
|
|
"blockingType": "HARD"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
**Common InstantAction Types**:
|
|
- `stopPause`: Pause robot immediately
|
|
- `cancelOrder`: Cancel current order
|
|
- `initPosition`: Set initial position
|
|
- `stateRequest`: Request state update
|
|
|
|
### 3. State (AGV → Master Control)
|
|
|
|
**Purpose**: Báo cáo trạng thái robot
|
|
|
|
**Direction**: RobotApp → FleetManager
|
|
|
|
**Topic**: `uagv/v2/{manufacturer}/{serialNumber}/state`
|
|
|
|
**Structure**:
|
|
```json
|
|
{
|
|
"headerId": 100,
|
|
"timestamp": "2025-11-12T10:30:05Z",
|
|
"version": "2.1.0",
|
|
"manufacturer": "RobotNet10",
|
|
"serialNumber": "ROBOT001",
|
|
"orderId": "ORDER-12345",
|
|
"orderUpdateId": 0,
|
|
"zoneSetId": "zone1",
|
|
"lastNodeId": "node1",
|
|
"lastNodeSequenceId": 0,
|
|
"driving": true,
|
|
"paused": false,
|
|
"newBaseRequest": false,
|
|
"distanceSinceLastNode": 2.5,
|
|
"operatingMode": "AUTOMATIC",
|
|
"nodeStates": [
|
|
{
|
|
"nodeId": "node1",
|
|
"sequenceId": 0,
|
|
"released": true,
|
|
"nodePosition": {
|
|
"x": 10.5,
|
|
"y": 20.3,
|
|
"theta": 0.0,
|
|
"mapId": "factory_floor_1"
|
|
}
|
|
}
|
|
],
|
|
"edgeStates": [
|
|
{
|
|
"edgeId": "edge1",
|
|
"sequenceId": 1,
|
|
"released": true,
|
|
"trajectory": {}
|
|
}
|
|
],
|
|
"actionStates": [
|
|
{
|
|
"actionId": "action1",
|
|
"actionType": "pick",
|
|
"actionStatus": "FINISHED",
|
|
"resultDescription": "Successfully picked pallet"
|
|
}
|
|
],
|
|
"agvPosition": {
|
|
"x": 15.2,
|
|
"y": 22.1,
|
|
"theta": 0.15,
|
|
"mapId": "factory_floor_1",
|
|
"positionInitialized": true,
|
|
"localizationScore": 0.95,
|
|
"deviationRange": 0.1
|
|
},
|
|
"velocity": {
|
|
"vx": 1.0,
|
|
"vy": 0.0,
|
|
"omega": 0.05
|
|
},
|
|
"loads": [
|
|
{
|
|
"loadId": "pallet123",
|
|
"loadType": "EPAL",
|
|
"loadPosition": "front",
|
|
"boundingBoxReference": {
|
|
"x": 0.0,
|
|
"y": 0.0,
|
|
"z": 0.0,
|
|
"theta": 0.0
|
|
},
|
|
"loadDimensions": {
|
|
"length": 1.2,
|
|
"width": 0.8,
|
|
"height": 1.5
|
|
},
|
|
"weight": 500.0
|
|
}
|
|
],
|
|
"batteryState": {
|
|
"batteryCharge": 75.5,
|
|
"batteryVoltage": 48.2,
|
|
"batteryHealth": 95.0,
|
|
"charging": false,
|
|
"reach": 5400
|
|
},
|
|
"errors": [
|
|
{
|
|
"errorType": "warning",
|
|
"errorLevel": "WARNING",
|
|
"errorDescription": "Battery below 80%",
|
|
"errorReferences": [
|
|
{
|
|
"referenceKey": "batteryLevel",
|
|
"referenceValue": "75.5"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"information": [
|
|
{
|
|
"infoType": "info",
|
|
"infoLevel": "INFO",
|
|
"infoDescription": "Mission in progress",
|
|
"infoReferences": []
|
|
}
|
|
],
|
|
"safetyState": {
|
|
"eStop": "NONE",
|
|
"fieldViolation": false
|
|
}
|
|
}
|
|
```
|
|
|
|
**Key State Information**:
|
|
- **Position**: Current robot position and velocity
|
|
- **Order Progress**: Which node/edge is active
|
|
- **Battery**: Charge level and charging status
|
|
- **Actions**: Status of actions (WAITING, RUNNING, FINISHED, FAILED)
|
|
- **Errors**: Any errors or warnings
|
|
- **Safety**: E-stop and safety field status
|
|
|
|
### 4. Visualization (AGV → Master Control)
|
|
|
|
**Purpose**: Gửi dữ liệu để hiển thị trên bản đồ
|
|
|
|
**Direction**: RobotApp → FleetManager
|
|
|
|
**Topic**: `uagv/v2/{manufacturer}/{serialNumber}/visualization`
|
|
|
|
**Structure**:
|
|
```json
|
|
{
|
|
"headerId": 200,
|
|
"timestamp": "2025-11-12T10:30:05Z",
|
|
"version": "2.1.0",
|
|
"manufacturer": "RobotNet10",
|
|
"serialNumber": "ROBOT001",
|
|
"agvPosition": {
|
|
"x": 15.2,
|
|
"y": 22.1,
|
|
"theta": 0.15,
|
|
"mapId": "factory_floor_1",
|
|
"positionInitialized": true
|
|
},
|
|
"velocity": {
|
|
"vx": 1.0,
|
|
"vy": 0.0,
|
|
"omega": 0.05
|
|
}
|
|
}
|
|
```
|
|
|
|
### 5. Connection (Bidirectional)
|
|
|
|
**Purpose**: Heartbeat và connection status
|
|
|
|
**Direction**: Bidirectional
|
|
|
|
**Topics**:
|
|
- `uagv/v2/{manufacturer}/{serialNumber}/connection`
|
|
|
|
**Structure**:
|
|
```json
|
|
{
|
|
"headerId": 300,
|
|
"timestamp": "2025-11-12T10:30:00Z",
|
|
"version": "2.1.0",
|
|
"manufacturer": "RobotNet10",
|
|
"serialNumber": "ROBOT001",
|
|
"connectionState": "ONLINE"
|
|
}
|
|
```
|
|
|
|
**Connection States**:
|
|
- `ONLINE`: Connected and operational
|
|
- `OFFLINE`: Disconnected
|
|
- `CONNECTIONBROKEN`: Connection lost unexpectedly
|
|
|
|
## 🔌 MQTT Configuration / Cấu hình MQTT
|
|
|
|
### QoS Levels
|
|
|
|
| Message Type | QoS | Reason |
|
|
|--------------|-----|--------|
|
|
| Order | 1 | At least once delivery |
|
|
| InstantActions | 1 | At least once delivery |
|
|
| State | 0 | High frequency, latest value matters |
|
|
| Visualization | 0 | High frequency, latest value matters |
|
|
| Connection | 1 | Reliable delivery needed |
|
|
|
|
### Retain Flag
|
|
|
|
| Message Type | Retain | Reason |
|
|
|--------------|--------|--------|
|
|
| Order | false | Order-specific |
|
|
| InstantActions | false | Time-sensitive |
|
|
| State | true | Latest state available for new subscribers |
|
|
| Visualization | false | Real-time only |
|
|
| Connection | true | Connection status for new subscribers |
|
|
|
|
### Topic Wildcards
|
|
|
|
**FleetManager subscribes to all robots**:
|
|
```
|
|
uagv/v2/RobotNet10/+/state
|
|
uagv/v2/RobotNet10/+/visualization
|
|
uagv/v2/RobotNet10/+/connection
|
|
```
|
|
|
|
**RobotApp subscribes to its own topics**:
|
|
```
|
|
uagv/v2/RobotNet10/ROBOT001/order
|
|
uagv/v2/RobotNet10/ROBOT001/instantActions
|
|
```
|
|
|
|
## 🏗️ Architecture & Design / Kiến trúc & Thiết kế
|
|
|
|
### Message Flow Architecture
|
|
|
|
```mermaid
|
|
graph TB
|
|
subgraph "FleetManager"
|
|
OrderGen[Order Generator<br/>Create VDA 5050 Orders]
|
|
StateProc[State Processor<br/>Process Robot States]
|
|
ActionGen[Action Generator<br/>Generate Instant Actions]
|
|
end
|
|
|
|
subgraph "MQTT Broker"
|
|
OrderTopic[Order Topics<br/>uagv/v2/{mfr}/{serial}/order]
|
|
StateTopic[State Topics<br/>uagv/v2/{mfr}/{serial}/state]
|
|
InstantTopic[Instant Action Topics<br/>uagv/v2/{mfr}/{serial}/instantActions]
|
|
end
|
|
|
|
subgraph "RobotApp"
|
|
OrderHandler[Order Handler<br/>Process Orders]
|
|
StatePub[State Publisher<br/>Publish States]
|
|
InstantHandler[Instant Action Handler<br/>Process Immediate Commands]
|
|
end
|
|
|
|
OrderGen --> OrderTopic
|
|
OrderTopic --> OrderHandler
|
|
|
|
StatePub --> StateTopic
|
|
StateTopic --> StateProc
|
|
|
|
ActionGen --> InstantTopic
|
|
InstantTopic --> InstantHandler
|
|
|
|
style OrderGen fill:#e6f3ff
|
|
style StateProc fill:#fff0e6
|
|
style OrderHandler fill:#e6ffe6
|
|
style StatePub fill:#e6ffe6
|
|
```
|
|
|
|
### Message Processing Flow
|
|
|
|
**Order Processing**:
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant FM as FleetManager
|
|
participant MQTT as MQTT Broker
|
|
participant RA as RobotApp
|
|
participant Validator as Message Validator
|
|
participant Executor as Order Executor
|
|
|
|
FM->>MQTT: Publish Order (QoS 1)
|
|
MQTT->>RA: Forward Order
|
|
RA->>Validator: Validate Order Structure
|
|
Validator->>Validator: Check Sequence IDs<br/>Check Node/Edge Relations<br/>Check Released Flags
|
|
|
|
alt Valid Order
|
|
Validator->>Executor: Execute Order
|
|
Executor->>RA: Update State
|
|
RA->>MQTT: Publish State (QoS 0)
|
|
MQTT->>FM: Forward State
|
|
else Invalid Order
|
|
Validator->>RA: Reject Order
|
|
RA->>MQTT: Publish Error State
|
|
MQTT->>FM: Forward Error
|
|
end
|
|
```
|
|
|
|
**State Publishing**:
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
Start[State Update Trigger] --> Collect[Collect State Data<br/>Position, Battery, Order Progress]
|
|
Collect --> Validate{Validate State<br/>Required Fields Present?}
|
|
|
|
Validate -->|Valid| Build[Build VDA 5050 State Message]
|
|
Validate -->|Invalid| LogError[Log Error<br/>Skip Update]
|
|
|
|
Build --> Serialize[Serialize to JSON<br/>camelCase naming]
|
|
Serialize --> Publish[Publish to MQTT<br/>QoS 0, Retain: true]
|
|
Publish --> FleetMgr[FleetManager Receives]
|
|
|
|
FleetMgr --> UpdateDB[Update Database]
|
|
FleetMgr --> UpdateUI[Update Dashboard]
|
|
|
|
style Start fill:#e6ffe6
|
|
style Publish fill:#e6f3ff
|
|
style FleetMgr fill:#fff0e6
|
|
```
|
|
|
|
### Message Validation Architecture
|
|
|
|
```mermaid
|
|
graph TB
|
|
subgraph "Validation Layers"
|
|
SchemaVal[JSON Schema Validation<br/>Structure & Types]
|
|
BusinessVal[Business Logic Validation<br/>Sequence IDs, Relations]
|
|
StateVal[State Validation<br/>Consistency Checks]
|
|
end
|
|
|
|
IncomingMsg[Incoming Message] --> SchemaVal
|
|
SchemaVal -->|Valid| BusinessVal
|
|
SchemaVal -->|Invalid| Reject[Reject Message<br/>Log Error]
|
|
|
|
BusinessVal -->|Valid| StateVal
|
|
BusinessVal -->|Invalid| Reject
|
|
|
|
StateVal -->|Valid| Accept[Accept Message<br/>Process]
|
|
StateVal -->|Invalid| Reject
|
|
|
|
style SchemaVal fill:#e6f3ff
|
|
style BusinessVal fill:#fff0e6
|
|
style StateVal fill:#e6ffe6
|
|
style Accept fill:#e6ffe6
|
|
style Reject fill:#ffe6e6
|
|
```
|
|
|
|
## ✅ Validation & Testing / Kiểm tra & Test
|
|
|
|
### Message Validation Strategy
|
|
|
|
**Validation Layers**:
|
|
|
|
```mermaid
|
|
graph LR
|
|
subgraph "Validation Pipeline"
|
|
Schema[JSON Schema<br/>Structure & Types]
|
|
Business[Business Logic<br/>Sequence IDs, Relations]
|
|
State[State Consistency<br/>Order Progress]
|
|
end
|
|
|
|
Message[Incoming Message] --> Schema
|
|
Schema --> Business
|
|
Business --> State
|
|
State --> Process[Process Message]
|
|
|
|
Schema -->|Invalid| Error[Error Handling]
|
|
Business -->|Invalid| Error
|
|
State -->|Invalid| Error
|
|
|
|
style Schema fill:#e6f3ff
|
|
style Business fill:#fff0e6
|
|
style State fill:#e6ffe6
|
|
style Process fill:#e6ffe6
|
|
style Error fill:#ffe6e6
|
|
```
|
|
|
|
**Validation Checks**:
|
|
|
|
1. **JSON Schema Validation**:
|
|
- Use official VDA 5050 JSON schemas
|
|
- Validate structure and data types
|
|
- Check required fields
|
|
|
|
2. **Business Logic Validation**:
|
|
- Sequence IDs: Nodes (even), Edges (odd), sequential
|
|
- Node/Edge relationships: Edges connect nodes properly
|
|
- Released flags: Valid release sequence
|
|
- Order updates: orderUpdateId increments correctly
|
|
|
|
3. **State Consistency Validation**:
|
|
- Order progress matches current order
|
|
- Position matches mapId
|
|
- Action states match order actions
|
|
|
|
### Testing Strategy
|
|
|
|
**Testing Approach**:
|
|
|
|
```mermaid
|
|
graph TB
|
|
subgraph "Test Levels"
|
|
Unit[Unit Tests<br/>Message Parsing<br/>Validation Logic]
|
|
Integration[Integration Tests<br/>MQTT Communication<br/>End-to-end Flow]
|
|
Interop[Interoperability Tests<br/>Third-party Systems<br/>VDA 5050 Compliance]
|
|
end
|
|
|
|
subgraph "Test Scenarios"
|
|
Valid[Valid Messages<br/>Normal Operation]
|
|
Invalid[Invalid Messages<br/>Error Handling]
|
|
EdgeCases[Edge Cases<br/>Order Updates<br/>Disconnections]
|
|
end
|
|
|
|
Unit --> Valid
|
|
Unit --> Invalid
|
|
Integration --> Valid
|
|
Integration --> EdgeCases
|
|
Interop --> Valid
|
|
|
|
style Unit fill:#e6f3ff
|
|
style Integration fill:#fff0e6
|
|
style Interop fill:#e6ffe6
|
|
```
|
|
|
|
**Key Test Scenarios**:
|
|
|
|
1. **Order Handling**:
|
|
- Valid order acceptance
|
|
- Invalid order rejection
|
|
- Order update handling (same orderId, higher orderUpdateId)
|
|
- Order replacement (new orderId)
|
|
- Sequence ID ordering
|
|
- Released vs unreleased nodes/edges
|
|
|
|
2. **State Reporting**:
|
|
- Publishing frequency (1-10 Hz)
|
|
- Required fields present
|
|
- Position accuracy
|
|
- Battery state correctness
|
|
- Action state updates
|
|
- Error reporting
|
|
|
|
3. **Instant Actions**:
|
|
- stopPause immediate response (< 50ms)
|
|
- cancelOrder order cancellation
|
|
- Resume after pause
|
|
|
|
4. **Connection Management**:
|
|
- MQTT disconnection handling
|
|
- Auto-reconnection
|
|
- Missed message handling
|
|
- Connection state reporting
|
|
|
|
5. **Interoperability**:
|
|
- Third-party Fleet Manager compatibility
|
|
- Third-party robot compatibility
|
|
- VDA 5050 conformance validation
|
|
|
|
## 📊 Monitoring & Debugging / Giám sát & Debug
|
|
|
|
### Monitoring Architecture
|
|
|
|
```mermaid
|
|
graph TB
|
|
subgraph "Monitoring Tools"
|
|
MQTTTools[MQTT Monitoring Tools<br/>MQTT Explorer<br/>mosquitto_sub]
|
|
Logging[Structured Logging<br/>Message Events<br/>Error Tracking]
|
|
Metrics[Metrics Collection<br/>Message Rates<br/>Latency Tracking]
|
|
end
|
|
|
|
subgraph "Monitoring Points"
|
|
OrderFlow[Order Flow<br/>Publish/Receive<br/>Processing Time]
|
|
StateFlow[State Flow<br/>Publish Frequency<br/>Update Latency]
|
|
ErrorTracking[Error Tracking<br/>Validation Failures<br/>Connection Issues]
|
|
end
|
|
|
|
MQTTTools --> OrderFlow
|
|
MQTTTools --> StateFlow
|
|
Logging --> ErrorTracking
|
|
Metrics --> OrderFlow
|
|
Metrics --> StateFlow
|
|
|
|
style MQTTTools fill:#e6f3ff
|
|
style Logging fill:#fff0e6
|
|
style Metrics fill:#e6ffe6
|
|
```
|
|
|
|
### Monitoring Strategy
|
|
|
|
**MQTT Monitoring**:
|
|
- Use MQTT Explorer GUI tool để view topics
|
|
- Monitor message flow với `mosquitto_sub`
|
|
- Track message rates và latency
|
|
|
|
**Logging Approach**:
|
|
- Structured logging với parameters
|
|
- Log message events (receive, publish)
|
|
- Track validation failures
|
|
- Monitor connection status
|
|
|
|
**Key Metrics**:
|
|
- Message processing time
|
|
- State update frequency
|
|
- Error rates
|
|
- Connection stability
|
|
|
|
## 🔄 Common Scenarios / Các Tình huống Thường gặp
|
|
|
|
### Scenario 1: Simple Transport Mission
|
|
|
|
**FleetManager sends**:
|
|
```json
|
|
{
|
|
"orderId": "TRANSPORT-001",
|
|
"orderUpdateId": 0,
|
|
"nodes": [
|
|
{"nodeId": "A", "sequenceId": 0, "released": true, "nodePosition": {...}},
|
|
{"nodeId": "B", "sequenceId": 2, "released": true, "nodePosition": {...}}
|
|
],
|
|
"edges": [
|
|
{"edgeId": "A-B", "sequenceId": 1, "released": true,
|
|
"startNodeId": "A", "endNodeId": "B"}
|
|
]
|
|
}
|
|
```
|
|
|
|
**RobotApp executes**:
|
|
1. Receives order
|
|
2. Moves to node A (sequenceId 0)
|
|
3. Reaches node A, updates state (lastNodeId = "A", lastNodeSequenceId = 0)
|
|
4. Follows edge A-B (sequenceId 1)
|
|
5. Reaches node B (sequenceId 2)
|
|
6. Updates state (lastNodeId = "B", lastNodeSequenceId = 2, driving = false)
|
|
|
|
### Scenario 2: Pick and Place with Actions
|
|
|
|
**FleetManager sends**:
|
|
```json
|
|
{
|
|
"orderId": "PICK-PLACE-001",
|
|
"orderUpdateId": 0,
|
|
"nodes": [
|
|
{
|
|
"nodeId": "PICK",
|
|
"sequenceId": 0,
|
|
"released": true,
|
|
"actions": [
|
|
{"actionId": "pick1", "actionType": "pick", "blockingType": "HARD"}
|
|
]
|
|
},
|
|
{
|
|
"nodeId": "DROP",
|
|
"sequenceId": 2,
|
|
"released": true,
|
|
"actions": [
|
|
{"actionId": "drop1", "actionType": "drop", "blockingType": "HARD"}
|
|
]
|
|
}
|
|
],
|
|
"edges": [...]
|
|
}
|
|
```
|
|
|
|
**RobotApp executes**:
|
|
1. Moves to PICK node
|
|
2. Executes pick action (actionStates: RUNNING → FINISHED)
|
|
3. Moves to DROP node
|
|
4. Executes drop action
|
|
5. Reports completion
|
|
|
|
### Scenario 3: Order Update (Add Waypoint)
|
|
|
|
**Initial order**:
|
|
```json
|
|
{"orderId": "ORD-001", "orderUpdateId": 0, "nodes": ["A", "B"]}
|
|
```
|
|
|
|
**Updated order** (add node C):
|
|
```json
|
|
{"orderId": "ORD-001", "orderUpdateId": 1, "nodes": ["A", "B", "C"]}
|
|
```
|
|
|
|
**RobotApp behavior**:
|
|
- Recognize same orderId with higher orderUpdateId
|
|
- Continue current node/edge
|
|
- Append new nodes to plan
|
|
- Update state with new orderUpdateId
|
|
|
|
### Scenario 4: Emergency Stop
|
|
|
|
**FleetManager sends InstantAction**:
|
|
```json
|
|
{
|
|
"instantActions": [
|
|
{"actionId": "stop1", "actionType": "stopPause", "blockingType": "HARD"}
|
|
]
|
|
}
|
|
```
|
|
|
|
**RobotApp behavior**:
|
|
1. Immediately stop motion
|
|
2. Set `paused = true` in state
|
|
3. Continue publishing state
|
|
4. Wait for resume command
|
|
|
|
## 📚 References / Tài liệu Tham khảo
|
|
|
|
### Official VDA 5050 Resources
|
|
|
|
- **Specification**: VDA 5050 v2.1.0 (English - first fully English release)
|
|
- **JSON Schemas**: Official schemas for validation
|
|
- **GitHub**: https://github.com/VDA5050/VDA5050
|
|
- **Release Notes**: Check GitHub releases for 2.1.0 changes
|
|
|
|
### Recommended Reading
|
|
|
|
1. VDA 5050 Specification Document (Main reference)
|
|
2. VDA 5050 FAQ and Best Practices
|
|
3. MQTT Protocol Specification v3.1.1 / v5.0
|
|
4. JSON Schema Specification
|
|
|
|
### Community & Support
|
|
|
|
- VDA 5050 Working Group
|
|
- Industrial automation forums
|
|
- GitHub discussions
|
|
|
|
## 📖 Related Documents / Tài liệu Liên quan
|
|
|
|
- [Architecture Overview](../architecture/README.md)
|
|
- [RobotApp Implementation](../robotapp/README.md)
|
|
- [FleetManager Implementation](../fleetmanager/README.md)
|
|
- [MQTT Configuration Guide](mqtt-configuration.md) (TBD)
|
|
|
|
---
|
|
|
|
**VDA 5050 Version**: 2.1.0
|
|
**Implementation Status**: Design Phase
|
|
**Last Updated**: 2025-11-13
|
|
**Release Date**: January 2025
|