Soccer Server 足球服务器(中):模型
Movement Models 运动模型
在每个模拟step中,每个对象的运动按以下方式计算:
$$ (u_x^{t+1},u_y^{t+1}) &= (v_x^t,v_y^t)+(a_x^t,a_y^t) : accelerate \ (p_x^{t+1},p_y^{t+1}) &= (p_x^t,p_y^t)+(u_x^{t+1},u_y^{t+1}) : move \ (v_x^{t+1},v_y^{t+1}) &= decay \times (u_x^{t+1},u_y^{t+1}) : decay\ speed \ (a_x^{t+1},a_y^{t+1}) &= (0,0) : reset\ acceleration
$$
其中$(p_x^t,p_y^t)$, 和 $(v_x^t,v_y^t)$ 分别是时间步长 t 中物体的位置和速度。衰减是由 ball_decay
或 player_decay
指定的衰减参数。$(a_x^{t},a_y^{t})$是对象的加速度,它是从冲刺(在对象是球员的情况下)或踢(在球的情况下)命令中的 Power 参数以下列方式派生的:
$$ (a_x^{t},a_y^{t}) = Power \times power_rate \times (\cos(\theta^t),\sin(\theta^t))
$$
$\theta^t$是timestep $t $中对象的方向,power_rate
是dash_power_rate
或根据Section Kick Model 中所述的 kick_power_rate
计算得出。对于球员来说,这只是球员所面对的方向。对于足球而言,它的方向以下列方式给出:
$$ \theta^t{ball} = \theta^t{kicker} + Direction
$$ Direction 是 kick 命令的第二个参数。
Movement Noise Model 运动噪声模型
为了反映现实世界中物体的意外运动,rcssserver 为物体的运动和命令的参数添加了噪声。
关于运动,噪声被添加到 Eqn.:ref:eq:u-t 中,如下所示:
$$ (ux^{t+1},u_y^{t+1}) = (v_x^{t}, v_y^{t}) + (a_x^{t}, a_y^{t}) + (\tilde{r}{\mathrm rmax},\tilde{r}_{\mathrm rmax})
$$ 在哪里$\tilde{r}_{\mathrm rmax}$是一个随机数,其分布在$[-\mathrm rmax,\mathrm rmax]$范围内是均匀的。 $\mathrm rmax$是一个参数,它取决于对象的速度量,如下所示:
$$ {\mathrm rmax} = {\mathrm rand} \cdot |(v_x^{t}, v_y^{t})|
$$
其中 rand 是由 server::player_rand
或 server::ball_rand
指定的参数。
噪声也被添加到命令的 Power 和 Moment 参数中,如下所示:
$$ argument=(1+\tilde{r}_{\mathrm rand})\cdot argument
$$
Collision Model 碰撞模型
如果在模拟周期结束时,两个对象重叠,则将对象向后移动,直到它们不重叠。然后速度乘以-0.1。请注意,只要球和球员在循环结束时不重叠,球就有可能穿过球员。