Fís AI#
Réamhrá#
Braitheann agus rianaíonn Braiteoir Fís AI an Róbait Chódaithe VEX AIM rudaí, dathanna, agus aitheantóirí AprilTag. Ligeann sé seo don róbat a thimpeallacht a anailísiú, rudaí a leanúint, agus imoibriú bunaithe ar shonraí amhairc a braitheadh.
Tá taifeach 320 × 240 picteilín ag an Braiteoir Fís AI. Tá an bunphointe (0, 0) suite sa chúinne uachtarach ar chlé, ag cur lár an braiteora ag (160, 120), mar a thaispeántar sa léaráid thíos:

Seo thíos liosta de na modhanna agus na hairíonna go léir:
Gníomhartha — Taispeáin nó folaigh fotha ceamara AI Vision.
show_aivision— Taispeánann sé an fotha AI Vision ar scáileán an róbait.hide_aivision— Folaíonn sé an fotha AI Vision ón scáileán.tag_detection— Casann sé seo braiteadh aitheantais AprilTag air nó as.
Getters — Braith an bhfuil rud á shealbhú ag an róbat.
get_data— Tugann sé seo liosta de rudaí a braitheadh le haghaidh síniú ar leith.has_sports_ball— Tugann sé seo ar ais an bhfuil liathróid spóirt ag an róbat.has_any_barrel— Tugann sé seo ar ais an bhfuil aon chineál bairille ag an róbat.has_blue_barrel— Tugann sé seo ar ais an bhfuil bairille gorm ag an róbat.has_orange_barrel— Tugann sé seo ar ais an bhfuil bairille oráiste ag an róbat.
Airíonna — Sonraí réada arna bhfilleadh ó get_data.
exists— Cibé acu an bhfuil an réad ann sa bhrath reatha mar Bhúlach.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 chothrománach i gcoibhneas le tosaigh an róbait.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— Aicmiú nó aitheantóir clibe an réada.score— Scór muiníne le haghaidh Aicmithe AI.type— Tugann sé cineál an réada ar ais (AI, Clib, Dath, nó Cód).
Tógálaithe — Sainmhínigh sínithe agus cóid dathanna.
Cruthaigh Síniú Datha — Cruthaíonn sé Síniú Datha nua bunaithe ar RGB agus raonta datha/sáithithe.
Cruthaigh Cód Datha — Comhcheanglaíonn sé il-Shínithe Datha i gCód Datha amháin.
Gníomhartha#
show_aivision#
show_aivision Taispeánann fotha sonraí beo Braiteoir Fís AI ar scáileán an róbait. Clúdóidh an fotha sonraí beo aon íomhánna nó téacs eile ar an scáileán.
Nóta: Ní thaispeánfar aon íomhánna ná téacs eile ar an scáileán mura n-úsáidtear hide_aivision chun an fotha a cheilt.
Usage:
robot.screen.show_aivision()
Paraiméadair |
Cur síos |
|---|---|
Níl aon pharaiméadair ag an modh seo. |
# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()
hide_aivision#
hide_aivision Baintear fotha sonraí beo an Braiteora Físe AI de scáileán an róbait.
Usage:
robot.screen.hide_aivision()
Paraiméadair |
Cur síos |
|---|---|
Níl aon pharaiméadair ag an modh seo. |
# View the AI Vision Sensor's feed for five seconds
robot.screen.show_aivision()
wait(5, SECONDS)
robot.screen.hide_aivision()
tag_detection#
Cumasaíonn nó díchumasaíonn tag_detection braiteadh aitheantais AprilTag, áit a bhfuil an stát ina luach Booleanach.
Is féidir leis an braiteoir aitheantóirí AprilTag 0 go 36 a bhrath ón teaghlach Circle21h7.
Usage:
robot.vision.tag_detection(state)
Paraiméadair |
Cur síos |
|---|---|
|
Is iad na luachanna: |
robot.screen.set_font(PROP30)
# Cut off AprilTag ID detection after 5 seconds
while True:
if timer.time(SECONDS) > 5:
robot.vision.tag_detection(False)
robot.screen.clear_screen()
robot.screen.set_cursor(3, 1)
apriltags = robot.vision.get_data(ALL_TAGS)
if apriltags[0].exists:
robot.screen.print("AprilTag ID detected!")
else:
robot.screen.print("Nothing detected!")
wait(0.1, SECONDS)
Faighteoirí#
get_data#
Scagann get_data sonraí ó fhráma Braiteoir Fís AI go síniú aonair — cur síos sábháilte ar rud éigin is féidir leis an braiteoir a aithint, amhail réad réamh-oilte, aitheantóir AprilTag, nó Síniú Dath nó Cód Dath cumraithe — agus tugann sé tuple ar ais.
Ní mór Sínithe Datha agus Cóid Datha a chumrú ar dtús in AI Vision Utility sula bhféadfar iad a úsáid leis an modh seo.
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:
robot.vision.get_data(signature, count)
Paraiméadair |
Cur síos |
|---|---|
|
Scagann sé an tacar sonraí chun sonraí an tsínithe tugtha amháin a áireamh. Is iad na sínithe atá ar fáil:
|
|
Roghnach. Socraíonn sé seo an líon uasta réad is féidir a thabhairt ar ais ó 1 go 24 (réamhshocrú: 8). |
Nóta: Is féidir aitheantóirí AprilTag 5 go 37 a fháil trí úsáid a bhaint as aitheantóirí AprilTag clóite ó AIM Printables.
# Move forward if a sports ball is detected
while True:
ball = robot.vision.get_data(SPORTS_BALL)
if ball[0].exists:
robot.move_for(10, 0)
wait(50, MSEC)
Nóta: Is féidir an tuple a chuirtear ar ais a shórtáil de réir aon mhaoin, ní hamháin leithead, ag baint úsáide as feidhm sorted Python. Mar shampla, sórtáil de réir AprilTag ID:
# Print each detected AprilTag ID in ascending order by ID
while True:
apriltags = sorted(robot.vision.get_data(ALL_TAGS), key=id)
for tag in apriltags:
print(tag.id)
wait(1, SECONDS)
Nó sórtáil de réir airde ina ionad:
# Print each detected AprilTag ID in ascending order by height
while True:
apriltags_by_height = sorted(robot.vision.get_data(ALL_TAGS), key=lambda tag: tag.height)
for tag in apriltags_by_height:
print(tag.height)
wait(1, SECONDS)
Ag Féachaint ar Shonraí#
Agus an tuple a chuirtear ar ais le get_data á phriontáil, taispeántar liosta de gach airíonna de na réad braite go léir:
# Display properties of all detected AprilTag IDs
while True:
vision_data = robot.vision.get_data(ALL_TAGS)
if vision_data[0].exists:
break
wait(0.25, SECONDS)
print(vision_data)

Aicmithe AI#
Is féidir leis an Braiteoir Fís AIM AI na hAicmithe AI seo a bhrath:
Uimhir Aitheantais |
Aicmiú AI |
Síniú |
|---|---|---|
0 |
Liathróid |
|
1 |
Bairille Gorm |
|
2 |
Bairille Oráiste |
|
3 |
Róbat AIM |
|
Sínithe Dath#
Is dath uathúil é síniú datha is féidir leis an Braiteoir Fís Intleachta Saorga a aithint. Ligeann na sínithe seo don braiteoir réada a bhrath agus a rianú bunaithe ar a ndath. Nuair a bheidh Síniú Datha cumraithe, is féidir leis an braiteoir réada leis an dath sonrach sin ina réimse radhairc a aithint. Úsáidtear sínithe datha le get_data chun réada daite a phróiseáil agus a bhrath i bhfíor-am.

# Display if any objects match the Red_Box signature
while True:
robot.screen.set_cursor(1, 1)
robot.screen.clear_row(1)
# Change to any configured Color Signature
ai_objects = robot.vision.get_data(Red_Box)
if ai_objects[0].exists:
robot.screen.print("Color signature detected!")
Cóid Dathanna#
Is patrún struchtúrtha é cód datha atá comhdhéanta de 2 go 4 shíniú datha atá socraithe in ord sonrach. Ligeann na cóid seo don Braiteoir Fís AI patrúin réamhshainithe dathanna a aithint. Tá cóid datha úsáideach chun rudaí casta a aithint nó marcóirí uathrialacha a chruthú le haghaidh loingseoireachta uathrialach.

# Display if any objects match the BlueRed code
while True:
robot.screen.set_cursor(1, 1)
robot.screen.clear_row(1)
# Change to any configured Color Code
ai_objects = robot.vision.get_data(BlueRed)
if ai_objects[0].exists:
robot.screen.print("Color code detected!")
has_sports_ball#
has_sports_ball luach Booleach ar ais a léiríonn an bhfuil liathróid spóirt ag an róbat faoi láthair.
True— Tá liathróid spóirt ag an róbat.False— Níl liathróid spóirt ag an róbat.
Usage:
robot.has_sports_ball()
Paraiméadair |
Cur síos |
|---|---|
Níl aon pharaiméadair ag an modh seo. |
# Kick when the robot has a sports ball
while True:
if robot.has_sports_ball():
robot.kicker.kick(MEDIUM)
wait(50, MSEC)
has_any_barrel#
has_any_barrel seolann sé luach Booleach a léiríonn an bhfuil aon chineál bairille ag an róbat faoi láthair.
True— Tá bairille ag an róbat.False— Níl bairille ag an róbat.
Usage:
robot.has_any_barrel()
Paraiméadair |
Cur síos |
|---|---|
Níl aon pharaiméadair ag an modh seo. |
# Push a barrel away when detected
while True:
if robot.has_any_barrel():
robot.kicker.place()
wait(50, MSEC)
has_blue_barrel#
has_blue_barrel luach Booleach ar ais a léiríonn an bhfuil bairille gorm ag an róbat faoi láthair.
True— Tá bairille gorm ag an róbat.False— Níl bairille gorm ag an róbat.
Usage:
robot.has_blue_barrel()
Paraiméadair |
Cur síos |
|---|---|
Níl aon pharaiméadair ag an modh seo. |
# Push a blue barrel away when detected
while True:
if robot.has_blue_barrel():
robot.kicker.place()
wait(50, MSEC)
has_orange_barrel#
has_orange_barrel luach Booleach ar ais a léiríonn an bhfuil bairille oráiste ag an róbat faoi láthair.
True— Tá bairille oráiste ag an róbat.False— Níl bairille oráiste ag an róbat.
Usage:
robot.has_orange_barrel()
Paraiméadair |
Cur síos |
|---|---|
Níl aon pharaiméadair ag an modh seo. |
# Push an orange barrel away when detected
while True:
if robot.has_orange_barrel():
robot.kicker.place()
wait(50, MSEC)
Airíonna#
Tá dhá airí dhéag san áireamh le gach réad atá stóráilte i dtuple tar éis an modh robot.vision.get_data a úsáid.
All property values except .id, .score, and .type describe the detected object’s position, size, orientation, or bearing at the moment robot.vision.get_data was used. These values are measured in pixels or degrees, based on the sensor’s 320 by 240 pixel resolution.

.exists#
.exists tugann sé luach Booleach ar ais a léiríonn an bhfuil an t-innéacs sa tuple nó nach bhfuil.
True— Tá an t-innéacs ann.False— Níl an t-innéacs ann.
# Check if at least two objects are detected
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
ai_objects = robot.vision.get_data(ALL_CARGO)
if ai_objects[0].exists:
if ai_objects[1].exists:
robot.screen.print("At least 2")
else:
robot.screen.print("Less than 2")
wait(0.1, SECONDS)
.width#
Tugann .width leithead an réada braite i bpicteilíní ar ais, ar slánuimhir é idir 1 agus 320.
Nóta: Tá luachanna picteilíní i gcoibhneas le córas comhordanáidí an braiteora. Féach an léaráid sa Réamhrá le haghaidh tagartha.

# Move towards a Blue Barrel until its width is
# larger than 100 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if barrel[0].width < 100:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.height#
.height tugann sé airde an réada braite i bpicteilíní ar ais, ar slánuimhir é idir 1 agus 240.
Nóta: Tá luachanna picteilíní i gcoibhneas le córas comhordanáidí an braiteora. Féach an léaráid sa Réamhrá le haghaidh tagartha.

# Move towards a Blue Barrel until its height is
# larger than 100 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if barrel[0].height < 100:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.centerX#
.centerX seolann sé comhordanáid-x lár an réada braite i bpicteilíní ar ais, ar slánuimhir idir 0 agus 320 é.
Nóta: Tá luachanna picteilíní i gcoibhneas le córas comhordanáidí an braiteora. Féach an léaráid sa Réamhrá le haghaidh tagartha.

# Turn slowly until a Blue Barrel is centered in
# front of the robot
robot.set_turn_velocity(30)
robot.turn(RIGHT)
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if 140 < barrel[0].centerX < 180:
robot.stop_all_movement()
wait(10,MSEC)
.centerY#
.centerY seolann sé comhordanáid-y lár an réada braite i bpicteilíní ar ais, ar slánuimhir idir 0 agus 240 é.
Nóta: Tá luachanna picteilíní i gcoibhneas le córas comhordanáidí an braiteora. Féach an léaráid sa Réamhrá le haghaidh tagartha.

# Move towards a Blue Barrel until its
# center y-coordinate is more than 140 pixels
while True:
barrel = robot.vision.get_data(BLUE_BARREL)
if barrel[0].exists:
if barrel[0].centerY < 140:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.bearing#
Tugann .bearing deachúil (snámhphointe) ar ais a léiríonn cé chomh fada agus atá réad ar chlé nó ar dheis ó lár radharc Braiteoir Fís AI mar chéim. Ciallaíonn luach 0 go bhfuil sé lárnaithe, ciallaíonn luachanna dearfacha go bhfuil an réad ar dheis, agus ciallaíonn luachanna diúltacha go bhfuil an réad ar chlé.
# Turn to keep the Blue Barrel directly in front
robot.set_turn_velocity(40)
while True:
vision_data = robot.vision.get_data(BLUE_BARREL)
if vision_data[0].exists:
if vision_data[0].bearing > 5:
robot.turn(RIGHT)
elif vision_data[0].bearing < -5:
robot.turn(LEFT)
else:
robot.stop_all_movement()
else:
robot.stop_all_movement()
wait(0.1, SECONDS)
.rotation#
Tugann .rotation treoshuíomh an réada ar ais ar phlána féachana Braiteoir Fís AI, arna thomhas i gcéimeanna ó 0 go 359. Is ionann Cód Datha agus 0° nuair a bhíonn a dathanna socraithe i líne chothrománach (m.sh., Dearg-Gorm). Má rothlaítear na dathanna, athraíonn an uillinn (m.sh., tugann socrú Gorm-Dearg 180° ar ais).
Don sampla thíos, tá an Cód Datha cumraithe le dearg ar chlé agus gorm ar dheis.
Sa íomhá seo, is ionann gorm a chur ar bharr dearg agus an Cód Datha bunaidh a rothlú 270 céim ar dheis.

# Slide left or right depending on how a Color Code (BlueRed)
# is rotated on the vertical plane
while True:
# Original Color Code is Red to the left, Blue to the right
code = robot.vision.get_data(BlueRed)
if code[0].exists:
# Check if Color Code is now Red on top of Blue
if 50 < code[0].rotation < 100 :
robot.move_at(90)
# Check if Color Code is now Blue on top of Red
elif 270 < code[0].rotation < 330 :
robot.move_at(270)
else:
robot.stop_all_movement()
else:
robot.stop_all_movement()
wait(50, MSEC)
.originX#
.originX seolann sé comhordanáid-x chúinne uachtarach na láimhe clé de bhosca teorann an réada braite i bpicteilíní, ar slánuimhir idir 0 agus 320 í.
Nóta: Tá luachanna picteilíní i gcoibhneas le córas comhordanáidí an braiteora. Féach an léaráid sa Réamhrá le haghaidh tagartha.

# Display if an Orange Barrel is to the
# left or the right
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1,1)
orange_barrel = robot.vision.get_data(ORANGE_BARREL)
if orange_barrel[0].exists:
if orange_barrel[0].originX < 160:
robot.screen.print("To the left!")
else:
robot.screen.print("To the right!")
wait(50, MSEC)
.originY#
Tugann .originY comhordanáid-y chúinne uachtarach na láimhe clé de bhosca teorann an réada braite ar ais i bpicteilíní, arb é slánuimhir idir 0 agus 240 é.
Nóta: Tá luachanna picteilíní i gcoibhneas le córas comhordanáidí an braiteora. Féach an léaráid sa Réamhrá le haghaidh tagartha.

# Display if an Orange Barrel is close or far
# from the robot
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
orange_barrel = robot.vision.get_data(ORANGE_BARREL)
if orange_barrel[0].exists:
if orange_barrel[0].originY < 80:
robot.screen.print("Far")
else:
robot.screen.print("Close")
wait(50, MSEC)
.id#
Tugann .id ID an Aicmithe AI a braitheadh nó ID AprilTag ar ais mar shlánuimhir.
I gcás aitheantais AprilTag, seasann an mhaoin .id don uimhir aitheantais AprilTag a braitheadh sa raon 0 go 37. I gcás Aicmiú AI, comhfhreagraíonn an mhaoin .id don aitheantas réamhshainithe sa rannán Aicmithe AI.
# Move forward when AprilTag ID 1 is detected
while True:
apriltags = robot.vision.get_data(ALL_TAGS)
if apriltags[0].exists:
if apriltags[0].id == 1:
robot.move_at(0)
else:
robot.stop_all_movement()
wait(50, MSEC)
.score#
.score tugann sé scór muiníne an Aicmithe AI a braitheadh ar ais mar shlánuimhir idir 1 agus 100.
Ciallaíonn scór níos ísle go bhfuil an braiteoir níos lú muiníne faoin réad a braitheadh, agus ciallaíonn scór níos airde go bhfuil an braiteoir níos muiníní.
# Look confident if an Orange Barrel is detected
while True:
barrel = robot.vision.get_data(ORANGE_BARREL)
if barrel[0].exists:
if barrel[0].score > 95:
robot.screen.show_emoji(CONFIDENT)
else:
robot.screen.hide_emoji()
wait(50, MSEC)
.type#
Tugann .type slánuimhir ar ais a léiríonn an cineál réada a braitheadh. Is féidir leat an luach seo a chur i gcomparáid trí úsáid a bhaint as uimhir an chineáil nó as an tairiseach ainmnithe comhfhreagrach:
Cineál Réada |
Réada san áireamh |
|---|---|
|
— Liathróidí spóirt |
|
— Aitheantóirí AprilClib |
|
— Sínithe datha |
|
— Cóid datha |
# Display if an AprilTag ID or AI Classification
# is detected
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
vision_data = robot.vision.get_data(ALL_VISION)
if vision_data[0].exists:
if vision_data[0].type == AiVision.AI_OBJECT:
robot.screen.print("AI Object!")
elif vision_data[0].type == AiVision.TAG_OBJECT:
robot.screen.print("AprilTag ID!")
wait(0.1, SECONDS)
# Display a list of all detected objects
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
vision_data = robot.vision.get_data(ALL_VISION)
if vision_data[0].exists:
for obj in vision_data:
if obj.type == AiVision.AI_OBJECT:
robot.screen.print("- AI Object")
elif obj.type == AiVision.TAG_OBJECT:
robot.screen.print("- AprilTag ID")
robot.screen.next_row()
wait(0.1, SECONDS)
Tógálaithe#
Creating a Color Signature#
Cruthaítear Síniú Datha nua ag baint úsáide as an tógálaí Colordesc agus ansin cláraítear é leis an Braiteoir Fís AI ag baint úsáide as an modh color_description Sainmhíníonn réad Colordesc 1 as suas le 7 síniú datha inbhraite don braiteoir, ach ní mór é a shocrú go sainráite ag baint úsáide as color_description le go dtiocfaidh sé i bhfeidhm.
Úsáid Colordesc:
Colordesc(index, red, green, blue, hangle, hdsat)
Paraiméadar |
Cur síos |
|---|---|
|
Slánuimhir ó 1 go 7 a léiríonn innéacs an tSínithe Datha. Má úsáideann dhá Shíniú Datha an t-innéacs céanna, sáróidh an dara ceann an chéad cheann. |
|
Slánuimhir ó 0 go 255 don chomhpháirt dhearg den dath. |
|
Slánuimhir ó 0 go 255 don chomhpháirt ghlas den dath. |
|
Slánuimhir ó 0 go 255 don chomhpháirt ghorm den dath. |
|
Snámhphointe ó 1 go 40 a léiríonn an raon datha i gcéimeanna. |
|
Snámhphointe ó 0.10 go 1.00 a léiríonn an raon sáithiúcháin. |
cur síos_dathanna Úsáid:
robot.vision.color_description(object)
Paraiméadar |
Cur síos |
|---|---|
|
An réad |
# Detect a red object
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
robot.vision.color_description(red_box)
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
red_boxes = robot.vision.get_data(red_box)
if red_boxes[0].exists:
robot.screen.print("Red detected!")
else:
robot.screen.print("No red detected.")
wait(0.2, SECONDS)
Creating a Color Code#
Cruthaítear Cód Dathanna nua ag baint úsáide as an tógálaí Codedesc agus ansin gníomhaítear é ag baint úsáide as an modh code_description Grúpaíonn Cód Dathanna 2 go 4 réad Colordesc atá ann cheana féin in aon aitheantóir amháin is féidir leis an Braiteoir Fís AI a bhrath mar sheicheamh, ach ní mór é a shocrú go sainráite ag baint úsáide as code_description le go dtiocfaidh sé i bhfeidhm.
Úsáid Codedesc:
Codedesc(index, c1, c2, c3, c4, c5)
Paraiméadar |
Cur síos |
|---|---|
|
Innéacs an Chóid Datha, ó 1 go 8. Tabhair faoi deara: Má chruthaíonn tú dhá réad |
|
An chéad |
|
An dara réad |
|
Roghnach. An tríú réad |
|
Roghnach. Ceathrú réad |
Cur síos_an_chóid Úsáid:
robot.vision.code_description(object)
Paraiméadar |
Cur síos |
|---|---|
|
Réad |
# Create Color Signatures
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
purple_box = Colordesc(2, 98, 18, 227, 10.00, 0.20)
robot.vision.color_description(red_box)
robot.vision.color_description(purple_box)
# Detect a red_purple Color Code
red_purple = Codedesc(1, red_box, purple_box)
robot.vision.code_description(red_purple)
while True:
robot.screen.clear_screen()
robot.screen.set_cursor(1, 1)
code_objects = robot.vision.get_data(red_purple)
if code_objects[0].exists:
robot.screen.print("Code detected!")
else:
robot.screen.print("No code detected.")
wait(0.2, SECONDS)