|
全球定位和搜索目标路径类似,我们这里主要讨论任务机器人搜索目标路径。
搜索目标路径有这么几个部分:
1、别名:findway, find, findjobxxx(其中 xxx 是具体 job 缩写,比如:findwayclb, findwaysx 等,有时候机器人做送信任务,也可能调用findwayclb,这个和机器人的实现人有关,具体原因不明)
2、findway 触发器
3、路径文件
它们之间的关系以及使用的基本流传是这样的:
1、调用 findway 并给定地点名称,开启 findway 触发器
2、findway 触发器确定路径的地域名称(如:慕容、桃花岛、华山等),用以确定调用哪个地域文件
3、调用 find 来寻找路径
4、一般这时 find 是调用具体的 findjobxxx 来寻找路径,也就是说,在开始调用 findway 之前,job机器人会重定义 find 别名。
findjobxxx 的作用是指定使用的路径文件夹(比如:findway, findwaysx, findwayclb),查看下该别名的定义,开头就是这个信息,如:#file 1 findwayclb/%1.txt,其中 findwayclb 就是文件夹名称 %1 则是调用这个命令跟的第一个参数,一般是这样调用:find find_gyz
5、最终,由 findjobxxx 来加载路径并保存。
这里要注意的是,路径加载和保存的过程,和路径文件的格式紧密相关,目前我看到的基本实现方式是这样的:
1、打开文件后,根据目的地的具体地名在文件中查找匹配的字符串
2、找到匹配字符串,则提取该字符串所在行(该行所有字符)
3、直接加载找到的字符串作为命令行输入
也就是说,在路径文件里面定义的,不止是路径,而是一段 zmud 的代码,以下我们都统称为路径。一般情况下,这段代码需要做如下的工作:
1、定义开始和结束寻址的别名:w_go, w_back
1.1、到达指定地点时调用 arrive
1.2、从目的地返回后,调用 arrive_back
1.3、这些随便打开个路径文件可以看到用法,照抄就好
1.4、各个地域之间的路径别名则要费一番功夫去找了,我目前了解的命名规则是这样的:
1.4.1、g 和 b 系列:gxx,其中 xx 是地名缩写,附带有 bxx,这个系列是从襄阳北的蒙古军营为中心点的,所以从襄阳到武当的路径是: bxy;gwd,再比如从襄阳到大理(从成都过):bxy;gcd;gdl
1.4.2、crtoxx 系列:cr 是指长江南,因此:crtohz 是长江南到杭州
1.4.3、其它还有一些,打开一些路径文件可以看到,也可以自己导出别名来找规律
1.4.4、具体为什么有这么多套原因不明,可能是多个人经手的缘故。
2、到达目的地后,开始寻址,这里我找到有两大类寻址方式:
2.1、直达目的地,然后就地展开搜索
2.1.1、这类一般从一开始,路径文件就是多行的,每行一个目的地,紧跟着的是到达这个地方的路径和搜索路径
2.1.2、优势是直达,速度快
2.1.3、缺点是对于每个地点,都要定义搜索路径,工作量大。
2.1.4、一般用于较大的地域,比如大理
2.2、到达目的地所在地域的一个固定地点,然后展开全地域搜索
2.2.1、这类整个文件就一行,在行的开始写多个地点名称,是用“|”分开。
2.2.2、后面跟着的就是去和回的路径,以及搜索路径
2.2.3、优势是只需要根据地图走一遍该地域所有地点,工作量少一些,但是搜索过程要合理一些,尽量少走回头路。
2.2.4、缺点是全拧一块,不是直达。
2.2.5、一般用于较小的地域,比如福州
2.3、目的地中文名称跟在 /** 后面,不会被载入运行,以分号为止,之后就会被载入运行。
3、寻址的过程中,有几个别名:multi_go, walk2, te2, multi_finish
3.1、multi_go 是开始寻址被调用的,所以所谓开始寻址,其实就是定义一个 multi_go,在这个别名里面你要利用 te2 和 walk2 来找到目的地,并最终调用 multi_finish 来结束寻址(注,找到目标时停止寻址不是我们需要关心的,那个是任务机器人要处理的,这里说结束,是指已经走过所有需要寻找的地方,没有找到目标,所以结束)
3.2、multi_finish 自然是结束的意思,调用它来把控制权交回
3.3、te2 和 walk2 则有点类似我们之前说的 ta 和 setdo,就是大家常看到的 alias action 8######## 及其触发调用的语句。
3.4、有关嵌套的事件回调,请参阅第一堂课,虽然那个讲得有点乱,我也懒得重新整理了。
基本上就是这些了,下面简单介绍下,如果你要加入一个新地域,比如桃花岛,需要做哪些工作,具体我也没时间测试了,只是把大概思路讲下,这样给大家一个整体的概念:
1、在 findway 触发器里面增加一个触发:^??find*桃花岛(*)$
2、触发语句请抄下其它同类触发器的触发:#t- findway;find find_thd %1
3、给定的 find_thd 自然就是你要写的那个地域文件名了,注意要 txt 做扩展名
4、然后,你要查下你的机器人各个任务都具体用的是哪个 findjobxxx,并且该 findjobxxx 是用的是哪个文件夹做搜索,,这样,如果有需要,不同 job 可以采取不同的搜索策略。
5、最重要的,写一个 find_thd.txt ,里面要定义好 w_go, w_back 和 multi_go。这里我就不写这个了,根据我上面的解释和其它已有的路径文件,应该很容易写一个的。 |
评分
-
1
查看全部评分
-
|