विज़न सेंसर#
परिचय#
विज़न सेंसर एक कैमरा-आधारित सेंसर है जो रंग संकेतों और रंग कोडों का पता लगा सकता है और उन्हें ट्रैक कर सकता है। यह रोबोट को अपने परिवेश का विश्लेषण करने और दृश्य इनपुट पर प्रतिक्रिया देने में सक्षम बनाता है।
नीचे दिए गए उदाहरणों के लिए, कॉन्फ़िगर किए गए विज़न सेंसर का नाम vision_1होगा, और कॉन्फ़िगर किए गए कलर सिग्नेचर ऑब्जेक्ट, जैसे कि RED_BOX, का उपयोग इस एपीआई दस्तावेज़ीकरण में बाद के सभी उदाहरणों में Vision क्लास विधियों का संदर्भ देते समय किया जाएगा।
नीचे सभी विधियों की सूची दी गई है:
गेटर्स — विज़न सेंसर से डेटा प्राप्त करें।
take_snapshot— एक विशिष्ट हस्ताक्षर के लिए डेटा कैप्चर करता है।installed— क्या विज़न सेंसर आईक्यू (दूसरी पीढ़ी) ब्रेन से जुड़ा है।
गुणधर्म — take_snapshot से प्राप्त ऑब्जेक्ट डेटा।
largest_object— विज़न सेंसर स्नैपशॉट से सबसे बड़ी वस्तु का तुरंत चयन करें।.exists— क्या वस्तु वर्तमान पहचान में मौजूद है।.width— पता लगाए गए ऑब्जेक्ट की चौड़ाई।.height— पता लगाई गई वस्तु की ऊँचाई।.centerX— वस्तु के केंद्र की X स्थिति।.centerY— वस्तु के केंद्र की Y स्थिति।.angle— रंग कोड का अभिविन्यास..originX— वस्तु के शीर्ष-बाएँ कोने की X स्थिति।.originY— वस्तु के शीर्ष-बाएँ कोने की Y स्थिति।
कंस्ट्रक्टर — सेंसरों को मैन्युअल रूप से आरंभ और कॉन्फ़िगर करें।
टिककर खेल#
take_snapshot#
take_snapshot विज़न सेंसर फ्रेम से डेटा को एक एकल हस्ताक्षर में फ़िल्टर करता है - सेंसर द्वारा पहचाने जा सकने वाली किसी चीज़ का सहेजा गया विवरण, जैसे कि कॉन्फ़िगर किया गया रंग हस्ताक्षर या रंग कोड - और एक टपल लौटाता है।
कलर सिग्नेचर और कलर कोड को इस विधि के साथ उपयोग करने से पहले विज़न यूटिलिटी में पहले कॉन्फ़िगर किया जाना चाहिए।
यह टपल, इंडेक्स 0 से शुरू होकर, चौड़ाई के अनुसार सबसे बड़े से सबसे छोटे क्रम में व्यवस्थित वस्तुओं को संग्रहीत करता है। प्रत्येक वस्तु के गुण को उसके इंडेक्स का उपयोग करके एक्सेस किया जा सकता है। यदि कोई मेल खाने वाली वस्तुएँ नहीं मिलती हैं, तो एक खाली टपल लौटाया जाता है।
Usage:
vision_1.take_snapshot(SIGNATURE)
पैरामीटर |
विवरण |
|---|---|
|
यह फ़िल्टर डेटासेट को केवल दिए गए सिग्नेचर के डेटा को शामिल करने के लिए फ़िल्टर करता है। उपलब्ध सिग्नेचर हैं:
|
# Move forward if a red object is detected
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
रंग हस्ताक्षर#
कलर सिग्नेचर एक विशिष्ट रंग होता है जिसे विज़न सेंसर पहचान सकता है। ये सिग्नेचर विज़न सेंसर को वस्तुओं को उनके रंग के आधार पर पहचानने और ट्रैक करने में सक्षम बनाते हैं। एक बार कलर सिग्नेचर कॉन्फ़िगर हो जाने पर, सेंसर अपने दृश्य क्षेत्र में उस विशिष्ट रंग वाली वस्तुओं की पहचान कर सकता है। कलर सिग्नेचर का उपयोग take_snapshot के साथ वास्तविक समय में रंगीन वस्तुओं को संसाधित करने और पहचानने के लिए किया जाता है।
किसी प्रोजेक्ट में कॉन्फ़िगर किए गए कलर सिग्नेचर का उपयोग करने के लिए, उसका नाम विज़न सेंसर का नाम, दो अंडरस्कोर और फिर कलर सिग्नेचर का नाम होना चाहिए। उदाहरण के लिए: vision_1__RED_BOX।
# Display if any objects match the RED_BOX signature
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Signature
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
brain.screen.print("Color signature detected!")
wait(100, MSEC)
रंग कोड#
कलर कोड एक संरचित पैटर्न होता है जो विशिष्ट क्रम में व्यवस्थित रंगीन चिह्नों से बना होता है। ये कोड विज़न सेंसर को रंगों के पूर्वनिर्धारित पैटर्न को पहचानने में सक्षम बनाते हैं। कलर कोड जटिल वस्तुओं की पहचान करने या स्वचालित नेविगेशन के लिए विशिष्ट मार्कर बनाने में उपयोगी होते हैं।
किसी प्रोजेक्ट में कॉन्फ़िगर किए गए कलर कोड का उपयोग करने के लिए, उसका नाम सेंसर का नाम, दो अंडरस्कोर और फिर कलर कोड का नाम होना चाहिए। उदाहरण के लिए: vision_1__BOX_CODE।
# Display if any objects match the BOX_CODE code
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)
installed#
installed एक बूलियन लौटाता है जो इंगित करता है कि विज़न सेंसर वर्तमान में IQ (दूसरी पीढ़ी) ब्रेन से जुड़ा है या नहीं।
True— विज़न सेंसर आईक्यू (दूसरी पीढ़ी) ब्रेन से जुड़ा है।False— विज़न सेंसर आईक्यू (दूसरी पीढ़ी) ब्रेन से कनेक्टेड नहीं है।
Usage:
vision_1.installed()
पैरामीटर |
विवरण |
|---|---|
इस विधि के कोई मानदंड नहीं हैं। |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Installed!")
गुण#
largest_object#
largest_object नवीनतम उपयोग से लौटाए गए टपल में डेटा प्राप्त करने के लिए सबसे बड़ी पता लगाई गई वस्तु को पुनः प्राप्त करता है take_snapshot।
इस विधि का उपयोग करके बिना इंडेक्स निर्दिष्ट किए टपल से हमेशा सबसे बड़ी वस्तु प्राप्त की जा सकती है।
Usage:
vision_1.largest_object()
# Turn slowly until the largest object is centered in
# front of the Vision Sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
Tuple Properties#
take_snapshot का उपयोग करने के बाद टपल में संग्रहीत प्रत्येक ऑब्जेक्ट के साथ आठ गुण शामिल होते हैं।
सभी प्रॉपर्टी मान विज़न सेंसर के दृश्य में पता लगाए गए ऑब्जेक्ट की स्थिति और आकार का वर्णन करते हैं, जिस क्षण take_snapshot का उपयोग किया गया था। ये मान सेंसर के 316 x 212 पिक्सेल रिज़ॉल्यूशन के आधार पर पिक्सेल में मापे जाते हैं।
मौजूद है#
.exists एक बूलियन लौटाता है जो इंगित करता है कि टपल में इंडेक्स मौजूद है या नहीं।
True— सूचकांक मौजूद है।False— इंडेक्स मौजूद नहीं है।
# Check if at least one red objects is detected
# You will receive an error if no objects are detected
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
red_objects = vision_1.take_snapshot(vision_1__RED_BOX)
if red_objects[0].exists:
brain.screen.print("At least 1")
else:
brain.screen.print("No red objects")
wait(0.5, SECONDS)
।चौड़ाई#
.width पिक्सेल में पता लगाए गए ऑब्जेक्ट की चौड़ाई लौटाता है, जो 1 और 316 के बीच एक पूर्णांक है।
# Move towards a blue object until its width is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].width < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
।ऊंचाई#
.height पिक्सेल में पता लगाए गए ऑब्जेक्ट की ऊंचाई लौटाता है, जो 1 और 212 के बीच एक पूर्णांक है।
# Move towards a blue object until its height is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].height < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.केंद्रएक्स#
.centerX पता लगाए गए ऑब्जेक्ट के केंद्र का x-निर्देशांक पिक्सेल में लौटाता है, जो 0 और 316 के बीच एक पूर्णांक है।
# Turn slowly until the largest blue object is centered
# in front of the Vision Sensor.
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
.केंद्रवाई#
.centerY पता लगाए गए ऑब्जेक्ट के केंद्र का y-निर्देशांक पिक्सेल में लौटाता है, जो 0 और 212 के बीच एक पूर्णांक है।
# Move towards a blue object until its
# center y-coordinate is more than 140 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].centerY < 140:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
।कोण#
.angle पता लगाए गए ऑब्जेक्ट का ओरिएंटेशन डिग्री में लौटाता है, जो 0 और 359 के बीच एक पूर्णांक है।
# Turn left or right depending on how a
# configured box code is rotated
while True:
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
if 50 < box_code[0].angle < 100:
drivetrain.turn(RIGHT)
elif 270 < box_code[0].angle < 330:
drivetrain.turn(LEFT)
else:
drivetrain.stop()
else:
drivetrain.stop()
wait(50, MSEC)
.originX#
.originX पता लगाए गए ऑब्जेक्ट के बाउंडिंग बॉक्स के ऊपरी-बाएँ कोने का x-निर्देशांक पिक्सेल में लौटाता है, जो 0 और 316 के बीच एक पूर्णांक है।
# Display if a red object is to the
# left or the right
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originX < 160:
brain.screen.print("To the left!")
else:
brain.screen.print("To the right!")
wait(50, MSEC)
.originY#
.originY पता लगाए गए ऑब्जेक्ट के बाउंडिंग बॉक्स के ऊपरी-बाएँ कोने का y-निर्देशांक पिक्सेल में लौटाता है, जो 0 और 212 के बीच एक पूर्णांक है।
# Display if a red object is close or far
# from the robot
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originY < 80:
brain.screen.print("Far")
else:
brain.screen.print("Close")
wait(50, MSEC)
कंस्ट्रक्टर्स#
कंस्ट्रक्टर का उपयोग मैन्युअल रूप से Vision, Signatureऔर Code ऑब्जेक्ट बनाने के लिए किया जाता है, जो VEXcode के बाहर सेंसर को कॉन्फ़िगर करने के लिए आवश्यक हैं।
Vision Sensor#
Vision एक विज़न सेंसर बनाता है।
उपयोग
Vision(port, brightness, sigs)
पैरामीटर |
विवरण |
|---|---|
|
विजन सेंसर किस स्मार्ट पोर्ट से जुड़ा है, 1 से 12 तक के अंकों में से। |
|
वैकल्पिक। विज़न सेंसर के लिए चमक का मान 1 से 100 तक। |
|
वैकल्पिक। एक या अधिक रंग हस्ताक्षर या रंग कोड वस्तुओं का नाम। |
उदाहरण
# Create a new Signature "RED_BOX" with the Signature class
RED_BOX = Signature(1, -3911, -3435, -3673,10879, 11421, 11150,2.5, 0)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the "RED_BOX" Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Signature#
Signature एक कलर सिग्नेचर बनाता है। एक विज़न सेंसर पर एक साथ अधिकतम सात अलग-अलग कलर सिग्नेचर स्टोर किए जा सकते हैं।
उपयोग:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
पैरामीटर |
विवरण |
|---|---|
|
|
|
विज़न यूटिलिटी में |
|
विजन यूटिलिटी में uMax का मान |
|
विज़न यूटिलिटी में uMean का मान |
|
विज़न यूटिलिटी में |
|
विज़न यूटिलिटी में vMax का मान |
|
विज़न यूटिलिटी में vMean का मान |
|
विज़न यूटिलिटी में मान |
|
विज़न यूटिलिटी में |
कलर सिग्नेचर बनाने के लिए आवश्यक मान प्राप्त करने हेतु, विज़न यूटिलिटी पर जाएँ। कलर सिग्नेचर कॉन्फ़िगर हो जाने के बाद, कॉन्फ़िगरेशन विंडो से पैरामीटर मानों को कॉपी करें।
उदाहरण
# Create a new Signature RED_BOX with the Signature class
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the RED_BOX Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Code#
Code रंग कोड बनाता है। इसके उपयोग के लिए कम से कम दो पहले से परिभाषित रंग हस्ताक्षर आवश्यक हैं। एक विज़न सेंसर पर एक साथ अधिकतम आठ अलग-अलग रंग कोड संग्रहीत किए जा सकते हैं।
उपयोग:
Code(sig1, sig2, sig3, sig4, sig5)
पैरामीटर |
विवरण |
|---|---|
|
पहले से निर्मित रंग हस्ताक्षर। |
|
पहले से निर्मित रंग हस्ताक्षर। |
|
वैकल्पिक. पहले से निर्मित रंग हस्ताक्षर। |
|
वैकल्पिक. पहले से निर्मित रंग हस्ताक्षर। |
|
वैकल्पिक. पहले से निर्मित रंग हस्ताक्षर। |
उदाहरण
# Create two new Signatures for a red and blue box
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Code(RED_BOX, BLUE_BOX)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the red_box and blue_box Signatures.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX, BLUE_BOX)
# Display a message if Color Code is detected
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = vision_1.take_snapshot(RED_BLUE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)