385 lines
8.6 KiB
Markdown
385 lines
8.6 KiB
Markdown
# Mock 服务设计与使用说明
|
||
|
||
## 1. 概述
|
||
|
||
Mock 服务用于模拟机场场面的移动物体(航空器和车辆),提供位置更新和响应控制指令的功能。服务包含两个主要部分:
|
||
|
||
- HTTP API 服务:提供位置查询和车辆控制接口
|
||
- 位置更新模拟:定期更新各个移动物体的位置
|
||
|
||
## 2. 移动物体配置
|
||
|
||
### 2.1 航空器配置
|
||
|
||
```python
|
||
{
|
||
"flightNo": "AC001", # 航班号
|
||
"latitude": 36.362647780875804, # 纬度
|
||
"longitude": 120.088303, # 经度
|
||
"direction": { # 使用方向向量
|
||
"lat": initial_target_lat,
|
||
"lon": initial_target_lon
|
||
},
|
||
"speed": 50.0 # 滑行速度 50km/h
|
||
}
|
||
```
|
||
|
||
### 2.2 车辆配置
|
||
|
||
```python
|
||
{
|
||
"vehicleNo": "QN001", # 无人车1(西路口)
|
||
"latitude": WEST_INTERSECTION["latitude"], # 纬度
|
||
"longitude": WEST_INTERSECTION["longitude"], # 经度
|
||
"direction": 1, # 1表示向东,-1表示向西
|
||
"speed": 36.0 # 行驶速度 36km/h
|
||
}
|
||
```
|
||
|
||
### 2.3 关键坐标点
|
||
|
||
- T1 (120.0868853, 36.35496367): 无人车1起点
|
||
- T2 (120.08502054, 36.35448347): 冲突点1,西路口
|
||
- T3 (120.08341044, 36.35406879): 特勤车终点
|
||
- T4 (120.08558121, 36.35305878): 无人车1终点/无人车2起点/特勤车起点
|
||
- T5 (120.08400957, 36.35265197)
|
||
- T6 (120.08649105, 36.35074527): 冲突点2,东路口
|
||
- T7 (120.08562915, 36.35052372): 航空器1终点
|
||
- T8 (120.08676664, 36.35004529): 无人车2终点
|
||
- T9 (120.08520616, 36.34964473)
|
||
- T10 (120.08710569, 36.34917893)
|
||
- T11 (120.0873865, 36.3509885): 航空器1终点
|
||
- T12 (120.08603613, 36.35190217): QN002新起点(距T6路口150米)
|
||
|
||
## 3. 运动模式
|
||
|
||
### 3.1 航空器运动
|
||
|
||
- 沿跑道南北方向移动
|
||
- 到达边界时自动调头
|
||
- 保持恒定速度 50km/h
|
||
|
||
### 3.2 无人车运动
|
||
|
||
- QN001:
|
||
1. T1 -> T2(西路口)
|
||
2. T2 -> T4
|
||
3. 到达T4后返回T1
|
||
|
||
- QN002:
|
||
1. T12 -> T8
|
||
2. 到达T8后返回T12
|
||
|
||
- TQ001(特勤车):
|
||
1. T4 -> T2(西路口)
|
||
2. T2 -> T3
|
||
3. 到达T3后返回T4
|
||
|
||
### 3.3 配置参数
|
||
|
||
- 距离阈值:
|
||
- 300米:DIST_300M
|
||
- 200米:DIST_200M
|
||
- 150米:DIST_150M
|
||
- 100米:DIST_100M
|
||
- 50米:DIST_50M
|
||
|
||
- 时间配置:
|
||
- 返回等待时间:10秒
|
||
- 位置更新间隔:1秒
|
||
- 红绿灯切换间隔:10秒
|
||
|
||
- 速度配置:
|
||
- 默认车辆速度:18.0 km/h
|
||
- 紧急制动减速度:80%/更新
|
||
- 正常制动减速度:20%/更新
|
||
|
||
## 4. HTTP API 接口
|
||
|
||
### 4.1 航空器位置查询接口
|
||
|
||
```http
|
||
GET /api/getCurrentFlightPositions
|
||
```
|
||
|
||
返回所有移动物体的当前位置信息:
|
||
|
||
```json
|
||
[
|
||
{
|
||
"flightNo": "AC001",
|
||
"latitude": 36.362647780875804,
|
||
"longitude": 120.088303,
|
||
"direction": {
|
||
"lat": 0.707,
|
||
"lon": 0.707
|
||
},
|
||
"speed": 36.0,
|
||
"time": 1733741411167
|
||
}
|
||
]
|
||
```
|
||
|
||
### 4.2 车辆位置查询接口
|
||
|
||
```http
|
||
GET /api/getCurrentVehiclePositions
|
||
```
|
||
|
||
返回所有车辆的当前位置信息:
|
||
|
||
```json
|
||
[
|
||
{
|
||
"vehicleNo": "QN001",
|
||
"latitude": 36.362448155990975,
|
||
"longitude": 120.08844920958369,
|
||
"direction": -1,
|
||
"speed": 18.0,
|
||
"time": 1733741411168,
|
||
"phase": 0
|
||
}
|
||
]
|
||
```
|
||
|
||
### 4.3 红绿灯状态查询接口
|
||
|
||
```http
|
||
GET /api/getTrafficLightSignals
|
||
```
|
||
|
||
返回所有红绿灯的当前状态:
|
||
|
||
```json
|
||
[
|
||
{
|
||
"id": "TL001",
|
||
"state": 1,
|
||
"timestamp": 1733741411167,
|
||
"intersection": "INT001",
|
||
"position": {
|
||
"latitude": 36.35448347,
|
||
"longitude": 120.08502054
|
||
}
|
||
}
|
||
]
|
||
```
|
||
|
||
### 4.4 车辆控制接口
|
||
|
||
```http
|
||
POST /api/vehicle/command
|
||
Content-Type: application/json
|
||
```
|
||
|
||
请求格式:
|
||
|
||
```json
|
||
{
|
||
"vehicleId": "QN001",
|
||
"type": "SIGNAL", // SIGNAL, ALERT, WARNING, RESUME
|
||
"reason": "TRAFFIC_LIGHT", // TRAFFIC_LIGHT, AIRCRAFT_CROSSING, SPECIAL_VEHICLE, AIRCRAFT_PUSH, RESUME_TRAFFIC
|
||
"timestamp": 1733741411167,
|
||
"signalState": "RED", // 可选,仅当 type 为 SIGNAL 时需要
|
||
"targetPosition": { // 可选
|
||
"x": 100.0,
|
||
"y": 200.0
|
||
},
|
||
"speed": 0.0, // 可选
|
||
"distance": 0.0 // 可选
|
||
}
|
||
```
|
||
|
||
响应格式:
|
||
|
||
```json
|
||
{
|
||
"status": "ok", // ok 或 error
|
||
"message": "Command executed successfully"
|
||
}
|
||
```
|
||
|
||
## 5. 指令优先级
|
||
|
||
车辆控制指令按以下优先级处理:
|
||
|
||
1. ALERT (5):告警指令,最高优先级
|
||
- 用于紧急情况,如碰撞风险
|
||
- 可以覆盖所有其他指令
|
||
- 收到后车辆立即停止
|
||
|
||
2. RED (4):红灯指令,次高优先级
|
||
- 用于红绿灯控制
|
||
- 可以覆盖预警、绿灯和恢复指令
|
||
- 红灯时车辆停止,绿灯时可能恢复(取决于是否有更高优先级指令)
|
||
|
||
3. WARNING (3):预警指令,中等优先级
|
||
- 用于提前预警可能的风险
|
||
- 可以覆盖绿灯和恢复指令
|
||
- 收到后车辆减速或停止
|
||
|
||
4. GREEN (2):绿灯状态
|
||
- 系统内部状态,不是外部指令
|
||
- 可以覆盖恢复指令
|
||
- 只有在没有更高优先级指令时才生效
|
||
|
||
5. RESUME (1):恢复指令,最低优先级
|
||
- 用于恢复正常行驶
|
||
- 不能覆盖其他指令
|
||
- 只有在没有任何其他指令时才生效
|
||
|
||
### 5.1 优先级规则
|
||
|
||
1. 高优先级指令可以覆盖低优先级指令
|
||
2. 相同优先级的新指令可以覆盖旧指令
|
||
3. 低优先级指令不能覆盖高优先级指令
|
||
4. 恢复行驶需要满足个条件:
|
||
- 收到 RESUME 指令
|
||
- 没有任何更高优先级的指令
|
||
|
||
### 5.2 状态转换
|
||
|
||
1. 收到告警指令 (ALERT):
|
||
- 立即停止
|
||
- 忽略所有低优先级指令
|
||
- 只能通过 RESUME 指令恢复(且无其他高优先级指令)
|
||
|
||
2. 收到红灯指令 (RED):
|
||
- 红灯:停止
|
||
- 绿灯:如果没有更高优先级指令(ALERT)则恢复行驶
|
||
|
||
3. 收到预警指令 (WARNING):
|
||
- 减速或停止
|
||
- 可被告警或红灯指令覆盖
|
||
- 可通过绿灯或恢复指令解除(如无更高优先级指令)
|
||
|
||
4. 遇到绿灯 (GREEN):
|
||
- 如果没有 ALERT、SIGNAL 或 WARNING 指令,则恢复行驶
|
||
- 否则保持当前状态
|
||
|
||
5. 收到恢复指令 (RESUME):
|
||
- 检查是否有任何更高优先级指令
|
||
- 如果没有,则恢复正常行驶速度
|
||
- 如果有,则保持当前状态
|
||
|
||
### 5.3 使用示例
|
||
|
||
1. 告警指令覆盖其他指令:
|
||
|
||
```json
|
||
{
|
||
"vehicleId": "QN001",
|
||
"type": "ALERT",
|
||
"reason": "COLLISION_RISK",
|
||
"timestamp": 1733741411167
|
||
}
|
||
```
|
||
|
||
2. 红灯指令(但不会覆盖告警):
|
||
|
||
```json
|
||
{
|
||
"vehicleId": "QN001",
|
||
"type": "SIGNAL",
|
||
"reason": "TRAFFIC_LIGHT",
|
||
"signalState": "RED",
|
||
"timestamp": 1733741411167
|
||
}
|
||
```
|
||
|
||
3. 预警指令(可被告警和红灯覆盖):
|
||
|
||
```json
|
||
{
|
||
"vehicleId": "QN001",
|
||
"type": "WARNING",
|
||
"reason": "APPROACHING_INTERSECTION",
|
||
"timestamp": 1733741411167
|
||
}
|
||
```
|
||
|
||
4. 恢复指令(需要无更高优先级指令):
|
||
|
||
```json
|
||
{
|
||
"vehicleId": "QN001",
|
||
"type": "RESUME",
|
||
"reason": "RESUME_TRAFFIC",
|
||
"timestamp": 1733741411167
|
||
}
|
||
```
|
||
|
||
## 6. 使用示例
|
||
|
||
### 6.1 发送红绿灯指令
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8081/api/vehicle/command \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"vehicleId": "QN001",
|
||
"type": "SIGNAL",
|
||
"reason": "TRAFFIC_LIGHT",
|
||
"timestamp": 1733741411167,
|
||
"signalState": "RED"
|
||
}'
|
||
```
|
||
|
||
### 6.2 发送碰撞预警指令
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8081/api/vehicle/command \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"vehicleId": "QN001",
|
||
"type": "WARNING",
|
||
"reason": "AIRCRAFT_CROSSING",
|
||
"timestamp": 1733741411167,
|
||
"distance": 25.5
|
||
}'
|
||
```
|
||
|
||
### 6.3 发送恢复指令
|
||
|
||
```bash
|
||
curl -X POST http://localhost:8081/api/vehicle/command \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"vehicleId": "QN001",
|
||
"type": "RESUME",
|
||
"reason": "RESUME_TRAFFIC",
|
||
"timestamp": 1733741411167
|
||
}'
|
||
```
|
||
|
||
## 7. 启动服务
|
||
|
||
```bash
|
||
# 安装依赖
|
||
pip install flask
|
||
|
||
# 启动服务
|
||
python tools/mock_server.py
|
||
```
|
||
|
||
服务默认监听在:
|
||
|
||
- HTTP 服务:<http://localhost:8081>
|
||
|
||
## 8. 注意事项
|
||
|
||
1. 位置更新
|
||
- 位置更新频率:1秒一次
|
||
- 坐标系统:WGS84
|
||
- 速度单位:km/h(内部计算使用 m/s)
|
||
|
||
2. 车辆控制
|
||
- 车辆收到停止指令后会立即停止位置更新
|
||
- 只有收到 RESUME 指令且没有更高优先级的指令时才会恢复运动
|
||
- 每个指令都必须包含时间戳
|
||
|
||
3. 错误处理
|
||
- 无效的车辆ID:返回 404 错误
|
||
- 无效的指令格式:返回 400 错误
|
||
- 服务器内部错误:返回 500 错误
|