一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于BIM的机器人自主导航方法与流程

2022-03-23 01:38:16 来源:中国专利 TAG:

一种基于bim的机器人自主导航方法
技术领域
1.本发明涉及一种建筑机器人导航技术,特别是一种基于bim的机器人自主导航方法。


背景技术:

2.当下,越来越多的建筑公司、科研机构开始投入大量人力物力致力于建筑施工机器人的研发,针对某种特定施工工艺流程通过机器人实现自动化,例如墙体砌筑机器人、地面施工机器人等等,这些机器人大多数还只能在特定的结构化实验场地进行演示,并不能投入到真实的施工线程使用,造成这种现象一大原因在于建筑施工现场的环境复杂多变,区别于室内或者其他稳定的作业场景,这就要求机器人对环境感知能力要高,尤其是针对移动作业机器人来说,高效地构建用于导航的地图是十分重要的,如果采用传统的机器人建图方案,势必会带来很大的麻烦,无法实际投入使用。


技术实现要素:

3.本发明的目的在于提供一种基于bim的机器人自主导航方法,包括
4.构建二维栅格地图:提取待施工建筑的bim信息中的几何实体信息,按照楼层对几何实体信息进行分类,并根据几何实体信息构建二维栅格地图;
5.机器人定位:分别获取机器人的rtk-gnss和ins导航数据,基于松耦合组合导航模式选择对ins的误差状态进行状态估计得到融合算法模型,采用卡尔曼滤波算法用rtk-gnss导航数据修正ins导航数据的累积误差;
6.规划机器人路径:根据任务需求特点,将任务划分为单点任务和区域任务两种,采用全局路径规划算法和全覆盖路径规划算法分别满足为单点任务和区域任务下机器人的路径规划。
7.进一步地,融合算法模型包括姿态误差、速度误差、位置误差模型和惯性传感器误差模型;其中
8.(1)姿态误差模型
[0009][0010][0011]
[0012]
其中,l和h分别为机器人当前位置的维度和海拔高度,分别为导航坐标系下机器人的速度值,rn、re分别为地球南北方向和东西方向的曲率半径,w
ie
为地球自转角速度在导航坐标系下的投影,为imu测量误差;
[0013]
(2)速度误差模型
[0014][0015][0016][0017]
其中,为imu获取比力值在导航坐标系下的投影,b
a,x
、b
a,y
分别为加速度计在x轴和y轴的零偏误差,ψ=[ψ
x
ψyψz]
t
为平台失准角;
[0018]
(3)位置误差模型
[0019][0020][0021]
其中l和λ分别代表机器人当前位置对应的纬度和经度。
[0022]
(4)惯性传感器误差模型
[0023][0024][0025]
其中,ba、bg分别为加速度计和陀螺仪的零偏误差,τa、w
ba
分别为加速度计零偏的相关时间和噪声项,τg、w
bg
分别为陀螺仪计零偏的相关时间和噪声项。
[0026]
进一步地,采用卡尔曼滤波算法用rtk-gnss导航数据修正ins导航数据的累积误差的具体过程包括
[0027]
步骤s331,设机器人状态模型变量为:
[0028][0029]
将式(1)~(10)代入式(11)得到状态方程和状态矩阵(12)
[0030][0031][0032]
其中a为系统状态矩阵,w代表系统噪声,在实际计算中可以将过程协方差矩阵中的噪声项简化为高斯白噪声,
[0033][0034][0035][0036][0037][0038]
[0039][0040][0041][0042]
步骤s332,对上述连续时间的状态方程进行离散化,得到式(13)
[0043]
xk=φ
k-1
x
k-1
q
k-1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(13)
[0044]
其中,φ
k-1
=e
aδt
,hk=h,δt为采样周期,q
k-1
为过程噪声协方差矩阵;
[0045]
步骤s333,针对rtk-gnss定位数据的特点,选择rtk-gnss与ins的速度差值、位置差值作为测量模型中的观测量,构建测量模型;其中
[0046]
速度差值与状态变量满足以下关系:
[0047][0048]
其中,和分别代表ins输出沿x方向的速度值和沿y方向的速度值,和分别代表rtk-gnss输出沿x方向的速度值和沿y方向的速度值,ξ
x
和ξy分别表示rtk-gnss接收机在x方向和y方向上的测量误差;
[0049]
位置差值与状态变量之间满足以下关系:
[0050][0051]
其中,li和λi分别代表ins输出纬度值和经度值,lg和λg分别代表rtk-gnss输出纬度值和经度值,n
x
和ny分别表示rtk-gnss接收机在x方向和y方向上的测量误差。
[0052]
步骤s334,定义观测矩阵为:
[0053][0054]
根据式(14)(15)得到测量模型中测量矩阵为
[0055][0056]
进一步地,全局路径规划算法采用改进theta*算法实现单点任务下机器人路径规划,其中open表中堆顶元素始终是代价值最小的节点,其中代价值为当前节点与起始节点的欧拉距离加上当前节点与目标节点的欧拉距离之和;改进theta*算法具体包括:
[0057]
步骤s410,添加机器人的起始节点和结束节点;
[0058]
步骤s411,将初始状态加入open表中,转步骤s412;
[0059]
步骤s412,获取open表中堆顶节点作为当前节点;若当前节点为目标节点,输出节点信息;若不为目标节点,转步骤s413;
[0060]
步骤s413,判断当前节点父节点与当前节点相邻节点的可见性;若相邻节点可见,转步骤s414;否则转步骤s415;
[0061]
步骤s414,将当前节点的相邻节点作为拓展节点,并将拓展节点的父节点调整为当前节点的父节点,同时从open堆中移除当前节点和新拓展节点,转步骤s416;
[0062]
步骤s415,拓展新状态,将不重复的新状态添加到open堆中,从open堆中移除当前节点,转步骤s416;
[0063]
步骤s416,输出结果;其中
[0064]
步骤s413当前节点父节点与相邻节点的可见性判断标准为:
[0065]
在当前节点中维护角度范围变量θ,若当前节点的父节点与当前节点的相邻节点形成直线与参考方向所成角度落在θ内,则该相邻节点相对于当前节点的父节点是可见的。
[0066]
进一步地,全覆盖路径规划算法实现区域任务下机器人路径规划的方法包括:
[0067]
步骤s401,初始化起始位置等相关参数,如果当前位置为起始位置,转步骤s402;否则通过改进theta*算法进行路径规划抵达起始位置后转步骤s402;
[0068]
步骤s402,通过改进bcd算法进行局部区域覆盖;
[0069]
步骤s403,将符合要求的栅格位置记录在回溯表中,当机器人移动到死点位置时,根据回溯点筛选规则对回溯表进行筛选,若筛选后回溯表不为空集,转步骤s404;若回溯表为空集,转步骤s406;
[0070]
步骤s404,筛选后的回溯表作为区域衔接目标点的候选集合,分别计算回溯点与当前位置点的欧拉距离,并选取欧拉距离最小的回溯点作为目标点;
[0071]
步骤s405,在选定区域衔接目标点之后,通过改进theta*算法进行路径规划抵达目标点,将目标点作为当前位置,转步骤s402;
[0072]
步骤s406,结束本次全覆盖过程。
[0073]
进一步地,步骤s402中的改进bcd算法中机器人包括8个移动方向,分别为正北、正南、正西、正东、东北、西北、西南、东南,且规定移动方向的优先级,优先级包括:
[0074]
优先级1:水平和垂直方向的优先级高于倾斜方向;
[0075]
优先级2:在优先级1相同的情况下,靠近起始点的方向优先级高于远离起始点的方向;
[0076]
优先级3:在优先级2相同的情况下,垂直方向的优先级高于水平方向,且正北高于
正南,正东高于正西。
[0077]
进一步地,改进bcd算法具体过程包括:
[0078]
步骤s420,根据二维栅格地图,确定待工作区域的栅格地图并确定出发点;
[0079]
步骤s421,通过全局路径规划算法规划出当前位置到出发点所在位置的路径,并移动到出发位置;
[0080]
步骤s422,获取当前位置所有可移动方向,如果存在可移动方向则通过改进bcd算法优先级规则确定当前移动方向,若可移动,转步骤s423;否则,输出局部覆盖路径。
[0081]
步骤s423,沿着选定方向移动一个栅格并更新当前位置,转步骤s422。
[0082]
进一步地,步骤s403中的回溯表用于存储两个子区域间衔接时选取的候选目标点,所述候选目标点是机器人所在位置相邻八个方向上非障碍物且机器人尚未抵达过的栅格位置,其中判断候选目标的过程包括:
[0083]
步骤s4311,假设待筛选回溯点位于a点,a点可移动的八个方向上的点分别为p1~p8,在这些点中能够与a点形成直线的一共有四对,分别是p1和p5、p2和p6、p3和p7、p4和p8;
[0084]
步骤s4312,定义状态描述函数
[0085][0086]
d(pi,pj)用于反映与a点在同一直线上的相邻两点是否均为自由未覆盖栅格;若d(pi,pj)=1则说明与a点在同一直线上的相邻两点pi、pj均为自由未覆盖栅格,则可判定a点必然不是所在子区域的边缘点,进而可以将a点从回溯表中移除,转步骤s4313;
[0087]
步骤s4313,定义回溯点判断函数如下:
[0088]
d(a)=d(p1,p5) d(p2,p6) d(p3,p7) d(p4,p8)
ꢀꢀꢀꢀꢀꢀꢀꢀ
(17)
[0089]
若d(a)≥1,则表示在a点与相邻位置形成的四条直线中,存在直线上a点相邻的两个位置点均为自由非覆盖栅格,那么a点必然不是边缘点,从回溯表中删除;若d(a)=0,则说明a点是边缘点,需要保留。在图8所示环境中,根据上述判定规则,自由黑色实心点标记的栅格位置才具有作为回溯点的条件,其他栅格位置均不需要维护在回溯表中。
[0090]
本发明与现有技术相比,优点在于:(1)本发明的机器人自主导航系统通过从bim中提取的信息构建出用于自主导航的栅格地图,避免了在施工现场建图的不便;(2)本发明的机器人自主导航系统使用rtk-gnss/ins组合导航,基于rtk-gnss高精度定位数据修正ins累积误差,从而提高了导航数据的更新速率和可靠性;(3)本发明将任务划分为单点振捣和区域振捣,能够在更大程度上满足对机器人需求;(4)本发明的机器人自主导航系统采用改进theta*算法完成全局路径规划,提高了全局路径规划的效率;(5)本发明的机器人自主导航系统通过多级优先级定向优化bcd算法,同时建立回溯机制,提高了全覆盖路径规划的效率。
[0091]
下面结合说明书附图对本发明作进一步描述。
附图说明
[0092]
图1为本发明方法流程示意图。
[0093]
图2为传统theta*算法流程示意图。
[0094]
图3为本发明步骤s400中改进theta*算法流程示意图。
[0095]
图4为本发明步骤s400中改进theta*算法中角度范围定义图。
[0096]
图5为本发明步骤s400中改进的bcd算法流程示意图。
[0097]
图6为本发明步骤s400中改进的bcd算法处理齿形障碍物示意图。
[0098]
图7为本发明步骤s400中回溯点判断栅格标记示意图。
[0099]
图8为本发明步骤s400中回溯点筛选示意图。
[0100]
图9为本发明步骤s400的具体流程示意图。
具体实施方式
[0101]
结合图1,一种基于bim的机器人自主导航方法,包括以下步骤:
[0102]
步骤s100,对待施工建筑的bim信息按照几何信息类型提取出几何实体信息,并按照楼层将几何实体信息进行分类;
[0103]
步骤s200,根据几何实体信息构建二维栅格地图;
[0104]
步骤s300,分别获取rtk-gnss和ins导航数据,基于松耦合组合导航模式选择对ins的误差状态进行状态估计,采用卡尔曼滤波算法对rtk-gnss导航数据和ins导航数据进行融合,通过rtk-gnss定位数据修正ins的累积误差;
[0105]
步骤s400,根据任务需求特点,将任务划分为单点任务和区域任务两种,分别设计全局路径规划算法和全覆盖路径规划算法满足不同任务对路径规划的需求。
[0106]
步骤s100中涉及的几何信息类型和建筑结构对应,主要包含墙、柱、门、横梁、窗、楼梯等。本实施例以振捣机器人为例,在振捣机器人行进的自主导航过程中,可能会遇到墙、柱、横梁等障碍物,因此需要提取墙、柱、横梁以及楼梯等类型建筑结构对应的几何实体信息。
[0107]
步骤s100的具体过程包括以下步骤:
[0108]
步骤s110,获取几何信息类型,并判断是否属于几何实体信息,过滤掉非几何实体信息;
[0109]
步骤s120,保留所需几何实体信息;
[0110]
步骤s130对所需的几何实体信息进行分类,获得个楼层的几何实体信息。
[0111]
本实施例中,步骤s100可以利用ifc文件实现几何实体信息的获取,具体为:
[0112]
步骤s110,将bim模型导出为ifc(industry foundation classes)文件类型保存,然后读取ifc文件数据,获取文件中定义的ifcbuildingelement要素信息,ifcbuildingelement要素信息包含ifcwall(墙面)、ifccolum(柱)、ifcbeam(横梁)、ifcstair(楼梯)的等类型要素信息;
[0113]
步骤s120,遍历所有的ifcbuildingelement要素信息,通过不同描述语句的属性判断是否属于几何实体信息,过滤掉非几何实体要素;建立目标建筑结构类型过滤池,对几何实体信息进行过滤,按照保留需要的几何实体类型进行过滤,保留下来的类型有ifcwall(墙面)、ifccolum(柱)、ifcbeam(横梁)、ifcstair(楼梯),其他的均过滤掉,得到所需几何实体信息;
[0114]
步骤s130,将所需几何实体信息,根据每个几何实体父节点所关联的ifcabstractentity实体类型是否为ifcbuildingstorey类型来对几何实体信息进行分类,最终得到各楼层的几何实体信息。每个节点之间有继承关系,比如a节点继承自b节点,则b
节点就叫a节点的父节点。
[0115]
步骤s200的具体过程包括以下步骤:
[0116]
步骤s210,遍历并获取每个几何实体信息;
[0117]
步骤s220,根据几何实体信息构建二维栅格地图。
[0118]
本实施例中,步骤s202中根据提取的bim信息生成ros可读取的pgm类型的地图文件。以振捣机器人为例,步骤s202具体包括:
[0119]
步骤s221,首先需要根据障碍物的尺寸信息确定栅格尺寸;
[0120]
步骤s222,根据栅格尺寸大小计算得到每层建筑平面需要占据的栅格数量;
[0121]
步骤s223,根据总栅格数量,选定pgm图片的像素点数,其中每个像素代表一个栅格;选定建筑平面的左上角位置为参考点,并映射到像素平面的栅格中;
[0122]
步骤s224,依次将建筑结构信息映射到栅格地图中,生成一张pgm格式的导航地图,其中对于柱、楼梯等建筑结构为振捣作业空间中的障碍物,在构建栅格地图时,将此类建筑结构状态设置为障碍物状态。
[0123]
步骤s300中的rtk-gnss和ins导航数据分别为全球导航卫星数据和惯性导航数据。步骤s300的具体过程为:
[0124]
步骤s310,获取rtk-gnss和ins定位数据;
[0125]
步骤s320,基于松耦合组合导航模式,选择对ins的误差状态进行状态估计,并推导出融合算法模型,模型包括姿态误差、速度误差、位置误差模型和惯性传感器误差模型;
[0126]
步骤s330,采用卡尔曼滤波算法对gnss导航数据和ins导航数据进行融合。
[0127]
步骤s310中rtk-gnss定位数据通过双天线gnss接收机接收的卫星信号,结合基站发送过来的差分修正值得到精准的定位定向数据;ins定位数据通过imu测量的加速度与角速度值进行积分推算得到。
[0128]
步骤s320所述的姿态误差、速度误差和位置误差模型分别为:
[0129]
(1)姿态误差模型
[0130][0131][0132][0133]
其中,l和h分别为机器人当前位置的维度和海拔高度,分别为导航坐标系下机器人的速度值,rn、re分别为地球南北方向和东西方向的曲率半径,w
ie
为地球自转角速度在导航坐标系下的投影,为imu测量误差;
[0134]
(2)速度误差模型
[0135][0136][0137][0138]
其中,为imu获取比力值在导航坐标系下的投影,b
a,x
、b
a,y
分别为加速度计在x轴和y轴的零偏误差,ψ=[ψ
x
ψyψz]
t
为平台失准角;
[0139]
(3)位置误差模型
[0140][0141][0142]
其中l和λ分别代表机器人当前位置对应的纬度和经度。
[0143]
(4)惯性传感器误差模型
[0144][0145][0146]
其中,ba、bg分别为加速度计和陀螺仪的零偏误差,τa、w
ba
分别为加速度计零偏的相关时间和噪声项,τg、w
bg
分别为陀螺仪计零偏的相关时间和噪声项。
[0147]
步骤s330的具体过程包括
[0148]
步骤s331,设机器人状态模型变量为:
[0149][0150]
将式(1)~(10)代入式(11)得到状态方程和状态矩阵(12)
[0151]
[0152][0153]
其中a为系统状态矩阵,w代表系统噪声,在实际计算中可以将过程协方差矩阵中的噪声项简化为高斯白噪声,
[0154][0155][0156][0157][0158][0159]
[0160][0161][0162][0163]
步骤s332,传感器通常采用的是离散采样,因此对上述连续时间的状态方程进行离散化,得到式(13)
[0164]
xk=φ
k-1
x
k-1
q
k-1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(13)
[0165]
其中,φ
k-1
=e
aδt
,hk=h,δt为采样周期,q
k-1
为过程噪声协方差矩阵;
[0166]
步骤s333,针对rtk-gnss定位数据的特点,选择rtk-gnss与ins的速度差值、位置差值作为测量模型中的观测量,构建测量模型;
[0167]
速度差值与状态变量满足以下关系:
[0168][0169]
其中,和分别代表ins输出沿x方向的速度值和沿y方向的速度值,和分别代表rtk-gnss输出沿x方向的速度值和沿y方向的速度值,ξ
x
和ξy分别表示rtk-gnss接收机在x方向和y方向上的测量误差;
[0170]
位置差值与状态变量之间满足以下关系:
[0171][0172]
其中,li和λi分别代表ins输出纬度值和经度值,lg和λg分别代表rtk-gnss输出纬度值和经度值,n
x
和ny分别表示rtk-gnss接收机在x方向和y方向上的测量误差。
[0173]
定义观测矩阵为:
[0174][0175]
根据式(14)(15)得到测量模型中测量矩阵为
[0176][0177]
实现卡尔曼滤波实现rtk-gnss数据与ins数据的融合,从而得到最优的状态估计,实现rtk-gnss定位数据修正ins的累积误差。
[0178]
步骤s400中,单点任务指施工是在不连续区域内的多个独立位置点进行的任务,区域任务指在一片连续的区域内进行覆盖性施工的任务。针对单点任务,本实施例采用改进theta*算法对一些指定的工作位置可以规划出全局最优路径,抵达工作位置完成任务;针对区域任务,机器人需要以指定速度在一子区域进行全覆盖移动,因此采用bcd局部区域覆盖算法实现子区域的全覆盖。
[0179]
结合图2,传统theta*算法采用的是数组结构,在获取目标节点时需要进行遍历,时间复杂度为o(n)。而本实施例中步骤s400中通过bim信息构建先验地图的基础上,采用改进theta*算法完成全局路径规划,以代价距离的大小为依据维护未搜索节点的堆数据结构,以o(1)的时间复杂度获取目标节点从而降低获取目标节点的时间复杂度。具体的结合图3,改进theta*算法具体对实现中使用的数据结构以及两节点之间的直线路径上是否存在障碍节点的判断方法进行了改进:
[0180]
(1)数据结构方面主要是针对open表(open表保存所有已生成而未考察的节点)的数据结构进行改进,传统的theta*算法在保存未被搜索到的节点时采用的是数组或者链表的数据结构进行存储,由于在theta*算法执行中需要从open表中找到代价最小的节点作为下一个搜索节点,如果采用数组或者链表的数据结构,则需要对所有节点进行遍历才能得到目标节点,程序运行时间复杂度为o(n)。因此,本实施例采用最小堆数据结构来维护open表,根据各个节点的代价值大小维护最小堆,基于最小堆数据结构的特点,堆顶元素始终是代价值最小的节点。所以程序运行时可以通过o(1)的时间复杂度获取目标节点。通过改进open表的数据结构,可以在一定程度上提升theta*算法的执行效率。所述代价值为当前节点与起始节点的欧拉距离加上当前节点与目标节点的欧拉距离之和。
[0181]
(2)在判断两节点之间的直线路径上是否有障碍物节点方面,传统的theta*算法采用的是视线算法,实现原理就是通过判断该直线路径所穿过的所有栅格节点中是否存在障碍物节点,如果存在障碍物节点则判断给定两节点之间不存在无障碍的直线路径,这种判断方法不仅需要判断两节点之间的连线穿过哪些节点,还需要进一步判断这些节点是否是障碍物节点,因此算法的运行效率较低。本实施例通过在节点中记录/添加(即维护)一项角度范围变量θ,该角度范围变量是当前节点的父节点与当前节点相邻的障碍物节点所成角度范围。由于维护了该角度范围值,在判断待拓展节点与当前节点的父节点之间是否存在直线路径时,可以直接通过判断当前节点的父节点与待拓展节点形成直线与参考方向所成角度是否落在当前节点所维护的角度范围变量值之间,如果是说明不存在直线路径。如图4所示,当前节点为s,parent(s)为当前节点的父节点,待拓展节点为s

,目标节点为goal,由图可以看出parent(s)与s

所成直线不在θ范围内,因此待拓展节点s

与parent(s)之间不存在无障碍直线路径。
[0182]
对于这种改进方法,关键在于维护节点的角度范围变量,所有角度必须具有唯一
的参考方向,本实施例所有角度均是沿着x轴正方向逆时针旋转所成角度,角度范围为[0
°
,360
°
],对于起始节点的角度范围直接初始化为[0
°
,360
°
]。使用角度范围进行改进的theta*算法避免了对节点的遍历判断操作,提升了算法的效率。
[0183]
结合图3,本实施例的改进theta*算法具体包括以下步骤:
[0184]
步骤s410,添加机器人的起始节点和结束节点;
[0185]
步骤s411,将初始状态加入open表中,转步骤s412;
[0186]
步骤s412,获取open表中堆顶节点作为当前节点,即栅格;若当前节点为目标节点,输出节点信息;若不为目标节点,转步骤s413;
[0187]
步骤s413,通过维护的角度范围信息,判断当前节点父节点与相邻节点的可见性;若相邻节点可见,转步骤s414;否则转步骤s415;
[0188]
步骤s414,将当前节点的相邻节点作为拓展节点,并将拓展节点的父节点调整为当前节点的父节点,同时从open堆中移除当前节点和新拓展节点,转步骤s416;
[0189]
步骤s415,拓展新状态,将不重复的新状态添加到open堆中,从open堆中移除当前节点,转步骤s416;
[0190]
步骤s416,输出结果。
[0191]
在步骤s412中,由于是最小堆数据结构维护的open表,插入节点时会自动按照代价值进行排序,堆顶节点始终是最小代价值的节点。
[0192]
本实施例提出的改进bcd算法将bcd算法中规定的四个方向增加到八个方向,机器人除了可以向north、south、west以及east方向移动之外,还可以向northwest、southwest、northeast以及southeast四个方向移动。另外该算法针对移动方向的选择制定了三条优先级规则:
[0193]
以上三条优先级规则在判断时同样具有优先级,优先级顺序依次降低,即只有在具备较高优先级规则判定情况相同时才能使用较低优先级判定规则。结合图5,改进bcd算法具体过程包括:
[0194]
步骤s420,根据二维栅格地图,确定待工作区域的栅格地图并确定出发点;
[0195]
步骤s421,通过全局路径规划算法规划出当前位置到出发点所在位置的路径,并移动到出发位置;
[0196]
步骤s422,获取当前位置所有可移动方向,如果存在可移动方向则通过改进bcd算法优先级规则确定当前移动方向,若可移动,转步骤s423;否则,输出局部覆盖路径。
[0197]
步骤s423,沿着选定方向移动一个栅格并更新当前位置,转步骤s422。
[0198]
通过上述算法,机器人完成了某一子区域的覆盖任务,在机器人完成当前子区域的覆盖任务后,需要前往下一个子区域的起点,但是此时可能存在多个未工作的局部子区域,如何选取局部子区域是机器人全覆盖算法需要解决的重要问题,即选取两个子区域衔接路径的目标点进一步地。本实施例设计回溯点机制解决子区域选择问题,包括回溯点的维护、筛选和选取,通过维护一张尚未被覆盖的坐标点信息,并通过是否存在一条直线,使得当前位置点在该直线上的两个相邻位置点均为自由未覆盖栅格的规则判定当前点是否可以筛选掉,依据这一判定规则对回溯点进行筛选,从而减小了回溯点的数量,通过欧拉距离最短的原则从回溯表中选取回溯点完成子区域的衔接。具体过程包括:
[0199]
步骤s430,建立回溯表,用于存储两个子区域间衔接时选取的候选目标点,所述候
选目标点是机器人所在位置相邻八个方向上的自由(非障碍物)且未覆盖的栅格(机器人尚未抵达过的栅格位置);
[0200]
步骤s431,判断回溯表中的候选目标点是否处于未覆盖子区域的边缘位置,结合图7、图8,判断的具体过程为:
[0201]
步骤s4311,假设待筛选回溯点位于a点,a点可移动的八个方向上的点分别为p1~p8,在这些点中能够与a点形成直线的一共有四对,分别是p1和p5、p2和p6、p3和p7、p4和p8;
[0202]
步骤s4312,定义状态描述函数
[0203][0204]
d(pi,pj)用于反映与a点在同一直线上的相邻两点是否均为自由未覆盖栅格;若d(pi,pj)=1则说明与a点在同一直线上的相邻两点pi、pj均为自由未覆盖栅格,则可判定a点必然不是所在子区域的边缘点,进而可以将a点从回溯表中移除,转步骤s4313;
[0205]
步骤s4313,定义回溯点判断函数如下:
[0206]
d(a)=d(p1,p5) d(p2,p6) d(p3,p7) d(p4,p8)
ꢀꢀꢀꢀꢀꢀꢀꢀ
(17)
[0207]
若d(a)≥1,则表示在a点与相邻位置形成的四条直线中,存在直线上a点相邻的两个位置点均为自由非覆盖栅格,那么a点必然不是边缘点,从回溯表中删除;若d(a)=0,则说明a点是边缘点,需要保留。在图8所示环境中,根据上述判定规则,自由黑色实心点标记的栅格位置才具有作为回溯点的条件,其他栅格位置均不需要维护在回溯表中。
[0208]
步骤s432,当机器人移动到死点(即在该位置处,机器人无法继续移动)位置时,需要在回溯表中选取一个回溯点(保存在回溯表中的候选目标点)作为子区域衔接的目标点或者下一个子区域的起始点,选取的依据为:分别计算回溯表中回溯点与死点位置之间的欧拉距离,选取欧拉距离最小的回溯点作为此次区域衔接路径规划的目标点。机器人从死点移动至目标点面在另一子区域进行工作。
[0209]
综上,结合图9,基于上述对全局路径规划算法、局部区域覆盖算法以及回溯方案,步骤s400的具体过程为:
[0210]
步骤s401,初始化起始位置等相关参数,如果当前位置就是起始位置,转步骤s402;否则通过改进theta*算法进行路径规划抵达起始位置后转步骤s402;
[0211]
步骤s402,通过改进bcd算法进行局部区域覆盖;
[0212]
步骤s403,需要将符合要求的栅格位置记录在回溯表中,当机器人移动到死点位置时,根据回溯点筛选规则对回溯表进行筛选,若筛选后回溯表存在候选目标点,转步骤s404;若回溯表为空集,转步骤s406;
[0213]
步骤s404,筛选后的回溯表作为区域衔接目标点的候选集合,分别计算回溯点与当前位置点的欧拉距离,并选取欧拉距离最小的回溯点作为目标点;
[0214]
步骤s405,在选定区域衔接目标点之后,通过改进theta*算法进行路径规划抵达目标点,将目标点作为当前位置,转步骤s402;
[0215]
步骤s406,结束本次全覆盖过程。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献