机器人 (player & enemy)
写在前面
player.lua
和enemy.lua
分别为我方机器人和敌方机器人的方法文件,这两个文件大部分相同,下面列举的主要函数主要以 player 为例。在 lua 方法中,参数
role
为所选角色(机器人车号或者匹配的名字,两者均可)。在 cpp 函数中,需要调用视觉模块
pVision
来获取信息,其中- 任一机器人用
pVision->allPlayer()
表示 - 我方机器人用
pVision->ourPlayer()
表示 - 敌方机器人用
pVision->theirPlayer()
表示
注意
对于机器人的定义是
const PlayerVisionT& ourPlayer(int num)
,所以实际使用中别忘了填入机器人编号参数,为了方便美观,下文中省略。例如:要获取我方编号 1 的机器人的位置,应该写:
pVision->ourPlayer(1).Pos()
因为这些不同机器人的方法大部分相同[1],以下统一使用
ourPlayer()
演示。- 任一机器人用
在文档中不会特意区分不同语言的语法,能看懂即可,如 cpp 中的
int
与 lua 中的interger
;需要注意时会特别标注。
属性相关
车号
- 返回机器人的车号 (int)
player.num(role)
存在性
- 返回机器人是否存在 (bool)
player.vaild(role)
pVision->ourPlayer().Valid()
红外是否触发
- 返回机器人的红外是否触发 (bool)
player.infrareOn(role)
红外触发的帧数
- 返回机器人的红外触发的帧数 (int)
player.infraredCount(role)
是否踢球
- 返回机器人是否踢球 (bool)
player.kickBall(role)
位置相关
位置
- 返回机器人的位置 (CGeoPoint)
player.pos(role)
pVision->ourPlayer().Pos()
位置 X 值
- 返回机器人的位置的 X 坐标 (double)
player.posX(role)
pVision->ourPlayer().X()
pVision->ourPlayer().Pos().x
位置 Y 值
- 返回机器人的位置的 Y 坐标 (double)
player.posY(role)
pVision->ourPlayer().Y()
pVision->ourPlayer().Pos().y
方向相关
角度
- 返回机器人角度信息(弧度制) (double)
player.dir(role)
pVision->ourPlayer().Dir()
旋转速度
- 返回机器人的旋转速度 (double)
player.rotVel(role)
pVision->ourPlayer().RotVel()
速度相关
速度
- 返回机器人的速度 (vector)
player.vel(role)
pVision->ourPlayer().Vel()
速度方向
- 返回机器人的速度方向 (double)
player.velDir(role)
pVision->ourPlayer().Vel().dir()
速度大小
- 返回机器人的速度大小 (double)
player.velMod(role)
pVision->ourPlayer().Vel().mod()
真实速度
- 返回机器人的真实速度 (double)
player.rawVel(role)
pVision->ourPlayer().RawVel()
真实速度大小
- 返回机器人的真实速度大小 (double)
player.rawVelMod(role)
pVision->ourPlayer().RawVel().mod()
简单解释一下这个“大部分相同”:
在
allPlayer()
、ourPlayer()
和theirPlayer()
都是类CVisionModule
中的成员函数。我们会发现他们的类型都是
PlayerVisionT
,如果再往前找会发现这个类继承自三个父类。这里拿
bool Valid()
举例,它其实是ObjectPoseT
下的一个成员函数,这意味着“结构上差不多的”这三个成员函数可使用的大部分成员函数都是相同的。所以根据文档中演示的返回我方球员位置的代码
pVision->ourPlayer().Pos()
,要获取对方某球员的位置,可以写成pVision->theirPlayer().Pos()
。↩︎提示
其实根据上述内容可以推测出一些其他内容。
比如机器人属性里面的Vel()
,有一个Vel().mod()
的函数;那么rawVel().mod()
也存在(它们俩都表示 “速度”,都有 “大小” 这一属性)。这点可以自己去查一下定义来确认。因此,可以根据代码编辑器的代码补全功能和对相似的变量含义的猜想,来快速调用或是写出一些你所想要的功能,减少翻看帮助文档、浏览定义的次数,编码更顺畅。
像 VSC 等代码编辑器可以通过
F12
来速览定义。