Fís#

Réamhrá#

Braitheann agus rianaíonn Braiteoir Fís an Dróin VEX AIR aitheantóirí AprilTag. Ligeann sé seo don drón a thimpeallacht a anailísiú, rudaí a leanúint, agus imoibriú bunaithe ar shonraí amhairc a braitheadh. Seo thíos liosta de na modhanna agus na hairíonna go léir atá ar fáil:

Gabharóirí – Braith an bhfuil réad á shealbhú ag an drón.

  • get_data – Tugann sé seo liosta de réada braite le haghaidh síniú ar leith ar ais.

Airíonna – Sonraí réada arna bhfilleadh ó get_data.

  • exists – Cibé acu an bhfuil an réad ann sa bhrath reatha.

  • width – Leithead an réada braite.

  • height – Airde an réada braite.

  • centerX – Suíomh X lár an réada.

  • centerY – Suíomh Y lár an réada.

  • bearing – Uillinn an réada i gcoibhneas leis an Braiteoir Fís tosaigh nó na céimeanna atá riachtanach don drón aghaidh a thabhairt ar an réada.

  • rotation – Treoshuíomh an réada.

  • originX – Suíomh X chúinne uachtarach na láimhe clé den réada.

  • originY – Suíomh Y chúinne uachtarach na láimhe clé den réada.

  • id – Aitheantas clibe an réada.

  • type – Tugann sé cineál an réada ar ais.

Faighteoirí#

get_data#

get_data scagann sé sonraí ón bhfráma Braiteora Fís go síniú aonair — cur síos sábháilte ar rud is féidir leis an braiteoir a aithint, amhail aitheantóir AprilTag — agus tugann sé tuple ar ais.

Stórálann an tuple réada in ord ón gceann is mó go dtí an ceann is lú de réir leithead, ag tosú ag innéacs 0. Is féidir rochtain a fháil ar airíonna gach réada trína innéacs a úsáid. Seoltar tuple folamh ar ais mura mbraitear aon réada comhoiriúnacha.

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

Paraiméadair

Cur síos

camera

An ceamara le sonraí a aisghabháil uaithi: ceachtar acu an DOWNWARD_CAMERA nó an FORWARD_CAMERA.

signature

Scagann sé an tacar sonraí chun sonraí an tsínithe tugtha amháin a áireamh. Is iad na sínithe atá ar fáil:

  • ALL_TAGS - Gach ID AprilTag
  • TAG0 go TAG37 - ID AprilTag aonair ó 0 go 37

count

Roghnach. Socraíonn sé seo an líon uasta réad is féidir a thabhairt ar ais ó 1 go 24 (réamhshocrú: 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)

Airíonna#

Tá roinnt airíonna san áireamh le gach réad atá stóráilte i tuple tar éis get_data a úsáid.

Déanann gach luach maoine seachas .id agus .type cur síos ar shuíomh, méid, treoshuíomh, nó treo an réada braite ag an nóiméad a úsáideadh get_data. Tomhaistear na luachanna seo i bpicteilíní nó i gcéimeanna. Tá taifeach difriúil ag gach Braiteoir Fís:

  • Aghaidh ar aghaidh: 640 x 480 picteilín

  • Aghaidh anuas: 640 x 400 picteilín

.exists#

.exists seolann sé luach Booleánach ar ais a léiríonn an bhfuil an t-innéacs ann sa tuple. Seolann sé earráid ar ais mura bhfuil aon réada braite.

  • True – Tá an t-innéacs ann.

  • False – Níl an t-innéacs ann.

# 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 tugann sé leithead an réada braite i bpicteilíní ar ais mar shlánuimhir ó 1 go 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 tugann sé airde an réada braite i bpicteilíní ar ais mar shlánuimhir ó 1 go 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 seolann sé comhordanáid-x lár an réada braite i bpicteilíní mar shlánuimhir ó 1 go 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 seolann sé comhordanáid-y lár an réada braite i bpicteilíní mar shlánuimhir ó 1 go 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#

Tugann .bearing uillinn ar ais a léiríonn suíomh réada i gcoibhneas leis an drón. Braitheann an t-iompar ar an Braiteoir Fís a úsáidtear.

Léiríonn luach 0° go bhfuil lár an réada agus an braiteora ailínithe. Ciallaíonn luachanna dearfacha go bhfuil an réad ar dheis, agus ciallaíonn luachanna diúltacha go bhfuil an réad ar chlé.

Braiteoir

Tuairisceáin

Anuas

Céimeanna a chaithfidh tosaigh an dróin casadh chun ailíniú le lár an réada, ó –180º go 180º.

Ar Aghaidh

Na céimeanna a bhfuil an réad fritháirithe ar chlé nó ar dheis ó lár an Braiteora Fís ó –180º go 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 tugann sé treoshuíomh an aitheantóir AprilTag braite ar ais mar shlánuimhir i gcéimeanna ó 1 go 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 seolann sé comhordanáid-x chúinne uachtarach na láimhe clé de bhosca teorann an réada braite i bpicteilíní mar shlánuimhir ó 1 go 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 seolann sé comhordanáid-y chúinne uachtarach na láimhe clé de bhosca teorann an réada braite i bpicteilíní mar shlánuimhir ó 1 go 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#

Seolann .id uimhir aitheantais an aitheantais AprilTag a braitheadh ​​mar shlánuimhir ó 0 go 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 seolann sé ar ais cén cineál réada a braitheadh. Seolann sé an méid seo a leanas ar ais:

Cineál Réada

Luach Uimhriúil

Réada san áireamh

drone.vision.TAG_OBJECT

8

Aitheantóirí Clibeanna Aibreáin

drone.vision.COLOR_OBJECT

1

Sínithe datha - Ag teacht go luath!

drone.vision.CODE_OBJECT

2

Cóid dathanna - Ag teacht go luath!

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