一、项目简介
自动驾驶系统通常包含环境感知、路径规划、行为决策和车辆控制等环节。本文实现一个面向学习和课程设计的 Python 全栈项目:基于深度学习的自动驾驶模拟系统。项目不是只停留在算法概念,而是提供完整的后端接口、SQLite 数据库存储、用户注册登录、Token 鉴权、Vue 3 前端交互页面和可运行源码。
系统允许用户注册登录后创建自动驾驶测试场景,例如城市道路、高速道路、雨天、雾天、夜间、不同交通密度与速度限制。后端使用一个轻量化深度学习推理模拟器,对场景进行车道线置信度、障碍物评分、碰撞风险评估,并给出驾驶建议。
二、技术栈
- 后端:Python 3、FastAPI、SQLAlchemy、Pydantic
- 数据库:SQLite
- 认证鉴权:passlib bcrypt 密码哈希、python-jose JWT Token
- 前端:Vue 3 + Vite
- 接口通信:Fetch API、Bearer Token
- 打包部署:uvicorn、npm、zip 源码归档
三、系统架构
Vue 3 前端
├─ 注册/登录页
├─ 自动驾驶场景创建
├─ 仿真结果看板
└─ Token 鉴权请求
│ HTTP JSON
FastAPI 后端
├─ auth:注册、登录、当前用户
├─ scenarios:场景管理
├─ runs:仿真运行与历史结果
└─ dashboard:统计看板
│ SQLAlchemy ORM
SQLite 数据库
├─ users
├─ scenarios
└─ simulation_runs
整体采用前后端分离架构。前端只负责页面展示和交互,后端负责业务逻辑、鉴权、数据持久化和仿真推理。
四、功能模块
-
用户模块
- 用户注册
- 用户登录
- bcrypt 密码哈希
- JWT Token 签发
- 登录状态恢复与退出登录
-
自动驾驶场景模块
- 创建测试场景
- 设置道路类型、天气、交通密度、最高速度
- 查询当前用户的场景列表
-
深度学习模拟模块
- 模拟车道线识别置信度
- 模拟障碍物评分
- 计算碰撞风险
- 生成驾驶动作建议
- 保存虚拟传感器时序数据
-
数据看板模块
- 统计场景数
- 统计仿真次数
- 计算平均碰撞风险
- 展示最近仿真记录
五、数据库/数据模型设计
项目使用 SQLite,核心表如下。
users 表
| 字段 | 说明 |
|---|---|
| id | 用户 ID |
| username | 用户名,唯一 |
| hashed_password | bcrypt 哈希后的密码 |
| created_at | 注册时间 |
scenarios 表
| 字段 | 说明 |
|---|---|
| id | 场景 ID |
| name | 场景名称 |
| road_type | 道路类型 |
| weather | 天气 |
| traffic_density | 交通密度,0 到 1 |
| max_speed | 最高速度 |
| description | 场景描述 |
| owner_id | 所属用户 |
simulation_runs 表
| 字段 | 说明 |
|---|---|
| id | 仿真记录 ID |
| scenario_id | 关联场景 |
| owner_id | 所属用户 |
| model_name | 模型名称 |
| lane_confidence | 车道线置信度 |
| obstacle_score | 障碍评分 |
| collision_risk | 碰撞风险 |
| suggested_action | 建议动作 |
| telemetry_json | 虚拟传感器时序数据 |
六、后端接口设计
| 方法 | 路径 | 说明 | 是否鉴权 |
|---|---|---|---|
| GET | /api/health | 健康检查 | 否 |
| POST | /api/auth/register | 注册并返回 Token | 否 |
| POST | /api/auth/login | 登录并返回 Token | 否 |
| GET | /api/auth/me | 获取当前用户 | 是 |
| POST | /api/scenarios | 创建场景 | 是 |
| GET | /api/scenarios | 查询场景列表 | 是 |
| POST | /api/scenarios/{id}/run | 运行仿真 | 是 |
| GET | /api/runs | 查询历史仿真结果 | 是 |
| GET | /api/dashboard | 查询看板统计 | 是 |
七、前端页面设计
前端使用 Vue 3 + Vite 实现单页应用,核心页面包括:
- 登录/注册卡片:根据状态切换登录与注册表单。
- 顶部 Hero 区:展示系统名称、项目定位和退出登录按钮。
- 仪表盘:展示场景数、仿真次数、平均风险。
- 场景表单:创建道路类型、天气、交通密度、最高速度等参数。
- 场景列表:对已创建场景执行仿真。
- 结果表格:展示车道置信度、障碍评分、碰撞风险和建议动作。
登录成功后,前端将 Token 保存到 localStorage,并在后续请求中自动携带 Authorization Bearer Token。
八、核心代码讲解
1. FastAPI 应用入口
backend/app/main.py 创建 FastAPI 应用,并挂载注册、登录、场景、仿真和看板接口:
app = FastAPI(title="自动驾驶深度学习模拟系统", version="1.0.0")
@app.post("/api/scenarios/{scenario_id}/run", response_model=schemas.RunOut)
def run_scenario(scenario_id: int, db: Session = Depends(get_db), current_user: models.User = Depends(get_current_user)):
scenario = crud.get_owned_scenario(db, scenario_id, current_user.id)
if not scenario:
raise HTTPException(status_code=404, detail="场景不存在")
return crud.run_simulation(db, scenario, current_user.id)
这里通过 get_current_user 保护业务接口,确保用户只能运行自己的场景。
2. 密码哈希与 JWT 鉴权
backend/app/auth.py 使用 passlib 进行 bcrypt 哈希,使用 python-jose 生成 JWT:
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def get_password_hash(password: str) -> str:
return pwd_context.hash(password)
def create_access_token(data: dict, expires_delta: timedelta | None = None) -> str:
to_encode = data.copy()
expire = datetime.utcnow() + (expires_delta or timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES))
to_encode.update({"exp": expire})
return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
3. 自动驾驶仿真推理
backend/app/crud.py 中的 simulate_autodrive 模拟深度学习模型推理过程。真实工程中可替换为 PyTorch 或 TensorFlow 模型,这里为了保证项目轻量可运行,使用可解释的评分公式模拟模型输出:
lane_confidence = max(0.35, min(0.99, 0.96 - weather_penalty - road_penalty / 2 + noise))
obstacle_score = max(0.01, min(0.99, scenario.traffic_density * 0.72 + weather_penalty + random.uniform(0, 0.12)))
collision_risk = max(0.01, min(0.99, obstacle_score * 0.48 + (1 - lane_confidence) * 0.32 + speed_factor * 0.2))
风险越高,系统给出的动作越保守,例如紧急减速或增大跟车距离。
4. Vue API 封装
frontend/src/api.js 统一处理接口请求和 Token:
const token = getToken()
if (token) headers.Authorization = `Bearer ${token}`
const res = await fetch(`${API_BASE}${path}`, { ...options, headers })
5. Vue 主页面
frontend/src/App.vue 使用组合式 API 管理登录状态、场景表单、仿真列表和看板数据。用户点击“运行仿真”时,前端调用 /api/scenarios/{id}/run,随后刷新结果表格。
九、部署与运行步骤
1. 启动后端
cd project/backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
后端默认地址为 http://127.0.0.1:8000。
2. 启动前端
cd project/frontend
npm install
npm run dev
前端默认地址为 http://127.0.0.1:5173。
3. 使用流程
- 在前端注册新账号。
- 创建一个自动驾驶测试场景。
- 点击运行仿真。
- 查看风险评分和建议动作。
- 多次调整天气、道路和交通密度,对比模型输出。
十、项目总结
本文完成了一个完整的自动驾驶模拟类 Python 全栈项目。它具备后端接口、数据库模型、认证鉴权、Vue 3 前端页面、业务数据流和可运行源码。虽然示例中的深度学习推理采用轻量化模拟公式,但系统架构已经预留了模型替换空间:后续可以接入真实的车道线检测、目标检测、轨迹预测或强化学习决策模型。
该项目适合作为课程设计、毕业设计原型或全栈项目练习。通过它可以同时掌握 FastAPI 接口开发、SQLite 数据建模、JWT 鉴权、Vue 3 前端工程化和自动驾驶业务建模思路。
386

被折叠的 条评论
为什么被折叠?



