Regėjimo jutiklis#
Įvadas#
vision klasė naudojama IQ (2-osios kartos) regos jutiklio duomenims valdyti ir pasiekti. Šis jutiklis aptinka ir seka spalvų parašus savo matymo lauke, leisdamas jūsų robotui atpažinti taikinius ir reaguoti į vaizdinę informaciją realiuoju laiku.
Regėjimo jutiklis gali vienu metu aptikti kelis objektus ir pateikti tokią informaciją kaip objekto padėtis, plotis, aukštis ir centro koordinatės.
Klasės konstruktoriai#
vision(
int32_t index,
uint8_t bright,
Args&... sigs );
Klasės destruktorius#
Sunaikina vision objektą ir išlaisvina susijusius išteklius.
~vision();
Parametrai#
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Išmanusis prievadas, prie kurio prijungtas regėjimo jutiklis, užrašomas kaip |
|
|
Regėjimo jutiklio ryškumo lygis. |
|
|
Vienas ar keli |
Pavyzdžiai#
// Create Color Signatures
vision::signature Vision1__REDBOX = vision::signature(
1, // signature id
10121, // uMin
10757, // uMax
10439, // uMean
-1657, // vMin
-1223, // vMax
-1440, // vMean
2.5, // range
1 ); // type
vision::signature Vision1__BLUEBOX = vision::signature(
2, // signature id
-4479, // uMin
-3277, // uMax
-3878, // uMean
5869, // vMin
7509, // vMax
6689, // vMean
2.5, // range
1 ); // type
// Create a Color Code from two signatures
vision::code Vision1__BOXCODE = vision::code(
Vision1__REDBOX, // first signature
Vision1__BLUEBOX // second signature
);
// Create the Vision Sensor instance
vision Vision1 = vision(
PORT1, // Smart Port
50, // brightness
Vision1__REDBOX, // signature
Vision1__BOXCODE ); // Color Code
Narių funkcijos#
vision klasė apima šias narines funkcijas:
takeSnapshot– fiksuoja duomenis, skirtus konkrečiam spalvos parašui arba spalvos kodui.installed— Ar regėjimo jutiklis prijungtas prie IQ (2-osios kartos) smegenų.
Norėdami pasiekti aptiktų objektų duomenis iškvietę takeSnapshot, naudokite Properties.
Prieš iškviečiant bet kokias vision narių funkcijas, reikia sukurti vision egzempliorių, kaip parodyta žemiau:
/* This constructor is required when using VS Code.
Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create Color Signatures
vision::signature Vision1__REDBOX = vision::signature(
1, // signature id
10121, // uMin
10757, // uMax
10439, // uMean
-1657, // vMin
-1223, // vMax
-1440, // vMean
2.5, // range
1 ); // type
vision::signature Vision1__BLUEBOX = vision::signature(
2, // signature id
-4479, // uMin
-3277, // uMax
-3878, // uMean
5869, // vMin
7509, // vMax
6689, // vMean
2.5, // range
1 ); // type
// Create a Color Code from two signatures
vision::code Vision1__BOXCODE = vision::code(
Vision1__REDBOX, // first signature
Vision1__BLUEBOX // second signature
);
// Create the Vision Sensor instance
vision Vision1 = vision(
PORT1, // Smart Port
50, // brightness
Vision1__REDBOX, // signature
Vision1__BOXCODE ); // Color Code
takeSnapshot#
Užfiksuoja vaizdą iš regėjimo jutiklio, apdoroja jį pagal parašą ir atnaujina objects masyvą. Šis metodas taip pat gali apriboti momentinėje nuotraukoje užfiksuotų objektų skaičių.
Masyve objects objektai saugomi išdėstyti nuo didžiausio iki mažiausio pagal plotį, pradedant indeksu 0. Kiekvieno objekto properties galima pasiekti naudojant jo indeksą. Jei nerandama jokių atitinkančių objektų, objectCount bus 0, o objects[i].exists bus „false“.
1 — Padaro momentinę kopiją ir ieško objektų, atitinkančių nurodytą parašo ID.
int32_t takeSnapshot( uint32_t id );
2 — Padaro momentinę kopiją ir ieško objektų, atitinkančių nurodytą
vision::codeobjektą.int32_t takeSnapshot( code &cc );
3 — Padaro momentinę kopiją ir ieško objektų, atitinkančių nurodytą
vision::signatureobjektą.int32_t takeSnapshot( signature &sig );
4 — Padaro momentinę kopiją ir išsaugo tik didžiausią nurodytą objektų, atitinkančių parašo ID, skaičių.
int32_t takeSnapshot( uint32_t id, uint32_t count );
5 — Padaro momentinę kopiją ir išsaugo tik didžiausią nurodytą objektų, atitinkančių nurodytą
vision::codeobjektą, skaičių.int32_t takeSnapshot( code &cc, uint32_t count );
Parameters6 — Padaro momentinę kopiją ir išsaugo tik didžiausią nurodytą objektų, atitinkančių nurodytą
vision::signatureobjektą, skaičių.int32_t takeSnapshot( signature &sig, uint32_t count );
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Parašo ID numeris, kurio reikia ieškoti. |
|
|
Nuoroda į |
|
|
Nuoroda į |
|
|
Didžiausias aptinkamų objektų skaičius. |
Grąžina int32_t , nurodantį aptiktų sutampančių objektų skaičių.
Prieš pasiekiant objekto duomenis, vaizdo jutiklis turi padaryti momentinę kopiją.
Kai nurodyta
count, saugomi tik didžiausi aptikti objektai (iki nurodyto kiekio).
Pavyzdžių
while (true) {
// Display if a blue object is detected
Vision1.takeSnapshot(Vision1__BLUEBOX);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Blue detected");
}
else {
Brain.Screen.print("No blue");
}
wait(0.5, seconds);
}
// Display when a blue object is detected
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Color detected!");
}
wait(100, msec);
}
// Display when BOXCODE is detected
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
Vision1.takeSnapshot(Vision1__BOXCODE);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Code detected!");
}
wait( 100, msec);
}
installed#
Grąžina, ar regėjimo jutiklis prijungtas prie IQ (1-osios kartos) smegenų.
Available Functionsbool installed();
Ši funkcija nepriima jokių parametrų.
Return ValuesGrąžina loginę reikšmę, nurodančią, ar prijungtas regėjimo jutiklis:
-
true— The Vision Sensor is connected. -
false— The Vision Sensor is not connected.
Ypatybės#
Iškviečiant takeSnapshot, atnaujinami regėjimo jutiklio aptikimo rezultatai. Kiekviena momentinė kopija atnaujina objects masyvą, kuriame yra aptikti objektai pagal prašomą spalvos parašą arba spalvos kodą.
„Vision Sensor“ duomenys pasiekiami per objektų, saugomų faile Vision1.objects[index], savybes, kur index prasideda nuo 0.
Regėjimo jutiklio vaizdo skiriamoji geba yra 316 x 212 pikselių. Objekto padėties ir dydžio savybės pateikiamos pikselių vienetais, atsižvelgiant į dabartinį jutiklio vaizdą.
Galima įsigyti šias savybes:
largestObject– Pasirenka didžiausią aptiktą objektą iš naujausios momentinės kopijos.objectCount— Grąžina galiojančių objektų, saugomųobjectsskaičių.objects— Aptiktų objektų masyvas, atnaujintas naudojanttakeSnapshot..exists— Ar objekto įraše yra galiojančių duomenų..width— Aptikto objekto plotis pikseliais..height— Aptikto objekto aukštis pikseliais..centerX— X position of the object’s center in pixels..centerY— objekto centro Y padėtis pikseliais..originX— X position of the object’s top-left corner in pixels..originY— objekto viršutinio kairiojo kampo Y padėtis pikseliais..angle— Orientation of the detected Color Code in degrees (when applicable).
largestObject#
Iš masyvo objects gauna didžiausią aptiktą objektą.
Šis metodas gali būti naudojamas norint visada gauti didžiausią objektą iš objects , nenurodant indekso.
VisionSensor.largestObject
Komponentas |
Aprašymas |
|---|---|
|
Jūsų „Vision Sensor“ egzemplioriaus pavadinimas. |
Pavyzdžių
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display the largest detected object's width
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
if (Vision1.objects[0].exists) {
Brain.Screen.print("%d", Vision1.largestObject.width);
}
wait(0.5, seconds);
}
}
objectCount#
Grąžina elementų skaičių masyve objects kaip sveikąjį skaičių.
VisionSensor.objectCount
Komponentas |
Aprašymas |
|---|---|
|
Jūsų „Vision Sensor“ egzemplioriaus pavadinimas. |
Pavyzdžių
int main() {
// Initializing Robot Configuration. DO NOT REMOVE!
vexcodeInit();
// Display how many blue objects are detected
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print("Object Count: %d", Vision1.objectCount);
wait(0.5, seconds);
}
}
objects#
objects yra masyvas, kuriame yra aptikti objektai iš paskutinio takeSnapshot iškvietimo.
Kiekvienas masyvo elementas atitinka aptiktą objektą ir suteikia prieigą prie jo savybių, tokių kaip width, height, centerX ir kt.
Objektai yra rūšiuojami nuo didžiausio iki mažiausio (pagal plotį), pradedant nuo indekso 0.
VisionSensor.objects[index].property
Komponentas |
Aprašymas |
|---|---|
|
Jūsų „Vision Sensor“ egzemplioriaus pavadinimas. |
|
Objekto indeksas masyve. Indeksas prasideda nuo |
|
Viena iš galimų objekto savybių. |
.egzistuoja#
.exists grąžina, ar nurodytame objekto indekse yra galiojantis aptiktas objektas.
Prieiga
SensorName.objects[index].exists
Grąžinamosios reikšmės
Grąžina loginę reikšmę, nurodančią, ar nurodytame objekto indekse yra galiojantis aptiktas objektas:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Pavyzdžių
// Display when a blue object is detected
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
Brain.Screen.print("Color detected!");
}
wait(100, msec);
}
.plotis#
.width grąžina aptikto objekto plotį.
Prieiga
SensorName.objects[index].width
Grąžinamosios reikšmės
Grąžina int nurodantį aptikto objekto plotį pikseliais. Reikšmė svyruoja nuo 1 iki 316.
Pavyzdžių
// Approach an object until it's at least 100 pixels wide
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists && Vision1.objects[0].width < 100) {
Drivetrain.driveFor(forward, 10, mm);
}
else {
Drivetrain.stop();
}
wait(0.5, seconds);
}
.aukštis#
.height grąžina aptikto objekto aukštį.
Prieiga
SensorName.objects[index].height
Grąžinamosios reikšmės
Grąžina int nurodantį aptikto objekto aukštį pikseliais. Reikšmė svyruoja nuo 1 iki 212.
Pavyzdžių
// Approach an object until it's at least 100 pixels tall
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists && Vision1.objects[0].height < 100) {
Drivetrain.driveFor(forward, 10, mm);
}
else {
Drivetrain.stop();
}
wait(0.5, seconds); // Avoid over-processing
}
.centerX#
.centerX grąžina aptikto objekto centro x koordinatę.
Prieiga
SensorName.objects[index].centerX
Grąžinamosios reikšmės
Grąžina int reiškiantį objekto centro x koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 316.
Pavyzdžių
// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
int centerX = Vision1.largestObject.centerX;
if (140 < centerX && centerX < 180) {
Drivetrain.stop();
}
}
wait(0.5, seconds);
}
.centerY#
.centerY grąžina aptikto objekto centro y koordinatę.
Prieiga
SensorName.objects[index].centerY
Grąžinamosios reikšmės
Grąžina int reiškiantį objekto centro y koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 212.
Pavyzdžių
// Approach an object until it's at least 90 pixels tall
while (true) {
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
if (Vision1.objects[0].centerY < 90) {
Drivetrain.drive(forward);
} else {
Drivetrain.stop();
}
} else {
Drivetrain.stop();
}
wait(50, msec);
}
.originX#
.originX grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę.
Prieiga
SensorName.objects[index].originX
Grąžinamosios reikšmės
Grąžina int reiškiantį objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 316.
Pavyzdžių
// Display if an object is to the left or the right
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
if (Vision1.objects[0].originX < 160) {
Brain.Screen.print("To the left!");
}
else {
Brain.Screen.print("To the right!");
}
}
wait(0.5, seconds);
}
.originY#
.originY grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę.
Prieiga
SensorName.objects[index].originY
Grąžinamosios reikšmės
Grąžina int reiškiantį objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 212.
Pavyzdžių
// Display if an object is close or far
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Vision1.takeSnapshot(Vision1__BLUEBOX);
if (Vision1.objects[0].exists) {
if (Vision1.objects[0].originY < 80) {
Brain.Screen.print("Far");
} else {
Brain.Screen.print("Close");
}
}
wait(0.5, seconds);
}
.kampas#
.angle grąžina aptikto spalvos kodo orientaciją.
Prieiga
SensorName.objects[index].angle
Grąžinamosios reikšmės
Returns a double representing the orientation of the detected Color Code in degrees. The value ranges from 0 to 359.9.
Pavyzdžių
// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
Vision1.takeSnapshot(Vision1__BOXCODE);
if (Vision1.objects[0].exists) {
double angle = Vision1.objects[0].angle;
if (70 < angle && angle < 110) {
Drivetrain.turnFor(right, 45, degrees);
}
else if (250 < angle && angle < 290) {
Drivetrain.turnFor(left, 45, degrees);
}
else {
Drivetrain.stop();
}
}
wait(0.5, seconds);
}