计算机控制系统课程实验:车道保持

课程实验大纲如下:后面会详细说明车道识别、相机标定、坐标转换和控制算法。

📘 《车道保持控制(Lane Keeping)》

一、课程基本信息

  • 课程名称:自动驾驶技术 / 计算机控制系统应用
  • 课时:4~6学时(建议2次课+1次实验)
  • 教学对象:本科三年级(已学信号处理/控制基础)
  • 实验平台:MATLAB + USB相机 + Arduino小车

二、教学目标(必须明确)

1️ 知识目标

学生掌握:

  • 相机成像模型(内参/外参)
  • 车道线检测基本算法
  • 图像坐标 → 车辆坐标转换
  • 车道保持控制原理(Stanley / Pure Pursuit)

2️ 能力目标

学生能够:

  • 完成相机标定
  • 实现车道线识别(MATLAB)
  • 设计简单车道保持控制器
  • 控制小车沿车道行驶

3️ 工程目标

实现完整闭环:

📷 相机 → 🧠算法 → 🎯控制 → 🚗执行

三、课程整体结构(课堂逻辑)

👉 "看见车道 → 理解位置 → 计算偏差 → 控制方向"

四、第一部分:相机标定(核心基础)

4.1 为什么必须标定?

👉 图像 ≠ 真实世界

问题:

  • 图像是透视的
  • 存在畸变
  • 尺度不一致

📌 结论:

必须获取:

  • 内参(焦距、主点)
  • 外参(位置、姿态)

4.2 相机畸变

两类:

  • 径向畸变(桶形/枕形)
  • 切向畸变

👉 MATLAB函数:

undistortedImage = undistortImage(I, cameraParams);

4.3 MATLAB 标定流程(实验重点)

步骤:

1️⃣ 拍摄棋盘格(10~20张)

2️⃣ 打开 Camera Calibrator

3️⃣ 输入格子尺寸

4️⃣ 自动提取角点

5️⃣ 计算参数

👉 注意(考试点):

  • 分辨率必须一致
  • 覆盖不同角度
  • 棋盘至少占20%画面

五、第二部分:坐标变换(核心难点)

5.1 为什么要坐标转换?

👉 图像偏差 ≠ 真实偏差

5.2 三个坐标系

  1. 图像坐标 (u, v)
  2. 相机坐标 (Xc, Yc, Zc)
  3. 车辆坐标 (X, Z)

5.3 关键思想(教学重点)

👉 假设:地面是平面

👉 可求解:

  • 横向偏差
  • 航向角

5.4 工程简化(建议课堂用)

👉 方法1(推荐):

  • 相机装在车头中心
  • 忽略外参

👉 方法2:

  • 标定棋盘格直接得到外参

六、第三部分:车道线识别(视觉核心)

6.1 基本流程(必须讲清)

灰度化

  1. 边缘检测
  2. ROI区域提取
  3. Hough变换
  4. 后处理

6.2 边缘检测(Canny)

edge_img = edge(gray,'canny',0.3,0.4);

6.3 ROI 区域(关键工程技巧)

bw = roipoly(img, x, y);

👉 作用:

  • 去掉天空/干扰
  • 只保留道路区域

6.4 Hough 直线检测(核心)

👉 本质:

图像空间:

y = mx + b

Hough空间:

一个点 → 一条线

👉 MATLAB实现:

H,T,R = hough(BW);

P = houghpeaks(H,3);

lines = houghlines(BW,T,R,P);

6.5 后处理(工程关键)

👉 必须讲:

  • 左右车道分离
  • polyfit拟合
  • 滤波稳定

七、第四部分:复杂环境问题(重点加分)

7.1 阳光影响(必讲)

问题:

  • 过曝
  • 阴影
  • 反光

解决方法:

1️⃣ HSV颜色空间

2️⃣ 自适应阈值

3️⃣ Gamma校正

7.2 异常车道(工程重点)

问题:

  • 虚线
  • 遮挡
  • 错误识别(瓷砖等)

解决策略:

方法1:时间滤波(推荐)

当前帧 + 上一帧融合

方法2:模型约束

  • 左右车道应平行
  • 宽度固定

方法3:Kalman滤波(进阶)

八、第五部分:车道保持控制算法(核心)

8.1 控制目标

👉 让车辆沿车道中心行驶

8.2 两个关键量

  1. 横向偏差 e
  2. 航向误差 θ

8.3 Stanley 控制(重点讲)

控制律:

物理意义:

  • θ → 方向纠正
  • e → 偏移纠正

👉 必须强调:

⚠️ 只用角度会失败!

8.4 Pure Pursuit (对比讲)

核心:

👉 "追一个前方点"

8.5 两种方法对比

|--------------|--------|--------|
| 方法 | 优点 | 缺点 |
| Stanley | 稳定 | 低速震荡 |
| Pure Pursuit | 平滑 | 偏差大 |

九、第六部分:完整车道保持算法(课堂用)

推荐教学算法

👉 适合本科生:

Step 1 :读取相机

cam = webcam;

img = snapshot(cam);

Step 2 :车道检测

  • 灰度
  • 边缘
  • Hough

Step 3 :提取车道中心

Step 4 :计算偏差

Step 5 :控制输出

steer = -k1*theta - k2*e;

十、实验设计(必须有)

实验1:相机标定

输出:

  • cameraParams

实验2:车道检测

输出:

  • 左右车道线

实验3:控制小车

实现:

  • 自动循迹

十一、MATLAB完整示例(核心)

img = snapshot(cam);

gray = rgb2gray(img);

edge_img = edge(gray,'canny',0.3,0.4);

H,T,R = hough(edge_img);

P = houghpeaks(H,2);

lines = houghlines(edge_img,T,R,P);

% 简化控制

theta = ...;

e = ...;

steer = -0.5*theta - 0.2*e;

十二、课堂总结

👉 车道保持 = 感知 + 建模 + 控制

三层理解:

1️⃣ 看见车道(视觉)

2️⃣ 理解位置(几何)

3️⃣ 控制车辆(控制)

十三、拓展(自学习)

  • 深度学习车道检测(YOLO)
  • BEV(鸟瞰变换)
  • 自动驾驶系统架构
相关推荐
To_OC14 分钟前
大模型蒸馏是啥?说白了就是大厨带徒弟的学问
人工智能·llm·agent
新手来了@click28 分钟前
JAVA+AI 简化开发操作|文章被 AI Agent 技术社区收录分享
人工智能
GuWenyue1 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
GuWenyue1 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
老云讲算力市场1 小时前
WAIC首日观察:国产算力与机器人加速落地,奇点算力迎来产业新机遇
人工智能·科技
糖果店的幽灵1 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
小林ixn2 小时前
大模型随机说话的秘密:Temperature 和 Top K 深度解析,LangChain 实战调优
人工智能·langchain
ALINX技术博客2 小时前
ALINX 亮相 2026 WAIC 世界人工智能大会,展示 AI 视觉 FPGA+GPU 异构计算与电子后视镜解决方案
人工智能·ai·fpga·世界人工智能大会·电子后视镜
程序员老猫2 小时前
当 AI 能写 80% 的代码时,后端工程师的核心价值还剩什么?
人工智能
想会飞的蒲公英2 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理