दृष्टि#

परिचय#

VEX AIR ड्रोन का विज़न सेंसर AprilTag ID का पता लगाता है और उसे ट्रैक करता है। इससे ड्रोन अपने आस-पास के वातावरण का विश्लेषण कर सकता है, वस्तुओं का पीछा कर सकता है और पता लगाए गए दृश्य डेटा के आधार पर प्रतिक्रिया कर सकता है। नीचे सभी उपलब्ध विधियों और गुणों की सूची दी गई है:

गेटर्स – यह पता लगाते हैं कि ड्रोन किसी वस्तु को पकड़े हुए है या नहीं।

  • get_data – एक विशिष्ट हस्ताक्षर के लिए पता लगाए गए ऑब्जेक्ट्स का एक टपल लौटाता है।

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

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

  • width – पता लगाए गए ऑब्जेक्ट की चौड़ाई।

  • height – पता लगाई गई वस्तु की ऊंचाई।

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

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

  • bearing – सामने वाले विज़न सेंसर के सापेक्ष वस्तु का कोण या ड्रोन को वस्तु का सामना करने के लिए आवश्यक डिग्री।

  • rotation – वस्तु का अभिविन्यास।

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

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

  • id – ऑब्जेक्ट का टैग आईडी.

  • type – ऑब्जेक्ट का प्रकार लौटाता है।

टिककर खेल#

get_data#

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

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

Usage:
drone.vision.get_data(camera, signature, count)

पैरामीटर

विवरण

camera

डेटा प्राप्त करने के लिए कैमरा: या तो DOWNWARD_CAMERA या FORWARD_CAMERA।

signature

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

  • ALL_TAGS - सभी AprilTag ID
  • TAG0 से TAG37 - 0 से 37 तक का एक AprilTag ID

count

यह वैकल्पिक है। यह 1 से 24 तक लौटाए जा सकने वाले ऑब्जेक्ट की अधिकतम संख्या निर्धारित करता है (डिफ़ॉल्ट: 8)।

# Climb upward when an AprilTag ID is detected
drone.take_off(climb_to=500)
while True:
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    if vision_data[0].exists:
        drone.climb_for(direction=UP, distance=200)

गुण#

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

.id और .type को छोड़कर सभी प्रॉपर्टी मान, get_data का उपयोग किए जाने के क्षण में पता लगाए गए ऑब्जेक्ट की स्थिति, आकार, अभिविन्यास या दिशा का वर्णन करते हैं। ये मान पिक्सेल या डिग्री में मापे जाते हैं। प्रत्येक विज़न सेंसर का रिज़ॉल्यूशन अलग-अलग होता है:

  • सामने की ओर: 640 x 480 पिक्सेल

  • नीचे की ओर मुख वाला: 640 x 400 पिक्सेल

.exists#

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

  • True – सूचकांक मौजूद है।

  • False – इंडेक्स मौजूद नहीं है।

# Climb upward when an AprilTag ID is detected
drone.take_off(climb_to=500)
while True:
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    if vision_data[0].exists:
        drone.climb_for(direction=UP, distance=200)

.width#

.width पता लगाए गए ऑब्जेक्ट की चौड़ाई को पिक्सेल में 1 से 640 तक के पूर्णांक के रूप में लौटाता है।

# Show if the AprilTag ID appears large or small
while True:
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    clear_console()
    if vision_data[0].exists:
        if vision_data[0].width > 100:
            print("Large")
        else:
            print("Small")
    wait(0.2, SECONDS)

.height#

.height पता लगाए गए ऑब्जेक्ट की ऊंचाई को पिक्सेल में 1 से 480 तक के पूर्णांक के रूप में लौटाता है।

# Show if the AprilTag ID appears large or small
while True:
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    clear_console()
    if vision_data[0].exists:
        if vision_data[0].height > 100:
            print("Large")
        else:
            print("Small")
    wait(0.2, SECONDS)

.centerX#

.centerX पता लगाए गए ऑब्जेक्ट के केंद्र का x-निर्देशांक पिक्सेल में 1 से 640 तक के पूर्णांक के रूप में लौटाता है।

# Show if an AprilTag ID is to the left or the right of the camera
while True:
    clear_console()
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    if vision_data[0].exists:
        if vision_data[0].centerX < 320:
            print("To the left!")
        else:
            print("To the right!")
    wait(0.2, SECONDS)

.centerY#

.centerY पता लगाए गए ऑब्जेक्ट के केंद्र का y-निर्देशांक पिक्सेल में 1 से 480 तक के पूर्णांक के रूप में लौटाता है।

# Take off and align drone with AprilTag ID on wall
# Change drone.take_off parameter to see different results
drone.take_off(climb_to=800)
vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
if vision_data[0].exists:
    if vision_data[0].centerY < 240:
        print("Below the target!")
    else:
        print("Above the target!")
else:
    print("No target found!")

.bearing#

.bearing ड्रोन के सापेक्ष किसी वस्तु की स्थिति दर्शाने वाला कोण लौटाता है। इसका व्यवहार उपयोग किए जा रहे विज़न सेंसर पर निर्भर करता है।

0° का मान यह दर्शाता है कि वस्तु और सेंसर का केंद्र एक सीध में है। धनात्मक मान का अर्थ है कि वस्तु दाईं ओर है, जबकि ऋणात्मक मान का अर्थ है कि वस्तु बाईं ओर है।

सेंसर

रिटर्न

नीचे

ड्रोन के अग्रभाग को वस्तु के केंद्र के साथ संरेखित करने के लिए -180º से 180º तक कितने डिग्री घूमना चाहिए।

आगे

ऑब्जेक्ट विज़न सेंसर के केंद्र से -180º से 180º तक बाईं या दाईं ओर विस्थापित होता है।

# Align the front of the drone to an AprilTag ID
drone.set_turn_velocity(15)
drone.take_off(climb_to=500)
while True:
    vision_data = drone.vision.get_data(DOWNWARD_CAMERA, ALL_TAGS)
    if vision_data[0].exists:
        if -20 < vision_data[0].bearing < 20:
            # Hover once sensor is centered on AprilTag ID
            drone.hover()
            controller.sound.play(SUCCESS)
            while controller.sound.is_active():
                wait(50, MSEC)
        elif vision_data[0].bearing < -21:
            drone.turn(LEFT)
        else:
            drone.turn(RIGHT)
    wait(5, MSEC)

.rotation#

.rotation पता लगाए गए AprilTag ID के ओरिएंटेशन को 1 से 359 डिग्री तक पूर्णांक के रूप में लौटाता है।

# Turn left or right based on the rotation of an AprilTag ID
drone.take_off(climb_to=1000)
while True:
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    if vision_data[0].exists:
        if 240 < vision_data[0].rotation < 300:
            drone.turn_for(LEFT, 90)
        elif 60 < vision_data[0].rotation < 120:
            drone.turn_for(RIGHT, 90)
        else:
            drone.hover()
    wait(0.2, SECONDS)

.originX#

.originX पता लगाए गए ऑब्जेक्ट के बाउंडिंग बॉक्स के ऊपरी-बाएँ कोने का x-निर्देशांक पिक्सेल में 1 से 640 तक के पूर्णांक के रूप में लौटाता है।

# Draw lines to the AprilTag ID origin from all corners
while True:
    controller.screen.clear_screen()
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    if vision_data[0].exists:
        controller.screen.draw_line(0, 0, vision_data[0].originX, vision_data[0].originY)
        controller.screen.draw_line(0, 480, vision_data[0].originX, vision_data[0].originY)
        controller.screen.draw_line(640, 0, vision_data[0].originX, vision_data[0].originY)
        controller.screen.draw_line(640, 480, vision_data[0].originX, vision_data[0].originY)
    wait(0.2, SECONDS)

.originY#

.originY पता लगाए गए ऑब्जेक्ट के बाउंडिंग बॉक्स के ऊपरी-बाएँ कोने का y-निर्देशांक पिक्सेल में 1 से 480 तक के पूर्णांक के रूप में लौटाता है।

# Draw lines to the AprilTag ID origin from all corners
while True:
    controller.screen.clear_screen()
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    if vision_data[0].exists:
        controller.screen.draw_line(0, 0, vision_data[0].originX, vision_data[0].originY)
        controller.screen.draw_line(0, 480, vision_data[0].originX, vision_data[0].originY)
        controller.screen.draw_line(640, 0, vision_data[0].originX, vision_data[0].originY)
        controller.screen.draw_line(640, 480, vision_data[0].originX, vision_data[0].originY)
    wait(0.2, SECONDS)

.id#

.id पता लगाए गए AprilTag ID की पहचान संख्या को 0 से 37 तक के पूर्णांक के रूप में लौटाता है।

# Display the detected AprilTag ID
while True:
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    clear_console()
    if vision_data[0].exists:
        print(vision_data[0].id)
    wait(0.2, SECONDS)

.type#

.type यह बताता है कि किस प्रकार की वस्तु का पता चला है। यह निम्नलिखित लौटाएगा:

ऑब्जेक्ट प्रकार

संख्यात्मक मान

शामिल वस्तुएँ

drone.vision.TAG_OBJECT

8

अप्रैलटैग आईडी

drone.vision.COLOR_OBJECT

1

कलर सिग्नेचर - जल्द ही उपलब्ध होगा!

drone.vision.CODE_OBJECT

2

कलर कोड - जल्द ही उपलब्ध होगा!

# Display what AprilTag ID is detected
while True:
    controller.screen.clear_screen()
    controller.screen.set_cursor(1, 1)
    vision_data = drone.vision.get_data(FORWARD_CAMERA, ALL_TAGS)
    if vision_data[0].exists:
        if vision_data[0].type == drone.vision.TAG_OBJECT:
            controller.screen.print("AprilTag ID: ")
            controller.screen.print(vision_data[0].id)

    wait(0.1, SECONDS)