I have tried using Decawave's DW1000 chips. You can now get these on little boards:

These can measure the distance between each other by measuring the time of flight of an Ultra-Wideband message. The precision is about 10cm, and the trueness depends on a lot of factors.
You have a few as base stations, and one or more on each robot. By triangulation, you can work out the location of the robot.
I can report that the chips are insanely complex to program, and the example code they provide is a huge hairball that looks like it was written by an intern. However, they do work, and the other benefit is that you can put a data payload in the messages, so they solve your communications problems too.