दृष्टि#

परिचय#

VEX V5 का विज़न सेंसर कलर सिग्नेचर और कलर कोड का पता लगाता है और उन्हें ट्रैक करता है। इससे विज़न सेंसर अपने आसपास के वातावरण का विश्लेषण कर पाता है और प्राप्त दृश्य डेटा के आधार पर प्रतिक्रिया करता है।

इस पृष्ठ पर विज़न सेंसर, कलर सिग्नेचर और कलर कोड के उदाहरण के तौर पर vision_1, RED_BOXऔर BOX_CODE का उपयोग किया गया है। आवश्यकतानुसार इन्हें अपने कॉन्फ़िगर किए गए नामों से बदलें।

नीचे सभी विधियों की सूची दी गई है:

गेटर्स – विज़न सेंसर से डेटा प्राप्त करें।

  • take_snapshot – एक विशिष्ट रंग हस्ताक्षर या रंग कोड के लिए डेटा कैप्चर करता है।

  • largest_object – स्नैपशॉट से सबसे बड़ी वस्तु का चयन करें।

  • installed – क्या विज़न सेंसर V5 ब्रेन से जुड़ा है।

गुणधर्म – take_snapshot से प्राप्त ऑब्जेक्ट डेटा।

  • .exists – क्या वस्तु वर्तमान पहचान में बूलियन के रूप में मौजूद है।

  • .width – पिक्सेल में पता लगाई गई वस्तु की चौड़ाई।

  • .height – पिक्सेल में पता लगाई गई वस्तु की ऊँचाई।

  • .centerX – पिक्सेल में वस्तु के केंद्र की X स्थिति।

  • .centerY – पिक्सेल में वस्तु के केंद्र की Y स्थिति।

  • .angle – डिग्री में रंग कोड का अभिविन्यास।

  • .originX – पिक्सेल में वस्तु के शीर्ष-बाएँ कोने की X स्थिति।

  • .originY – पिक्सेल में वस्तु के शीर्ष-बाएँ कोने की Y स्थिति।

कंस्ट्रक्टर – विज़न सेंसर और उसके सिग्नेचर को मैन्युअल रूप से इनिशियलाइज़ और कॉन्फ़िगर करें।

  • Vision – एक विज़न सेंसर बनाता है.

  • Signature – एक रंग हस्ताक्षर बनाता है।

  • Code – एक रंग कोड बनाता है.

टिककर खेल#

take_snapshot#

take_snapshot विज़न सेंसर फ्रेम से डेटा को एक एकल हस्ताक्षर में फ़िल्टर करता है - सेंसर द्वारा पहचाने जा सकने वाली किसी चीज़ का सहेजा गया विवरण, जैसे कि कॉन्फ़िगर किया गया रंग हस्ताक्षर या रंग कोड - और एक टपल लौटाता है।

कलर सिग्नेचर और कलर कोड को इस विधि के साथ उपयोग करने से पहले विज़न यूटिलिटी में पहले कॉन्फ़िगर किया जाना चाहिए।

यह टपल, इंडेक्स 0 से शुरू होकर, चौड़ाई के अनुसार सबसे बड़े से सबसे छोटे क्रम में व्यवस्थित वस्तुओं को संग्रहीत करता है। प्रत्येक वस्तु के गुण को उसके इंडेक्स का उपयोग करके एक्सेस किया जा सकता है। यदि कोई मेल खाने वाली वस्तुएँ नहीं मिलती हैं, तो एक खाली टपल लौटाया जाता है।

Usage:
vision_1.take_snapshot(SIGNATURE)

पैरामीटर

विवरण

SIGNATURE

यह फ़िल्टर डेटासेट को केवल दिए गए सिग्नेचर के डेटा को शामिल करने के लिए फ़िल्टर करता है। उपलब्ध सिग्नेचर हैं:

  • कलर सिग्नेचर या कलर कोड - विज़न सेंसर का नाम, दो अंडरस्कोर, और फिर कलर सिग्नेचर या कलर कोड का नाम। उदाहरण के लिए: vision_1__RED_BOX.

# 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)

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)

installed#

installed एक बूलियन मान लौटाता है जो दर्शाता है कि विज़न सेंसर वर्तमान में V5 ब्रेन से जुड़ा है या नहीं।

  • True – विज़न सेंसर V5 ब्रेन से जुड़ा है।

  • False – विज़न सेंसर V5 ब्रेन से कनेक्टेड नहीं है।

Usage:
vision_1.installed()

पैरामीटर

विवरण

इस विधि के कोई मानदंड नहीं हैं।

# Display a message if the Vision Sensor is connected
if vision_1.installed():
    brain.screen.print("Vision Sensor Installed!")

गुण#

take_snapshot का उपयोग करने के बाद टपल में संग्रहीत प्रत्येक ऑब्जेक्ट के साथ आठ गुण शामिल होते हैं।

सभी प्रॉपर्टी मान विज़न सेंसर के दृश्य में पता लगाए गए ऑब्जेक्ट की स्थिति और आकार का वर्णन करते हैं, जिस क्षण take_snapshot का उपयोग किया गया था। ये मान सेंसर के 316 x 212 पिक्सेल रिज़ॉल्यूशन के आधार पर पिक्सेल में मापे जाते हैं।

.exists#

.exists एक बूलियन लौटाता है जो इंगित करता है कि टपल में इंडेक्स मौजूद है या नहीं।

  • True: सूचकांक मौजूद है.

  • False: सूचकांक मौजूद नहीं है.

# Check if at least one red object 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#

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

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

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

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

.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 70 < box_code[0].angle < 110:
            drivetrain.turn_for(RIGHT, 45, DEGREES)
            
        elif 250 < box_code[0].angle < 290:
            drivetrain.turn_for(LEFT, 45, DEGREES)
        
        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#

Vision एक विज़न सेंसर बनाता है।

उपयोग

Vision(smartport, brightness, sigs)

पैरामीटर

विवरण

smartport

स्मार्ट पोर्ट जिससे विज़न सेंसर जुड़ा हुआ है, उसे Ports.PORTx के रूप में लिखा जाता है, जहाँ x पोर्ट की संख्या है।

brightness

वैकल्पिक। विज़न सेंसर के लिए चमक का मान 1 से 100 तक।

sigs

वैकल्पिक। अल्पविराम (, ) द्वारा अलग किए गए एक या अधिक रंग हस्ताक्षर या रंग कोड वस्तुओं का नाम।

# Create the Color Signatures
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 the Color Code
BOX_CODE = Code(RED_BOX, BLUE_BOX)

"""
Create a Vision Sensor with the following values:
- Port 1
- brightness: 80
- RED_BOX and BOX_CODE signatures
"""
vision_1 = Vision(Ports.PORT1, 80, RED_BOX, BOX_CODE)

Signature#

Signature एक कलर सिग्नेचर बनाता है। एक विज़न सेंसर पर एक साथ अधिकतम सात अलग-अलग कलर सिग्नेचर स्टोर किए जा सकते हैं।

उपयोग:

Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

पैरामीटर

विवरण

index

Signature ऑब्जेक्ट का इंडेक्स, 1 से 7 तक। ध्यान दें: एक ही इंडेक्स नंबर के साथ दो Signature ऑब्जेक्ट बनाने से दूसरा बनाया गया ऑब्जेक्ट पहले वाले को ओवरराइड कर देगा।

uMin

विज़न यूटिलिटी में uMin तक का मान।

uMax

विजन यूटिलिटी में uMax का मान uMax।

uMean

विज़न यूटिलिटी में uMean का मान uMean।

vMin

विज़न यूटिलिटी में vMin तक का मान।

vMax

विज़न यूटिलिटी में vMax का मान vMax।

vMean

विज़न यूटिलिटी में vMean का मान vMean।

rgb

विज़न यूटिलिटी में मान rgb होता है।

type

विज़न यूटिलिटी में type तक का मान।

कलर सिग्नेचर बनाने के लिए आवश्यक मान प्राप्त करने हेतु, विज़न यूटिलिटी पर जाएँ। कलर सिग्नेचर कॉन्फ़िगर हो जाने के बाद, कॉन्फ़िगरेशन विंडो से पैरामीटर मानों को कॉपी करें।

"""
Create a Color Signature with the following values:
- index: 1
- uMin: 10121
- uMax: 10757
- uMean: 10439
- vMin: -1657
- vMax: -1223
- vMean: -1440
- rgb: 2.5
- type: 1
"""
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)

Code#

Code रंग कोड बनाता है। इसके उपयोग के लिए कम से कम दो पहले से परिभाषित रंग हस्ताक्षर आवश्यक हैं। एक विज़न सेंसर पर एक साथ अधिकतम आठ अलग-अलग रंग कोड संग्रहीत किए जा सकते हैं।

उपयोग:

Code(sig1, sig2, sig3, sig4, sig5)

पैरामीटर

विवरण

sig1

पहले से निर्मित रंग हस्ताक्षर।

sig2

पहले से निर्मित रंग हस्ताक्षर।

sig3

वैकल्पिक। पहले से निर्मित रंग हस्ताक्षर।

sig4

वैकल्पिक। पहले से निर्मित रंग हस्ताक्षर।

sig5

वैकल्पिक। पहले से निर्मित रंग हस्ताक्षर।

# Create the Color Signatures
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 with the Color Signatures
BOX_CODE = Code(RED_BOX, BLUE_BOX)