朱飞祥,王少博,邢胜伟,那文杰
(大连海事大学 航海学院, 辽宁 大连 116026)
近年来,海上水面自主船舶(Maritime Autonomous Surface Ship,MASS)逐渐成为世界各国和相关国际组织关注的热点。[1-3]港内航行和自动靠离泊是MASS航行过程中的重要阶段。[4]如何正确检测和识别泊位码头,是MASS在未知港口环境中自主航行和自动靠离泊过程中面临的一个亟待解决的问题。传统的船用雷达由于在近距离探测中存在一些盲区,因此适合远距离探测。摄像头易受光线强度、雨雾环境等因素的影响。因此,对于MASS而言,需要一种实时性强、精度高的探测手段感知周围近距离环境。目前,三维激光雷达(Light Detection and Ranging,LiDAR)由于具有精度高、更新频率快等优点,通常应用于无人车、移动机器人在运动环境中的障碍物检测和环境地图构建中,取得了相关研究成果。[5]在船舶领域,PASTORE等[6]针对无人艇,对激光雷达的实用性和缺陷进行分析,并与其他种类的传感器进行效益比较;HALTERMAN等[7]、WESSMAN[8]和STATECZNY等[9]利用激光雷达在实验室水池或湖泊环境中进行试验,对船舶障碍物检测和避障场景中的感知能力、遇到的问题和挑战进行分析;谢磊等[10]采用岸基检测法获取船舶激光点云数据,提出一种基于轮廓线聚类分析的船舶超吃水检测方法;ESPOSITO等[11]针对湖泊、河流上较小的木质码头的几何特征,提出一种基于激光雷达的码头识别算法;王贵槐等[12]针对内河环境中主要障碍物的激光数据特征,提出一种基于支持向量机(Support Vector Machine,SVM)的内河典型障碍物识别方法。
总体上看,相比对激光雷达在无人车目标检测和识别领域的深入应用研究,在船舶领域的研究主要集中在对激光雷达的适用性、探测能力等方面的综合性探讨上。部分学者基于无人艇,在内河、湖泊环境中开展感知试验研究,而面向沿海水域特别是基于大型商船的实船测试,利用激光雷达进行沿海港内典型目标识别的研究尚处于起步阶段。本文综合运用点云数据裁剪、点云数据过滤、点云数据聚类分割和检测识别等方法,提出和实现基于LiDAR的沿海泊位码头检测和识别算法,并在商船进出港和靠、离泊的真实场景中进行测试验证。
本次试验采用旋转式多线LiDAR,其采用脉冲式飞行时间测距法,在物体反射率只有20%的情况下,测量距离可达200 m。像摄像头一样,LiDAR传感器也有自己的坐标系,测量产生的数据都是基于传感器坐标系得到的。在试验所用LiDAR的坐标系中,x轴指向设备输出电缆的反方向,y轴指向左,z轴指向上见图1。
由于多线LiDAR的激光线束具有非线性、不均匀分布的特点,在相同线束条件下,一个物标越远,扫描到的点数越少。根据试验所用LiDAR的测距原理,LiDAR设备应放置在船体外部,以保证视线清晰,其最佳位置是艏向或两舷,保证传感器在最大限度无遮挡的情况下探测到码头实况。
本文对沿海港口内的泊位码头进行研究。这种码头是港区内最常见的水工建筑物,为大型船舶停靠、货物装卸和旅客上下船提供便利。这种码头形状的多样性使得研究较为复杂,因此本文对研究对象的码头特征作以下设定:
1) 码头由陆地延伸到海里,其突出部分呈长方形,上平面具有显著的水平性,与水平面夹角小于5°。
2) 码头突出部分宽度不小于5 m,长度不小于50 m(保证至少1艘海船可靠泊)。
符合上述设定特征的码头见图2。
图1 LiDAR坐标系
根据LiDAR的工作原理,考虑雷达安装位置的限制,点云数据会受船舶振动、船顶天线、桅杆和海上大雾等因素的干扰,基于3D LiDAR的泊位码头识别算法包括点云数据裁剪、点云数据过滤、点云数据聚类分割和检测识别等4部分。
在船舶靠泊试验中,LiDAR设备不可避免地会检测到附近港口内停靠的船舶、道路、汽车、房屋和广告牌等岸上物标以及本船上的桅杆、天线和栏杆等船舶自身干扰物标,见图3。
图3 船舶停靠港口码头时的场景
为减轻后续泊位码头检测算法的计算压力,根据相对本船安装的LiDAR设备的方位和距离对扫描得到的点云数据进行裁剪,剔除本船自身干扰物标的信息,提高后续点云数据的处理效率。点云数据裁剪算法设计为:固定在船舶上的LiDAR在自身坐标系下扫描到的桅杆、天线和栏杆等船舶自身干扰物在任意帧中的坐标位置是固定的。因此,将某一帧中的所有点投影到LiDAR坐标系的Oxy平面上,在Oxy平面内估算船舶自身干扰物相对于LiDAR的距离和方位。在确保船舶自身干扰物不遮挡被测码头的情况下,通过合理设置距离和方位阈值,就能裁剪掉船舶自身的干扰物,而保留包含待测码头的点云数据。
在3D LiDAR获取点云数据时,由于电磁干扰、船舶振动等环境因素的影响,在测量所得的点云数据中存在不合理的噪声点。对原始点云数据进行裁剪并不能去除这些噪声点,噪声点可能远离被测物体点云,对后续物标聚类的影响较大。因此,本文采用统计滤波器去除噪声点,即对每个点计算其到所有临近k个点的平均距离,假设这些距离构成高斯分布,则其形状由均值和标准差决定。因此,平均距离在标准范围(给定的均值和标准差)之外的点,可将其视为离群点剔除。
如图3所示,从对场景扫描得到的点云数据看,右下角的灯桩与码头连接成为一体。为进一步准确分割码头,基于随机采样一致算法(Random Sample Consensus,RANSAC)对裁剪和滤波后的点云数据进行聚类分割,提取出码头的轮廓边缘,这是准确计算码头几何尺寸的基础。RANSAC是从一组含有异常数据的样本数据集中正确估计数学模型参数的迭代算法[13],该算法非常适合从杂乱的点云中检测出某些具有特殊几何外形的物体。本文根据泊位码头的特征,基于平面模型对泊位码头进行聚类分割。假设平面模型在空间中的表达形式为
ax+by+cz+d=0
(1)
根据评价函数估计平面是否满足,即
(2)
(3)
(4)
在得到平面模型参数[a,b,c,d]之后,判断其他点到平面的距离是否小于设置的距离阈值dT,若小于,则属于内点,否则为外点。因此,可通过设置距离平面的合适高度阈值dT,包容对泊位码头表面点云数据的正常波动,同时将其上部超过阈值的灯桩和栏杆等作为异常点剔除,从而分割得到码头的水平面。
对聚类得到的物标进行几何特征值计算。根据第1.2节给出的码头特征计算物标的轮廓尺寸,可采用主成分分析方法获取物标的有向包围盒(Oriented Bounding Box,OBB)[14],估算物标的长度和宽度,并利用第1.2节给定的泊位码头的几何特征进行验证,从而实现对泊位码头的识别。
在大连长海县大长山岛鸳鸯港码头水域进行试验。试验所用LiDAR使用三角支架支撑,安装在船舶驾驶台顶部甲板(罗经甲板)右舷,与水平面保持垂直,见图4。
在LiDAR坐标系中,x轴指向船舶右舷外,y轴指向艏方向,z轴指向天空如图4所示。如果不考虑船舶晃动等外界干扰因素,LiDAR坐标系中的Oxy平面将与水平面保持平行。
选取该水域的2个不同码头进行靠泊试验,码头情况见图5。
图4 LiDAR安装位置
基于开源的点云库(Point Cloud Library, PCL)[15],采用VS2013作为开发平台实现对泊位码头识别的所有算法。同时,在整个试验过程中对相关算法进行验证。
受LiDAR实际安装条件的限制,船舶在航行过程中获得的每帧360°扫描的LiDAR点云都包含船顶天线和桅杆等干扰物标。如果在港外海域,当船舶航速较快时,获得的LiDAR点云还会受到船舶艉迹的干扰。本文选取船舶低速靠泊码头1过程中的一帧LiDAR原始点云数据(见图6)进行分析。该帧LiDAR扫描得到的场景中包含艏部、天线、桅杆、船舶右舷和码头等物标共33 170个扫描点。
考虑到船舶在靠泊过程中,LiDAR安装在船舶右舷(x轴指向船舶右舷,y轴指向艏部),定义在LiDAR坐标系Oxy平面上,相对方位0°为y轴指向,顺时针旋转,取值为[0,360°)。采用第2.1节的点云裁剪算法,对离坐标原点O的距离小于12 m或相对方位大于180°、小于360°的点进行裁剪,得到包含码头1的点云数据见图7。与原始点云数据相比,裁剪后的点云数据共包含8 240个扫描点,大大降低了后续码头聚类算法的运算量。
图6 LiDAR原始点云数据 图7 码头1裁剪后的点云图
由图7可知:通过简单设置距离和方位阈值对点云数据进行裁剪,不能剔除码头上的灯桩和护栏等物体。因此,尝试运用聚类分割算法得到码头物标。为提高聚类的效果,首先用统计滤波器去除裁剪后点云数据中的噪声点,过滤后的点云数据包含7 742个扫描点;然后运用PCL创建SACSegmentation对象,选择基于RANSAC的平面分割模型,获得码头平面。在平面聚类分割算法中,考虑到码头上灯桩和护栏的高度,本文设置距离阈值dT=0.3 m,得到在LiDAR坐标系下码头1的平面模型的空间表达式为
0.035 4x+0.047y+0.998z+7.565=0
(5)
码头1对应的平面样本集中有7 742个扫描点,其中4 800个扫描点(约为62%)为内点。聚类分割出的码头1平面效果见图8,该算法能较好地移除码头上的灯桩和护栏等干扰物标。
运用两平面夹角余弦公式反求夹角,得到码头1的平面与LiDAR坐标系中的Oxy水平面z=0,即水平面之间的夹角约为3.37°,符合第1.2节给出的码头特征1。最后,计算物标的OBB(见图9),得到OBB的宽为10.67 m,长为76.94 m,符合第1.2节给出的码头特征2。
图8 聚类分割出的码头1 图9 码头1的外接包围盒
同样,在船舶靠泊码头2试验过程中,对原始LiDAR点云数据进行裁剪和过滤操作之后,运用第2.3节的算法聚类分割码头平面。在设置距离阈值dT=0.3 m时,计算得到码头2的平面模型空间表达式为
-0.059 9x+0.005 55y+0.998z+7.302=0
(6)
码头2对应的平面样本集中包括3 766个扫描点,其中2 614个扫描点(约69%)是内点。该平面与LiDAR坐标系中的Oxy水平面的夹角约为3.45°,也具备显著的水平性。最后,计算得到OBB的宽为11.02 m,长为68.06 m,符合第1.2节给出的码头特征。
本文面向MASS港内避障、靠离泊等应用需求,提出一个基于3D LiDAR的沿海港口泊位码头识别算法。该算法组合点云数据裁剪、点云数据滤波和聚类分割等几部分,运用开源的PCL工具,结合VS2013开发平台实现对特定种类码头的识别功能。该算法能有效地克服LiDAR实际安装条件的限制,剔除天线、桅杆等物标的干扰,同时可灵活地设置所检测泊位码头的几何尺寸,且不受码头的灯桩、护栏等附属物的影响,具有一定的鲁棒性。最后,对2个泊位码头进行实船试验,证明了该算法的准确性和有效性。
由于泊位码头的多样性(例如不同码头形状、码头上大型装卸设备遮挡等情况),下一步需考虑搜集更多的码头扫描数据对算法进行完善;同时,虽然LiDAR有主动探测、不受光照影响、能获取较为准确的物标位置和3D信息等优点,但也有受雨、雪、雾的影响无法探测被遮挡物体的缺点,因而需加强与其他数据源(例如摄像头、电子海图数据)之间的融合,获取和建立不同类型码头的更多特征,进一步提高算法的普适性。