NYP.Shank_95
India
Asked
— Edited
Resolved by bhouston!
I want to make my robot do a function in such a way that for example, when it detects a red colour object, the robot responses as "I see a red colour object" and it does the same thing for blue or green object.
Use the tracking script in the camera control and the variable $CameraObjectColor to return the colour detected...
this is a portion of script I am using to track a red tag to navigate in a room:
Search for color tag containing QR code to help find destination
set Color tracking ex:red
start scanning for red card
move to an open space ( adjust distance sensors to a larger detection area)
if not found move to next open space
on tracking result successful move toward it
set QR code tracking on
read code and move according to the code
$target=0
$CameraVerticalQuadrant= "Unknown" # reset variable for subsequent reading
RepeatUntil ($CameraVerticalQuadrant="Middle") # Variable switching state when red color is detected
Sleep(500)
EndRepeatUntil
$CameraVerticalQuadrant= "Unknown" # reset variable Say("found red tag")
Aerius, I dont want it to detect one colour. I want multiple colours. If it detects Red colour, i expect the robot to do action A. If it detects Blue, action B and if Yellow, Action C.
@NYP.Shank_95 ... See my post above... You use $CameraObjectColor to determine which colour the camera is tracking....
@NYP.Shank_95 Here's a script that does what you want. You have to calibrate your colors in the "Multi Color" tab in the Camera control.
You can put in whatever you want the robot to do after it detects the color. I have it just saying the color it sees.
Edit: It says the last color detect over and over again until it sees a different color. I'm working on that, if anyone has any suggestions, let me know
https://synthiam.com/Community/Questions/6489
please look at this forum ..there is a video and some code. Please let me know if you need any other help.
look in the cloud storage for a Script Example Project called "JD vision"
Quick link to files https://synthiam.com/Community/EZCloud/RobotApps.aspx
Richard, it has been there right from beginning. I was actually looking for something like what bhouston commented.
@NYP.Shank_95 You mean you wanted one of us to write the code for you?.... Ok, but it is hard to learn when you just copy someone else's work... I always try to do something myself first. I don't like asking for help (because I feel like I am admitting defeat) but sometimes If I get really stuck I ask here as there are a lot of smarter guys on here than me...
I've been working on this a little more and I have found that trying to use "Multi Color Tracking" it gets a lot of false positives due to other objects in the room. It's difficult to fine tune the colors. I do have it working using "Color Tracking" looking for red, green or blue.
You should make the script check for red, pause if no red found. then check for blue if none found check for green.
this could all be in the same script so it will look as if the robot is looking for all three and will give you the same results.
@ Luis, that's what I did in another script. In fact I used a basic script you posted a while ago and expanded it.
The multi color was designed for exactly what you're looking to do
Define each multi color. Then edit the "tracking start" script. Add an IF condition for each color that you are looking to detect. There is a variable that holds the current multi color detected. It was quoted earlier in this thread.
bhouston, Luis Vazquez & DJ Sures, I have made my own If-Else code using the idea from bhouston and Luis. The syntax was correct but the camera gave me flop results for eg. I show Blue object, it either says it doesn't detect or it says it detects red or green. I have changed the contrast and saturation. Still the same. What should I do?
This is my coding:
@NYP.Shank_95
Using Color Detection often gives unstable results depending of the light condition or object in the same nuance. Example in my environment if I want to detect red, the camera will see my skin, my cabinet and other objects. I am not telling it wont work, but you will need to select an object with a bright color and adjust "Min Object Size" and "Object Brightness"until you have stable result.
Personally I prefer using the Multi-Color tracking function. It gives you more set-up to play with.
as you can see, in multi color tracking mode the camera will detect strictly these colors.
you may also try this short script to experiment with it:
ControlCommand("Camera", CameraStart)
$CameraObjectColor = ("Unknown") # define variable
ControlCommand("Camera", CameraMultiColorTrackingEnable) # activate multi-color-tracking :loop $CameraObjectColor = ("Unknown") # clear variable at begining of the loop SayWait("let me look")
IF ($CameraObjectColor = "Unknown") # if no detection of color define SayWait(" No I do not see these color") ENDIF
IF ($CameraObjectColor != "Unknown") # when variable is different than "Unknown"
SayWait(" Yes, yes I see" + $CameraObjectColor) SayWait("the object is in" +$CameraVerticalQuadrant +"and" + $CameraHorizontalQuadrant) # tell localisation of color ENDIF
goto (loop)
Here is the STL file
Multi-ColorTest.EZB
Thank you bhouston