detecting position on a 2D surface

Hi,
I am sorry to have to open another thread since I asked advice on another thing earlier on but this is another project.
Basically this is a robot moving on a surface, I need to detect its x and y coordinate to be able to send information about a new position.
I tought about a ultrasonic telemeter but there are condition which make it difficult to send back its position (for example if the robot turns its back to the telemeter, there is no more reading of it).
Second I thought about a gps module but they can be precise at less than 2m for the most expensive.
The surface on which the robot is meant to move is 5m X5 m max.
What do you suggest.
Alex

Could you fit an IR beacon LED on the robot and sense position with a video camera mounter above the arena, looking down? Or, you could fit IR beacons in the arena and detect them from a camera on the robot. Some of the QR codes used for Augmented Reality (AR) work might be useful, too.

But a more fundamental question is: do you want the robot to sense its own position in the arena, or do you want the arena to detect and measure the robots position and transmit it?

i would work with cameras. if you have the chance to mount a camera above the area, a single camera can give you around 1000 to 1000 pixel, means you have a resolution of 5cm.
take the ir-cam of the wiimote and you get a clean signal of up to 4 ir blobs. means you can track 4 bots at a time. if you can not get that high, i would use 2 cams at the side and use some math to get the position.

You could keep track of distance travelled in x / y direction.

Are there any kind of constraints?

Could you make a grid using tape?
Could you place a few flashing beacons at the corners?
Could you use x-bee and have a computer using webcam and have that calculate position, and send it to the arduino when needed?
Maybe use an accelerometer and a fewmany hours tuning the setup, and fail at d-day because you had a fresh newly-charged battery, that caused too many g-peaks.

[edit]Whoh!
The train I am on went through a tunnel, and when I came out of it, there'd been two answers already.[/edit]