计算机系统应用  2020, Vol. 29 Issue (3): 269-277   PDF    
基于DSP的车道偏离检测与车辆前向车距检测
刘金清1, 陈存弟2     
1. 福州外语外贸学院, 福州 350202;
2. 福建师范大学 光电与信息工程学院, 医学光电科学与技术教育部重点实验室, 福州 350007
摘要:基于智能交通的快速发展, 研究了在高速路段下基于机器视觉的车道偏离检测与车辆前向安全车距检测技术. 首先固定车载相机, 通过相机标定获取相机的内参数和外参数, 进而设计车距检测模型. 该模型不但能够检测出前方车辆与无人车的距离, 还能计算出前方车辆相对于摄像机光轴的偏转角度. 接着在CCP偏离检测算法的基础上, 设定安全和报警区来建立车道偏离模型, 并对当前车辆的偏离结果作出正常行驶的评判. 最后借助TI的DVSDK组件包将算法移植到嵌入式平台DSP-DM3730上测试. 实验表明, 本文设计的车距检测模型和车道偏离模型在解决无人车的前向防撞检测和车道偏离检测等问题上具有较好的参考价值.
关键词: 偏离检测    防撞检测    DSP    
Lane Departure Detection and Vehicle Forward Distance Detection Based on DSP
LIU Jin-Qing1, CHEN Cun-Di2     
1. Fuzhou University of International Studies and Trade, Fuzhou, 350202, China;
2. Key Laboratory of Optoelectronic Science and Technology for Medicine (Ministry of Education), College of Photonic and Electronic Engineering, Fujian Normal University, Fuzhou 350007, China
Foundation item: National Natural Science Foundation of China (61179011); Young Scientists Fund of National Natural Science Foundation of China (41701491); Natural Science Foundation of Fujian Province (2017J01464)
Abstract: Base on the rapid development of intelligent transportation, this work studies lane departure detection and vehicle forward safety distance detection technology under high-speed section based on the machine vision. First fix the car camera, obtain the camera’s internal and external parameters through camera calibration, and then design the distance detection model which can not only detect the distance between the front vehicle and the unmanned vehicle, but also calculate the deflection angle of the front vehicle relative to the optical axis of the camera. Secondly, based on the CCP (The Car’s Current Position) deviation detection algorithm, the safety and alarm zones are set to establish lane departure models, and the algorithm judges whether the current vehicle is deviated or not. Finally, the algorithm is transplanted to the embedded platform DSP-DM3730 by TI’s DVSDK(Digital Video SDK). Experiments show that the vehicle distance detection model and lane departure model designed in this work have good reference value in solving the problems of forward collision detection and lane departure detection of unmanned vehicles.
Key words: departure detection     collision detection     DSP    

车道偏离检测和前向车距检测的目的是防止无人车偏离本车道或者与前方车辆距离较近时发生交通事故. 近年来, 国内外学者基于机器视觉的方法对车道偏离[14]和车距检测技术[57]展开了相应的研究. 本文在前人研究的基础上, 实现了车道偏离和车距检测算法的改进与仿真, 并移植到嵌入式平台上测试.

车道偏离检测算法和车辆前向车距检测算法均需要通过相机采集的图像重建出三维世界, 以此算出客观世界中的真实数据. 在机器视觉中, 三维重建可以定义为根据图像坐标系与世界坐标系的转换关系进而计算到相机参数, 进一步推导出图像坐标与世界坐标系的关系, 因此车道偏离检测与防撞检测的首要条件是相机标定. 本文采用张氏相机标定方法[8].

1 相机标定原理

相机标定的理论推导涉及4种坐标系, 分别是以像素为单位的像素平面坐标系 $\left( {u,v} \right)$ ; 表示每毫米包含的像素数量的图像物理坐标系 $\left( {x,y} \right)$ ; 相机坐标系 $\left( {{X_c},{Y_c},{Z_c}} \right)$ 和世界坐标系 $\left( {{X_w},{Y_w},{Z_w}} \right)$ . 如图1所示.

图 1 坐标映射模型

(1)图像物理坐标系到像素坐标系的转换

图像像素坐标系 $\left( {u,v} \right)$ 中的 $u$ $v$ 分别表示行和列, 其坐标原点在图像的左上角. 图像物理坐标系 $\left( {x,y} \right)$ $x$ $y$ 分别与图像像素的 $u$ $v$ 轴平行, 相机的光心与像平面的交点为坐标原点. 假设光心对应的图像平面坐标为 $\left( {{u_0},{v_0}} \right)$ , ${d_x}$ 表示x方向每个像素的毫米宽度, ${d_y}$ 表示表示y方向每个像素的毫米宽度, 式(1)为图像坐标系转换为像素坐标系.

$\left[ \begin{array}{l} u \\ v \\ 1 \\ \end{array} \right] = \left[ \begin{array}{l} 1/{d_x}\;\;\;\;0\;\;\;\;\;\;{u_0} \\ 0\;\;\;\;\;\;\;\;1/{d_y}\;\;{v_0} \\ 0\;\;\;\;\;\;\;\;\;0\;\;\;\;\;\;\;1 \\ \end{array} \right]\left[ \begin{array}{l} x \\ y \\ 1 \\ \end{array} \right]$ (1)

(2)相机坐标系到物理坐标系的转换

光心是相机坐标系 $\left( {{X_c},{Y_c},{Z_c}} \right)$ 的原点, ${Z_c}$ 轴与光轴重合且方向相同, ${X_c}$ ${Y_c}$ 轴各自平行于图像物理坐标系的 $x$ $y$ 轴. 令相机的焦距为 $f$ , 相机坐标系与像素坐标系的关系式为式(2)所示.

${Z_c}\left[ \begin{array}{l} x \\ y \\ 1 \\ \end{array} \right] = \left[ \begin{array}{l} f\;\;0\;\;0\;\;0 \\ 0\;\;f\;\;0\;\;0 \\ 0\;\;\;0\;\;1\;\;0 \\ \end{array} \right]\left[ \begin{array}{l} {X_c} \\ {Y_c} \\ {Z_c} \\ \;1 \\ \end{array} \right]$ (2)

(3)世界坐标系到相机坐标系的转换

世界坐标系 $\left( {{X_w},{Y_w},{Z_w}} \right)$ 到相机坐标的转换实质上是平移和旋转的过程, 其中旋转矩阵T为三维平移矢量, 旋转矩阵R为3×3的正交单位矩阵, 其转换关系为式(3)所示.

$\left[ \begin{array}{l} {X_c} \\ {Y_c} \\ {Z_c} \\ \;1 \\ \end{array} \right] = \left[ \begin{array}{l} R\;\;\;T \\ {O^{\rm T}}\;\;1 \\ \end{array} \right]\left[ \begin{array}{l} {X_w} \\ {Y_w} \\ {Z_w} \\ \;\;1 \\ \end{array} \right]$ (3)

整合4个坐标系的转换关系, 可以得出像素坐标系与世界坐标系的变换过程, 其转换过程为:

${Z_c}\left[ \begin{array}{l} u \\ v \\ 1 \\ \end{array} \right] = \left[ \begin{array}{l} f{d_x}\;\;\;0\;\;\;{u_0}\;\;0 \\ 0\;\;\;\;f{d_y}\;\;{v_0}\;\;0 \\ 0\;\;\;\;\;0\;\;\;\;\;1\;\;\;0 \\ \end{array} \right]\left[ \begin{array}{l} R\;\;\;T \\ {O^{\rm T}}\;\;1 \\ \end{array} \right]\left[ \begin{array}{l} {X_w} \\ {Y_w} \\ {Z_w} \\ \;\;1 \\ \end{array} \right]{{ = A[R \;T]M}}$ (4)

式(4)中包含有 $f{d_x}$ $f{d_y}$ ${u_0}$ ${v_0}$ 等4个相关参数, $\left[ {R,T} \right]$ 是相机的外参矩阵. 在相机的内参数已知的情况下, 就能得到像素坐标与世界坐标之间的投影矩阵 $P \!=\! A\left[ {R,T} \right]$ . 因此, 对于世界坐标上的任意点 $M\left( {{X_w},{Y_w},{Z_w}} \right)$ 可以计算出对应的像素坐标 $\left( {u,v} \right)$ , 但是 $P$ 具有不可逆性, 不能用已知的像素坐标推导出世界坐标, 而在车道偏离检测与车距检测中均需要从像素坐标计算出世界中客观的物理量, 这就需要在已知相机内外参数情况下再次建立相应的路面模型计算出相关的物理量.

(4)求解相机畸变参数

在几何光学和阴极射线管显示中, 畸变是对直线投影的一种偏移, 即一条直线投影到图片上并不是以直线的形式投影在图像上. 一般将畸变分成对图像的投影影响较大的径向畸变和切向畸变, 其表达式为:

$ \begin{array}{l} \left[\!\! \begin{array}{l} {x_{crt}}\\ {y_{crt}} \end{array} \!\!\right] \!=\! \left( {1 + {k_1}{r^2} + {k_2}{r^4} + {k_3}{r^6}} \right)\left[\!\! \begin{array}{l} x\\ y \end{array}\!\! \right]\;({\text{径向畸变}})\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\; + \left[ \begin{array}{l} 2{p_1}xy + {p_2}\left( {{r^2} + 2{x^2}} \right)\\ 2{p_1}\left( {{r^2} + 2{y^2}} \right) + 2{p_2}xy \end{array} \right]\;\;({\text{水平畸变}}) \end{array} $ (5)

(5) OpenCV上的相机标定

张氏标定法简单稳定, 因此得到广泛的使用. 具体标定步骤如下:

① 制作棋盘标定板: 在固定的相机角度下, 拍摄不同角度, 多尺度且旋转多变的棋盘图像20张, 棋盘格数为9×5.

② 令棋盘的左上角为世界坐标原点, 初始化棋盘格上所有角点的世界坐标, 且 ${X_w}$ 轴与 ${Y_w}$ 轴分别对应棋盘的长和宽, ${Z_w} = 0$ , 每个棋盘格的长宽为30×30 mm, 如图2所示. 图3为检测到的棋盘角点结果.

图 2 棋盘世界坐标

图 3 棋盘角点坐标

③ 引用calibrateCamera()函数计算相机的内外参数和畸变参数得到的标定参数为:

畸变系数: $ \left[ {0.2051, - 0.7335, - 0.018\;52,- 0.039\;42,1.571\;67} \right]$

相机内参矩阵: $\left[ {\begin{array}{*{20}{c}}{885.783,}&{0,}&{268.6169}\\{0,}&{882.7993,}&{192.251\;95}\\{0,}&{0,}&1\end{array}} \right] $ .

2 车距检测算法的实现 2.1 构建车距检测模型

车距检测模型, 如图4所示. 假设相机能够获取的路面区域为ABCD, 路面E点投影在图像最顶边的 ${E_o}$ 点上; F点是相机刚好拍到靠近相机的路面边界处, 其投影在图像最底边 ${F_o}$ 点上, G点是相机光心射向的路面焦点, 该点投影在图像的o点处; 路面上随意的P点投影在 ${P_o}$ 点处; Q点表示相机的位置, hZFZG可用尺子测量. $\angle ZQF{\rm{ = }}\gamma $ , $\angle FQG = \beta $ , $\angle TQG = \alpha $ . 假设P点是检测到的车辆, 计算车距即是求解路面上ZP距离, Z是相机在路面上的投影点.

图 4 路面车距检测模型

根据图4的路面建模图, 结合相机成像规则, 可以得到以下关系:

(1) ${\angle OQS=\alpha =\arctan \left( {}^{SO}\!\!\diagup\!\!{}_{f{{d}_{y}}}\; \right)}$ ;

$\angle OQF_o=\beta =\arctan \left( ^{F_oO}\!\!\diagup\!\!_{fd_y}\; \right)$ ;

${\gamma =\arctan \left( ^{ZF}\!\!\diagup\!\!_h\; \right)}$ .

(2) if ${{{P}_{o}}.v > {{v}_{0}}\ \Rightarrow theta =\gamma +\beta -\alpha }$ ;

if ${ {{P}_{o}}.v\le {{v}_{0}}\ \Rightarrow theta =\gamma +\beta +\alpha }$ ;

${\Rightarrow ZT=h\cdot \tan \theta }$ .

(3) 又: ${PT=MG}$ ; ${S{{P}_{o}}=O{{M}_{o}}}$ ; ${ QG=\sqrt{{h^2}+\left( ZG \right)^2}}$ ; ${ \dfrac{QG}{MG}=\dfrac{fd_x}{OM_o}}$ ;

${\Rightarrow \ \ PT=MG={}^{O{{M}_{o}}\cdot QG}\!\!\diagup\!\!{}_{f{{d}_{x}}}}$ .

(4)无人车与前车距离: ${\Rightarrow ZP=\sqrt{{{\left( ZT \right)}^{2}}+{{\left( PT \right)}^{2}}}}$ .

2.2 车距检测试验

本文在实验室通过模拟车道来测试算法的可靠性. 相机光心投影在图像上的像素坐标为(u0, v0) = (268.62, 192.25), x方向的焦距为 $f{d_x} = 885.78$ , y方向的焦距为 $f{d_y} = 882.80$ , 相机距离地面的高度为h=690 mm, 通过实地测量相机投影在路面与图像最低边在真实路面上的距离为ZF=2050 mm.

图5中随机的路面坐标 ${P_o}\left( {300,29{\rm{5}}} \right)$ , 投影在真实路面上的数据为: PT=197.13 mm, ZT=5520.95 mm, 通过欧氏公式随机路面点到相机的距离为: ZP=5524.47 mm, 实际距离为5400 mm. 模拟的车辆位置与相机的偏离角度为右偏2.05度. 计算结果与实际测量的结果之差仅为 $\left|5524.47 - 5400 \right| = $ 124.47 mm.

图 5 畸变校正与路面测距模拟结果图

表1中的距离结果以mm为单位, 角度单位为度, 从模拟路面上的6组数据中可以看出, 实际值与测量值的误差较小, 在10 m内的误差控制在200 mm内, 说明本文建立的车距测量模型较准确. 在实际的高速路面上, 安全车距不少于50米, 可以通过本文的算法设置固定的车距安全阈值来实现车距安全检测.

表 1 无人车相对于光轴的偏航角和车距测量表

2.3 构建车道偏离模型

由于无人车驾驶过程中容易出现偏航现象, 如果不及时调整方向便会偏离到其他车道. 此外, 车辆压到分道线导致左轮或者右轮偏离在其他车道中, 将影响其他车辆的正常运行, 甚至导致不可预知的交通事件, 因此需要车道偏离提示. 车辆准备超车时会提前打开左转向灯, 所以, 无人车在没有检测到左转向灯打开时, 车道偏离报警系统才会发挥相应的警报作用.

无人车正常行驶时, 行驶方向与左右分道线趋近平行, 因而, 可以利用车道俯视图模型来计算出偏航的角度和车辆与左右分道的边距, 以做出相应的报警信息反馈.

$\vartriangle y = \left\{ \begin{aligned} & \vartriangle {y_{\rm{1}}} = \frac{{{b_l}}}{2} - \left( {{y_0} + \frac{{{b_c}}}{2}} \right)\\ & \vartriangle {y_{\rm{2}}}= \frac{{{b_l}}}{2} + \left( {{y_0} - \frac{{{b_c}}}{2}} \right) \end{aligned} \right.$ (6)

CCP算法需要预知无人车的横向宽度 ${b_c}$ 和车道宽度 ${b_l}$ , 标准高速公路的车道宽度为3.75 m, 可以通过式(6)判断车道偏离情况. ${y_0}$ 表示无人车中心与车道中线的距离. 如果 $\vartriangle {y_{\rm{1}}} < 0$ $\vartriangle {y_{\rm{2}}} < 0$ , 则认为是车道偏离; 如果 $\vartriangle {y_{\rm{1}}} > 0$ $\vartriangle {y_{\rm{2}}} > 0$ 则认为是无人车在当前行驶的车道内. 如果判别到无人车是左偏离, 那么如图6所示, 可知 $\vartriangle {y_1}$ 是车辆与左分道线的距离, $\vartriangle {y_{\rm{2}}}$ 是车辆与右分道线的距离; 如果判别到无人车是右偏离, 那么 $\vartriangle {y_1}$ 是车辆与右线的距离, $\vartriangle {y_{\rm{2}}}$ 是车辆与左线的距离.

图 6 CCP车道偏离检测

相机的光心在图像上的坐标为 $\left( {{u_0},{v_0}} \right)$ , 因此图像中坐标点 ${F_o}\left( {{u_0},{I_h}} \right)$ 为相机光轴投影在地面上投影的点, ${I_h}$ 是图像的高, ${I_w}$ 为图像的宽. 如图7所示, 是一张车身右偏而行驶方向偏左的图像, 图中 ${L_1}$ ${L_2}$ 是左右车道线, ${L_3}$ ${L_1}$ ${L_2}$ 交叉角的平分线, ${P_t}\left( {u,v} \right)$ ${L_3}$ 上任意一点, ${L_3}$ 与图像底边的交点为 $V\left( {u,v} \right)$ .

图 7 车向偏离示意图

图8所示, 在路面上建立一个路面坐标, 以分道线平行的中线为正向y轴, 无人车所在的位置横向为x轴, 右方向为正, 其中 $\theta $ 是无人车的偏航角, $\angle F{V_o}{P_o}{\rm{ = }}\varphi $ , ${I_b}$ 是相机成像后靠近车辆的底边, ${{V}_{o}}$ ${{P}_{o}}$ 分别是图像中 $V$ ${{P}_{t}}$ 点的实际路面投影点, ${P_o}$ 为随机投影点, 像素坐标中直线 $u = {u_0}$ 与车道平分线的交点投影在路面上, 即是图中 ${P_o}$ 点.

图 8 车辆偏离俯视图模型

(1)无人车偏航角的计算

① 余太武[9]计算左右车道的角平分线作为车道中线, 而本文计算车道中线的方法是基于左右车道斜率和截距求平均的方法.

$ {\text{车道中线}}:y=\frac{{{k}_{1}}+{{k}_{2}}}{2}\cdot x+\frac{{{b}_{1}}+{{b}_{2}}}{2} $ (7)

图9所示, 基于角平分线求解车道中线的方法存在误差, 而基于式(7)求解的结果正确.

图 9 求解车道中线的比较

② 基于2.1节介绍的路面建模图像, 我们随机取车道中线上的某点 ${P_t}$ , 接下来, 计算出车道中线上V点坐标, 分别计算出 ${{F}_{o}}$ , V, ${{P}_{t}}$ , 分别对应在路面上的 $F,{V_o},{P_o}$ 点, 以此计算出实际路面上的距离 $\left| {F{V_o}} \right|$ $\left| {{P_o}{V_o}} \right|$ $\left| {F{P_o}} \right|$ .

根据余弦定理求 $\angle F{V_0}{P_0} = \varphi $ :

$\varphi {\rm{ = arccos}}\left( {\frac{{{{\left| {F{V_o}} \right|}^2} + {{\left| {{P_o}{V_o}} \right|}^2} - {{\left| {F{P_o}} \right|}^2}}}{{2\left| {F{V_o}} \right|\left| {P{V_o}} \right|}}} \right),\;\;\varphi \in \left[ {0,\pi } \right]$ (8)

③ 计算偏航角:

$\left\{ \begin{array}{l} \theta = \left\{ \begin{array}{l} \varphi {\rm{ - }}\pi {\rm{/2}}\;\;\;\varphi \ge \pi /2\;\\ \pi {\rm{/2 - }}\varphi \;\;\;\varphi < \pi /2 \end{array} \right.,\;\;\;\theta \in \left[ {{\rm{0}},\dfrac{\pi }{2}} \right]\\ {\rm if}\;\;{\theta > \pi /36} \;\; \Rightarrow \;{\text{车辆行驶方向开始偏离车道}} \end{array}\right. $ (9)

(2)无人车与左右分道线的距离计算

① 计算 $ {{y}_{0}} =\left\{ \begin{aligned}& \left| F{{V}_{o}} \right|\cdot \cos \theta -\left| FZ \right|\cdot \sin \theta, \;\;\varphi \ge \pi /2 \\& \left| {{P}_{o}}Z \right|\cdot \sin \theta,\;\; \varphi < \pi /2 \\ \end{aligned} \right. $ .

② 若 ${F_o}.u > V.u$ , 可初步判断为车辆向左偏离车道中线.

无人车距左分道线距离为:

${D_{\rm L}} = \frac{{{b_l}}}{2} - \left( {{y_0} + \frac{{{b_c}}}{2}} \right)$ (11)

无人车距右分道线距离:

$ {D_{\rm R}} = \frac{{{b_l}}}{2} + \left( {{y_0} - \frac{{{b_c}}}{2}} \right) $ (12)

③ 若 ${F_o}.u < V.u$ , 可初步判断为车辆右偏离车道中线

无人车距左分道线距离:

$ {D_{\rm L}} = \frac{{{b_l}}}{2} + \left( {{y_0} - \frac{{{b_c}}}{2}} \right) $ (13)

无人车距右分道线距离:

$ {D_{\rm R}} = \frac{{{b_l}}}{2}{\rm{ - }}\left( {{y_0}{\rm{ + }}\frac{{{b_c}}}{2}} \right) $ (14)

获取到无人车与左右分道线的偏离距离和偏航角后, 就可以设定相应的阈值来判断当前无人车的行驶状况. 如图10所示, 沿车道方向分割成安全区域和报警区域. 对于一般小车宽度为1.5–1.8 m之间, 标准高速路宽度为3.7 m. 本文设置车辆与左右分道线0.5 m范围内为报警区, 车道中间2.75 m内为安全区.

图 10 车道安全区域与报警区域的划分

2.4 车道偏离试验

图11所示为两帧车道偏离检测结果, 其中第1行输出为车辆左轮与左分道线的间距和右轮与右分道线的间距; 第2行输出为车辆行驶方向与车道中线的偏航角, 当偏航角小于5度时表示行驶方向正常. 第3行表示车辆当前的运行状态, 只有当偏航角、无人车与左右分道线的间距不超过设定的安全阈值时才会断定为正常行驶.

图 11 车道偏离检测结果

图12所示, 本文实验模拟的车道宽度为120 cm, 车辆宽度为36 cm, 相机投影在地面到图像底边的实际地面边界的距离为205 cm, 其高为70 cm, 模拟得到的结果为表2表3.

图 12 模拟偏航试验图

表 2 无人车相对于车道的偏航角(度)

表 3 无人车与左右分道线距离

3 算法在DSP-DM3730上的移植

TI公司的DM3730[10,11]整合了具有控制优势的ARM核和具有运算优势的DSP核. DSP端依靠DSP/BIOS操作系统来支持音视频算法, ARM端依靠Linux系统来控制芯片的外部设备, 而ARM与DSP双核之间的数据传输与通信则依赖Codec Engine架构来管理[12]. ARM+DSP框架如图13所示.

图 13 DSP+ARM双核框架

3.1 硬件资源

(1)处理器: DM3730处理器.

① Pin-to-Pin兼容DM3730系列处理器.

② 1000-MHz主频ARM CortesxTM-A8内核.

③ 800-MHz DSP TMS320C64x+TM内核.

④ 片内集成存储器用于ARM CPU(16 KB I-Cache, 16 KB D-Cache, 256 KB L2 Cache)和片上存储(64 KB SHared SDRAM, 112 KB ROM).

(2)存储器: Micron mDDR与NandFlash集成芯片.

① 256 MByte 32位mDDR 133 MHz.

② 512 MByte 16位Nand Flash.

(3)视频接口、USB接口、音频插座、调试接口、SD/MMC插座、电源接口、串口插座、扩展接口、网络接口.

3.2 软件资源

搭建软件开发平台的资源有:VirtualBox; uBuntu V10.04; PC端的超级终端Tera Term Pro.

安装TI提供的支持音频和视频算法的DVSDK组件包, 该包含有各算法支持库和各支持库的调用管理引擎(Code Engine), 以及XDM算法的编译工具xdctools, 同时提供了音频、视频算法进行编解码的例程以供参考. 利用该包可以很方便地开发DSP下的图像语音处理软件, 并且实现ARM与DSP之间的联系. Codec Engine是DVSDK组件包的核心模块, 是ARM和DSP的通信与数据传输桥梁, 过渡于ARM应用层和DSP信号处理层之间. 该模块要与DSP端建立的Codec Engine服务器进行通信需要使用DSP/BIOS、DSP Link、DSP算法接口的标准xDIAS[13]和XDM协议. 为了发挥DM3730的双核作用, Codec Engine、DSP Link、xDIAS和XDM是软件中不可缺少的部分.

DM3730开发板可以从板载的NandFlash中启动, 也可以从SD卡的Fat32分区中启动. 无论是从板载的NandFlash中启动还是从SD卡启动, 都需要用XLoader对开发板进行一些初始化工作, 接着从NandFlash/SD中读取Uboot程序到存储器, 然后Uboot从NandFlash/SD卡读入启动参数, 加载Linux内核uImage到存储器, 解压缩后运行, 直到Linux内核启动后, 重新初始化DM3730板, 加载NandFlash/SD卡上的FileSystem, 执行FileSystem中的程序并启动控制台. 由此可见, 开发板上的Xloader、Uboot、uImage和文件系统在整个启动过程是层层依赖的关系.

3.3 搭建交叉编译环境

安装DVSDK组件包后有自带的交叉编译器—arm-arago-linux-gnueabi-gcc. 只需将DVSDK组件包中的交叉编译器的安装路径添加在用户目录中的.bashrc文件中即可.

3.4 搭建网络文件传输服务(TFTP)

TFTP网络能将编译的程序和数据烧写到目标版上运行, 或将目标版上文件或者运行结果上传到Linux主机端. tftp工作目录在/tftpboot, 在文件传输过程中, 均需要先将文件拷贝到该目录下, 然后才能在超级终端Tera Term Pro中使用以下命令实现uBuntu和目标板中文件的传输:

(1) tftp -g -r fileName uBuntu的IP地址

(2) tftp -p -l fileName uBuntu的IP地址

(3) g: get, -r: remote, -p: put, -l: local

3.5 移植OpenCV和EMCV库

OpenCV开源的视觉库提供了丰富的图像处理算法, 在各大操作系统上均可编译通过生成相应的执行文件, 因此, 这些代码只要经过适当修改和编译便可移植在嵌入式系统中.

EMCV库基于C语言实现, 能运行于TI DM64x系列DSP中, 移植EMCV相当于把OpenCV中少部分算法移植到DSP中[14].

在DM3730的ARM应用程序中调用交叉编译后的OpenCV接口函数, 而在DSP端调用EMCV接口函数. 适用cmake交叉编译OpenCV库之前, 需要编译安装ffmpeg资源包、libx264和libxvid两个库、汇编编译器yasm, 以及libpng和libjpeg库, OpenCV才能读取和显示png和jpeg格式图片, 而libpng库的安装依赖于zlib库.

所有库的安装目录均设置在交叉编译的目录中, 且将编译安装后的生成库通过tftp网络传送到目标板的lib目录上. 至此, 就可以实现在DM3730目标板的ARM端调用OpenCV库函数了.

本文使用Qt开发图形界面对处理后的视频在LCD上显示. 先在Qt中的项目文件.pro中添加OpenCV的头文件路径和库文件. 编译后生成的二进制文件传送到目标板的文件系统上就可以在ARM端调用OpenCV函数接口, 处理后的结果使用Qt来显示.

使用Codec Engine作为ARM和DSP的连接桥梁, 模仿Codec Engine自带的video_copy例程来添加算法. 针对EMCV的移植, 将EMCV的文件添加到video_copy中, 并在配置文件中添加EMCV的文件名. 车道识别和车辆检测算法移植后, 进而测试本文的车道偏离检测和车距安全检测算法, 得到的效果良好.

3.6 算法的移植

TI的DVSDK组件包提供了Codec Engine软件模块来实现ARM和DSP的通信和协同工作. Codec Engine是一组应用程序编程接口, 用于实例化和运行xDAIS算法, 还有VISA(Video, Image, Speech, Audio)接口, 用于与xDM兼容的xDAIS算法进行交互[15,16], 使ARM端的Linux可以调用VISA标准接口来管理ARM与DSP的软件. 如图14所示, Codec Engine框架中, Server集成Codec端算法, DSPLink模块隐藏了APP调用Server端算法的整个过程, 因此在实例应用中只能看到Server和APP端.

图 14 ARM与DSP的通信框架

图15所示, ARM应用程序调用Codec Engine的VISA API接口, VIDENC_process(a, b, c)传递a, b, c参数, Codec Engine的stub会把参数a, b, c以及VISA接口信息封装处理, 利用消息队列msgq传递给DSP端. DSP端的skeleton解开这个封装包, 把ARM端的参数a, b, c (虚拟地址)转换成DSP端的参数x, y, z(物理地址). DSP端的处理process中的请求即能实现ARM端VIDENC_process(a, b, c)函数的操作[17,18].

图 15 ARM和DSP通信的函数传递

3.7 实验结果

图16为本文算法移植在DM3730平台上的运行结果. 已知采集高速车道视频的相机内外参, 使用本文的车距模型和车道偏离模型, 计算的车距和车道偏离角度均显示在图片上. 车辆正常行驶拍摄到的视频得到的检测结果良好.

图 16 本文算法在DM3730平台上的运行结果图

4 结论与展望

本文的车距检测模型[19], 不但能够检测前方车辆与无人车的距离, 还能计算出前方车辆相对于相机光轴的偏转角度. 基于CCP车道偏离算法, 建立车道偏离模型, 实现了无人车当前位置和相对于分道线的偏航角的计算, 并设定无人车在车道上的安全区和警报区实现车道偏离的及时报警. 对于车距的建模, 在实验室模拟车道计算路面上的随机点, 得到的误差较小, 稳定性较好. 对于车道偏离检测, 模拟高速路车道搭建车道偏离模型, 计算车辆偏离车道的偏航角且车辆与左右分道线的距离, 检测误差范围小, 准确性较高. 还使用运行状况良好的高速路视频测试本文算法, 偏离反馈均显示正常. 尽管本文采用先进的ARM+DSP框架实现车辆动态图像识别的系统设计, 且采用Codec Engine框架实现ARM和DSP的通信, 实验过程稳定性较高, 但是在嵌入式平台内存和运行主频有限且运行算法尚未优化的情况下难以实现算法的实时性处理, 因此有待完善运行平台, 更好地协调车道检测、车辆检测与跟踪、车道偏离检测和车距检测4个模块. 有待进一步使用本文的算法在路面上测试.

参考文献
[1]
韦庭. 基于单目视觉的辅助驾驶系统中的图像处理研究[硕士学位论文]. 成都: 电子科技大学, 2012.
[2]
Risack R, Mohler N, Enkelmann W. A video-based lane keeping assistant. Proceedings of the IEEE Intelligent Vehicles Symposium 2000. Dearborn, MI, USA. 2002. 356–361.
[3]
Lee S, Kwon W, Lee JW. A vision based lane departure warning system. Proceedings 1999 IEEE/RSJ International Conference on Intelligent Robots and Systems. Human and Environment Friendly Robots with High Intelligence and Emotional Quotients. Kyongju, Republic of Korea. 1999. 160–165.
[4]
戴斌, 裘伟. 逆透视投影下车道偏离时间的在线估计. 计算机工程与应用, 2007, 43(21): 235-238. DOI:10.3321/j.issn:1002-8331.2007.21.071
[5]
李欣. 基于单目视觉的车辆前方障碍物测距[硕士学位论文]. 西安: 西安建筑科技大学, 2013.
[6]
佟卓远. 基于机器视觉的前方车辆检测与测距系统设计[硕士学位论文]. 哈尔滨: 哈尔滨工业大学, 2015.
[7]
Bao DS, Wang PK. Vehicle distance detection based on monocular vision. 2016 International Conference on Progress in Informatics and Computing. Shanghai, China. 2017.
[8]
Zhang Z. A flexible new technique for camera calibration. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2000, 22(11): 1330-1334. DOI:10.1109/34.888718
[9]
余太武. 基于机器视觉的车道偏离预警研究[硕士学位论文]. 昆明: 昆明理工大学, 2013.
[10]
Texas Instruments: SPRS685D. DM3730, DM3725 Digital Media Processors.
[11]
朱银忠. 基于DM3730的人脸识别系统设计[硕士学位论文]. 苏州: 苏州大学, 2012.
[12]
Texas Instruments: SPRUE67D. Codec Engine Application Developer User’s Guide.
[13]
Texas Instruments: SPRAAE7B. Using Adapters to Run Existing xDAIS Algorithms with Codec Engine.
[14]
陈存弟, 刘金清, 刘引, 等. 基于DM642的纹理检测与Adaboost分类器相结合的车牌定位. 计算机系统应用, 2017, 26(7): 56-64. DOI:10.15888/j.cnki.csa.005853
[15]
吴厚源. 基于DM3730的疲劳驾驶预警系统[硕士学位论文]. 厦门: 厦门大学, 2014.
[16]
Texas Instruments. TMS320DM3730 Software Developers Guide.
[17]
林上升, 韩润萍. 基于OMAP3530硬件平台的ARM和DSP协同开发方法. 电子技术应用, 2013, 39(2): 6-8, 11. DOI:10.3969/j.issn.0258-7998.2013.02.001
[18]
李阳. 3G移动定位与视频监控系统的设计与实现[硕士学位论文]. 哈尔滨: 哈尔滨工程大学, 2014.
[19]
陈存弟. 基于DSP的智能交通车辆动态图像识别[硕士学位论文]. 福州: 福建师范大学, 2019