ദർശനം#

ആമുഖം#

VEX AIR ഡ്രോണിന്റെ വിഷൻ സെൻസർ ഏപ്രിൽ ടാഗ് ഐഡികൾ കണ്ടെത്തി ട്രാക്ക് ചെയ്യുന്നു. ഇത് ഡ്രോണിന് അതിന്റെ ചുറ്റുപാടുകൾ വിശകലനം ചെയ്യാനും വസ്തുക്കളെ പിന്തുടരാനും കണ്ടെത്തിയ ദൃശ്യ ഡാറ്റയെ അടിസ്ഥാനമാക്കി പ്രതികരിക്കാനും അനുവദിക്കുന്നു. ലഭ്യമായ എല്ലാ രീതികളുടെയും ഗുണങ്ങളുടെയും ഒരു ലിസ്റ്റ് ചുവടെയുണ്ട്:

ഗെറ്ററുകൾ - ഡ്രോൺ ഒരു വസ്തു കൈവശം വച്ചിട്ടുണ്ടോ എന്ന് കണ്ടെത്തുക.

  • get_data – ഒരു പ്രത്യേക ഒപ്പിനായി കണ്ടെത്തിയ വസ്തുക്കളുടെ ഒരു ട്യൂപ്പിൾ തിരികെ നൽകുന്നു.

പ്രോപ്പർട്ടികൾ – get_data ൽ നിന്ന് ലഭിച്ച ഒബ്ജക്റ്റ് ഡാറ്റ.

  • exists – നിലവിലെ കണ്ടെത്തലിൽ വസ്തു നിലവിലുണ്ടോ എന്ന്.

  • width – കണ്ടെത്തിയ വസ്തുവിന്റെ വീതി.

  • height – കണ്ടെത്തിയ വസ്തുവിന്റെ ഉയരം.

  • centerX – വസ്തുവിന്റെ കേന്ദ്രത്തിന്റെ X സ്ഥാനം.

  • centerY – വസ്തുവിന്റെ കേന്ദ്രത്തിന്റെ Y സ്ഥാനം.

  • bearing – ഫ്രണ്ട് വിഷൻ സെൻസറുമായി ബന്ധപ്പെട്ട വസ്തുവിന്റെ കോൺ അല്ലെങ്കിൽ ഡ്രോണിന് വസ്തുവിനെ അഭിമുഖീകരിക്കാൻ ആവശ്യമായ ഡിഗ്രികൾ.

  • rotation – വസ്തുവിന്റെ ഓറിയന്റേഷൻ.

  • originX – വസ്തുവിന്റെ മുകളിൽ ഇടത് മൂലയുടെ X സ്ഥാനം.

  • originY – വസ്തുവിന്റെ മുകളിൽ ഇടത് മൂലയുടെ Y സ്ഥാനം.

  • id – വസ്തുവിന്റെ ടാഗ് ഐഡി.

  • type – വസ്തുവിന്റെ തരം നൽകുന്നു.

ഗെറ്ററുകൾ#

get_data#

get_data വിഷൻ സെൻസർ ഫ്രെയിമിൽ നിന്ന് ഡാറ്റ ഒരു സിംഗിൾ സിഗ്നേച്ചറിലേക്ക് ഫിൽട്ടർ ചെയ്യുന്നു - സെൻസറിന് തിരിച്ചറിയാൻ കഴിയുന്ന ഒരു AprilTag ID പോലുള്ള ഒന്നിന്റെ സംരക്ഷിച്ച വിവരണം - ഒരു ട്യൂപ്പിൾ തിരികെ നൽകുന്നു.

സൂചിക 0 മുതൽ വീതി അനുസരിച്ച് ഏറ്റവും വലുത് മുതൽ ചെറുത് വരെ ക്രമീകരിച്ച വസ്തുക്കളെ ട്യൂപ്പിൾ സംഭരിക്കുന്നു. ഓരോ വസ്തുവിന്റെയും പ്രോപ്പർട്ടികൾ അതിന്റെ സൂചിക ഉപയോഗിച്ച് ആക്‌സസ് ചെയ്യാൻ കഴിയും. പൊരുത്തപ്പെടുന്ന വസ്തുക്കളൊന്നും കണ്ടെത്തിയില്ലെങ്കിൽ ഒരു ശൂന്യമായ ട്യൂപ്പിൾ തിരികെ നൽകും.

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

പാരാമീറ്ററുകൾ

വിവരണം

camera

ഡാറ്റ വീണ്ടെടുക്കേണ്ട ക്യാമറ: DOWNWARD_CAMERA അല്ലെങ്കിൽ FORWARD_CAMERA.

signature

നൽകിയിരിക്കുന്ന ഒപ്പിന്റെ ഡാറ്റ മാത്രം ഉൾപ്പെടുത്തുന്നതിനായി ഡാറ്റാസെറ്റ് ഫിൽട്ടർ ചെയ്യുന്നു. ലഭ്യമായ ഒപ്പുകൾ ഇവയാണ്:

  • ALL_TAGS - എല്ലാ ഏപ്രിൽ ടാഗ് ഐഡികളും
  • TAG0 മുതൽ TAG37 - 0 മുതൽ 37
വരെയുള്ള ഒരൊറ്റ ഏപ്രിൽ ടാഗ് ഐഡി

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 ഉപയോഗിച്ചതിനുശേഷം tuple ൽ സംഭരിച്ചിരിക്കുന്ന ഓരോ ഒബ്ജക്റ്റിലും ഒന്നിലധികം പ്രോപ്പർട്ടികൾ ഉൾപ്പെടുത്തിയിട്ടുണ്ട്.

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