更新文档

This commit is contained in:
Tian jianyong 2024-12-23 10:06:34 +08:00
parent 0ef2235a66
commit 66f3ce92d6
4 changed files with 410 additions and 61 deletions

View File

@ -24,16 +24,16 @@
1. 获取项目代码
```bash
git clone [项目仓库地址]
cd CollisionAvoidance
```
```bash
git clone [项目仓库地址]
cd CollisionAvoidance
```
2. 执行部署脚本
```bash
sudo ./scripts/deploy.sh
```
```bash
sudo ./scripts/deploy.sh
```
## 离线部署
@ -43,16 +43,16 @@ sudo ./scripts/deploy.sh
1. 在有网络的 CentOS 环境中,获取项目代码
```bash
git clone [项目仓库地址]
cd CollisionAvoidance
```
```bash
git clone [项目仓库地址]
cd CollisionAvoidance
```
2. 执行离线包准备脚本
```bash
./scripts/prepare_offline_packages.sh
```
```bash
./scripts/prepare_offline_packages.sh
```
脚本会自动完成:
@ -64,28 +64,28 @@ cd CollisionAvoidance
1. 将生成的归档文件传输到目标服务器
```bash
scp ../CollisionAvoidance.tar.gz root@target-server:/tmp/
```
```bash
scp ../CollisionAvoidance.tar.gz root@target-server:/tmp/
```
2. 在目标服务器上解压
```bash
cd /tmp
tar xzf CollisionAvoidance.tar.gz
cd CollisionAvoidance
```
```bash
cd /tmp
tar xzf CollisionAvoidance.tar.gz
cd CollisionAvoidance
```
3. 删除 32 位依赖包
> 注意:由于系统是 64 位架构,我们需要删除所有 32 位i686的依赖包以避免安装冲突。这些包是在准备离线包时自动下载的但在 64 位系统上不需要。
> 注意:由于系统是 64 位架构,我们需要删除所有 32 位i686的依赖包以避免安装冲突。这些包是在准备离线包时自动下载的但在 64 位系统上不需要。
```bash
# 删除所有 i686 架构的包
cd packages
rm -f *i686.rpm
cd ..
```
```bash
# 删除所有 i686 架构的包
cd packages
rm -f *i686.rpm
cd ..
```
4. 执行部署脚本

View File

@ -615,7 +615,7 @@ while (total_read < content_length) {
- 验证位置历史记录
3. 数据有效性测试
- 测试航器数据
- 测试航<EFBFBD><EFBFBD>器数据
- 测试车辆数据
- 验证速度和位置限制
@ -662,7 +662,7 @@ while (total_read < content_length) {
1. 航空器数据
- 基于青岛胶东机场坐标
- 模拟<EFBFBD><EFBFBD>面滑行场景
- 模拟面滑行场景
- 生成连续位置点
2. 车辆数据
@ -840,3 +840,37 @@ void sendCommand(const ControlCommand& command, const std::string& ip, int port)
```
使用 HTTP 客户端库,向可控车辆发送 POST 请求。请求路径为 `/command`,请求体为控制指令的 JSON 表示。根据响应状态码判断指令是否发送成功。
## 遗留问题
### 1. Python 包依赖问题
- 当前部署脚本在 Python 3.6 环境下存在依赖问题
- 需要添加 importlib-metadata 和 zipp 包
- 需要调整包版本以兼容 Python 3.6
- 考虑使用系统自带的 Python 包替代 pip 安装
### 2. 部署脚本改进
- prepare_deploy.sh 中下载 Python 包时需要包含所有依赖
- deploy.sh 中需要按正确顺序安装 Python 包
- 考虑使用 requirements.txt 管理 Python 依赖
- 需要优化部署脚本的错误处理和日志输出
### 3. 生产环境适配
- 需要适配离线环境的部署需求
- 需要完善 SELinux 相关的配置
- 需要优化日志文件的管理
- 需要完善服务启动失败的故障排查机制
### 4. 后续优化建议
- 简化部署步骤,减少人工干预
- 添加部署回滚机制
- 添加部署验证步骤
- 完善部署文档
- 简化部署步骤,减少人工干预
- 添加部署回滚机制
- 添加部署验证步骤
- 完善部署文档

View File

@ -0,0 +1,232 @@
# Docker 部署设计文档
本文档详细说明碰撞避免系统的 Docker 部署方案,包括测试环境和生产环境的部署流程。
## 环境说明
### 测试环境
- CentOS 7
- 可以访问互联网
- 可以安装软件包
- 内存 >= 4GB
- 磁盘空间 >= 20GB
### 生产环境
- CentOS 7
- 不能访问互联网
- 不能在线安装软件包
- 内存 >= 8GB
- 磁盘空间 >= 50GB
## 测试环境工作
### 1. 环境准备
```bash
# 安装 Docker
curl -fsSL https://get.docker.com | sh
systemctl enable docker
systemctl start docker
# 安装 Docker Compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
```
### 2. 镜像构建与测试
1. 构建基础镜像
2. 运行自动化测试
3. 验证功能完整性
4. 检查资源使用情况
5. 验证日志收集
6. 测试健康检查机制
### 3. 准备生产部署包
1. 导出 Docker 镜像
```bash
# 保存基础镜像
docker save centos:7 > centos7-base.tar
# 保存应用镜像
docker save collision-avoidance:latest > collision-avoidance.tar
```
2. 准备离线安装包
```bash
# 创建部署包目录
mkdir -p offline-package
cd offline-package
# 下载 Docker 离线安装包
yum install -y yum-utils
yumdownloader --resolve docker-ce docker-ce-cli containerd.io
# 下载 Docker Compose 二进制文件
wget https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
```
3. 创建部署脚本
```bash
# 打包所有文件
tar czf docker-deploy-package.tar.gz \
centos7-base.tar \
collision-avoidance.tar \
*.rpm \
docker-compose-Linux-x86_64 \
scripts/
```
## 生产环境工作
### 1. 离线安装 Docker
```bash
# 解压部署包
tar xzf docker-deploy-package.tar.gz
# 安装 Docker RPM 包
rpm -ivh *.rpm
# 安装 Docker Compose
cp docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 启动 Docker 服务
systemctl enable docker
systemctl start docker
```
### 2. 加载 Docker 镜像
```bash
# 加载基础镜像
docker load < centos7-base.tar
# 加载应用镜像
docker load < collision-avoidance.tar
```
### 3. 部署配置
1. 创建数据目录
```bash
mkdir -p /data/collision-avoidance/{config,logs}
```
2. 配置文件准备
```bash
cp config/* /data/collision-avoidance/config/
```
### 4. 启动<E590AF><E58AA8><EFBFBD>
```bash
docker-compose up -d
```
## 部署后验证
### 1. 基础检查
- 容器状态
- 端口可用性
- 日志输出
- 资源使用情况
### 2. 功能验证
- WebSocket 连接测试
- Mock Server 功能测试
- 碰撞检测功能测试
- 数据持久化验证
### 3. 监控检查
- 健康检查状态
- 资源监控指标
- 日志收集状态
## 回滚方案
### 1. 准备回滚镜像
- 在测试环境保留上一个稳定版本镜像
- 将回滚镜像包含在部署包中
### 2. 回滚步骤
```bash
# 停止当前服务
docker-compose down
# 加载回滚镜像
docker load < collision-avoidance-rollback.tar
# 修改镜像标签
docker tag collision-avoidance-rollback:latest collision-avoidance:latest
# 重启服务
docker-compose up -d
```
## 注意事项
### 1. 安全考虑
- 使用非 root 用户运行容器
- 配置文件权限控制
- 网络访问限制
- 资源限制设置
### 2. 性能优化
- 容器资源限制配置
- 日志轮转策略
- 数据持久化方案
### 3. 运维建议
- 定期备份配置文件
- 监控告警配置
- 日志管理策略
- 定期检查磁盘使用情况
## 故障处理
### 1. 常见问题
- 容器启动失败
- 端口冲突
- 资源不足
- 日志异常
### 2. 处理方法
- 检查容器日志
- 验证配置文件
- 检查<E6A380><E69FA5>源使用
- 查看系统日志
## 维护计划
### 1. 日常维护
- 日志清理
- 磁盘空间检查
- 性能监控
- 配置备份
### 2. 定期更新
- 安全补丁更新
- 基础镜像更新
- 应用版本更新

View File

@ -16,7 +16,10 @@ Mock 服务用于模拟机场场面的移动物体(航空器和车辆),提
"flightNo": "AC001", # 航班号
"latitude": 36.362647780875804, # 纬度
"longitude": 120.088303, # 经度
"direction": 1, # 1表示向北
"direction": { # 使用方向向量
"lat": initial_target_lat,
"lon": initial_target_lon
},
"speed": 50.0 # 滑行速度 50km/h
}
```
@ -33,6 +36,21 @@ Mock 服务用于模拟机场场面的移动物体(航空器和车辆),提
}
```
### 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 航空器运动
@ -43,46 +61,111 @@ Mock 服务用于模拟机场场面的移动物体(航空器和车辆),提
### 3.2 无人车运动
- QN001在西路口东西向往返范围 50 米
- QN002在东路口东西方向往返范围 100-150 米
- TQ001先东西移动到达指定位置后转向南北移动然后返回
- 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 位置查询接口
### 4.1 航空器位置查询接口
```http
GET /api/position
GET /api/getCurrentFlightPositions
```
返回所有移动物体的当前位置信息:
```json
{
"aircraft": [
{
"flightNo": "AC001",
"latitude": 36.362647780875804,
"longitude": 120.088303,
"heading": 0.0,
"speed": 13.89,
"timestamp": 1733741411167
}
],
"vehicles": [
{
"vehicleNo": "QN001",
"latitude": 36.362448155990975,
"longitude": 120.08844920958369,
"heading": 90.0,
"speed": 10.0,
"timestamp": 1733741411168
}
]
}
[
{
"flightNo": "AC001",
"latitude": 36.362647780875804,
"longitude": 120.088303,
"direction": {
"lat": 0.707,
"lon": 0.707
},
"speed": 36.0,
"time": 1733741411167
}
]
```
### 4.2 车辆控制接口
### 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
@ -150,7 +233,7 @@ Content-Type: application/json
1. 高优先级指令可以覆盖低优先级指令
2. 相同优先级的新指令可以覆盖旧指令
3. 低优先级指令不能覆盖高优先级指令
4. 恢复行驶需要满足个条件:
4. 恢复行驶需要满足个条件:
- 收到 RESUME 指令
- 没有任何更高优先级的指令