Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   C/C++ (http://www.chiefdelphi.com/forums/forumdisplay.php?f=183)
-   -   Finding green/pink flags (http://www.chiefdelphi.com/forums/showthread.php?t=71181)

ellisk 04-01-2009 16:28

Finding green/pink flags
 
Hi everyone,

I am trying to use the Axis Camera to locate green and pink flags. However, it fails when actually finding the colors. Here's the relevant portion of my code so far:

Code:

                int i = StartCameraTask();
                StartImageAcquisition();
               
               
                while (IsOperatorControl())
                {
                        double timestamp;
                        Image *img = frcCreateImage(IMAQ_IMAGE_HSL);
                        int getImage = GetImage(img,&timestamp);
                       
                        TrackingThreshold tdata = GetTrackingData(GREEN, PASSIVE_LIGHT);
                        ParticleAnalysisReport par;
                       
                        int findcolor = FindColor(IMAQ_HSL, &tdata.hue, &tdata.saturation,&tdata.luminance, &par);
                       
                }
               
                StopImageAcquisition();
                StopCameraTask();

I find the values of par, tdata, getImage, and findcolor using the debugger. It succeeds up to the call to FindColor. I am using the stock green flag. I've tried positioning it differently in front of the camera, but it still doesn't recognize it!

I've tried it with PINK as well with the pink flag, and I've tried changing PASSIVE_LIGHT to FLORESCENT (neither work).

Has anyone had any success with getting the camera to recognize the flags/know what I'm doing wrong?

Thanks,
Kevin

nickmagus 04-01-2009 21:22

Re: Finding green/pink flags
 
I have had the same problem. I also tried.
Code:

if (StartCameraTask(10, 0, k160x120, ROT_0) == -1){
        printf("Failed to spawn camera task: %s\n",GetVisionErrorText(GetLastVisionError()));
}

// Set up camera tracking parameters.
tdata = GetTrackingData(GREEN, PASSIVE_LIGHT);
tdata.hue.minValue = 67;
tdata.hue.maxValue = 114;
tdata.saturation.minValue = 161;
tdata.saturation.maxValue = 255;
tdata.luminance.minValue = 24;
tdata.luminance.maxValue = 101;

in the init with
Code:

ParticleAnalysisReport par;
if (FindColor(IMAQ_HSL, &tdata.hue, &tdata.saturation, &tdata.luminance, &par)
                && par.particleToImagePercent < MAX_PARTICLE_TO_IMAGE_PERCENT
                && par.particleToImagePercent > MIN_PARTICLE_TO_IMAGE_PERCENT) {
        int lightX = (int)(par.center_mass_x_normalized * 1000.0);
        int lightY = (int)(par.center_mass_y_normalized * 1000.0);
        printf("Light found: x: %i y: %i\n", lightX, lightY);
} else {
        if (err)
                printf("Failed to spawn camera task: %s\n", GetVisionErrorText(GetLastVisionError()));
        else
                printf("light not found\n");
}

in the main loop but that didn't work either

Kingofl337 04-01-2009 21:25

Re: Finding green/pink flags
 
Try this,
1. Log into the camera
2. Goto Advanced Settings and set White Balance to Hold
3. Goto Settings and turn down the brightness 20% of what it's set too
4. Goto Live video settings and take a screen shot (Alt + Print Screen)
5. Open MSPaint and Paste in the Picture, save as a JPG
6. Open Labview Vision Assistant, Open the file, and
7. Select Color, then Color Threshold, and then Color Model:HSL
8. Play with the Hue, Sat, Lum levels until most of the target is high lighted red
9. Set the new levels by updating tdata parameters, here is the list, these worked for me. You only need to set the values you changed in Vision Assistant.
//tdata.hue.minValue = 60;
//tdata.hue.maxValue = 80;
//tdata.saturation.minValue = 34;
//tdata.saturation.maxValue = 200;
//tdata.luminance.minValue = 128;
//tdata.luminance.maxValue = 240;


Edit: Also, it's a really good idea to start with the simple tracker demo 100% unmodified. Then you can tell if it's you or the camera values.

fordchrist675 05-01-2009 11:45

Re: Finding green/pink flags
 
My friends and I are trying to get the Axis Camera to find the green/pink flags, but we are having a problem getting the camera to recognize anything and it didn't say it failed to recognize the camera, so what could help make it work?

The camera is just not working all together, but it is connected and on so we are in a jam. any Ideas?

Kingofl337 05-01-2009 12:46

Re: Finding green/pink flags
 
Did you run the Camera Configuration Utility? Are you using the orange CAT-5 cable? Are you using the example? Does it work connected to your PC?

BradAMiller 05-01-2009 14:37

Re: Finding green/pink flags
 
There will be example code posted soon that will do the detection of the two color targets. The code will be able to differentiate between the red and blue alliances.

fordchrist675 05-01-2009 17:22

Re: Finding green/pink flags
 
Alright thanks very much for the help

fordchrist675 05-01-2009 17:42

Re: Finding green/pink flags
 
Actually it is still not working we used the CAT-5 and still are getting no feedback.

So the programmer and I are at a loss. also the utility isn't working so any ideas what to do?

DanDon 05-01-2009 19:22

Re: Finding green/pink flags
 
Hey all-

I'm running WindRiver, and I'm running the SimpleTracker example code. I've used the NI Vision Assistant to get color values for my green vision target, and put those into the WindRiver code.
Code:

        tdata = GetTrackingData(GREEN, FLUORESCENT);
        tdata.luminance.maxValue = 187;
        tdata.luminance.minValue = 103;
        tdata.hue.minValue = 71;
        tdata.hue.maxValue = 98;
        tdata.saturation.minValue = 56;
        tdata.saturation.maxValue = 111;

I'm getting terminal feedback from the CRIO (finally...but that's another story), but the camera is failing to find any blobs matching the numbers that were obtained using the Vision Assistant.

Help, please?

nickmagus 05-01-2009 19:59

Re: Finding green/pink flags
 
the simple tracker demo 100% unmodified did not find anything...

David Doerr 05-01-2009 20:05

Re: Finding green/pink flags
 
Quote:

Originally Posted by nickmagus (Post 792893)
the simple tracker demo 100% unmodified did not find anything...

There are bugs in the current versions of FindColor, GetLargestParticle and InArea. These have been fixed at the beta level and should be published shortly along with the pink-green demo that Brad mentioned above.

Dave D

nickmagus 06-01-2009 11:05

Re: Finding green/pink flags
 
Oh ok that's good to know. Thanks. Any ideas as to when the code with those functions fixed will be posted. I looked through the functions but couldn't find the error (though I didn't spend that much time since you said its already fixed). The sooner its up the better. On that note I just wanna thank all the people who wrote and are writing this library (it makes all our lives much easier).

Bongle 10-01-2009 12:58

Re: Finding green/pink flags
 
Quote:

Originally Posted by DaveD (Post 792907)
There are bugs in the current versions of FindColor, GetLargestParticle and InArea. These have been fixed at the beta level and should be published shortly along with the pink-green demo that Brad mentioned above.

Dave D

(not directly to dave D)
If you're a team that simply can't wait, you can look at GetLargestParticle and FindColor in TrackApi.cpp. Notice that GetLargestParticle never actually returns the largest particle index to the 2nd parameter. The code to return isn't there, and in the 2nd line of the function it actually blows away the pointer value so it becomes impossible to return the largest particle index. Since it's probably not a good idea to go fiddling with the supplied code unless you know what you're doing, I'll leave it as an exercise to the reader to figure out what to do.

Further, in the full-size version of FindColor, its check for success is incorrect. Rather than "if(largestParticleIndex == 0), it seems that it should be if(largestParticleIndex >= 0) in case the largest particle is not the first one.

virtuald 10-01-2009 18:23

Re: Finding green/pink flags
 
Quote:

Originally Posted by DaveD (Post 792907)
There are bugs in the current versions of FindColor, GetLargestParticle and InArea. These have been fixed at the beta level and should be published shortly along with the pink-green demo that Brad mentioned above.

Dave D

Shortly, eh? :)

Uberbots 10-01-2009 18:42

Re: Finding green/pink flags
 
I helped team 1124 make the red/blue target tracker with great success (double thumbs up).

in labview, you basically copy the image from the camera, do a color threshold for each picture, do a particle report for each picture, and decide which one of those reports is the "top" color and which is the "bottom" color.

once you have that data, you run a loop as follows:
for each "top color:
check if the area of the color is big enough. if so:
for each "bottom" color:
check if the bottom color is directly below (with some tolerance) the "top" color.
add the "top" target to the output targets array

that basic algorithm allowed us to differentiate between red/green targets and green/red targets. there was a slight bit of extra post-processing to deal with multiple visible targets (basically you pick the uppermost one or the largest one etc).

what you do with the final target(s) is up to you... we cached the previous target position and velocity to do second-degree motion prediction for the target in case we lose it. (amongst other things)


All times are GMT -5. The time now is 03:17.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi