Synsensor#
Introduktion#
Vision vision används för att styra och komma åt data från IQ (2:a generationen) Vision Sensor. Denna sensor detekterar och spårar färgsignaturer inom sitt synfält, vilket gör att din robot kan identifiera mål och reagera på visuell information i realtid.
Visionsensorn kan detektera flera signaturobjekt samtidigt och tillhandahåller information såsom objektets position, bredd, höjd och centrumkoordinater.
Klasskonstruktörer#
vision(
int32_t index,
uint8_t bright,
Args&... sigs );
Klassförstörare#
Förstör vision vision objektet och frigör tillhörande resurser.
~vision();
Parametrar#
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Den smarta porten som visionssensorn är ansluten till, skriven som |
|
|
Visionsensorns ljusstyrka. |
|
|
Ett eller flera |
Exempel#
// 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
Medlemsfunktioner#
Klassen vision innehåller följande medlemsfunktioner:
takeSnapshot— Samlar in data för en specifik färgsignatur eller färgkod.installed— Om synsensorn är ansluten till IQ-hjärnan (2:a generationen).
För att komma åt detekterade objektdata efter att ha anropat takeSnapshot, använd de tillgängliga Egenskaper.
Innan några vision medlemsfunktioner anropas måste en vision instans skapas, som visas nedan:
/* 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#
Tar en bild från visionssensorn, bearbetar den baserat på signaturen och uppdaterar matrisen objects Den här metoden kan också begränsa antalet objekt som tas i ögonblicksbilden.
Matrisen objects lagrar objekt sorterade från störst till minst efter bredd, med början vid index 0. Varje objekts properties kan nås med hjälp av dess index. Om inga matchande objekt upptäcks kommer objectCount att vara 0 och objects[i].exists kommer att vara falskt.
1 — Tar en ögonblicksbild och söker efter objekt som matchar det angivna signatur-ID:t.
int32_t takeSnapshot( uint32_t id );
2 — Tar en ögonblicksbild och söker efter objekt som matchar det angivna
vision::codeobjektet.int32_t takeSnapshot( code &cc );
3 — Tar en ögonblicksbild och söker efter objekt som matchar det angivna
vision::signatureobjektet.int32_t takeSnapshot( signature &sig );
4 — Tar en ögonblicksbild och lagrar endast det största angivna antalet objekt som matchar signatur-ID:t.
int32_t takeSnapshot( uint32_t id, uint32_t count );
5 — Tar en ögonblicksbild och lagrar endast det största angivna antalet objekt som matchar det angivna
vision::codeobjektet.int32_t takeSnapshot( code &cc, uint32_t count );
Parameters6 — Tar en ögonblicksbild och lagrar endast det största angivna antalet objekt som matchar det angivna
vision::signatureobjektet.int32_t takeSnapshot( signature &sig, uint32_t count );
Parameter |
Typ |
Beskrivning |
|---|---|---|
|
|
Signatur-ID-numret att söka efter. |
|
|
En referens till ett |
|
|
En referens till ett |
|
|
Det maximala antalet objekt att detektera. |
Returnerar int32_t som representerar antalet matchande objekt som upptäckts.
Visionsensorn måste ta en ögonblicksbild innan objektdata kan nås.
När
countanges lagras endast de största detekterade objekten (upp till den angivna mängden).
Exempel
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#
Returnerar om synsensorn är ansluten till IQ-hjärnan (2:a generationen).
Available Functionsbool installed();
Den här funktionen tar inga parametrar.
Return ValuesReturnerar ett booleskt värde som anger om visionssensorn är ansluten:
-
true— The Vision Sensor is connected. -
false— The Vision Sensor is not connected.
Fastigheter#
Calling takeSnapshot updates the Vision Sensor’s detection results. Each snapshot refreshes the objects array, which contains the detected objects for the requested Color Signature or Color Code.
Visionsensordata nås via egenskaper hos objekt som lagras i Vision1.objects[index], där index börjar vid 0.
Visionsensorns bildupplösning är 316 x 212 pixlar. Objektets position och storleksegenskaper rapporteras i pixelenheter i förhållande till sensorns aktuella vy.
Följande fastigheter är tillgängliga:
largestObject— Väljer det största detekterade objektet från den senaste ögonblicksbilden.objectCount— Returnerar antalet giltiga objekt som lagrats iobjectsobjects— Matris med detekterade objekt uppdaterad avtakeSnapshot..exists— Om objektposten innehåller giltiga data..width— Width of the detected object in pixels..height— Height of the detected object in pixels..centerX— X position of the object’s center in pixels..centerY— Y position of the object’s center in pixels..originX— X position of the object’s top-left corner in pixels..originY— Y position of the object’s top-left corner in pixels..angle— Orientering av den detekterade färgkoden i grader (i förekommande fall).
largestObject#
Hämtar det största detekterade objektet från matrisen objects.
Den här metoden kan användas för att alltid hämta det största objektet från objects utan att ange ett index.
VisionSensor.largestObject
Komponent |
Beskrivning |
|---|---|
|
Namnet på din Vision Sensor-instans. |
Exempel
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#
Returnerar antalet objekt i arrayen objects som ett heltal.
VisionSensor.objectCount
Komponent |
Beskrivning |
|---|---|
|
Namnet på din Vision Sensor-instans. |
Exempel
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 är en array som innehåller de upptäckta objekten från det senaste anropet till takeSnapshot.
Varje element i arrayen representerar ett detekterat objekt och ger åtkomst till dess egenskaper, såsom width, height, centerX med flera.
Objekt är ordnade från störst till minst (efter bredd), med början vid index 0.
VisionSensor.objects[index].property
Komponent |
Beskrivning |
|---|---|
|
Namnet på din Vision Sensor-instans. |
|
Objektindexet i arrayen. Indexet börjar vid |
|
En av de tillgängliga objektegenskaperna. |
.existerar#
.exists returnerar om det angivna objektindexet innehåller ett giltigt detekterat objekt.
Åtkomst
SensorName.objects[index].exists
Returvärden
Returnerar ett booleskt värde som anger om det angivna objektindexet innehåller ett giltigt detekterat objekt:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Exempel
// 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);
}
.bredd#
.width returnerar bredden på det detekterade objektet.
Åtkomst
SensorName.objects[index].width
Returvärden
Returnerar ett int som representerar bredden på det detekterade objektet i pixlar. Värdet varierar från 1 till 316.
Exempel
// 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);
}
.höjd#
.height returnerar höjden på det detekterade objektet.
Åtkomst
SensorName.objects[index].height
Returvärden
Returnerar ett int som representerar höjden på det detekterade objektet i pixlar. Värdet varierar från 1 till 212.
Exempel
// 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 returnerar x-koordinaten för centrum av det detekterade objektet.
Åtkomst
SensorName.objects[index].centerX
Returvärden
Returns an int representing the x-coordinate of the object’s center in pixels. The value ranges from 0 to 316.
Exempel
// 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 returnerar y-koordinaten för det detekterade objektets centrum.
Åtkomst
SensorName.objects[index].centerY
Returvärden
Returns an int representing the y-coordinate of the object’s center in pixels. The value ranges from 0 to 212.
Exempel
// 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 returnerar x-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram.
Åtkomst
SensorName.objects[index].originX
Returvärden
Returnerar ett int som representerar x-koordinaten för det övre vänstra hörnet av objektets avgränsningsram i pixlar. Värdet varierar från 0 till 316.
Exempel
// 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);
}
.ursprungY#
.originY returnerar y-koordinaten för det övre vänstra hörnet av det detekterade objektets avgränsningsram.
Åtkomst
SensorName.objects[index].originY
Returvärden
Returnerar ett int som representerar y-koordinaten för det övre vänstra hörnet av objektets avgränsningsram i pixlar. Värdet varierar från 0 till 212.
Exempel
// 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);
}
.vinkel#
.angle returnerar orienteringen för den detekterade färgkoden.
Åtkomst
SensorName.objects[index].angle
Returvärden
Returns a double representing the orientation of the detected Color Code in degrees. The value ranges from 0 to 359.9.
Exempel
// 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);
}