二维码的位置获取方法、电子设备及存储介质
文献发布时间:2023-06-19 11:35:49
技术领域
本申请涉及自动控制领域,特别是涉及一种二维码的位置获取方法、电子设备及计算机可读存储介质。
背景技术
二维码地图导航技术被广泛应用于工业领域。在利用二维码地图对目标(机器人)进行导航的过程中,目标需要对其经过的二维码进行拍摄并识别,以确定其所处的位姿。
在利用二维码地图对目标进行导航之前,需要预先构建二维码地图。一般的做法是,由相关人员在目标的工作区域按照设定的坐标系张贴二维码,从而形成二维码地图。但是人为张贴的二维码的位置可能存在误差,影响后续目标位姿确定的精度。
发明内容
本申请提供一种二维码的位置获取方法、电子设备及计算机可读存储介质,能够解决现有的二维码地图中二维码的位置精度不高的问题。
为解决上述技术问题,本申请采用的一个技术方案是:提供一种二维码的位置获取方法。该方法包括:在目标沿二维码地图运动的过程中获取当前边的里程,当前边为目标当前经过的边,二维码地图中相邻的两个二维码组成一条边;以当前已经过的边对应的误差最小为约束条件,优化当前已经过的二维码的位置,边对应的误差为边的里程与位置差之间的误差,位置差为组成边的两个二维码的位置之间的差值。
为解决上述技术问题,本申请采用的另一个技术方案是:提供一种电子设备,该电子设备包括处理器、与处理器连接的存储器,其中,存储器存储有程序指令;处理器用于执行存储器存储的程序指令以实现上述方法。
为解决上述技术问题,本申请采用的又一个技术方案是:提供一种计算机可读存储介质,存储有程序指令,该程序指令被执行时能够实现上述方法。
通过上述方式,本申请在目标沿二维码地图运动的过程中,实时获取目标经过的边的里程,并以目标已经过的所有边的里程与位置差之间的误差最小为约束条件,来获取(逐步优化)目标已经过的所有边对应的二维码的位置。相较于直接将相关人员张贴的二维码的位置作为二维码地图中为二维码的位置方式,本申请获取到的二维码的位置精度更高,进而能够提高后续目标借助二维码获取到的位姿的精度。
附图说明
图1是本申请二维码地图中二维码的位置获取方法实施例一的流程示意图;
图2是本申请二维码地图的示意图;
图3是本申请二维码地图中二维码的位置获取方法实施例二的流程示意图;
图4是本申请二维码地图中二维码的位置获取方法实施例三的流程示意图;
图5是本申请二维码地图中二维码的位置获取方法实施例四的流程示意图;
图6是图5中S43的具体流程示意图;
图7是本申请二维码地图中二维码的位置获取方法实施例五的流程示意图;
图8是本申请二维码地图中二维码的位置获取方法实施例六的流程示意图;
图9是本申请电子设备一实施例的结构示意图;
图10是本申请计算机可读存储介质一实施例的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请中的术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”、“第三”的特征可以明示或者隐含地包括至少一个该特征。本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,在不冲突的情况下,本文所描述的实施例可以与其它实施例相结合。
图1是本申请二维码地图中二维码的位置获取方法实施例一的流程示意图。需注意的是,若有实质上相同的结果,本实施例并不以图1所示的流程顺序为限。如图1所示,本实施例可以包括:
S11:在目标沿二维码地图运动的过程中获取当前边的里程。
其中,当前边为目标当前经过的边,二维码地图中相邻的两个二维码组成一条边。
目标可以为任何有二维码导航需求的机器人,本申请以目标为AGV(AutomatedGuided Vehicle,自动导引运输车)进行说明。车体上安装有里程计(编码器和IMU传感器),编码器用于获取车体的运动距离,IMU传感器用于获取车体的朝向,从而在车体运动过程中可以会实时采集并累积在其朝向上的运动距离,以得到目标当前经过的边的里程,即组成当前边的起点二维码和终点二维码之间的里程。
在目标沿二维码地图运动的过程中,目标可能一次或多次经过当前边。目标每经过一次当前边,可以获取到一个当前边的一个里程。本申请称最新一次经过当前边获取到的里程为当前边的最新里程,且称历史经过当前边获取到的里程为当前边的历史里程。
可以将当前边的最新里程作为本步骤中当前边的里程。
或者,为了提高当前边的里程的精度,还可以将当前边的历史里程和当前边的最新里程的均值作为本步骤中当前边的里程。在此情况下,本步骤的实现方式可以为:在目标沿二维码地图运动的过程中,获取当前边的最新里程;获取当前边的最新里程与当前边的历史里程之间的均值,作为当前边的里程。其中,当前边的历史里程是目标历史经过当前边时获取到的。
举例说明,前j-1次经过当前边时获取到的当前边的j-1个历史里程的均值为
另外,在通过本步骤获取到当前边的里程
此外,还可以更新当前边被目标经过的次数。目标每经过一次当前边,更新一次当前边被目标经过的次数,即将当前边被目标经过的次数加1。如下表1为当前边Edges的里程(x,y,th)的存储形式示例。
表1
S12:以当前已经过的边对应的误差最小为约束条件,优化当前已经过的二维码的位置。
其中,边对应的误差为边的里程与位置差之间的误差,位置差为组成边的两个二维码的位置之间的差值。
当前已经过的二维码为当前已经过的边对应的二维码。本申请涉及的对二维码的位置的优化即为对二维码的初始位置进行迭代更新。二维码的初始位置可以是随机赋予的,也可以是相关人员按照坐标系张贴的二维码的位置。一般来说,相关人员按照坐标系张贴的二维码的位置更加接近其真实位置,因此将其作为二维码的初始位置,能够减少优化的时间。图2是本申请二维码地图的示意图。如图2所示,二维码地图中包括6个二维码(A~F)。
可以将当前已经过的边对应的误差平方和作为目标约束,得到目标规划:
其中,
第i条边对应的误差可以通过下式计算:
其中,第i条边由起点二维码a和终点二维码b组成,
使用ceres求解上述目标规划,可得到优化结果(更新的当前已经过的二维码的位置)。
此外,在其他实施例中,还可以是通过求解所有边对应的误差和最小为约束条件的目标规划,来得到优化结果。
如图2所示,经过优化得到的二维码地图中,A的位置为(1.0,1.0,0.0),B的位置为(2.0,1.0,0.0),C的位置为(3.0,1.0,0.0),D的位置为(1.0,0.0,0.0),E的位置为(2.0,0.0,0.0),F的位置为(3.0,0.0,0.0)。
通过本实施例的实施,本申请在目标沿二维码地图运动的过程中,实时获取目标经过的边的里程,并以目标已经过的所有边的里程与位置差之间的误差最小为约束条件,来获取(逐步优化)目标已经过的所有边对应的二维码的位置。相较于直接将相关人员张贴的二维码的位置作为二维码地图中为二维码的位置方式,本申请获取到的二维码的位置精度更高,进而能够提高后续目标借助二维码获取到的位姿的精度。
上述S11执行之后可以直接进入S12。或者,可以在满足优化条件的情况下进入S12。优化条件的判断可以是实时进行的。优化条件可以包括以下至少之一:
优化条件1:当前时间与上一次优化的时间之间的差值是否大于预设时间差值。
在优化条件1的情况下,可以对上述实施例一进一步扩展。具体如下:
图3是本申请二维码地图中二维码的位置获取方法实施例二的流程示意图。需注意的是,若有实质上相同的结果,本实施例并不以图3所示的流程顺序为限。如图3所示,本实施例可以包括:
S21:判断当前时间与上一次优化的时间之间的差值是否大于预设时间差值。
在目标运动过程中,可以利用计时器记录目标的运动时间。在完成上一次优化之后,可以将计时器记录的时间清零,并重新开始记录。在记录的时间大于预设时间差值时,认为当前时间与上一次优化的时间之间的差值是否大于预设时间差值。或者,计时器记录的时间也可以不清零,而是通过计时器记录的时间确定上一次优化的时间,进而确定计时器记录的当前时间与上一次优化的时间之间的差值。
可以理解的是,相邻两次优化的时间过短,例如,距离前一次优化,目标才刚经过一个二维码就又进行优化,很可能会造成无效优化(即优化的效果不好),引起不必要的资源消耗。因此可以通过相邻两次优化间隔的时间,即当前时间与上一次优化的时间之间的差值,限制优化的次数。
预设时间差值可以通过目标的工作区域的规模设定,即根据目标遍历完一次地图中所有二维码所需的时间来设定。例如,预设时间差值为1小时。当然,在其他实施方式中也可以根据其他方式设定。
若大于,则执行S22。
S22:执行S12。
优化条件2:当前已经过的边中有效边的数量大于预设边数量,有效边为当前已经过的边中,被目标经过的次数大于预设次数的边。
在优化条件2的情况下,可以对上述实施例一进一步扩展。具体如下:
图4是本申请二维码地图中二维码的位置获取方法实施例三的流程示意图。需注意的是,若有实质上相同的结果,本实施例并不以图4所示的流程顺序为限。如图4所示,本实施例可以包括:
S31:统计当前已经过的边中的每条边被目标经过的次数,并将对应的次数大于预设次数的边作为有效边。
结合前面提及的边的里程为该边的最新里程,或者为该边的最新里程与历史里程的均值。因此,边的里程精度与其被目标经过的次数正相关。本申请将有效边视为当前已经过的边中对应的里程精度满足要求的边。
S32:判断有效边的数量是否大于预设边数量。
若大于,则执行S33。
S33:执行S12。
可以理解的是,当前已经过的边中有效边的数量越多,优化效果越好。因此在有效边的数量大于预设边数量的情况下,对当前已经过的边对应的二维码的位置进行优化,能够提高优化的效果。
在S31之前,需要先确定预设次数。具体可以如下:
图5是本申请二维码地图中二维码的位置获取方法实施例四的流程示意图。需注意的是,若有实质上相同的结果,本实施例并不以图5所示的流程顺序为限。如图5所示,本实施例可以包括:
S41:确定预设路径。
预设路径由二维码地图中的至少两个二维码组成。具体选取的二维码数量及二维码之间的里程可以根据需求设定。
S42:控制目标沿预设路径运动,以获取预设路径中的同一条边的若干个采样里程。
S43:基于同一条边的若干个采样里程的分布情况,确定预设次数。
结合参阅图6,本步骤包括但不限于通过以下子步骤实现预设次数的确定。
S431:获取若干个采样里程的采样均值和采样方差。
S432:确定若干个采样里程与采样均值之间的最大差值。
分别获取每个采样里程与采样均值之间的差值,将其中最大的一个作为若干个采样里程与采样均值之间的最大差值。
S433:基于采样方差与最大差值的平方的比值确定预设次数。
本步骤所依据的公式可以如下:
其中,
例如,获取到同一条边的1000个采样里程,最大差值为0.001m,采样方差为0.000001,选取置信水平为95%。那么预设次数n=1.96*1.96*0.000001/(0.001*0.001)=3.84≈4。
优化条件3:当前已经过的边构成的环路数量大于预设环路数量。
在优化条件3的情况下,可以对上述实施例一进一步扩展。具体如下:
图7是本申请二维码地图中二维码的位置获取方法实施例五的流程示意图。需注意的是,若有实质上相同的结果,本实施例并不以图7所示的流程顺序为限。其中S51-S52是S12之前包括的步骤,S53是对S12的进一步扩展。如图7所示,本实施例可以包括:
S51:确定当前已经过的边构成的环路数量。
可以理解的是,如果当前已经过的边对应的二维码中存在二维码1,其作为组成当前已经过的边的其中一条边的起点二维码,又作为组成另外一条边的终点二维码。也就是说,目标从二维码1开始运动,经过至少两条边之后又回到二维码1处。那么称当前已经过的边中存在一个二维码1组成的环路。
可以以遍历的方式确定当前已经过的边中构成的环路。遍历的逻辑可以如下:
对于每一条边而言,将构成边的起点二维码作为父节点,且将构成边的终点二维码作为子节点。在遍历过程中,为每一个节点增加state表示遍历状态,遍历状态有三种。第一种是UNVISIT,用于表示没有遍历过该节点;第二种是VISITING,用于表示遍历过该节点;第三种是VISITED,用于表示该节点所有的子节点都已经遍历过。使用深度遍历进行节点遍历,如果该节点为UNVISIT则将节点设置为VISITING;如果该节点为VISITED就遍历该节点的父节点的其他节点;如果找到反向边(则认为找到了环)、没有子节点,则将该节点设置为VISITED。
预设环路数量可以根据期望的鲁棒性确定。例如,将预设环路数量设置为2。
S52:判断当前已经过的边构成环路的数量是否大于预设环路数量。
若大于,则执行S53。
S53:以构成环路的边对应的误差最小为约束条件,优化构成环路的二维码的位置。
本步骤所依据的公式请参考S12的相关说明,在此不赘述。
可以理解的是,在优化过程中,构成环路的边对应的二维码的位置会相互影响,即优化过程误差会在环路中各二维码的位置之间进行分配,从而能够减小优化得到的环路中各二维码的位置的误差,提高优化效果。
在本申请一具体实施方式中,优化条件包含上述优化条件1、优化条件2和优化条件3。也就是说,在同时满足以上三个优化条件的情况下才进行优化。在此情况下,可以在S12之前进行是否满足三个优化条件的判断,其中三个优化条件的判断顺序不受限。以依次对上述优化条件1、优化条件2和优化条件3进行判断为例,上述实施例一可以进一步扩展为如下实施例六。
图8是本申请二维码地图中二维码的位置获取方法实施例六的流程示意图。需注意的是,若有实质上相同的结果,本实施例并不以图8所示的流程顺序为限。如图8所示,本实施例可以包括:
S61:在目标沿二维码地图运动的过程中获取当前边的里程。
S62:判断当前时间与上一次优化的时间之间的差值是否大于预设时间差值。
若大于,则执行S63。
S63:统计当前已经过的边中的每条边被目标经过的次数,并将对应的次数大于预设次数的边作为有效边。
S64:判断有效边的数量是否大于预设边数量。
若大于,则执行S65。
S65:判断有效边构成环路的数量是否大于预设环路数量。
若大于,则执行S66。
S66:以构成环路的有效边对应的误差最小为约束条件,优化构成环路的二维码的位置。
本实施例的详细说明请参考前面的实施例,在此不赘述。
下面以一个具体实例的形式对本申请获取并存储/更新边的里程的过程进行说明。目标当前已经过的边的信息如下表2:
表2
下面描述获取如表2所示的边的信息的过程:
目标从A运动到B,得到里程1=(1.01,0.02,0.0),将里程1作为边AB的里程存储;
进一步地,目标从B运动到A,得到里程2=(-1.02,-0.01,0.3),将里程2作为边BA的里程。此时目标已经过的边形成了一个环路A→B→A,环路数量为1;
进一步地,目标从A运动到B,得到里程3=(1.00,0.00,0.0)。此时目标已经过边AB两次,计算里程3与里程1的均值(1.005,0.01,0.0),作为新的边AB的里程存储。此时环路数量未增加。
进一步地,目标从B运动到D,得到里程4=(0.00,-1.00,0.0),将里程4作为边BD的里程存储。此时环路数量未增加。
进一步地,目标从D运动到B,得到里程5=(0.00,1.00,0.0),将里程5作为边DB的里程存储。此时目标已经过的边形成了另一个环路A→B→D→B,环路数量增加为2。
本申请提供的上述方法可以应用在构建二维码地图的过程。此外,由于利用二维码地图对目标进行导航的过程中,可能存在二维码破损更换的情况,因此本申请提供的上述方法还可以应用在利用二维码地图对目标进行导航的过程。
利用工作区域的二维码地图对目标进行导航,使其沿指定路径运动来完成工作。而在构建二维码地图的过程,目标可以不按照指定路径运动,因此可以在构建二维码地图的过程额外设定一个路径,在该路径的引导下,目标经过的边更容易成为有效边或者构成环,从而提供优化效果。
图9是本申请电子设备一实施例的结构示意图。如图9所示,该电子设备可以包括处理器71、与处理器71耦接的存储器72。
其中,存储器72存储有用于实现上述任一实施例的方法的程序指令;处理器71用于执行存储器72存储的程序指令以实现上述方法实施例的步骤。其中,处理器71还可以称为CPU(Central Processing Unit,中央处理单元)。处理器71可能是一种集成电路芯片,具有信号的处理能力。处理器71还可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器71也可以是任何常规的处理器等。
图10是本申请计算机可读存储介质一实施例的结构示意图。如图10所示,本申请实施例的计算机可读存储介质80存储有程序指令81,该程序指令81被执行时实现本申请上述实施例提供的方法。其中,该程序指令81可以形成程序文件以软件产品的形式存储在上述计算机可读存储介质80中,以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的计算机可读存储介质80包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质,或者是计算机、服务器、手机、平板等终端设备。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。以上仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
- 二维码的位置获取方法、电子设备及存储介质
- 一种基于二维码的位置信息获取方法、装置及电子设备