Welcome to 机器人足球’s documentation!
基本介绍
这是机器人足球的说明文档,你将使用编程的方式控制场上的机器人。
球场环境的基本坐标示意如下:
编程使用
opt 库是一个获取球场环境信息和控制机器人操控的库。里面涵盖非常丰富的角度距离等测量函数,机器人控制函数等。 你可以使用 opt.TANK 获取到当前所需要操控的机器人, 使用 opt.BALL 获取球的信息。
注意,opt.TANK 应当在每一个 update 函数内调用,以获取当前属于此函数的机器人实例。
>>> def tank_update():
>>> opt.TANK # 获取到所要操控机器人的信息
>>> def tank1_update():
>>> opt.TANK # 获取到 1 号机器人 的信息
>>> def tank2_update():
>>> opt.TANK # 获取到 2 号机器人 的信息
以此类推,不同 function 中的 opt.TANK 将代表不同的机器人实例。 如果在函数 function 外使用 opt.TANK 将无法引用到正确的机器人实例。
比赛中规定,控制机器人唯一有效的方法是通过规定的机器人函数输出(前后,左右速度)来控制机器人的运动。举例:
>>> def tank_update():
>>> # 这里是你的 magic code
>>> vs, hs = 1, 0 # 这里是你此时决定要如何操控机器人的 前后,左右 速度
>>> return vs, hs
部分关卡只需要控制一个机器人时,函数名为 tank_update,部分关卡需要控制多个机器人,每个机器人有自己独立的函数名。举例:
>>> def tank1_update():
>>> return 1, 0
>>>
>>> def tank2_update():
>>> return 1, 1
>>>
>>> # 其他机器人
>>> def tank5_update():
>>> return 1, 1
机器人 前后,左右 速度的操控定义类似玩具汽车的操控手柄,分别有前后,左右两个操控杆。 最终速度结果是 vs 和 hs 的叠加结果,类似于遥控汽车手柄的操作方式。
vs:控制前后的力度。取值范围 [-1,+1], -1 为最大后退力度,1 为最大前进力度,0 保持不动
hs: 左转右转控制力度。取值范围 [-1,+1],-1 为最大左转角度,1 为最大右转角度,0 直行。注意!当 vs=0,没有前进动力的时候,hs 无论是什么值,无论转多厉害,机器人都在原地不动,都没有效果。
为了能够对机器人运动有更精确的控制,可以自定义 get_control_speed(angle) 设置不同角度下返回的vs,hs:
>>> import opt
>>>
>>> def get_control_speed(angle):
>>> # 请按照你的思考,提出你的速度控制方案
>>> vs, hs = 0,, 0
>>> if 0 <= angle < 90 or 270 <= angle <= 360:
>>> vs, hs = 1, 0
>>> else:
>>> vs, hs = -1, 0
>>> return vs, hs # vertical_speed, horizontal_speed
>>>
>>> def tank_update():
>>> target_x = opt.BALL.x
>>> target_y = opt.BALL.y
>>> tank_angle_to_football = opt.TANK.angle_to(target_x, target_y)
>>> vs, hs = get_control_speed(tank_angle_to_football)
>>> return vs, hs