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

一种基于方域图的机器人行走路径生成方法与流程

2021-12-03 23:01:00 来源:中国专利 TAG:


1.本发明涉及机器人行走路径生成技术领域,具体涉及一种基于方域图的机器人行走路径生成方法。


背景技术:

2.机器人技术研究已发展到各行各业。在工业、医疗和军事等等多个领域得到了广泛的引用,涉及到各类学科。智能化的移动机器人通过自身传感器等装置感知周围环境的状态,将收集到的信息通过算法,快速而又准确的从起始点找到一条安全、没有碰撞绕过所有障碍物到达目标点的最优或次优路径。路径规划的方法根据获得的工作环境信息的程度,又可以将路径规划分为全局路径规划和局部路径规划两个方面。局部路径规划利用传感器获取未知环境中周围环境的信息,使机器人能够在不发生碰撞的情况下获得安全路径。全局路径规划是指机器人在移动之前已经获得了工作环境的信息,在已知环境信息下,找到起始点到目标点的最优路径。无论局部路径规划,还是全局路径规划都需要通过一定的技术方法来自动产生机器人行走路径。


技术实现要素:

3.本发明的目的在于提供一种关于机器人的基于方域图的路径生成方法,给出一种生成机器人路径的技术方法。
4.本发明采用的技术方案为:
5.一种基于方域图的机器人路径生成方法,包括如下步骤:
6.步骤一,输入机器人的起始位置p
start
、目标点位置p
target
和方域图graph_sf;进入步骤二;
7.所述方域图graph_sf是由栅格形式背景k=(o,a,i)的域概念格生成,域概念格中的每个域概念都包含其概念方域集;
8.对于一个栅格形式背景k=(o,a,i),起始位置p
start
为一个二元组(x0,y0),x0为栅格形式背景的对象,即x0∈o;y0为栅格形式背景的属性,即y0∈a;同理,目标点位置p
target
也为一个二元组(x1,y1);
9.步骤二,生成起始域概念集cs
start
;进入步骤三;
10.所述起始域概念集为包含起始位置的方域,称之为起始方域,表示为sf
start
;包含起始方域的域概念,称之为起始域概念,表示为c
start
;所有起始域概念的集合,简称为起始域概念集,表示为cs
start

11.步骤三,对起始域概念集cs
start
中的每个起始域概念c
start
的起始方域sf
start
进行初始化赋值;
12.即sf
start
.flag_visit=true;
13.sf
start
.path_cost=0;
14.sf
start
.owner=c
start

15.sf
start
.pre_node=none;
16.并放入到队列queue中;进入步骤四;
17.步骤四,如果队列queue不为空,则进入步骤五;否则进入步骤二十七;
18.步骤五,队列queue第一个元素出队,即cur_sf=queue(0),进入步骤六;
19.步骤六,如果方域cur_sf不包含目标点位置p
target
,则进入步骤七;否则进入步骤十四;
20.步骤七,获得方域cur_sf的所属域概念cur_c,即cur_c=cur_sf.owner;然后,将cur_c的所有直接子概念sons(cur_c)和所有直接父概念fathers(cur_c)放入候选列表candidate_concepts_list中,然后进入步骤八;
21.步骤八,如果候选列表candidate_concepts_list中还有未处理的域概念next_c,进入步骤九;否则进入步骤四;
22.步骤九,如果域概念next_c的方域集sfs
next_c
中有未处理的方域next_sf,进入步骤十;否则进入步骤八;
23.步骤十,如果方域next_sf与方域cur_sf衔接邻接,则进入步骤十一;否则进入步骤九;
24.方域之间的所述衔接邻接为:对于一个栅格形式背景k,(o1,t1)和(o2,t2)为其任意方域;如果则称方域(o1,t1)和(o2,t2)衔接邻接连通,简称衔接邻接;
25.步骤十一,如果方域还没有被访问过,即next_sf.flag_visit等于false,则进入步骤十二;否则进入步骤十三;
26.步骤十二,对next_sf进行操作,即令
27.next_sf.path_cost=cur_sf.path_cost 1;
28.next_sf.owner=next_c;
29.next_sf.pre_node=cur_sf;
30.next_sf.flag_visit=true;
31.然后将next_sf加入队列queue中,进入步骤九;
32.步骤十三,如果cur_sf.path_cost 1小于next_sf.path_cost,则令next_sf.pre_node=cur_sf;next_sf.path_cost=cur_sf.path_cost 1;进入步骤九;
33.步骤十四,由当前方域cur_sf生成到达目标点p
target
的有效方域路径sf_path,进入步骤十五;
34.所述方域路径为由路径节点组成的序列,即sf_path=(n0,n2,

,n
n
),其中n
i
=(c
i
,s
i
),0≤i≤n,为路径节点,并且满足s
i
与s
i 1
,i<n,衔接邻接;
35.所述路径节点为:对于一个二元组(c,s),其中c是域概念,s是域概念c的方域,即s∈sfs
c

36.步骤十五,令cur_pos=p
start
=(x0,y0),驻点路径),驻点路径进入步骤十六;
37.所述驻点路径是由栅格形式背景k=(o,a,i)的点坐标组成的序列,即pos_path=(p0,p2,

,p
n
),其中点p
i
=(x
i
,y
i
),满足x
i
iy
i
,x
i
∈o,y
i
∈a;所述点p
i
是机器人停留并且调整方向的位置,故称p
i
为驻点;
38.步骤十六,如果方域路径sf_path中有未处理的路径节点(cur_c,cur_sf),进入步骤十七;否则,进入步骤二十四;
39.步骤十七,将candidate_list中属于当前方域cur_sf的点p,放入到list中,进入步骤十八;
40.步骤十八,如果list不为空,则令candidate_list=list,进入步骤十六;否则进入步骤十九;
41.步骤十九,pre_pos=cur_pos,进入步骤二十;
42.步骤二十,如果candidate_list不为空,则从中根据欧式距离筛选距离目标点p
target
最近的点cur_pos;进入步骤二十一;
43.步骤二十一,将cur_pos加入到pos_path中,进入步骤二十二;
44.步骤二十二,如果cur_pos.x==pre_pos.x,则将点集{(x1,cur_pos.y)|x1∈cur_sf.o}放入candidate_list中;进入步骤二十三;
45.步骤二十三,如果cur_pos.y==pre_pos.y,则将点集{(cur_pos.x,y1)|y1∈cur_sf.t}放入candidate_list中;进入步骤十六;
46.步骤二十四,根据欧式距离从candidate_list中筛选距离目标点p
target
最近的点cur_pos,进入步骤二十五;
47.步骤二十五,如果cur_pos.x==p
target
.x or cur_pos.y==p
target
.y,则将cur_pos加入到pos_path中;否则,将点(cur_pos.x,p
target
.y)加入到pos_path中;进入步骤二十六;
48.步骤二十六,将p
target
加入到pos_path中,进入步骤二十七;
49.步骤二十七,结束。
50.优选的,所述步骤一中,生成方域图的步骤为:
51.1)根据机器人所在环境,生成栅格形式背景k=(o,a,i);进入步骤2);
52.所述栅格形式背景为一个三元组k=(o,a,i)其中o为连续对象集合,即o={o1,o2,...,o
m
}中的每个对象元素的下标连续,表示栅格表的行;a为连续属性集合a={a1,a2,...,a
n
}中的每个属性元素的下标连续,表示栅格表的列;i是o与a之间的二元关系,oia,o∈o,a∈a当且仅当o行a列处没有障碍物存在;
53.2)根据栅格形式背景k,生成域概念格(cs
k
,≤);进入步骤3);
54.所述域概念格为一个栅格形式背景k所产生的所有域概念cs
k
和其上的偏序关系≤,所形成一个完备格,记为(cs
k
,≤);
55.所述域概念为对于一个栅格形式背景k=(o,a,i),并且满足f(x)=y,g(y)=x,称二元组(x,y)为一个域概念,其中x为域概念的外延,y为域概念的内涵;cs
k
为记栅格形式背景k的全体概念;其中,函数f、g分别为形式概念分析中的伽罗瓦联系;
56.所述域概念之间的偏序关系为设(x1,y1)和(x2,y2)是栅格形式背景k=(o,a,i)的任一两个域概念,则定义称(x1,y1)为(x2,y2)的子概念,(x2,y2)为(x1,y1)的父概念;所述≤为集合cs
k
上的偏序;
57.3)由域概念格生成方域图graph_sf;
58.所述方域为设(x,y)是栅格形式背景k=(o,a,i)的任意一个域概念,其中对象集
合x由一个或多个连续对象集组成,即x=o1∪o2∪

∪o
k
,k<‖o‖,并且任意两个连续对象集的并集不为连续对象集;属性集合y由一个或多个连续属性集组成,即y=a1∪a2∪

∪a
j
,j<‖a‖,并且任意两个连续属性集的并集不为连续的属性集;则二元组(s,t),其中s∈{o1,o2,

,o
k
},t∈{a1,a2,

,a
j
},称之为域概念(x,y)的一个方域;
59.所述方域图graph_sf为一个栅格形式背景k的域概念格中的每个域概念(x,y)∈cs
k
,都具有其概念方域集sfs
(x,y)
,即graph_sf=(cs
k
,≤,sfs
(x,y)
);
60.所述概念方域集为一个域概念的所有方域的集合,表示为sfs
(x,y)

61.优选的,所述步骤二中,生成包含起始点p的所有域概念集合的步骤如下:
62.1)对于一个栅格形式背景k=(o,a,i),输入一点坐标,表示为p=(o,a),其中oia,o∈o,a∈a;进入步骤2);
63.2)依据形式概念分析方法,获得p=(o,a)的属性概念和对象概念,即分别为(g(a),f(g(a)))、(g(f(o)),f(o));进入步骤3);
64.3)令fathers(c0)表示域概念c0的所有父概念,sons(c0)表示域概念c0的所有子概念,即:
65.fathers(c0)={c|c∈cs
k
,c≥c0}
ꢀꢀ
(1)
66.sons(c0)={c|c∈cs
k
,c≤c0}
ꢀꢀ
(2)
67.cs(p)={fathers((g(f(o)),f(o)))∪{(g(f(o)),f(o))}}∩{sons((g(a),f(g(a)))∪{(g(a),f(g(a)))}}
ꢀꢀ
(3)
68.则通过公式(3)获得包含点p的所有域概念集合:令p为起始点,即p=p
start
,cs
start
=cs(p
start
),进入步骤4);
69.4)结束。
70.优选的,所述步骤十四中,由当前方域cur_sf生成到达目标点p
target
的路径sf_path的步骤如下:
71.1)生成路径节点(cur_sf.ower,cur_sf),并加入的路径sf_path列表表头,进入步骤2)
72.2)如果cur_sf.pre_node等于none,则进入步骤4);否则进入步骤3);
73.3)令cur_sf=cur_sf.pre_node,进入步骤1);
74.4)返回sf_path,结束。
75.本发明产生的有益效果是:
76.1、本发明能够生成最优路径,该路径由坐标点构成,机器人在坐标点之间可以直线行驶。
77.2、本发明所生成的路径对于四向机器人可以达到转弯次数最少并且所经路途最短的效果。
78.3、本发明的中间结果,即由连续矩形空间(方域)组成的路径,是从起点到终点的最短连通区域,有利于机器人在高效到达目标点的行进过程中,有一定的自主活动空间,更适合例如八向机器人的多向机器人使用。
附图说明
79.图1为本发明的方法流程图;
80.图2为本发明的系统结构示意图;
81.图3为机器人所在环境的栅格图;
82.图4为栅格形式背景k生成的域概念格;
83.图5为生成的最优路径图。
具体实施方式
84.下面结合附图对本发明作进一步的说明。
85.如图1所示,本发明是一种基于方域图的机器人路径生成方法,包括如下步骤:
86.步骤一,输入机器人的起始位置p
start
、目标点位置p
target
和方域图graph_sf;进入步骤二。
87.在生成方域图graph_sf时,采用如下步骤:
88.1)根据机器人所在环境,生成栅格形式背景k=(o,a,i);进入步骤2);
89.2)根据栅格形式背景k,生成域概念格(cs
k
,≤);进入步骤3);
90.3)由域概念格生成方域图graph_sf。
91.步骤二,生成起始域概念集cs
start
;进入步骤三。
92.生成包含起始点p的所有域概念集合的步骤如下:
93.1)对于一个栅格形式背景k=(o,a,i),输入一点坐标,表示为p=(o,a),其中oia,o∈o,a∈a;进入步骤2);
94.2)依据形式概念分析方法,获得p=(o,a)的属性概念和对象概念,即分别为(g(a),f(g(a)))、(g(f(o)),f(o));进入步骤3);
95.3)令fathers(c0)表示域概念c0的所有父概念,sons(c0)表示域概念c0的所有子概念,即:
96.fathers(c0)={c|c∈cs
k
,c≥c0}
ꢀꢀ
(1)
97.sons(c0)={c|c∈cs
k
,c≤c0}
ꢀꢀ
(2)
98.cs(p)={fathers((g(f(o)),f(o)))∪{(g(f(o)),f(o))}}∩{sons((g(a),f(g(a)))∪{(g(a),f(g(a)))}}
ꢀꢀ
(3)
99.则通过公式(3)获得包含点p的所有域概念集合:令p为起始点,即p=p
start
,cs
start
=cs(p
start
),进入步骤4);
100.4)结束。
101.步骤三,对起始域概念集cs
start
中的每个起始域概念c
start
的起始方域sf
start
进行初始化赋值;
102.即sf
start
.flag_visit=true;
103.sf
start
.path_cost=0;
104.sf
start
.owner=c
start

105.sf
start
.pre_node=none;
106.并放入到队列queue中;进入步骤四。
107.步骤四,如果队列queue不为空,则进入步骤五;否则进入步骤二十七;
108.步骤五,队列queue第一个元素出队,即cur_sf=queue(0),进入步骤六;
109.步骤六,如果方域cur_sf不包含目标点位置p
target
,则进入步骤七;否则进入步骤
十四。
110.步骤七,获得方域cur_sf的所属域概念cur_c,即cur_c=cur_sf.owner;然后,将cur_c的所有直接子概念sons(cur_c)和所有直接父概念fathers(cur_c)放入候选列表candidate_concepts_list中,然后进入步骤八。
111.步骤八,如果候选列表candidate_concepts_list中还有未处理的域概念next_c,进入步骤九;否则进入步骤四。
112.步骤九,如果域概念next_c的方域集sfs
next_c
中有未处理的方域next_sf,进入步骤十;否则进入步骤八。
113.步骤十,如果方域next_sf与方域cur_sf衔接邻接,则进入步骤十一;否则进入步骤九。
114.步骤十一,如果方域还没有被访问过,即next_sf.flag_visit等于false,则进入步骤十二;否则进入步骤十三。
115.步骤十二,对next_sf进行操作,即令
116.next_sf.path_cost=cur_sf.path_cost 1;
117.next_sf.owner=next_c;
118.next_sf.pre_node=cur_sf;
119.next_sf.flag_visit=true;
120.然后将next_sf加入队列queue中,进入步骤九。
121.步骤十三,如果cur_sf.path_cost 1小于next_sf.path_cost,则令next_sf.pre_node=cur_sf;next_sf.path_cost=cur_sf.path_cost 1;进入步骤九。
122.步骤十四,由当前方域cur_sf生成到达目标点p
target
的有效方域路径sf_path,进入步骤十五。
123.由当前方域cur_sf生成到达目标点p
target
的路径sf_path的步骤如下:
124.1)生成路径节点(cur_sf.ower,cur_sf),并加入的路径sf_path列表表头,进入步骤2)
125.2)如果cur_sf.pre_node等于none,则进入步骤4);否则进入步骤3);
126.3)令cur_sf=cur_sf.pre_node,进入步骤1);
127.4)返回sf_path,结束。
128.步骤十五,令cur_pos=p
start
=(x0,y0),驻点路径),驻点路径进入步骤十六;
129.步骤十六,如果方域路径sf_path中有未处理的路径节点(cur_c,cur_sf),进入步骤十七;否则,进入步骤二十四;
130.步骤十七,将candidate_list中属于当前方域cur_sf的点p,放入到list中,进入步骤十八;
131.步骤十八,如果list不为空,则令candidate_list=list,进入步骤十六;否则进入步骤十九;
132.步骤十九,pre_pos=cur_pos,进入步骤二十;
133.步骤二十,如果candidate_list不为空,则从中根据欧式距离筛选距离目标点p
target
最近的点cur_pos;进入步骤二十一;
134.步骤二十一,将cur_pos加入到pos_path中,进入步骤二十二;
135.步骤二十二,如果cur_pos.x==pre_pos.x,则将点集{(x1,cur_pos.y)|x1∈cur_sf.o}放入candidate_list中;进入步骤二十三;
136.步骤二十三,如果cur_pos.y==pre_pos.y,则将点集{(cur_pos.x,y1)|y1∈cur_sf.t}放入candidate_list中;进入步骤十六;
137.步骤二十四,根据欧式距离从candidate_list中筛选距离目标点p
target
最近的点cur_pos,进入步骤二十五;
138.步骤二十五,如果cur_pos.x==p
target
.x or cur_pos.y==p
target
.y,则将cur_pos加入到pos_path中;否则,将点(cur_pos.x,p
target
.y)加入到pos_path中;进入步骤二十六;
139.步骤二十六,将p
target
加入到pos_path中,进入步骤二十七;
140.步骤二十七,结束。
141.如图2所示,本发明包含两个主要模块:最优方域路径生成模块和驻点路径生成模块。
142.其中最优方域路径生成模块负责由方域图生成最优方域路径;驻点路径生成模块负责将方域路径转化成机器人行走所需的坐标驻点路径。
143.本发明为机器人行走模块提供路径信息;同时,其它模块负责提供相应的服务。例如:环境数据生成模块负责将机器人所在的环境转化成相应的栅格形式背景;域概念格生成模块将栅格形式背景转化成栅格概念格;方域图生成模块负责从栅格概念格产生方域图,供机器人路径生成模块使用。
144.实施例1:
145.如图3所示,机器人所在环境可以转化成栅格图,空白部分为无障碍区域,机器人可以自由行走。起点为空心圆所在方格,终点为实心圆方格。
146.依据本发明所述方法,生成从起点到终点的方域路径和驻点路径。机器人沿着该方域路径行驶,只需要在驻点停留,并调整方向,可以达到转弯次数最少,并且所经路途最短的效果。
147.首先,依据步骤一,输入机器人的起始位置p
start
=(0,0)和目标点位置p
target
=(5,5),和方域图graph_sf。方域图graph_sf来源于根据机器人所在环境生成栅格形式背景,如表1所示;方域图graph_sf的节点之间的结构如图4所示,每个域概念节点都具有各自的方域集,具体如表2所示。
148.表1栅格形式背景k
149.111000101110111011101101110101111111
150.表2方域图graph_sf的每个节点
151.152.[0153][0154]
步骤二,生成起始域概念集cs
start
,由从方域图graph_sf中生成的起始域概念集cs
start
(使用域概念的id值表示):起始域概念集cs
start
:{0,9,10,2}。
[0155]
步骤三,对起始域概念集cs
start
={0,9,10,2}中的每个起始域概念c
start
的起始方域sf
start
进行初始化赋值;例如:id=0的域概念的起始方域为其方域集中id=0的方域sf
id=0
,令:sf
id=0
.flag_visit=true;sf
id=0
.path_cost=0;sf
id=0
.owner=c
start
;sf
id=0
.pre_node=none,并放入到队列queue中;以此类推,处理完起始域概念集cs
start
={0,9,10,2}中的每个起始域概念,进入步骤四。
[0156]
依据步骤四,因为队列queue不为空,进入步骤五。
[0157]
步骤五,队列queue第一个元素出队,即cur_sf为id=0的域概念中id=0的方域,进入步骤六。
[0158]
依据步骤六,方域cur_sf不包含目标点位置p
target
,进入步骤七。
[0159]
依据步骤七,获得方域cur_sf的所属域概念cur_c,即cur_c=sf
start
.owner为id=0的域概念;然后将其的所有直接子概念和所有直接父概念放入候选列表candidate_concepts_list中,即candidate_concepts_list=[2,10,5]。然后进入步骤八,从候选列表candidate_concepts_list中获得域概念next_c为id=2的方域;进入步骤九。
[0160]
依据步骤九、步骤十、步骤十一、步骤十二和步骤十三,遍历id=2方域的方域集,判断是否是与cur_sf,即id=0的方域,邻接的方域。可得id=2的方域集中id=0和id=1的方域与其邻接,且id=0方域在步骤三中已经加入queue中,id=1未加入。因此令id=1方域为next_sf,并且令next_sf.path_cost=cur_sf.path_cost 1;next_sf.owner=next_c;next_sf.pre_node=cur_sf;next_sf.flag_visit=true,并加入queue中。以此方法继续遍历id=10、id=5的域概念的方域集,并加入队列queue,进入步骤四。以此类推,进入步骤十四。
[0161]
步骤十四,由当前方域cur_sf生成到达目标点p
target
的有效路径,获得最优方域路径sf_path=((9,0),(2,2),(0,2),(5,2),(1,0))。进入步骤十五。
[0162]
步骤十五,令cur_pos=p
start
=(x0,y0),驻点路径),驻点路径进入步骤十六。
[0163]
依据步骤十六,方域路径sf_path中有未处理的路径节点,依次处理,取(9,0),进入步骤十七;因此时并且进入步骤十九,pre_pos=cur_pos,然后,进入步骤二十一;将cur_pos加入到pos_path中,进入步骤二十二。
[0164]
步骤二十二,因为cur_pos.x==pre_pos.x,则将点集{(0,0),(1,0),(2,0),(3,0),(4,0),(5,0)}放入candidate_list中;进入步骤二十三。
[0165]
步骤二十三,因为cur_pos.y==pre_pos.y,则将点集{(0,0)}放入candidate_
list中。进入步骤十六;依次类推,遍历完方域路径sf_path中所有路径节点,此时pos_path=((0,0));candidate_list=((5,0));进入步骤二十四,cur_pos=(5,0);进入步骤二十五,将cur_pos加入到pos_path中;进入步骤二十六。
[0166]
步骤二十四,根据欧式距离从candidate_list中筛选距离目标点p
target
最近的点cur_pos,进入步骤二十五,将p
target
加入到pos_path中。最终获得驻点路径pos_path=((0,0),(5,0),(5,5))。
[0167]
若机器人按照驻点路径pos_path=((0,0),(5,0),(5,5))给出的坐标直线行驶,则只需一次转弯就可到达目标点;该路径如图5所示,其中黑色的直线即为按坐标直线行驶的路径。
[0168]
若机器人根据中间结果,即方域路径sf_path=((9,0),(2,2),(0,2),(5,2),(1,0)),所设定的区域自由行驶,该路径如图5所示,其中浅灰色部分表示为该方域路径,所途径的区域也是所有路线中最短的。
再多了解一些

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

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

相关文献