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

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

📘 《车道保持控制(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** **控制(重点讲)** 控制律: ![](https://i-blog.csdnimg.cn/direct/992d55374be244c8bcdefe423b563705.png) **物理意义:** * θ → 方向纠正 * e → 偏移纠正 👉 必须强调: ⚠️ 只用角度会失败! **8.4 Pure Pursuit** **(对比讲)** 核心: 👉 "追一个前方点" ![](https://i-blog.csdnimg.cn/direct/87dbc712a75a4d138a41cdad5e24026e.png) **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(鸟瞰变换) * 自动驾驶系统架构

相关推荐
后端小肥肠2 小时前
写公众号没灵感?这个 50K Star 开源工具把热点主动推到我面前
人工智能·开源·资讯
Mintopia2 小时前
文档写不好,技术能力再强也容易被低估
人工智能
ai产品老杨2 小时前
异构计算新范式:基于 X86/ARM 的 AI 视频融合架构与源码级性能优化
arm开发·人工智能·音视频
xingyuzhisuan2 小时前
遇到GPU驱动冲突问题,云厂商通常提供怎样的技术支持?
大数据·人工智能·gpu算力
它山之石,可以攻玉2 小时前
使用LangChain4j打造你的第一个AI应用
人工智能
GlobalInfo2 小时前
运动AI市场2026预测:亚太领跑、传感器国产化与5G+边缘计算新机遇
人工智能·5g·边缘计算
AI医影跨模态组学2 小时前
NPJ Digit Med(IF=15.1)河北医科大学第四医院赵群等团队:多模态数字活检用于胃癌隐匿性腹膜转移的术前预测
人工智能·机器学习·医学·医学影像
IT_陈寒2 小时前
React的useEffect把我坑惨了,这种闭包问题谁能想到
前端·人工智能·后端
zero15972 小时前
Python 8天极速入门笔记(大模型工程师专用):第八篇-Python 综合实战|完整大模型调用脚本,8 天成果落地
人工智能·python·ai编程·大模型开发