maper 发表于 2008-10-31 13:45:36

Zmud下基于map功能的全自动护镖机器人构想

目前在论坛上还没看到全自动的护镖机器人,以下是我对全自动护镖机器人的一点想法。
       护镖的流程是在镖局领镖,然后护送到目的地,中途有不同门派的劫匪打劫。做全自动护镖机器人最难的两点是:1、镖车会被劫匪随机移动一步,这样预设的送镖路径就不可靠;2、接镖的伙计位置不确定,这样会造成送镖的时候困难和不能通过预设路径自动返回镖局。以上两点困难可以使用zmud的map功能配合自动定位和区域搜索进行化解。
      关于Zmud中绘制地图请看http://advent.pkuxkx.com:1234/forum/viewthread.php?tid=3959&highlight=%2Bmaper
      一、自动定位
       自动定位就是当人物所处的房间和Zmud地图上当前房间不一致时,自动在Zmud地图上标示正确的当前房间。只有当前房间正确才能够使用#walk命令进行自动行走。
       自动定位的思路很简单,通过房间名和房间描述来查找房间编码,然后使用#te命令来标示当前房间。不过在实际运用过程中发现效果并不好,所以这里采用房间名和房间出口来定位。以下是自动定位的过程:
1、抓取房间名和房间出口,其中房间出口通过转换成“e|w|s|n”这样的格式;
2、在地图数据库中检索房间名,得到的结果存入变量room_to_find;
3、如果room_to_find的结果为空,那就从走到下一个房间,然后look一下,再从第1步开始;
      如果room_to_find的结果只有一个那就#te @room_to_find,定位结束;
      如果room_to_find的结果超过一个,通过比较room_to_find的每一个房间出口和抓取的房间出口是否相等,如果相等则#add check_num 1;最后检查check_num的值如果等于1则定位结束,否则走到下一个房间,然后look一下,再从第1步开始;

以下是我写的一个trigger:
#trigger {\s+这里明显的出口是\s+(\w+)\s+和\s+(\w+)。}
{dir1=%1;
dir2=%2;
check_num=0;
room_num=0;
chukoulist=@dir1|@dir2;
changechukou;   //把出口转换成e|w|s|n这种格式
room_to_find=%mapquery( %concat( "Name LIKE '", @diming, "'"));    //检索map数据库
#if (%null( @room_to_find)) {
#wa 10;@dir1
} {
      #if (%numitems( @room_to_find)==1) {
             check_num=1;
             room_num=@room_to_find;
             #te @room_to_find} {
                  #forall @room_to_find {
                        #if %sort( %roomexit( %i))==@chukoulist {
                              room_num=%i;#add check_num 1}}}};    //比较room_to_find中每一个房间的出口
#if @check_num==1 {
    #te @room_num} {
      #wa 10;@dir1}}

二、区域搜索
      区域搜索就是以一个房间为中心搜索其各个方向一定步数以内的所有房间。区域搜索的trigger我还没搞定,不过可以参考这两个帖子:
1、一个区域搜索的思路
2、定点按指定层次展开搜索指定目标,完成后返回原点

三、全自动护镖机器人的思路
       在镖局接到镖之后,比如提示要送到北京宝源钱庄,通过触发可以得到镖局和宝源钱庄两个房间的号码,然后使用%pathfrom(num1,num2)可以得到护镖路径path,再截取第一个方向dir,然后gang che to @dir;并且使用%roomlink(num,dir)可以得到@dir进入房间的号码,用#te进行标记;
       如果中途镖车被移动了,可以使用自动定位在Zmud地图上找到正确的房间,再进行下一步直到护镖到指定位置;
       如果在指定位置没有找到伙计就开启区域搜索功能,自动在附近房间进行搜索直到找到伙计为止;
       返回镖局是最简单的了,#walk就可以了。
      
       相信搞定了以上两个难题,一个全自动护镖机器人就可以呼之欲出了!

maper 发表于 2008-10-31 13:53:37

自动定位还是很有用的,在做复杂的机器人时,可以有效的防止机器人在半路中断。
不知道使用自动定位+区域搜索能不能做一个像毫毛那样到处捡垃圾的机器人,不知道捡垃圾能不能致富?ttk_35

huoyu 发表于 2008-11-1 13:47:11

为什么不用mush来实现?mush的强大脚本+完整的zmud地图数据,可以实现你说的全部功能。感觉比zmud实现轻松

newsplay 发表于 2008-11-4 18:44:20

强大

你说的我都看不懂。。哭

你教的7.21又没用了,感觉实在用不习惯

唉。。

期待你的全自动!

加油!!

搞个全自动胡一刀的也不错

tomliu 发表于 2008-11-5 08:43:32

好恐怖啊!先回复再细看

kevinliu 发表于 2008-11-12 12:20:29

zmud的map功能一直没用过,改天研究一下。至于MUSH真的有这么牛嘛,请问各位高手用的多嘛?

maper 发表于 2008-11-12 12:53:57

用什么工具主要取决于你想要达到什么样的功能,可以把两个工具都熟悉一下。

tomliu 发表于 2008-11-17 10:01:59

其实我已经解决了劫匪推车跑了之后的自动回来的问题,不用map功能就能实现,就是笨点,但是能回来,呵呵!送完镖回来的我没法实现了,这个用map好像能行!

cid 发表于 2008-11-17 11:31:38

其实都是当前房间的唯一性定位问题吧?

maper 发表于 2008-11-17 12:02:06

原帖由 cid 于 2008-11-17 11:31 AM 发表 http://advent.pkuxkx.com:1234/forum/images/common/back.gif
其实都是当前房间的唯一性定位问题吧?
是的,就是这个问题。只要你知道你在什么地方了,那其他都好办了。
页: [1] 2 3
查看完整版本: Zmud下基于map功能的全自动护镖机器人构想