SOM v3.3.3二次开发中LUA脚本的基本用法和环境搭建

前言

前不久接触了这种新式的脚本语言LUA,和一些机器人二次开发的一些概念。很杂很乱,其实在开始学习这个杂七杂八的玩意儿之前,就已经暗自打算一定要写一写技术博客来记录自己的学习,然而时间不是很多,一直都没有写,甚至机器人的事情也被耽搁了下来。
网络上找不到类似这种ILOBOKE机器人开发的技术文章(技术太偏),很多问题就只能求助于社里经验丰富的前机器人足球队队员,或者靠自己看文档(说实话官方给的SOM二次开发手册真的不咋滴,没两下子就看完了,实操又各种奇怪问题),凭感觉,效率很低。
一方面,我希望记录自己学习的点点滴滴,写博客为自己日后作参考;另一方面,我也希望下一届的机器人足球队队员们的信息来源不再单一,能有我的一些博客作为参考。总的来说还是有益的。

SOM v3.3.3 二次开发环境配置

这里我只讲LUA的,不讲C++ dll那边的,稍后的实例也避开了C++,直接采用LUA控制机器人。
首先最基本的,你得拥有SOM v3.3.3这款软件,否则一切免谈
官方给的下载链接已经失效,需要的请加QQ 2257546277
我可以为你提供完整的SOM v3.3.3

解压完毕后,先不要急着打开软件,不然你会遇见各种问题
先把所有.exe以管理员身份运行(这在二次开发手册里面有,可以直接参照二次开发手册)
解压后,对根目录下的 SoccerPlanner3.exe应用程序右击属性,选 择兼容勾应用程序右击属性,以管理员身份运行此程序 ”,
在这里插入图片描述
不出意外的话,也有这些玩意儿
在这里插入图片描述
打开 Team_BLUE 或 Team_YELLOW 文件夹,如图 文件夹
在这里插入图片描述
然后把这两个后台相关程序都以管理员身份运行。
也有一种最简单的办法,直接在根目录下搜索.exe
然后你会搜出这些玩意儿:
在这里插入图片描述
全部设为管理员权限即可!
记住,这很重要!千万记住!否则会出现很多奇奇怪怪的例如崩溃、卡死、按不动的问题。有时候点击开始测试,弹出窗口后会卡死,然后让你到“赛事裁判”里面退出比赛,然而死都退不了,就是管理员权限的问题
软件路径最好全英文且无特殊字符,否则也容易出问题!
中文路径改英文的时候,原本赋予管理员权限的.exe管理员权限会消失!需要重新赋予!!!(我当时就是卡在这里!!!)

编写LUA脚本

这里使用的LUA语言,同真正意义上的LUA开发不同,大多数麻烦的事情已经交由官方的代码处理,我们只需要借助模板,使用一些简单的函数进行二次开发即可。
在选择了LUA脚本之后(测试模式下只能选择一种LUA脚本),机器人控制程序会以60fps的速度执行此脚本。我们接下来看看应该怎么写这样的脚本
下面先提供一份官方的LUA模板:
在这里插入图片描述
我们的所有开发,基本都在如下框架中进行
战术框架主机构

gPlayTable.CreatePlay{

}

状态框架可以理解为一个函数,需要被调用,才可以起到作用。这个一会儿再说。
firstState是对初始状态框架的规定,因为一个LUA脚本被执行的时候,至少在这个程序里是不存在一个明确的入口函数的(入口函数就相当于C++中的main函数),所以使用firstState就等于是规定了入口函数是哪一个,
例如这里

firstState="doRef",

这样,LUA脚本被执行的时候就会先进入doRef函数。
进入函数之后,我们要做的是给机器人分配任务,一般比较常用的机器人球员的英文名有
Kicker 前锋
Receiver 后卫
Goalie 守门员

一方的机器人只会有一个Kicker这样的玩意儿,所以不必顾虑Kicker2这样的东西。

["getball"]={
    Kicker=task.GetBall("Kicker","Kicker"),
},

此时,我在getball函数中写入Kicker的任务——GetBall
注意大小写
这是官方给你的一个抓球函数
有关这一函数的用法,在二次开发手册中有描述,本人在此摘录一下:
在这里插入图片描述
执行者是runner_role,放这里就是Kicker。意思就是拿球的是Kicker
然后,拿球的时候要朝向receive,如果你把它设为middle,那它拿到球的时候正面就会一直朝着middle机器人,就像这样:
在这里插入图片描述
二号是kicker,三号是友方middle,二号拿球的时候是朝向三号的。(甚至在往球的方向走的时候,也是一路朝着三号)
有时候这么做可以方便传球
当然,你也可以选择谁都不朝,那就也填Kicker,朝自己,那就是谁都不朝
测试执行后一切正常。
最后,就是name的用法
name后面的值必须等于你的脚本文件的名字
不能加后缀,例如
getball.lua的name=“getball”
如果name拼写有误,就会出现:
加载失败:战术名应与文件名相同的字样
如果直接不写name,就会脚本检测失败(过不了编译)
并提示table index is nil
这些信息都会在这个界面呈现:
在这里插入图片描述
下面提供完整的正确代码

gPlayTable.CreatePlay{

firstState="getball",

["getball"]={
    Kicker=task.GetBall("Kicker","Kicker"),
},


name="getball"
}

这只是最基本,最简单的写法,正常情况下,一场正规比赛的LUA脚本长度可达百行,动用函数数十个,这就需要我们的链接函数的利器:switch状态跳转函数
这是我们下一次的话题。
记住,官方给你的函数使用错误,它也是会归结为编译错误的!

导入LUA脚本测试

说了这么多,还没教你测试来着……
调试代码,绝对是作为coder的精髓,也是必须要掌握的东西
而这个测试不同于其他代码,它的测试结果全部都在这个绿绿的足球草坪上,我的意思是,你几乎没有办法对LUA做debugger调试。
所以,我们只能使用上帝赋予我们最高级的debugger——眼睛
通常这种debugger可以从你妈妈的肚子里解压出来,你系统自带的,没有的话从别人身上移植,收费的,很贵,附近的医院可能有,重点是你还找不到盗版或者绿色版的。
咳咳,进入正题:
首先,你把写好的LUA脚本放在指定的位置,
这里以黄队为例,
一般在这个目录下
\SOM v3.3.3\Team_YELLOW\lua_scripts\play
然后你会看见三个文件夹,
Nor,Ref和Test
测试脚本直接往Test里面塞
你在测试的时候会提示你是否转正,如果你觉得你的脚本跟你想的没有很大出入,就可以转正了
到时候会出现在Ref目录下。

然后点开程序
SoccerPlanner3.exe
在这里插入图片描述
选择测试模式
在这里插入图片描述
选择模拟训练
在这里插入图片描述
选择黄队(看你测试的是哪个队)
在这里插入图片描述
要几个队员就勾选几个,但是一定要出现LUA脚本里面分配到任务的队员
例如之前的脚本里面出现了Kicker,这里就一定要选择前锋
在这里插入图片描述
点击浏览,直接找到你的脚本位置,然后点击下面的导入。这个脚本就会出现在脚本选择区了,你也可以直接在脚本选择区选择你已经做过的脚本。
在这里插入图片描述
只有这样,你才可以点击“开始测试”按钮!!!
然后你就会看见机器人和它的足球场了
在这里插入图片描述
把鼠标放到足球场里戳一戳,就可以放置足球,机器人默认对准足球并保持一段距离
在这里插入图片描述
上方的蓝色机器人是添加敌方,你可以通过鼠标拖动自由放置敌人的位置。
点击执行,你就可以看见脚本的测试结果,点击停止,他就停止
一切无误后,转为正式脚本。当然,你也可以不选择转为正式脚本。
到此为止,你已经掌握了SOM v3.3.3二次开发中LUA脚本的基本用法和环境搭建

  • 30
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值