netlogolejos-nxjlego-mindstorms

Grouping RGB colors for NXT brick


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.


Solution

  • 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.