发明内容
本发明实施例的目的在于提供一种雷达与相机的标定方法、电子设备及存储介质,以实现提高雷达和相机的标定效率。具体技术方案如下:
第一方面,一种雷达与相机的标定方法,其特征在于,包括:
在车载的雷达和相机的共视区域设置标定板;
车辆向标定板行驶的过程中,车载的雷达采集多帧点云数据,以及车载的相机采集多帧图像数据;
根据所述多帧点云数据中每帧点云数据的时间戳和所述多帧图像数据中每帧图像数据的时间戳,确定与每帧点云数据匹配的目标图像数据;
针对每帧点云数据,确定该点云数据中的第一标定点,并确定与该点云数据匹配的目标图像数据中的第二标定点,得到该点云数据对应的标定点组;其中,所述第一标定点为所述标定板的指定位置在该点云数据中对应的光点,所述第二标定点为所述标定板的指定位置在所述目标图像数据中对应的像素点;
根据各点云数据对应的标定点组,确定所述雷达的坐标系和所述相机的坐标系之间的坐标转换关系。
可选的,所述根据所述多帧点云数据中每帧点云数据的时间戳和所述多帧图像数据中每帧图像数据的时间戳,确定与每帧点云数据匹配的目标图像数据,包括:
针对所述多帧点云数据中的每帧点云数据执行以下操作:
从所述多帧图像数据中,查找与该点云数据的时间戳之间的差值最小的图像数据;
如果该点云数据的时间戳与所查找到的图像数据的时间戳之间的差值小于预设差值,则将所查找到的图像数据作为与该点云数据匹配的目标图像数据。
可选的,在所述确定该点云数据中的第一标定点之前,所述方法还包括:
获取该点云数据对应的运动信息,所述运动信息包括:所述雷达采集该点云数据的过程中所述车辆行驶的位移和速度;
根据所述运动信息,对该点云数据进行畸变补偿,得到该点云数据中的每个光点在指定坐标系下的坐标,所述指定坐标系为该点云数据中第一个采集到的光点所处的雷达坐标系;
针对每个光点,利用该光点在所述指定坐标系下的坐标,替换该光点原本的坐标。
可选的,所述根据所述运动信息,对该点云数据进行畸变补偿,得到该点云数据中的每个光点在指定坐标系下的坐标,包括:
基于获取的每个光点所属的雷达线束,得到每个光点在雷达扫描该点云数据过程中的相对扫描时间;
在获取的运动信息与相邻的运动信息之间进行插值,得到获取的运行信息对应的时刻与相邻的运动信息对应的时刻之间的时间段内,每个时刻的位移和速度;
针对该点云数据包括的每个光点,根据该光点在雷达扫描该点云数据过程中的相对扫描时间和该相对扫描时间对应的位移和速度,确定该光点所在的坐标系相对于所述指定坐标系的补偿变换矩阵;
将该光点的坐标乘以确定的补偿变换矩阵,得到该光点在所述指定坐标系下的坐标。
可选的,所述标定板为棋盘格标定板,所述指定位置为所述棋盘格标定板的顶点;
所述确定与该点云数据匹配的目标图像数据中的第二标定点,包括:
提取所述目标图像数据包括的棋盘格图形中的指定角点对的坐标,每个角点对与所述棋盘格标定板的一个顶点位于一条直线上;
根据每个指定角点对的坐标,确定所述目标图像数据中,与该指定角点对位于一条直线上的顶点的像素点,作为所述第二标定点。
可选的,所述根据每个指定角点对的坐标,确定所述目标图像数据中,与该指定角点对位于一条直线上的顶点的像素点,作为所述第二标定点,包括:
针对每个指定角点对,根据该指定角点对的坐标,确定该指定角点对包括的两个角点之间的距离,以及该指定角点对包括的两个角点之间的连线与所述棋盘格图形下底边之间的夹角度数;
根据该指定角点对包括的两个角点之间的距离和该指定角点对所对应的夹角角度,确定与该指定角点对位于一条直线上的顶点的像素点,作为所述第二标定点。
可选的,所述标定板为矩形,所述标定板的指定位置为所述标定板的顶点;
所述确定该点云数据中的第一标定点,包括:
识别该点云数据中与所述标定板相关的光点组成的目标点簇;
对所述目标点簇中处于边界的光点进行直线拟合,得到多条拟合直线;
将各拟合直线之间的交点,作为所述第一标定点。
可选的,所述识别该点云数据中与所述标定板相关的光点组成的目标点簇,包括:
识别该点云数据中属于相同平面的光点组成的点簇;
根据各点簇对应的平面的尺寸,将平面尺寸满足所述标定板的尺寸条件的点簇作为目标点簇。
可选的,在所述识别该点云数据中与所述标定板相关的光点组成的目标点簇之前,所述方法还包括:
根据该点云数据中每个光点的位置,对该点云数据中的光点进行过滤,得到位置满足过滤条件的光点;
其中,所述过滤条件包括以下条件中的任意一种或多种:光点对应的位置与所述雷达的水平距离不超过预设水平距离、光点对应的位置与所述雷达的竖直距离不超过预设竖直距离、光点对应的位置与所述雷达的高度距离不超过预设高度距离、和所述雷达扫描光点时所处的位置与雷达的初始扫描位置之间的角度属于预设角度范围。
可选的,在所述根据各点云数据对应的标定点组,确定所述雷达的坐标系和所述相机的坐标系之间的坐标转换关系之后,所述方法还包括:
针对所述雷达采集的每帧点云数据,根据所述坐标转换关系,确定该点云数据中的第一标定点与该点云数据对应的目标图像数据中的第二标定点之间的误差;
判断各点云数据对应的误差是否满足误差限制条件;
若各点云数据对应的误差不满足所述误差限制条件,则返回所述在车载的雷达和相机的共视区域设置标定板的步骤,直至各点云数据对应的误差满足所述误差限制条件。
可选的,在所述根据各点云数据对应的标定点组,确定所述雷达的坐标系和所述相机的坐标系之间的坐标转换关系之后,所述方法还包括:
从所述雷达采集的各点云数据中,选择预设数量的点云数据;
针对选择的每帧点云数据,根据所述坐标转换关系,确定该点云数据中的每个光点在该点云数据对应的目标图像数据上的光投影点,并在可视化模块中在该点云数据对应的目标图像数据上展示各光投影点。
可选的,所述针对每帧点云数据,确定该点云数据中的第一标定点,并确定与该点云数据匹配的目标图像数据中的第二标定点,包括:
主线程将每一对匹配的点云数据和目标图像数据放入工作队列;
基于并行处理的多个工作线程各自的工作状态,按照匹配的点云数据和目标图像数据在所述工作队列中的顺排列序,每个工作线程从所述工作队列中获取匹配的点云数据和目标图像数据,并从获取的点云数据中提取第一标定点,以及从获取的目标图像数据中提取第二标定点。
第二方面,本发明实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述任一雷达与相机的标定方法的步骤。
第三方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一雷达与相机的标定方法的步骤。
第四方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一雷达与相机的标定方法。
本发明实施例提供的雷达与相机的标定方法、电子设备及存储介质,可以在车辆向标定板行驶的过程中,通过车载的雷达采集多帧点云数据,以及通过车载的相机采集多帧图像数据,并基于获取到的数据进行标定。由于车辆在行驶过程中相机和雷达所处的位置是不断变化的,而标定板的位置没变,即雷达和相机分别与标定板的相对位置不断变化。因此相当于获取到了相机和雷达在多种不同的位姿下采集到的数据,而且相机和雷达的位置随着车辆行驶位置变化,不需要人工调整,因此提高了标定效率。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。
为了提高雷达和相机的标定效率,本发明实施例提供了一种雷达与相机的标定方法,该方法可以应用于车载工控机,其中车载工控机所在的车辆安装有雷达和相机。雷达和相机可以安装在车顶或者车头等位置,使得雷达和相机能够扫描或拍摄到位于车辆外部的标定板即可。本发明实施例中的雷达为多线雷达,例如激光雷达和/或毫米波雷达。
如图1所示,本发明实施例提供的雷达与相机的标定方法包括以下步骤:
S101,在车载的雷达和相机的共视区域设置标定板。
在本发明实施例中,车载的雷达和相机的共视区域表示:雷达扫描的场景与相机拍摄的场景的重叠区域。雷达和相机的共视区域可以设置在车辆的前方,此时标定板设置在车辆的前方。例如,标定板可以安装在车外标定支架上,位于车辆正前方20米(metre,m)处。
可选的,可以通过调整标定板高度的方式,使得标定板位于雷达和相机的共视区域。
S102,车辆向标定板行驶的过程中,车载的雷达采集多帧点云数据,以及车载的相机采集多帧图像数据。
可选的,为提高标定准确性,可以设置车辆向标定板匀速行驶。例如,匀速行驶的速度可以是0-10km/h中的任一速度。其中,km为kilo metre,即千米,h为hour,即小时。
S103,根据多帧点云数据中每帧点云数据的时间戳和多帧图像数据中每帧图像数据的时间戳,确定与每帧点云数据匹配的目标图像数据。
在本发明实施例中,相机拍摄图像数据的频率大于雷达扫描点云数据的频率,例如,相机拍摄图像数据的频率为20赫兹(Hertz,Hz),表示相机一秒钟拍摄得到20帧图像数据;雷达扫描点云数据的频率10Hz,表示雷达一秒钟扫描得到10帧点云数据。
在相同的时间内,相机拍摄的图像数据多于雷达扫描的点云数据,可以针对每帧点云数据,将时间戳与该点云数据的时间戳之间的差值小于预设差值的图像数据,作为与该点云数据匹配的目标图像数据。例如,预设差值为25毫秒(milli second,ms)。
S104,针对每帧点云数据,确定该点云数据中的第一标定点,并确定与该点云数据匹配的目标图像数据中的第二标定点,得到该点云数据对应的标定点组。
其中,第一标定点为标定板的指定位置在该点云数据中对应的光点,第二标定点为标定板的指定位置在目标图像数据中对应的像素点。
可选的,点云数据中的第一标定点和目标图像数据中的第二标定点均可以存在多个,此时标定点组中包括多对标定点,每对标定点包括一个第一标定点和一个第二标定点。每对标定点对应的物理位置相同,每对标定点相互对应,用于计算雷达的坐标系和相机的坐标系之间的坐标转换关系。
S105,根据各点云数据对应的标定点组,确定雷达的坐标系和相机的坐标系之间的坐标转换关系。
可选的,坐标转换关系可以是从雷达的坐标系到相机的坐标系的旋转矩阵和平移向量,或者坐标转换关系可以是从相机的坐标系到雷达的坐标系的旋转矩阵和平移向量。
一种实施方式中,可以利用opencv库中的cv::solvePnPRansac()函数,根据各点云数据对应的标定点组,确定雷达的坐标系和相机的坐标系之间的坐标转换关系。其中,opencv库是一个跨平台计算机视觉和机器学习软件库,cv::solvePnPRansac()函数用于标定解算,即确定坐标系之间的坐标转换关系。
本发明实施例提供的雷达与相机的标定方法,可以在车辆向标定板行驶的过程中,通过车载的雷达采集多帧点云数据,以及通过车载的相机采集多帧图像数据,并基于获取到的数据进行标定。由于车辆在行驶过程中相机和雷达所处的位置是不断变化的,而标定板的位置没变,即雷达和相机分别与标定板的相对位置不断变化。因此相当于获取到了相机和雷达在多种不同的位姿下采集到的数据,而且相机和雷达的位置随着车辆行驶位置变化,不需要人工调整,因此提高了标定效率。
在本发明实施例中,上述S103,确定与每帧点云数据匹配的目标图像数据的方式可以实现为:针对多帧点云数据中的每帧点云数据执行:从多帧图像数据中,查找与该点云数据的时间戳之间的差值最小的图像数据。如果该点云数据的时间戳与所查找到的图像数据的时间戳之间的差值小于预设差值,则将所查找到的图像数据作为与该点云数据匹配的目标图像数据。
例如,预设差值为25ms,点云数据1的时间戳为8:00:17.96,图像数据1的时间戳为8:01:13.25,图像数据2的时间戳为8:00:59.15,图像数据3的时间戳为8:00:17.96。与点云数据1的时间戳之间的差值最小的图像数据为图像数据3,图像数据3与点云数据1之间的时间戳差值为0ms<25ms,因此与点云数据1匹配的目标图像数据为图像数据3。
可选的,如果点云数据的时间戳与所查找到的图像数据的时间戳之间的差值不小于预设差值,则确定该点云数据没有匹配的目标图像数据。
在相机具备为图像数据设置时间戳功能的情况下,在上述S102获取点云数据和图像数据之前,还可以通过车载工控机的时间同步模块,设置雷达的时间源与相机的时间源为同一时间源,即实现雷达与相机的时间同步,方便更准确地匹配图像数据与点云数据。
或者,在相机不具备为图像数据设置时间戳功能的情况下,可以由车载工控机的时间同步模块,为相机拍摄的图像数据设置时间戳。在上述S102获取点云数据和图像数据之前,还可以通过车载工控机的时间同步模块,设置雷达的时间源与时间同步模块的时间源为同一时间源,即实现雷达与时间同步模块的时间同步,方便更准确地匹配图像数据与点云数据。
在本发明实施例中,由于雷达扫描过程中旋转360°得到一帧点云数据,而雷达旋转过程中,车辆处于行驶状态,因此一帧点云数据中的每个光点由于在不同时刻获得,导致雷达扫描每个光点时所处的位置不同,即每个光点所处的坐标系不同。
因此在上述S104确定该点云数据中的第一标定点之前,还可以对点云数据进行畸变补偿,以将每帧点云数据中的各光点统一到同一坐标系。参见图2,车载工控机对S102中雷达采集的每帧点云数据进行畸变补偿的过程包括以下步骤:
S201,获取该点云数据对应的运动信息。其中,运动信息包括:雷达采集该点云数据的过程中车辆行驶的位移和速度。
一种实施方式中,速度可由车辆中的惯性测量单元(Inertial MeasurementUnit,IMU)采集,将车辆的行驶速度与雷达扫描一帧点云数据的耗时相乘,能够得到雷达采集该点云数据的过程中车辆行驶的位移。
每条运动信息标记有时间戳,该时间戳为IMU采集车辆行驶速度的时间戳。可以将与该点云数据的时间戳之间的差值最小的运动信息,作为该点云数据对应的运动信息。可选的,运动信息还可以包括角速度,角速度由IMU采集。
在S201之前,还可以通过车载工控机的时间同步模块,设置雷达的时间源与IMU的时间源为同一时间源,即实现雷达与IMU的时间同步,方便更准确地匹配点云数据与运动信息。
S202,根据运动信息,对该点云数据进行畸变补偿,得到该点云数据中的每个光点在指定坐标系下的坐标。其中,指定坐标系为该点云数据中第一个采集到的光点所处的雷达坐标系。
S203,针对每个光点,利用该光点在指定坐标系下的坐标,替换该光点原本的坐标。
本发明实施例能够对点云数据进行畸变补偿,减少车辆的运动对于光点位置准确性的影响,进而提高了确定的点云数据中的第一标定点位置的准确性,即提升了标定的准确性。
针对上述S202,根据运动信息,对该点云数据进行畸变补偿,得到该点云数据中的每个光点在指定坐标系下的坐标,可以实现为以下四个步骤:
步骤一、基于获取的每个光点所属的雷达线束,得到每个光点在雷达扫描该点云数据过程中的相对扫描时间。
一种实施方式中,可以针对每个光点,根据该光点的坐标,确定该光点所属的雷达线束(雷达采用发射多线束的方式,通过每个线束采集光点)。然后基于该光点的坐标和该光点所属的雷达线束,计算出雷达扫描该光点时的位置相对于雷达扫描该点云数据中第一个光点时的位置的旋转角度。再基于雷达扫描得到一帧点云数据的总耗时和计算出的旋转角度,得到该光点在雷达扫描该点云数据过程中的相对扫描时间。
在本发明实施例中,一个光点的相对扫描时间可以理解为:雷达扫描该光点的时间相对于雷达扫描该点云数据中第一个光点的时间之间的时间差。
步骤二、在获取的运动信息与相邻的运动信息之间进行插值,得到获取的运行信息对应的时刻与相邻的运动信息对应的时刻之间的时间段内,每个时刻的位移和速度。
在本发明实施例中,运动信息是离散的,即每间隔一段时间,得到一条运动信息。而车辆每个时刻的运动信息不一定完全相同。为了提高畸变补偿的准确性,需要得到雷达扫描该点云数据中的每个光点时,车辆的位移和速度。
一种实施方式中,可以基于各运动信息的时间戳,确定S201获取的运动信息相邻的运动信息。然后在S201获取的运动信息和确定的相邻的运动信息之间进行插值,得到S201获取的运行信息对应的时刻与相邻的运动信息对应的时刻之间的时间段内,每个时刻的位移和速度。即相当于获取到该时间段内车辆行驶的连续的位移和速度。其中,运动信息对应的时刻基于运动信息的时间戳确定。
例如,S201获取的运动信息B的时间戳为005,与该运动信息相邻的运动信息为:时间戳为004的运动信息A以及时间戳为006的运动信息C。在运动信息A和运动信息B之间进行插值,以及在运动信息B和运动信息C之间进行插值,从而得到时间戳004至时间戳006之间的时间段内,连续的位移和速度。
可选的,选择相邻的运动信息的数量可以基于运动信息的采集频率确定。在执行步骤二时,可以选择与S201获取的运动信息相邻的预设数量个运动信息。运动信息的采集频率越大,预设数量越多,运动信息的采集频率越小,预设数量越少。以保证雷达扫描该点云数据的时间段处于,步骤二中获取的运行信息对应的时刻与相邻的运动信息对应的时刻之间的时间段内。
步骤三、针对该点云数据包括的每个光点,根据该光点在雷达扫描该点云数据过程中的相对扫描时间和该相对扫描时间对应的位移和速度,确定该光点所在的坐标系相对于指定坐标系的补偿变换矩阵。
例如,假设步骤二得到[100,200]时间段内每个时刻的位移和速度,即连续的位移和速度,同时该点云数据第一个光点的时间戳为120。一个光点的相对扫描时间为20,则该光点对应的位移和速度为:[100,200]时间段内120+20=140对应的位移和速度。
步骤四、将该光点的坐标乘以确定的补偿变换矩阵,得到该光点在指定坐标系下的坐标。
由于本发明实施例能够基于雷达扫描每个光点时车辆行驶的位移和速度,对点云数据进行畸变补偿,因此提高了对点云数据进行畸变补偿的准确性。
在本发明实施例中,标定板可以为棋盘格标定板,指定位置为棋盘格标定板的顶点。在不考虑厚度时,棋盘格标定板为矩形,标定板顶点为矩形的四个顶点。
基于此,参见图3,上述S104确定目标图像数据中的第二标定点的方式包括以下两个步骤:
S301,提取目标图像数据包括的棋盘格图形中的指定角点对的坐标。其中,每个角点对与棋盘格标定板的一个顶点位于一条直线上。
在本发明实施例中,在S301之前,还可以对目标图像数据进行预处理。其中,预处理过程包括格式转换和去畸变处理。
格式转换过程包括:从车载工控机的相机驱动模块获取sensor_msgs::Image格式的目标图像数据的尺寸(size),在内存中开辟cv::Mat格式的不小于获取的size的存储空间。通过车载工控机的图形处理器(Graphics Processing Unit,GPU)将目标图像数据的格式转换为cv::Mat并存入内存中开辟的存储空间。其中,相机驱动模块用于驱动相机采集图像数据。
其中,cv::Mat格式是opencv库的基本数据格式,将目标图像数据的格式转为cv::Mat格式,方便后续利用opencv库对目标图像数据进行处理。
去畸变处理过程包括:从该存储空间获取cv::Mat格式的目标图像数据,基于相机的内参矩阵,对目标图像数据进行去畸变处理,再将去畸变处理后的目标图像数据转为灰度图。
在S301中,可以通过调用opencv库指定的应用程序接口(ApplicationProgramming Interface,API),提取目标图像数据包括的棋盘格图形中的各角点的坐标,再从提取的角点的坐标中,获取指定角点对的坐标。
其中,结合图4,棋盘格图形中的各角点为:各黑/白正方形的四个顶点中,除了位于棋盘格图形边缘的顶点以外的各顶点。利用API得到的各角点的坐标设置有索引,可以获取指定索引的角点的坐标,即得到指定角点对的坐标。
S302,根据每个指定角点对的坐标,确定目标图像数据中,与该指定角点对位于一条直线上的顶点的像素点,作为第二标定点。
一种实施方式中,可以针对每个指定角点对,根据该指定角点对的坐标,确定该指定角点对包括的两个角点之间的距离,以及该指定角点对包括的两个角点之间的连线与棋盘格图形下底边之间的夹角度数。根据该指定角点对包括的两个角点之间的距离和该指定角点对所对应的夹角度数,确定与该指定角点对位于一条直线上的顶点的像素点,作为第二标定点。
如图4所示,一对指定角点为P1和P2,与该指定角点对位于一条直线上的顶点为P,P与P1之间的竖向距离为H,P与P1之间的横向距离为W,P与P1之间的直线距离为S。P1与P2之间的的竖向距离为h,P1与P2之间的横向距离为w,P1与P2之间的直线距离为s。P1和P2之间的连线与棋盘格图形下底边之间的夹角,即s与w之间的夹角为
。
根据P1、P2和P在标定板上的物理位置,可以得到线性比例关系k=S/s。其中,
,
。
根据P1在目标图像数据上的坐标(
,
),以及P2在目标图像数据上的坐标(
,
),计算P1和P2在目标图像数据上的距离
。
然后通过公式(1)计算P在目标图像数据上的坐标(
,
):
其中,
为P在目标图像数据上的横坐标,
为P在目标图像数据上的纵坐标,
为P1在目标图像数据上的横坐标,
为P1在目标图像数据上的纵坐标,
为线性比例关系,
为P1和P2在目标图像数据上的距离,
,
。
类似的,目标图像数据中的标定板除P点以外的其他三个顶点也可以通过上述方式确定。例如,如图5所示,利用像素点2和像素点3,确定像素点4。利用像素点1和像素点6,确定像素点5。利用像素点7和像素点8,确定像素点9。利用像素点11和像素点12,确定像素点10。
基于上述棋盘格标定板,参见图6,上述S104中从点云数据中提取棋盘格标定板的四个顶点对应的第一标定点的方式可以包括以下步骤:
S601,识别该点云数据中与标定板相关的光点组成的目标点簇。其中,与标定板相关的光点为雷达扫描标定板得到的光点。
车载工控机从车载工控机的雷达驱动模块获取到的点云数据的格式为velodyne_msgs::VelodyneScanUnified。为方便后续利用点云库(Point Cloud Library,PCL)从点云数据中提取第一标定点,在S601之前,还可以将点云数据的格式转换为pcl::PointCloud<pcl::PointXYZ>。其中,pcl::PointCloud<pcl::PointXYZ>为是PCL库的一种数据格式。
然后利用PCL库对点云数据中的光点进行过滤,过滤方式包括:根据该点云数据中每个光点的位置,对该点云数据中的光点进行过滤,得到位置满足过滤条件的光点。其中,过滤条件包括以下条件中的任意一种或多种:光点对应的位置与雷达的水平距离不超过预设水平距离、光点对应的位置与雷达的竖直距离不超过预设竖直距离、光点对应的位置与雷达的高度距离不超过预设高度距离、和雷达扫描光点时所处的位置与雷达的初始扫描位置之间的角度属于预设角度范围。
由于光点的坐标为三维坐标,能够反映光点对应的物理位置与雷达之间的水平、竖直和高度距离,因此本发明实施例能够根据光点的坐标,过滤与雷达之间的水平、竖直和高度距离过近或过远的光点。
并限定雷达扫描光点时的旋转角度。例如,预设角度范围为[0°,180°],即过滤掉雷达的旋转角度为180°以上时扫描到的光点,保留雷达的旋转角度为180°以内时扫描到的光点。
本发明实施例在S601之前对点云数据中的光点进行过滤,能够减少确定第一标定点所基于的光点数量,减少确定第一标定点的计算量,提高提取第一标定点的效率。
一种实施方式中,S601可以实现为:识别该点云数据中属于相同平面的光点组成的点簇,然后根据各点簇对应的平面的尺寸,将平面尺寸满足标定板的尺寸条件的点簇作为目标点簇。
可选的,可以采用PCL中的区域生长算法,确定目标点簇。其原理是:比较各光点的法线之间的角度,将法线之间的角度满足预设平滑约束条件的相邻光点归类为一簇。
标定板的尺寸条件可以预先设置,例如标定板的尺寸条件包括长和宽。点簇对应的平面尺寸可以根据位于点簇边缘的光点的坐标确定。
S602,对目标点簇中处于边界的光点进行直线拟合,得到多条拟合直线。
在S602之前,还可以将目标点簇从三维平面投影到二维平面,即参考目标点簇中的光点与雷达之间的高度距离和水平距离,而不考虑目标点簇中的光点与雷达之间的竖直距离(即深度距离)。然后在执行S602时,利用点云随机采样一致性分割算法,对二维平面上的目标点簇中处于边界的光点进行直线拟合,得到多条拟合直线。
本发明实施例将目标点簇投影到二维平面,与三维平面相比,在二维平面内更方便进行直线拟合,减少直线拟合的计算量。
S603,将各拟合直线之间的交点,作为第一标定点。
例如,两条直线方程如公式(2)所示。
其中,
、
、
、
、
和
均为常数。通过求解公式(2)所示的二元一次方程,能够得到两条直线的角点。
示例性的,如图7所示,图7中的黑色圆点为点云数据中与标定板相关的光点,四条拟合直线为L1、L2、L3、L4,这四条拟合直线的四个交点(图7中虚线圆圈圈中的交点)为第一标定点。
由于点云数据不能获得物体的纹理和色彩信息,但能够获得物体的位置信息,本发明实施例基于标定板相关的光点的位置,确定第一标定点,使得第一标定点的提取更准确。
在上述S105之后,本发明实施例还可以对当前计算的坐标转换关系进行自动质检,若质检不通过,还可以更新坐标转换关系,该过程可以实现为:
针对雷达采集的每帧点云数据,根据坐标转换关系,确定该点云数据中的第一标定点与该点云数据对应的目标图像数据中的第二标定点之间的误差。判断各点云数据对应的误差是否满足误差限制条件。若各点云数据对应的误差不满足误差限制条件,则返回S101,直至各点云数据对应的误差满足误差限制条件。
一种实施方式中,针对每个第一投影点,可以根据坐标转换关系,将该第一标定点投影到目标图像数据中,得到光投影点,然后计算光投影点与对应的第二标定点之间的坐标差值。在计算的各差值之和小于预设阈值时,或者在计算的各差值的平方和小于预设阈值时,确定各点云数据对应的误差是否满足误差限制条件。
在本发明实施例中,若S105无法计算出坐标转换关系,即第一标定点与对应的第二标定点之间的误差较大,导致标定解算失败时,可以返回S101,即重新设置标定板以及获取点云数据和图像数据,并重新进行标定解算。
由于本发明实施例可以在计算的坐标转换关系误差较大时,重新计算坐标转换关系,因此提高了确定相机的坐标系与雷达的坐标系之间的坐标转换关系的准确性。
在上述S105成功获得坐标转换关系之后,本发明实施例还可以将标定结果展示给人工质检,包括:从雷达采集的各点云数据中,选择预设数量的点云数据。然后针对选择的每帧点云数据,根据坐标转换关系,确定该点云数据中的每个光点在该点云数据对应的目标图像数据上的光投影点,并在可视化模块中在该点云数据对应的目标图像数据上展示各光投影点。
可选的,选择点云数据的方式可以随机选取,也可以按照顺序选取,还可以按照一定间隔选取,本发明实施例对此不作具体限定。
本发明实施例的可视化模块可以为车载显示屏,车载显示屏受车载工控机控制,车载工控机通过opencv库中的cv::projectPoints()函数,将点云数据投影到目标图像数据上。然后车载工控机向车载显示屏发送包含有光投影点的目标图像数据,使得车载显示屏显示包含有光投影点的目标图像数据。检测人员可以在车载显示屏中查看光投影点与图像数据中的像素点之间的误差。如果该误差较大,检测人员可以控制车载工控机返回S101,即重新设置标定板以及获取点云数据和图像数据,以重新确定坐标转换关系。
本发明实施例在对雷达和相机的标定过程中,人工干预少,且不受场地限制,能够高效且稳定地自动化标定。
而且,与先离线获取点云数据和图像数据,再将对雷达和相机进行标定的方式相比,本发明实施例能够在采集点云数据和图像数据时,对雷达和相机进行实时标定处理,因此提高了标定效率。
通常在标定雷达和相机时,仅标定一个雷达和一个相机,标定效率低。而本发明实施例可以实现多雷达和相机的标定,或者多相机与雷达的标定。以下对多相机与雷达的标定进行说明,多雷达与相机的标定,和多相机与雷达的标定方式类似。
在本发明实施例中,车辆安装有多个相机,在执行上述S102时,多个相机在车辆向标定板行驶的过程中,均采集图像数据。
在执行上述S103时,分别针对每帧点云数据,从每个相机采集的各图像数据中,确定与该点云数据匹配的目标图像数据。使得每帧点云数据与多帧目标图像数据匹配,且一帧点云数据匹配的多帧目标图像数据分别由不同的相机采集。
在执行上述S104时,针对每帧点云数据,确定该点云数据匹配的每个目标图像数据的标定点组,得到该点云数据对应的多个标定点组。一帧点云数据对应的一个标定点组包括第一标定点和属于同一帧目标图像数据的第二标定点。
例如,车辆安装有相机A和相机B,点云数据1在相机A采集的图像数据中与目标图像数据1匹配,点云数据1在相机B采集的图像数据中与目标图像数据2匹配。点云数据1中的第一标定点与目标图像数据1中的第二标定点为一个标定点组,点云数据1中的第一标定点与目标图像数据2中的第二标定点为一个标定点组。
可选的,参考图8,上述S104可以通过以下方式实现:车载工控机的主线程将每一对匹配的点云数据和目标图像数据放入工作队列。基于并行处理的多个工作线程各自的工作状态,按照匹配的点云数据和目标图像数据在工作队列中的顺排列序,每个工作线程从工作队列中获取匹配的点云数据和目标图像数据,并从获取的点云数据中提取第一标定点,以及从获取的目标图像数据中提取第二标定点。
在本发明实施例中,工作线程的工作状态表示工作线程的负载情况。可选的,处于空闲状态的工作线程优先从工作队列中获取匹配的点云数据和目标图像数据。工作线程每次从工作队列中获取一对匹配的点云数据和目标图像数据。
在本发明实施例中,从点云数据中提取第一标定点,以及从目标图像数据中提取第二标定点的方法可参考上述描述,此处不再赘述。
在执行上述S105时,通过多线程并行根据各点云数据与每个相机采集到的目标图像数据之间的标定点组,分别确定雷达的坐标系和每个相机的坐标系之间的坐标转换关系。
一种实施方式中,上述S104中在工作线程提取标定点后,将从同一相机采集的目标图像数据中提取的第二标定点和第二标定点对应的第一标定点,存储在内存的同一块存储区域。执行S105时,并行处理的各工作线程,分别从不同的存储区域中获取标定点组,进行标定解算,即通过每个工作线程得到雷达的坐标系和一个相机的坐标系之间的坐标转换关系。
可以看出,本发明实施例能够在获取到点云数据和图像数据时,实时提取标定点并进行标定解算,减少标定的耗时。而且,本发明实施例能够同时对多组设备进行标定,提高了标定效率。
以下通过一个具体实例,对本发明实施例的整体流程进行说明:
本发明实施例的车辆顶部安装有一个雷达和三个相机,参见图9,1为左相机,2为中相机,3为右相机,5为相机安装台,4为雷达,6为雷达安装台。其中,左相机和右相机的视场角(Field of View,FOV)为60°,中相机的FOV为120°。车载工控机与平板(pad)或车机通信连接,pad或车机中安装有指定应用程序(Application,APP),pad或车机用于通过APP接收用户发出的控制指令,然后控制车载工控机进行标定。
进一步,车载工控机可以集成在一种驾驶脑、或车机中。
雷达和3个相机的标定过程如图10所示:
S1001,在车载的雷达和相机的共视区域设置标定板,车载工控机控制车辆中的可视化模块开启,并显示雷达扫描的点云数据和相机拍摄的图像数据,如果标定板未完全处于雷达和相机的共视区域中,则调整标定板的位置,直至标定板完全处于雷达和相机的共视区域。
其中,标定板完全处于雷达和相机的共视区域,即标定板完全处于雷达的视野中,且标定板完全处于相机的视野中。
S1002,pad或车机接收用户发出的标定开启指令,并通知车载工控机开始标定。
S1003,车载工控机控制车辆向标定板的方向匀速行驶,并通知雷达驱动模块控制车载的雷达采集多帧点云数据,通知相机驱动模块分别控制车载的三个相机采集多帧图像数据。
例如,车辆向标定板的方向以10km/h的速度匀速行驶。
S1004,车载工控机针对每帧点云数据,分别从三个相机采集的图像数据中,确定该点云数据匹配的目标图像数据,得到该点云数据匹配的三个目标图像数据。
S1005,车载工控机针对每一对匹配的点云数据和目标图像数据,分别提取第一标定点和第二标定点,得到每帧点云数据对应的三个标定点组。
其中,每帧点云数据对应的三个标定点组中,一个标定点组包括该点云数据中的第一标定点、和该点云数据在左相机采集的图像数据中匹配的目标图像数据1中的第二标定点;一个标定点组包括该点云数据中的第一标定点、和该点云数据在中相机采集的图像数据中匹配的目标图像数据2中的第二标定点;一个标定点组包括该点云数据中的第一标定点、和该点云数据在右相机采集的图像数据中匹配的目标图像数据3中的第二标定点。
S1006,车载工控机根据各点云数据对应的三个标定点组,分别确定雷达的坐标系和三个相机的坐标系之间的坐标转换关系。
S1007,车载工控机对三个坐标转换关系进行质检,并根据质检结果确定质检是否通过。若质检不通过,则返回S1001。若质检通过,则执行S1008。
S1007对三个坐标转换关系进行质检,可以是人工质检也可以是自动质检,人工质检和自动质检的过程可参考上述描述,此处不再赘述。
S1008,车载工控机得到雷达的坐标系分别与三个相机的坐标系之间的坐标转换关系。
本发明实施例还提供了一种车载工控机,如图11所示,包括处理器1101、通信接口1102、存储器1103和通信总线1104,其中,处理器1101,通信接口1102,存储器1103通过通信总线1104完成相互间的通信,
存储器1103,用于存放计算机程序;
处理器1101,用于执行存储器1103上所存放的程序时,实现上述方法实施例中的方法步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一雷达与相机的标定方法的步骤。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一雷达与相机的标定方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk (SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于电子设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。