I am trying to write an extension in netlogo for Nxt brick . To connect the brick , I am using Lejos. I have a problem with color sensor. I want to write a simple method which returns sensor color as a number such as yellow : 1, red :2 etc. But sensor motor always returns different RGB colors on the same surface. For example I put it over a yellow paper , rgb colors are : [236 189 104] ,[247 202 108].. if it was returning unique RGB numbers for same surface colors, I would classify them according to RGB colors range and give a unique number for each color. Do you have any idea how i can do it ? Also , it won't run on different surfaces. only doing this for my paper colors( yellow, blue, green) will be enough for me. Thanks.
If I understood correctly what you mean, the method java.awt.Color.RGBtoHSB might help you. Java code like this:
float[] hsb = Color.RGBtoHSB(red, green, blue, null);
float hue = hsb[0];
(where red
, green
and blue
are variables containing the sensor result)
...will give you the "hue" of your color as a float
between 0 and 1, which should be sufficient to see if it's a shade of yellow, blue, green, or something else, if you define appropriate ranges. That should be very approximatively something like:
Yellow: 0.1 < hue < 0.2
Blue: 0.5 < hue < 0.7
Green: 0.25 < hue < 0.45
...but don't take my word for it! You should experiment to see in what range your sensor stays when over yellow paper, etc.