As SoccerBots is part of TeamBots(tm), it is freely distributable for noncommercial use Please see the copyright for detailed copyright information.
SoccerBots simulates the dynamics and dimensions of a regulation RoboCup small size robot league game. Two teams of five robots compete on a ping-pong table by pushing and kicking an orange golf ball into the opponent's goal.
Contents
SoccerBots runs in the TBSim application using a configuration file that tailors it for soccer games. Other types of robots and tasks can also be simulated in TBSim, including the Nomadic Technologies' Nomad 150 robots Georgia Tech is using to compete in the AAAI-97 mobile robot contest. The same control systems that run in simulation can also operate real robot hardware using the TBHard application. At present, this capability is limited to Nomad 150s.
While no significant bugs are known to exist, this is research software and it is subject to change.
Finally, SoccerBots was developed separately and is distinct from Itsuki Noda's SoccerServer I'd like to thank Itsuki for providing an excellent example of how to build a great soccer simulation. Thanks are also due to Peter Stone and Hiroaki Kitano for their advice in this endeavor.
The default demonstration runs the SchemaDemo team against the BasicTeam. Neither team is really very good (I hope to develop better teams soon), but they illustrate the capabilities of the simulator fairly well.
Field dimensions
The field is 152.5cm by 274cm. Each goal is 50cm wide.
The defense zone, centered on the goal, is 100cm wide by 22.5cm deep.
In the coordinate system used in the
simulation, the center of the field is (0,0) with +x to the right
(east) and +y up (north). The team that starts on the left side
is called the "west" team and the team on the right is called
the "east" team.
Robots
Robots are circular and 12cm in diameter. In RoboCup 15cm is the
maximum size. The simulated robots can move at 0.3 meters/sec and
turn at 360 degrees/sec. (I would like to base these numbers
on real soccer robot specifications, please send them to me if
you know them).
Team
A team consists of no more than 5 robots.
Ball
The simulated ball represents an orange golf ball.
It is 40mm in diameter and it can move at a maximum
of 0.5 meters/sec when kicked. It declerates at 0.1 meters/sec/sec.
Ball collisions with walls and robots are perfectly elastic.
(If anyone has real measured numbers for these parameters,
please send them to me!).
Coloring
Coloring of the field doesn't really matter in the simulation,
but the image drawn on your screen matches the RoboCup regulations.
Length of the game
For now, once the game starts, it runs forever. This will soon be changed
to conform to the rules of RoboCup: two 10 minute halves.
Wall
A wall is placed around all the field, except the goals. Ball collisions
with walls are perfectly elastic. Robots may "slide" along walls if
they aren't headed directly into them.
Defense zone
A defense zone surrounds the goal on each side. It is 22.5cm from
the goal line and 100cm wide. Only one defense robot can enter
this area. Note: this is not enforced by SoccerBots, but it will
be eventually.
Robot marking
Robots are marked with a two-color checkerboard pattern. In RoboCup
rules they are marked with two colored ping-pong balls.
Communication
There is presently no facility for robot to robot communication, but
this may be added if people are interested in it.
Goal keepers
At present, the goal keeper has no means for grasping the ball. The
system may be improved later to allow for this.
Kick-off/Restart/Stop
Kick-off, restart and stop of the game are managed automatically.
The west team gets to kick-off fist, with subsequent kick-offs
made by the scored-against team.
Robot positions at kick-off
The robots are automatically positioned as shown below at kick-off.
The numbers indicate values returned by the getPlayerNumber method.
kick-off receive | 2 | 2 | 1 0 1 3 o 0 | 3 4 | 4Specific positions are not specified in the RoboCup rules, except that only the kick-off team can be within 15cm of the ball.
Fouls/Charging
Currently no fouls are enforced by SoccerBots. There is
however a "shot clock." At the
begining of a point, the clock is set to countdown from
60 seconds. If no score occurs in that time, the
ball is returned to the center of the field.
The ball is also returned ot the center if it gets stuck for
a period of time.
Those types of fouls that can be evaluated objectively by the running program will eventually be added. RoboCup enforces several fouls and charging violations.
The simulation kernel
Each object in the simulation includes two important components:
1) a drawing method and 2) a dynamics simulation method.
The simulation kernel, or core, runs in a loop calling the two methods
for all the objects in the simulation at each step.
It also keeps track of time, and passes elapsed time to the
dynamics methods, so they knows how far to move their associated
simulated objects.
The simulation can run in real-time or faster or
slower than real-time according to how the time variable
is set in the description file.
Robot control systems
In addition to the drawing and dynamics methods, robots
have a control system object that considers sensor inputs and makes
actuator outputs. The control system is what you need to
modify if you want experiment with different soccer strategies.
The control system has no way of knowing whether it is running
in a simulation or on real robot hardware. This is convenient
because you don't need to modify your control software between
simulation and real runs. Unfortunately, the capability
for running small soccer robot control systems on real hardware
is not available yet, but you can develop and run systems for Nomad 150
robots if you like (they don't quite fit on a ping-pong table!).
Capabilities of a SoccerBots robot
Sensors
Developing your own soccer team
Copy an existing team!
The easiest way to accomplish #1 is to make a copy
of one of the existing teams in the SoccerBots/teams directory.
Some of these teams were developed using
Clay, a
behavior-based configuration system. You are welcome to use
Clay for your own purposes, but this is not necessary.
If you don't want to use Clay, start with one of the example teams
that don't import the EDU.gatech.cc.is.clay package.
If you look at one of the teams, you will notice two methods are implemented: Configure() and TakeStep(). Configure is called once at set-up time to allow you to do whatever initialization you need. TakeStep() is called repeatedly by the simulation kernel to allow you to read sensors and select actions. Senors are read by calls to the abstract_robot.get* methods, actuator commands are sent by calls to abstract_robot.set* methods.
Sensor example:
abstract_robot.getBall(curr_time)reads the ball sensor and returns a 2-dimensional vector towards it. The curr_time parameter is a timestamp that helps prevent redundant sensor accesses (this is more important for use on real robots than in simulation).
Actuator example:
abstract_robot.setSteerHeading(curr_time,0)will point the robot east. Look at the example teams for more clues on the other sensor and actuator methods.
Compiling
As the name SoccerBots implies, the software is written in Java. Standard
Java coding practices and conventions apply. We have compiled and run
all the software on Linux, Solaris and Irix.
To make compiling with dependencies a little easier, the distribution includes a gmake-based Makefile with the following functionality: