Summary:
Your requirement can easily be met.
Working with only one light source present light below the illumination levels that you can see at can be detected with an under $1 sensor.
Having other light present may require optical filtering to distinguish between the various type of light present.
Range capability of a given sensor will depend on absolute light level and on relative % illumination compared to total illumination from all sources.
Absolute light level depends on emitter light output (lumen) and radiation or cone angle of source - which together result in the level of brightness (= lux = lumen/meter^2) at a given distance away. Brightness can also be measured in candela (= candle power) which is the amount of light over a given area and distance from the source compared to what would be emitted by a "standard candle".
A typical modern 5mm LED operated at full power (typically 20 mA at 1.5 to 3.5 V depending on LED type) will typically produce around say 3 to 12 lumen (depends on wavelength etc). An LED with a say 15 degree cone angle and the above output will produce a brightness of around 30 candela or 33,000 millicandella.
If you double the cone angle for the same lumen output the candela reading drops by about 4 x as the light has to cover 4 x the area. (draw yourself a picture).
A single modern eg White LED operating at 20 mA and 3V with a15 degree one angle - as would be used in a typical high quality flashlight - and producing about 8 lumen will produce about about 30+ candela of brightness. At one metre that is approximately blinding - enough tp destroy your night vison and leave spots before your eyes. At 2 metres it's "rather bright" and at 4 metres still "extremely noticeable". If that was a red or green or blue or other modern LED the results would vary somewhat due to eye response but it would still be very bright.
SO a colour detector working with that sort of light and no other light present would need to have very very modest capability to detect it at 1 metre. In oherwise darkness light at 0.1% of that would be detectable with relative ease using easily available technology.
The sensor below is an example of what is chap and readily avaiable.
Sensors can be mde to respond to specific colors only or ranges of colors using filters. These may be as simple as gelatin or plastic or cellulose fultyers or be complex and expensive interference filters. So filter cost cam be from under 1 cent to $100+. Sensors are also avai;able which respond to only a range of frequencies. For example a colored LED (NOT a phosphor based LED) can often be used as a sensor for light of around it's emission frequency. Gets complex in detail.
Superb example of an under $1 sensor:
This Avago APDS-9003 (Hewlett Packard in another lifetime) typical "ambient light sensor costing under $1 can detect light levels of well under 0.01 lux .
Bright daylight at midday = 100,000 lux
A monitor screen on full brightness may be 300 lux.
Reading level with comfort and good color rendition = 50+ lux
Bright moonlight < 1 lux
Just perhaps see shapes on a dark room as you stumble about = 0.1 lux
So 0.01 to 0.001 lux is "very dark"
You should consider flipping the system around. There is no need for the robot itself to determine the location. It only needs to know what to do. This can be communicated to it from a fixed PC via a WiFi link. With such a link it doesn't matter whether the robot figures out the location or whether that is done in the fixed installation and then the result transmitted to the robot. If the robot ever looses the WiFi connection, it could simply stop. That keeps it from getting out of range and therefore not getting the information that it should turn around, meanwhile mowing down all the flower gardens in the neighborhood. I think it's also a good idea to keep the robot as simple as possible and put as much of the burden onto the fixed installation where it's easier to monitor, fix, and work with.
I haven't actually done this, but here is something I came up with while musing about your problem. Have a rotating IR emitter on the robot. This might rotate once a second or so. It shoots out a fairly narrow vertical slit of modulated IR. Then you put fixed IR sensors around the place, mostly the periphery. These indicate when they sense the beam from the robot, which will only be for a small fraction of the repetition interval. By comparing the timing of the signals from the various sensors and knowing their locations, you should be able to compute the robot's position. The time offset from any two sensors divided by the beacon period tells you the relative angles of those two sensors as seen from the robot. With enough sensors and a bunch of math (easily done on any modern PC in a tiny fraction of a second), you can solve for the absolute position of the robot. The PC then sends appropriate commands to the robot over a TCP connection via the WiFi link.
The robot doesn't actually need the position information. All the "thinking" gets done on the fixed PC. All the robot needs is a small embedded system with a WiFI module and TCP/IP stack. You can send basic commands to the robot, like relative direction, speed, etc.
The data from any two sensors puts the robot on a arc that also includes the two sensors. The exact arc depends on the angle offset of the two sensors. In theory all you need is three arcs, which means three sensors. I would use several more so that individual sensors can drop out temporarily for various reasons. That will overconstrain the problem, but with the right algorithm you can make use of all this data and find the most likely location of the robot.
As I said, I haven't tried this, but I think you should be able to get accuracy good enough to control a lawn mower. At least this scheme doesn't rely on anything particularly expensive, hard to get, or anything pushing what you can measure reasonably in your own back yard (no nanosecond timing, for example).
Best Answer
Light with wavelenght shorter than 300nm is scarce in the output of most types of lightbulbs and it is highly absorbed by typical window glass. On the other hand, it is relatively abundant in sunlight. Therefore a light sensor with a medium/far UV passing filter should do the job with a little bit of calibration. Open windows might confuse it.
References