无人叉车的导航方法、介质和无人叉车
文献发布时间:2023-06-19 19:30:30
技术领域
本申请涉及无人叉车技术领域,具体涉及一种无人叉车的导航方法、介质和无人叉车。
背景技术
相关技术中,无人叉车在箱式的货柜车车厢内进行取放货物时,由于车厢长度较长、车厢内部光照条件不佳以及行驶晃动等原因,导致无人叉车在车厢内的行驶路径不可控,并且无人叉车无法通过二维码识别技术确定车厢内壁以及前方货物的位置,降低无人叉车的作业效率。
发明内容
基于此,有必要针对上述技术问题,提供一种可以解决无人叉车识别车厢内货物位置的无人叉车的导航方法、介质和无人叉车。
一种无人叉车的导航方法,包括以下步骤:
对位于车厢内部的无人叉车上配置的激光雷达采集的多个第一点云数据进行处理,获取多个第二点云数据;第二点云数据表征待处理的点云数据;
对多个第二点云数据进行处理,在多个第二点云数据中提取多个第三点云数据;第三点云数据表征在车厢中心坐标系下的位于车厢内部的点云数据;
在多个第三点云数据中,确定第四点云数据;第四点云数据表征在激光坐标系下的目标货物的数据;
对第四点云数据进行处理,生成无人叉车的行车路径,并控制无人叉车按照所述行车路径行驶。
一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述无人叉车的导航方法的步骤。
一种无人叉车,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述无人叉车的导航方法的步骤。
上述无人叉车的导航方法、介质和无人叉车,通过对位于车厢内部的无人叉车上配置的激光雷达采集的多个第一点云数据进行处理,获取多个第二点云数据,对多个第二点云数据进行处理,在多个第二点云数据中提取多个第三点云数据,从而从多个点云数据中筛选得到位于车厢内部的点云数据,在多个第三点云数据中,确定第四点云数据,对第四点云数据进行处理,生成无人叉车的行车路径,并控制无人叉车按照行车路径行驶,能够在位于车厢内部的点云数据中识别货物的位置,并生成无人叉车的行驶路径,避免无人叉车在行驶的过程中碰撞车厢壁和货物,有效地提高了无人叉车的工作效率,实现取放货物的任务。
附图说明
图1为一个实施例中无人叉车的导航方法的流程示意图;
图2为又一个实施例中无人叉车的导航方法的流程示意图;
图3为又一个实施例中无人叉车的导航方法的流程示意图;
图4为又一个实施例中无人叉车的导航方法的流程示意图;
图5为又一个实施例中无人叉车的导航方法的流程示意图;
图6为一个实施例中在Y-Z平面上划分的单元格的示意图;
图7为一个实施例中在X-Z平面上划分的单元格的示意图;
图8为一个实施例中无人叉车的导航方法的流程示意图;
图9为又一个实施例中无人叉车的导航方法的流程示意图;
图10为又一个实施例中无人叉车的导航方法的流程示意图;
图11为一个应用实施例中确定无人叉车的行车路径的流程示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
以下对本申请实施例的技术方案的实现细节进行详细描述。
在一个实施例中,如图1所示,提供了一种无人叉车的导航方法,该无人叉车的导航方法可包括以下步骤:
步骤S101,对位于车厢内部的无人叉车上配置的激光雷达采集的多个第一点云数据进行处理,获取多个第二点云数据。
激光雷达安装在无人叉车上,具体的安装位置可以根据实际需求确定,例如,激光雷达可以安装在无人叉车两端叉壁根部间的中点处。
无人叉车工作在车厢内部,在无人叉车行驶至车厢内部的监测点的情况下,开启无人叉车上的激光雷达,激光雷达通过向周围发射激光信号,并收集反射的激光信号,采集得到多个第一点云数据,其中,多个第一点云数据是由激光雷达扫描得到的空间点的数据集,每个第一点云数据包含了三维坐标信息,也就是X、Y、Z三个元素,基于此,第一点云数据为无人叉车当前所处的空间点的数据集,无人叉车当前所处的空间包括无人叉车、货物以及车厢,也就是多个第一点云数据中可以包含有属于无人叉车的点云数据、属于货物的无人叉车的点云数据以及车厢的点云数据。
在无人叉车的工作过程中,需要识别到车厢内壁以及货物位置,基于此,需要对激光雷达获取的多个第一点云数据进行数据清洗与数据筛选,获取多个第二点云数据,其中,第二点云数据是需要关注的点云数据,第二点云数据中包含有属于货物的无人叉车的点云数据以及车厢的点云数据,对多个第二点云数据进行处理,可以进一步确定车厢内壁以及货物位置。
步骤S102,对多个第二点云数据进行处理,在多个第二点云数据中提取多个第三点云数据。
第二点云数据中包含属于车厢壁(包括车厢左壁、车厢右壁与车厢底部)的点云数据,还包含属于货物的点云数据,为了能够使无人叉车能够识别货物的位置,需要对多个第二点云数据进行处理,从多个第二点云数据中提取多个第三点云数据,其中,第三点云数据为位于车厢内部的点云数据,也就是车厢中除车厢左壁、车厢右壁与车厢底部这三者之外的点云数据,可以理解的,货物是存放在车厢的内部,基于此,第三点云数据可以视为属于车厢存放空间的点云数据,也就是第三点云数据包含有货物的点云数据,在本实施例中,多个第三点云数据是在车厢中心坐标系下的三维坐标信息,其中,车厢中心坐标系是基于车厢的中心点建立的坐标系。
在实际应用中,可以通过对多个第二点云数据进行逐层筛选,最终提取多个第三点云数据,具体地,可以首先从多个第二点云数据,构建车厢左壁平面模型,通过车厢左壁平面模型确定位于车厢左壁之外的点云数据,之后通过位于车厢左壁之外的点云数据构建车厢右壁平面模型,再通过车厢右壁平面模型确定位于车厢右壁之外的点云数据(这部分的点云数据同时位于车厢左内壁和右壁之外),之后通过位于车厢右壁之外的点云数据构建车厢内地面模型,再通过车厢内地面模型可以确定位于车厢内地面之外的点云数据(这部分的点云数据同时位于车厢两侧车壁和内地面之外的点云数据,也就是第三点云数据)。在这个过程中的车厢左壁平面模型、车厢右壁平面模型和车厢内地面模型的构建过程,以及位于车厢左壁之外的点云数据、位于车厢右壁之外的点云数据以及车厢内地面之外的点云数据的确定过程将在后续的内容中进行详细说明。
在一个实施例中,如图2所示,对多个第二点云数据进行处理,在多个第二点云数据中提取多个第三点云数据,包括:
步骤S201,根据多个第二点云数据,确定车厢中心平面模型的模型参数和多个第五点云数据。
这里,车厢中心平面模型的模型参数分别包括A_middle、B_middle、C_middle和D_middle,其中,A_middle对应车厢中心平面模型的X轴的参数,B_middle对应车厢中心平面模型的Y轴的参数,C_middle对应车厢中心平面模型的Z轴的参数,D_middle对应车厢中心平面模型的常数项,从而可以得到车厢中心平面模型对应的平面方程,其中,车厢中心平面模型的平面方程可以表示为:A_middle*x+B_middle*y+C_middle*z=D_middle,其中,(x,y,z)为不同的坐标值。在实际应用中,通过对多个第二点云数据进行处理,获取车厢中心平面模型的模型参数,具体地,可以根据多个第二点云数据,分别得到车厢左壁平面模型的模型参数、车厢右壁平面模型的模型参数和车厢内地面模型的模型参数,进而再得到车厢平面模型的模型参数。
在实际应用中,对多个第二点云数据进行处理还可以得到多个第五点云数据,第五点云数据表征位于车厢两侧车壁与内地面之外的点云数据,通过对多个第二点云数据进行处理,将多个第二点云数据中位于车厢两侧车壁与内地面之外的点云数据分离,进而得到多个第五点云数据。
在一个实施例中,如图3所示,根据多个第二点云数据,确定车厢中心平面模型的模型参数,包括:
步骤S301,从多个第二点云数据中提取多个第六点云数据,并按照设定数据处理流程对多个第六点云数据进行处理,确定车厢左壁平面模型的模型参数。
这里,多个第六点云数据用于拟合车厢左壁的点云数据,也就是通过多个第六点云数据可以构建得到车厢左壁平面模型,在本实施例中,多个第六点云数据为多个第二点云数据中x<0的点云数据,也就是提取第二点云数据中x<0的点云数据,将这部分点云数据确定为第六点云数据,再按照设定数据处理流程对多个第六点云数据进行数据处理,确定车厢左壁平面模型的模型参数,在本实施例中,车厢左壁平面模型的模型参数分别包括A_left、B_left、C_left和D_left,其中,A_left对应车厢左壁平面模型的X轴的参数,B_left对应车厢左壁平面模型的Y轴的参数,C_left对应车厢左壁平面模型的Z轴的参数,D_left对应车厢左壁平面模型的常数项,这里的设定数据处理流程是确定模型参数的数据处理流程,设定数据处理流程的具体内容将在后续实施例中进行详细说明。
步骤S302,使用多个第二点云数据对车厢左壁平面模型的模型参数进行检验,并根据多个第二点云数据对应的第一检验结果,从多个第二点云数据中提取多个第七点云数据。
这里,在确定车厢左壁平面模型的模型参数之后,可以利用车厢左壁平面模型的模型参数,从多个第二点云数据中确定属于车厢左壁平面的点云数据。具体地,使用多个第二点云数据对车厢左壁平面模型的模型参数进行检验,其中,车厢左壁平面模型可以通过平面方程A_left*x
在确定第二点云数据对应的第一检验结果之后,再将第一检验结果与设定阈值进行比较,如果第一检验结果大于设定阈值,代表着对应的第二点云数据为车厢左壁之外的点云数据,则可以将对应的第二点云数据确定为第六点云数据,进而可以从多个第二点云数据中提取得到多个第六点数据。在实际应用中,由于多个第六点云数据为位于车厢左壁之外的点云数据,也就是多个第六点云数据中含有位于车厢右壁上的点云数据,因此可以对多个第六点云数据进行处理,进而确定车厢右壁平面模型的模型参数。
步骤S303,按照设定数据处理流程对多个第七点云数据进行处理,确定车厢右壁平面模型的模型参数。
在本实施例中,按照设定数据处理流程对多个第七点云数据中x>0的点云数据进行处理,其中,多个第七点云数据中x>0的点云数据用于拟合车厢右壁平面,进而确定车厢右壁平面模型的模型参数,车厢右壁平面模型的模型参数分别包括A_right、B_right、C_right和D_right,其中,A_right对应车厢右壁平面模型的X轴的参数,B_right对应车厢右壁平面模型的Y轴的参数,C_right对应车厢右壁平面模型的Z轴的参数,D_right对应车厢右壁平面模型的常数项。
步骤S304,根据车厢左壁平面模型的模型参数和车厢右壁平面模型的模型参数,确定车厢中心平面模型的模型参数。
这里,车厢中心平面模型的模型参数可以通过车厢左壁平面模型的模型参数和车厢右壁平面模型的模型参数确定,具体地,车厢中心平面模型的模型参数可以通过以下关系式确定,分别为:
在一个实施例中,如图4所示,根据多个第二点云数据确定多个第五点云数据,包括:
步骤S401,使用多个第七点云数据对车厢右壁平面模型的模型参数进行检验,并根据多个第七点云数据对应的第二检验结果,从多个第七点云数据中提取确定多个第八点云数据。
在本实施例中,第五点云数据是位于车厢两侧车壁和内地面之外的点云数据,基于此,还需要对多个第七点云数据进行处理,进而得到多个第五点数据。这里,可以通过确定车厢内地面模型的模型参数,再通过车厢内地面模型的模型参数,确定属于车厢内地面的点云数据以及位于车厢内地面之外的点云数据,进而可以提取得到多个第五点云数据。
这里,从多个第七点云数据中分离属于车厢右壁平面的点云数据,从而得到多个第八点云数据,其中,通过对多个第八点云数据进行处理,可以得到车厢内地面模型的模型参数。具体地,车厢右壁平面模型可以通过平面方程A_right*x+B_right*y+C_right*z=D_right表示,使用多个第七点云数据对车厢右壁平面模型的模型参数进行检验,可以得到每个第七点云数据对应的结果误差,进而得到多个第七点云参数对应的第二检验结果。假设存在第七点云数据(x
将第二检验结果与设定阈值进行比较,如果第二检验结果大于设定阈值,表明对应的第七点云数据为车厢右壁平面之外的点云数据,将对应的第七点云数据确定为第八点云数据,进而可以从多个第七点云数据中提取得到多个第八点云数据。需要说明的是,由于第八点云数据实际上为多个第七点云数据中的一个点云数据,且第七点云数据为位于车厢左壁平面之外的点云数据,基于此,第八点云数据位于车厢左壁平面和右壁平面之外的点云数据。
步骤S402,按照设定数据处理流程对多个第八点云数据进行处理,确定车厢内地面模型的模型参数。
这里,设定数据处理流程为确定车厢内地面模型的模型参数的数据处理流程,按照设定数据处理流程对多个第八点云数据进行处理,可以确定车厢内地面模型的模型参数,其中,车厢内地面模型的模型参数分别包括A_ground、B_ground、C_ground和D_ground,其中,A_ground对应车厢内地面模型的X轴的参数,B_ground对应车厢内地面模型的Y轴的参数,C_ground对应车厢内地面模型的Z轴的参数,D_ground对应车厢内地面模型的常数项。
步骤S403,使用多个第八点云数据对车厢内地面模型的模型参数进行检验,并根据多个第八点云数据对应的第三检验结果,从多个第八点云数据中提取确定多个第五点云数据。
在本实施例中,在确定车厢内地面模型的模型参数之后,车厢内地面模型可以通过平面方程A_ground*x+B_ground*y+C_ground*z=D_ground表示,使用多个第八点云数据对车厢内地面模型的模型参数进行检验,其中,这个检验过程可以用于判断第八点云数据是否为位于车厢内地面上的点云数据,可以得到每个第八点云数据对应的结果误差,进而确定第八点云数据对应的第三检验结果,例如,假设存在第八点云数据(x
将第三检验结果与设定阈值进行对比,如果第三检验结果大于设定阈值,表明对应的第八点云数据位于车厢内地面之外的点云数据,将第三检验结果大于设定阈值对应的第八点云数据确定为第五点云数据,进而从多个第八点云数据中提取得到多个第五点云数据。在实际应用中,由于第八点云数据是从第七点云数据中提取得到的,实质上多个第八点云数据为第七点云数据中的部分点云数据,同时第七点云数据为位于车厢两侧车壁之外的点云数据,基于此,多个第八点云数据为位于车厢两侧车壁和内地面之外的点云数据。
需要说明的是,步骤S302、S401和S403中记载的设定阈值可以为不相同数值,具体的设定阈值可以根据实际需要设置。
下面对设定数据处理流程展开详细说明,如图5所示,设定数据处理流程包括:
步骤S501,为多个点云数据分配对应的单元格,并以多个点云数据对应的单元格的序号作为索引,将多个点云数据存储至第一数组。
这里,是对多个点云数据进行体素网格化处理,为每个点云数据分配对应的单元格,将对应的单元格的序号作为点云数据的索引,进而实现对多个点云数据的存储,其中,这里的单元格是对设定区域划分得到的。
点云数据可以为第六点云数据,也可以为第七点云数据,还可以为第八点云数据,其中,在这个处理步骤中,在处理不同的点云数据的情况下,处理步骤的实现细节上存在差异。
在点云数据为第六点云数据的情况下,以Y-Z平面作为网格平面,对第六点云数据进行体素网格化处理并排序,具体地,以多个第六点云数据中Y轴坐标最小值和Z轴坐标的最小值(y_min,z_min)作为体素原点,分别以第六点云数据中Y轴坐标最大值y_max,Y轴坐标最小值y_min,Z轴坐标最大值z_max和Z轴坐标最小值z_min作为网格的边角点,通过y_max,y_min,z_max,z_min可以确定网格的边界,在这个边界构成的区域中,按照设定单元格尺寸大小,将边界构成的区域划分为不同的单元格,并以行值排序的方式对单元格标注序号,如图6所示,图6示出了在Y-Z平面上划分的单元格。遍历多个第六点云数据,并为每个第六点云数据分配对应的单元格序号,分配的单元格序号可以作为第六点云数据的索引,从而可以将每个第六点云数据保存在第一数组中,其中,第一数组vector1为一个二维数组。
在点云数据为第七点云数据的情况下,以Y-Z平面作为网格平面,对多个第七点云数据进行体素网格化处理。同样地,以多个第七点云数据中的Y轴坐标最小值和Z轴坐标的最小值(y_min,z_min)作为体素原点,分别以多个第七点云数据中Y轴坐标最大值y_max,Y轴坐标最小值y_min,Z轴坐标最大值z_max和Z轴坐标最小值z_min作为网格的边角点,也就是y_max,y_min,z_max,z_min可以构成网格的边界,以设定单元格尺寸大小对边界构成的网格区域进行划分,从而可以将边界构成的网络区域划分为多个不同的单元格,并按照行值排序的方式对这些单元格标注对应的序号。遍历所有第七点云数据,并为每个第七点云数据分配对应的单元格序号,利用第七点云数据对应的单元格序号值作为索引,将第七点云数据保存在第一数组中,其中,第一数组为一个二维数组。
在点云数据为第八点云数据的情况下,以X-Z平面作为网格平面,对多个第八点云数据进行体素网格化处理,具体地,以多个第八点云数据中的X轴坐标最小值与Z轴坐标最小值(x_min,z_min)作为体素原点,分别以多个第八点云数据中的X轴坐标最大值x_max,X轴坐标最小值x_min,Z轴坐标最大值z_max和Z轴坐标最小值z_min作为网格的边角点,也就是x_max,x_min,z_max,z_min可以构成网格的边界,以设定单元格尺寸大小对边界构成的网格区域进行划分,从而可以将边界构成的网络区域划分为多个不同的单元格,并按照行值排序的方式对这些单元格标注对应的序号,如图7所示,图7示出了在X-Z平面上划分的单元格。遍历多个第八点云数据,为每个第八点云数据分配对应的单元格序号,利用第八点云数据对应的单元格序号值作为索引,将每个第八点云数据保存在第一数组中,其中,第一数组为一个二维数组。
步骤S502,根据多个点云数据分配的单元格所在的位置,将每个索引的邻域点云数据存储至第二数组。
这个步骤是用于确定每个点云数据的邻域点云数据,由于每个点云数据分配了对应的单元格,且单元格序号作为对应点云数据的索引,基于此,在确定每个点云数据的邻域点云数据时,可以参考网格平面上各个单元格所在的位置进行确定,并将每个索引的邻域点云数据存储至第二数组,其中,第二数组为一个二维数组。
下面详细介绍不同的点云数据的邻域数据的确定方法:
在多个点云数据为多个第六点云数据时,从上到下遍历第一数组中存储的第六点云数据,确定每个索引的邻域点云数据,其中,索引的邻域点云数据包括第一数组中索引的当前序号、索引的当前序号的左序号和索引的当前序号的右序号对应的第六点云数据,以及第二数组中同一列下,行号减1的单元格序号对应的点云数据,例如,参考图6所示的网格平面,由上往下遍寻,寻找第二数组中序号3对应的点云数据,也就是包括第一数组中2,3,4对应的点云数据,寻找第二数组中序号7对应的点云数据,也就是包括第一数组中2,3,4对应的点云数据,以及第二数组中序号3对应的点云数据。
在多个点云数据为第七点云数据时,从上往下遍历第一数组中存储的第七点云数据,确定每个索引的邻域点云数据,其中,邻域点云数据包含第一数组中当前序号、其左序号和其右序号对应的点云数据,还包含第二数组中同一列下,行号减1的单元格序号对应的点云数据。
在多个点云数据为多个第八点云数据时,第二数组中保存有不同索引的邻域点云数据,从上往下遍历第二数组的点云数据,寻找第一数组对应索引中网格平面对应的点云数据,示例地,参照图7所示的网格平面,在图7所示的网格平面中,寻找第一数组中序号5对应的点云数据,其中,序号5对应的邻域分别为序号2、4、5、6、8和9,其中,序号2和序号4的邻域为序号1,序号2和序号6的邻域为序号3,序号4和序号8的邻域为序号7,序号6和序号8的邻域为9,基于此,可以确定数组vector2中序号5的邻域点云数据分别为序号1、2、3、4、5、6、7、8和9。这里确定邻域点云数据的方法与上述确定第六点云数据的邻域数据的方法和确定第七点云数据的邻域数据的方法不相同。
步骤S503,将第二数组中满足设定条件的索引对应的点云数据保存至第三数据。
这里,设定条件主要用于排除点云数据中的位于车厢平面之外的点云数据,进而可以通过属于车厢平面的点云数据构建车厢平面模型,将属于车厢平面的点云数据保存至第三数组中,其中,第三数组为一维数组。
在多个点云数据为多个第六点云数据的情况下,第二数组存储的是第六点云数据的邻域数据,计算第二数组中每个索引中的点云数据的x_max-x_min,并将计算结果与第一设定阈值进行比较,如果计算结果小于第一设定阈值,则将第一数组中对应的索引中的第六点云数据保存到第三数组中。这里,可以通过计算结果与第一设定阈值的比较,排除车厢左壁平面外的点云数据,假设计算第二数组中序号3下的第六点云数据中的点云数据的x_max-x_min小于第一设定阈值的情况下,可以将第一数组中对应的索引中的第六点云数据保存,也就是保存第一数组中序号3对应的第六点云数据。
在多个点云数据为多个第七点云数据的情况下,第二数组存储的是第七点云数据的邻域数据,计算第二数组中每个索引中的点云数据的x_max-x_min,并将计算结果与第一设定阈值比较,如果计算结果小于第一设定阈值,将第一数组中对应的索引中的点云数据保存到第三数组中。这里,可以通过计算结果与第一设定阈值的比较,排除车厢右壁平面外的点云数据。
需要说明的是,在对第七点云数据进行处理中的第一设定阈值和对第六点云数据进行处理中的第一设定阈值可以为不同的数值。
在多个点云数据为多个第八点云数据的情况下,第二数组存储的是第八点云数据的邻域数据,计算第二数组中每个索引中的点云数据的y_max-y_min,并将计算结果与第二设定阈值进行比较,如果计算结果小于第二设定阈值,将第一数组中对应的索引中的点云数据保存到第三数组中。这里,可以通过计算结果与第二设定阈值的比较,排除车厢内地面外的点云数据。
步骤S504,对第三数组进行体素降采样,得到第四数组。
这里,对第三数组进行体素降采样,得到第四数组,其中,对第三数组进行体素降采样可以减少需要处理的数据量,从而提高对点云数据的处理效率。
步骤S505,使用设定算法对第四数组进行处理,确定对应车厢平面模型的初始模型参数。
这里,设定算法是指随机抽样一致算法(RANSAC,RANdom SAmple Consensus),通过RANSAC算法对第四数组进行平面拟合,具体地,可以包括以下步骤:
步骤1),从第四数组中的多个点云数据中随机取3个点云数据,并将选中的3个点云数据分别带入到平面方程A*x+B*y+C*z=D中,计算得到车厢平面模型的初始模型参数A
步骤2),使用多个点云数据中的其他点云数据,代入基于步骤1)确定的车厢平面模型的初始模型参数构建的平面方程中,也就是代入到平面方程A
步骤3),比较距离d与设定阈值(一般设置为车厢壁的厚度),如果距离d小于设定阈值,则确定该点云数据为内点,统计在平面方程A
步骤4),重复上述步骤1)至3),如果当前内点数量大于已保存的最大内点数量的情况下,则根据当前内点数量对应的初始模型参数,更新车厢平面模型的初始模型参数,例如,已保存的初始模型参数为A
步骤5),迭代至达到阈值时,更新输出最终的初始模型参数。
步骤S506,使用最小二乘法对车厢平面模型的初始模型参数进行平面拟合,得到对应车厢平面模型的模型参数。
这里,运用最小二乘法对确定的车厢平面模型的初始模型参数进行平面拟合,最终得到车厢平面模型的模型参数,其中,当多个点云数据为第六点云数据的情况下,可以得到车厢左壁平面模型的模型参数A_left,B_left,C_left和D_left,当多个点云数据为第七点云数据的情况下,可以得到车厢右壁平面模型的模型参数A_right、B_right、C_right和D_right,当多个点云数据为第八点云数据的情况下,可以得到车厢内地面模型的模型参数A_ground、B_ground、C_ground和D_ground,
需要说明的是,在本实施例中进行设定数据处理流程的多个第七点云数据为多个第七点云数据中x>0这部分的第七点云数据。
步骤S202,根据车厢中心平面模型的模型参数,确定车厢中心坐标系下的各轴参数。
这里,车厢中心坐标系是以车厢中心平面上X轴和Y轴为(0,0)的点作为远点建立的坐标系,以车厢中心平面模型的模型参数(A_middle,B_middle,C_middle)作为车厢中心坐标系X轴参数,(0,1,0)作为车厢中心坐标系Y轴参数,通过叉乘计算可以得到车厢中心坐标系Z轴参数,具体地,Z轴参数的确定过程如下:
基于此,可以确定车厢中心坐标系的X轴参数、Y轴参数和Z轴参数。
步骤S203,根据车厢中心坐标系下的各轴参数,将多个第五点云数据转换为对应的多个第三点云数据。
这里,根据车厢中心坐标系下的X轴参数、Y轴参数和Z轴参数,可以将多个第五点云数据转换为在车厢中心坐标系下对应的点云数据,进而可以得到每个第五点云数据对应的第三点云数据。
步骤S103,在多个第三点云数据中,确定第四点云数据。
这里,对多个第三点云数据进行数据分析,进而在多个第三点云数据中确定第四点云数据,其中,第四点云数据表征在激光坐标系下的目标货物的数据,在实际应用中,目标货物为车厢内存放的多个货物中的一个,例如,目标货物可以为距离无人叉车最近的货物。
需要说明的是,激光坐标系是无人叉车上配置的激光雷达的坐标系,第三点云数据是在车厢中心坐标系下的点云数据,第四点云数据是在激光坐标系下的目标货物的数据,因此,在确定第四点数据的过程中还存在两个坐标系的转换,关于车厢中心坐标系下的点云数据转换为激光坐标系下的点云数据在后续的内容中进行详细说明。
在一个实施例中,如图8所示,在多个第三点云数据中,确定第四点云数据,包括:
步骤S801,根据预先下发的目标坐标,将多个第三点云数据划分为第一组第三点云数据和第二组第三点云数据。
这里的目标坐标与步骤S202中的目标坐标是相同的,在本实施例中,假设目标坐标为(x
步骤S802,对第一组第三点云数据和第二组第三点云数据分别进行欧式聚类,确定属于目标货物对应的第三点云数据。
这里,对第一组第三点云数据和第二组第三点云数据分别进行欧式聚类,可以确定第三点云数据是否为属于货物的点云数据,再从中确定目标货物的点云数据,具体的,包括以下步骤:
步骤1),设定最小货物尺寸参数,并基于最小货物尺寸参数生成检测框,利用检测框,可以从第一组第三点云数据和第二组第三点云数据中得到多个尺寸符合检测框的第三点云数据,也就是可以初步确定为属于货物的点云数据。
步骤2),对步骤1)得到的第三点云数据做z方向升序排列,确定最小z值对应的点云数据为目标货物的第三点云数据,也就是,将距离无人叉车最近的货物确定为目标货物,并获取目标货物对应的第三点云数据。
S803,对目标货物对应的第三点云数据进行处理,将目标货物对应的第三点云数据转换为第四点云数据。
这里,目标货物对应的第三点云数据为车厢中心坐标系下的数据,对目标货物对应的第三点云数据进行处理,能够将目标货物在车厢中心坐标系下的点云数据转换为在激光坐标系下的点云数据,具体地,将目标货物的第三点云数据进行取逆处理,从而可以得到目标货物在激光坐标系下的第四点云数据。
步骤S104,对第四点云数据进行处理,生成无人叉车的行车路径,并控制无人叉车按照行车路径行驶。
对第四点云数据进行处理,可以生成无人叉车行驶到目标货物的行车路径,行车路径中可以包含行驶距离、行驶方向等,无人叉车按照行车路径进行定位行驶,使无人叉车可以通过行车路径识别到目标货物的位置。
在一个实施例中,如图9所示,对位于车厢内部的无人叉车上配置的激光雷达采集的多个第一点云数据进行处理,获取多个第二点云数据,包括:
步骤S901,基于无人叉车的尺寸设置第一过滤参数,并根据第一过滤参数对多个第一点云数据进行过滤。
这里,对多个第一点云数据进行第一次数据过滤,滤除多个第一点云数据中属于无人叉车的第一点云数据。具体地,根据无人叉车的尺寸设置第一过滤参数,无人叉车的尺寸包括无人叉车的长度值与宽度值,过滤器根据第一过滤参数对多个第一点云数据进行过滤处理,过滤处理后得到的多个第一点云数据为不属于无人叉车的点云数据。
步骤S902,根据预设的目标坐标对过滤后得到的多个第一点云数据进行校正。
在无人叉车行驶到监测点时,对无人叉车的感知算法模块下发目标坐标,假设目标坐标为(x
步骤S903,基于车厢的尺寸和第三设定阈值设置第二过滤参数,并根据第二过滤参数对多个校正的待处理数据进行过滤,获取多个第二点云数据。
这里,对进行角度校正之后的多个第一点云数据进行第二次数据过滤,根据车厢的尺寸和第三设定阈值设置第二过滤参数,其中,车厢的尺寸包括车厢的长度值、宽度值和高度值,在车厢的尺寸为基准加上第三设定阈值设置第二过滤参数,过滤器以第二过滤参数对多个进行角度校正的第一点云数据进行过滤,其中,第二点云数据为过滤后保留的点云数据。示例地,车厢的长度值为a
在一个实施例中,如图10所示,根据第四点数据,生成无人叉车的行车路径,包括:
步骤S1001,根据第四点云数据和车厢中心平面模型的模型参数,确定角度参数,并将第四点云数据投影至车厢中心平面上,得到投影坐标。
这里,车厢中心平面模型的模型参数分别包括A_middle、B_middle、C_middle和D_middle,其中,车厢中心平面模型的模型参数的确定流程可以参考上述相关实施例的内容。
第四点云数据为激光坐标系下的点云数据,在第四点云数据中可以确定激光坐标系Z轴的夹角,通过车厢中心平面模型的模型参数和激光坐标系Z轴的夹角,可以确定角度参数(yaw)。
将第四点云数据投影到车厢中心平面上,进而得到对应的投影坐标。
步骤S1002,根据角度参数和投影坐标,生成行车路径。
这里,根据角度参数和投影坐标生成行车路径,也就是无人叉车根据角度参数和投影坐标进行定位行驶,从而能够使无人叉车行驶至目标货物,无人叉车根据行车路径可以进行取货放货任务。
本申请还提供了一种应用实施例,参考图11所示,图11示出确定无人叉车的行车路径的流程示意图。
步骤S1101,获取用于拟合车厢左壁/右壁的点云数据。
步骤S1102,提取x小于0的点云数据,以Y-Z平面,做体素网格化和体素降采样处理。
步骤S1103,基于RANSAC算法进行平面拟合,迭代更新模型参数。
步骤S1104,基于最小二乘法确定最终的模型参数。
步骤S1105,确定车厢内地面模型的模型参数。
步骤S1106,确定车厢中心平面模型的模型参数。
步骤S1107,去除车厢左右两侧车壁和内地面的点云数据。
步骤S1108,以车厢中心平面为基准(y=0),分别判断y>0和y<0的点云数据是否为货物的点云数据。
步骤S1109,确定目标货物基于激光坐标系的坐标和角度参数。
步骤S1110,将目标货物基于激光坐标系的坐标投影到车厢中心平面上,得到投影点坐标。
步骤S1111,无人叉车根据投影点坐标和角度参数定位行驶。
在上述实施例中,对位于车厢内部的无人叉车上配置的激光雷达采集的多个点云数据进行处理,从多个第一点云数据中分离得到属于目标货物的点云数据,并基于目标货物的点云数据确定无人叉车的行驶路径,从而能够使无人叉车在车厢内识别到目标货物的位置,避免无人叉车在运动过程中碰撞车厢壁或货物,提高无人叉车的作业效率。
在一个实施例中,提供了一种无人叉车,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现一种无人叉车的导航方法。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时以实现一种无人叉车的导航方法。
需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
- 一种无人叉车室内定位导航系统及导航方法
- 用于安装无人叉车引导组件的仓库地面施工设备及方法
- 无人叉车存取货方法、装置、介质和无人叉车
- 无人叉车的避障方法、无人叉车及存储介质