Redzes sensors#
Ievads#
vision klase tiek izmantota, lai kontrolētu un piekļūtu datiem no IQ (2. paaudzes) redzes sensora. Šis sensors nosaka un izseko krāsu parakstus savā redzes laukā, ļaujot jūsu robotam identificēt mērķus un reaģēt uz vizuālo informāciju reāllaikā.
Redzes sensors var vienlaikus noteikt vairākus signatūrobjektus un sniegt informāciju, piemēram, par objekta atrašanās vietu, platumu, augstumu un centra koordinātām.
Klases konstruktori#
vision(
int32_t index,
uint8_t bright,
Args&... sigs );
Klases iznīcinātājs#
Iznīcina vision objektu un atbrīvo saistītos resursus.
~vision();
Parametri#
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Viedports, kuram ir pievienots redzes sensors, kas tiek rakstīts kā |
|
|
Redzes sensora spilgtuma līmenis. |
|
|
Viens vai vairāki |
Piemēri#
// 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
Dalībnieku funkcijas#
vision klasē ir iekļautas šādas dalībfunkcijas:
takeSnapshot— Iegūst datus konkrētam krāsu parakstam vai krāsu kodam.installed— Vai redzes sensors ir savienots ar IQ (2. paaudzes) smadzenēm.
Lai piekļūtu noteiktajiem objekta datiem pēc takeSnapshot izsaukšanas, izmantojiet pieejamās Properties īpašības.
Pirms jebkuru vision dalībfunkciju izsaukšanas ir jāizveido vision instance, kā parādīts zemāk:
/* 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#
Uztver attēlu no redzes sensora, apstrādā to, pamatojoties uz parakstu, un atjaunina masīvu objects Šī metode var arī ierobežot momentuzņēmumā uzņemto objektu skaitu.
Masīvs objects glabā objektus, kas sakārtoti no lielākā līdz mazākajam pēc platuma, sākot ar indeksu 0. Katra objekta properties var piekļūt, izmantojot tā indeksu. Ja netiek atrasti atbilstoši objekti, objectCount būs 0 un objects[i].exists būs false.
1 — Uzņem momentuzņēmumu un meklē objektus, kas atbilst norādītajam paraksta ID.
int32_t takeSnapshot( uint32_t id );
2 — Uzņem momentuzņēmumu un meklē objektus, kas atbilst norādītajam
vision::codeobjektam.int32_t takeSnapshot( code &cc );
3 — Uzņem momentuzņēmumu un meklē objektus, kas atbilst norādītajam
vision::signatureobjektam.int32_t takeSnapshot( signature &sig );
4 — Uzņem momentuzņēmumu un saglabā tikai lielāko norādīto objektu skaitu, kas atbilst paraksta ID.
int32_t takeSnapshot( uint32_t id, uint32_t count );
5 — Uzņem momentuzņēmumu un saglabā tikai lielāko norādīto objektu skaitu, kas atbilst norādītajam
vision::codeobjektam.int32_t takeSnapshot( code &cc, uint32_t count );
Parameters6 — Uzņem momentuzņēmumu un saglabā tikai lielāko norādīto objektu skaitu, kas atbilst norādītajam
vision::signatureobjektam.int32_t takeSnapshot( signature &sig, uint32_t count );
Parametrs |
Tips |
Apraksts |
|---|---|---|
|
|
Meklējamais paraksta ID numurs. |
|
|
Atsauce uz |
|
|
Atsauce uz |
|
|
Maksimālais detektējamo objektu skaits. |
Atgriež int32_t , kas apzīmē atrasto atbilstošo objektu skaitu.
Pirms piekļuves objekta datiem redzes sensoram ir jāuzņem momentuzņēmums.
Ja ir norādīts
count, tiek saglabāti tikai lielākie atklātie objekti (līdz norādītajam skaitam).
piemēri
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#
Atgriež, vai redzes sensors ir savienots ar IQ (1. paaudzes) smadzenēm.
Available Functionsbool installed();
Šī funkcija nepieņem nekādus parametrus.
Return ValuesAtgriež Būla vērtību, kas norāda, vai ir pievienots redzes sensors:
-
true— The Vision Sensor is connected. -
false— The Vision Sensor is not connected.
Īpašumi#
Izsaucot takeSnapshot, tiek atjaunināti redzes sensora noteikšanas rezultāti. Katrs momentuzņēmums atsvaidzina objects masīvu, kurā ir norādītie pieprasītā krāsu paraksta vai krāsu koda noteiktie objekti.
Redzes sensora datiem piekļūst, izmantojot objektu īpašības, kas saglabātas failā Vision1.objects[index], kur index sākas ar 0.
Redzes sensora attēla izšķirtspēja ir 316 x 212 pikseļi. Objekta pozīcijas un izmēra īpašības tiek ziņotas pikseļu vienībās attiecībā pret sensora pašreizējo skatu.
Ir pieejami šādi īpašumi:
largestObject— Atlasa lielāko noteikto objektu no jaunākā momentuzņēmuma.objectCount— Atgriež derīgo objektu skaitu, kas saglabātiobjects.objects— Noteikto objektu masīvs, ko atjauninatakeSnapshot..exists— Vai objekta ieraksts satur derīgus datus..width— Noteiktā objekta platums pikseļos..height— Noteiktā objekta augstums pikseļos..centerX— X position of the object’s center in pixels..centerY— objekta centra Y pozīcija pikseļos..originX— objekta augšējā kreisā stūra X pozīcija pikseļos..originY— objekta augšējā kreisā stūra Y pozīcija pikseļos..angle— Noteiktā krāsu koda orientācija grādos (ja piemērojams).
largestObject#
Izgūst lielāko noteikto objektu no objects masīva.
Šo metodi var izmantot, lai vienmēr iegūtu lielāko objektu no objects , nenorādot indeksu.
VisionSensor.largestObject
Komponents |
Apraksts |
|---|---|
|
Jūsu redzes sensora instances nosaukums. |
piemēri
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#
Atgriež elementu skaitu masīvā objects kā veselu skaitli.
VisionSensor.objectCount
Komponents |
Apraksts |
|---|---|
|
Jūsu redzes sensora instances nosaukums. |
piemēri
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 ir masīvs, kas satur no jaunākā takeSnapshot izsaukuma noteiktos objektus.
Katrs masīva elements attēlo noteiktu objektu un nodrošina piekļuvi tā īpašībām, piemēram, width, height, centerX un citām.
Objekti tiek sakārtoti no lielākā līdz mazākajam (pēc platuma), sākot ar indeksu 0.
VisionSensor.objects[index].property
Komponents |
Apraksts |
|---|---|
|
Jūsu redzes sensora instances nosaukums. |
|
Objekta indekss masīvā. Indekss sākas ar |
|
Viena no pieejamajām objekta īpašībām. |
.pastāv#
.exists atgriež, vai norādītais objekta indekss satur derīgu noteiktu objektu.
Piekļuve
SensorName.objects[index].exists
Atgriešanas vērtības
Atgriež Būla vērtību, kas norāda, vai norādītais objekta indekss satur derīgu noteiktu objektu:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
piemēri
// 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);
}
.platums#
.width atgriež noteiktā objekta platumu.
Piekļuve
SensorName.objects[index].width
Atgriešanas vērtības
Atgriež skaitli int kas apzīmē noteiktā objekta platumu pikseļos. Vērtība ir no 1 līdz 316.
piemēri
// 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);
}
.augstums#
.height atgriež noteiktā objekta augstumu.
Piekļuve
SensorName.objects[index].height
Atgriešanas vērtības
Atgriež skaitli int kas apzīmē noteiktā objekta augstumu pikseļos. Vērtība ir no 1 līdz 212.
piemēri
// 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 atgriež noteiktā objekta centra x koordinātu.
Piekļuve
SensorName.objects[index].centerX
Atgriešanas vērtības
Atgriež skaitli int kas apzīmē objekta centra x koordinātu pikseļos. Vērtība ir no 0 līdz 316.
piemēri
// 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 atgriež noteiktā objekta centra y koordinātu.
Piekļuve
SensorName.objects[index].centerY
Atgriešanas vērtības
Returns an int representing the y-coordinate of the object’s center in pixels. The value ranges from 0 to 212.
piemēri
// 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra x koordinātu.
Piekļuve
SensorName.objects[index].originX
Atgriešanas vērtības
Returns an int representing the x-coordinate of the top-left corner of the object’s bounding box in pixels. The value ranges from 0 to 316.
piemēri
// 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra y koordinātu.
Piekļuve
SensorName.objects[index].originY
Atgriešanas vērtības
Returns an int representing the y-coordinate of the top-left corner of the object’s bounding box in pixels. The value ranges from 0 to 212.
piemēri
// 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);
}
.leņķis#
.angle atgriež noteiktā krāsu koda orientāciju.
Piekļuve
SensorName.objects[index].angle
Atgriešanas vērtības
Returns a double representing the orientation of the detected Color Code in degrees. The value ranges from 0 to 359.9.
piemēri
// 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);
}