diff --git a/docs/deployment_guide.md b/docs/deployment_guide.md index c0bbf54..fd15541 100644 --- a/docs/deployment_guide.md +++ b/docs/deployment_guide.md @@ -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. 执行部署脚本 diff --git a/docs/design.md b/docs/design.md index 6205989..1839a97 100644 --- a/docs/design.md +++ b/docs/design.md @@ -615,7 +615,7 @@ while (total_read < content_length) { - 验证位置历史记录 3. 数据有效性测试 - - 测试航空器数据 + - 测试航��器数据 - 测试车辆数据 - 验证速度和位置限制 @@ -662,7 +662,7 @@ while (total_read < content_length) { 1. 航空器数据 - 基于青岛胶东机场坐标 - - 模拟��面滑行场景 + - 模拟地面滑行场景 - 生成连续位置点 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. 后续优化建议 + +- 简化部署步骤,减少人工干预 +- 添加部署回滚机制 +- 添加部署验证步骤 +- 完善部署文档 +- 简化部署步骤,减少人工干预 +- 添加部署回滚机制 +- 添加部署验证步骤 +- 完善部署文档 diff --git a/docs/docker_deployment_design.md b/docs/docker_deployment_design.md new file mode 100644 index 0000000..28ee624 --- /dev/null +++ b/docs/docker_deployment_design.md @@ -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. 启动���务 + +```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. 处理方法 + +- 检查容器日志 +- 验证配置文件 +- 检查��源使用 +- 查看系统日志 + +## 维护计划 + +### 1. 日常维护 + +- 日志清理 +- 磁盘空间检查 +- 性能监控 +- 配置备份 + +### 2. 定期更新 + +- 安全补丁更新 +- 基础镜像更新 +- 应用版本更新 diff --git a/docs/mock_server.md b/docs/mock_server.md index f23120c..b2225b9 100644 --- a/docs/mock_server.md +++ b/docs/mock_server.md @@ -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 指令 - 没有任何更高优先级的指令