In trying to estimate the changes to the model caused by the actions of the client, we want to avoid depending on the actions the client sent to the simulator. There is a number of reasons for this. First, we can't be sure the simulator ever received the commands. They might have gotten lost or delayed in the network. Second, the simulator is nondeterministic. It adds some amount of noise to the client's actions so that the client's commands don't have exact effects. Finally, dashes continue to affect the client a number of steps after the command was given. In order to account for this we would have to replicate the physics model that the simulator is using. But this unnecessarily ties the client's performance to a specific simulator model. Instead, we want the client to observe the effects of its own actions, and update its memory model based on the objects that are visible.
There are three possibilities of how the model is updated, depending on how many stationary objects are currently visible. If two or more objects are in view, then there's enough information to triangulate the client's current global position and angle and use that to determine the relative position of all stationary objects. Because this can be a costly calculation, this is only done if the overall confidence in the model is below some threshold. The calculations used to perform the triangulation is given in appendix A.1.
The other end of the spectrum is when there are no visible stationary objects. This situation is rare in the robotic soccer domain and only occurs when the client is very close to the field bounds. In this case, we have absolutely no information from the simulator as to the effects of our actions. Instead, we resort to a crude estimation of the client's movement from the actions it performed. We assume that turns were exact and ignore dashes, since their effects are difficult to estimate. This doesn't result in a very accurate estimation, but this case is rare, and it does give a good enough prediction for the client to recover.
The above two cases are the extremes, and the majority of the time only one stationary object will be visible. In this case, we don't have enough information to get an exact measurement from triangulation, but we do have enough information that we don't have to make uninformed guesses. We know how one object's position changed because of the client's actions. From this, we need to estimate the movement of the client and then apply this to the other objects that aren't visible.
Since we don't have enough information to determine the change exactly, we'll have to make some assumptions, which will allow us to make an accurate estimation. The first assumption is that the client will always turn before dashing. This assumption is a good one, since we can actually control this in the client's behavior. The second assumption is that all motion is in the direction the client is facing. It turns out that the simulator being used obeys this assumption. The result of these two assumptions is that the object's current facing is the same direction as its last movement. This now allows us to compute the rotation and translation of the client.
Figure: Estimating motion from the change in position of one object.
(a) is an example position and facing for the client at two time
steps, and the position of a marker to be used to calculate the
client's rotation and translation. (b) this same diagram is
labelled with the values used for the calculation.
From figure 1, we know the values , , , and . We want to calculate and dr, which corresponds to the client's rotation and translation, respectively. By our assumptions, we know that the line segment, e, is shared by two triangles: one whose opposite vertex is the client at t=0 and the other at t=1. These assumptions allow the following calculation.
The above calculation assumes that the object that we are using to estimate our movement has been visible for the previous two time steps. This assumption is not necessary. The same calculation can be carried out using the estimation for the position of the object in the previous time step. In this case there is a confidence in our estimation of the client's movement, which is just our confidence in the object's previous position.
Using this method of calculating the client's own rotation and translation, we can then update all other objects, including mobile objects, for the motion of the client. The calculations used to do this update is given in appendix A.2.